@kindlm/cli 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/yaml/dist/nodes/identity.js","../../../node_modules/yaml/dist/visit.js","../../../node_modules/yaml/dist/doc/directives.js","../../../node_modules/yaml/dist/doc/anchors.js","../../../node_modules/yaml/dist/doc/applyReviver.js","../../../node_modules/yaml/dist/nodes/toJS.js","../../../node_modules/yaml/dist/nodes/Node.js","../../../node_modules/yaml/dist/nodes/Alias.js","../../../node_modules/yaml/dist/nodes/Scalar.js","../../../node_modules/yaml/dist/doc/createNode.js","../../../node_modules/yaml/dist/nodes/Collection.js","../../../node_modules/yaml/dist/stringify/stringifyComment.js","../../../node_modules/yaml/dist/stringify/foldFlowLines.js","../../../node_modules/yaml/dist/stringify/stringifyString.js","../../../node_modules/yaml/dist/stringify/stringify.js","../../../node_modules/yaml/dist/stringify/stringifyPair.js","../../../node_modules/yaml/dist/log.js","../../../node_modules/yaml/dist/schema/yaml-1.1/merge.js","../../../node_modules/yaml/dist/nodes/addPairToJSMap.js","../../../node_modules/yaml/dist/nodes/Pair.js","../../../node_modules/yaml/dist/stringify/stringifyCollection.js","../../../node_modules/yaml/dist/nodes/YAMLMap.js","../../../node_modules/yaml/dist/schema/common/map.js","../../../node_modules/yaml/dist/nodes/YAMLSeq.js","../../../node_modules/yaml/dist/schema/common/seq.js","../../../node_modules/yaml/dist/schema/common/string.js","../../../node_modules/yaml/dist/schema/common/null.js","../../../node_modules/yaml/dist/schema/core/bool.js","../../../node_modules/yaml/dist/stringify/stringifyNumber.js","../../../node_modules/yaml/dist/schema/core/float.js","../../../node_modules/yaml/dist/schema/core/int.js","../../../node_modules/yaml/dist/schema/core/schema.js","../../../node_modules/yaml/dist/schema/json/schema.js","../../../node_modules/yaml/dist/schema/yaml-1.1/binary.js","../../../node_modules/yaml/dist/schema/yaml-1.1/pairs.js","../../../node_modules/yaml/dist/schema/yaml-1.1/omap.js","../../../node_modules/yaml/dist/schema/yaml-1.1/bool.js","../../../node_modules/yaml/dist/schema/yaml-1.1/float.js","../../../node_modules/yaml/dist/schema/yaml-1.1/int.js","../../../node_modules/yaml/dist/schema/yaml-1.1/set.js","../../../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js","../../../node_modules/yaml/dist/schema/yaml-1.1/schema.js","../../../node_modules/yaml/dist/schema/tags.js","../../../node_modules/yaml/dist/schema/Schema.js","../../../node_modules/yaml/dist/stringify/stringifyDocument.js","../../../node_modules/yaml/dist/doc/Document.js","../../../node_modules/yaml/dist/errors.js","../../../node_modules/yaml/dist/compose/resolve-props.js","../../../node_modules/yaml/dist/compose/util-contains-newline.js","../../../node_modules/yaml/dist/compose/util-flow-indent-check.js","../../../node_modules/yaml/dist/compose/util-map-includes.js","../../../node_modules/yaml/dist/compose/resolve-block-map.js","../../../node_modules/yaml/dist/compose/resolve-block-seq.js","../../../node_modules/yaml/dist/compose/resolve-end.js","../../../node_modules/yaml/dist/compose/resolve-flow-collection.js","../../../node_modules/yaml/dist/compose/compose-collection.js","../../../node_modules/yaml/dist/compose/resolve-block-scalar.js","../../../node_modules/yaml/dist/compose/resolve-flow-scalar.js","../../../node_modules/yaml/dist/compose/compose-scalar.js","../../../node_modules/yaml/dist/compose/util-empty-scalar-position.js","../../../node_modules/yaml/dist/compose/compose-node.js","../../../node_modules/yaml/dist/compose/compose-doc.js","../../../node_modules/yaml/dist/compose/composer.js","../../../node_modules/yaml/dist/parse/cst-scalar.js","../../../node_modules/yaml/dist/parse/cst-stringify.js","../../../node_modules/yaml/dist/parse/cst-visit.js","../../../node_modules/yaml/dist/parse/cst.js","../../../node_modules/yaml/dist/parse/lexer.js","../../../node_modules/yaml/dist/parse/line-counter.js","../../../node_modules/yaml/dist/parse/parser.js","../../../node_modules/yaml/dist/public-api.js","../../../node_modules/yaml/dist/index.js","../../core/node_modules/ajv/lib/compile/codegen/code.ts","../../core/node_modules/ajv/lib/compile/codegen/scope.ts","../../core/node_modules/ajv/lib/compile/codegen/index.ts","../../core/node_modules/ajv/lib/compile/util.ts","../../core/node_modules/ajv/lib/compile/names.ts","../../core/node_modules/ajv/lib/compile/errors.ts","../../core/node_modules/ajv/lib/compile/validate/boolSchema.ts","../../core/node_modules/ajv/lib/compile/rules.ts","../../core/node_modules/ajv/lib/compile/validate/applicability.ts","../../core/node_modules/ajv/lib/compile/validate/dataType.ts","../../core/node_modules/ajv/lib/compile/validate/defaults.ts","../../core/node_modules/ajv/lib/vocabularies/code.ts","../../core/node_modules/ajv/lib/compile/validate/keyword.ts","../../core/node_modules/ajv/lib/compile/validate/subschema.ts","../../../node_modules/fast-deep-equal/index.js","../../core/node_modules/json-schema-traverse/index.js","../../core/node_modules/ajv/lib/compile/resolve.ts","../../core/node_modules/ajv/lib/compile/validate/index.ts","../../core/node_modules/ajv/lib/runtime/validation_error.ts","../../core/node_modules/ajv/lib/compile/ref_error.ts","../../core/node_modules/ajv/lib/compile/index.ts","../../core/node_modules/ajv/dist/refs/data.json","../../../node_modules/fast-uri/lib/utils.js","../../../node_modules/fast-uri/lib/schemes.js","../../../node_modules/fast-uri/index.js","../../core/node_modules/ajv/lib/runtime/uri.ts","../../core/node_modules/ajv/lib/core.ts","../../core/node_modules/ajv/lib/vocabularies/core/id.ts","../../core/node_modules/ajv/lib/vocabularies/core/ref.ts","../../core/node_modules/ajv/lib/vocabularies/core/index.ts","../../core/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts","../../core/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts","../../core/node_modules/ajv/lib/runtime/ucs2length.ts","../../core/node_modules/ajv/lib/vocabularies/validation/limitLength.ts","../../core/node_modules/ajv/lib/vocabularies/validation/pattern.ts","../../core/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts","../../core/node_modules/ajv/lib/vocabularies/validation/required.ts","../../core/node_modules/ajv/lib/vocabularies/validation/limitItems.ts","../../core/node_modules/ajv/lib/runtime/equal.ts","../../core/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts","../../core/node_modules/ajv/lib/vocabularies/validation/const.ts","../../core/node_modules/ajv/lib/vocabularies/validation/enum.ts","../../core/node_modules/ajv/lib/vocabularies/validation/index.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/items.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/items2020.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/contains.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/properties.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/not.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/allOf.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/if.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts","../../core/node_modules/ajv/lib/vocabularies/applicator/index.ts","../../core/node_modules/ajv/lib/vocabularies/format/format.ts","../../core/node_modules/ajv/lib/vocabularies/format/index.ts","../../core/node_modules/ajv/lib/vocabularies/metadata.ts","../../core/node_modules/ajv/lib/vocabularies/draft7.ts","../../core/node_modules/ajv/lib/vocabularies/discriminator/types.ts","../../core/node_modules/ajv/lib/vocabularies/discriminator/index.ts","../../core/node_modules/ajv/dist/refs/json-schema-draft-07.json","../../core/node_modules/ajv/lib/ajv.ts","../../../node_modules/ajv-formats/src/formats.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/codegen/code.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/codegen/scope.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/codegen/index.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/util.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/names.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/errors.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/validate/boolSchema.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/rules.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/validate/applicability.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/validate/dataType.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/validate/defaults.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/code.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/validate/keyword.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/validate/subschema.ts","../../../node_modules/ajv-formats/node_modules/json-schema-traverse/index.js","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/resolve.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/validate/index.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/runtime/validation_error.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/ref_error.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/compile/index.ts","../../../node_modules/ajv-formats/node_modules/ajv/dist/refs/data.json","../../../node_modules/ajv-formats/node_modules/ajv/lib/runtime/uri.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/core.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/core/id.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/core/ref.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/core/index.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/runtime/ucs2length.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/limitLength.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/pattern.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/required.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/limitItems.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/runtime/equal.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/const.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/enum.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/validation/index.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/items.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/items2020.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/contains.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/properties.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/not.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/allOf.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/if.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/applicator/index.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/format/format.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/format/index.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/metadata.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/draft7.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/discriminator/types.ts","../../../node_modules/ajv-formats/node_modules/ajv/lib/vocabularies/discriminator/index.ts","../../../node_modules/ajv-formats/node_modules/ajv/dist/refs/json-schema-draft-07.json","../../../node_modules/ajv-formats/node_modules/ajv/lib/ajv.ts","../../../node_modules/ajv-formats/src/limit.ts","../../../node_modules/ajv-formats/src/index.ts","../src/index.ts","../src/commands/init.ts","../src/commands/validate.ts","../../../node_modules/zod/v3/external.js","../../../node_modules/zod/v3/helpers/util.js","../../../node_modules/zod/v3/ZodError.js","../../../node_modules/zod/v3/locales/en.js","../../../node_modules/zod/v3/errors.js","../../../node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/zod/v3/types.js","../../core/src/types/provider.ts","../../core/src/types/result.ts","../../core/src/assertions/tool-calls.ts","../../core/src/assertions/schema.ts","../../core/src/assertions/pii.ts","../../core/src/assertions/keywords.ts","../../core/src/assertions/judge.ts","../../core/src/assertions/drift.ts","../../core/src/assertions/latency.ts","../../core/src/assertions/cost.ts","../../core/src/assertions/registry.ts","../../core/src/assertions/classification.ts","../../core/src/providers/retry.ts","../../core/src/providers/openai.ts","../../core/src/providers/anthropic.ts","../../core/src/providers/ollama.ts","../../core/src/providers/gemini.ts","../../core/src/providers/mistral.ts","../../core/src/providers/cohere.ts","../../core/src/providers/registry.ts","../../core/src/providers/conversation.ts","../../core/src/config/schema.ts","../../core/src/trace/types.ts","../../core/src/config/parser.ts","../../core/src/config/interpolation.ts","../../core/src/engine/aggregator.ts","../../core/src/engine/command.ts","../../core/src/engine/runner.ts","../../core/src/engine/gate.ts","../../core/src/reporters/interface.ts","../../core/src/reporters/pretty.ts","../../core/src/reporters/json.ts","../../core/src/reporters/junit.ts","../../core/src/reporters/compliance.ts","../../core/src/baseline/store.ts","../../core/src/baseline/builder.ts","../../core/src/baseline/compare.ts","../../core/src/trace/parser.ts","../../core/src/trace/mapper.ts","../src/utils/file-reader.ts","../src/commands/test.ts","../src/utils/run-tests.ts","../src/utils/http.ts","../src/utils/spinner.ts","../src/utils/command-executor.ts","../src/utils/last-run.ts","../src/utils/pdf-renderer.ts","../src/commands/baseline.ts","../src/utils/baseline-io.ts","../src/commands/login.ts","../src/cloud/auth.ts","../src/cloud/client.ts","../src/commands/upload.ts","../src/utils/git.ts","../src/utils/env.ts","../src/cloud/upload.ts","../src/commands/trace.ts","../src/utils/trace-server.ts","../src/bin/kindlm.ts"],"sourcesContent":["'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n","'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {\n const tags = {};\n visit.visit(doc.contents, (_key, node) => {\n if (identity.isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexports.Directives = Directives;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit.visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexports.anchorIsValid = anchorIsValid;\nexports.anchorNames = anchorNames;\nexports.createNodeAnchors = createNodeAnchors;\nexports.findNewAnchor = findNewAnchor;\n","'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n","'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !identity.hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexports.toJS = toJS;\n","'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!identity.isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexports.NodeBase = NodeBase;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n constructor(source) {\n super(identity.ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit.visit(doc, {\n Node: (_key, node) => {\n if (identity.isAlias(node) || identity.hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS.toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchors.anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (identity.isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (identity.isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (identity.isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexports.Alias = Alias;\n","'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n constructor(value) {\n super(identity.SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (identity.isDocument(value))\n value = value.contents;\n if (identity.isNode(value))\n return value;\n if (identity.isPair(value)) {\n const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias.Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar.Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[identity.MAP]\n : Symbol.iterator in Object(value)\n ? schema[identity.SEQ]\n : schema[identity.MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar.Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexports.createNode = createNode;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode.createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (identity.isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && identity.isScalar(node) ? node.value : node;\n else\n return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!identity.isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n identity.isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return identity.isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n","'use strict';\n\n/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexports.indentComment = indentComment;\nexports.lineComment = lineComment;\nexports.stringifyComment = stringifyComment;\n","'use strict';\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar foldFlowLines = require('./foldFlowLines.js');\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.Scalar.BLOCK_FOLDED:\n case Scalar.Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexports.stringifyString = stringifyString;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment.stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (identity.isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n if (anchor && anchors.anchorIsValid(anchor)) {\n anchors$1.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (identity.isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (identity.isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = identity.isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : identity.isScalar(node)\n ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (identity.isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n identity.isCollection(key) ||\n (identity.isScalar(key)\n ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (identity.isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && identity.isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n identity.isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && identity.isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexports.stringifyPair = stringifyPair;\n","'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n if (typeof node_process.emitWarning === 'function')\n node_process.emitWarning(warning);\n else\n console.warn(warning);\n }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (identity.isScalar(key) &&\n (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (identity.isSeq(value))\n for (const it of value.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(value))\n for (const it of value)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (!identity.isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n","'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (identity.isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (merge.isMergeKey(ctx, key))\n merge.addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS.toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS.toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (identity.isNode(key) && ctx?.doc) {\n const strCtx = stringify.createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n const k = createNode.createNode(key, undefined, ctx);\n const v = createNode.createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (identity.isNode(key))\n key = key.clone(schema);\n if (identity.isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = identity.isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify.stringify(item, itemCtx, () => (comment = null));\n if (i < items.length - 1)\n str += ',';\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n reqNewline = true;\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = stringifyComment.indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexports.stringifyCollection = stringifyCollection;\n","'use strict';\n\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Pair = require('./Pair.js');\nvar Scalar = require('./Scalar.js');\n\nfunction findPair(items, key) {\n const k = identity.isScalar(key) ? key.value : key;\n for (const it of items) {\n if (identity.isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (identity.isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(identity.MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(Pair.createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (identity.isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair.Pair(pair, pair?.value);\n }\n else\n _pair = new Pair.Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair.Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap.addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!identity.isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap.YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!identity.isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)\n};\n\nexports.map = map;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Scalar = require('./Scalar.js');\nvar toJS = require('./toJS.js');\n\nclass YAMLSeq extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(identity.SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && identity.isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (identity.isScalar(prev) && Scalar.isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS.toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode.createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = identity.isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexports.YAMLSeq = YAMLSeq;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq.YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!identity.isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)\n};\n\nexports.seq = seq;\n","'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexports.string = string;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar.Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexports.boolTag = boolTag;\n","'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^\\d/.test(n)) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.boolTag,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar map = require('../common/map.js');\nvar seq = require('../common/seq.js');\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map.map, seq.seq].concat(jsonScalars, jsonError);\n\nexports.schema = schema;\n","'use strict';\n\nvar node_buffer = require('buffer');\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof node_buffer.Buffer === 'function') {\n return node_buffer.Buffer.from(src, 'base64');\n }\n else if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof node_buffer.Buffer === 'function') {\n str =\n buf instanceof node_buffer.Buffer\n ? buf.toString('base64')\n : node_buffer.Buffer.from(buf.buffer).toString('base64');\n }\n else if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.Scalar.BLOCK_LITERAL);\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexports.binary = binary;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar Scalar = require('../../nodes/Scalar.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nfunction resolvePairs(seq, onError) {\n if (identity.isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (identity.isPair(item))\n continue;\n else if (identity.isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq.YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(Pair.createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexports.createPairs = createPairs;\nexports.pairs = pairs;\nexports.resolvePairs = resolvePairs;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar toJS = require('../../nodes/toJS.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\nvar pairs = require('./pairs.js');\n\nclass YAMLOMap extends YAMLSeq.YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (identity.isPair(pair)) {\n key = toJS.toJS(pair.key, '', ctx);\n value = toJS.toJS(pair.value, key, ctx);\n }\n else {\n key = toJS.toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs$1 = pairs.createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs$1.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs$1 = pairs.resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs$1.items) {\n if (identity.isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs$1);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexports.YAMLOMap = YAMLOMap;\nexports.omap = omap;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar.Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar.Scalar(false),\n stringify: boolStringify\n};\n\nexports.falseTag = falseTag;\nexports.trueTag = trueTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber.stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intBin = intBin;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nclass YAMLSet extends YAMLMap.YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (identity.isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair.Pair(key.key, null);\n else\n pair = new Pair.Pair(key, null);\n const prev = YAMLMap.findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = YAMLMap.findPair(this.items, key);\n return !keepPair && identity.isPair(pair)\n ? identity.isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = YAMLMap.findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair.Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(Pair.createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (identity.isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexports.YAMLSet = YAMLSet;\nexports.set = set;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber.stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.timestamp = timestamp;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar binary = require('./binary.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\nvar merge = require('./merge.js');\nvar omap = require('./omap.js');\nvar pairs = require('./pairs.js');\nvar set = require('./set.js');\nvar timestamp = require('./timestamp.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.trueTag,\n bool.falseTag,\n int.intBin,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float,\n binary.binary,\n merge.merge,\n omap.omap,\n pairs.pairs,\n set.set,\n timestamp.intTime,\n timestamp.floatTime,\n timestamp.timestamp\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar map = require('./common/map.js');\nvar _null = require('./common/null.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar bool = require('./core/bool.js');\nvar float = require('./core/float.js');\nvar int = require('./core/int.js');\nvar schema = require('./core/schema.js');\nvar schema$1 = require('./json/schema.js');\nvar binary = require('./yaml-1.1/binary.js');\nvar merge = require('./yaml-1.1/merge.js');\nvar omap = require('./yaml-1.1/omap.js');\nvar pairs = require('./yaml-1.1/pairs.js');\nvar schema$2 = require('./yaml-1.1/schema.js');\nvar set = require('./yaml-1.1/set.js');\nvar timestamp = require('./yaml-1.1/timestamp.js');\n\nconst schemas = new Map([\n ['core', schema.schema],\n ['failsafe', [map.map, seq.seq, string.string]],\n ['json', schema$1.schema],\n ['yaml11', schema$2.schema],\n ['yaml-1.1', schema$2.schema]\n]);\nconst tagsByName = {\n binary: binary.binary,\n bool: bool.boolTag,\n float: float.float,\n floatExp: float.floatExp,\n floatNaN: float.floatNaN,\n floatTime: timestamp.floatTime,\n int: int.int,\n intHex: int.intHex,\n intOct: int.intOct,\n intTime: timestamp.intTime,\n map: map.map,\n merge: merge.merge,\n null: _null.nullTag,\n omap: omap.omap,\n pairs: pairs.pairs,\n seq: seq.seq,\n set: set.set,\n timestamp: timestamp.timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary.binary,\n 'tag:yaml.org,2002:merge': merge.merge,\n 'tag:yaml.org,2002:omap': omap.omap,\n 'tag:yaml.org,2002:pairs': pairs.pairs,\n 'tag:yaml.org,2002:set': set.set,\n 'tag:yaml.org,2002:timestamp': timestamp.timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge.merge)\n ? schemaTags.concat(merge.merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge.merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexports.coreKnownTags = coreKnownTags;\nexports.getTags = getTags;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar map = require('./common/map.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar tags = require('./tags.js');\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? tags.getTags(compat, 'compat')\n : compat\n ? tags.getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};\n this.tags = tags.getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, identity.MAP, { value: map.map });\n Object.defineProperty(this, identity.SCALAR, { value: string.string });\n Object.defineProperty(this, identity.SEQ, { value: seq.seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexports.Schema = Schema;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = stringify.createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(stringifyComment.indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (identity.isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += stringifyComment.lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify.stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(stringifyComment.indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexports.stringifyDocument = stringifyDocument;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar Collection = require('../nodes/Collection.js');\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar toJS = require('../nodes/toJS.js');\nvar Schema = require('../schema/Schema.js');\nvar stringifyDocument = require('../stringify/stringifyDocument.js');\nvar anchors = require('./anchors.js');\nvar applyReviver = require('./applyReviver.js');\nvar createNode = require('./createNode.js');\nvar directives = require('./directives.js');\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new directives.Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [identity.NODE_TYPE]: { value: identity.DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = identity.isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchors.anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias.Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode.createNode(value, tag, ctx);\n if (flow && identity.isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair.Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (Collection.isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return identity.isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (Collection.isEmptyPath(path))\n return !keepScalar && identity.isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return identity.isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (Collection.isEmptyPath(path))\n return this.contents !== undefined;\n return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (Collection.isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new directives.Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new directives.Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema.Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument.stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (identity.isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n","'use strict';\n\nclass YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '…' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '…';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '…\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexports.YAMLError = YAMLError;\nexports.YAMLParseError = YAMLParseError;\nexports.YAMLWarning = YAMLWarning;\nexports.prettifyError = prettifyError;\n","'use strict';\n\nfunction resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexports.resolveProps = resolveProps;\n","'use strict';\n\nfunction containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexports.containsNewline = containsNewline;\n","'use strict';\n\nvar utilContainsNewline = require('./util-contains-newline.js');\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n utilContainsNewline.containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexports.flowIndentCheck = flowIndentCheck;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (identity.isScalar(a) && identity.isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexports.mapIncludes = mapIncludes;\n","'use strict';\n\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps.resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexports.resolveBlockMap = resolveBlockMap;\n","'use strict';\n\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps.resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexports.resolveBlockSeq = resolveBlockSeq;\n","'use strict';\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps.resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (identity.isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // → key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap.YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = identity.isNode(res)\n ? res\n : new Scalar.Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexports.composeCollection = composeCollection;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = { x: 2, u: 4, U: 8 }[next];\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n if (isNaN(code)) {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n return String.fromCodePoint(code);\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[identity.SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[identity.SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar.Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[identity.SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[identity.SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[identity.SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexports.composeScalar = composeScalar;\n","'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n isSrcToken = false;\n }\n }\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!identity.isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias.Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n","'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document.Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps.resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode.composeNode(ctx, value, props, onError)\n : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexports.composeDoc = composeDoc;\n","'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n Array.prototype.push.apply(doc.errors, this.errors);\n Array.prototype.push.apply(doc.warnings, this.warnings);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n","'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n if (token) {\n const _onError = (pos, code, message) => {\n const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n if (onError)\n onError(offset, code, message);\n else\n throw new errors.YAMLParseError([offset, offset + 1], code, message);\n };\n switch (token.type) {\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n case 'block-scalar':\n return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n }\n }\n return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey,\n indent: indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n const end = context.end ?? [\n { type: 'newline', offset: -1, indent, source: '\\n' }\n ];\n switch (source[0]) {\n case '|':\n case '>': {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, end))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n return { type: 'block-scalar', offset, indent, props, source: body };\n }\n case '\"':\n return { type: 'double-quoted-scalar', offset, indent, source, end };\n case \"'\":\n return { type: 'single-quoted-scalar', offset, indent, source, end };\n default:\n return { type: 'scalar', offset, indent, source, end };\n }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n let indent = 'indent' in token ? token.indent : null;\n if (afterKey && typeof indent === 'number')\n indent += 2;\n if (!type)\n switch (token.type) {\n case 'single-quoted-scalar':\n type = 'QUOTE_SINGLE';\n break;\n case 'double-quoted-scalar':\n type = 'QUOTE_DOUBLE';\n break;\n case 'block-scalar': {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n break;\n }\n default:\n type = 'PLAIN';\n }\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey: implicitKey || indent === null,\n indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n switch (source[0]) {\n case '|':\n case '>':\n setBlockScalarValue(token, source);\n break;\n case '\"':\n setFlowScalarValue(token, source, 'double-quoted-scalar');\n break;\n case \"'\":\n setFlowScalarValue(token, source, 'single-quoted-scalar');\n break;\n default:\n setFlowScalarValue(token, source, 'scalar');\n }\n}\nfunction setBlockScalarValue(token, source) {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n if (token.type === 'block-scalar') {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n header.source = head;\n token.source = body;\n }\n else {\n const { offset } = token;\n const indent = 'indent' in token ? token.indent : -1;\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n if (end)\n for (const st of end)\n switch (st.type) {\n case 'space':\n case 'comment':\n props.push(st);\n break;\n case 'newline':\n props.push(st);\n return true;\n }\n return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n switch (token.type) {\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n token.type = type;\n token.source = source;\n break;\n case 'block-scalar': {\n const end = token.props.slice(1);\n let oa = source.length;\n if (token.props[0].type === 'block-scalar-header')\n oa -= token.props[0].source.length;\n for (const tok of end)\n tok.offset += oa;\n delete token.props;\n Object.assign(token, { type, source, end });\n break;\n }\n case 'block-map':\n case 'block-seq': {\n const offset = token.offset + source.length;\n const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n delete token.items;\n Object.assign(token, { type, source, end: [nl] });\n break;\n }\n default: {\n const indent = 'indent' in token ? token.indent : -1;\n const end = 'end' in token && Array.isArray(token.end)\n ? token.end.filter(st => st.type === 'space' ||\n st.type === 'comment' ||\n st.type === 'newline')\n : [];\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type, indent, source, end });\n }\n }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n","'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n switch (token.type) {\n case 'block-scalar': {\n let res = '';\n for (const tok of token.props)\n res += stringifyToken(tok);\n return res + token.source;\n }\n case 'block-map':\n case 'block-seq': {\n let res = '';\n for (const item of token.items)\n res += stringifyItem(item);\n return res;\n }\n case 'flow-collection': {\n let res = token.start.source;\n for (const item of token.items)\n res += stringifyItem(item);\n for (const st of token.end)\n res += st.source;\n return res;\n }\n case 'document': {\n let res = stringifyItem(token);\n if (token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n default: {\n let res = token.source;\n if ('end' in token && token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n let res = '';\n for (const st of start)\n res += st.source;\n if (key)\n res += stringifyToken(key);\n if (sep)\n for (const st of sep)\n res += st.source;\n if (value)\n res += stringifyToken(value);\n return res;\n}\n\nexports.stringify = stringify;\n","'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` – Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` – Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` – Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` – The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n","'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n","'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === cst.BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield cst.DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return yield* this.parseBlockStart();\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield cst.FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield cst.SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield cst.SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n switch (this.charAt(0)) {\n case '!':\n return ((yield* this.pushTag()) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '&':\n return ((yield* this.pushUntil(isNotAnchorChar)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n return ((yield* this.pushCount(1)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n }\n }\n }\n return 0;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexports.Lexer = Lexer;\n","'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexports.LineCounter = LineCounter;\n","'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n Array.prototype.push.apply(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n Array.prototype.push.apply(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (identity.isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n","// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport abstract class _CodeOrName {\n abstract readonly str: string\n abstract readonly names: UsedNames\n abstract toString(): string\n abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n readonly str: string\n constructor(s: string) {\n super()\n if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n this.str = s\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n return false\n }\n\n get names(): UsedNames {\n return {[this.str]: 1}\n }\n}\n\nexport class _Code extends _CodeOrName {\n readonly _items: readonly CodeItem[]\n private _str?: string\n private _names?: UsedNames\n\n constructor(code: string | readonly CodeItem[]) {\n super()\n this._items = typeof code === \"string\" ? [code] : code\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n if (this._items.length > 1) return false\n const item = this._items[0]\n return item === \"\" || item === '\"\"'\n }\n\n get str(): string {\n return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n }\n\n get names(): UsedNames {\n return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n return names\n }, {}))\n }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n const code: CodeItem[] = [strs[0]]\n let i = 0\n while (i < args.length) {\n addCodeArg(code, args[i])\n code.push(strs[++i])\n }\n return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n const expr: CodeItem[] = [safeStringify(strs[0])]\n let i = 0\n while (i < args.length) {\n expr.push(plus)\n addCodeArg(expr, args[i])\n expr.push(plus, safeStringify(strs[++i]))\n }\n optimize(expr)\n return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n if (arg instanceof _Code) code.push(...arg._items)\n else if (arg instanceof Name) code.push(arg)\n else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n let i = 1\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1])\n if (res !== undefined) {\n expr.splice(i - 1, 3, res)\n continue\n }\n expr[i++] = \"+\"\n }\n i++\n }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n if (b === '\"\"') return a\n if (a === '\"\"') return b\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"') return\n if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n return\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n return new _Code(`${key}`)\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n return new _Code(rx.toString())\n}\n","import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n prefix: string\n index: number\n}\n\nexport interface NameValue {\n ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n readonly value?: NameValue\n constructor(name: ValueScopeName) {\n super(`CodeGen: \"code\" for ${name} not defined`)\n this.value = name.value\n }\n}\n\ninterface ScopeOptions {\n prefixes?: Set<string>\n parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n scope: ScopeStore\n es5?: boolean\n lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n Started,\n Completed,\n}\n\nexport type UsedScopeValues = {\n [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n const: new Name(\"const\"),\n let: new Name(\"let\"),\n var: new Name(\"var\"),\n}\n\nexport class Scope {\n protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n protected readonly _prefixes?: Set<string>\n protected readonly _parent?: Scope\n\n constructor({prefixes, parent}: ScopeOptions = {}) {\n this._prefixes = prefixes\n this._parent = parent\n }\n\n toName(nameOrPrefix: Name | string): Name {\n return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n }\n\n name(prefix: string): Name {\n return new Name(this._newName(prefix))\n }\n\n protected _newName(prefix: string): string {\n const ng = this._names[prefix] || this._nameGroup(prefix)\n return `${prefix}${ng.index++}`\n }\n\n private _nameGroup(prefix: string): NameGroup {\n if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n }\n return (this._names[prefix] = {prefix, index: 0})\n }\n}\n\ninterface ScopePath {\n property: string\n itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n readonly prefix: string\n value?: NameValue\n scopePath?: Code\n\n constructor(prefix: string, nameStr: string) {\n super(nameStr)\n this.prefix = prefix\n }\n\n setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n this.value = value\n this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n protected readonly _values: ScopeValues = {}\n protected readonly _scope: ScopeStore\n readonly opts: VSOptions\n\n constructor(opts: ValueScopeOptions) {\n super(opts)\n this._scope = opts.scope\n this.opts = {...opts, _n: opts.lines ? line : nil}\n }\n\n get(): ScopeStore {\n return this._scope\n }\n\n name(prefix: string): ValueScopeName {\n return new ValueScopeName(prefix, this._newName(prefix))\n }\n\n value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n const name = this.toName(nameOrPrefix) as ValueScopeName\n const {prefix} = name\n const valueKey = value.key ?? value.ref\n let vs = this._values[prefix]\n if (vs) {\n const _name = vs.get(valueKey)\n if (_name) return _name\n } else {\n vs = this._values[prefix] = new Map()\n }\n vs.set(valueKey, name)\n\n const s = this._scope[prefix] || (this._scope[prefix] = [])\n const itemIndex = s.length\n s[itemIndex] = value.ref\n name.setValue(value, {property: prefix, itemIndex})\n return name\n }\n\n getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n const vs = this._values[prefix]\n if (!vs) return\n return vs.get(keyOrRef)\n }\n\n scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n return this._reduceValues(values, (name: ValueScopeName) => {\n if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return _`${scopeName}${name.scopePath}`\n })\n }\n\n scopeCode(\n values: ScopeValues | ScopeValueSets = this._values,\n usedValues?: UsedScopeValues,\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n return this._reduceValues(\n values,\n (name: ValueScopeName) => {\n if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return name.value.code\n },\n usedValues,\n getCode\n )\n }\n\n private _reduceValues(\n values: ScopeValues | ScopeValueSets,\n valueCode: (n: ValueScopeName) => Code | undefined,\n usedValues: UsedScopeValues = {},\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n let code: Code = nil\n for (const prefix in values) {\n const vs = values[prefix]\n if (!vs) continue\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n vs.forEach((name: ValueScopeName) => {\n if (nameSet.has(name)) return\n nameSet.set(name, UsedValueState.Started)\n let c = valueCode(name)\n if (c) {\n const def = this.opts.es5 ? varKinds.var : varKinds.const\n code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n } else if ((c = getCode?.(name))) {\n code = _`${code}${c}${this.opts._n}`\n } else {\n throw new ValueError(name)\n }\n nameSet.set(name, UsedValueState.Completed)\n })\n }\n return code\n }\n}\n","import type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n GT: new _Code(\">\"),\n GTE: new _Code(\">=\"),\n LT: new _Code(\"<\"),\n LTE: new _Code(\"<=\"),\n EQ: new _Code(\"===\"),\n NEQ: new _Code(\"!==\"),\n NOT: new _Code(\"!\"),\n OR: new _Code(\"||\"),\n AND: new _Code(\"&&\"),\n ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n abstract readonly names: UsedNames\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n return this\n }\n\n optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n return this\n }\n\n // get count(): number {\n // return 1\n // }\n}\n\nclass Def extends Node {\n constructor(\n private readonly varKind: Name,\n private readonly name: Name,\n private rhs?: SafeExpr\n ) {\n super()\n }\n\n render({es5, _n}: CGOptions): string {\n const varKind = es5 ? varKinds.var : this.varKind\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n return `${varKind} ${this.name}${rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!names[this.name.str]) return\n if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n }\n}\n\nclass Assign extends Node {\n constructor(\n readonly lhs: Code,\n public rhs: SafeExpr,\n private readonly sideEffects?: boolean\n ) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} = ${this.rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n return addExprNames(names, this.rhs)\n }\n}\n\nclass AssignOp extends Assign {\n constructor(\n lhs: Code,\n private readonly op: Code,\n rhs: SafeExpr,\n sideEffects?: boolean\n ) {\n super(lhs, rhs, sideEffects)\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n }\n}\n\nclass Label extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label: Name) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.label}:` + _n\n }\n}\n\nclass Break extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label?: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n const label = this.label ? ` ${this.label}` : \"\"\n return `break${label};` + _n\n }\n}\n\nclass Throw extends Node {\n constructor(readonly error: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `throw ${this.error};` + _n\n }\n\n get names(): UsedNames {\n return this.error.names\n }\n}\n\nclass AnyCode extends Node {\n constructor(private code: SafeExpr) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.code};` + _n\n }\n\n optimizeNodes(): this | undefined {\n return `${this.code}` ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n this.code = optimizeExpr(this.code, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.code instanceof _CodeOrName ? this.code.names : {}\n }\n}\n\nabstract class ParentNode extends Node {\n constructor(readonly nodes: ChildNode[] = []) {\n super()\n }\n\n render(opts: CGOptions): string {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n }\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n const n = nodes[i].optimizeNodes()\n if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n else if (n) nodes[i] = n\n else nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i]\n if (n.optimizeNames(names, constants)) continue\n subtractNames(names, n.names)\n nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n get names(): UsedNames {\n return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n }\n\n // get count(): number {\n // return this.nodes.reduce((c, n) => c + n.count, 1)\n // }\n}\n\nabstract class BlockNode extends ParentNode {\n render(opts: CGOptions): string {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n static readonly kind = \"if\"\n else?: If | Else\n constructor(\n private condition: Code | boolean,\n nodes?: ChildNode[]\n ) {\n super(nodes)\n }\n\n render(opts: CGOptions): string {\n let code = `if(${this.condition})` + super.render(opts)\n if (this.else) code += \"else \" + this.else.render(opts)\n return code\n }\n\n optimizeNodes(): If | ChildNode[] | undefined {\n super.optimizeNodes()\n const cond = this.condition\n if (cond === true) return this.nodes // else is ignored here\n let e = this.else\n if (e) {\n const ns = e.optimizeNodes()\n e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n }\n if (e) {\n if (cond === false) return e instanceof If ? e : e.nodes\n if (this.nodes.length) return this\n return new If(not(cond), e instanceof If ? [e] : e.nodes)\n }\n if (cond === false || !this.nodes.length) return undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n this.else = this.else?.optimizeNames(names, constants)\n if (!(super.optimizeNames(names, constants) || this.else)) return\n this.condition = optimizeExpr(this.condition, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n addExprNames(names, this.condition)\n if (this.else) addNames(names, this.else.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.else?.count || 0)\n // }\n}\n\nabstract class For extends BlockNode {\n static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n constructor(private iteration: Code) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.iteration})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iteration = optimizeExpr(this.iteration, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iteration.names)\n }\n}\n\nclass ForRange extends For {\n constructor(\n private readonly varKind: Name,\n private readonly name: Name,\n private readonly from: SafeExpr,\n private readonly to: SafeExpr\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n const varKind = opts.es5 ? varKinds.var : this.varKind\n const {name, from, to} = this\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n }\n\n get names(): UsedNames {\n const names = addExprNames(super.names, this.from)\n return addExprNames(names, this.to)\n }\n}\n\nclass ForIter extends For {\n constructor(\n private readonly loop: \"of\" | \"in\",\n private readonly varKind: Name,\n private readonly name: Name,\n private iterable: Code\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iterable = optimizeExpr(this.iterable, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iterable.names)\n }\n}\n\nclass Func extends BlockNode {\n static readonly kind = \"func\"\n constructor(\n public name: Name,\n public args: Code,\n public async?: boolean\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n const _async = this.async ? \"async \" : \"\"\n return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n }\n}\n\nclass Return extends ParentNode {\n static readonly kind = \"return\"\n\n render(opts: CGOptions): string {\n return \"return \" + super.render(opts)\n }\n}\n\nclass Try extends BlockNode {\n catch?: Catch\n finally?: Finally\n\n render(opts: CGOptions): string {\n let code = \"try\" + super.render(opts)\n if (this.catch) code += this.catch.render(opts)\n if (this.finally) code += this.finally.render(opts)\n return code\n }\n\n optimizeNodes(): this {\n super.optimizeNodes()\n this.catch?.optimizeNodes() as Catch | undefined\n this.finally?.optimizeNodes() as Finally | undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n super.optimizeNames(names, constants)\n this.catch?.optimizeNames(names, constants)\n this.finally?.optimizeNames(names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n if (this.catch) addNames(names, this.catch.names)\n if (this.finally) addNames(names, this.finally.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n // }\n}\n\nclass Catch extends BlockNode {\n static readonly kind = \"catch\"\n constructor(readonly error: Name) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `catch(${this.error})` + super.render(opts)\n }\n}\n\nclass Finally extends BlockNode {\n static readonly kind = \"finally\"\n render(opts: CGOptions): string {\n return \"finally\" + super.render(opts)\n }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n | typeof If\n | typeof Else\n | typeof For\n | typeof Func\n | typeof Return\n | typeof Catch\n | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n es5?: boolean\n lines?: boolean\n ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n readonly _scope: Scope\n readonly _extScope: ValueScope\n readonly _values: ScopeValueSets = {}\n private readonly _nodes: ParentNode[]\n private readonly _blockStarts: number[] = []\n private readonly _constants: Constants = {}\n private readonly opts: CGOptions\n\n constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n this._extScope = extScope\n this._scope = new Scope({parent: extScope})\n this._nodes = [new Root()]\n }\n\n toString(): string {\n return this._root.render(this.opts)\n }\n\n // returns unique name in the internal scope\n name(prefix: string): Name {\n return this._scope.name(prefix)\n }\n\n // reserves unique name in the external scope\n scopeName(prefix: string): ValueScopeName {\n return this._extScope.name(prefix)\n }\n\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n const name = this._extScope.value(prefixOrName, value)\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n vs.add(name)\n return name\n }\n\n getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n return this._extScope.getValue(prefix, keyOrRef)\n }\n\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName: Name): Code {\n return this._extScope.scopeRefs(scopeName, this._values)\n }\n\n scopeCode(): Code {\n return this._extScope.scopeCode(this._values)\n }\n\n private _def(\n varKind: Name,\n nameOrPrefix: Name | string,\n rhs?: SafeExpr,\n constant?: boolean\n ): Name {\n const name = this._scope.toName(nameOrPrefix)\n if (rhs !== undefined && constant) this._constants[name.str] = rhs\n this._leafNode(new Def(varKind, name, rhs))\n return name\n }\n\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n }\n\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n }\n\n // `var` declaration with optional assignment\n var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n }\n\n // assignment code\n assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n return this._leafNode(new Assign(lhs, rhs, sideEffects))\n }\n\n // `+=` code\n add(lhs: Code, rhs: SafeExpr): CodeGen {\n return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n }\n\n // appends passed SafeExpr to code or executes Block\n code(c: Block | SafeExpr): CodeGen {\n if (typeof c == \"function\") c()\n else if (c !== nil) this._leafNode(new AnyCode(c))\n return this\n }\n\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n const code: CodeItem[] = [\"{\"]\n for (const [key, value] of keyValues) {\n if (code.length > 1) code.push(\",\")\n code.push(key)\n if (key !== value || this.opts.es5) {\n code.push(\":\")\n addCodeArg(code, value)\n }\n }\n code.push(\"}\")\n return new _Code(code)\n }\n\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n this._blockNode(new If(condition))\n\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf()\n } else if (thenBody) {\n this.code(thenBody).endIf()\n } else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body')\n }\n return this\n }\n\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition: Code | boolean): CodeGen {\n return this._elseNode(new If(condition))\n }\n\n // `else` clause - only valid after `if` or `else if` clauses\n else(): CodeGen {\n return this._elseNode(new Else())\n }\n\n // end `if` statement (needed if gen.if was used only with condition)\n endIf(): CodeGen {\n return this._endBlockNode(If, Else)\n }\n\n private _for(node: For, forBody?: Block): CodeGen {\n this._blockNode(node)\n if (forBody) this.code(forBody).endFor()\n return this\n }\n\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration: Code, forBody?: Block): CodeGen {\n return this._for(new ForLoop(iteration), forBody)\n }\n\n // `for` statement for a range of values\n forRange(\n nameOrPrefix: Name | string,\n from: SafeExpr,\n to: SafeExpr,\n forBody: (index: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n }\n\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(\n nameOrPrefix: Name | string,\n iterable: Code,\n forBody: (item: Name) => void,\n varKind: Code = varKinds.const\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n if (this.opts.es5) {\n const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n this.var(name, _`${arr}[${i}]`)\n forBody(name)\n })\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n }\n\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(\n nameOrPrefix: Name | string,\n obj: Code,\n forBody: (item: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n ): CodeGen {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n }\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n }\n\n // end `for` loop\n endFor(): CodeGen {\n return this._endBlockNode(For)\n }\n\n // `label` statement\n label(label: Name): CodeGen {\n return this._leafNode(new Label(label))\n }\n\n // `break` statement\n break(label?: Code): CodeGen {\n return this._leafNode(new Break(label))\n }\n\n // `return` statement\n return(value: Block | SafeExpr): CodeGen {\n const node = new Return()\n this._blockNode(node)\n this.code(value)\n if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n return this._endBlockNode(Return)\n }\n\n // `try` statement\n try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n const node = new Try()\n this._blockNode(node)\n this.code(tryBody)\n if (catchCode) {\n const error = this.name(\"e\")\n this._currNode = node.catch = new Catch(error)\n catchCode(error)\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally()\n this.code(finallyCode)\n }\n return this._endBlockNode(Catch, Finally)\n }\n\n // `throw` statement\n throw(error: Code): CodeGen {\n return this._leafNode(new Throw(error))\n }\n\n // start self-balancing block\n block(body?: Block, nodeCount?: number): CodeGen {\n this._blockStarts.push(this._nodes.length)\n if (body) this.code(body).endBlock(nodeCount)\n return this\n }\n\n // end the current self-balancing block\n endBlock(nodeCount?: number): CodeGen {\n const len = this._blockStarts.pop()\n if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n const toClose = this._nodes.length - len\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n }\n this._nodes.length = len\n return this\n }\n\n // `function` heading (or definition if funcBody is passed)\n func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n this._blockNode(new Func(name, args, async))\n if (funcBody) this.code(funcBody).endFunc()\n return this\n }\n\n // end function definition\n endFunc(): CodeGen {\n return this._endBlockNode(Func)\n }\n\n optimize(n = 1): void {\n while (n-- > 0) {\n this._root.optimizeNodes()\n this._root.optimizeNames(this._root.names, this._constants)\n }\n }\n\n private _leafNode(node: LeafNode): CodeGen {\n this._currNode.nodes.push(node)\n return this\n }\n\n private _blockNode(node: StartBlockNode): void {\n this._currNode.nodes.push(node)\n this._nodes.push(node)\n }\n\n private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n const n = this._currNode\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop()\n return this\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n }\n\n private _elseNode(node: If | Else): CodeGen {\n const n = this._currNode\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"')\n }\n this._currNode = n.else = node\n return this\n }\n\n private get _root(): Root {\n return this._nodes[0] as Root\n }\n\n private get _currNode(): ParentNode {\n const ns = this._nodes\n return ns[ns.length - 1]\n }\n\n private set _currNode(node: ParentNode) {\n const ns = this._nodes\n ns[ns.length - 1] = node\n }\n\n // get nodeCount(): number {\n // return this._root.count\n // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n if (expr instanceof Name) return replaceName(expr)\n if (!canOptimize(expr)) return expr\n return new _Code(\n expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n if (c instanceof Name) c = replaceName(c)\n if (c instanceof _Code) items.push(...c._items)\n else items.push(c)\n return items\n }, [])\n )\n\n function replaceName(n: Name): SafeExpr {\n const c = constants[n.str]\n if (c === undefined || names[n.str] !== 1) return n\n delete names[n.str]\n return c\n }\n\n function canOptimize(e: SafeExpr): e is _Code {\n return (\n e instanceof _Code &&\n e._items.some(\n (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n )\n )\n }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n return x instanceof Name ? x : _`(${x})`\n}\n","import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n const hash: {[K in T]?: true} = {}\n for (const item of arr) hash[item] = true\n return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n if (typeof schema == \"boolean\") return schema\n if (Object.keys(schema).length === 0) return true\n checkUnknownRules(it, schema)\n return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n const {opts, self} = it\n if (!opts.strictSchema) return\n if (typeof schema === \"boolean\") return\n const rules = self.RULES.keywords\n for (const key in schema) {\n if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n }\n}\n\nexport function schemaHasRules(\n schema: AnySchema,\n rules: {[Key in string]?: boolean | Rule}\n): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (rules[key]) return true\n return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n return false\n}\n\nexport function schemaRefOrVal(\n {topSchemaRef, schemaPath}: SchemaObjCxt,\n schema: unknown,\n keyword: string,\n $data?: string | false\n): Code | number | boolean {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n if (typeof schema == \"string\") return _`${schema}`\n }\n return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n if (typeof str == \"number\") return `${str}`\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n if (Array.isArray(xs)) {\n for (const x of xs) f(x)\n } else {\n f(xs)\n }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n gen: CodeGen,\n from: Name | T,\n to: Name | Exclude<T, true> | undefined,\n toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n mergeToName: (gen: CodeGen, from: T, to: Name) => void\n mergeValues: (from: T, to: Exclude<T, true>) => T\n resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n mergeNames,\n mergeToName,\n mergeValues,\n resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n return (gen, from, to, toName) => {\n const res =\n to === undefined\n ? from\n : to instanceof Name\n ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to)\n return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n }\n}\n\ninterface MergeEvaluated {\n props: MergeEvaluatedFunc<EvaluatedProperties>\n items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n gen.if(\n _`${from} === true`,\n () => gen.assign(to, true),\n () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n )\n }),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true)\n } else {\n gen.assign(to, _`${to} || {}`)\n setEvaluated(gen, to, from)\n }\n }),\n mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () =>\n gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n if (ps === true) return gen.var(\"props\", true)\n const props = gen.var(\"props\", _`{}`)\n if (ps !== undefined) setEvaluated(gen, props, ps)\n return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n })\n}\n\nexport enum Type {\n Num,\n Str,\n}\n\nexport function getErrorPath(\n dataProp: Name | string | number,\n dataPropType?: Type,\n jsPropertySyntax?: boolean\n): Code | string {\n // let path\n if (dataProp instanceof Name) {\n const isNumber = dataPropType === Type.Num\n return jsPropertySyntax\n ? isNumber\n ? _`\"[\" + ${dataProp} + \"]\"`\n : _`\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? _`\"/\" + ${dataProp}`\n : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n it: SchemaCxt,\n msg: string,\n mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n if (!mode) return\n msg = `strict mode: ${msg}`\n if (mode === true) throw new Error(msg)\n it.self.logger.warn(msg)\n}\n","import {Name} from \"./codegen\"\n\nconst names = {\n // validation function arguments\n data: new Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new Name(\"instancePath\"),\n parentData: new Name(\"parentData\"),\n parentDataProperty: new Name(\"parentDataProperty\"),\n rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new Name(\"vErrors\"), // null or array of validation errors\n errors: new Name(\"errors\"), // counter of validation errors\n this: new Name(\"this\"),\n // \"globals\"\n self: new Name(\"self\"),\n scope: new Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new Name(\"json\"),\n jsonPos: new Name(\"jsonPos\"),\n jsonLen: new Name(\"jsonLen\"),\n jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n","import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n message: ({keyword, schemaType}) =>\n schemaType\n ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n instancePath?: Code\n schemaPath?: string\n parentSchema?: boolean\n}\n\nexport function reportError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths,\n overrideAllErrors?: boolean\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n if (overrideAllErrors ?? (compositeRule || allErrors)) {\n addError(gen, errObj)\n } else {\n returnErrors(it, _`[${errObj}]`)\n }\n}\n\nexport function reportExtraError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n addError(gen, errObj)\n if (!(compositeRule || allErrors)) {\n returnErrors(it, N.vErrors)\n }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n gen.assign(N.errors, errsCount)\n gen.if(_`${N.vErrors} !== null`, () =>\n gen.if(\n errsCount,\n () => gen.assign(_`${N.vErrors}.length`, errsCount),\n () => gen.assign(N.vErrors, null)\n )\n )\n}\n\nexport function extendErrors({\n gen,\n keyword,\n schemaValue,\n data,\n errsCount,\n it,\n}: KeywordErrorCxt): void {\n /* istanbul ignore if */\n if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n const err = gen.name(\"err\")\n gen.forRange(\"i\", errsCount, N.errors, (i) => {\n gen.const(err, _`${N.vErrors}[${i}]`)\n gen.if(_`${err}.instancePath === undefined`, () =>\n gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n )\n gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n if (it.opts.verbose) {\n gen.assign(_`${err}.schema`, schemaValue)\n gen.assign(_`${err}.data`, data)\n }\n })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n const err = gen.const(\"err\", errObj)\n gen.if(\n _`${N.vErrors} === null`,\n () => gen.assign(N.vErrors, _`[${err}]`),\n _`${N.vErrors}.push(${err})`\n )\n gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n const {gen, validateName, schemaEnv} = it\n if (schemaEnv.$async) {\n gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n } else {\n gen.assign(_`${validateName}.errors`, errs)\n gen.return(false)\n }\n}\n\nconst E = {\n keyword: new Name(\"keyword\"),\n schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n params: new Name(\"params\"),\n propertyName: new Name(\"propertyName\"),\n message: new Name(\"message\"),\n schema: new Name(\"schema\"),\n parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths?: ErrorPaths\n): Code {\n const {createErrors} = cxt.it\n if (createErrors === false) return _`{}`\n return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths: ErrorPaths = {}\n): Code {\n const {gen, it} = cxt\n const keyValues: [Name, SafeExpr | string][] = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ]\n extraErrorProps(cxt, error, keyValues)\n return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n const instPath = instancePath\n ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n : errorPath\n return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n if (schemaPath) {\n schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n }\n return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n cxt: KeywordErrorCxt,\n {params, message}: KeywordErrorDefinition,\n keyValues: [Name, SafeExpr | string][]\n): void {\n const {keyword, data, schemaValue, it} = cxt\n const {opts, propertyName, topSchemaRef, schemaPath} = it\n keyValues.push(\n [E.keyword, keyword],\n [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n )\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n }\n if (opts.verbose) {\n keyValues.push(\n [E.schema, schemaValue],\n [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n [N.data, data]\n )\n }\n if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n","import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n const {gen, schema, validateName} = it\n if (schema === false) {\n falseSchemaError(it, false)\n } else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(N.data)\n } else {\n gen.assign(_`${validateName}.errors`, null)\n gen.return(true)\n }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n const {gen, schema} = it\n if (schema === false) {\n gen.var(valid, false) // TODO var\n falseSchemaError(it)\n } else {\n gen.var(valid, true) // TODO var\n }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n const {gen, data} = it\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt: KeywordErrorCxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n }\n reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n","import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = (typeof _jsonTypes)[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n rules: RuleGroup[]\n post: RuleGroup\n all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n types: ValidationTypes\n}\n\nexport interface RuleGroup {\n type?: JSONType\n rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n keyword: string\n definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n number: {type: \"number\", rules: []},\n string: {type: \"string\", rules: []},\n array: {type: \"array\", rules: []},\n object: {type: \"object\", rules: []},\n }\n return {\n types: {...groups, integer: true, boolean: true, null: true},\n rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n post: {rules: []},\n all: {},\n keywords: {},\n }\n}\n","import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n {schema, self}: SchemaObjCxt,\n type: JSONType\n): boolean | undefined {\n const group = self.RULES.types[type]\n return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n return (\n schema[rule.keyword] !== undefined ||\n rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n )\n}\n","import type {\n KeywordErrorDefinition,\n KeywordErrorCxt,\n ErrorObject,\n AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n Correct,\n Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n const types = getJSONTypes(schema.type)\n const hasNull = types.includes(\"null\")\n if (hasNull) {\n if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n } else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"')\n }\n if (schema.nullable === true) types.push(\"null\")\n }\n return types\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n if (types.every(isJSONType)) return types\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n const {gen, data, opts} = it\n const coerceTo = coerceToTypes(types, opts.coerceTypes)\n const checkTypes =\n types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n gen.if(wrongType, () => {\n if (coerceTo.length) coerceData(it, types, coerceTo)\n else reportTypeError(it)\n })\n }\n return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n const {gen, data, opts} = it\n const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n const coerced = gen.let(\"coerced\", _`undefined`)\n if (opts.coerceTypes === \"array\") {\n gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n gen\n .assign(data, _`${data}[0]`)\n .assign(dataType, _`typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n )\n }\n gen.if(_`${coerced} !== undefined`)\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t)\n }\n }\n gen.else()\n reportTypeError(it)\n gen.endIf()\n\n gen.if(_`${coerced} !== undefined`, () => {\n gen.assign(data, coerced)\n assignParentData(it, coerced)\n })\n\n function coerceSpecificType(t: string): void {\n switch (t) {\n case \"string\":\n gen\n .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, _`\"\" + ${data}`)\n .elseIf(_`${data} === null`)\n .assign(coerced, _`\"\"`)\n return\n case \"number\":\n gen\n .elseIf(\n _`${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"integer\":\n gen\n .elseIf(\n _`${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"boolean\":\n gen\n .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf(_`${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true)\n return\n case \"null\":\n gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n gen.assign(coerced, null)\n return\n\n case \"array\":\n gen\n .elseIf(\n _`${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`\n )\n .assign(coerced, _`[${data}]`)\n }\n }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n // TODO use gen.property\n gen.if(_`${parentData} !== undefined`, () =>\n gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n )\n}\n\nexport function checkDataType(\n dataType: JSONType,\n data: Name,\n strictNums?: boolean | \"log\",\n correct = DataType.Correct\n): Code {\n const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n let cond: Code\n switch (dataType) {\n case \"null\":\n return _`${data} ${EQ} null`\n case \"array\":\n cond = _`Array.isArray(${data})`\n break\n case \"object\":\n cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n break\n case \"integer\":\n cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n break\n case \"number\":\n cond = numCond()\n break\n default:\n return _`typeof ${data} ${EQ} ${dataType}`\n }\n return correct === DataType.Correct ? cond : not(cond)\n\n function numCond(_cond: Code = nil): Code {\n return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n }\n}\n\nexport function checkDataTypes(\n dataTypes: JSONType[],\n data: Name,\n strictNums?: boolean | \"log\",\n correct?: DataType\n): Code {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct)\n }\n let cond: Code\n const types = toHash(dataTypes)\n if (types.array && types.object) {\n const notObj = _`typeof ${data} != \"object\"`\n cond = types.null ? notObj : _`!${data} || ${notObj}`\n delete types.null\n delete types.array\n delete types.object\n } else {\n cond = nil\n }\n if (types.number) delete types.integer\n for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n message: ({schema}) => `must be ${schema}`,\n params: ({schema, schemaValue}) =>\n typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n const cxt = getTypeErrorContext(it)\n reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n const {gen, data, schema} = it\n const schemaCode = schemaRefOrVal(it, schema, \"type\")\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n }\n}\n","import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n const {properties, items} = it.schema\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default)\n }\n } else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n const {gen, compositeRule, data, opts} = it\n if (defaultValue === undefined) return\n const childData = _`${data}${getProperty(prop)}`\n if (compositeRule) {\n checkStrictMode(it, `default is ignored for: ${childData}`)\n return\n }\n\n let condition = _`${childData} === undefined`\n if (opts.useDefaults === \"empty\") {\n condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n","import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n const {gen, data, it} = cxt\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({missingProperty: _`${prop}`}, true)\n cxt.error()\n })\n}\n\nexport function checkMissingProp(\n {gen, data, it: {opts}}: KeywordCxt,\n properties: string[],\n missing: Name\n): Code {\n return or(\n ...properties.map((prop) =>\n and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n )\n )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n cxt.setParams({missingProperty: missing}, true)\n cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: _`Object.prototype.hasOwnProperty`,\n })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} !== undefined`\n return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} === undefined`\n return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n return allSchemaProperties(schemaMap).filter(\n (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n )\n}\n\nexport function callValidateCode(\n {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n func: Code,\n context: Code,\n passSchema?: boolean\n): Code {\n const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n const valCxt: [Name, Code | number][] = [\n [N.instancePath, strConcat(N.instancePath, errorPath)],\n [N.parentData, it.parentData],\n [N.parentDataProperty, it.parentDataProperty],\n [N.rootData, N.rootData],\n ]\n if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n const u = opts.unicodeRegExp ? \"u\" : \"\"\n const {regExp} = opts.code\n const rx = regExp(pattern, u)\n\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true)\n validateItems(() => gen.assign(validArr, false))\n return validArr\n }\n gen.var(valid, true)\n validateItems(() => gen.break())\n return valid\n\n function validateItems(notValid: () => void): void {\n const len = gen.const(\"len\", _`${data}.length`)\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword,\n dataProp: i,\n dataPropType: Type.Num,\n },\n valid\n )\n gen.if(not(valid), notValid)\n })\n }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n const {gen, schema, keyword, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n if (alwaysValid && !it.opts.unevaluated) return\n\n const valid = gen.let(\"valid\", false)\n const schValid = gen.name(\"_valid\")\n\n gen.block(() =>\n schema.forEach((_sch: AnySchema, i: number) => {\n const schCxt = cxt.subschema(\n {\n keyword,\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n gen.assign(valid, _`${valid} || ${schValid}`)\n const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged) gen.if(not(valid))\n })\n )\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n}\n","import type {KeywordCxt} from \".\"\nimport type {\n AnySchema,\n SchemaValidateFunction,\n AnyValidateFunction,\n AddedKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, it} = cxt\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n const schemaRef = useKeyword(gen, keyword, macroSchema)\n if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n schema: macroSchema,\n schemaPath: nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n },\n valid\n )\n cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, $data, it} = cxt\n checkAsyncKeyword(it, def)\n const validate =\n !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n const validateRef = useKeyword(gen, keyword, validate)\n const valid = gen.let(\"valid\")\n cxt.block$data(valid, validateKeyword)\n cxt.ok(def.valid ?? valid)\n\n function validateKeyword(): void {\n if (def.errors === false) {\n assignValid()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => cxt.error())\n } else {\n const ruleErrs = def.async ? validateAsync() : validateSync()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => addErrs(cxt, ruleErrs))\n }\n }\n\n function validateAsync(): Name {\n const ruleErrs = gen.let(\"ruleErrs\", null)\n gen.try(\n () => assignValid(_`await `),\n (e) =>\n gen.assign(valid, false).if(\n _`${e} instanceof ${it.ValidationError as Name}`,\n () => gen.assign(ruleErrs, _`${e}.errors`),\n () => gen.throw(e)\n )\n )\n return ruleErrs\n }\n\n function validateSync(): Code {\n const validateErrs = _`${validateRef}.errors`\n gen.assign(validateErrs, null)\n assignValid(nil)\n return validateErrs\n }\n\n function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n const passCxt = it.opts.passContext ? N.this : N.self\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n gen.assign(\n valid,\n _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n def.modifying\n )\n }\n\n function reportErrs(errors: () => void): void {\n gen.if(not(def.valid ?? valid), errors)\n }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n const {gen, data, it} = cxt\n gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n const {gen} = cxt\n gen.if(\n _`Array.isArray(${errs})`,\n () => {\n gen\n .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n .assign(N.errors, _`${N.vErrors}.length`)\n extendErrors(cxt)\n },\n () => cxt.error()\n )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n return gen.scopeValue(\n \"keyword\",\n typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n )\n}\n\nexport function validSchemaType(\n schema: unknown,\n schemaType: JSONType[],\n allowUndefined = false\n): boolean {\n // TODO add tests\n return (\n !schemaType.length ||\n schemaType.some((st) =>\n st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n )\n )\n}\n\nexport function validateKeywordUsage(\n {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n def: AddedKeywordDefinition,\n keyword: string\n): void {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\")\n }\n\n const deps = def.dependencies\n if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n }\n\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword])\n if (!valid) {\n const msg =\n `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors)\n if (opts.validateSchema === \"log\") self.logger.error(msg)\n else throw new Error(msg)\n }\n }\n}\n","import type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n // TODO use Optional? align with SchemCxt property types\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef?: Code\n errorPath?: Code\n dataLevel?: number\n dataTypes?: JSONType[]\n data?: Name\n parentData?: Name\n parentDataProperty?: Code | number\n dataNames?: Name[]\n dataPathArr?: (Code | number)[]\n propertyName?: Name\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n compositeRule?: true\n createErrors?: boolean\n allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n keyword: string\n schemaProp: string | number\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef: Code\n data: Name | Code\n dataProp: Code | string | number\n dataTypes: JSONType[]\n definedProperties: Set<string>\n propertyName: Name\n dataPropType: Type\n jtdDiscriminator: string\n jtdMetadata: boolean\n compositeRule: true\n createErrors: boolean\n allErrors: boolean\n}>\n\nexport function getSubschema(\n it: SchemaObjCxt,\n {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n }\n\n if (keyword !== undefined) {\n const sch = it.schema[keyword]\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n }\n }\n\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n }\n }\n\n throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n subschema: SubschemaContext,\n it: SchemaObjCxt,\n {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n }\n\n const {gen} = it\n\n if (dataProp !== undefined) {\n const {errorPath, dataPathArr, opts} = it\n const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n dataContextProps(nextData)\n subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n subschema.parentDataProperty = _`${dataProp}`\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n }\n\n if (data !== undefined) {\n const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n dataContextProps(nextData)\n if (propertyName !== undefined) subschema.propertyName = propertyName\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n\n if (dataTypes) subschema.dataTypes = dataTypes\n\n function dataContextProps(_nextData: Name): void {\n subschema.data = _nextData\n subschema.dataLevel = it.dataLevel + 1\n subschema.dataTypes = []\n it.definedProperties = new Set<string>()\n subschema.parentData = it.data\n subschema.dataNames = [...it.dataNames, _nextData]\n }\n}\n\nexport function extendSubschemaMode(\n subschema: SubschemaContext,\n {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n if (createErrors !== undefined) subschema.createErrors = createErrors\n if (allErrors !== undefined) subschema.allErrors = allErrors\n subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n subschema.jtdMetadata = jtdMetadata // not inherited\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i<sch.length; i++)\n _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n }\n } else if (key in traverse.propsKeywords) {\n if (sch && typeof sch == 'object') {\n for (var prop in sch)\n _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n }\n } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n }\n }\n post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n }\n}\n\n\nfunction escapeJsonPtr(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n","import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponent} from \"fast-uri\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n \"type\",\n \"format\",\n \"pattern\",\n \"maxLength\",\n \"minLength\",\n \"maxProperties\",\n \"minProperties\",\n \"maxItems\",\n \"minItems\",\n \"maximum\",\n \"minimum\",\n \"uniqueItems\",\n \"multipleOf\",\n \"required\",\n \"enum\",\n \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n if (typeof schema == \"boolean\") return true\n if (limit === true) return !hasRef(schema)\n if (!limit) return false\n return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n \"$ref\",\n \"$recursiveRef\",\n \"$recursiveAnchor\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n for (const key in schema) {\n if (REF_KEYWORDS.has(key)) return true\n const sch = schema[key]\n if (Array.isArray(sch) && sch.some(hasRef)) return true\n if (typeof sch == \"object\" && hasRef(sch)) return true\n }\n return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n let count = 0\n for (const key in schema) {\n if (key === \"$ref\") return Infinity\n count++\n if (SIMPLE_INLINED.has(key)) continue\n if (typeof schema[key] == \"object\") {\n eachItem(schema[key], (sch) => (count += countKeys(sch)))\n }\n if (count === Infinity) return Infinity\n }\n return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n if (normalize !== false) id = normalizeId(id)\n const p = resolver.parse(id)\n return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponent): string {\n const serialized = resolver.serialize(p)\n return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n id = normalizeId(id)\n return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n if (typeof schema == \"boolean\") return {}\n const {schemaId, uriResolver} = this.opts\n const schId = normalizeId(schema[schemaId] || baseId)\n const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n const pathPrefix = getFullPath(uriResolver, schId, false)\n const localRefs: LocalRefs = {}\n const schemaRefs: Set<string> = new Set()\n\n traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined) return\n const fullPath = pathPrefix + jsonPtr\n let innerBaseId = baseIds[parentJsonPtr]\n if (typeof sch[schemaId] == \"string\") innerBaseId = addRef.call(this, sch[schemaId])\n addAnchor.call(this, sch.$anchor)\n addAnchor.call(this, sch.$dynamicAnchor)\n baseIds[jsonPtr] = innerBaseId\n\n function addRef(this: Ajv, ref: string): string {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve\n ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref)\n if (schemaRefs.has(ref)) throw ambiguos(ref)\n schemaRefs.add(ref)\n let schOrRef = this.refs[ref]\n if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref)\n } else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref)\n localRefs[ref] = sch\n } else {\n this.refs[ref] = fullPath\n }\n }\n return ref\n }\n\n function addAnchor(this: Ajv, anchor: unknown): void {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n addRef.call(this, `#${anchor}`)\n }\n }\n })\n\n return localRefs\n\n function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n }\n\n function ambiguos(ref: string): Error {\n return new Error(`reference \"${ref}\" resolves to more than one schema`)\n }\n}\n","import type {\n AddedKeywordDefinition,\n AnySchema,\n AnySchemaObject,\n KeywordErrorCxt,\n KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n schemaRefOrVal,\n schemaHasRulesButRef,\n checkUnknownRules,\n checkStrictMode,\n unescapeJsonPointer,\n mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n ErrorPaths,\n reportError,\n reportExtraError,\n resetErrorsCount,\n keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it)\n return\n }\n }\n validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n body: Block\n): void {\n if (opts.code.es5) {\n gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n destructureValCxtES5(gen, opts)\n gen.code(body)\n })\n } else {\n gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n gen.code(funcSourceUrl(schema, opts)).code(body)\n )\n }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n N.data\n }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n gen.if(\n N.valCxt,\n () => {\n gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n },\n () => {\n gen.var(N.instancePath, _`\"\"`)\n gen.var(N.parentData, _`undefined`)\n gen.var(N.parentDataProperty, _`undefined`)\n gen.var(N.rootData, N.data)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n }\n )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n const {schema, opts, gen} = it\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment) commentKeyword(it)\n checkNoDefault(it)\n gen.let(N.vErrors, null)\n gen.let(N.errors, 0)\n if (opts.unevaluated) resetEvaluated(it)\n typeAndKeywords(it)\n returnResults(it)\n })\n return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const {gen, validateName} = it\n it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n const schId = typeof schema == \"object\" && schema[opts.schemaId]\n return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid)\n return\n }\n }\n boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (self.RULES.all[key]) return true\n return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n const {schema, gen, opts} = it\n if (opts.$comment && schema.$comment) commentKeyword(it)\n updateContext(it)\n checkAsyncSchema(it)\n const errsCount = gen.const(\"_errs\", N.errors)\n typeAndKeywords(it, errsCount)\n // TODO var\n gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n checkUnknownRules(it)\n checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n const types = getSchemaTypes(it.schema)\n const checkedTypes = coerceAndCheckDataType(it, types)\n schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n const {schema, errSchemaPath, opts, self} = it\n if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n const {schema, opts} = it\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n checkStrictMode(it, \"default is ignored in the schema root\")\n }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n const schId = it.schema[it.opts.schemaId]\n if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n const msg = schema.$comment\n if (opts.$comment === true) {\n gen.code(_`${N.self}.logger.log(${msg})`)\n } else if (typeof opts.$comment == \"function\") {\n const schemaPath = str`${errSchemaPath}/$comment`\n const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n const {gen, schemaEnv, validateName, ValidationError, opts} = it\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if(\n _`${N.errors} === 0`,\n () => gen.return(N.data),\n () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n )\n } else {\n gen.assign(_`${validateName}.errors`, N.vErrors)\n if (opts.unevaluated) assignEvaluated(it)\n gen.return(_`${N.errors} === 0`)\n }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n it: SchemaObjCxt,\n types: JSONType[],\n typeErrors: boolean,\n errsCount?: Name\n): void {\n const {gen, schema, data, allErrors, opts, self} = it\n const {RULES} = self\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n return\n }\n if (!opts.jtd) checkStrictTypes(it, types)\n gen.block(() => {\n for (const group of RULES.rules) groupKeywords(group)\n groupKeywords(RULES.post)\n })\n\n function groupKeywords(group: RuleGroup): void {\n if (!shouldUseGroup(schema, group)) return\n if (group.type) {\n gen.if(checkDataType(group.type, data, opts.strictNumbers))\n iterateKeywords(it, group)\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else()\n reportTypeError(it)\n }\n gen.endIf()\n } else {\n iterateKeywords(it, group)\n }\n // TODO make it \"ok\" call?\n if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n const {\n gen,\n schema,\n opts: {useDefaults},\n } = it\n if (useDefaults) assignDefaults(it, group.type)\n gen.block(() => {\n for (const rule of group.rules) {\n if (shouldUseRule(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type)\n }\n }\n })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (it.schemaEnv.meta || !it.opts.strictTypes) return\n checkContextTypes(it, types)\n if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (!types.length) return\n if (!it.dataTypes.length) {\n it.dataTypes = types\n return\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n }\n })\n narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n const rules = it.self.RULES.all\n for (const keyword in rules) {\n const rule = rules[keyword]\n if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n const {type} = rule.definition\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n }\n }\n }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n const ts: JSONType[] = []\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t)) ts.push(t)\n else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n }\n it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n msg += ` at \"${schemaPath}\" (strictTypes)`\n checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean\n readonly keyword: string\n readonly data: Name // Name referencing the current level of the data instance\n readonly $data?: string | false\n schema: any // keyword value in the schema\n readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n readonly parentSchema: AnySchemaObject\n readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n // requires option trackErrors in keyword definition\n params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n readonly def: AddedKeywordDefinition\n\n constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n validateKeywordUsage(it, def, keyword)\n this.gen = it.gen\n this.allErrors = it.allErrors\n this.keyword = keyword\n this.data = it.data\n this.schema = it.schema[keyword]\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n this.schemaType = def.schemaType\n this.parentSchema = it.schema\n this.params = {}\n this.it = it\n this.def = def\n\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n } else {\n this.schemaCode = this.schemaValue\n if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n }\n }\n\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", N.errors)\n }\n }\n\n result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.failResult(not(condition), successAction, failAction)\n }\n\n failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.gen.if(condition)\n if (failAction) failAction()\n else this.error()\n if (successAction) {\n this.gen.else()\n successAction()\n if (this.allErrors) this.gen.endIf()\n } else {\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n }\n\n pass(condition: Code, failAction?: () => void): void {\n this.failResult(not(condition), undefined, failAction)\n }\n\n fail(condition?: Code): void {\n if (condition === undefined) {\n this.error()\n if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n return\n }\n this.gen.if(condition)\n this.error()\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n\n fail$data(condition: Code): void {\n if (!this.$data) return this.fail(condition)\n const {schemaCode} = this\n this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n }\n\n error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n if (errorParams) {\n this.setParams(errorParams)\n this._error(append, errorPaths)\n this.setParams({})\n return\n }\n this._error(append, errorPaths)\n }\n\n private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n }\n\n $dataError(): void {\n reportError(this, this.def.$dataError || keyword$DataError)\n }\n\n reset(): void {\n if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n resetErrorsCount(this.gen, this.errsCount)\n }\n\n ok(cond: Code | boolean): void {\n if (!this.allErrors) this.gen.if(cond)\n }\n\n setParams(obj: KeywordCxtParams, assign?: true): void {\n if (assign) Object.assign(this.params, obj)\n else this.params = obj\n }\n\n block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n this.gen.block(() => {\n this.check$data(valid, $dataValid)\n codeBlock()\n })\n }\n\n check$data(valid: Name = nil, $dataValid: Code = nil): void {\n if (!this.$data) return\n const {gen, schemaCode, schemaType, def} = this\n gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n if (valid !== nil) gen.assign(valid, true)\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data())\n this.$dataError()\n if (valid !== nil) gen.assign(valid, false)\n }\n gen.else()\n }\n\n invalid$data(): Code {\n const {gen, schemaCode, schemaType, def, it} = this\n return or(wrong$DataType(), invalid$DataSchema())\n\n function wrong$DataType(): Code {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n }\n return nil\n }\n\n function invalid$DataSchema(): Code {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n return _`!${validateSchemaRef}(${schemaCode})`\n }\n return nil\n }\n }\n\n subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n const subschema = getSubschema(this.it, appl)\n extendSubschemaData(subschema, this.it, appl)\n extendSubschemaMode(subschema, appl)\n const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n subschemaCode(nextContext, valid)\n return nextContext\n }\n\n mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n const {it, gen} = this\n if (!it.opts.unevaluated) return\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n }\n }\n\n mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n const {it, gen} = this\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n return true\n }\n }\n}\n\nfunction keywordCode(\n it: SchemaObjCxt,\n keyword: string,\n def: AddedKeywordDefinition,\n ruleType?: JSONType\n): void {\n const cxt = new KeywordCxt(it, def, keyword)\n if (\"code\" in def) {\n def.code(cxt, ruleType)\n } else if (cxt.$data && def.validate) {\n funcKeywordCode(cxt, def)\n } else if (\"macro\" in def) {\n macroKeywordCode(cxt, def)\n } else if (def.compile || def.validate) {\n funcKeywordCode(cxt, def)\n }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n $data: string,\n {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n let jsonPointer\n let data: Code\n if ($data === \"\") return N.rootData\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n jsonPointer = $data\n data = N.rootData\n } else {\n const matches = RELATIVE_JSON_POINTER.exec($data)\n if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n const up: number = +matches[1]\n jsonPointer = matches[2]\n if (jsonPointer === \"#\") {\n if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n return dataPathArr[dataLevel - up]\n }\n if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n data = dataNames[dataLevel - up]\n if (!jsonPointer) return data\n }\n\n let expr = data\n const segments = jsonPointer.split(\"/\")\n for (const segment of segments) {\n if (segment) {\n data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n expr = _`${expr} && ${data}`\n }\n }\n return expr\n\n function errorMsg(pointerType: string, up: number): string {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n }\n}\n","import type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n readonly errors: Partial<ErrorObject>[]\n readonly ajv: true\n readonly validation: true\n\n constructor(errors: Partial<ErrorObject>[]) {\n super(\"validation failed\")\n this.errors = errors\n this.ajv = this.validation = true\n }\n}\n","import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n readonly missingRef: string\n readonly missingSchema: string\n\n constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n this.missingRef = resolveUrl(resolver, baseId, ref)\n this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n }\n}\n","import type {\n AnySchema,\n AnySchemaObject,\n AnyValidateFunction,\n AsyncValidateFunction,\n EvaluatedProperties,\n EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport {URIComponent} from \"fast-uri\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n readonly data: Name // Name with reference to the current part of data instance\n readonly parentData: Name // should be used in keywords modifying data\n readonly parentDataProperty: Code | number // should be used in keywords modifying data\n readonly dataNames: Name[]\n readonly dataPathArr: (Code | number)[]\n readonly dataLevel: number // the level of the currently validated data,\n // it can be used to access both the property names and the data on all levels from the top.\n dataTypes: JSONType[] // data types applied to the current part of data instance\n definedProperties: Set<string> // set of properties to keep track of for required checks\n readonly topSchemaRef: Code\n readonly validateName: Name\n evaluated?: Name\n readonly ValidationError?: Name\n readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n readonly schemaEnv: SchemaEnv\n readonly rootId: string\n baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n readonly errSchemaPath: string // this is actual string, should not be changed to Code\n readonly errorPath: Code\n readonly propertyName?: Name\n readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n readonly createErrors?: boolean\n readonly opts: InstanceOptions // Ajv instance option.\n readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root?: SchemaEnv\n readonly baseId?: string\n readonly schemaPath?: string\n readonly localRefs?: LocalRefs\n readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root: SchemaEnv\n baseId: string // TODO possibly, it should be readonly\n schemaPath?: string\n localRefs?: LocalRefs\n readonly meta?: boolean\n readonly $async?: boolean // true if the current schema is asynchronous.\n readonly refs: SchemaRefs = {}\n readonly dynamicAnchors: {[Ref in string]?: true} = {}\n validate?: AnyValidateFunction\n validateName?: ValueScopeName\n serialize?: (data: unknown) => string\n serializeName?: ValueScopeName\n parse?: (data: string) => unknown\n parseName?: ValueScopeName\n\n constructor(env: SchemaEnvArgs) {\n let schema: AnySchemaObject | undefined\n if (typeof env.schema == \"object\") schema = env.schema\n this.schema = env.schema\n this.schemaId = env.schemaId\n this.root = env.root || this\n this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n this.schemaPath = env.schemaPath\n this.localRefs = env.localRefs\n this.meta = env.meta\n this.$async = schema?.$async\n this.refs = {}\n }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch)\n if (_sch) return _sch\n const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n const {es5, lines} = this.opts.code\n const {ownProperties} = this.opts\n const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n let _ValidationError\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: ValidationError,\n code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n })\n }\n\n const validateName = gen.scopeName(\"validate\")\n sch.validateName = validateName\n\n const schemaCxt: SchemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: N.data,\n parentData: N.parentData,\n parentDataProperty: N.parentDataProperty,\n dataNames: [N.data],\n dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set<string>(),\n topSchemaRef: gen.scopeValue(\n \"schema\",\n this.opts.code.source === true\n ? {ref: sch.schema, code: stringify(sch.schema)}\n : {ref: sch.schema}\n ),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: _`\"\"`,\n opts: this.opts,\n self: this,\n }\n\n let sourceCode: string | undefined\n try {\n this._compilations.add(sch)\n validateFunctionCode(schemaCxt)\n gen.optimize(this.opts.code.optimize)\n // gen.optimize(1)\n const validateCode = gen.toString()\n sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n this.scope.value(validateName, {ref: validate})\n\n validate.errors = null\n validate.schema = sch.schema\n validate.schemaEnv = sch\n if (sch.$async) (validate as AsyncValidateFunction).$async = true\n if (this.opts.code.source === true) {\n validate.source = {validateName, validateCode, scopeValues: gen._values}\n }\n if (this.opts.unevaluated) {\n const {props, items} = schemaCxt\n validate.evaluated = {\n props: props instanceof Name ? undefined : props,\n items: items instanceof Name ? undefined : items,\n dynamicProps: props instanceof Name,\n dynamicItems: items instanceof Name,\n }\n if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n }\n sch.validate = validate\n return sch\n } catch (e) {\n delete sch.validate\n delete sch.validateName\n if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e\n } finally {\n this._compilations.delete(sch)\n }\n}\n\nexport function resolveRef(\n this: Ajv,\n root: SchemaEnv,\n baseId: string,\n ref: string\n): AnySchema | SchemaEnv | undefined {\n ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n const schOrFunc = root.refs[ref]\n if (schOrFunc) return schOrFunc\n\n let _sch = resolve.call(this, root, ref)\n if (_sch === undefined) {\n const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n const {schemaId} = this.opts\n if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n }\n\n if (_sch === undefined) return\n return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv)) return sch\n }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n this: Ajv,\n root: SchemaEnv, // information about the root schema for the current schema\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n let sch\n while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n this: Ajv,\n root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n const p = this.opts.uriResolver.parse(ref)\n const refPath = _getFullPath(this.opts.uriResolver, p)\n let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root)\n }\n\n const id = normalizeId(refPath)\n const schOrRef = this.refs[id] || this.schemas[id]\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef)\n if (typeof sch?.schema !== \"object\") return\n return getJsonPointer.call(this, p, sch)\n }\n\n if (typeof schOrRef?.schema !== \"object\") return\n if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n if (id === normalizeId(ref)) {\n const {schema} = schOrRef\n const {schemaId} = this.opts\n const schId = schema[schemaId]\n if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n return new SchemaEnv({schema, schemaId, root, baseId})\n }\n return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n])\n\nfunction getJsonPointer(\n this: Ajv,\n parsedRef: URIComponent,\n {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n if (parsedRef.fragment?.[0] !== \"/\") return\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\") return\n const partSchema = schema[unescapeFragment(part)]\n if (partSchema === undefined) return\n schema = partSchema\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n }\n }\n let env: SchemaEnv | undefined\n if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n env = resolveSchema.call(this, root, $ref)\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const {schemaId} = this.opts\n env = env || new SchemaEnv({schema, schemaId, root, baseId})\n if (env.schema !== env.root.schema) return env\n return undefined\n}\n","{\n \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n \"description\": \"Meta-schema for $data reference (JSON AnySchema extension proposal)\",\n \"type\": \"object\",\n \"required\": [\"$data\"],\n \"properties\": {\n \"$data\": {\n \"type\": \"string\",\n \"anyOf\": [{\"format\": \"relative-json-pointer\"}, {\"format\": \"json-pointer\"}]\n }\n },\n \"additionalProperties\": false\n}\n","'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/**\n * @param {Array<string>} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n let acc = ''\n let code = 0\n let i = 0\n\n for (i = 0; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (code === 48) {\n continue\n }\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n break\n }\n\n for (i += 1; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n }\n return acc\n}\n\n/**\n * @typedef {Object} GetIPV6Result\n * @property {boolean} error - Indicates if there was an error parsing the IPv6 address.\n * @property {string} address - The parsed IPv6 address.\n * @property {string} [zone] - The zone identifier, if present.\n */\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {Array<string>} buffer\n * @returns {boolean}\n */\nfunction consumeIsZone (buffer) {\n buffer.length = 0\n return true\n}\n\n/**\n * @param {Array<string>} buffer\n * @param {Array<string>} address\n * @param {GetIPV6Result} output\n * @returns {boolean}\n */\nfunction consumeHextets (buffer, address, output) {\n if (buffer.length) {\n const hex = stringArrayToHexStripped(buffer)\n if (hex !== '') {\n address.push(hex)\n } else {\n output.error = true\n return false\n }\n buffer.length = 0\n }\n return true\n}\n\n/**\n * @param {string} input\n * @returns {GetIPV6Result}\n */\nfunction getIPV6 (input) {\n let tokenCount = 0\n const output = { error: false, address: '', zone: '' }\n /** @type {Array<string>} */\n const address = []\n /** @type {Array<string>} */\n const buffer = []\n let endipv6Encountered = false\n let endIpv6 = false\n\n let consume = consumeHextets\n\n for (let i = 0; i < input.length; i++) {\n const cursor = input[i]\n if (cursor === '[' || cursor === ']') { continue }\n if (cursor === ':') {\n if (endipv6Encountered === true) {\n endIpv6 = true\n }\n if (!consume(buffer, address, output)) { break }\n if (++tokenCount > 7) {\n // not valid\n output.error = true\n break\n }\n if (i > 0 && input[i - 1] === ':') {\n endipv6Encountered = true\n }\n address.push(':')\n continue\n } else if (cursor === '%') {\n if (!consume(buffer, address, output)) { break }\n // switch to zone detection\n consume = consumeIsZone\n } else {\n buffer.push(cursor)\n continue\n }\n }\n if (buffer.length) {\n if (consume === consumeIsZone) {\n output.zone = buffer.join('')\n } else if (endIpv6) {\n address.push(buffer.join(''))\n } else {\n address.push(stringArrayToHexStripped(buffer))\n }\n }\n output.address = address.join('')\n return output\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n */\n\n/**\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n if (findToken(host, ':') < 2) { return { host, isIPV6: false } }\n const ipv6 = getIPV6(host)\n\n if (!ipv6.error) {\n let newHost = ipv6.address\n let escapedHost = ipv6.address\n if (ipv6.zone) {\n newHost += '%' + ipv6.zone\n escapedHost += '%25' + ipv6.zone\n }\n return { host: newHost, isIPV6: true, escapedHost }\n } else {\n return { host, isIPV6: false }\n }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n let ind = 0\n for (let i = 0; i < str.length; i++) {\n if (str[i] === token) ind++\n }\n return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n let input = path\n const output = []\n let nextSlash = -1\n let len = 0\n\n // eslint-disable-next-line no-cond-assign\n while (len = input.length) {\n if (len === 1) {\n if (input === '.') {\n break\n } else if (input === '/') {\n output.push('/')\n break\n } else {\n output.push(input)\n break\n }\n } else if (len === 2) {\n if (input[0] === '.') {\n if (input[1] === '.') {\n break\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.' || input[1] === '/') {\n output.push('/')\n break\n }\n }\n } else if (len === 3) {\n if (input === '/..') {\n if (output.length !== 0) {\n output.pop()\n }\n output.push('/')\n break\n }\n }\n if (input[0] === '.') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(3)\n continue\n }\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(2)\n continue\n } else if (input[2] === '.') {\n if (input[3] === '/') {\n input = input.slice(3)\n if (output.length !== 0) {\n output.pop()\n }\n continue\n }\n }\n }\n }\n\n // Rule 2E: Move normal path segment to output\n if ((nextSlash = input.indexOf('/', 1)) === -1) {\n output.push(input)\n break\n } else {\n output.push(input.slice(0, nextSlash))\n input = input.slice(nextSlash)\n }\n }\n\n return output.join('')\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {boolean} esc\n * @returns {import('../types/index').URIComponent}\n */\nfunction normalizeComponentEncoding (component, esc) {\n const func = esc !== true ? escape : unescape\n if (component.scheme !== undefined) {\n component.scheme = func(component.scheme)\n }\n if (component.userinfo !== undefined) {\n component.userinfo = func(component.userinfo)\n }\n if (component.host !== undefined) {\n component.host = func(component.host)\n }\n if (component.path !== undefined) {\n component.path = func(component.path)\n }\n if (component.query !== undefined) {\n component.query = func(component.query)\n }\n if (component.fragment !== undefined) {\n component.fragment = func(component.fragment)\n }\n return component\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n const uriTokens = []\n\n if (component.userinfo !== undefined) {\n uriTokens.push(component.userinfo)\n uriTokens.push('@')\n }\n\n if (component.host !== undefined) {\n let host = unescape(component.host)\n if (!isIPv4(host)) {\n const ipV6res = normalizeIPv6(host)\n if (ipV6res.isIPV6 === true) {\n host = `[${ipV6res.escapedHost}]`\n } else {\n host = component.host\n }\n }\n uriTokens.push(host)\n }\n\n if (typeof component.port === 'number' || typeof component.port === 'string') {\n uriTokens.push(':')\n uriTokens.push(String(component.port))\n }\n\n return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n nonSimpleDomain,\n recomposeAuthority,\n normalizeComponentEncoding,\n removeDotSegments,\n isIPv4,\n isUUID,\n normalizeIPv6,\n stringArrayToHexStripped\n}\n","'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-.:;=@]|%[\\da-f]{2})+)/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n 'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n if (wsComponent.secure === true) {\n return true\n } else if (wsComponent.secure === false) {\n return false\n } else if (wsComponent.scheme) {\n return (\n wsComponent.scheme.length === 3 &&\n (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n )\n } else {\n return false\n }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n if (!component.host) {\n component.error = component.error || 'HTTP URIs must have a host.'\n }\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n const secure = String(component.scheme).toLowerCase() === 'https'\n\n // normalize the default port\n if (component.port === (secure ? 443 : 80) || component.port === '') {\n component.port = undefined\n }\n\n // normalize the empty path\n if (!component.path) {\n component.path = '/'\n }\n\n // NOTE: We do not parse query strings for HTTP URIs\n // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n // and not the HTTP spec.\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n wsComponent.secure = wsIsSecure(wsComponent)\n\n // construct resouce name\n wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n wsComponent.path = undefined\n wsComponent.query = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n wsComponent.port = undefined\n }\n\n // ensure scheme matches secure flag\n if (typeof wsComponent.secure === 'boolean') {\n wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n wsComponent.secure = undefined\n }\n\n // reconstruct path from resource name\n if (wsComponent.resourceName) {\n const [path, query] = wsComponent.resourceName.split('?')\n wsComponent.path = (path && path !== '/' ? path : undefined)\n wsComponent.query = query\n wsComponent.resourceName = undefined\n }\n\n // forbid fragment component\n wsComponent.fragment = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n if (!urnComponent.path) {\n urnComponent.error = 'URN can not be parsed'\n return urnComponent\n }\n const matches = urnComponent.path.match(URN_REG)\n if (matches) {\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n urnComponent.nid = matches[1].toLowerCase()\n urnComponent.nss = matches[2]\n const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n urnComponent.path = undefined\n\n if (schemeHandler) {\n urnComponent = schemeHandler.parse(urnComponent, options)\n }\n } else {\n urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n }\n\n return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n if (urnComponent.nid === undefined) {\n throw new Error('URN without nid cannot be serialized')\n }\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n const nid = urnComponent.nid.toLowerCase()\n const urnScheme = `${scheme}:${options.nid || nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n\n if (schemeHandler) {\n urnComponent = schemeHandler.serialize(urnComponent, options)\n }\n\n const uriComponent = urnComponent\n const nss = urnComponent.nss\n uriComponent.path = `${nid || options.nid}:${nss}`\n\n options.skipEscape = true\n return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n const uuidComponent = urnComponent\n uuidComponent.uuid = uuidComponent.nss\n uuidComponent.nss = undefined\n\n if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n }\n\n return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n const urnComponent = uuidComponent\n // normalize UUID\n urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n scheme: 'http',\n domainHost: true,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n scheme: 'https',\n domainHost: http.domainHost,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n scheme: 'ws',\n domainHost: true,\n parse: wsParse,\n serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n scheme: 'wss',\n domainHost: ws.domainHost,\n parse: ws.parse,\n serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n scheme: 'urn',\n parse: urnParse,\n serialize: urnSerialize,\n skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n scheme: 'urn:uuid',\n parse: urnuuidParse,\n serialize: urnuuidSerialize,\n skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record<SchemeName, SchemeHandler>} */ ({\n http,\n https,\n ws,\n wss,\n urn,\n 'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n return (\n scheme && (\n SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n ) ||\n undefined\n}\n\nmodule.exports = {\n wsIsSecure,\n SCHEMES,\n isValidSchemeName,\n getSchemeHandler,\n}\n","'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n if (typeof uri === 'string') {\n uri = /** @type {T} */ (serialize(parse(uri, options), options))\n } else if (typeof uri === 'object') {\n uri = /** @type {T} */ (parse(serialize(uri, options), options))\n }\n return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true)\n schemelessOptions.skipEscape = true\n return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n /** @type {import('./types/index').URIComponent} */\n const target = {}\n if (!skipNormalization) {\n base = parse(serialize(base, options), options) // normalize base component\n relative = parse(serialize(relative, options), options) // normalize relative component\n }\n options = options || {}\n\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (!relative.path) {\n target.path = base.path\n if (relative.query !== undefined) {\n target.query = relative.query\n } else {\n target.query = base.query\n }\n } else {\n if (relative.path[0] === '/') {\n target.path = removeDotSegments(relative.path)\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = '/' + relative.path\n } else if (!base.path) {\n target.path = relative.path\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n }\n target.path = removeDotSegments(target.path)\n }\n target.query = relative.query\n }\n // target.authority = base.authority;\n target.userinfo = base.userinfo\n target.host = base.host\n target.port = base.port\n }\n target.scheme = base.scheme\n }\n\n target.fragment = relative.fragment\n\n return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n if (typeof uriA === 'string') {\n uriA = unescape(uriA)\n uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true })\n } else if (typeof uriA === 'object') {\n uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true })\n }\n\n if (typeof uriB === 'string') {\n uriB = unescape(uriB)\n uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true })\n } else if (typeof uriB === 'object') {\n uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true })\n }\n\n return uriA.toLowerCase() === uriB.toLowerCase()\n}\n\n/**\n * @param {Readonly<import('./types/index').URIComponent>} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n const component = {\n host: cmpts.host,\n scheme: cmpts.scheme,\n userinfo: cmpts.userinfo,\n port: cmpts.port,\n path: cmpts.path,\n query: cmpts.query,\n nid: cmpts.nid,\n nss: cmpts.nss,\n uuid: cmpts.uuid,\n fragment: cmpts.fragment,\n reference: cmpts.reference,\n resourceName: cmpts.resourceName,\n secure: cmpts.secure,\n error: ''\n }\n const options = Object.assign({}, opts)\n const uriTokens = []\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n // perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n if (component.path !== undefined) {\n if (!options.skipEscape) {\n component.path = escape(component.path)\n\n if (component.scheme !== undefined) {\n component.path = component.path.split('%3A').join(':')\n }\n } else {\n component.path = unescape(component.path)\n }\n }\n\n if (options.reference !== 'suffix' && component.scheme) {\n uriTokens.push(component.scheme, ':')\n }\n\n const authority = recomposeAuthority(component)\n if (authority !== undefined) {\n if (options.reference !== 'suffix') {\n uriTokens.push('//')\n }\n\n uriTokens.push(authority)\n\n if (component.path && component.path[0] !== '/') {\n uriTokens.push('/')\n }\n }\n if (component.path !== undefined) {\n let s = component.path\n\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s)\n }\n\n if (\n authority === undefined &&\n s[0] === '/' &&\n s[1] === '/'\n ) {\n // don't allow the path to start with \"//\"\n s = '/%2F' + s.slice(2)\n }\n\n uriTokens.push(s)\n }\n\n if (component.query !== undefined) {\n uriTokens.push('?', component.query)\n }\n\n if (component.fragment !== undefined) {\n uriTokens.push('#', component.fragment)\n }\n return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n const options = Object.assign({}, opts)\n /** @type {import('./types/index').URIComponent} */\n const parsed = {\n scheme: undefined,\n userinfo: undefined,\n host: '',\n port: undefined,\n path: '',\n query: undefined,\n fragment: undefined\n }\n\n let isIP = false\n if (options.reference === 'suffix') {\n if (options.scheme) {\n uri = options.scheme + ':' + uri\n } else {\n uri = '//' + uri\n }\n }\n\n const matches = uri.match(URI_PARSE)\n\n if (matches) {\n // store each component\n parsed.scheme = matches[1]\n parsed.userinfo = matches[3]\n parsed.host = matches[4]\n parsed.port = parseInt(matches[5], 10)\n parsed.path = matches[6] || ''\n parsed.query = matches[7]\n parsed.fragment = matches[8]\n\n // fix port number\n if (isNaN(parsed.port)) {\n parsed.port = matches[5]\n }\n if (parsed.host) {\n const ipv4result = isIPv4(parsed.host)\n if (ipv4result === false) {\n const ipv6result = normalizeIPv6(parsed.host)\n parsed.host = ipv6result.host.toLowerCase()\n isIP = ipv6result.isIPV6\n } else {\n isIP = true\n }\n }\n if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n parsed.reference = 'same-document'\n } else if (parsed.scheme === undefined) {\n parsed.reference = 'relative'\n } else if (parsed.fragment === undefined) {\n parsed.reference = 'absolute'\n } else {\n parsed.reference = 'uri'\n }\n\n // check for reference errors\n if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n // check if scheme can't handle IRIs\n if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n // if host component is a domain name\n if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost)) && isIP === false && nonSimpleDomain(parsed.host)) {\n // convert Unicode IDN -> ASCII IDN\n try {\n parsed.host = URL.domainToASCII(parsed.host.toLowerCase())\n } catch (e) {\n parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n }\n }\n // convert IRI -> URI\n }\n\n if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n if (uri.indexOf('%') !== -1) {\n if (parsed.scheme !== undefined) {\n parsed.scheme = unescape(parsed.scheme)\n }\n if (parsed.host !== undefined) {\n parsed.host = unescape(parsed.host)\n }\n }\n if (parsed.path) {\n parsed.path = escape(unescape(parsed.path))\n }\n if (parsed.fragment) {\n parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment))\n }\n }\n\n // perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(parsed, options)\n }\n } else {\n parsed.error = parsed.error || 'URI can not be parsed.'\n }\n return parsed\n}\n\nconst fastUri = {\n SCHEMES,\n normalize,\n resolve,\n resolveComponent,\n equal,\n serialize,\n parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n","import * as uri from \"fast-uri\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n","export {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n AnyValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n (ajv: Ajv, options?: Opts): Ajv\n [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n Schema,\n AnySchema,\n AnySchemaObject,\n SchemaObject,\n AsyncSchema,\n Vocabulary,\n KeywordDefinition,\n AddedKeywordDefinition,\n AnyValidateFunction,\n ValidateFunction,\n AsyncValidateFunction,\n ErrorObject,\n Format,\n AddedFormat,\n RegExpEngine,\n UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n // strict mode options (NEW)\n strict?: boolean | \"log\"\n strictSchema?: boolean | \"log\"\n strictNumbers?: boolean | \"log\"\n strictTypes?: boolean | \"log\"\n strictTuples?: boolean | \"log\"\n strictRequired?: boolean | \"log\"\n allowMatchingProperties?: boolean // disables a strict mode restriction\n allowUnionTypes?: boolean\n validateFormats?: boolean\n // validation and reporting options:\n $data?: boolean\n allErrors?: boolean\n verbose?: boolean\n discriminator?: boolean\n unicodeRegExp?: boolean\n timestamp?: \"string\" | \"date\" // JTD only\n parseDate?: boolean // JTD only\n allowDate?: boolean // JTD only\n specialNumbers?: \"fast\" | \"null\" // JTD only\n $comment?:\n | true\n | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n formats?: {[Name in string]?: Format}\n keywords?: Vocabulary\n schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n logger?: Logger | false\n loadSchema?: (uri: string) => Promise<AnySchemaObject>\n // options to modify validated data:\n removeAdditional?: boolean | \"all\" | \"failing\"\n useDefaults?: boolean | \"empty\"\n coerceTypes?: boolean | \"array\"\n // advanced options:\n next?: boolean // NEW\n unevaluated?: boolean // NEW\n dynamicRef?: boolean // NEW\n schemaId?: \"id\" | \"$id\"\n jtd?: boolean // NEW\n meta?: SchemaObject | boolean\n defaultMeta?: string | AnySchemaObject\n validateSchema?: boolean | \"log\"\n addUsedSchema?: boolean\n inlineRefs?: boolean | number\n passContext?: boolean\n loopRequired?: number\n loopEnum?: number // NEW\n ownProperties?: boolean\n multipleOfPrecision?: number\n int32range?: boolean // JTD only\n messages?: boolean\n code?: CodeOptions // NEW\n uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n es5?: boolean\n esm?: boolean\n lines?: boolean\n optimize?: boolean | number\n formats?: Code // code to require (or construct) map of available formats - for standalone code\n source?: boolean\n process?: (code: string, schema?: SchemaEnv) => string\n regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n regExp: RegExpEngine\n optimize: number\n}\n\ninterface DeprecatedOptions {\n /** @deprecated */\n ignoreKeywordsWithRef?: boolean\n /** @deprecated */\n jsPropertySyntax?: boolean // added instead of jsonPointers\n /** @deprecated */\n unicode?: boolean\n}\n\ninterface RemovedOptions {\n format?: boolean\n errorDataPath?: \"object\" | \"property\"\n nullable?: boolean // \"nullable\" keyword is supported by default\n jsonPointers?: boolean\n extendRefs?: true | \"ignore\" | \"fail\"\n missingRefs?: true | \"ignore\" | \"fail\"\n processCode?: (code: string, schema?: SchemaEnv) => string\n sourceCode?: boolean\n strictDefaults?: boolean\n strictKeywords?: boolean\n uniqueItems?: boolean\n unknownFormats?: true | string[] | \"ignore\"\n cache?: any\n serialize?: (schema: AnySchema) => unknown\n ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n [K in\n | \"strictSchema\"\n | \"strictNumbers\"\n | \"strictTypes\"\n | \"strictTuples\"\n | \"strictRequired\"\n | \"inlineRefs\"\n | \"loopRequired\"\n | \"loopEnum\"\n | \"meta\"\n | \"messages\"\n | \"schemaId\"\n | \"addUsedSchema\"\n | \"validateSchema\"\n | \"validateFormats\"\n | \"int32range\"\n | \"unicodeRegExp\"\n | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n const s = o.strict\n const _optz = o.code?.optimize\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n const regExp = o.code?.regExp ?? defaultRegExp\n const uriResolver = o.uriResolver ?? DefaultUriResolver\n return {\n strictSchema: o.strictSchema ?? s ?? true,\n strictNumbers: o.strictNumbers ?? s ?? true,\n strictTypes: o.strictTypes ?? s ?? \"log\",\n strictTuples: o.strictTuples ?? s ?? \"log\",\n strictRequired: o.strictRequired ?? s ?? false,\n code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n meta: o.meta ?? true,\n messages: o.messages ?? true,\n inlineRefs: o.inlineRefs ?? true,\n schemaId: o.schemaId ?? \"$id\",\n addUsedSchema: o.addUsedSchema ?? true,\n validateSchema: o.validateSchema ?? true,\n validateFormats: o.validateFormats ?? true,\n unicodeRegExp: o.unicodeRegExp ?? true,\n int32range: o.int32range ?? true,\n uriResolver: uriResolver,\n }\n}\n\nexport interface Logger {\n log(...args: unknown[]): unknown\n warn(...args: unknown[]): unknown\n error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n opts: InstanceOptions\n errors?: ErrorObject[] | null // errors from the last validation\n logger: Logger\n // shared external scope values for compiled functions\n readonly scope: ValueScope\n readonly schemas: {[Key in string]?: SchemaEnv} = {}\n readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n readonly formats: {[Name in string]?: AddedFormat} = {}\n readonly RULES: ValidationRules\n readonly _compilations: Set<SchemaEnv> = new Set()\n private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n private readonly _metaOpts: InstanceOptions\n\n static ValidationError = ValidationError\n static MissingRefError = MissingRefError\n\n constructor(opts: Options = {}) {\n opts = this.opts = {...opts, ...requiredOptions(opts)}\n const {es5, lines} = this.opts.code\n\n this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n this.logger = getLogger(opts.logger)\n const formatOpt = opts.validateFormats\n opts.validateFormats = false\n\n this.RULES = getRules()\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n this._metaOpts = getMetaSchemaOptions.call(this)\n\n if (opts.formats) addInitialFormats.call(this)\n this._addVocabularies()\n this._addDefaultMetaSchema()\n if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n addInitialSchemas.call(this)\n opts.validateFormats = formatOpt\n }\n\n _addVocabularies(): void {\n this.addKeyword(\"$async\")\n }\n\n _addDefaultMetaSchema(): void {\n const {$data, meta, schemaId} = this.opts\n let _dataRefSchema: SchemaObject = $dataRefSchema\n if (schemaId === \"id\") {\n _dataRefSchema = {...$dataRefSchema}\n _dataRefSchema.id = _dataRefSchema.$id\n delete _dataRefSchema.$id\n }\n if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n const {meta, schemaId} = this.opts\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n }\n\n // Validate data using schema\n // AnySchema will be compiled and cached using schema itself as a key for Map\n validate(schema: Schema | string, data: unknown): boolean\n validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n validate<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n data: unknown\n ): data is JTDDataType<T>\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n validate<T>(\n schemaKeyRef: AnySchema | string, // key, ref or schema object\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n data: unknown | T // to be validated\n ): boolean | Promise<T> {\n let v: AnyValidateFunction | undefined\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema<T>(schemaKeyRef)\n if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n } else {\n v = this.compile<T>(schemaKeyRef)\n }\n\n const valid = v(data)\n if (!(\"$async\" in v)) this.errors = v.errors\n return valid\n }\n\n // Create validation function for passed schema\n // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n compile<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n _meta?: boolean\n ): ValidateFunction<JTDDataType<T>>\n compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n const sch = this._addSchema(schema, _meta)\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n }\n\n // Creates validating function for passed schema with asynchronous loading of missing schemas.\n // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n // TODO allow passing schema URI\n // meta - optional true to compile meta-schema\n compileAsync<T = unknown>(\n schema: SchemaObject | JSONSchemaType<T>,\n _meta?: boolean\n ): Promise<ValidateFunction<T>>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>>\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>> {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\")\n }\n const {loadSchema} = this.opts\n return runCompileAsync.call(this, schema, meta)\n\n async function runCompileAsync(\n this: Ajv,\n _schema: AnySchemaObject,\n _meta?: boolean\n ): Promise<AnyValidateFunction> {\n await loadMetaSchema.call(this, _schema.$schema)\n const sch = this._addSchema(_schema, _meta)\n return sch.validate || _compileAsync.call(this, sch)\n }\n\n async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, {$ref}, true)\n }\n }\n\n async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n try {\n return this._compileSchemaEnv(sch)\n } catch (e) {\n if (!(e instanceof MissingRefError)) throw e\n checkLoaded.call(this, e)\n await loadMissingSchema.call(this, e.missingSchema)\n return _compileAsync.call(this, sch)\n }\n }\n\n function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n }\n }\n\n async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n const _schema = await _loadSchema.call(this, ref)\n if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n }\n\n async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n const p = this._loading[ref]\n if (p) return p\n try {\n return await (this._loading[ref] = loadSchema(ref))\n } finally {\n delete this._loading[ref]\n }\n }\n }\n\n // Adds schema to the instance\n addSchema(\n schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ): Ajv {\n if (Array.isArray(schema)) {\n for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n return this\n }\n let id: string | undefined\n if (typeof schema === \"object\") {\n const {schemaId} = this.opts\n id = schema[schemaId]\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`)\n }\n }\n key = normalizeId(key || id)\n this._checkUnique(key)\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n return this\n }\n\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(\n schema: AnySchemaObject,\n key?: string, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ): Ajv {\n this.addSchema(schema, key, true, _validateSchema)\n return this\n }\n\n // Validate schema against its meta-schema\n validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n if (typeof schema == \"boolean\") return true\n let $schema: string | AnySchemaObject | undefined\n $schema = schema.$schema\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\")\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\")\n this.errors = null\n return true\n }\n const valid = this.validate($schema, schema)\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText()\n if (this.opts.validateSchema === \"log\") this.logger.error(message)\n else throw new Error(message)\n }\n return valid\n }\n\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n let sch\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n if (sch === undefined) {\n const {schemaId} = this.opts\n const root = new SchemaEnv({schema: {}, schemaId})\n sch = resolveSchema.call(this, root, keyRef)\n if (!sch) return\n this.refs[keyRef] = sch\n }\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n }\n\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef)\n this._removeAllSchemas(this.refs, schemaKeyRef)\n return this\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas)\n this._removeAllSchemas(this.refs)\n this._cache.clear()\n return this\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef)\n if (typeof sch == \"object\") this._cache.delete(sch.schema)\n delete this.schemas[schemaKeyRef]\n delete this.refs[schemaKeyRef]\n return this\n }\n case \"object\": {\n const cacheKey = schemaKeyRef\n this._cache.delete(cacheKey)\n let id = schemaKeyRef[this.opts.schemaId]\n if (id) {\n id = normalizeId(id)\n delete this.schemas[id]\n delete this.refs[id]\n }\n return this\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\")\n }\n }\n\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions: Vocabulary): Ajv {\n for (const def of definitions) this.addKeyword(def)\n return this\n }\n\n addKeyword(\n kwdOrDef: string | KeywordDefinition,\n def?: KeywordDefinition // deprecated\n ): Ajv {\n let keyword: string | string[]\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n def.keyword = keyword\n }\n } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef\n keyword = def.keyword\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n }\n } else {\n throw new Error(\"invalid addKeywords parameters\")\n }\n\n checkKeyword.call(this, keyword, def)\n if (!def) {\n eachItem(keyword, (kwd) => addRule.call(this, kwd))\n return this\n }\n keywordMetaschema.call(this, def)\n const definition: AddedKeywordDefinition = {\n ...def,\n type: getJSONTypes(def.type),\n schemaType: getJSONTypes(def.schemaType),\n }\n eachItem(\n keyword,\n definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n )\n return this\n }\n\n getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n const rule = this.RULES.all[keyword]\n return typeof rule == \"object\" ? rule.definition : !!rule\n }\n\n // Remove keyword\n removeKeyword(keyword: string): Ajv {\n // TODO return type should be Ajv\n const {RULES} = this\n delete RULES.keywords[keyword]\n delete RULES.all[keyword]\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n if (i >= 0) group.rules.splice(i, 1)\n }\n return this\n }\n\n // Add format\n addFormat(name: string, format: Format): Ajv {\n if (typeof format == \"string\") format = new RegExp(format)\n this.formats[name] = format\n return this\n }\n\n errorsText(\n errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n ): string {\n if (!errors || errors.length === 0) return \"No errors\"\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg)\n }\n\n $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n const rules = this.RULES.all\n metaSchema = JSON.parse(JSON.stringify(metaSchema))\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n let keywords = metaSchema\n for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n for (const key in rules) {\n const rule = rules[key]\n if (typeof rule != \"object\") continue\n const {$data} = rule.definition\n const schema = keywords[key] as AnySchemaObject | undefined\n if ($data && schema) keywords[key] = schemaOrData(schema)\n }\n }\n\n return metaSchema\n }\n\n private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef]\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef]\n } else if (sch && !sch.meta) {\n this._cache.delete(sch.schema)\n delete schemas[keyRef]\n }\n }\n }\n }\n\n _addSchema(\n schema: AnySchema,\n meta?: boolean,\n baseId?: string,\n validateSchema = this.opts.validateSchema,\n addSchema = this.opts.addUsedSchema\n ): SchemaEnv {\n let id: string | undefined\n const {schemaId} = this.opts\n if (typeof schema == \"object\") {\n id = schema[schemaId]\n } else {\n if (this.opts.jtd) throw new Error(\"schema must be object\")\n else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n }\n let sch = this._cache.get(schema)\n if (sch !== undefined) return sch\n\n baseId = normalizeId(id || baseId)\n const localRefs = getSchemaRefs.call(this, schema, baseId)\n sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n this._cache.set(sch.schema, sch)\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId) this._checkUnique(baseId)\n this.refs[baseId] = sch\n }\n if (validateSchema) this.validateSchema(schema, true)\n return sch\n }\n\n private _checkUnique(id: string): void {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`)\n }\n }\n\n private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n if (sch.meta) this._compileMetaSchema(sch)\n else compileSchema.call(this, sch)\n\n /* istanbul ignore if */\n if (!sch.validate) throw new Error(\"ajv implementation error\")\n return sch.validate\n }\n\n private _compileMetaSchema(sch: SchemaEnv): void {\n const currentOpts = this.opts\n this.opts = this._metaOpts\n try {\n compileSchema.call(this, sch)\n } finally {\n this.opts = currentOpts\n }\n }\n}\n\nexport interface ErrorsTextOptions {\n separator?: string\n dataVar?: string\n}\n\nfunction checkOptions(\n this: Ajv,\n checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n options: Options & RemovedOptions,\n msg: string,\n log: \"warn\" | \"error\" = \"error\"\n): void {\n for (const key in checkOpts) {\n const opt = key as keyof typeof checkOpts\n if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n keyRef = normalizeId(keyRef) // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n const optsSchemas = this.opts.schemas\n if (!optsSchemas) return\n if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name]\n if (format) this.addFormat(name, format)\n }\n}\n\nfunction addInitialKeywords(\n this: Ajv,\n defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs)\n return\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\")\n for (const keyword in defs) {\n const def = defs[keyword] as KeywordDefinition\n if (!def.keyword) def.keyword = keyword\n this.addKeyword(def)\n }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n const metaOpts = {...this.opts}\n for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n if (logger === false) return noLogs\n if (logger === undefined) return console\n if (logger.log && logger.warn && logger.error) return logger as Logger\n throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n const {RULES} = this\n eachItem(keyword, (kwd) => {\n if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n })\n if (!def) return\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function')\n }\n}\n\nfunction addRule(\n this: Ajv,\n keyword: string,\n definition?: AddedKeywordDefinition,\n dataType?: JSONType\n): void {\n const post = definition?.post\n if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n const {RULES} = this\n let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n if (!ruleGroup) {\n ruleGroup = {type: dataType, rules: []}\n RULES.rules.push(ruleGroup)\n }\n RULES.keywords[keyword] = true\n if (!definition) return\n\n const rule: Rule = {\n keyword,\n definition: {\n ...definition,\n type: getJSONTypes(definition.type),\n schemaType: getJSONTypes(definition.schemaType),\n },\n }\n if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n else ruleGroup.rules.push(rule)\n RULES.all[keyword] = rule\n definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule)\n } else {\n ruleGroup.rules.push(rule)\n this.logger.warn(`rule ${before} is not defined`)\n }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n let {metaSchema} = def\n if (metaSchema === undefined) return\n if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n return {anyOf: [schema, $dataRef]}\n}\n","import type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt: KeywordCxt): void {\n const {gen, schema: $ref, it} = cxt\n const {baseId, schemaEnv: env, validateName, opts, self} = it\n const {root} = env\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n return inlineRefSchema(schOrEnv)\n\n function callRootRef(): void {\n if (env === root) return callRef(cxt, validateName, env, env.$async)\n const rootName = gen.scopeValue(\"root\", {ref: root})\n return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n }\n\n function callValidate(sch: SchemaEnv): void {\n const v = getValidate(cxt, sch)\n callRef(cxt, v, sch, sch.$async)\n }\n\n function inlineRefSchema(sch: AnySchema): void {\n const schName = gen.scopeValue(\n \"schema\",\n opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n )\n const valid = gen.name(\"valid\")\n const schCxt = cxt.subschema(\n {\n schema: sch,\n dataTypes: [],\n schemaPath: nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n },\n valid\n )\n cxt.mergeEvaluated(schCxt)\n cxt.ok(valid)\n }\n },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n const {gen} = cxt\n return sch.validate\n ? gen.scopeValue(\"validate\", {ref: sch.validate})\n : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n const {gen, it} = cxt\n const {allErrors, schemaEnv: env, opts} = it\n const passCxt = opts.passContext ? N.this : nil\n if ($async) callAsyncRef()\n else callSyncRef()\n\n function callAsyncRef(): void {\n if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n const valid = gen.let(\"valid\")\n gen.try(\n () => {\n gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n if (!allErrors) gen.assign(valid, true)\n },\n (e) => {\n gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n addErrorsFrom(e)\n if (!allErrors) gen.assign(valid, false)\n }\n )\n cxt.ok(valid)\n }\n\n function callSyncRef(): void {\n cxt.result(\n callValidateCode(cxt, v, passCxt),\n () => addEvaluatedFrom(v),\n () => addErrorsFrom(v)\n )\n }\n\n function addErrorsFrom(source: Code): void {\n const errs = _`${source}.errors`\n gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n gen.assign(N.errors, _`${N.vErrors}.length`)\n }\n\n function addEvaluatedFrom(source: Code): void {\n if (!it.opts.unevaluated) return\n const schEvaluated = sch?.validate?.evaluated\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n }\n } else {\n const props = gen.var(\"props\", _`${source}.evaluated.props`)\n it.props = mergeEvaluated.props(gen, props, it.props, Name)\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n }\n } else {\n const items = gen.var(\"items\", _`${source}.evaluated.items`)\n it.items = mergeEvaluated.items(gen, items, it.items, Name)\n }\n }\n }\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n {keyword: \"$comment\"},\n \"definitions\",\n idKeyword,\n refKeyword,\n]\n\nexport default core\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n Kwd,\n {limit: number; comparison: Comparison},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n params: ({keyword, schemaCode}) =>\n _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n \"multipleOf\",\n {multipleOf: number},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schemaCode, it} = cxt\n // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision\n const res = gen.let(\"res\")\n const invalid = prec\n ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : _`${res} !== parseInt(${res})`\n cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n },\n}\n\nexport default def\n","// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n const len = str.length\n let length = 0\n let pos = 0\n let value: number\n while (pos < len) {\n length++\n value = str.charCodeAt(pos++)\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos)\n if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n }\n }\n return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} characters`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode, it} = cxt\n const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n const len =\n it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {useFunc} from \"../../compile/util\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n if ($data) {\n const {regExp} = it.opts.code\n const regExpCode = regExp.code === \"new RegExp\" ? _`new RegExp` : useFunc(gen, regExp)\n const valid = gen.let(\"valid\")\n gen.try(\n () => gen.assign(valid, _`${regExpCode}(${schemaCode}, ${u}).test(${data})`),\n () => gen.assign(valid, false)\n )\n cxt.fail$data(_`!${valid}`)\n } else {\n const regExp = usePattern(cxt, schema)\n cxt.fail$data(_`!${regExp}.test(${data})`)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} properties`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n checkReportMissingProp,\n checkMissingProp,\n reportMissingProp,\n propertyInData,\n noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n \"required\",\n {missingProperty: string},\n string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, schemaCode, data, $data, it} = cxt\n const {opts} = it\n if (!$data && schema.length === 0) return\n const useLoop = schema.length >= opts.loopRequired\n if (it.allErrors) allErrorsMode()\n else exitOnErrorMode()\n\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties\n const {definedProperties} = cxt.it\n for (const requiredKey of schema) {\n if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n checkStrictMode(it, msg, it.opts.strictRequired)\n }\n }\n }\n\n function allErrorsMode(): void {\n if (useLoop || $data) {\n cxt.block$data(nil, loopAllRequired)\n } else {\n for (const prop of schema) {\n checkReportMissingProp(cxt, prop)\n }\n }\n }\n\n function exitOnErrorMode(): void {\n const missing = gen.let(\"missing\")\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true)\n cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n cxt.ok(valid)\n } else {\n gen.if(checkMissingProp(cxt, schema, missing))\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n\n function loopAllRequired(): void {\n gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n cxt.setParams({missingProperty: prop})\n gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n })\n }\n\n function loopUntilMissing(missing: Name, valid: Name): void {\n cxt.setParams({missingProperty: missing})\n gen.forOf(\n missing,\n schemaCode as Code,\n () => {\n gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n gen.if(not(valid), () => {\n cxt.error()\n gen.break()\n })\n },\n nil\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} items`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n \"uniqueItems\",\n {i: number; j: number},\n boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {i, j}}) =>\n str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n if (!$data && !schema) return\n const valid = gen.let(\"valid\")\n const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n cxt.ok(valid)\n\n function validateUniqueItems(): void {\n const i = gen.let(\"i\", _`${data}.length`)\n const j = gen.let(\"j\")\n cxt.setParams({i, j})\n gen.assign(valid, true)\n gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n }\n\n function canOptimize(): boolean {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n }\n\n function loopN(i: Name, j: Name): void {\n const item = gen.name(\"item\")\n const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n const indices = gen.const(\"indices\", _`{}`)\n gen.for(_`;${i}--;`, () => {\n gen.let(item, _`${data}[${i}]`)\n gen.if(wrongType, _`continue`)\n if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n gen\n .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, _`${indices}[${item}]`)\n cxt.error()\n gen.assign(valid, false).break()\n })\n .code(_`${indices}[${item}] = ${i}`)\n })\n }\n\n function loopN2(i: Name, j: Name): void {\n const eql = useFunc(gen, equal)\n const outer = gen.name(\"outer\")\n gen.label(outer).for(_`;${i}--;`, () =>\n gen.for(_`${j} = ${i}; ${j}--;`, () =>\n gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error()\n gen.assign(valid, false).break(outer)\n })\n )\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to constant\",\n params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schemaCode, schema} = cxt\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n } else {\n cxt.fail(_`${schema} !== ${data}`)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to one of the allowed values\",\n params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n const useLoop = schema.length >= it.opts.loopEnum\n let eql: Name | undefined\n const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n let valid: Code\n if (useLoop || $data) {\n valid = gen.let(\"valid\")\n cxt.block$data(valid, loopEnum)\n } else {\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const vSchema = gen.const(\"vSchema\", schemaCode)\n valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n }\n cxt.pass(valid)\n\n function loopEnum(): void {\n gen.assign(valid, false)\n gen.forOf(\"v\", schemaCode as Code, (v) =>\n gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n )\n }\n\n function equalCode(vSchema: Name, i: number): Code {\n const sch = schema[i]\n return typeof sch === \"object\" && sch !== null\n ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n : _`${data} === ${sch}`\n }\n },\n}\n\nexport default def\n","import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n // number\n limitNumber,\n multipleOf,\n // string\n limitLength,\n pattern,\n // object\n limitProperties,\n required,\n // array\n limitItems,\n uniqueItems,\n // any\n {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n {keyword: \"nullable\", schemaType: \"boolean\"},\n constKeyword,\n enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n {limit: number},\n number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n | LimitError\n | LimitNumberError\n | MultipleOfError\n | PatternError\n | RequiredError\n | UniqueItemsError\n | ConstError\n | EnumError\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"additionalItems\" as const,\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {parentSchema, it} = cxt\n const {items} = parentSchema\n if (!Array.isArray(items)) {\n checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n return\n }\n validateAdditionalItems(cxt, items)\n },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n const {gen, schema, data, keyword, it} = cxt\n it.items = true\n const len = gen.const(\"len\", _`${data}.length`)\n if (schema === false) {\n cxt.setParams({len: items.length})\n cxt.pass(_`${len} <= ${items.length}`)\n } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n gen.if(not(valid), () => validateItems(valid))\n cxt.ok(valid)\n }\n\n function validateItems(valid: Name): void {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n if (!it.allErrors) gen.if(not(valid), () => gen.break())\n })\n }\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt: KeywordCxt) {\n const {schema, it} = cxt\n if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n cxt.ok(validateArray(cxt))\n },\n}\n\nexport function validateTuple(\n cxt: KeywordCxt,\n extraItems: string,\n schArr: AnySchema[] = cxt.schema\n): void {\n const {gen, parentSchema, data, keyword, it} = cxt\n checkStrictTuple(parentSchema)\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n }\n const valid = gen.name(\"valid\")\n const len = gen.const(\"len\", _`${data}.length`)\n schArr.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n gen.if(_`${len} > ${i}`, () =>\n cxt.subschema(\n {\n keyword,\n schemaProp: i,\n dataProp: i,\n },\n valid\n )\n )\n cxt.ok(valid)\n })\n\n function checkStrictTuple(sch: AnySchemaObject): void {\n const {opts, errSchemaPath} = it\n const l = schArr.length\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n checkStrictMode(it, msg, opts.strictTuples)\n }\n }\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {schema, parentSchema, it} = cxt\n const {prefixItems} = parentSchema\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n else cxt.ok(validateArray(cxt))\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n \"contains\",\n {minContains: number; maxContains?: number},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {min, max}}) =>\n max === undefined\n ? str`must contain at least ${min} valid item(s)`\n : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({params: {min, max}}) =>\n max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n let min: number\n let max: number | undefined\n const {minContains, maxContains} = parentSchema\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains\n max = maxContains\n } else {\n min = 1\n }\n const len = gen.const(\"len\", _`${data}.length`)\n cxt.setParams({min, max})\n if (max === undefined && min === 0) {\n checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n return\n }\n if (max !== undefined && min > max) {\n checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n cxt.fail()\n return\n }\n if (alwaysValidSchema(it, schema)) {\n let cond = _`${len} >= ${min}`\n if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n cxt.pass(cond)\n return\n }\n\n it.items = true\n const valid = gen.name(\"valid\")\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()))\n } else if (min === 0) {\n gen.let(valid, true)\n if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n } else {\n gen.let(valid, false)\n validateItemsWithCount()\n }\n cxt.result(valid, () => cxt.reset())\n\n function validateItemsWithCount(): void {\n const schValid = gen.name(\"_valid\")\n const count = gen.let(\"count\", 0)\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n }\n\n function validateItems(_valid: Name, block: () => void): void {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword: \"contains\",\n dataProp: i,\n dataPropType: Type.Num,\n compositeRule: true,\n },\n _valid\n )\n block()\n })\n }\n\n function checkLimits(count: Name): void {\n gen.code(_`${count}++`)\n if (max === undefined) {\n gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n } else {\n gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n if (min === 1) gen.assign(valid, true)\n else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n }\n }\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n SchemaMap,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n property: string\n missingProperty: string\n depsCount: number\n deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n \"dependencies\",\n DependenciesErrorParams,\n {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n message: ({params: {property, depsCount, deps}}) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n return str`must have ${property_ies} ${deps} when property ${property} is present`\n },\n params: ({params: {property, depsCount, deps, missingProperty}}) =>\n _`{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const [propDeps, schDeps] = splitDependencies(cxt)\n validatePropertyDeps(cxt, propDeps)\n validateSchemaDeps(cxt, schDeps)\n },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n const propertyDeps: PropertyDependencies = {}\n const schemaDeps: SchemaDependencies = {}\n for (const key in schema) {\n if (key === \"__proto__\") continue\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n deps[key] = schema[key]\n }\n return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n cxt: KeywordCxt,\n propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n const {gen, data, it} = cxt\n if (Object.keys(propertyDeps).length === 0) return\n const missing = gen.let(\"missing\")\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop] as string[]\n if (deps.length === 0) continue\n const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n })\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n checkReportMissingProp(cxt, depProp)\n }\n })\n } else {\n gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n for (const prop in schemaDeps) {\n if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n gen.if(\n propertyInData(gen, data, prop, it.opts.ownProperties),\n () => {\n const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n cxt.mergeValidEvaluated(schCxt, valid)\n },\n () => gen.var(valid, true) // TODO var\n )\n cxt.ok(valid)\n }\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: \"property name must be valid\",\n params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, data, it} = cxt\n if (alwaysValidSchema(it, schema)) return\n const valid = gen.name(\"valid\")\n\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({propertyName: key})\n cxt.subschema(\n {\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n },\n valid\n )\n gen.if(not(valid), () => {\n cxt.error(true)\n if (!it.allErrors) gen.break()\n })\n })\n\n cxt.ok(valid)\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n AddedKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n \"additionalProperties\",\n {additionalProperty: string},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must NOT have additional properties\",\n params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const {gen, schema, parentSchema, data, errsCount, it} = cxt\n /* istanbul ignore if */\n if (!errsCount) throw new Error(\"ajv implementation error\")\n const {allErrors, opts} = it\n it.props = true\n if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n const props = allSchemaProperties(parentSchema.properties)\n const patProps = allSchemaProperties(parentSchema.patternProperties)\n checkAdditionalProperties()\n cxt.ok(_`${errsCount} === ${N.errors}`)\n\n function checkAdditionalProperties(): void {\n gen.forIn(\"key\", data, (key: Name) => {\n if (!props.length && !patProps.length) additionalPropertyCode(key)\n else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n })\n }\n\n function isAdditional(key: Name): Code {\n let definedProp: Code\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n definedProp = isOwnProperty(gen, propsSchema as Code, key)\n } else if (props.length) {\n definedProp = or(...props.map((p) => _`${key} === ${p}`))\n } else {\n definedProp = nil\n }\n if (patProps.length) {\n definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n }\n return not(definedProp)\n }\n\n function deleteAdditional(key: Name): void {\n gen.code(_`delete ${data}[${key}]`)\n }\n\n function additionalPropertyCode(key: Name): void {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key)\n return\n }\n\n if (schema === false) {\n cxt.setParams({additionalProperty: key})\n cxt.error()\n if (!allErrors) gen.break()\n return\n }\n\n if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.name(\"valid\")\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false)\n gen.if(not(valid), () => {\n cxt.reset()\n deleteAdditional(key)\n })\n } else {\n applyAdditionalSchema(key, valid)\n if (!allErrors) gen.if(not(valid), () => gen.break())\n }\n }\n }\n\n function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n const subschema: SubschemaArgs = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: Type.Str,\n }\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n })\n }\n cxt.subschema(subschema, valid)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n }\n const allProps = allSchemaProperties(schema)\n for (const prop of allProps) {\n it.definedProperties.add(prop)\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n }\n const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n if (properties.length === 0) return\n const valid = gen.name(\"valid\")\n\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop)\n } else {\n gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n applyPropertySchema(prop)\n if (!it.allErrors) gen.else().var(valid, true)\n gen.endIf()\n }\n cxt.it.definedProperties.add(prop)\n cxt.ok(valid)\n }\n\n function hasDefault(prop: string): boolean | undefined {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n }\n\n function applyPropertySchema(prop: string): void {\n cxt.subschema(\n {\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n },\n valid\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, data, parentSchema, it} = cxt\n const {opts} = it\n const patterns = allSchemaProperties(schema)\n const alwaysValidPatterns = patterns.filter((p) =>\n alwaysValidSchema(it, schema[p] as AnySchema)\n )\n\n if (\n patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))\n ) {\n return\n }\n\n const checkProperties =\n opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n const valid = gen.name(\"valid\")\n if (it.props !== true && !(it.props instanceof Name)) {\n it.props = evaluatedPropsToName(gen, it.props)\n }\n const {props} = it\n validatePatternProperties()\n\n function validatePatternProperties(): void {\n for (const pat of patterns) {\n if (checkProperties) checkMatchingProperties(pat)\n if (it.allErrors) {\n validateProperties(pat)\n } else {\n gen.var(valid, true) // TODO var\n validateProperties(pat)\n gen.if(valid)\n }\n }\n }\n\n function checkMatchingProperties(pat: string): void {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n checkStrictMode(\n it,\n `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n )\n }\n }\n }\n\n function validateProperties(pat: string): void {\n gen.forIn(\"key\", data, (key) => {\n gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat)\n if (!alwaysValid) {\n cxt.subschema(\n {\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: Type.Str,\n },\n valid\n )\n }\n\n if (it.opts.unevaluated && props !== true) {\n gen.assign(_`${props}[${key}]`, true)\n } else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if(not(valid), () => gen.break())\n }\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n if (alwaysValidSchema(it, schema)) {\n cxt.fail()\n return\n }\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n valid\n )\n\n cxt.failResult(\n valid,\n () => cxt.reset(),\n () => cxt.error()\n )\n },\n error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: validateUnion,\n error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n \"oneOf\",\n {passingSchemas: [number, number] | null},\n AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must match exactly one schema in oneOf\",\n params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n if (it.opts.discriminator && parentSchema.discriminator) return\n const schArr: AnySchema[] = schema\n const valid = gen.let(\"valid\", false)\n const passing = gen.let(\"passing\", null)\n const schValid = gen.name(\"_valid\")\n cxt.setParams({passing})\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n gen.block(validateOneOf)\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n\n function validateOneOf(): void {\n schArr.forEach((sch: AnySchema, i: number) => {\n let schCxt: SchemaCxt | undefined\n if (alwaysValidSchema(it, sch)) {\n gen.var(schValid, true)\n } else {\n schCxt = cxt.subschema(\n {\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n }\n\n if (i > 0) {\n gen\n .if(_`${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, _`[${passing}, ${i}]`)\n .else()\n }\n\n gen.if(schValid, () => {\n gen.assign(valid, true)\n gen.assign(passing, i)\n if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const valid = gen.name(\"valid\")\n schema.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n cxt.ok(valid)\n cxt.mergeEvaluated(schCxt)\n })\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, parentSchema, it} = cxt\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n }\n const hasThen = hasSchema(it, \"then\")\n const hasElse = hasSchema(it, \"else\")\n if (!hasThen && !hasElse) return\n\n const valid = gen.let(\"valid\", true)\n const schValid = gen.name(\"_valid\")\n validateIf()\n cxt.reset()\n\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\")\n cxt.setParams({ifClause})\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n } else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"))\n } else {\n gen.if(not(schValid), validateClause(\"else\"))\n }\n\n cxt.pass(valid, () => cxt.error(true))\n\n function validateIf(): void {\n const schCxt = cxt.subschema(\n {\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n schValid\n )\n cxt.mergeEvaluated(schCxt)\n }\n\n function validateClause(keyword: string, ifClause?: Name): () => void {\n return () => {\n const schCxt = cxt.subschema({keyword}, schValid)\n gen.assign(valid, schValid)\n cxt.mergeValidEvaluated(schCxt, valid)\n if (ifClause) gen.assign(ifClause, _`${keyword}`)\n else cxt.setParams({ifClause: keyword})\n }\n }\n },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n const schema = it.schema[keyword]\n return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({keyword, parentSchema, it}: KeywordCxt) {\n if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n },\n}\n\nexport default def\n","import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n const applicator = [\n // any\n notKeyword,\n anyOf,\n oneOf,\n allOf,\n ifKeyword,\n thenElse,\n // object\n propertyNames,\n additionalProperties,\n dependencies,\n properties,\n patternProperties,\n ]\n // array\n if (draft2020) applicator.push(prefixItems, items2020)\n else applicator.push(additionalItems, items)\n applicator.push(contains)\n return applicator\n}\n\nexport type ApplicatorKeywordError =\n | ErrorNoParams<\"false schema\">\n | AdditionalItemsError\n | ItemsError\n | ContainsError\n | AdditionalPropertiesError\n | DependenciesError\n | IfKeywordError\n | AnyOfError\n | OneOfError\n | NotKeywordError\n | PropertyNamesError\n","import type {\n AddedFormat,\n FormatValidator,\n AsyncFormatValidator,\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n | FormatValidator<string>\n | FormatValidator<number>\n | AsyncFormatValidator<string>\n | AsyncFormatValidator<number>\n | RegExp\n | string\n | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt, ruleType?: string) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n const {opts, errSchemaPath, schemaEnv, self} = it\n if (!opts.validateFormats) return\n\n if ($data) validate$DataFormat()\n else validateFormat()\n\n function validate$DataFormat(): void {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n })\n const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n const fType = gen.let(\"fType\")\n const format = gen.let(\"format\")\n // TODO simplify\n gen.if(\n _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n )\n cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n function unknownFmt(): Code {\n if (opts.strictSchema === false) return nil\n return _`${schemaCode} && !${format}`\n }\n\n function invalidFmt(): Code {\n const callFormat = schemaEnv.$async\n ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : _`${format}(${data})`\n const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n }\n }\n\n function validateFormat(): void {\n const formatDef: AddedFormat | undefined = self.formats[schema]\n if (!formatDef) {\n unknownFormat()\n return\n }\n if (formatDef === true) return\n const [fmtType, format, fmtRef] = getFormat(formatDef)\n if (fmtType === ruleType) cxt.pass(validCondition())\n\n function unknownFormat(): void {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg())\n return\n }\n throw new Error(unknownMsg())\n\n function unknownMsg(): string {\n return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n }\n }\n\n function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n const code =\n fmtDef instanceof RegExp\n ? regexpCode(fmtDef)\n : opts.code.formats\n ? _`${opts.code.formats}${getProperty(schema)}`\n : undefined\n const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n }\n\n return [\"string\", fmtDef, fmt]\n }\n\n function validCondition(): Code {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n return _`await ${fmtRef}(${data})`\n }\n return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n }\n }\n },\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n","import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n]\n","import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft7Vocabularies: Vocabulary[] = [\n coreVocabulary,\n validationVocabulary,\n getApplicatorVocabulary(),\n formatVocabulary,\n metadataVocabulary,\n contentVocabulary,\n]\n\nexport default draft7Vocabularies\n","import type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n Tag = \"tag\",\n Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n \"discriminator\",\n {error: E; tag: string; tagValue: unknown},\n string\n>\n","import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {discrError, tagName}}) =>\n discrError === DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({params: {discrError, tag, tagName}}) =>\n _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schema, parentSchema, it} = cxt\n const {oneOf} = parentSchema\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\")\n }\n const tagName = schema.propertyName\n if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n const valid = gen.let(\"valid\", false)\n const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n gen.if(\n _`typeof ${tag} == \"string\"`,\n () => validateMapping(),\n () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n )\n cxt.ok(valid)\n\n function validateMapping(): void {\n const mapping = getMapping()\n gen.if(false)\n for (const tagValue in mapping) {\n gen.elseIf(_`${tag} === ${tagValue}`)\n gen.assign(valid, applyTagSchema(mapping[tagValue]))\n }\n gen.else()\n cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n gen.endIf()\n }\n\n function applyTagSchema(schemaProp?: number): Name {\n const _valid = gen.name(\"valid\")\n const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n cxt.mergeEvaluated(schCxt, Name)\n return _valid\n }\n\n function getMapping(): {[T in string]?: number} {\n const oneOfMapping: {[T in string]?: number} = {}\n const topRequired = hasRequired(parentSchema)\n let tagRequired = true\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i]\n if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n const ref = sch.$ref\n sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref)\n if (sch instanceof SchemaEnv) sch = sch.schema\n if (sch === undefined) throw new MissingRefError(it.opts.uriResolver, it.baseId, ref)\n }\n const propSch = sch?.properties?.[tagName]\n if (typeof propSch != \"object\") {\n throw new Error(\n `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n )\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch))\n addMappings(propSch, i)\n }\n if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n return oneOfMapping\n\n function hasRequired({required}: AnySchemaObject): boolean {\n return Array.isArray(required) && required.includes(tagName)\n }\n\n function addMappings(sch: AnySchemaObject, i: number): void {\n if (sch.const) {\n addMapping(sch.const, i)\n } else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i)\n }\n } else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n }\n }\n\n function addMapping(tagValue: unknown, i: number): void {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n }\n oneOfMapping[tagValue] = i\n }\n }\n },\n}\n\nexport default def\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Core schema meta-schema\",\n \"definitions\": {\n \"schemaArray\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\"$ref\": \"#\"}\n },\n \"nonNegativeInteger\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"nonNegativeIntegerDefault0\": {\n \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n },\n \"simpleTypes\": {\n \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n },\n \"stringArray\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"},\n \"uniqueItems\": true,\n \"default\": []\n }\n },\n \"type\": [\"object\", \"boolean\"],\n \"properties\": {\n \"$id\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri\"\n },\n \"$ref\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$comment\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"default\": true,\n \"readOnly\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"examples\": {\n \"type\": \"array\",\n \"items\": true\n },\n \"multipleOf\": {\n \"type\": \"number\",\n \"exclusiveMinimum\": 0\n },\n \"maximum\": {\n \"type\": \"number\"\n },\n \"exclusiveMaximum\": {\n \"type\": \"number\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"exclusiveMinimum\": {\n \"type\": \"number\"\n },\n \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n \"pattern\": {\n \"type\": \"string\",\n \"format\": \"regex\"\n },\n \"additionalItems\": {\"$ref\": \"#\"},\n \"items\": {\n \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n \"default\": true\n },\n \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n \"uniqueItems\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"contains\": {\"$ref\": \"#\"},\n \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"definitions\": {\n \"type\": \"object\",\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"default\": {}\n },\n \"properties\": {\n \"type\": \"object\",\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"default\": {}\n },\n \"patternProperties\": {\n \"type\": \"object\",\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"propertyNames\": {\"format\": \"regex\"},\n \"default\": {}\n },\n \"dependencies\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n }\n },\n \"propertyNames\": {\"$ref\": \"#\"},\n \"const\": true,\n \"enum\": {\n \"type\": \"array\",\n \"items\": true,\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"type\": {\n \"anyOf\": [\n {\"$ref\": \"#/definitions/simpleTypes\"},\n {\n \"type\": \"array\",\n \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n \"minItems\": 1,\n \"uniqueItems\": true\n }\n ]\n },\n \"format\": {\"type\": \"string\"},\n \"contentMediaType\": {\"type\": \"string\"},\n \"contentEncoding\": {\"type\": \"string\"},\n \"if\": {\"$ref\": \"#\"},\n \"then\": {\"$ref\": \"#\"},\n \"else\": {\"$ref\": \"#\"},\n \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n \"not\": {\"$ref\": \"#\"}\n },\n \"default\": true\n}\n","import type {AnySchemaObject} from \"./types\"\nimport AjvCore from \"./core\"\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport * as draft7MetaSchema from \"./refs/json-schema-draft-07.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\"\n\nexport class Ajv extends AjvCore {\n _addVocabularies(): void {\n super._addVocabularies()\n draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n if (this.opts.discriminator) this.addKeyword(discriminator)\n }\n\n _addDefaultMetaSchema(): void {\n super._addDefaultMetaSchema()\n if (!this.opts.meta) return\n const metaSchema = this.opts.$data\n ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n : draft7MetaSchema\n this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n }\n}\n\nmodule.exports = exports = Ajv\nmodule.exports.Ajv = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n SchemaValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n","import type {Format, FormatDefinition} from \"ajv\"\nimport type {FormatValidator, FormatCompare} from \"ajv/dist/types\"\n\nexport type FormatMode = \"fast\" | \"full\"\n\nexport type FormatName =\n | \"date\"\n | \"time\"\n | \"date-time\"\n | \"iso-time\"\n | \"iso-date-time\"\n | \"duration\"\n | \"uri\"\n | \"uri-reference\"\n | \"uri-template\"\n | \"url\"\n | \"email\"\n | \"hostname\"\n | \"ipv4\"\n | \"ipv6\"\n | \"regex\"\n | \"uuid\"\n | \"json-pointer\"\n | \"json-pointer-uri-fragment\"\n | \"relative-json-pointer\"\n | \"byte\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"double\"\n | \"password\"\n | \"binary\"\n\nexport type DefinedFormats = {\n [key in FormatName]: Format\n}\n\nfunction fmtDef(\n validate: RegExp | FormatValidator<string>,\n compare: FormatCompare<string>\n): FormatDefinition<string> {\n return {validate, compare}\n}\n\nexport const fullFormats: DefinedFormats = {\n // date: http://tools.ietf.org/html/rfc3339#section-5.6\n date: fmtDef(date, compareDate),\n // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n time: fmtDef(getTime(true), compareTime),\n \"date-time\": fmtDef(getDateTime(true), compareDateTime),\n \"iso-time\": fmtDef(getTime(), compareIsoTime),\n \"iso-date-time\": fmtDef(getDateTime(), compareIsoDateTime),\n // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n uri,\n \"uri-reference\":\n /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n // uri-template: https://tools.ietf.org/html/rfc6570\n \"uri-template\":\n /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n // For the source: https://gist.github.com/dperini/729294\n // For test cases: https://mathiasbynens.be/demo/url-regex\n url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n email:\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname:\n /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/,\n ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i,\n regex,\n // uuid: http://tools.ietf.org/html/rfc4122\n uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n // JSON-pointer: https://tools.ietf.org/html/rfc6901\n // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n // byte: https://github.com/miguelmota/is-base64\n byte,\n // signed 32 bit integer\n int32: {type: \"number\", validate: validateInt32},\n // signed 64 bit integer\n int64: {type: \"number\", validate: validateInt64},\n // C-type float\n float: {type: \"number\", validate: validateNumber},\n // C-type double\n double: {type: \"number\", validate: validateNumber},\n // hint to the UI to hide input strings\n password: true,\n // unchecked string payload\n binary: true,\n}\n\nexport const fastFormats: DefinedFormats = {\n ...fullFormats,\n date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n time: fmtDef(\n /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n compareTime\n ),\n \"date-time\": fmtDef(\n /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\dt(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n compareDateTime\n ),\n \"iso-time\": fmtDef(\n /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n compareIsoTime\n ),\n \"iso-date-time\": fmtDef(\n /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n compareIsoDateTime\n ),\n // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n // email (sources from jsen validator):\n // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n email:\n /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n}\n\nexport const formatNames = Object.keys(fullFormats) as FormatName[]\n\nfunction isLeapYear(year: number): boolean {\n // https://tools.ietf.org/html/rfc3339#appendix-C\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\n}\n\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction date(str: string): boolean {\n // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n const matches: string[] | null = DATE.exec(str)\n if (!matches) return false\n const year: number = +matches[1]\n const month: number = +matches[2]\n const day: number = +matches[3]\n return (\n month >= 1 &&\n month <= 12 &&\n day >= 1 &&\n day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month])\n )\n}\n\nfunction compareDate(d1: string, d2: string): number | undefined {\n if (!(d1 && d2)) return undefined\n if (d1 > d2) return 1\n if (d1 < d2) return -1\n return 0\n}\n\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d(?:\\.\\d+)?)(z|([+-])(\\d\\d)(?::?(\\d\\d))?)?$/i\n\nfunction getTime(strictTimeZone?: boolean): (str: string) => boolean {\n return function time(str: string): boolean {\n const matches: string[] | null = TIME.exec(str)\n if (!matches) return false\n const hr: number = +matches[1]\n const min: number = +matches[2]\n const sec: number = +matches[3]\n const tz: string | undefined = matches[4]\n const tzSign: number = matches[5] === \"-\" ? -1 : 1\n const tzH: number = +(matches[6] || 0)\n const tzM: number = +(matches[7] || 0)\n if (tzH > 23 || tzM > 59 || (strictTimeZone && !tz)) return false\n if (hr <= 23 && min <= 59 && sec < 60) return true\n // leap second\n const utcMin = min - tzM * tzSign\n const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0)\n return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61\n }\n}\n\nfunction compareTime(s1: string, s2: string): number | undefined {\n if (!(s1 && s2)) return undefined\n const t1 = new Date(\"2020-01-01T\" + s1).valueOf()\n const t2 = new Date(\"2020-01-01T\" + s2).valueOf()\n if (!(t1 && t2)) return undefined\n return t1 - t2\n}\n\nfunction compareIsoTime(t1: string, t2: string): number | undefined {\n if (!(t1 && t2)) return undefined\n const a1 = TIME.exec(t1)\n const a2 = TIME.exec(t2)\n if (!(a1 && a2)) return undefined\n t1 = a1[1] + a1[2] + a1[3]\n t2 = a2[1] + a2[2] + a2[3]\n if (t1 > t2) return 1\n if (t1 < t2) return -1\n return 0\n}\n\nconst DATE_TIME_SEPARATOR = /t|\\s/i\nfunction getDateTime(strictTimeZone?: boolean): (str: string) => boolean {\n const time = getTime(strictTimeZone)\n\n return function date_time(str: string): boolean {\n // http://tools.ietf.org/html/rfc3339#section-5.6\n const dateTime: string[] = str.split(DATE_TIME_SEPARATOR)\n return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1])\n }\n}\n\nfunction compareDateTime(dt1: string, dt2: string): number | undefined {\n if (!(dt1 && dt2)) return undefined\n const d1 = new Date(dt1).valueOf()\n const d2 = new Date(dt2).valueOf()\n if (!(d1 && d2)) return undefined\n return d1 - d2\n}\n\nfunction compareIsoDateTime(dt1: string, dt2: string): number | undefined {\n if (!(dt1 && dt2)) return undefined\n const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR)\n const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR)\n const res = compareDate(d1, d2)\n if (res === undefined) return undefined\n return res || compareTime(t1, t2)\n}\n\nconst NOT_URI_FRAGMENT = /\\/|:/\nconst URI =\n /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i\n\nfunction uri(str: string): boolean {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return NOT_URI_FRAGMENT.test(str) && URI.test(str)\n}\n\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm\n\nfunction byte(str: string): boolean {\n BYTE.lastIndex = 0\n return BYTE.test(str)\n}\n\nconst MIN_INT32 = -(2 ** 31)\nconst MAX_INT32 = 2 ** 31 - 1\n\nfunction validateInt32(value: number): boolean {\n return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32\n}\n\nfunction validateInt64(value: number): boolean {\n // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n return Number.isInteger(value)\n}\n\nfunction validateNumber(): boolean {\n return true\n}\n\nconst Z_ANCHOR = /[^\\\\]\\\\Z/\nfunction regex(str: string): boolean {\n if (Z_ANCHOR.test(str)) return false\n try {\n new RegExp(str)\n return true\n } catch (e) {\n return false\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport abstract class _CodeOrName {\n abstract readonly str: string\n abstract readonly names: UsedNames\n abstract toString(): string\n abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n readonly str: string\n constructor(s: string) {\n super()\n if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n this.str = s\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n return false\n }\n\n get names(): UsedNames {\n return {[this.str]: 1}\n }\n}\n\nexport class _Code extends _CodeOrName {\n readonly _items: readonly CodeItem[]\n private _str?: string\n private _names?: UsedNames\n\n constructor(code: string | readonly CodeItem[]) {\n super()\n this._items = typeof code === \"string\" ? [code] : code\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n if (this._items.length > 1) return false\n const item = this._items[0]\n return item === \"\" || item === '\"\"'\n }\n\n get str(): string {\n return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n }\n\n get names(): UsedNames {\n return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n return names\n }, {}))\n }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n const code: CodeItem[] = [strs[0]]\n let i = 0\n while (i < args.length) {\n addCodeArg(code, args[i])\n code.push(strs[++i])\n }\n return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n const expr: CodeItem[] = [safeStringify(strs[0])]\n let i = 0\n while (i < args.length) {\n expr.push(plus)\n addCodeArg(expr, args[i])\n expr.push(plus, safeStringify(strs[++i]))\n }\n optimize(expr)\n return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n if (arg instanceof _Code) code.push(...arg._items)\n else if (arg instanceof Name) code.push(arg)\n else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n let i = 1\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1])\n if (res !== undefined) {\n expr.splice(i - 1, 3, res)\n continue\n }\n expr[i++] = \"+\"\n }\n i++\n }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n if (b === '\"\"') return a\n if (a === '\"\"') return b\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"') return\n if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n return\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n return new _Code(`${key}`)\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n return new _Code(rx.toString())\n}\n","import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n prefix: string\n index: number\n}\n\nexport interface NameValue {\n ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n readonly value?: NameValue\n constructor(name: ValueScopeName) {\n super(`CodeGen: \"code\" for ${name} not defined`)\n this.value = name.value\n }\n}\n\ninterface ScopeOptions {\n prefixes?: Set<string>\n parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n scope: ScopeStore\n es5?: boolean\n lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n Started,\n Completed,\n}\n\nexport type UsedScopeValues = {\n [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n const: new Name(\"const\"),\n let: new Name(\"let\"),\n var: new Name(\"var\"),\n}\n\nexport class Scope {\n protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n protected readonly _prefixes?: Set<string>\n protected readonly _parent?: Scope\n\n constructor({prefixes, parent}: ScopeOptions = {}) {\n this._prefixes = prefixes\n this._parent = parent\n }\n\n toName(nameOrPrefix: Name | string): Name {\n return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n }\n\n name(prefix: string): Name {\n return new Name(this._newName(prefix))\n }\n\n protected _newName(prefix: string): string {\n const ng = this._names[prefix] || this._nameGroup(prefix)\n return `${prefix}${ng.index++}`\n }\n\n private _nameGroup(prefix: string): NameGroup {\n if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n }\n return (this._names[prefix] = {prefix, index: 0})\n }\n}\n\ninterface ScopePath {\n property: string\n itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n readonly prefix: string\n value?: NameValue\n scopePath?: Code\n\n constructor(prefix: string, nameStr: string) {\n super(nameStr)\n this.prefix = prefix\n }\n\n setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n this.value = value\n this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n protected readonly _values: ScopeValues = {}\n protected readonly _scope: ScopeStore\n readonly opts: VSOptions\n\n constructor(opts: ValueScopeOptions) {\n super(opts)\n this._scope = opts.scope\n this.opts = {...opts, _n: opts.lines ? line : nil}\n }\n\n get(): ScopeStore {\n return this._scope\n }\n\n name(prefix: string): ValueScopeName {\n return new ValueScopeName(prefix, this._newName(prefix))\n }\n\n value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n const name = this.toName(nameOrPrefix) as ValueScopeName\n const {prefix} = name\n const valueKey = value.key ?? value.ref\n let vs = this._values[prefix]\n if (vs) {\n const _name = vs.get(valueKey)\n if (_name) return _name\n } else {\n vs = this._values[prefix] = new Map()\n }\n vs.set(valueKey, name)\n\n const s = this._scope[prefix] || (this._scope[prefix] = [])\n const itemIndex = s.length\n s[itemIndex] = value.ref\n name.setValue(value, {property: prefix, itemIndex})\n return name\n }\n\n getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n const vs = this._values[prefix]\n if (!vs) return\n return vs.get(keyOrRef)\n }\n\n scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n return this._reduceValues(values, (name: ValueScopeName) => {\n if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return _`${scopeName}${name.scopePath}`\n })\n }\n\n scopeCode(\n values: ScopeValues | ScopeValueSets = this._values,\n usedValues?: UsedScopeValues,\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n return this._reduceValues(\n values,\n (name: ValueScopeName) => {\n if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return name.value.code\n },\n usedValues,\n getCode\n )\n }\n\n private _reduceValues(\n values: ScopeValues | ScopeValueSets,\n valueCode: (n: ValueScopeName) => Code | undefined,\n usedValues: UsedScopeValues = {},\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n let code: Code = nil\n for (const prefix in values) {\n const vs = values[prefix]\n if (!vs) continue\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n vs.forEach((name: ValueScopeName) => {\n if (nameSet.has(name)) return\n nameSet.set(name, UsedValueState.Started)\n let c = valueCode(name)\n if (c) {\n const def = this.opts.es5 ? varKinds.var : varKinds.const\n code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n } else if ((c = getCode?.(name))) {\n code = _`${code}${c}${this.opts._n}`\n } else {\n throw new ValueError(name)\n }\n nameSet.set(name, UsedValueState.Completed)\n })\n }\n return code\n }\n}\n","import type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n GT: new _Code(\">\"),\n GTE: new _Code(\">=\"),\n LT: new _Code(\"<\"),\n LTE: new _Code(\"<=\"),\n EQ: new _Code(\"===\"),\n NEQ: new _Code(\"!==\"),\n NOT: new _Code(\"!\"),\n OR: new _Code(\"||\"),\n AND: new _Code(\"&&\"),\n ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n abstract readonly names: UsedNames\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n return this\n }\n\n optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n return this\n }\n\n // get count(): number {\n // return 1\n // }\n}\n\nclass Def extends Node {\n constructor(\n private readonly varKind: Name,\n private readonly name: Name,\n private rhs?: SafeExpr\n ) {\n super()\n }\n\n render({es5, _n}: CGOptions): string {\n const varKind = es5 ? varKinds.var : this.varKind\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n return `${varKind} ${this.name}${rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!names[this.name.str]) return\n if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n }\n}\n\nclass Assign extends Node {\n constructor(\n readonly lhs: Code,\n public rhs: SafeExpr,\n private readonly sideEffects?: boolean\n ) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} = ${this.rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n return addExprNames(names, this.rhs)\n }\n}\n\nclass AssignOp extends Assign {\n constructor(\n lhs: Code,\n private readonly op: Code,\n rhs: SafeExpr,\n sideEffects?: boolean\n ) {\n super(lhs, rhs, sideEffects)\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n }\n}\n\nclass Label extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label: Name) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.label}:` + _n\n }\n}\n\nclass Break extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label?: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n const label = this.label ? ` ${this.label}` : \"\"\n return `break${label};` + _n\n }\n}\n\nclass Throw extends Node {\n constructor(readonly error: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `throw ${this.error};` + _n\n }\n\n get names(): UsedNames {\n return this.error.names\n }\n}\n\nclass AnyCode extends Node {\n constructor(private code: SafeExpr) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.code};` + _n\n }\n\n optimizeNodes(): this | undefined {\n return `${this.code}` ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n this.code = optimizeExpr(this.code, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.code instanceof _CodeOrName ? this.code.names : {}\n }\n}\n\nabstract class ParentNode extends Node {\n constructor(readonly nodes: ChildNode[] = []) {\n super()\n }\n\n render(opts: CGOptions): string {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n }\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n const n = nodes[i].optimizeNodes()\n if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n else if (n) nodes[i] = n\n else nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i]\n if (n.optimizeNames(names, constants)) continue\n subtractNames(names, n.names)\n nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n get names(): UsedNames {\n return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n }\n\n // get count(): number {\n // return this.nodes.reduce((c, n) => c + n.count, 1)\n // }\n}\n\nabstract class BlockNode extends ParentNode {\n render(opts: CGOptions): string {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n static readonly kind = \"if\"\n else?: If | Else\n constructor(\n private condition: Code | boolean,\n nodes?: ChildNode[]\n ) {\n super(nodes)\n }\n\n render(opts: CGOptions): string {\n let code = `if(${this.condition})` + super.render(opts)\n if (this.else) code += \"else \" + this.else.render(opts)\n return code\n }\n\n optimizeNodes(): If | ChildNode[] | undefined {\n super.optimizeNodes()\n const cond = this.condition\n if (cond === true) return this.nodes // else is ignored here\n let e = this.else\n if (e) {\n const ns = e.optimizeNodes()\n e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n }\n if (e) {\n if (cond === false) return e instanceof If ? e : e.nodes\n if (this.nodes.length) return this\n return new If(not(cond), e instanceof If ? [e] : e.nodes)\n }\n if (cond === false || !this.nodes.length) return undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n this.else = this.else?.optimizeNames(names, constants)\n if (!(super.optimizeNames(names, constants) || this.else)) return\n this.condition = optimizeExpr(this.condition, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n addExprNames(names, this.condition)\n if (this.else) addNames(names, this.else.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.else?.count || 0)\n // }\n}\n\nabstract class For extends BlockNode {\n static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n constructor(private iteration: Code) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.iteration})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iteration = optimizeExpr(this.iteration, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iteration.names)\n }\n}\n\nclass ForRange extends For {\n constructor(\n private readonly varKind: Name,\n private readonly name: Name,\n private readonly from: SafeExpr,\n private readonly to: SafeExpr\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n const varKind = opts.es5 ? varKinds.var : this.varKind\n const {name, from, to} = this\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n }\n\n get names(): UsedNames {\n const names = addExprNames(super.names, this.from)\n return addExprNames(names, this.to)\n }\n}\n\nclass ForIter extends For {\n constructor(\n private readonly loop: \"of\" | \"in\",\n private readonly varKind: Name,\n private readonly name: Name,\n private iterable: Code\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iterable = optimizeExpr(this.iterable, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iterable.names)\n }\n}\n\nclass Func extends BlockNode {\n static readonly kind = \"func\"\n constructor(\n public name: Name,\n public args: Code,\n public async?: boolean\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n const _async = this.async ? \"async \" : \"\"\n return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n }\n}\n\nclass Return extends ParentNode {\n static readonly kind = \"return\"\n\n render(opts: CGOptions): string {\n return \"return \" + super.render(opts)\n }\n}\n\nclass Try extends BlockNode {\n catch?: Catch\n finally?: Finally\n\n render(opts: CGOptions): string {\n let code = \"try\" + super.render(opts)\n if (this.catch) code += this.catch.render(opts)\n if (this.finally) code += this.finally.render(opts)\n return code\n }\n\n optimizeNodes(): this {\n super.optimizeNodes()\n this.catch?.optimizeNodes() as Catch | undefined\n this.finally?.optimizeNodes() as Finally | undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n super.optimizeNames(names, constants)\n this.catch?.optimizeNames(names, constants)\n this.finally?.optimizeNames(names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n if (this.catch) addNames(names, this.catch.names)\n if (this.finally) addNames(names, this.finally.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n // }\n}\n\nclass Catch extends BlockNode {\n static readonly kind = \"catch\"\n constructor(readonly error: Name) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `catch(${this.error})` + super.render(opts)\n }\n}\n\nclass Finally extends BlockNode {\n static readonly kind = \"finally\"\n render(opts: CGOptions): string {\n return \"finally\" + super.render(opts)\n }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n | typeof If\n | typeof Else\n | typeof For\n | typeof Func\n | typeof Return\n | typeof Catch\n | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n es5?: boolean\n lines?: boolean\n ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n readonly _scope: Scope\n readonly _extScope: ValueScope\n readonly _values: ScopeValueSets = {}\n private readonly _nodes: ParentNode[]\n private readonly _blockStarts: number[] = []\n private readonly _constants: Constants = {}\n private readonly opts: CGOptions\n\n constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n this._extScope = extScope\n this._scope = new Scope({parent: extScope})\n this._nodes = [new Root()]\n }\n\n toString(): string {\n return this._root.render(this.opts)\n }\n\n // returns unique name in the internal scope\n name(prefix: string): Name {\n return this._scope.name(prefix)\n }\n\n // reserves unique name in the external scope\n scopeName(prefix: string): ValueScopeName {\n return this._extScope.name(prefix)\n }\n\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n const name = this._extScope.value(prefixOrName, value)\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n vs.add(name)\n return name\n }\n\n getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n return this._extScope.getValue(prefix, keyOrRef)\n }\n\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName: Name): Code {\n return this._extScope.scopeRefs(scopeName, this._values)\n }\n\n scopeCode(): Code {\n return this._extScope.scopeCode(this._values)\n }\n\n private _def(\n varKind: Name,\n nameOrPrefix: Name | string,\n rhs?: SafeExpr,\n constant?: boolean\n ): Name {\n const name = this._scope.toName(nameOrPrefix)\n if (rhs !== undefined && constant) this._constants[name.str] = rhs\n this._leafNode(new Def(varKind, name, rhs))\n return name\n }\n\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n }\n\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n }\n\n // `var` declaration with optional assignment\n var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n }\n\n // assignment code\n assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n return this._leafNode(new Assign(lhs, rhs, sideEffects))\n }\n\n // `+=` code\n add(lhs: Code, rhs: SafeExpr): CodeGen {\n return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n }\n\n // appends passed SafeExpr to code or executes Block\n code(c: Block | SafeExpr): CodeGen {\n if (typeof c == \"function\") c()\n else if (c !== nil) this._leafNode(new AnyCode(c))\n return this\n }\n\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n const code: CodeItem[] = [\"{\"]\n for (const [key, value] of keyValues) {\n if (code.length > 1) code.push(\",\")\n code.push(key)\n if (key !== value || this.opts.es5) {\n code.push(\":\")\n addCodeArg(code, value)\n }\n }\n code.push(\"}\")\n return new _Code(code)\n }\n\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n this._blockNode(new If(condition))\n\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf()\n } else if (thenBody) {\n this.code(thenBody).endIf()\n } else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body')\n }\n return this\n }\n\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition: Code | boolean): CodeGen {\n return this._elseNode(new If(condition))\n }\n\n // `else` clause - only valid after `if` or `else if` clauses\n else(): CodeGen {\n return this._elseNode(new Else())\n }\n\n // end `if` statement (needed if gen.if was used only with condition)\n endIf(): CodeGen {\n return this._endBlockNode(If, Else)\n }\n\n private _for(node: For, forBody?: Block): CodeGen {\n this._blockNode(node)\n if (forBody) this.code(forBody).endFor()\n return this\n }\n\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration: Code, forBody?: Block): CodeGen {\n return this._for(new ForLoop(iteration), forBody)\n }\n\n // `for` statement for a range of values\n forRange(\n nameOrPrefix: Name | string,\n from: SafeExpr,\n to: SafeExpr,\n forBody: (index: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n }\n\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(\n nameOrPrefix: Name | string,\n iterable: Code,\n forBody: (item: Name) => void,\n varKind: Code = varKinds.const\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n if (this.opts.es5) {\n const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n this.var(name, _`${arr}[${i}]`)\n forBody(name)\n })\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n }\n\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(\n nameOrPrefix: Name | string,\n obj: Code,\n forBody: (item: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n ): CodeGen {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n }\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n }\n\n // end `for` loop\n endFor(): CodeGen {\n return this._endBlockNode(For)\n }\n\n // `label` statement\n label(label: Name): CodeGen {\n return this._leafNode(new Label(label))\n }\n\n // `break` statement\n break(label?: Code): CodeGen {\n return this._leafNode(new Break(label))\n }\n\n // `return` statement\n return(value: Block | SafeExpr): CodeGen {\n const node = new Return()\n this._blockNode(node)\n this.code(value)\n if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n return this._endBlockNode(Return)\n }\n\n // `try` statement\n try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n const node = new Try()\n this._blockNode(node)\n this.code(tryBody)\n if (catchCode) {\n const error = this.name(\"e\")\n this._currNode = node.catch = new Catch(error)\n catchCode(error)\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally()\n this.code(finallyCode)\n }\n return this._endBlockNode(Catch, Finally)\n }\n\n // `throw` statement\n throw(error: Code): CodeGen {\n return this._leafNode(new Throw(error))\n }\n\n // start self-balancing block\n block(body?: Block, nodeCount?: number): CodeGen {\n this._blockStarts.push(this._nodes.length)\n if (body) this.code(body).endBlock(nodeCount)\n return this\n }\n\n // end the current self-balancing block\n endBlock(nodeCount?: number): CodeGen {\n const len = this._blockStarts.pop()\n if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n const toClose = this._nodes.length - len\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n }\n this._nodes.length = len\n return this\n }\n\n // `function` heading (or definition if funcBody is passed)\n func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n this._blockNode(new Func(name, args, async))\n if (funcBody) this.code(funcBody).endFunc()\n return this\n }\n\n // end function definition\n endFunc(): CodeGen {\n return this._endBlockNode(Func)\n }\n\n optimize(n = 1): void {\n while (n-- > 0) {\n this._root.optimizeNodes()\n this._root.optimizeNames(this._root.names, this._constants)\n }\n }\n\n private _leafNode(node: LeafNode): CodeGen {\n this._currNode.nodes.push(node)\n return this\n }\n\n private _blockNode(node: StartBlockNode): void {\n this._currNode.nodes.push(node)\n this._nodes.push(node)\n }\n\n private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n const n = this._currNode\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop()\n return this\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n }\n\n private _elseNode(node: If | Else): CodeGen {\n const n = this._currNode\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"')\n }\n this._currNode = n.else = node\n return this\n }\n\n private get _root(): Root {\n return this._nodes[0] as Root\n }\n\n private get _currNode(): ParentNode {\n const ns = this._nodes\n return ns[ns.length - 1]\n }\n\n private set _currNode(node: ParentNode) {\n const ns = this._nodes\n ns[ns.length - 1] = node\n }\n\n // get nodeCount(): number {\n // return this._root.count\n // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n if (expr instanceof Name) return replaceName(expr)\n if (!canOptimize(expr)) return expr\n return new _Code(\n expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n if (c instanceof Name) c = replaceName(c)\n if (c instanceof _Code) items.push(...c._items)\n else items.push(c)\n return items\n }, [])\n )\n\n function replaceName(n: Name): SafeExpr {\n const c = constants[n.str]\n if (c === undefined || names[n.str] !== 1) return n\n delete names[n.str]\n return c\n }\n\n function canOptimize(e: SafeExpr): e is _Code {\n return (\n e instanceof _Code &&\n e._items.some(\n (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n )\n )\n }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n return x instanceof Name ? x : _`(${x})`\n}\n","import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n const hash: {[K in T]?: true} = {}\n for (const item of arr) hash[item] = true\n return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n if (typeof schema == \"boolean\") return schema\n if (Object.keys(schema).length === 0) return true\n checkUnknownRules(it, schema)\n return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n const {opts, self} = it\n if (!opts.strictSchema) return\n if (typeof schema === \"boolean\") return\n const rules = self.RULES.keywords\n for (const key in schema) {\n if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n }\n}\n\nexport function schemaHasRules(\n schema: AnySchema,\n rules: {[Key in string]?: boolean | Rule}\n): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (rules[key]) return true\n return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n return false\n}\n\nexport function schemaRefOrVal(\n {topSchemaRef, schemaPath}: SchemaObjCxt,\n schema: unknown,\n keyword: string,\n $data?: string | false\n): Code | number | boolean {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n if (typeof schema == \"string\") return _`${schema}`\n }\n return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n if (typeof str == \"number\") return `${str}`\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n if (Array.isArray(xs)) {\n for (const x of xs) f(x)\n } else {\n f(xs)\n }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n gen: CodeGen,\n from: Name | T,\n to: Name | Exclude<T, true> | undefined,\n toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n mergeToName: (gen: CodeGen, from: T, to: Name) => void\n mergeValues: (from: T, to: Exclude<T, true>) => T\n resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n mergeNames,\n mergeToName,\n mergeValues,\n resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n return (gen, from, to, toName) => {\n const res =\n to === undefined\n ? from\n : to instanceof Name\n ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to)\n return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n }\n}\n\ninterface MergeEvaluated {\n props: MergeEvaluatedFunc<EvaluatedProperties>\n items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n gen.if(\n _`${from} === true`,\n () => gen.assign(to, true),\n () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n )\n }),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true)\n } else {\n gen.assign(to, _`${to} || {}`)\n setEvaluated(gen, to, from)\n }\n }),\n mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () =>\n gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n if (ps === true) return gen.var(\"props\", true)\n const props = gen.var(\"props\", _`{}`)\n if (ps !== undefined) setEvaluated(gen, props, ps)\n return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n })\n}\n\nexport enum Type {\n Num,\n Str,\n}\n\nexport function getErrorPath(\n dataProp: Name | string | number,\n dataPropType?: Type,\n jsPropertySyntax?: boolean\n): Code | string {\n // let path\n if (dataProp instanceof Name) {\n const isNumber = dataPropType === Type.Num\n return jsPropertySyntax\n ? isNumber\n ? _`\"[\" + ${dataProp} + \"]\"`\n : _`\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? _`\"/\" + ${dataProp}`\n : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n it: SchemaCxt,\n msg: string,\n mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n if (!mode) return\n msg = `strict mode: ${msg}`\n if (mode === true) throw new Error(msg)\n it.self.logger.warn(msg)\n}\n","import {Name} from \"./codegen\"\n\nconst names = {\n // validation function arguments\n data: new Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new Name(\"instancePath\"),\n parentData: new Name(\"parentData\"),\n parentDataProperty: new Name(\"parentDataProperty\"),\n rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new Name(\"vErrors\"), // null or array of validation errors\n errors: new Name(\"errors\"), // counter of validation errors\n this: new Name(\"this\"),\n // \"globals\"\n self: new Name(\"self\"),\n scope: new Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new Name(\"json\"),\n jsonPos: new Name(\"jsonPos\"),\n jsonLen: new Name(\"jsonLen\"),\n jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n","import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n message: ({keyword, schemaType}) =>\n schemaType\n ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n instancePath?: Code\n schemaPath?: string\n parentSchema?: boolean\n}\n\nexport function reportError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths,\n overrideAllErrors?: boolean\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n if (overrideAllErrors ?? (compositeRule || allErrors)) {\n addError(gen, errObj)\n } else {\n returnErrors(it, _`[${errObj}]`)\n }\n}\n\nexport function reportExtraError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n addError(gen, errObj)\n if (!(compositeRule || allErrors)) {\n returnErrors(it, N.vErrors)\n }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n gen.assign(N.errors, errsCount)\n gen.if(_`${N.vErrors} !== null`, () =>\n gen.if(\n errsCount,\n () => gen.assign(_`${N.vErrors}.length`, errsCount),\n () => gen.assign(N.vErrors, null)\n )\n )\n}\n\nexport function extendErrors({\n gen,\n keyword,\n schemaValue,\n data,\n errsCount,\n it,\n}: KeywordErrorCxt): void {\n /* istanbul ignore if */\n if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n const err = gen.name(\"err\")\n gen.forRange(\"i\", errsCount, N.errors, (i) => {\n gen.const(err, _`${N.vErrors}[${i}]`)\n gen.if(_`${err}.instancePath === undefined`, () =>\n gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n )\n gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n if (it.opts.verbose) {\n gen.assign(_`${err}.schema`, schemaValue)\n gen.assign(_`${err}.data`, data)\n }\n })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n const err = gen.const(\"err\", errObj)\n gen.if(\n _`${N.vErrors} === null`,\n () => gen.assign(N.vErrors, _`[${err}]`),\n _`${N.vErrors}.push(${err})`\n )\n gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n const {gen, validateName, schemaEnv} = it\n if (schemaEnv.$async) {\n gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n } else {\n gen.assign(_`${validateName}.errors`, errs)\n gen.return(false)\n }\n}\n\nconst E = {\n keyword: new Name(\"keyword\"),\n schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n params: new Name(\"params\"),\n propertyName: new Name(\"propertyName\"),\n message: new Name(\"message\"),\n schema: new Name(\"schema\"),\n parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths?: ErrorPaths\n): Code {\n const {createErrors} = cxt.it\n if (createErrors === false) return _`{}`\n return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths: ErrorPaths = {}\n): Code {\n const {gen, it} = cxt\n const keyValues: [Name, SafeExpr | string][] = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ]\n extraErrorProps(cxt, error, keyValues)\n return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n const instPath = instancePath\n ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n : errorPath\n return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n if (schemaPath) {\n schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n }\n return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n cxt: KeywordErrorCxt,\n {params, message}: KeywordErrorDefinition,\n keyValues: [Name, SafeExpr | string][]\n): void {\n const {keyword, data, schemaValue, it} = cxt\n const {opts, propertyName, topSchemaRef, schemaPath} = it\n keyValues.push(\n [E.keyword, keyword],\n [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n )\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n }\n if (opts.verbose) {\n keyValues.push(\n [E.schema, schemaValue],\n [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n [N.data, data]\n )\n }\n if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n","import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n const {gen, schema, validateName} = it\n if (schema === false) {\n falseSchemaError(it, false)\n } else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(N.data)\n } else {\n gen.assign(_`${validateName}.errors`, null)\n gen.return(true)\n }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n const {gen, schema} = it\n if (schema === false) {\n gen.var(valid, false) // TODO var\n falseSchemaError(it)\n } else {\n gen.var(valid, true) // TODO var\n }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n const {gen, data} = it\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt: KeywordErrorCxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n }\n reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n","import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = (typeof _jsonTypes)[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n rules: RuleGroup[]\n post: RuleGroup\n all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n types: ValidationTypes\n}\n\nexport interface RuleGroup {\n type?: JSONType\n rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n keyword: string\n definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n number: {type: \"number\", rules: []},\n string: {type: \"string\", rules: []},\n array: {type: \"array\", rules: []},\n object: {type: \"object\", rules: []},\n }\n return {\n types: {...groups, integer: true, boolean: true, null: true},\n rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n post: {rules: []},\n all: {},\n keywords: {},\n }\n}\n","import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n {schema, self}: SchemaObjCxt,\n type: JSONType\n): boolean | undefined {\n const group = self.RULES.types[type]\n return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n return (\n schema[rule.keyword] !== undefined ||\n rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n )\n}\n","import type {\n KeywordErrorDefinition,\n KeywordErrorCxt,\n ErrorObject,\n AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n Correct,\n Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n const types = getJSONTypes(schema.type)\n const hasNull = types.includes(\"null\")\n if (hasNull) {\n if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n } else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"')\n }\n if (schema.nullable === true) types.push(\"null\")\n }\n return types\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n if (types.every(isJSONType)) return types\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n const {gen, data, opts} = it\n const coerceTo = coerceToTypes(types, opts.coerceTypes)\n const checkTypes =\n types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n gen.if(wrongType, () => {\n if (coerceTo.length) coerceData(it, types, coerceTo)\n else reportTypeError(it)\n })\n }\n return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n const {gen, data, opts} = it\n const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n const coerced = gen.let(\"coerced\", _`undefined`)\n if (opts.coerceTypes === \"array\") {\n gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n gen\n .assign(data, _`${data}[0]`)\n .assign(dataType, _`typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n )\n }\n gen.if(_`${coerced} !== undefined`)\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t)\n }\n }\n gen.else()\n reportTypeError(it)\n gen.endIf()\n\n gen.if(_`${coerced} !== undefined`, () => {\n gen.assign(data, coerced)\n assignParentData(it, coerced)\n })\n\n function coerceSpecificType(t: string): void {\n switch (t) {\n case \"string\":\n gen\n .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, _`\"\" + ${data}`)\n .elseIf(_`${data} === null`)\n .assign(coerced, _`\"\"`)\n return\n case \"number\":\n gen\n .elseIf(\n _`${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"integer\":\n gen\n .elseIf(\n _`${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"boolean\":\n gen\n .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf(_`${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true)\n return\n case \"null\":\n gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n gen.assign(coerced, null)\n return\n\n case \"array\":\n gen\n .elseIf(\n _`${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`\n )\n .assign(coerced, _`[${data}]`)\n }\n }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n // TODO use gen.property\n gen.if(_`${parentData} !== undefined`, () =>\n gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n )\n}\n\nexport function checkDataType(\n dataType: JSONType,\n data: Name,\n strictNums?: boolean | \"log\",\n correct = DataType.Correct\n): Code {\n const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n let cond: Code\n switch (dataType) {\n case \"null\":\n return _`${data} ${EQ} null`\n case \"array\":\n cond = _`Array.isArray(${data})`\n break\n case \"object\":\n cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n break\n case \"integer\":\n cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n break\n case \"number\":\n cond = numCond()\n break\n default:\n return _`typeof ${data} ${EQ} ${dataType}`\n }\n return correct === DataType.Correct ? cond : not(cond)\n\n function numCond(_cond: Code = nil): Code {\n return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n }\n}\n\nexport function checkDataTypes(\n dataTypes: JSONType[],\n data: Name,\n strictNums?: boolean | \"log\",\n correct?: DataType\n): Code {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct)\n }\n let cond: Code\n const types = toHash(dataTypes)\n if (types.array && types.object) {\n const notObj = _`typeof ${data} != \"object\"`\n cond = types.null ? notObj : _`!${data} || ${notObj}`\n delete types.null\n delete types.array\n delete types.object\n } else {\n cond = nil\n }\n if (types.number) delete types.integer\n for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n message: ({schema}) => `must be ${schema}`,\n params: ({schema, schemaValue}) =>\n typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n const cxt = getTypeErrorContext(it)\n reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n const {gen, data, schema} = it\n const schemaCode = schemaRefOrVal(it, schema, \"type\")\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n }\n}\n","import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n const {properties, items} = it.schema\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default)\n }\n } else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n const {gen, compositeRule, data, opts} = it\n if (defaultValue === undefined) return\n const childData = _`${data}${getProperty(prop)}`\n if (compositeRule) {\n checkStrictMode(it, `default is ignored for: ${childData}`)\n return\n }\n\n let condition = _`${childData} === undefined`\n if (opts.useDefaults === \"empty\") {\n condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n","import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n const {gen, data, it} = cxt\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({missingProperty: _`${prop}`}, true)\n cxt.error()\n })\n}\n\nexport function checkMissingProp(\n {gen, data, it: {opts}}: KeywordCxt,\n properties: string[],\n missing: Name\n): Code {\n return or(\n ...properties.map((prop) =>\n and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n )\n )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n cxt.setParams({missingProperty: missing}, true)\n cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: _`Object.prototype.hasOwnProperty`,\n })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} !== undefined`\n return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} === undefined`\n return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n return allSchemaProperties(schemaMap).filter(\n (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n )\n}\n\nexport function callValidateCode(\n {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n func: Code,\n context: Code,\n passSchema?: boolean\n): Code {\n const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n const valCxt: [Name, Code | number][] = [\n [N.instancePath, strConcat(N.instancePath, errorPath)],\n [N.parentData, it.parentData],\n [N.parentDataProperty, it.parentDataProperty],\n [N.rootData, N.rootData],\n ]\n if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n const u = opts.unicodeRegExp ? \"u\" : \"\"\n const {regExp} = opts.code\n const rx = regExp(pattern, u)\n\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true)\n validateItems(() => gen.assign(validArr, false))\n return validArr\n }\n gen.var(valid, true)\n validateItems(() => gen.break())\n return valid\n\n function validateItems(notValid: () => void): void {\n const len = gen.const(\"len\", _`${data}.length`)\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword,\n dataProp: i,\n dataPropType: Type.Num,\n },\n valid\n )\n gen.if(not(valid), notValid)\n })\n }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n const {gen, schema, keyword, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n if (alwaysValid && !it.opts.unevaluated) return\n\n const valid = gen.let(\"valid\", false)\n const schValid = gen.name(\"_valid\")\n\n gen.block(() =>\n schema.forEach((_sch: AnySchema, i: number) => {\n const schCxt = cxt.subschema(\n {\n keyword,\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n gen.assign(valid, _`${valid} || ${schValid}`)\n const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged) gen.if(not(valid))\n })\n )\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n}\n","import type {KeywordCxt} from \".\"\nimport type {\n AnySchema,\n SchemaValidateFunction,\n AnyValidateFunction,\n AddedKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, it} = cxt\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n const schemaRef = useKeyword(gen, keyword, macroSchema)\n if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n schema: macroSchema,\n schemaPath: nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n },\n valid\n )\n cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, $data, it} = cxt\n checkAsyncKeyword(it, def)\n const validate =\n !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n const validateRef = useKeyword(gen, keyword, validate)\n const valid = gen.let(\"valid\")\n cxt.block$data(valid, validateKeyword)\n cxt.ok(def.valid ?? valid)\n\n function validateKeyword(): void {\n if (def.errors === false) {\n assignValid()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => cxt.error())\n } else {\n const ruleErrs = def.async ? validateAsync() : validateSync()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => addErrs(cxt, ruleErrs))\n }\n }\n\n function validateAsync(): Name {\n const ruleErrs = gen.let(\"ruleErrs\", null)\n gen.try(\n () => assignValid(_`await `),\n (e) =>\n gen.assign(valid, false).if(\n _`${e} instanceof ${it.ValidationError as Name}`,\n () => gen.assign(ruleErrs, _`${e}.errors`),\n () => gen.throw(e)\n )\n )\n return ruleErrs\n }\n\n function validateSync(): Code {\n const validateErrs = _`${validateRef}.errors`\n gen.assign(validateErrs, null)\n assignValid(nil)\n return validateErrs\n }\n\n function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n const passCxt = it.opts.passContext ? N.this : N.self\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n gen.assign(\n valid,\n _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n def.modifying\n )\n }\n\n function reportErrs(errors: () => void): void {\n gen.if(not(def.valid ?? valid), errors)\n }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n const {gen, data, it} = cxt\n gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n const {gen} = cxt\n gen.if(\n _`Array.isArray(${errs})`,\n () => {\n gen\n .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n .assign(N.errors, _`${N.vErrors}.length`)\n extendErrors(cxt)\n },\n () => cxt.error()\n )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n return gen.scopeValue(\n \"keyword\",\n typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n )\n}\n\nexport function validSchemaType(\n schema: unknown,\n schemaType: JSONType[],\n allowUndefined = false\n): boolean {\n // TODO add tests\n return (\n !schemaType.length ||\n schemaType.some((st) =>\n st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n )\n )\n}\n\nexport function validateKeywordUsage(\n {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n def: AddedKeywordDefinition,\n keyword: string\n): void {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\")\n }\n\n const deps = def.dependencies\n if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n }\n\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword])\n if (!valid) {\n const msg =\n `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors)\n if (opts.validateSchema === \"log\") self.logger.error(msg)\n else throw new Error(msg)\n }\n }\n}\n","import type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n // TODO use Optional? align with SchemCxt property types\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef?: Code\n errorPath?: Code\n dataLevel?: number\n dataTypes?: JSONType[]\n data?: Name\n parentData?: Name\n parentDataProperty?: Code | number\n dataNames?: Name[]\n dataPathArr?: (Code | number)[]\n propertyName?: Name\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n compositeRule?: true\n createErrors?: boolean\n allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n keyword: string\n schemaProp: string | number\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef: Code\n data: Name | Code\n dataProp: Code | string | number\n dataTypes: JSONType[]\n definedProperties: Set<string>\n propertyName: Name\n dataPropType: Type\n jtdDiscriminator: string\n jtdMetadata: boolean\n compositeRule: true\n createErrors: boolean\n allErrors: boolean\n}>\n\nexport function getSubschema(\n it: SchemaObjCxt,\n {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n }\n\n if (keyword !== undefined) {\n const sch = it.schema[keyword]\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n }\n }\n\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n }\n }\n\n throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n subschema: SubschemaContext,\n it: SchemaObjCxt,\n {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n }\n\n const {gen} = it\n\n if (dataProp !== undefined) {\n const {errorPath, dataPathArr, opts} = it\n const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n dataContextProps(nextData)\n subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n subschema.parentDataProperty = _`${dataProp}`\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n }\n\n if (data !== undefined) {\n const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n dataContextProps(nextData)\n if (propertyName !== undefined) subschema.propertyName = propertyName\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n\n if (dataTypes) subschema.dataTypes = dataTypes\n\n function dataContextProps(_nextData: Name): void {\n subschema.data = _nextData\n subschema.dataLevel = it.dataLevel + 1\n subschema.dataTypes = []\n it.definedProperties = new Set<string>()\n subschema.parentData = it.data\n subschema.dataNames = [...it.dataNames, _nextData]\n }\n}\n\nexport function extendSubschemaMode(\n subschema: SubschemaContext,\n {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n if (createErrors !== undefined) subschema.createErrors = createErrors\n if (allErrors !== undefined) subschema.allErrors = allErrors\n subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n subschema.jtdMetadata = jtdMetadata // not inherited\n}\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i<sch.length; i++)\n _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n }\n } else if (key in traverse.propsKeywords) {\n if (sch && typeof sch == 'object') {\n for (var prop in sch)\n _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n }\n } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n }\n }\n post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n }\n}\n\n\nfunction escapeJsonPtr(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n","import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponent} from \"fast-uri\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n \"type\",\n \"format\",\n \"pattern\",\n \"maxLength\",\n \"minLength\",\n \"maxProperties\",\n \"minProperties\",\n \"maxItems\",\n \"minItems\",\n \"maximum\",\n \"minimum\",\n \"uniqueItems\",\n \"multipleOf\",\n \"required\",\n \"enum\",\n \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n if (typeof schema == \"boolean\") return true\n if (limit === true) return !hasRef(schema)\n if (!limit) return false\n return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n \"$ref\",\n \"$recursiveRef\",\n \"$recursiveAnchor\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n for (const key in schema) {\n if (REF_KEYWORDS.has(key)) return true\n const sch = schema[key]\n if (Array.isArray(sch) && sch.some(hasRef)) return true\n if (typeof sch == \"object\" && hasRef(sch)) return true\n }\n return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n let count = 0\n for (const key in schema) {\n if (key === \"$ref\") return Infinity\n count++\n if (SIMPLE_INLINED.has(key)) continue\n if (typeof schema[key] == \"object\") {\n eachItem(schema[key], (sch) => (count += countKeys(sch)))\n }\n if (count === Infinity) return Infinity\n }\n return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n if (normalize !== false) id = normalizeId(id)\n const p = resolver.parse(id)\n return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponent): string {\n const serialized = resolver.serialize(p)\n return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n id = normalizeId(id)\n return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n if (typeof schema == \"boolean\") return {}\n const {schemaId, uriResolver} = this.opts\n const schId = normalizeId(schema[schemaId] || baseId)\n const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n const pathPrefix = getFullPath(uriResolver, schId, false)\n const localRefs: LocalRefs = {}\n const schemaRefs: Set<string> = new Set()\n\n traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined) return\n const fullPath = pathPrefix + jsonPtr\n let innerBaseId = baseIds[parentJsonPtr]\n if (typeof sch[schemaId] == \"string\") innerBaseId = addRef.call(this, sch[schemaId])\n addAnchor.call(this, sch.$anchor)\n addAnchor.call(this, sch.$dynamicAnchor)\n baseIds[jsonPtr] = innerBaseId\n\n function addRef(this: Ajv, ref: string): string {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve\n ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref)\n if (schemaRefs.has(ref)) throw ambiguos(ref)\n schemaRefs.add(ref)\n let schOrRef = this.refs[ref]\n if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref)\n } else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref)\n localRefs[ref] = sch\n } else {\n this.refs[ref] = fullPath\n }\n }\n return ref\n }\n\n function addAnchor(this: Ajv, anchor: unknown): void {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n addRef.call(this, `#${anchor}`)\n }\n }\n })\n\n return localRefs\n\n function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n }\n\n function ambiguos(ref: string): Error {\n return new Error(`reference \"${ref}\" resolves to more than one schema`)\n }\n}\n","import type {\n AddedKeywordDefinition,\n AnySchema,\n AnySchemaObject,\n KeywordErrorCxt,\n KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n schemaRefOrVal,\n schemaHasRulesButRef,\n checkUnknownRules,\n checkStrictMode,\n unescapeJsonPointer,\n mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n ErrorPaths,\n reportError,\n reportExtraError,\n resetErrorsCount,\n keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it)\n return\n }\n }\n validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n body: Block\n): void {\n if (opts.code.es5) {\n gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n destructureValCxtES5(gen, opts)\n gen.code(body)\n })\n } else {\n gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n gen.code(funcSourceUrl(schema, opts)).code(body)\n )\n }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n N.data\n }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n gen.if(\n N.valCxt,\n () => {\n gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n },\n () => {\n gen.var(N.instancePath, _`\"\"`)\n gen.var(N.parentData, _`undefined`)\n gen.var(N.parentDataProperty, _`undefined`)\n gen.var(N.rootData, N.data)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n }\n )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n const {schema, opts, gen} = it\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment) commentKeyword(it)\n checkNoDefault(it)\n gen.let(N.vErrors, null)\n gen.let(N.errors, 0)\n if (opts.unevaluated) resetEvaluated(it)\n typeAndKeywords(it)\n returnResults(it)\n })\n return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const {gen, validateName} = it\n it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n const schId = typeof schema == \"object\" && schema[opts.schemaId]\n return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid)\n return\n }\n }\n boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (self.RULES.all[key]) return true\n return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n const {schema, gen, opts} = it\n if (opts.$comment && schema.$comment) commentKeyword(it)\n updateContext(it)\n checkAsyncSchema(it)\n const errsCount = gen.const(\"_errs\", N.errors)\n typeAndKeywords(it, errsCount)\n // TODO var\n gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n checkUnknownRules(it)\n checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n const types = getSchemaTypes(it.schema)\n const checkedTypes = coerceAndCheckDataType(it, types)\n schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n const {schema, errSchemaPath, opts, self} = it\n if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n const {schema, opts} = it\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n checkStrictMode(it, \"default is ignored in the schema root\")\n }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n const schId = it.schema[it.opts.schemaId]\n if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n const msg = schema.$comment\n if (opts.$comment === true) {\n gen.code(_`${N.self}.logger.log(${msg})`)\n } else if (typeof opts.$comment == \"function\") {\n const schemaPath = str`${errSchemaPath}/$comment`\n const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n const {gen, schemaEnv, validateName, ValidationError, opts} = it\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if(\n _`${N.errors} === 0`,\n () => gen.return(N.data),\n () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n )\n } else {\n gen.assign(_`${validateName}.errors`, N.vErrors)\n if (opts.unevaluated) assignEvaluated(it)\n gen.return(_`${N.errors} === 0`)\n }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n it: SchemaObjCxt,\n types: JSONType[],\n typeErrors: boolean,\n errsCount?: Name\n): void {\n const {gen, schema, data, allErrors, opts, self} = it\n const {RULES} = self\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n return\n }\n if (!opts.jtd) checkStrictTypes(it, types)\n gen.block(() => {\n for (const group of RULES.rules) groupKeywords(group)\n groupKeywords(RULES.post)\n })\n\n function groupKeywords(group: RuleGroup): void {\n if (!shouldUseGroup(schema, group)) return\n if (group.type) {\n gen.if(checkDataType(group.type, data, opts.strictNumbers))\n iterateKeywords(it, group)\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else()\n reportTypeError(it)\n }\n gen.endIf()\n } else {\n iterateKeywords(it, group)\n }\n // TODO make it \"ok\" call?\n if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n const {\n gen,\n schema,\n opts: {useDefaults},\n } = it\n if (useDefaults) assignDefaults(it, group.type)\n gen.block(() => {\n for (const rule of group.rules) {\n if (shouldUseRule(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type)\n }\n }\n })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (it.schemaEnv.meta || !it.opts.strictTypes) return\n checkContextTypes(it, types)\n if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (!types.length) return\n if (!it.dataTypes.length) {\n it.dataTypes = types\n return\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n }\n })\n narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n const rules = it.self.RULES.all\n for (const keyword in rules) {\n const rule = rules[keyword]\n if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n const {type} = rule.definition\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n }\n }\n }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n const ts: JSONType[] = []\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t)) ts.push(t)\n else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n }\n it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n msg += ` at \"${schemaPath}\" (strictTypes)`\n checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean\n readonly keyword: string\n readonly data: Name // Name referencing the current level of the data instance\n readonly $data?: string | false\n schema: any // keyword value in the schema\n readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n readonly parentSchema: AnySchemaObject\n readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n // requires option trackErrors in keyword definition\n params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n readonly def: AddedKeywordDefinition\n\n constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n validateKeywordUsage(it, def, keyword)\n this.gen = it.gen\n this.allErrors = it.allErrors\n this.keyword = keyword\n this.data = it.data\n this.schema = it.schema[keyword]\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n this.schemaType = def.schemaType\n this.parentSchema = it.schema\n this.params = {}\n this.it = it\n this.def = def\n\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n } else {\n this.schemaCode = this.schemaValue\n if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n }\n }\n\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", N.errors)\n }\n }\n\n result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.failResult(not(condition), successAction, failAction)\n }\n\n failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.gen.if(condition)\n if (failAction) failAction()\n else this.error()\n if (successAction) {\n this.gen.else()\n successAction()\n if (this.allErrors) this.gen.endIf()\n } else {\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n }\n\n pass(condition: Code, failAction?: () => void): void {\n this.failResult(not(condition), undefined, failAction)\n }\n\n fail(condition?: Code): void {\n if (condition === undefined) {\n this.error()\n if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n return\n }\n this.gen.if(condition)\n this.error()\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n\n fail$data(condition: Code): void {\n if (!this.$data) return this.fail(condition)\n const {schemaCode} = this\n this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n }\n\n error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n if (errorParams) {\n this.setParams(errorParams)\n this._error(append, errorPaths)\n this.setParams({})\n return\n }\n this._error(append, errorPaths)\n }\n\n private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n }\n\n $dataError(): void {\n reportError(this, this.def.$dataError || keyword$DataError)\n }\n\n reset(): void {\n if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n resetErrorsCount(this.gen, this.errsCount)\n }\n\n ok(cond: Code | boolean): void {\n if (!this.allErrors) this.gen.if(cond)\n }\n\n setParams(obj: KeywordCxtParams, assign?: true): void {\n if (assign) Object.assign(this.params, obj)\n else this.params = obj\n }\n\n block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n this.gen.block(() => {\n this.check$data(valid, $dataValid)\n codeBlock()\n })\n }\n\n check$data(valid: Name = nil, $dataValid: Code = nil): void {\n if (!this.$data) return\n const {gen, schemaCode, schemaType, def} = this\n gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n if (valid !== nil) gen.assign(valid, true)\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data())\n this.$dataError()\n if (valid !== nil) gen.assign(valid, false)\n }\n gen.else()\n }\n\n invalid$data(): Code {\n const {gen, schemaCode, schemaType, def, it} = this\n return or(wrong$DataType(), invalid$DataSchema())\n\n function wrong$DataType(): Code {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n }\n return nil\n }\n\n function invalid$DataSchema(): Code {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n return _`!${validateSchemaRef}(${schemaCode})`\n }\n return nil\n }\n }\n\n subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n const subschema = getSubschema(this.it, appl)\n extendSubschemaData(subschema, this.it, appl)\n extendSubschemaMode(subschema, appl)\n const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n subschemaCode(nextContext, valid)\n return nextContext\n }\n\n mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n const {it, gen} = this\n if (!it.opts.unevaluated) return\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n }\n }\n\n mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n const {it, gen} = this\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n return true\n }\n }\n}\n\nfunction keywordCode(\n it: SchemaObjCxt,\n keyword: string,\n def: AddedKeywordDefinition,\n ruleType?: JSONType\n): void {\n const cxt = new KeywordCxt(it, def, keyword)\n if (\"code\" in def) {\n def.code(cxt, ruleType)\n } else if (cxt.$data && def.validate) {\n funcKeywordCode(cxt, def)\n } else if (\"macro\" in def) {\n macroKeywordCode(cxt, def)\n } else if (def.compile || def.validate) {\n funcKeywordCode(cxt, def)\n }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n $data: string,\n {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n let jsonPointer\n let data: Code\n if ($data === \"\") return N.rootData\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n jsonPointer = $data\n data = N.rootData\n } else {\n const matches = RELATIVE_JSON_POINTER.exec($data)\n if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n const up: number = +matches[1]\n jsonPointer = matches[2]\n if (jsonPointer === \"#\") {\n if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n return dataPathArr[dataLevel - up]\n }\n if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n data = dataNames[dataLevel - up]\n if (!jsonPointer) return data\n }\n\n let expr = data\n const segments = jsonPointer.split(\"/\")\n for (const segment of segments) {\n if (segment) {\n data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n expr = _`${expr} && ${data}`\n }\n }\n return expr\n\n function errorMsg(pointerType: string, up: number): string {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n }\n}\n","import type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n readonly errors: Partial<ErrorObject>[]\n readonly ajv: true\n readonly validation: true\n\n constructor(errors: Partial<ErrorObject>[]) {\n super(\"validation failed\")\n this.errors = errors\n this.ajv = this.validation = true\n }\n}\n","import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n readonly missingRef: string\n readonly missingSchema: string\n\n constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n this.missingRef = resolveUrl(resolver, baseId, ref)\n this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n }\n}\n","import type {\n AnySchema,\n AnySchemaObject,\n AnyValidateFunction,\n AsyncValidateFunction,\n EvaluatedProperties,\n EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport {URIComponent} from \"fast-uri\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n readonly data: Name // Name with reference to the current part of data instance\n readonly parentData: Name // should be used in keywords modifying data\n readonly parentDataProperty: Code | number // should be used in keywords modifying data\n readonly dataNames: Name[]\n readonly dataPathArr: (Code | number)[]\n readonly dataLevel: number // the level of the currently validated data,\n // it can be used to access both the property names and the data on all levels from the top.\n dataTypes: JSONType[] // data types applied to the current part of data instance\n definedProperties: Set<string> // set of properties to keep track of for required checks\n readonly topSchemaRef: Code\n readonly validateName: Name\n evaluated?: Name\n readonly ValidationError?: Name\n readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n readonly schemaEnv: SchemaEnv\n readonly rootId: string\n baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n readonly errSchemaPath: string // this is actual string, should not be changed to Code\n readonly errorPath: Code\n readonly propertyName?: Name\n readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n readonly createErrors?: boolean\n readonly opts: InstanceOptions // Ajv instance option.\n readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root?: SchemaEnv\n readonly baseId?: string\n readonly schemaPath?: string\n readonly localRefs?: LocalRefs\n readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root: SchemaEnv\n baseId: string // TODO possibly, it should be readonly\n schemaPath?: string\n localRefs?: LocalRefs\n readonly meta?: boolean\n readonly $async?: boolean // true if the current schema is asynchronous.\n readonly refs: SchemaRefs = {}\n readonly dynamicAnchors: {[Ref in string]?: true} = {}\n validate?: AnyValidateFunction\n validateName?: ValueScopeName\n serialize?: (data: unknown) => string\n serializeName?: ValueScopeName\n parse?: (data: string) => unknown\n parseName?: ValueScopeName\n\n constructor(env: SchemaEnvArgs) {\n let schema: AnySchemaObject | undefined\n if (typeof env.schema == \"object\") schema = env.schema\n this.schema = env.schema\n this.schemaId = env.schemaId\n this.root = env.root || this\n this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n this.schemaPath = env.schemaPath\n this.localRefs = env.localRefs\n this.meta = env.meta\n this.$async = schema?.$async\n this.refs = {}\n }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch)\n if (_sch) return _sch\n const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n const {es5, lines} = this.opts.code\n const {ownProperties} = this.opts\n const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n let _ValidationError\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: ValidationError,\n code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n })\n }\n\n const validateName = gen.scopeName(\"validate\")\n sch.validateName = validateName\n\n const schemaCxt: SchemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: N.data,\n parentData: N.parentData,\n parentDataProperty: N.parentDataProperty,\n dataNames: [N.data],\n dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set<string>(),\n topSchemaRef: gen.scopeValue(\n \"schema\",\n this.opts.code.source === true\n ? {ref: sch.schema, code: stringify(sch.schema)}\n : {ref: sch.schema}\n ),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: _`\"\"`,\n opts: this.opts,\n self: this,\n }\n\n let sourceCode: string | undefined\n try {\n this._compilations.add(sch)\n validateFunctionCode(schemaCxt)\n gen.optimize(this.opts.code.optimize)\n // gen.optimize(1)\n const validateCode = gen.toString()\n sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n this.scope.value(validateName, {ref: validate})\n\n validate.errors = null\n validate.schema = sch.schema\n validate.schemaEnv = sch\n if (sch.$async) (validate as AsyncValidateFunction).$async = true\n if (this.opts.code.source === true) {\n validate.source = {validateName, validateCode, scopeValues: gen._values}\n }\n if (this.opts.unevaluated) {\n const {props, items} = schemaCxt\n validate.evaluated = {\n props: props instanceof Name ? undefined : props,\n items: items instanceof Name ? undefined : items,\n dynamicProps: props instanceof Name,\n dynamicItems: items instanceof Name,\n }\n if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n }\n sch.validate = validate\n return sch\n } catch (e) {\n delete sch.validate\n delete sch.validateName\n if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e\n } finally {\n this._compilations.delete(sch)\n }\n}\n\nexport function resolveRef(\n this: Ajv,\n root: SchemaEnv,\n baseId: string,\n ref: string\n): AnySchema | SchemaEnv | undefined {\n ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n const schOrFunc = root.refs[ref]\n if (schOrFunc) return schOrFunc\n\n let _sch = resolve.call(this, root, ref)\n if (_sch === undefined) {\n const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n const {schemaId} = this.opts\n if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n }\n\n if (_sch === undefined) return\n return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv)) return sch\n }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n this: Ajv,\n root: SchemaEnv, // information about the root schema for the current schema\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n let sch\n while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n this: Ajv,\n root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n const p = this.opts.uriResolver.parse(ref)\n const refPath = _getFullPath(this.opts.uriResolver, p)\n let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root)\n }\n\n const id = normalizeId(refPath)\n const schOrRef = this.refs[id] || this.schemas[id]\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef)\n if (typeof sch?.schema !== \"object\") return\n return getJsonPointer.call(this, p, sch)\n }\n\n if (typeof schOrRef?.schema !== \"object\") return\n if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n if (id === normalizeId(ref)) {\n const {schema} = schOrRef\n const {schemaId} = this.opts\n const schId = schema[schemaId]\n if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n return new SchemaEnv({schema, schemaId, root, baseId})\n }\n return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n])\n\nfunction getJsonPointer(\n this: Ajv,\n parsedRef: URIComponent,\n {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n if (parsedRef.fragment?.[0] !== \"/\") return\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\") return\n const partSchema = schema[unescapeFragment(part)]\n if (partSchema === undefined) return\n schema = partSchema\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n }\n }\n let env: SchemaEnv | undefined\n if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n env = resolveSchema.call(this, root, $ref)\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const {schemaId} = this.opts\n env = env || new SchemaEnv({schema, schemaId, root, baseId})\n if (env.schema !== env.root.schema) return env\n return undefined\n}\n","{\n \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n \"description\": \"Meta-schema for $data reference (JSON AnySchema extension proposal)\",\n \"type\": \"object\",\n \"required\": [\"$data\"],\n \"properties\": {\n \"$data\": {\n \"type\": \"string\",\n \"anyOf\": [{\"format\": \"relative-json-pointer\"}, {\"format\": \"json-pointer\"}]\n }\n },\n \"additionalProperties\": false\n}\n","import * as uri from \"fast-uri\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n","export {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n AnyValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n (ajv: Ajv, options?: Opts): Ajv\n [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n Schema,\n AnySchema,\n AnySchemaObject,\n SchemaObject,\n AsyncSchema,\n Vocabulary,\n KeywordDefinition,\n AddedKeywordDefinition,\n AnyValidateFunction,\n ValidateFunction,\n AsyncValidateFunction,\n ErrorObject,\n Format,\n AddedFormat,\n RegExpEngine,\n UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n // strict mode options (NEW)\n strict?: boolean | \"log\"\n strictSchema?: boolean | \"log\"\n strictNumbers?: boolean | \"log\"\n strictTypes?: boolean | \"log\"\n strictTuples?: boolean | \"log\"\n strictRequired?: boolean | \"log\"\n allowMatchingProperties?: boolean // disables a strict mode restriction\n allowUnionTypes?: boolean\n validateFormats?: boolean\n // validation and reporting options:\n $data?: boolean\n allErrors?: boolean\n verbose?: boolean\n discriminator?: boolean\n unicodeRegExp?: boolean\n timestamp?: \"string\" | \"date\" // JTD only\n parseDate?: boolean // JTD only\n allowDate?: boolean // JTD only\n specialNumbers?: \"fast\" | \"null\" // JTD only\n $comment?:\n | true\n | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n formats?: {[Name in string]?: Format}\n keywords?: Vocabulary\n schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n logger?: Logger | false\n loadSchema?: (uri: string) => Promise<AnySchemaObject>\n // options to modify validated data:\n removeAdditional?: boolean | \"all\" | \"failing\"\n useDefaults?: boolean | \"empty\"\n coerceTypes?: boolean | \"array\"\n // advanced options:\n next?: boolean // NEW\n unevaluated?: boolean // NEW\n dynamicRef?: boolean // NEW\n schemaId?: \"id\" | \"$id\"\n jtd?: boolean // NEW\n meta?: SchemaObject | boolean\n defaultMeta?: string | AnySchemaObject\n validateSchema?: boolean | \"log\"\n addUsedSchema?: boolean\n inlineRefs?: boolean | number\n passContext?: boolean\n loopRequired?: number\n loopEnum?: number // NEW\n ownProperties?: boolean\n multipleOfPrecision?: number\n int32range?: boolean // JTD only\n messages?: boolean\n code?: CodeOptions // NEW\n uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n es5?: boolean\n esm?: boolean\n lines?: boolean\n optimize?: boolean | number\n formats?: Code // code to require (or construct) map of available formats - for standalone code\n source?: boolean\n process?: (code: string, schema?: SchemaEnv) => string\n regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n regExp: RegExpEngine\n optimize: number\n}\n\ninterface DeprecatedOptions {\n /** @deprecated */\n ignoreKeywordsWithRef?: boolean\n /** @deprecated */\n jsPropertySyntax?: boolean // added instead of jsonPointers\n /** @deprecated */\n unicode?: boolean\n}\n\ninterface RemovedOptions {\n format?: boolean\n errorDataPath?: \"object\" | \"property\"\n nullable?: boolean // \"nullable\" keyword is supported by default\n jsonPointers?: boolean\n extendRefs?: true | \"ignore\" | \"fail\"\n missingRefs?: true | \"ignore\" | \"fail\"\n processCode?: (code: string, schema?: SchemaEnv) => string\n sourceCode?: boolean\n strictDefaults?: boolean\n strictKeywords?: boolean\n uniqueItems?: boolean\n unknownFormats?: true | string[] | \"ignore\"\n cache?: any\n serialize?: (schema: AnySchema) => unknown\n ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n [K in\n | \"strictSchema\"\n | \"strictNumbers\"\n | \"strictTypes\"\n | \"strictTuples\"\n | \"strictRequired\"\n | \"inlineRefs\"\n | \"loopRequired\"\n | \"loopEnum\"\n | \"meta\"\n | \"messages\"\n | \"schemaId\"\n | \"addUsedSchema\"\n | \"validateSchema\"\n | \"validateFormats\"\n | \"int32range\"\n | \"unicodeRegExp\"\n | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n const s = o.strict\n const _optz = o.code?.optimize\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n const regExp = o.code?.regExp ?? defaultRegExp\n const uriResolver = o.uriResolver ?? DefaultUriResolver\n return {\n strictSchema: o.strictSchema ?? s ?? true,\n strictNumbers: o.strictNumbers ?? s ?? true,\n strictTypes: o.strictTypes ?? s ?? \"log\",\n strictTuples: o.strictTuples ?? s ?? \"log\",\n strictRequired: o.strictRequired ?? s ?? false,\n code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n meta: o.meta ?? true,\n messages: o.messages ?? true,\n inlineRefs: o.inlineRefs ?? true,\n schemaId: o.schemaId ?? \"$id\",\n addUsedSchema: o.addUsedSchema ?? true,\n validateSchema: o.validateSchema ?? true,\n validateFormats: o.validateFormats ?? true,\n unicodeRegExp: o.unicodeRegExp ?? true,\n int32range: o.int32range ?? true,\n uriResolver: uriResolver,\n }\n}\n\nexport interface Logger {\n log(...args: unknown[]): unknown\n warn(...args: unknown[]): unknown\n error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n opts: InstanceOptions\n errors?: ErrorObject[] | null // errors from the last validation\n logger: Logger\n // shared external scope values for compiled functions\n readonly scope: ValueScope\n readonly schemas: {[Key in string]?: SchemaEnv} = {}\n readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n readonly formats: {[Name in string]?: AddedFormat} = {}\n readonly RULES: ValidationRules\n readonly _compilations: Set<SchemaEnv> = new Set()\n private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n private readonly _metaOpts: InstanceOptions\n\n static ValidationError = ValidationError\n static MissingRefError = MissingRefError\n\n constructor(opts: Options = {}) {\n opts = this.opts = {...opts, ...requiredOptions(opts)}\n const {es5, lines} = this.opts.code\n\n this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n this.logger = getLogger(opts.logger)\n const formatOpt = opts.validateFormats\n opts.validateFormats = false\n\n this.RULES = getRules()\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n this._metaOpts = getMetaSchemaOptions.call(this)\n\n if (opts.formats) addInitialFormats.call(this)\n this._addVocabularies()\n this._addDefaultMetaSchema()\n if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n addInitialSchemas.call(this)\n opts.validateFormats = formatOpt\n }\n\n _addVocabularies(): void {\n this.addKeyword(\"$async\")\n }\n\n _addDefaultMetaSchema(): void {\n const {$data, meta, schemaId} = this.opts\n let _dataRefSchema: SchemaObject = $dataRefSchema\n if (schemaId === \"id\") {\n _dataRefSchema = {...$dataRefSchema}\n _dataRefSchema.id = _dataRefSchema.$id\n delete _dataRefSchema.$id\n }\n if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n const {meta, schemaId} = this.opts\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n }\n\n // Validate data using schema\n // AnySchema will be compiled and cached using schema itself as a key for Map\n validate(schema: Schema | string, data: unknown): boolean\n validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n validate<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n data: unknown\n ): data is JTDDataType<T>\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n validate<T>(\n schemaKeyRef: AnySchema | string, // key, ref or schema object\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n data: unknown | T // to be validated\n ): boolean | Promise<T> {\n let v: AnyValidateFunction | undefined\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema<T>(schemaKeyRef)\n if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n } else {\n v = this.compile<T>(schemaKeyRef)\n }\n\n const valid = v(data)\n if (!(\"$async\" in v)) this.errors = v.errors\n return valid\n }\n\n // Create validation function for passed schema\n // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n compile<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n _meta?: boolean\n ): ValidateFunction<JTDDataType<T>>\n compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n const sch = this._addSchema(schema, _meta)\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n }\n\n // Creates validating function for passed schema with asynchronous loading of missing schemas.\n // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n // TODO allow passing schema URI\n // meta - optional true to compile meta-schema\n compileAsync<T = unknown>(\n schema: SchemaObject | JSONSchemaType<T>,\n _meta?: boolean\n ): Promise<ValidateFunction<T>>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>>\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>> {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\")\n }\n const {loadSchema} = this.opts\n return runCompileAsync.call(this, schema, meta)\n\n async function runCompileAsync(\n this: Ajv,\n _schema: AnySchemaObject,\n _meta?: boolean\n ): Promise<AnyValidateFunction> {\n await loadMetaSchema.call(this, _schema.$schema)\n const sch = this._addSchema(_schema, _meta)\n return sch.validate || _compileAsync.call(this, sch)\n }\n\n async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, {$ref}, true)\n }\n }\n\n async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n try {\n return this._compileSchemaEnv(sch)\n } catch (e) {\n if (!(e instanceof MissingRefError)) throw e\n checkLoaded.call(this, e)\n await loadMissingSchema.call(this, e.missingSchema)\n return _compileAsync.call(this, sch)\n }\n }\n\n function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n }\n }\n\n async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n const _schema = await _loadSchema.call(this, ref)\n if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n }\n\n async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n const p = this._loading[ref]\n if (p) return p\n try {\n return await (this._loading[ref] = loadSchema(ref))\n } finally {\n delete this._loading[ref]\n }\n }\n }\n\n // Adds schema to the instance\n addSchema(\n schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ): Ajv {\n if (Array.isArray(schema)) {\n for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n return this\n }\n let id: string | undefined\n if (typeof schema === \"object\") {\n const {schemaId} = this.opts\n id = schema[schemaId]\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`)\n }\n }\n key = normalizeId(key || id)\n this._checkUnique(key)\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n return this\n }\n\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(\n schema: AnySchemaObject,\n key?: string, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ): Ajv {\n this.addSchema(schema, key, true, _validateSchema)\n return this\n }\n\n // Validate schema against its meta-schema\n validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n if (typeof schema == \"boolean\") return true\n let $schema: string | AnySchemaObject | undefined\n $schema = schema.$schema\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\")\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\")\n this.errors = null\n return true\n }\n const valid = this.validate($schema, schema)\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText()\n if (this.opts.validateSchema === \"log\") this.logger.error(message)\n else throw new Error(message)\n }\n return valid\n }\n\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n let sch\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n if (sch === undefined) {\n const {schemaId} = this.opts\n const root = new SchemaEnv({schema: {}, schemaId})\n sch = resolveSchema.call(this, root, keyRef)\n if (!sch) return\n this.refs[keyRef] = sch\n }\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n }\n\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef)\n this._removeAllSchemas(this.refs, schemaKeyRef)\n return this\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas)\n this._removeAllSchemas(this.refs)\n this._cache.clear()\n return this\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef)\n if (typeof sch == \"object\") this._cache.delete(sch.schema)\n delete this.schemas[schemaKeyRef]\n delete this.refs[schemaKeyRef]\n return this\n }\n case \"object\": {\n const cacheKey = schemaKeyRef\n this._cache.delete(cacheKey)\n let id = schemaKeyRef[this.opts.schemaId]\n if (id) {\n id = normalizeId(id)\n delete this.schemas[id]\n delete this.refs[id]\n }\n return this\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\")\n }\n }\n\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions: Vocabulary): Ajv {\n for (const def of definitions) this.addKeyword(def)\n return this\n }\n\n addKeyword(\n kwdOrDef: string | KeywordDefinition,\n def?: KeywordDefinition // deprecated\n ): Ajv {\n let keyword: string | string[]\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n def.keyword = keyword\n }\n } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef\n keyword = def.keyword\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n }\n } else {\n throw new Error(\"invalid addKeywords parameters\")\n }\n\n checkKeyword.call(this, keyword, def)\n if (!def) {\n eachItem(keyword, (kwd) => addRule.call(this, kwd))\n return this\n }\n keywordMetaschema.call(this, def)\n const definition: AddedKeywordDefinition = {\n ...def,\n type: getJSONTypes(def.type),\n schemaType: getJSONTypes(def.schemaType),\n }\n eachItem(\n keyword,\n definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n )\n return this\n }\n\n getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n const rule = this.RULES.all[keyword]\n return typeof rule == \"object\" ? rule.definition : !!rule\n }\n\n // Remove keyword\n removeKeyword(keyword: string): Ajv {\n // TODO return type should be Ajv\n const {RULES} = this\n delete RULES.keywords[keyword]\n delete RULES.all[keyword]\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n if (i >= 0) group.rules.splice(i, 1)\n }\n return this\n }\n\n // Add format\n addFormat(name: string, format: Format): Ajv {\n if (typeof format == \"string\") format = new RegExp(format)\n this.formats[name] = format\n return this\n }\n\n errorsText(\n errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n ): string {\n if (!errors || errors.length === 0) return \"No errors\"\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg)\n }\n\n $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n const rules = this.RULES.all\n metaSchema = JSON.parse(JSON.stringify(metaSchema))\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n let keywords = metaSchema\n for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n for (const key in rules) {\n const rule = rules[key]\n if (typeof rule != \"object\") continue\n const {$data} = rule.definition\n const schema = keywords[key] as AnySchemaObject | undefined\n if ($data && schema) keywords[key] = schemaOrData(schema)\n }\n }\n\n return metaSchema\n }\n\n private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef]\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef]\n } else if (sch && !sch.meta) {\n this._cache.delete(sch.schema)\n delete schemas[keyRef]\n }\n }\n }\n }\n\n _addSchema(\n schema: AnySchema,\n meta?: boolean,\n baseId?: string,\n validateSchema = this.opts.validateSchema,\n addSchema = this.opts.addUsedSchema\n ): SchemaEnv {\n let id: string | undefined\n const {schemaId} = this.opts\n if (typeof schema == \"object\") {\n id = schema[schemaId]\n } else {\n if (this.opts.jtd) throw new Error(\"schema must be object\")\n else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n }\n let sch = this._cache.get(schema)\n if (sch !== undefined) return sch\n\n baseId = normalizeId(id || baseId)\n const localRefs = getSchemaRefs.call(this, schema, baseId)\n sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n this._cache.set(sch.schema, sch)\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId) this._checkUnique(baseId)\n this.refs[baseId] = sch\n }\n if (validateSchema) this.validateSchema(schema, true)\n return sch\n }\n\n private _checkUnique(id: string): void {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`)\n }\n }\n\n private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n if (sch.meta) this._compileMetaSchema(sch)\n else compileSchema.call(this, sch)\n\n /* istanbul ignore if */\n if (!sch.validate) throw new Error(\"ajv implementation error\")\n return sch.validate\n }\n\n private _compileMetaSchema(sch: SchemaEnv): void {\n const currentOpts = this.opts\n this.opts = this._metaOpts\n try {\n compileSchema.call(this, sch)\n } finally {\n this.opts = currentOpts\n }\n }\n}\n\nexport interface ErrorsTextOptions {\n separator?: string\n dataVar?: string\n}\n\nfunction checkOptions(\n this: Ajv,\n checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n options: Options & RemovedOptions,\n msg: string,\n log: \"warn\" | \"error\" = \"error\"\n): void {\n for (const key in checkOpts) {\n const opt = key as keyof typeof checkOpts\n if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n keyRef = normalizeId(keyRef) // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n const optsSchemas = this.opts.schemas\n if (!optsSchemas) return\n if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name]\n if (format) this.addFormat(name, format)\n }\n}\n\nfunction addInitialKeywords(\n this: Ajv,\n defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs)\n return\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\")\n for (const keyword in defs) {\n const def = defs[keyword] as KeywordDefinition\n if (!def.keyword) def.keyword = keyword\n this.addKeyword(def)\n }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n const metaOpts = {...this.opts}\n for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n if (logger === false) return noLogs\n if (logger === undefined) return console\n if (logger.log && logger.warn && logger.error) return logger as Logger\n throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n const {RULES} = this\n eachItem(keyword, (kwd) => {\n if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n })\n if (!def) return\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function')\n }\n}\n\nfunction addRule(\n this: Ajv,\n keyword: string,\n definition?: AddedKeywordDefinition,\n dataType?: JSONType\n): void {\n const post = definition?.post\n if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n const {RULES} = this\n let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n if (!ruleGroup) {\n ruleGroup = {type: dataType, rules: []}\n RULES.rules.push(ruleGroup)\n }\n RULES.keywords[keyword] = true\n if (!definition) return\n\n const rule: Rule = {\n keyword,\n definition: {\n ...definition,\n type: getJSONTypes(definition.type),\n schemaType: getJSONTypes(definition.schemaType),\n },\n }\n if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n else ruleGroup.rules.push(rule)\n RULES.all[keyword] = rule\n definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule)\n } else {\n ruleGroup.rules.push(rule)\n this.logger.warn(`rule ${before} is not defined`)\n }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n let {metaSchema} = def\n if (metaSchema === undefined) return\n if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n return {anyOf: [schema, $dataRef]}\n}\n","import type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt: KeywordCxt): void {\n const {gen, schema: $ref, it} = cxt\n const {baseId, schemaEnv: env, validateName, opts, self} = it\n const {root} = env\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n return inlineRefSchema(schOrEnv)\n\n function callRootRef(): void {\n if (env === root) return callRef(cxt, validateName, env, env.$async)\n const rootName = gen.scopeValue(\"root\", {ref: root})\n return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n }\n\n function callValidate(sch: SchemaEnv): void {\n const v = getValidate(cxt, sch)\n callRef(cxt, v, sch, sch.$async)\n }\n\n function inlineRefSchema(sch: AnySchema): void {\n const schName = gen.scopeValue(\n \"schema\",\n opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n )\n const valid = gen.name(\"valid\")\n const schCxt = cxt.subschema(\n {\n schema: sch,\n dataTypes: [],\n schemaPath: nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n },\n valid\n )\n cxt.mergeEvaluated(schCxt)\n cxt.ok(valid)\n }\n },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n const {gen} = cxt\n return sch.validate\n ? gen.scopeValue(\"validate\", {ref: sch.validate})\n : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n const {gen, it} = cxt\n const {allErrors, schemaEnv: env, opts} = it\n const passCxt = opts.passContext ? N.this : nil\n if ($async) callAsyncRef()\n else callSyncRef()\n\n function callAsyncRef(): void {\n if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n const valid = gen.let(\"valid\")\n gen.try(\n () => {\n gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n if (!allErrors) gen.assign(valid, true)\n },\n (e) => {\n gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n addErrorsFrom(e)\n if (!allErrors) gen.assign(valid, false)\n }\n )\n cxt.ok(valid)\n }\n\n function callSyncRef(): void {\n cxt.result(\n callValidateCode(cxt, v, passCxt),\n () => addEvaluatedFrom(v),\n () => addErrorsFrom(v)\n )\n }\n\n function addErrorsFrom(source: Code): void {\n const errs = _`${source}.errors`\n gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n gen.assign(N.errors, _`${N.vErrors}.length`)\n }\n\n function addEvaluatedFrom(source: Code): void {\n if (!it.opts.unevaluated) return\n const schEvaluated = sch?.validate?.evaluated\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n }\n } else {\n const props = gen.var(\"props\", _`${source}.evaluated.props`)\n it.props = mergeEvaluated.props(gen, props, it.props, Name)\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n }\n } else {\n const items = gen.var(\"items\", _`${source}.evaluated.items`)\n it.items = mergeEvaluated.items(gen, items, it.items, Name)\n }\n }\n }\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n {keyword: \"$comment\"},\n \"definitions\",\n idKeyword,\n refKeyword,\n]\n\nexport default core\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n Kwd,\n {limit: number; comparison: Comparison},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n params: ({keyword, schemaCode}) =>\n _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n \"multipleOf\",\n {multipleOf: number},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schemaCode, it} = cxt\n // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision\n const res = gen.let(\"res\")\n const invalid = prec\n ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : _`${res} !== parseInt(${res})`\n cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n },\n}\n\nexport default def\n","// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n const len = str.length\n let length = 0\n let pos = 0\n let value: number\n while (pos < len) {\n length++\n value = str.charCodeAt(pos++)\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos)\n if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n }\n }\n return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} characters`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode, it} = cxt\n const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n const len =\n it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {useFunc} from \"../../compile/util\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n if ($data) {\n const {regExp} = it.opts.code\n const regExpCode = regExp.code === \"new RegExp\" ? _`new RegExp` : useFunc(gen, regExp)\n const valid = gen.let(\"valid\")\n gen.try(\n () => gen.assign(valid, _`${regExpCode}(${schemaCode}, ${u}).test(${data})`),\n () => gen.assign(valid, false)\n )\n cxt.fail$data(_`!${valid}`)\n } else {\n const regExp = usePattern(cxt, schema)\n cxt.fail$data(_`!${regExp}.test(${data})`)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} properties`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n checkReportMissingProp,\n checkMissingProp,\n reportMissingProp,\n propertyInData,\n noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n \"required\",\n {missingProperty: string},\n string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, schemaCode, data, $data, it} = cxt\n const {opts} = it\n if (!$data && schema.length === 0) return\n const useLoop = schema.length >= opts.loopRequired\n if (it.allErrors) allErrorsMode()\n else exitOnErrorMode()\n\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties\n const {definedProperties} = cxt.it\n for (const requiredKey of schema) {\n if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n checkStrictMode(it, msg, it.opts.strictRequired)\n }\n }\n }\n\n function allErrorsMode(): void {\n if (useLoop || $data) {\n cxt.block$data(nil, loopAllRequired)\n } else {\n for (const prop of schema) {\n checkReportMissingProp(cxt, prop)\n }\n }\n }\n\n function exitOnErrorMode(): void {\n const missing = gen.let(\"missing\")\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true)\n cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n cxt.ok(valid)\n } else {\n gen.if(checkMissingProp(cxt, schema, missing))\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n\n function loopAllRequired(): void {\n gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n cxt.setParams({missingProperty: prop})\n gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n })\n }\n\n function loopUntilMissing(missing: Name, valid: Name): void {\n cxt.setParams({missingProperty: missing})\n gen.forOf(\n missing,\n schemaCode as Code,\n () => {\n gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n gen.if(not(valid), () => {\n cxt.error()\n gen.break()\n })\n },\n nil\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} items`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n \"uniqueItems\",\n {i: number; j: number},\n boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {i, j}}) =>\n str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n if (!$data && !schema) return\n const valid = gen.let(\"valid\")\n const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n cxt.ok(valid)\n\n function validateUniqueItems(): void {\n const i = gen.let(\"i\", _`${data}.length`)\n const j = gen.let(\"j\")\n cxt.setParams({i, j})\n gen.assign(valid, true)\n gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n }\n\n function canOptimize(): boolean {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n }\n\n function loopN(i: Name, j: Name): void {\n const item = gen.name(\"item\")\n const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n const indices = gen.const(\"indices\", _`{}`)\n gen.for(_`;${i}--;`, () => {\n gen.let(item, _`${data}[${i}]`)\n gen.if(wrongType, _`continue`)\n if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n gen\n .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, _`${indices}[${item}]`)\n cxt.error()\n gen.assign(valid, false).break()\n })\n .code(_`${indices}[${item}] = ${i}`)\n })\n }\n\n function loopN2(i: Name, j: Name): void {\n const eql = useFunc(gen, equal)\n const outer = gen.name(\"outer\")\n gen.label(outer).for(_`;${i}--;`, () =>\n gen.for(_`${j} = ${i}; ${j}--;`, () =>\n gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error()\n gen.assign(valid, false).break(outer)\n })\n )\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to constant\",\n params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schemaCode, schema} = cxt\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n } else {\n cxt.fail(_`${schema} !== ${data}`)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to one of the allowed values\",\n params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n const useLoop = schema.length >= it.opts.loopEnum\n let eql: Name | undefined\n const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n let valid: Code\n if (useLoop || $data) {\n valid = gen.let(\"valid\")\n cxt.block$data(valid, loopEnum)\n } else {\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const vSchema = gen.const(\"vSchema\", schemaCode)\n valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n }\n cxt.pass(valid)\n\n function loopEnum(): void {\n gen.assign(valid, false)\n gen.forOf(\"v\", schemaCode as Code, (v) =>\n gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n )\n }\n\n function equalCode(vSchema: Name, i: number): Code {\n const sch = schema[i]\n return typeof sch === \"object\" && sch !== null\n ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n : _`${data} === ${sch}`\n }\n },\n}\n\nexport default def\n","import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n // number\n limitNumber,\n multipleOf,\n // string\n limitLength,\n pattern,\n // object\n limitProperties,\n required,\n // array\n limitItems,\n uniqueItems,\n // any\n {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n {keyword: \"nullable\", schemaType: \"boolean\"},\n constKeyword,\n enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n {limit: number},\n number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n | LimitError\n | LimitNumberError\n | MultipleOfError\n | PatternError\n | RequiredError\n | UniqueItemsError\n | ConstError\n | EnumError\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"additionalItems\" as const,\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {parentSchema, it} = cxt\n const {items} = parentSchema\n if (!Array.isArray(items)) {\n checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n return\n }\n validateAdditionalItems(cxt, items)\n },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n const {gen, schema, data, keyword, it} = cxt\n it.items = true\n const len = gen.const(\"len\", _`${data}.length`)\n if (schema === false) {\n cxt.setParams({len: items.length})\n cxt.pass(_`${len} <= ${items.length}`)\n } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n gen.if(not(valid), () => validateItems(valid))\n cxt.ok(valid)\n }\n\n function validateItems(valid: Name): void {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n if (!it.allErrors) gen.if(not(valid), () => gen.break())\n })\n }\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt: KeywordCxt) {\n const {schema, it} = cxt\n if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n cxt.ok(validateArray(cxt))\n },\n}\n\nexport function validateTuple(\n cxt: KeywordCxt,\n extraItems: string,\n schArr: AnySchema[] = cxt.schema\n): void {\n const {gen, parentSchema, data, keyword, it} = cxt\n checkStrictTuple(parentSchema)\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n }\n const valid = gen.name(\"valid\")\n const len = gen.const(\"len\", _`${data}.length`)\n schArr.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n gen.if(_`${len} > ${i}`, () =>\n cxt.subschema(\n {\n keyword,\n schemaProp: i,\n dataProp: i,\n },\n valid\n )\n )\n cxt.ok(valid)\n })\n\n function checkStrictTuple(sch: AnySchemaObject): void {\n const {opts, errSchemaPath} = it\n const l = schArr.length\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n checkStrictMode(it, msg, opts.strictTuples)\n }\n }\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {schema, parentSchema, it} = cxt\n const {prefixItems} = parentSchema\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n else cxt.ok(validateArray(cxt))\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n \"contains\",\n {minContains: number; maxContains?: number},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {min, max}}) =>\n max === undefined\n ? str`must contain at least ${min} valid item(s)`\n : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({params: {min, max}}) =>\n max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n let min: number\n let max: number | undefined\n const {minContains, maxContains} = parentSchema\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains\n max = maxContains\n } else {\n min = 1\n }\n const len = gen.const(\"len\", _`${data}.length`)\n cxt.setParams({min, max})\n if (max === undefined && min === 0) {\n checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n return\n }\n if (max !== undefined && min > max) {\n checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n cxt.fail()\n return\n }\n if (alwaysValidSchema(it, schema)) {\n let cond = _`${len} >= ${min}`\n if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n cxt.pass(cond)\n return\n }\n\n it.items = true\n const valid = gen.name(\"valid\")\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()))\n } else if (min === 0) {\n gen.let(valid, true)\n if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n } else {\n gen.let(valid, false)\n validateItemsWithCount()\n }\n cxt.result(valid, () => cxt.reset())\n\n function validateItemsWithCount(): void {\n const schValid = gen.name(\"_valid\")\n const count = gen.let(\"count\", 0)\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n }\n\n function validateItems(_valid: Name, block: () => void): void {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword: \"contains\",\n dataProp: i,\n dataPropType: Type.Num,\n compositeRule: true,\n },\n _valid\n )\n block()\n })\n }\n\n function checkLimits(count: Name): void {\n gen.code(_`${count}++`)\n if (max === undefined) {\n gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n } else {\n gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n if (min === 1) gen.assign(valid, true)\n else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n }\n }\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n SchemaMap,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n property: string\n missingProperty: string\n depsCount: number\n deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n \"dependencies\",\n DependenciesErrorParams,\n {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n message: ({params: {property, depsCount, deps}}) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n return str`must have ${property_ies} ${deps} when property ${property} is present`\n },\n params: ({params: {property, depsCount, deps, missingProperty}}) =>\n _`{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const [propDeps, schDeps] = splitDependencies(cxt)\n validatePropertyDeps(cxt, propDeps)\n validateSchemaDeps(cxt, schDeps)\n },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n const propertyDeps: PropertyDependencies = {}\n const schemaDeps: SchemaDependencies = {}\n for (const key in schema) {\n if (key === \"__proto__\") continue\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n deps[key] = schema[key]\n }\n return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n cxt: KeywordCxt,\n propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n const {gen, data, it} = cxt\n if (Object.keys(propertyDeps).length === 0) return\n const missing = gen.let(\"missing\")\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop] as string[]\n if (deps.length === 0) continue\n const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n })\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n checkReportMissingProp(cxt, depProp)\n }\n })\n } else {\n gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n for (const prop in schemaDeps) {\n if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n gen.if(\n propertyInData(gen, data, prop, it.opts.ownProperties),\n () => {\n const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n cxt.mergeValidEvaluated(schCxt, valid)\n },\n () => gen.var(valid, true) // TODO var\n )\n cxt.ok(valid)\n }\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: \"property name must be valid\",\n params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, data, it} = cxt\n if (alwaysValidSchema(it, schema)) return\n const valid = gen.name(\"valid\")\n\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({propertyName: key})\n cxt.subschema(\n {\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n },\n valid\n )\n gen.if(not(valid), () => {\n cxt.error(true)\n if (!it.allErrors) gen.break()\n })\n })\n\n cxt.ok(valid)\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n AddedKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n \"additionalProperties\",\n {additionalProperty: string},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must NOT have additional properties\",\n params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const {gen, schema, parentSchema, data, errsCount, it} = cxt\n /* istanbul ignore if */\n if (!errsCount) throw new Error(\"ajv implementation error\")\n const {allErrors, opts} = it\n it.props = true\n if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n const props = allSchemaProperties(parentSchema.properties)\n const patProps = allSchemaProperties(parentSchema.patternProperties)\n checkAdditionalProperties()\n cxt.ok(_`${errsCount} === ${N.errors}`)\n\n function checkAdditionalProperties(): void {\n gen.forIn(\"key\", data, (key: Name) => {\n if (!props.length && !patProps.length) additionalPropertyCode(key)\n else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n })\n }\n\n function isAdditional(key: Name): Code {\n let definedProp: Code\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n definedProp = isOwnProperty(gen, propsSchema as Code, key)\n } else if (props.length) {\n definedProp = or(...props.map((p) => _`${key} === ${p}`))\n } else {\n definedProp = nil\n }\n if (patProps.length) {\n definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n }\n return not(definedProp)\n }\n\n function deleteAdditional(key: Name): void {\n gen.code(_`delete ${data}[${key}]`)\n }\n\n function additionalPropertyCode(key: Name): void {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key)\n return\n }\n\n if (schema === false) {\n cxt.setParams({additionalProperty: key})\n cxt.error()\n if (!allErrors) gen.break()\n return\n }\n\n if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.name(\"valid\")\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false)\n gen.if(not(valid), () => {\n cxt.reset()\n deleteAdditional(key)\n })\n } else {\n applyAdditionalSchema(key, valid)\n if (!allErrors) gen.if(not(valid), () => gen.break())\n }\n }\n }\n\n function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n const subschema: SubschemaArgs = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: Type.Str,\n }\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n })\n }\n cxt.subschema(subschema, valid)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n }\n const allProps = allSchemaProperties(schema)\n for (const prop of allProps) {\n it.definedProperties.add(prop)\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n }\n const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n if (properties.length === 0) return\n const valid = gen.name(\"valid\")\n\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop)\n } else {\n gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n applyPropertySchema(prop)\n if (!it.allErrors) gen.else().var(valid, true)\n gen.endIf()\n }\n cxt.it.definedProperties.add(prop)\n cxt.ok(valid)\n }\n\n function hasDefault(prop: string): boolean | undefined {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n }\n\n function applyPropertySchema(prop: string): void {\n cxt.subschema(\n {\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n },\n valid\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, data, parentSchema, it} = cxt\n const {opts} = it\n const patterns = allSchemaProperties(schema)\n const alwaysValidPatterns = patterns.filter((p) =>\n alwaysValidSchema(it, schema[p] as AnySchema)\n )\n\n if (\n patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))\n ) {\n return\n }\n\n const checkProperties =\n opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n const valid = gen.name(\"valid\")\n if (it.props !== true && !(it.props instanceof Name)) {\n it.props = evaluatedPropsToName(gen, it.props)\n }\n const {props} = it\n validatePatternProperties()\n\n function validatePatternProperties(): void {\n for (const pat of patterns) {\n if (checkProperties) checkMatchingProperties(pat)\n if (it.allErrors) {\n validateProperties(pat)\n } else {\n gen.var(valid, true) // TODO var\n validateProperties(pat)\n gen.if(valid)\n }\n }\n }\n\n function checkMatchingProperties(pat: string): void {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n checkStrictMode(\n it,\n `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n )\n }\n }\n }\n\n function validateProperties(pat: string): void {\n gen.forIn(\"key\", data, (key) => {\n gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat)\n if (!alwaysValid) {\n cxt.subschema(\n {\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: Type.Str,\n },\n valid\n )\n }\n\n if (it.opts.unevaluated && props !== true) {\n gen.assign(_`${props}[${key}]`, true)\n } else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if(not(valid), () => gen.break())\n }\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n if (alwaysValidSchema(it, schema)) {\n cxt.fail()\n return\n }\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n valid\n )\n\n cxt.failResult(\n valid,\n () => cxt.reset(),\n () => cxt.error()\n )\n },\n error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: validateUnion,\n error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n \"oneOf\",\n {passingSchemas: [number, number] | null},\n AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must match exactly one schema in oneOf\",\n params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n if (it.opts.discriminator && parentSchema.discriminator) return\n const schArr: AnySchema[] = schema\n const valid = gen.let(\"valid\", false)\n const passing = gen.let(\"passing\", null)\n const schValid = gen.name(\"_valid\")\n cxt.setParams({passing})\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n gen.block(validateOneOf)\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n\n function validateOneOf(): void {\n schArr.forEach((sch: AnySchema, i: number) => {\n let schCxt: SchemaCxt | undefined\n if (alwaysValidSchema(it, sch)) {\n gen.var(schValid, true)\n } else {\n schCxt = cxt.subschema(\n {\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n }\n\n if (i > 0) {\n gen\n .if(_`${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, _`[${passing}, ${i}]`)\n .else()\n }\n\n gen.if(schValid, () => {\n gen.assign(valid, true)\n gen.assign(passing, i)\n if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const valid = gen.name(\"valid\")\n schema.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n cxt.ok(valid)\n cxt.mergeEvaluated(schCxt)\n })\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, parentSchema, it} = cxt\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n }\n const hasThen = hasSchema(it, \"then\")\n const hasElse = hasSchema(it, \"else\")\n if (!hasThen && !hasElse) return\n\n const valid = gen.let(\"valid\", true)\n const schValid = gen.name(\"_valid\")\n validateIf()\n cxt.reset()\n\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\")\n cxt.setParams({ifClause})\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n } else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"))\n } else {\n gen.if(not(schValid), validateClause(\"else\"))\n }\n\n cxt.pass(valid, () => cxt.error(true))\n\n function validateIf(): void {\n const schCxt = cxt.subschema(\n {\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n schValid\n )\n cxt.mergeEvaluated(schCxt)\n }\n\n function validateClause(keyword: string, ifClause?: Name): () => void {\n return () => {\n const schCxt = cxt.subschema({keyword}, schValid)\n gen.assign(valid, schValid)\n cxt.mergeValidEvaluated(schCxt, valid)\n if (ifClause) gen.assign(ifClause, _`${keyword}`)\n else cxt.setParams({ifClause: keyword})\n }\n }\n },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n const schema = it.schema[keyword]\n return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({keyword, parentSchema, it}: KeywordCxt) {\n if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n },\n}\n\nexport default def\n","import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n const applicator = [\n // any\n notKeyword,\n anyOf,\n oneOf,\n allOf,\n ifKeyword,\n thenElse,\n // object\n propertyNames,\n additionalProperties,\n dependencies,\n properties,\n patternProperties,\n ]\n // array\n if (draft2020) applicator.push(prefixItems, items2020)\n else applicator.push(additionalItems, items)\n applicator.push(contains)\n return applicator\n}\n\nexport type ApplicatorKeywordError =\n | ErrorNoParams<\"false schema\">\n | AdditionalItemsError\n | ItemsError\n | ContainsError\n | AdditionalPropertiesError\n | DependenciesError\n | IfKeywordError\n | AnyOfError\n | OneOfError\n | NotKeywordError\n | PropertyNamesError\n","import type {\n AddedFormat,\n FormatValidator,\n AsyncFormatValidator,\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n | FormatValidator<string>\n | FormatValidator<number>\n | AsyncFormatValidator<string>\n | AsyncFormatValidator<number>\n | RegExp\n | string\n | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt, ruleType?: string) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n const {opts, errSchemaPath, schemaEnv, self} = it\n if (!opts.validateFormats) return\n\n if ($data) validate$DataFormat()\n else validateFormat()\n\n function validate$DataFormat(): void {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n })\n const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n const fType = gen.let(\"fType\")\n const format = gen.let(\"format\")\n // TODO simplify\n gen.if(\n _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n )\n cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n function unknownFmt(): Code {\n if (opts.strictSchema === false) return nil\n return _`${schemaCode} && !${format}`\n }\n\n function invalidFmt(): Code {\n const callFormat = schemaEnv.$async\n ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : _`${format}(${data})`\n const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n }\n }\n\n function validateFormat(): void {\n const formatDef: AddedFormat | undefined = self.formats[schema]\n if (!formatDef) {\n unknownFormat()\n return\n }\n if (formatDef === true) return\n const [fmtType, format, fmtRef] = getFormat(formatDef)\n if (fmtType === ruleType) cxt.pass(validCondition())\n\n function unknownFormat(): void {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg())\n return\n }\n throw new Error(unknownMsg())\n\n function unknownMsg(): string {\n return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n }\n }\n\n function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n const code =\n fmtDef instanceof RegExp\n ? regexpCode(fmtDef)\n : opts.code.formats\n ? _`${opts.code.formats}${getProperty(schema)}`\n : undefined\n const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n }\n\n return [\"string\", fmtDef, fmt]\n }\n\n function validCondition(): Code {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n return _`await ${fmtRef}(${data})`\n }\n return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n }\n }\n },\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n","import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n]\n","import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft7Vocabularies: Vocabulary[] = [\n coreVocabulary,\n validationVocabulary,\n getApplicatorVocabulary(),\n formatVocabulary,\n metadataVocabulary,\n contentVocabulary,\n]\n\nexport default draft7Vocabularies\n","import type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n Tag = \"tag\",\n Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n \"discriminator\",\n {error: E; tag: string; tagValue: unknown},\n string\n>\n","import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {discrError, tagName}}) =>\n discrError === DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({params: {discrError, tag, tagName}}) =>\n _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schema, parentSchema, it} = cxt\n const {oneOf} = parentSchema\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\")\n }\n const tagName = schema.propertyName\n if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n const valid = gen.let(\"valid\", false)\n const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n gen.if(\n _`typeof ${tag} == \"string\"`,\n () => validateMapping(),\n () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n )\n cxt.ok(valid)\n\n function validateMapping(): void {\n const mapping = getMapping()\n gen.if(false)\n for (const tagValue in mapping) {\n gen.elseIf(_`${tag} === ${tagValue}`)\n gen.assign(valid, applyTagSchema(mapping[tagValue]))\n }\n gen.else()\n cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n gen.endIf()\n }\n\n function applyTagSchema(schemaProp?: number): Name {\n const _valid = gen.name(\"valid\")\n const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n cxt.mergeEvaluated(schCxt, Name)\n return _valid\n }\n\n function getMapping(): {[T in string]?: number} {\n const oneOfMapping: {[T in string]?: number} = {}\n const topRequired = hasRequired(parentSchema)\n let tagRequired = true\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i]\n if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n const ref = sch.$ref\n sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref)\n if (sch instanceof SchemaEnv) sch = sch.schema\n if (sch === undefined) throw new MissingRefError(it.opts.uriResolver, it.baseId, ref)\n }\n const propSch = sch?.properties?.[tagName]\n if (typeof propSch != \"object\") {\n throw new Error(\n `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n )\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch))\n addMappings(propSch, i)\n }\n if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n return oneOfMapping\n\n function hasRequired({required}: AnySchemaObject): boolean {\n return Array.isArray(required) && required.includes(tagName)\n }\n\n function addMappings(sch: AnySchemaObject, i: number): void {\n if (sch.const) {\n addMapping(sch.const, i)\n } else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i)\n }\n } else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n }\n }\n\n function addMapping(tagValue: unknown, i: number): void {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n }\n oneOfMapping[tagValue] = i\n }\n }\n },\n}\n\nexport default def\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Core schema meta-schema\",\n \"definitions\": {\n \"schemaArray\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\"$ref\": \"#\"}\n },\n \"nonNegativeInteger\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"nonNegativeIntegerDefault0\": {\n \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n },\n \"simpleTypes\": {\n \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n },\n \"stringArray\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"},\n \"uniqueItems\": true,\n \"default\": []\n }\n },\n \"type\": [\"object\", \"boolean\"],\n \"properties\": {\n \"$id\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri\"\n },\n \"$ref\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$comment\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"default\": true,\n \"readOnly\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"examples\": {\n \"type\": \"array\",\n \"items\": true\n },\n \"multipleOf\": {\n \"type\": \"number\",\n \"exclusiveMinimum\": 0\n },\n \"maximum\": {\n \"type\": \"number\"\n },\n \"exclusiveMaximum\": {\n \"type\": \"number\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"exclusiveMinimum\": {\n \"type\": \"number\"\n },\n \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n \"pattern\": {\n \"type\": \"string\",\n \"format\": \"regex\"\n },\n \"additionalItems\": {\"$ref\": \"#\"},\n \"items\": {\n \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n \"default\": true\n },\n \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n \"uniqueItems\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"contains\": {\"$ref\": \"#\"},\n \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"definitions\": {\n \"type\": \"object\",\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"default\": {}\n },\n \"properties\": {\n \"type\": \"object\",\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"default\": {}\n },\n \"patternProperties\": {\n \"type\": \"object\",\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"propertyNames\": {\"format\": \"regex\"},\n \"default\": {}\n },\n \"dependencies\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n }\n },\n \"propertyNames\": {\"$ref\": \"#\"},\n \"const\": true,\n \"enum\": {\n \"type\": \"array\",\n \"items\": true,\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"type\": {\n \"anyOf\": [\n {\"$ref\": \"#/definitions/simpleTypes\"},\n {\n \"type\": \"array\",\n \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n \"minItems\": 1,\n \"uniqueItems\": true\n }\n ]\n },\n \"format\": {\"type\": \"string\"},\n \"contentMediaType\": {\"type\": \"string\"},\n \"contentEncoding\": {\"type\": \"string\"},\n \"if\": {\"$ref\": \"#\"},\n \"then\": {\"$ref\": \"#\"},\n \"else\": {\"$ref\": \"#\"},\n \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n \"not\": {\"$ref\": \"#\"}\n },\n \"default\": true\n}\n","import type {AnySchemaObject} from \"./types\"\nimport AjvCore from \"./core\"\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport * as draft7MetaSchema from \"./refs/json-schema-draft-07.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\"\n\nexport class Ajv extends AjvCore {\n _addVocabularies(): void {\n super._addVocabularies()\n draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n if (this.opts.discriminator) this.addKeyword(discriminator)\n }\n\n _addDefaultMetaSchema(): void {\n super._addDefaultMetaSchema()\n if (!this.opts.meta) return\n const metaSchema = this.opts.$data\n ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n : draft7MetaSchema\n this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n }\n}\n\nmodule.exports = exports = Ajv\nmodule.exports.Ajv = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n SchemaValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n","import type Ajv from \"ajv\"\nimport type {\n Plugin,\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n Code,\n Name,\n ErrorObject,\n} from \"ajv\"\nimport type {AddedFormat} from \"ajv/dist/types\"\nimport type {Rule} from \"ajv/dist/compile/rules\"\nimport {KeywordCxt} from \"ajv\"\nimport {_, str, or, getProperty, operators} from \"ajv/dist/compile/codegen\"\n\ntype Kwd = \"formatMaximum\" | \"formatMinimum\" | \"formatExclusiveMaximum\" | \"formatExclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst ops = operators\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n formatMaximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n formatMinimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n formatExclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n formatExclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitFormatError = ErrorObject<Kwd, {limit: string; comparison: Comparison}>\n\nconst error: KeywordErrorDefinition = {\n message: ({keyword, schemaCode}) => str`should be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n params: ({keyword, schemaCode}) =>\n _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nexport const formatLimitDefinition: CodeKeywordDefinition = {\n keyword: Object.keys(KWDs),\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt) {\n const {gen, data, schemaCode, keyword, it} = cxt\n const {opts, self} = it\n if (!opts.validateFormats) return\n\n const fCxt = new KeywordCxt(it, (self.RULES.all.format as Rule).definition, \"format\")\n if (fCxt.$data) validate$DataFormat()\n else validateFormat()\n\n function validate$DataFormat(): void {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n })\n const fmt = gen.const(\"fmt\", _`${fmts}[${fCxt.schemaCode}]`)\n cxt.fail$data(\n or(\n _`typeof ${fmt} != \"object\"`,\n _`${fmt} instanceof RegExp`,\n _`typeof ${fmt}.compare != \"function\"`,\n compareCode(fmt)\n )\n )\n }\n\n function validateFormat(): void {\n const format = fCxt.schema as string\n const fmtDef: AddedFormat | undefined = self.formats[format]\n if (!fmtDef || fmtDef === true) return\n if (\n typeof fmtDef != \"object\" ||\n fmtDef instanceof RegExp ||\n typeof fmtDef.compare != \"function\"\n ) {\n throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`)\n }\n const fmt = gen.scopeValue(\"formats\", {\n key: format,\n ref: fmtDef,\n code: opts.code.formats ? _`${opts.code.formats}${getProperty(format)}` : undefined,\n })\n\n cxt.fail$data(compareCode(fmt))\n }\n\n function compareCode(fmt: Name): Code {\n return _`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword as Kwd].fail} 0`\n }\n },\n dependencies: [\"format\"],\n}\n\nconst formatLimitPlugin: Plugin<undefined> = (ajv: Ajv): Ajv => {\n ajv.addKeyword(formatLimitDefinition)\n return ajv\n}\n\nexport default formatLimitPlugin\n","import {\n DefinedFormats,\n FormatMode,\n FormatName,\n formatNames,\n fastFormats,\n fullFormats,\n} from \"./formats\"\nimport formatLimit from \"./limit\"\nimport type Ajv from \"ajv\"\nimport type {Plugin, Format} from \"ajv\"\nimport {_, Name} from \"ajv/dist/compile/codegen\"\n\nexport {FormatMode, FormatName} from \"./formats\"\nexport {LimitFormatError} from \"./limit\"\nexport interface FormatOptions {\n mode?: FormatMode\n formats?: FormatName[]\n keywords?: boolean\n}\n\nexport type FormatsPluginOptions = FormatName[] | FormatOptions\n\nexport interface FormatsPlugin extends Plugin<FormatsPluginOptions> {\n get: (format: FormatName, mode?: FormatMode) => Format\n}\n\nconst fullName = new Name(\"fullFormats\")\nconst fastName = new Name(\"fastFormats\")\n\nconst formatsPlugin: FormatsPlugin = (\n ajv: Ajv,\n opts: FormatsPluginOptions = {keywords: true}\n): Ajv => {\n if (Array.isArray(opts)) {\n addFormats(ajv, opts, fullFormats, fullName)\n return ajv\n }\n const [formats, exportName] =\n opts.mode === \"fast\" ? [fastFormats, fastName] : [fullFormats, fullName]\n const list = opts.formats || formatNames\n addFormats(ajv, list, formats, exportName)\n if (opts.keywords) formatLimit(ajv)\n return ajv\n}\n\nformatsPlugin.get = (name: FormatName, mode: FormatMode = \"full\"): Format => {\n const formats = mode === \"fast\" ? fastFormats : fullFormats\n const f = formats[name]\n if (!f) throw new Error(`Unknown format \"${name}\"`)\n return f\n}\n\nfunction addFormats(ajv: Ajv, list: FormatName[], fs: DefinedFormats, exportName: Name): void {\n ajv.opts.code.formats ??= _`require(\"ajv-formats/dist/formats\").${exportName}`\n for (const f of list) ajv.addFormat(f, fs[f])\n}\n\nmodule.exports = exports = formatsPlugin\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default formatsPlugin\n","import { Command } from \"commander\";\nimport { registerInitCommand } from \"./commands/init.js\";\nimport { registerValidateCommand } from \"./commands/validate.js\";\nimport { registerTestCommand } from \"./commands/test.js\";\nimport { registerBaselineCommand } from \"./commands/baseline.js\";\nimport { registerLoginCommand } from \"./commands/login.js\";\nimport { registerUploadCommand } from \"./commands/upload.js\";\nimport { registerTraceCommand } from \"./commands/trace.js\";\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name(\"kindlm\")\n .description(\"AI agent behavioral regression testing\")\n .version(\"0.3.0\");\n\n registerInitCommand(program);\n registerValidateCommand(program);\n registerTestCommand(program);\n registerBaselineCommand(program);\n registerLoginCommand(program);\n registerUploadCommand(program);\n registerTraceCommand(program);\n\n return program;\n}\n","/* eslint-disable no-console */\nimport type { Command } from \"commander\";\nimport { existsSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport chalk from \"chalk\";\n\nconst TEMPLATE = `kindlm: 1\nproject: my-project\n\nsuite:\n name: my-agent-tests\n description: Behavioral tests for my AI agent\n\nproviders:\n openai:\n apiKeyEnv: OPENAI_API_KEY\n\nmodels:\n - id: gpt-4o\n provider: openai\n model: gpt-4o\n params:\n temperature: 0\n maxTokens: 1024\n\nprompts:\n greeting:\n system: You are a helpful assistant.\n user: \"{{message}}\"\n\ntests:\n - name: basic-greeting\n prompt: greeting\n vars:\n message: Hello, how are you?\n expect:\n output:\n contains:\n - hello\n guardrails:\n pii:\n enabled: true\n\ngates:\n passRateMin: 0.95\n\ndefaults:\n repeat: 1\n concurrency: 4\n timeoutMs: 60000\n`;\n\nexport function registerInitCommand(program: Command): void {\n program\n .command(\"init\")\n .description(\"Create a kindlm.yaml template\")\n .option(\"--force\", \"Overwrite existing kindlm.yaml\")\n .action((options: { force?: boolean }) => {\n const filePath = resolve(process.cwd(), \"kindlm.yaml\");\n\n if (existsSync(filePath) && !options.force) {\n console.error(chalk.red(\"kindlm.yaml already exists. Use --force to overwrite.\"));\n process.exit(1);\n }\n\n writeFileSync(filePath, TEMPLATE, \"utf-8\");\n console.log(chalk.green(\"Created kindlm.yaml\"));\n console.log(\"\");\n console.log(\"Next steps:\");\n console.log(` 1. Edit ${chalk.bold(\"kindlm.yaml\")} with your test configuration`);\n console.log(` 2. Set your API key: ${chalk.bold(\"export OPENAI_API_KEY=sk-...\")}`);\n console.log(` 3. Run tests: ${chalk.bold(\"kindlm test\")}`);\n });\n}\n","/* eslint-disable no-console */\nimport type { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport chalk from \"chalk\";\nimport { parseConfig } from \"@kindlm/core\";\nimport { createNodeFileReader } from \"../utils/file-reader.js\";\n\nexport function registerValidateCommand(program: Command): void {\n program\n .command(\"validate\")\n .description(\"Validate kindlm.yaml configuration\")\n .option(\"-c, --config <path>\", \"Path to config file\", \"kindlm.yaml\")\n .action((options: { config: string }) => {\n const configPath = resolve(process.cwd(), options.config);\n const configDir = dirname(configPath);\n\n let yamlContent: string;\n try {\n yamlContent = readFileSync(configPath, \"utf-8\");\n } catch {\n console.error(chalk.red(`Config file not found: ${configPath}`));\n process.exit(1);\n }\n\n const fileReader = createNodeFileReader();\n const result = parseConfig(yamlContent, { configDir, fileReader });\n\n if (!result.success) {\n console.error(chalk.red(\"Validation failed:\"));\n const details = result.error.details;\n if (details && Array.isArray(details[\"errors\"])) {\n for (const e of details[\"errors\"] as string[]) {\n console.error(chalk.red(` - ${e}`));\n }\n } else {\n console.error(chalk.red(` ${result.error.message}`));\n }\n process.exit(1);\n }\n\n const config = result.data;\n console.log(chalk.green(\"Config is valid!\"));\n console.log(\"\");\n console.log(` Suite: ${chalk.bold(config.suite.name)}`);\n console.log(` Tests: ${chalk.bold(String(config.tests.length))}`);\n console.log(` Models: ${chalk.bold(String(config.models.length))}`);\n });\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\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 // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\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(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?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// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[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// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?: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])$/;\nconst ipv4CidrRegex = /^(?:(?: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])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(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\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\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 dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\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}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(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 { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\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 { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","// ============================================================\n// HTTP Client (injected — core has zero I/O)\n// ============================================================\n\nexport interface HttpClient {\n fetch(url: string, init: HttpRequestInit): Promise<HttpResponse>;\n}\n\nexport interface HttpRequestInit {\n method: string;\n headers: Record<string, string>;\n body: string;\n timeoutMs?: number;\n}\n\nexport interface HttpResponse {\n ok: boolean;\n status: number;\n json(): Promise<unknown>;\n}\n\n// ============================================================\n// Messages\n// ============================================================\n\nexport interface ProviderMessage {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n content: string;\n toolCallId?: string;\n toolName?: string;\n toolCalls?: ProviderToolCall[];\n}\n\nexport interface ProviderToolDefinition {\n name: string;\n description?: string;\n parameters?: Record<string, unknown>;\n}\n\nexport interface ProviderToolCall {\n id: string;\n name: string;\n arguments: Record<string, unknown>;\n}\n\nexport interface ProviderRequest {\n model: string;\n messages: ProviderMessage[];\n params: {\n temperature: number;\n maxTokens: number;\n topP?: number;\n stopSequences?: string[];\n seed?: number;\n };\n tools?: ProviderToolDefinition[];\n toolChoice?: \"auto\" | \"required\" | \"none\";\n}\n\nexport interface ProviderResponse {\n text: string;\n toolCalls: ProviderToolCall[];\n usage: {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n };\n raw: unknown;\n latencyMs: number;\n modelId: string;\n finishReason: \"stop\" | \"max_tokens\" | \"tool_calls\" | \"error\" | \"unknown\";\n}\n\nexport type ProviderErrorCode =\n | \"AUTH_FAILED\"\n | \"RATE_LIMITED\"\n | \"TIMEOUT\"\n | \"MODEL_NOT_FOUND\"\n | \"CONTEXT_LENGTH\"\n | \"CONTENT_FILTERED\"\n | \"NETWORK_ERROR\"\n | \"PROVIDER_ERROR\"\n | \"UNKNOWN\";\n\nexport class ProviderError extends Error {\n constructor(\n public code: ProviderErrorCode,\n message: string,\n public statusCode?: number,\n public retryable: boolean = false,\n public raw?: unknown,\n ) {\n super(message);\n this.name = \"ProviderError\";\n }\n}\n\nexport interface ProviderAdapter {\n readonly name: string;\n initialize(config: ProviderAdapterConfig): Promise<void>;\n complete(request: ProviderRequest): Promise<ProviderResponse>;\n estimateCost(model: string, usage: ProviderResponse[\"usage\"]): number | null;\n supportsTools(model: string): boolean;\n}\n\nexport interface ProviderAdapterConfig {\n apiKey: string;\n baseUrl?: string;\n organization?: string;\n timeoutMs: number;\n maxRetries: number;\n}\n\nexport interface ConversationTurn {\n request: ProviderRequest;\n response: ProviderResponse;\n}\n\nexport interface ConversationResult {\n turns: ConversationTurn[];\n finalText: string;\n allToolCalls: ProviderToolCall[];\n totalUsage: ProviderResponse[\"usage\"];\n totalLatencyMs: number;\n}\n","export type Result<T, E = KindlmError> =\n | { success: true; data: T }\n | { success: false; error: E };\n\nexport interface KindlmError {\n code: ErrorCode;\n message: string;\n details?: Record<string, unknown>;\n cause?: Error;\n}\n\nexport type ErrorCode =\n // Config errors\n | \"CONFIG_NOT_FOUND\"\n | \"CONFIG_PARSE_ERROR\"\n | \"CONFIG_VALIDATION_ERROR\"\n | \"CONFIG_FILE_REF_ERROR\"\n | \"CONFIG_TOO_LARGE\"\n | \"PATH_TRAVERSAL\"\n // Provider errors\n | \"PROVIDER_NOT_FOUND\"\n | \"PROVIDER_AUTH_ERROR\"\n | \"PROVIDER_RATE_LIMIT\"\n | \"PROVIDER_TIMEOUT\"\n | \"PROVIDER_API_ERROR\"\n | \"PROVIDER_NETWORK_ERROR\"\n // Assertion errors\n | \"ASSERTION_EVAL_ERROR\"\n | \"SCHEMA_FILE_ERROR\"\n | \"JUDGE_EVAL_ERROR\"\n // Engine errors\n | \"ENGINE_MAX_TURNS\"\n | \"ENGINE_EMPTY_RESPONSE\"\n // Baseline errors\n | \"BASELINE_NOT_FOUND\"\n | \"BASELINE_CORRUPT\"\n | \"BASELINE_VERSION_MISMATCH\"\n // Cloud errors\n | \"CLOUD_AUTH_ERROR\"\n | \"CLOUD_UPLOAD_ERROR\"\n | \"CLOUD_PLAN_LIMIT\"\n | \"CLOUD_RATE_LIMIT\"\n // System errors\n | \"UNKNOWN_ERROR\";\n\nexport function ok<T>(data: T): Result<T, never> {\n return { success: true, data };\n}\n\nexport function err<E = KindlmError>(error: E): Result<never, E> {\n return { success: false, error };\n}\n","import type { Assertion, AssertionContext, AssertionResult } from \"./interface.js\";\n\nexport interface ToolCallExpectation {\n tool: string;\n shouldNotCall?: boolean;\n argsMatch?: Record<string, unknown>;\n argsSchema?: string;\n order?: number;\n}\n\nfunction matchArgs(\n actual: Record<string, unknown>,\n expected: Record<string, unknown>,\n): boolean {\n for (const [key, value] of Object.entries(expected)) {\n if (JSON.stringify(actual[key]) !== JSON.stringify(value)) {\n return false;\n }\n }\n return true;\n}\n\nexport function createToolCalledAssertion(\n tool: string,\n argsMatch?: Record<string, unknown>,\n): Assertion {\n return {\n type: \"tool_called\",\n evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n const results: AssertionResult[] = [];\n const matching = context.toolCalls.filter((tc) => tc.name === tool);\n const actualNames = context.toolCalls.map((tc) => tc.name);\n\n if (matching.length === 0) {\n results.push({\n assertionType: \"tool_called\",\n label: `Tool \"${tool}\" called`,\n passed: false,\n score: 0,\n failureCode: \"TOOL_CALL_MISSING\",\n failureMessage: `Expected tool \"${tool}\" to be called, but got: [${actualNames.join(\", \")}]`,\n });\n return Promise.resolve(results);\n }\n\n results.push({\n assertionType: \"tool_called\",\n label: `Tool \"${tool}\" called`,\n passed: true,\n score: 1,\n });\n\n if (argsMatch) {\n const anyMatch = matching.some((tc) => matchArgs(tc.arguments, argsMatch));\n results.push({\n assertionType: \"tool_called\",\n label: `Tool \"${tool}\" args match`,\n passed: anyMatch,\n score: anyMatch ? 1 : 0,\n failureCode: anyMatch ? undefined : \"TOOL_CALL_ARGS_MISMATCH\",\n failureMessage: anyMatch\n ? undefined\n : `Expected args ${JSON.stringify(argsMatch)}, got ${JSON.stringify(matching[0]?.arguments)}`,\n });\n }\n\n return Promise.resolve(results);\n },\n };\n}\n\nexport function createToolNotCalledAssertion(tool: string): Assertion {\n return {\n type: \"tool_not_called\",\n evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n const found = context.toolCalls.some((tc) => tc.name === tool);\n return Promise.resolve([\n {\n assertionType: \"tool_not_called\",\n label: `Tool \"${tool}\" not called`,\n passed: !found,\n score: found ? 0 : 1,\n failureCode: found ? \"TOOL_CALL_UNEXPECTED\" : undefined,\n failureMessage: found\n ? `Expected tool \"${tool}\" to NOT be called, but it was`\n : undefined,\n },\n ]);\n },\n };\n}\n\nexport function createToolOrderAssertion(\n expectations: ToolCallExpectation[],\n): Assertion {\n return {\n type: \"tool_order\",\n evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n const results: AssertionResult[] = [];\n\n for (const exp of expectations) {\n if (exp.shouldNotCall) {\n const found = context.toolCalls.some((tc) => tc.name === exp.tool);\n results.push({\n assertionType: \"tool_order\",\n label: `Tool \"${exp.tool}\" not called`,\n passed: !found,\n score: found ? 0 : 1,\n failureCode: found ? \"TOOL_CALL_UNEXPECTED\" : undefined,\n failureMessage: found\n ? `Expected tool \"${exp.tool}\" to NOT be called, but it was`\n : undefined,\n });\n continue;\n }\n\n const matching = context.toolCalls.filter((tc) => tc.name === exp.tool);\n if (matching.length === 0) {\n results.push({\n assertionType: \"tool_order\",\n label: `Tool \"${exp.tool}\" called`,\n passed: false,\n score: 0,\n failureCode: \"TOOL_CALL_MISSING\",\n failureMessage: `Expected tool \"${exp.tool}\" to be called, but it was not`,\n });\n continue;\n }\n\n results.push({\n assertionType: \"tool_order\",\n label: `Tool \"${exp.tool}\" called`,\n passed: true,\n score: 1,\n });\n\n if (exp.argsMatch) {\n const anyMatch = matching.some((tc) =>\n matchArgs(tc.arguments, exp.argsMatch ?? {}),\n );\n results.push({\n assertionType: \"tool_order\",\n label: `Tool \"${exp.tool}\" args match`,\n passed: anyMatch,\n score: anyMatch ? 1 : 0,\n failureCode: anyMatch ? undefined : \"TOOL_CALL_ARGS_MISMATCH\",\n failureMessage: anyMatch\n ? undefined\n : `Expected args ${JSON.stringify(exp.argsMatch)}, got ${JSON.stringify(matching[0]?.arguments)}`,\n });\n }\n\n if (exp.order !== undefined) {\n const actualIndex = context.toolCalls.findIndex(\n (tc) => tc.name === exp.tool,\n );\n const orderMatch = actualIndex === exp.order;\n results.push({\n assertionType: \"tool_order\",\n label: `Tool \"${exp.tool}\" at position ${exp.order}`,\n passed: orderMatch,\n score: orderMatch ? 1 : 0,\n failureCode: orderMatch ? undefined : \"TOOL_CALL_ORDER_WRONG\",\n failureMessage: orderMatch\n ? undefined\n : `Expected \"${exp.tool}\" at position ${exp.order}, but found at position ${actualIndex}`,\n });\n }\n }\n\n return Promise.resolve(results);\n },\n };\n}\n","import type { Assertion, AssertionContext, AssertionResult } from \"./interface.js\";\n\n// AJV is CJS — dynamic import to avoid verbatimModuleSyntax issues\nlet ajvInstance: AjvInstance | undefined;\n\nasync function getAjvInstance(): Promise<AjvInstance> {\n if (ajvInstance) return ajvInstance;\n const ajvMod = await import(\"ajv\");\n const formatsMod = await import(\"ajv-formats\");\n const Ajv = (ajvMod as unknown as { default: { new (opts: object): AjvInstance } }).default;\n const addFormats = (formatsMod as unknown as { default: (ajv: AjvInstance) => void }).default;\n const instance = new Ajv({ allErrors: true, strict: false });\n addFormats(instance);\n ajvInstance = instance;\n return instance;\n}\n\ninterface AjvInstance {\n compile(schema: object): AjvValidateFunction;\n getSchema(key: string): AjvValidateFunction | undefined;\n addSchema(schema: object, key: string): AjvInstance;\n errorsText(errors: unknown[] | null | undefined): string;\n}\n\ninterface AjvValidateFunction {\n (data: unknown): boolean;\n errors: unknown[] | null;\n}\n\n// Cache compiled validators keyed by JSON-serialized schema\nconst validatorCache = new Map<string, AjvValidateFunction>();\n\nfunction getOrCompileValidator(ajv: AjvInstance, schema: Record<string, unknown>): AjvValidateFunction {\n const key = JSON.stringify(schema);\n const cached = validatorCache.get(key);\n if (cached) return cached;\n const validate = ajv.compile(schema);\n validatorCache.set(key, validate);\n return validate;\n}\n\nexport interface SchemaAssertionConfig {\n format: \"text\" | \"json\";\n schemaFile?: string;\n schemaContent?: Record<string, unknown>;\n contains?: string[];\n notContains?: string[];\n maxLength?: number;\n}\n\nexport function createSchemaAssertion(config: SchemaAssertionConfig): Assertion {\n return {\n type: \"schema\",\n async evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n const results: AssertionResult[] = [];\n let parsed: unknown = undefined;\n\n if (config.format === \"json\") {\n try {\n parsed = JSON.parse(context.outputText);\n results.push({\n assertionType: \"schema\",\n label: \"Output is valid JSON\",\n passed: true,\n score: 1,\n });\n } catch (e) {\n results.push({\n assertionType: \"schema\",\n label: \"Output is valid JSON\",\n passed: false,\n score: 0,\n failureCode: \"SCHEMA_PARSE_ERROR\",\n failureMessage: `Failed to parse output as JSON: ${e instanceof Error ? e.message : String(e)}`,\n });\n return results;\n }\n }\n\n if (config.schemaContent) {\n const ajv = await getAjvInstance();\n const validate = getOrCompileValidator(ajv, config.schemaContent);\n const valid = validate(parsed ?? context.outputText);\n results.push({\n assertionType: \"schema\",\n label: \"Output matches JSON Schema\",\n passed: valid,\n score: valid ? 1 : 0,\n failureCode: valid ? undefined : \"SCHEMA_INVALID\",\n failureMessage: valid\n ? undefined\n : `Schema validation failed: ${ajv.errorsText(validate.errors)}`,\n metadata: valid ? undefined : { errors: validate.errors },\n });\n }\n\n if (config.contains) {\n const lowerOutput = context.outputText.toLowerCase();\n for (const substring of config.contains) {\n const found = lowerOutput.includes(substring.toLowerCase());\n results.push({\n assertionType: \"schema\",\n label: `Output contains \"${substring}\"`,\n passed: found,\n score: found ? 1 : 0,\n failureCode: found ? undefined : \"CONTAINS_FAILED\",\n failureMessage: found\n ? undefined\n : `Expected output to contain \"${substring}\"`,\n });\n }\n }\n\n if (config.notContains) {\n const lowerOutputNc = context.outputText.toLowerCase();\n for (const substring of config.notContains) {\n const found = lowerOutputNc.includes(substring.toLowerCase());\n results.push({\n assertionType: \"schema\",\n label: `Output does not contain \"${substring}\"`,\n passed: !found,\n score: found ? 0 : 1,\n failureCode: found ? \"NOT_CONTAINS_FAILED\" : undefined,\n failureMessage: found\n ? `Expected output to NOT contain \"${substring}\"`\n : undefined,\n });\n }\n }\n\n if (config.maxLength !== undefined) {\n const withinLimit = context.outputText.length <= config.maxLength;\n results.push({\n assertionType: \"schema\",\n label: `Output length <= ${config.maxLength}`,\n passed: withinLimit,\n score: withinLimit ? 1 : 0,\n failureCode: withinLimit ? undefined : \"MAX_LENGTH_EXCEEDED\",\n failureMessage: withinLimit\n ? undefined\n : `Output length ${context.outputText.length} exceeds max ${config.maxLength}`,\n });\n }\n\n return results;\n },\n };\n}\n","import type { Assertion, AssertionContext, AssertionResult } from \"./interface.js\";\n\nexport interface PiiAssertionConfig {\n denyPatterns: string[];\n customPatterns?: Array<{ name: string; pattern: string }>;\n}\n\nconst MAX_PII_MATCHES = 1000;\nconst REGEX_TIMEOUT_MS = 100;\n\nfunction redact(match: string): string {\n if (match.length <= 4) return \"*\".repeat(match.length);\n return match.slice(0, 2) + \"*\".repeat(match.length - 4) + match.slice(-2);\n}\n\nconst NESTED_QUANTIFIER_RE = /(\\+|\\*|\\{[^}]+\\})\\)?(\\+|\\*|\\{[^}]+\\})/;\n\nexport function hasNestedQuantifiers(pattern: string): boolean {\n return NESTED_QUANTIFIER_RE.test(pattern);\n}\n\nfunction safeRegexExec(\n regex: RegExp,\n text: string,\n maxMatches: number,\n): string[] {\n const results: string[] = [];\n const start = Date.now();\n // Reset lastIndex for global regexes reused across evaluations\n regex.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = regex.exec(text)) !== null) {\n results.push(m[0]);\n if (results.length >= maxMatches) break;\n if (Date.now() - start > REGEX_TIMEOUT_MS) break;\n }\n return results;\n}\n\nexport function createPiiAssertion(config: PiiAssertionConfig): Assertion {\n // Pre-compile all regexes once at assertion creation time\n const compiledPatterns: Array<{ name: string; regex: RegExp }> = [];\n let compilationError: AssertionResult[] | undefined;\n\n for (let i = 0; i < config.denyPatterns.length; i++) {\n const pattern = config.denyPatterns[i];\n if (pattern === undefined) continue;\n compiledPatterns.push({\n name: `pii-pattern-${i + 1}`,\n regex: new RegExp(pattern, \"gi\"),\n });\n }\n\n if (config.customPatterns) {\n for (const cp of config.customPatterns) {\n if (hasNestedQuantifiers(cp.pattern)) {\n compilationError = [\n {\n assertionType: \"pii\",\n label: \"No PII detected\",\n passed: false,\n score: 0,\n failureCode: \"INVALID_PATTERN\",\n failureMessage: `Custom pattern \"${cp.name}\" contains nested quantifiers and may cause catastrophic backtracking`,\n },\n ];\n break;\n }\n compiledPatterns.push({\n name: cp.name,\n regex: new RegExp(cp.pattern, \"gi\"),\n });\n }\n }\n\n return {\n type: \"pii\",\n evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n if (compilationError) {\n return Promise.resolve(compilationError);\n }\n\n const matches: Array<{ name: string; redacted: string }> = [];\n let totalMatches = 0;\n\n for (const { name, regex } of compiledPatterns) {\n if (totalMatches >= MAX_PII_MATCHES) break;\n const remaining = MAX_PII_MATCHES - totalMatches;\n const found = safeRegexExec(regex, context.outputText, remaining);\n for (const m of found) {\n matches.push({ name, redacted: redact(m) });\n }\n totalMatches += found.length;\n }\n\n const passed = matches.length === 0;\n return Promise.resolve([\n {\n assertionType: \"pii\",\n label: \"No PII detected\",\n passed,\n score: passed ? 1 : 0,\n failureCode: passed ? undefined : \"PII_DETECTED\",\n failureMessage: passed\n ? undefined\n : `Found ${matches.length} PII match(es): ${matches.map((m) => `${m.name}=${m.redacted}`).join(\", \")}`,\n metadata: passed ? undefined : { matches },\n },\n ]);\n },\n };\n}\n","import type { Assertion, AssertionContext, AssertionResult } from \"./interface.js\";\n\nexport function createKeywordsPresentAssertion(keywords: string[]): Assertion {\n return {\n type: \"keywords_present\",\n evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n const lower = context.outputText.toLowerCase();\n const found = keywords.some((kw) => lower.includes(kw.toLowerCase()));\n return Promise.resolve([\n {\n assertionType: \"keywords_present\",\n label: \"Required keyword present\",\n passed: found,\n score: found ? 1 : 0,\n failureCode: found ? undefined : \"KEYWORD_MISSING\",\n failureMessage: found\n ? undefined\n : `Expected at least one of [${keywords.join(\", \")}] in output`,\n },\n ]);\n },\n };\n}\n\nexport function createKeywordsAbsentAssertion(keywords: string[]): Assertion {\n return {\n type: \"keywords_absent\",\n evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n const lower = context.outputText.toLowerCase();\n const results: AssertionResult[] = [];\n\n for (const keyword of keywords) {\n const found = lower.includes(keyword.toLowerCase());\n results.push({\n assertionType: \"keywords_absent\",\n label: `Keyword \"${keyword}\" absent`,\n passed: !found,\n score: found ? 0 : 1,\n failureCode: found ? \"KEYWORD_DENIED\" : undefined,\n failureMessage: found\n ? `Denied keyword \"${keyword}\" found in output`\n : undefined,\n });\n }\n\n return Promise.resolve(results);\n },\n };\n}\n","import type { Assertion, AssertionContext, AssertionResult } from \"./interface.js\";\n\nexport interface JudgeAssertionConfig {\n criteria: string;\n minScore: number;\n rubric?: string;\n}\n\nconst JUDGE_SYSTEM_PROMPT = `You are an impartial AI judge evaluating an AI assistant's response.\nYou will be given:\n- The assistant's response\n- Evaluation criteria\n- An optional rubric\n\nScore the response from 0.0 to 1.0 based on how well it meets the criteria.\n\nRespond ONLY with a JSON object in this exact format:\n{\"score\": <number between 0.0 and 1.0>, \"reasoning\": \"<brief explanation>\"}`;\n\nfunction buildUserPrompt(\n outputText: string,\n criteria: string,\n rubric?: string,\n): string {\n let prompt = `## Assistant Response\\n${outputText}\\n\\n## Criteria\\n${criteria}`;\n if (rubric) {\n prompt += `\\n\\n## Rubric\\n${rubric}`;\n }\n return prompt;\n}\n\nfunction parseJudgeResponse(text: string): { score: number; reasoning: string } | null {\n const jsonMatch = text.match(/```(?:json)?\\s*([\\s\\S]*?)```/) ?? text.match(/(\\{[\\s\\S]*\\})/);\n if (!jsonMatch?.[1]) return null;\n try {\n const parsed = JSON.parse(jsonMatch[1]) as Record<string, unknown>;\n if (typeof parsed.score === \"number\" && typeof parsed.reasoning === \"string\") {\n return { score: parsed.score, reasoning: parsed.reasoning };\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport function createJudgeAssertion(config: JudgeAssertionConfig): Assertion {\n return {\n type: \"judge\",\n async evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n if (!context.judgeAdapter || !context.judgeModel) {\n return [\n {\n assertionType: \"judge\",\n label: `Judge: ${config.criteria}`,\n passed: false,\n score: 0,\n failureCode: \"INTERNAL_ERROR\",\n failureMessage:\n \"Judge assertion requires judgeAdapter and judgeModel in context\",\n },\n ];\n }\n\n const response = await context.judgeAdapter.complete({\n model: context.judgeModel,\n messages: [\n { role: \"system\", content: JUDGE_SYSTEM_PROMPT },\n {\n role: \"user\",\n content: buildUserPrompt(\n context.outputText,\n config.criteria,\n config.rubric,\n ),\n },\n ],\n params: { temperature: 0, maxTokens: 512 },\n });\n\n const parsed = parseJudgeResponse(response.text);\n if (!parsed) {\n return [\n {\n assertionType: \"judge\",\n label: `Judge: ${config.criteria}`,\n passed: false,\n score: 0,\n failureCode: \"INTERNAL_ERROR\",\n failureMessage: `Failed to parse judge response: ${response.text.slice(0, 200)}`,\n },\n ];\n }\n\n const passed = parsed.score >= config.minScore;\n return [\n {\n assertionType: \"judge\",\n label: `Judge: ${config.criteria}`,\n passed,\n score: parsed.score,\n failureCode: passed ? undefined : \"JUDGE_BELOW_THRESHOLD\",\n failureMessage: passed\n ? undefined\n : `Score ${parsed.score} below threshold ${config.minScore}: ${parsed.reasoning}`,\n metadata: { reasoning: parsed.reasoning },\n },\n ];\n },\n };\n}\n","import type { Assertion, AssertionContext, AssertionResult } from \"./interface.js\";\n\nexport interface DriftAssertionConfig {\n maxScore: number;\n method: \"judge\" | \"embedding\" | \"field-diff\";\n fields?: string[];\n}\n\nconst DRIFT_JUDGE_SYSTEM = `You are an impartial AI judge comparing two AI assistant responses.\nYou will be given a baseline response and a new response.\nEvaluate how much the new response has drifted from the baseline.\n\nScore from 0.0 to 1.0 where:\n- 0.0 = responses are semantically identical\n- 0.5 = moderate differences in tone, detail, or structure\n- 1.0 = completely different meaning or contradictory\n\nRespond ONLY with a JSON object in this exact format:\n{\"driftScore\": <number between 0.0 and 1.0>, \"reasoning\": \"<brief explanation>\"}`;\n\nfunction parseDriftResponse(text: string): { driftScore: number; reasoning: string } | null {\n const jsonMatch = text.match(/```(?:json)?\\s*([\\s\\S]*?)```/) ?? text.match(/(\\{[\\s\\S]*\\})/);\n if (!jsonMatch?.[1]) return null;\n try {\n const parsed = JSON.parse(jsonMatch[1]) as Record<string, unknown>;\n if (typeof parsed.driftScore === \"number\" && typeof parsed.reasoning === \"string\") {\n return { driftScore: parsed.driftScore, reasoning: parsed.reasoning };\n }\n return null;\n } catch {\n return null;\n }\n}\n\nfunction getNestedField(obj: unknown, path: string): unknown {\n const parts = path.split(\".\");\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || current === undefined || typeof current !== \"object\") {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction fieldDiff(\n baselineText: string,\n outputText: string,\n fields: string[],\n): { driftScore: number; mismatched: string[] } {\n let baselineObj: unknown;\n let outputObj: unknown;\n try {\n baselineObj = JSON.parse(baselineText);\n outputObj = JSON.parse(outputText);\n } catch {\n return { driftScore: 1, mismatched: [\"(parse error)\"] };\n }\n\n const mismatched: string[] = [];\n for (const field of fields) {\n const baseVal = getNestedField(baselineObj, field);\n const outVal = getNestedField(outputObj, field);\n if (JSON.stringify(baseVal) !== JSON.stringify(outVal)) {\n mismatched.push(field);\n }\n }\n const driftScore = fields.length > 0 ? mismatched.length / fields.length : 0;\n return { driftScore, mismatched };\n}\n\nexport function createDriftAssertion(config: DriftAssertionConfig): Assertion {\n return {\n type: \"drift\",\n async evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n if (!context.baselineText) {\n return [\n {\n assertionType: \"drift\",\n label: \"Drift check\",\n passed: true,\n score: 1,\n metadata: { reason: \"No baseline available\" },\n },\n ];\n }\n\n if (config.method === \"embedding\") {\n return [\n {\n assertionType: \"drift\",\n label: \"Drift check (embedding)\",\n passed: true,\n score: 1,\n metadata: { reason: \"Embedding method not yet implemented\" },\n },\n ];\n }\n\n if (config.method === \"field-diff\") {\n const fields = config.fields ?? [];\n const { driftScore, mismatched } = fieldDiff(\n context.baselineText,\n context.outputText,\n fields,\n );\n const score = 1 - driftScore;\n const passed = driftScore <= config.maxScore;\n return [\n {\n assertionType: \"drift\",\n label: \"Drift check (field-diff)\",\n passed,\n score,\n failureCode: passed ? undefined : \"DRIFT_EXCEEDED\",\n failureMessage: passed\n ? undefined\n : `Drift score ${driftScore.toFixed(2)} exceeds max ${config.maxScore}. Mismatched: [${mismatched.join(\", \")}]`,\n metadata: { driftScore, mismatched },\n },\n ];\n }\n\n // method === \"judge\"\n if (!context.judgeAdapter || !context.judgeModel) {\n return [\n {\n assertionType: \"drift\",\n label: \"Drift check (judge)\",\n passed: false,\n score: 0,\n failureCode: \"INTERNAL_ERROR\",\n failureMessage:\n \"Drift judge method requires judgeAdapter and judgeModel in context\",\n },\n ];\n }\n\n const response = await context.judgeAdapter.complete({\n model: context.judgeModel,\n messages: [\n { role: \"system\", content: DRIFT_JUDGE_SYSTEM },\n {\n role: \"user\",\n content: `## Baseline Response\\n${context.baselineText}\\n\\n## New Response\\n${context.outputText}`,\n },\n ],\n params: { temperature: 0, maxTokens: 512 },\n });\n\n const parsed = parseDriftResponse(response.text);\n if (!parsed) {\n return [\n {\n assertionType: \"drift\",\n label: \"Drift check (judge)\",\n passed: false,\n score: 0,\n failureCode: \"INTERNAL_ERROR\",\n failureMessage: `Failed to parse drift judge response: ${response.text.slice(0, 200)}`,\n },\n ];\n }\n\n const score = 1 - parsed.driftScore;\n const passed = parsed.driftScore <= config.maxScore;\n return [\n {\n assertionType: \"drift\",\n label: \"Drift check (judge)\",\n passed,\n score,\n failureCode: passed ? undefined : \"DRIFT_EXCEEDED\",\n failureMessage: passed\n ? undefined\n : `Drift score ${parsed.driftScore.toFixed(2)} exceeds max ${config.maxScore}: ${parsed.reasoning}`,\n metadata: { driftScore: parsed.driftScore, reasoning: parsed.reasoning },\n },\n ];\n },\n };\n}\n","import type { Assertion, AssertionContext, AssertionResult } from \"./interface.js\";\n\nexport interface LatencyAssertionConfig {\n maxMs: number;\n}\n\nexport function createLatencyAssertion(config: LatencyAssertionConfig): Assertion {\n return {\n type: \"latency\",\n evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n const latencyMs = context.latencyMs ?? 0;\n const passed = latencyMs <= config.maxMs;\n return Promise.resolve([\n {\n assertionType: \"latency\",\n label: `Latency <= ${config.maxMs}ms`,\n passed,\n score: passed ? 1 : 0,\n failureCode: passed ? undefined : \"PROVIDER_TIMEOUT\",\n failureMessage: passed\n ? undefined\n : `Latency ${latencyMs}ms exceeds max ${config.maxMs}ms`,\n metadata: { latencyMs },\n },\n ]);\n },\n };\n}\n","import type { Assertion, AssertionContext, AssertionResult } from \"./interface.js\";\n\nexport interface CostAssertionConfig {\n maxUsd: number;\n}\n\nexport function createCostAssertion(config: CostAssertionConfig): Assertion {\n return {\n type: \"cost\",\n evaluate(context: AssertionContext): Promise<AssertionResult[]> {\n const costUsd = context.costUsd ?? 0;\n const passed = costUsd <= config.maxUsd;\n return Promise.resolve([\n {\n assertionType: \"cost\",\n label: `Cost <= $${config.maxUsd}`,\n passed,\n score: passed ? 1 : 0,\n failureCode: passed ? undefined : \"INTERNAL_ERROR\",\n failureMessage: passed\n ? undefined\n : `Cost $${costUsd.toFixed(4)} exceeds max $${config.maxUsd}`,\n metadata: { costUsd },\n },\n ]);\n },\n };\n}\n","import type { Assertion } from \"./interface.js\";\nimport type { Expect } from \"../types/config.js\";\nimport {\n createToolCalledAssertion,\n createToolNotCalledAssertion,\n createToolOrderAssertion,\n} from \"./tool-calls.js\";\nimport { createSchemaAssertion } from \"./schema.js\";\nimport { createPiiAssertion } from \"./pii.js\";\nimport {\n createKeywordsPresentAssertion,\n createKeywordsAbsentAssertion,\n} from \"./keywords.js\";\nimport { createJudgeAssertion } from \"./judge.js\";\nimport { createDriftAssertion } from \"./drift.js\";\nimport { createLatencyAssertion } from \"./latency.js\";\nimport { createCostAssertion } from \"./cost.js\";\n\nexport type AssertionFactory = (config: Expect) => Assertion;\n\nexport interface AssertionOverrides {\n schemaContent?: Record<string, unknown>;\n}\n\nexport function createAssertionsFromExpect(expect: Expect, overrides?: AssertionOverrides): Assertion[] {\n const assertions: Assertion[] = [];\n\n if (expect.toolCalls) {\n const hasOrder = expect.toolCalls.some((tc) => tc.order !== undefined);\n\n if (hasOrder) {\n assertions.push(createToolOrderAssertion(expect.toolCalls));\n } else {\n for (const tc of expect.toolCalls) {\n if (tc.shouldNotCall) {\n assertions.push(createToolNotCalledAssertion(tc.tool));\n } else {\n assertions.push(\n createToolCalledAssertion(tc.tool, tc.argsMatch ?? undefined),\n );\n }\n }\n }\n }\n\n if (expect.output) {\n assertions.push(\n createSchemaAssertion({\n format: expect.output.format,\n schemaFile: expect.output.schemaFile,\n schemaContent: overrides?.schemaContent,\n contains: expect.output.contains,\n notContains: expect.output.notContains,\n maxLength: expect.output.maxLength,\n }),\n );\n }\n\n if (expect.guardrails?.pii) {\n assertions.push(\n createPiiAssertion({\n denyPatterns: expect.guardrails.pii.denyPatterns,\n customPatterns: expect.guardrails.pii.customPatterns,\n }),\n );\n }\n\n if (expect.guardrails?.keywords) {\n if (\n expect.guardrails.keywords.allow &&\n expect.guardrails.keywords.allow.length > 0\n ) {\n assertions.push(\n createKeywordsPresentAssertion(expect.guardrails.keywords.allow),\n );\n }\n if (expect.guardrails.keywords.deny.length > 0) {\n assertions.push(\n createKeywordsAbsentAssertion(expect.guardrails.keywords.deny),\n );\n }\n }\n\n if (expect.judge) {\n for (const criterion of expect.judge) {\n assertions.push(\n createJudgeAssertion({\n criteria: criterion.criteria,\n minScore: criterion.minScore,\n rubric: criterion.rubric,\n }),\n );\n }\n }\n\n if (expect.baseline?.drift) {\n assertions.push(\n createDriftAssertion({\n maxScore: expect.baseline.drift.maxScore,\n method: expect.baseline.drift.method,\n fields: expect.baseline.drift.fields,\n }),\n );\n }\n\n return assertions;\n}\n\nexport function createAssertionRegistry(): Map<string, AssertionFactory> {\n return new Map<string, AssertionFactory>([\n [\"tool_called\", (config) => createToolCalledAssertion(config.toolCalls?.[0]?.tool ?? \"\")],\n [\"schema\", (config) => createSchemaAssertion(config.output ?? { format: \"text\" })],\n [\"pii\", (config) => createPiiAssertion(config.guardrails?.pii ?? { denyPatterns: [] })],\n [\"judge\", (config) => createJudgeAssertion(config.judge?.[0] ?? { criteria: \"\", minScore: 0.7 })],\n [\"drift\", (config) => createDriftAssertion(config.baseline?.drift ?? { maxScore: 0.15, method: \"judge\" })],\n [\"latency\", () => createLatencyAssertion({ maxMs: 60000 })],\n [\"cost\", () => createCostAssertion({ maxUsd: 1.0 })],\n ]);\n}\n","export type AssertionCategory = \"deterministic\" | \"probabilistic\";\n\nconst PROBABILISTIC_TYPES = new Set([\"judge\", \"drift\"]);\n\nexport function classifyAssertion(assertionType: string): AssertionCategory {\n return PROBABILISTIC_TYPES.has(assertionType) ? \"probabilistic\" : \"deterministic\";\n}\n\nexport function isDeterministic(assertionType: string): boolean {\n return classifyAssertion(assertionType) === \"deterministic\";\n}\n\nexport function isProbabilistic(assertionType: string): boolean {\n return classifyAssertion(assertionType) === \"probabilistic\";\n}\n","export interface RetryOptions {\n maxRetries: number;\n shouldRetry: (error: unknown) => boolean;\n baseDelayMs?: number;\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n options: RetryOptions,\n): Promise<T> {\n const { maxRetries, shouldRetry, baseDelayMs = 500 } = options;\n\n let lastError: unknown;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error: unknown) {\n lastError = error;\n\n if (attempt >= maxRetries || !shouldRetry(error)) {\n throw error;\n }\n\n const delay = baseDelayMs * Math.pow(2, attempt);\n await sleep(delay);\n }\n }\n\n throw lastError;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import type {\n HttpClient,\n ProviderAdapter,\n ProviderAdapterConfig,\n ProviderRequest,\n ProviderResponse,\n ProviderToolCall,\n} from \"./interface.js\";\nimport { ProviderError } from \"./interface.js\";\nimport { withRetry } from \"./retry.js\";\n\nconst OPENAI_PRICING: Record<string, { input: number; output: number }> = {\n \"gpt-4o\": { input: 2.5, output: 10.0 },\n \"gpt-4o-mini\": { input: 0.15, output: 0.6 },\n \"gpt-4-turbo\": { input: 10.0, output: 30.0 },\n \"o3-mini\": { input: 1.1, output: 4.4 },\n};\n\nfunction mapFinishReason(\n reason: string | undefined,\n): ProviderResponse[\"finishReason\"] {\n switch (reason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"max_tokens\";\n case \"tool_calls\":\n return \"tool_calls\";\n default:\n return \"unknown\";\n }\n}\n\nfunction mapError(status: number, data: unknown): ProviderError {\n const message =\n typeof data === \"object\" && data !== null && \"error\" in data\n ? String(\n (data as { error: { message?: string } }).error?.message ??\n \"Unknown error\",\n )\n : \"Unknown error\";\n\n switch (status) {\n case 401:\n return new ProviderError(\"AUTH_FAILED\", message, status, false, data);\n case 429:\n return new ProviderError(\"RATE_LIMITED\", message, status, true, data);\n case 404:\n return new ProviderError(\"MODEL_NOT_FOUND\", message, status, false, data);\n case 400:\n if (message.toLowerCase().includes(\"context length\")) {\n return new ProviderError(\n \"CONTEXT_LENGTH\",\n message,\n status,\n false,\n data,\n );\n }\n return new ProviderError(\"PROVIDER_ERROR\", message, status, false, data);\n case 408:\n return new ProviderError(\"TIMEOUT\", message, status, true, data);\n default:\n return new ProviderError(\n status >= 500 ? \"PROVIDER_ERROR\" : \"UNKNOWN\",\n message,\n status,\n status >= 500,\n data,\n );\n }\n}\n\nexport function createOpenAIAdapter(httpClient: HttpClient): ProviderAdapter {\n let apiKey = \"\";\n let baseUrl = \"https://api.openai.com/v1\";\n let organization: string | undefined;\n let timeoutMs = 60_000;\n let maxRetries = 2;\n\n return {\n name: \"openai\",\n\n async initialize(config: ProviderAdapterConfig): Promise<void> {\n if (!config.apiKey) {\n throw new ProviderError(\"AUTH_FAILED\", \"API key is required\");\n }\n apiKey = config.apiKey;\n if (config.baseUrl) baseUrl = config.baseUrl;\n organization = config.organization;\n timeoutMs = config.timeoutMs;\n maxRetries = config.maxRetries;\n },\n\n async complete(request: ProviderRequest): Promise<ProviderResponse> {\n const body: Record<string, unknown> = {\n model: request.model,\n messages: request.messages.map((m) => {\n if (m.role === \"tool\") {\n return {\n role: \"tool\",\n content: m.content,\n tool_call_id: m.toolCallId,\n };\n }\n if (m.role === \"assistant\" && m.toolCalls && m.toolCalls.length > 0) {\n return {\n role: \"assistant\",\n content: m.content || null,\n tool_calls: m.toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\",\n function: {\n name: tc.name,\n arguments: JSON.stringify(tc.arguments),\n },\n })),\n };\n }\n return { role: m.role, content: m.content };\n }),\n temperature: request.params.temperature,\n max_tokens: request.params.maxTokens,\n };\n\n if (request.params.topP !== undefined)\n body.top_p = request.params.topP;\n if (request.params.seed !== undefined) body.seed = request.params.seed;\n if (request.params.stopSequences)\n body.stop = request.params.stopSequences;\n\n if (request.tools && request.tools.length > 0) {\n body.tools = request.tools.map((t) => ({\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n },\n }));\n if (request.toolChoice) {\n body.tool_choice = request.toolChoice;\n }\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n };\n if (organization) {\n headers[\"OpenAI-Organization\"] = organization;\n }\n\n const startTime = Date.now();\n\n const response = await withRetry(\n () =>\n httpClient.fetch(`${baseUrl}/chat/completions`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n timeoutMs,\n }),\n {\n maxRetries,\n shouldRetry: (error) =>\n error instanceof ProviderError && error.retryable,\n },\n );\n\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new ProviderError(\n \"PROVIDER_ERROR\",\n \"Malformed response body from OpenAI API\",\n response.status,\n response.status >= 500,\n );\n }\n const latencyMs = Date.now() - startTime;\n\n if (!response.ok) {\n throw mapError(response.status, json);\n }\n\n const parsed = json as {\n choices?: Array<{\n message?: {\n content?: string | null;\n tool_calls?: Array<{\n id: string;\n function: { name: string; arguments: string };\n }>;\n };\n finish_reason?: string;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n model?: string;\n };\n\n const choice = parsed.choices?.[0];\n const message = choice?.message;\n\n const toolCalls: ProviderToolCall[] = (message?.tool_calls ?? []).map(\n (tc) => {\n let args: Record<string, unknown>;\n try {\n args = JSON.parse(tc.function.arguments || \"{}\") as Record<\n string,\n unknown\n >;\n } catch {\n args = { _raw: tc.function.arguments };\n }\n return {\n id: tc.id,\n name: tc.function.name,\n arguments: args,\n };\n },\n );\n\n return {\n text: message?.content ?? \"\",\n toolCalls,\n usage: {\n inputTokens: parsed.usage?.prompt_tokens ?? 0,\n outputTokens: parsed.usage?.completion_tokens ?? 0,\n totalTokens: parsed.usage?.total_tokens ?? 0,\n },\n raw: json,\n latencyMs,\n modelId: parsed.model ?? request.model,\n finishReason: mapFinishReason(choice?.finish_reason),\n };\n },\n\n estimateCost(\n model: string,\n usage: ProviderResponse[\"usage\"],\n ): number | null {\n const pricing = OPENAI_PRICING[model];\n if (!pricing) return null;\n return (\n (usage.inputTokens / 1_000_000) * pricing.input +\n (usage.outputTokens / 1_000_000) * pricing.output\n );\n },\n\n supportsTools(model: string): boolean {\n return !model.startsWith(\"o1-\");\n },\n };\n}\n","import type {\n HttpClient,\n ProviderAdapter,\n ProviderAdapterConfig,\n ProviderRequest,\n ProviderResponse,\n ProviderToolCall,\n} from \"./interface.js\";\nimport { ProviderError } from \"./interface.js\";\nimport { withRetry } from \"./retry.js\";\n\nconst ANTHROPIC_PRICING: Record<string, { input: number; output: number }> = {\n \"claude-opus-4-5-20250929\": { input: 15.0, output: 75.0 },\n \"claude-sonnet-4-5-20250929\": { input: 3.0, output: 15.0 },\n \"claude-haiku-4-5-20251001\": { input: 0.8, output: 4.0 },\n};\n\nfunction mapFinishReason(\n reason: string | undefined,\n): ProviderResponse[\"finishReason\"] {\n switch (reason) {\n case \"end_turn\":\n return \"stop\";\n case \"max_tokens\":\n return \"max_tokens\";\n case \"tool_use\":\n return \"tool_calls\";\n default:\n return \"unknown\";\n }\n}\n\nfunction mapError(status: number, data: unknown): ProviderError {\n const message =\n typeof data === \"object\" && data !== null && \"error\" in data\n ? String(\n (data as { error: { message?: string } }).error?.message ??\n \"Unknown error\",\n )\n : \"Unknown error\";\n\n switch (status) {\n case 401:\n return new ProviderError(\"AUTH_FAILED\", message, status, false, data);\n case 429:\n return new ProviderError(\"RATE_LIMITED\", message, status, true, data);\n case 404:\n return new ProviderError(\"MODEL_NOT_FOUND\", message, status, false, data);\n case 400:\n if (message.toLowerCase().includes(\"context length\")) {\n return new ProviderError(\n \"CONTEXT_LENGTH\",\n message,\n status,\n false,\n data,\n );\n }\n return new ProviderError(\"PROVIDER_ERROR\", message, status, false, data);\n case 408:\n return new ProviderError(\"TIMEOUT\", message, status, true, data);\n default:\n return new ProviderError(\n status >= 500 ? \"PROVIDER_ERROR\" : \"UNKNOWN\",\n message,\n status,\n status >= 500,\n data,\n );\n }\n}\n\nexport function createAnthropicAdapter(\n httpClient: HttpClient,\n): ProviderAdapter {\n let apiKey = \"\";\n let baseUrl = \"https://api.anthropic.com\";\n let timeoutMs = 60_000;\n let maxRetries = 2;\n\n return {\n name: \"anthropic\",\n\n async initialize(config: ProviderAdapterConfig): Promise<void> {\n if (!config.apiKey) {\n throw new ProviderError(\"AUTH_FAILED\", \"API key is required\");\n }\n apiKey = config.apiKey;\n if (config.baseUrl) baseUrl = config.baseUrl;\n timeoutMs = config.timeoutMs;\n maxRetries = config.maxRetries;\n },\n\n async complete(request: ProviderRequest): Promise<ProviderResponse> {\n const systemMessage = request.messages.find((m) => m.role === \"system\");\n const nonSystemMessages = request.messages\n .filter((m) => m.role !== \"system\")\n .map((m) => {\n if (m.role === \"tool\") {\n return {\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n tool_use_id: m.toolCallId,\n content: m.content,\n },\n ],\n };\n }\n if (m.role === \"assistant\") {\n if (m.toolCalls && m.toolCalls.length > 0) {\n const contentBlocks: unknown[] = [];\n if (m.content) {\n contentBlocks.push({ type: \"text\", text: m.content });\n }\n for (const tc of m.toolCalls) {\n contentBlocks.push({\n type: \"tool_use\",\n id: tc.id,\n name: tc.name,\n input: tc.arguments,\n });\n }\n return { role: \"assistant\", content: contentBlocks };\n }\n return { role: \"assistant\", content: m.content };\n }\n return { role: \"user\", content: m.content };\n });\n\n const body: Record<string, unknown> = {\n model: request.model,\n max_tokens: request.params.maxTokens,\n messages: nonSystemMessages,\n };\n\n if (systemMessage) body.system = systemMessage.content;\n if (request.params.temperature !== undefined)\n body.temperature = request.params.temperature;\n if (request.params.topP !== undefined)\n body.top_p = request.params.topP;\n if (request.params.stopSequences)\n body.stop_sequences = request.params.stopSequences;\n\n if (request.tools && request.tools.length > 0) {\n body.tools = request.tools.map((t) => ({\n name: t.name,\n description: t.description ?? \"\",\n input_schema: t.parameters ?? { type: \"object\", properties: {} },\n }));\n if (request.toolChoice) {\n body.tool_choice =\n request.toolChoice === \"required\"\n ? { type: \"any\" }\n : { type: request.toolChoice };\n }\n }\n\n const startTime = Date.now();\n\n const response = await withRetry(\n () =>\n httpClient.fetch(`${baseUrl}/v1/messages`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-api-key\": apiKey,\n \"anthropic-version\": \"2023-06-01\",\n },\n body: JSON.stringify(body),\n timeoutMs,\n }),\n {\n maxRetries,\n shouldRetry: (error) =>\n error instanceof ProviderError && error.retryable,\n },\n );\n\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new ProviderError(\n \"PROVIDER_ERROR\",\n \"Malformed response body from Anthropic API\",\n response.status,\n response.status >= 500,\n );\n }\n const latencyMs = Date.now() - startTime;\n\n if (!response.ok) {\n throw mapError(response.status, json);\n }\n\n const parsed = json as {\n content?: Array<\n | { type: \"text\"; text: string }\n | { type: \"tool_use\"; id: string; name: string; input: Record<string, unknown> }\n >;\n usage?: { input_tokens?: number; output_tokens?: number };\n model?: string;\n stop_reason?: string;\n };\n\n let text = \"\";\n const toolCalls: ProviderToolCall[] = [];\n\n for (const block of parsed.content ?? []) {\n if (block.type === \"text\") {\n text += block.text;\n } else if (block.type === \"tool_use\") {\n toolCalls.push({\n id: block.id,\n name: block.name,\n arguments: block.input ?? {},\n });\n }\n }\n\n const inputTokens = parsed.usage?.input_tokens ?? 0;\n const outputTokens = parsed.usage?.output_tokens ?? 0;\n\n return {\n text,\n toolCalls,\n usage: {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n },\n raw: json,\n latencyMs,\n modelId: parsed.model ?? request.model,\n finishReason: mapFinishReason(parsed.stop_reason),\n };\n },\n\n estimateCost(\n model: string,\n usage: ProviderResponse[\"usage\"],\n ): number | null {\n const entry = Object.entries(ANTHROPIC_PRICING).find(\n ([key]) => model.includes(key) || key.includes(model),\n );\n if (!entry) return null;\n return (\n (usage.inputTokens / 1_000_000) * entry[1].input +\n (usage.outputTokens / 1_000_000) * entry[1].output\n );\n },\n\n supportsTools(_model: string): boolean {\n return true;\n },\n };\n}\n","import type {\n HttpClient,\n ProviderAdapter,\n ProviderAdapterConfig,\n ProviderRequest,\n ProviderResponse,\n ProviderToolCall,\n} from \"./interface.js\";\nimport { ProviderError } from \"./interface.js\";\nimport { withRetry } from \"./retry.js\";\n\nfunction mapFinishReason(\n doneReason: string | undefined,\n hasToolCalls: boolean,\n): ProviderResponse[\"finishReason\"] {\n if (hasToolCalls) return \"tool_calls\";\n switch (doneReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"max_tokens\";\n default:\n return \"unknown\";\n }\n}\n\nfunction mapError(status: number, data: unknown): ProviderError {\n const message =\n typeof data === \"object\" && data !== null && \"error\" in data\n ? String((data as { error: string }).error)\n : \"Unknown error\";\n\n switch (status) {\n case 404:\n return new ProviderError(\"MODEL_NOT_FOUND\", message, status, false, data);\n case 429:\n return new ProviderError(\"RATE_LIMITED\", message, status, true, data);\n case 408:\n return new ProviderError(\"TIMEOUT\", message, status, true, data);\n default:\n return new ProviderError(\n status >= 500 ? \"PROVIDER_ERROR\" : \"UNKNOWN\",\n message,\n status,\n status >= 500,\n data,\n );\n }\n}\n\nexport function createOllamaAdapter(httpClient: HttpClient): ProviderAdapter {\n let baseUrl = \"http://localhost:11434\";\n let timeoutMs = 60_000;\n let maxRetries = 2;\n\n return {\n name: \"ollama\",\n\n async initialize(config: ProviderAdapterConfig): Promise<void> {\n if (config.baseUrl) baseUrl = config.baseUrl;\n timeoutMs = config.timeoutMs;\n maxRetries = config.maxRetries;\n },\n\n async complete(request: ProviderRequest): Promise<ProviderResponse> {\n const messages = request.messages.map((m) => {\n if (m.role === \"tool\") {\n return {\n role: \"tool\" as const,\n content: m.content,\n };\n }\n if (m.role === \"assistant\" && m.toolCalls && m.toolCalls.length > 0) {\n return {\n role: \"assistant\" as const,\n content: m.content || \"\",\n tool_calls: m.toolCalls.map((tc) => ({\n function: {\n name: tc.name,\n arguments: tc.arguments,\n },\n })),\n };\n }\n return { role: m.role, content: m.content };\n });\n\n const body: Record<string, unknown> = {\n model: request.model,\n messages,\n stream: false,\n options: {\n temperature: request.params.temperature,\n num_predict: request.params.maxTokens,\n },\n };\n\n const options = body.options as Record<string, unknown>;\n if (request.params.topP !== undefined)\n options.top_p = request.params.topP;\n if (request.params.seed !== undefined) options.seed = request.params.seed;\n if (request.params.stopSequences)\n options.stop = request.params.stopSequences;\n\n if (request.tools && request.tools.length > 0) {\n body.tools = request.tools.map((t) => ({\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n },\n }));\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n const startTime = Date.now();\n\n const response = await withRetry(\n () =>\n httpClient.fetch(`${baseUrl}/api/chat`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n timeoutMs,\n }),\n {\n maxRetries,\n shouldRetry: (error) =>\n error instanceof ProviderError && error.retryable,\n },\n );\n\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new ProviderError(\n \"PROVIDER_ERROR\",\n \"Malformed response body from Ollama API\",\n response.status,\n response.status >= 500,\n );\n }\n const latencyMs = Date.now() - startTime;\n\n if (!response.ok) {\n throw mapError(response.status, json);\n }\n\n const parsed = json as {\n message?: {\n content?: string;\n tool_calls?: Array<{\n function: { name: string; arguments: Record<string, unknown> };\n }>;\n };\n done_reason?: string;\n prompt_eval_count?: number;\n eval_count?: number;\n model?: string;\n };\n\n const message = parsed.message;\n const rawToolCalls = message?.tool_calls ?? [];\n\n const toolCalls: ProviderToolCall[] = rawToolCalls.map((tc, index) => ({\n id: `ollama_call_${index}`,\n name: tc.function.name,\n arguments: tc.function.arguments ?? {},\n }));\n\n return {\n text: message?.content ?? \"\",\n toolCalls,\n usage: {\n inputTokens: parsed.prompt_eval_count ?? 0,\n outputTokens: parsed.eval_count ?? 0,\n totalTokens:\n (parsed.prompt_eval_count ?? 0) + (parsed.eval_count ?? 0),\n },\n raw: json,\n latencyMs,\n modelId: parsed.model ?? request.model,\n finishReason: mapFinishReason(\n parsed.done_reason,\n rawToolCalls.length > 0,\n ),\n };\n },\n\n estimateCost(): number | null {\n return 0;\n },\n\n supportsTools(): boolean {\n return true;\n },\n };\n}\n","import type {\n HttpClient,\n ProviderAdapter,\n ProviderAdapterConfig,\n ProviderRequest,\n ProviderResponse,\n ProviderToolCall,\n} from \"./interface.js\";\nimport { ProviderError } from \"./interface.js\";\nimport { withRetry } from \"./retry.js\";\n\nconst GEMINI_PRICING: Record<string, { input: number; output: number }> = {\n \"gemini-2.0-flash\": { input: 0.1, output: 0.4 },\n \"gemini-2.0-flash-lite\": { input: 0.075, output: 0.3 },\n \"gemini-1.5-pro\": { input: 1.25, output: 5.0 },\n \"gemini-1.5-flash\": { input: 0.075, output: 0.3 },\n \"gemini-1.5-flash-8b\": { input: 0.0375, output: 0.15 },\n};\n\nfunction mapFinishReason(\n reason: string | undefined,\n hasToolCalls: boolean,\n): ProviderResponse[\"finishReason\"] {\n if (hasToolCalls) return \"tool_calls\";\n switch (reason) {\n case \"STOP\":\n return \"stop\";\n case \"MAX_TOKENS\":\n return \"max_tokens\";\n case \"SAFETY\":\n return \"stop\";\n default:\n return \"unknown\";\n }\n}\n\nfunction mapError(status: number, data: unknown): ProviderError {\n const message =\n typeof data === \"object\" && data !== null && \"error\" in data\n ? String(\n (data as { error: { message?: string } }).error?.message ??\n \"Unknown error\",\n )\n : \"Unknown error\";\n\n switch (status) {\n case 400:\n if (message.toLowerCase().includes(\"api key\")) {\n return new ProviderError(\"AUTH_FAILED\", message, status, false, data);\n }\n return new ProviderError(\"PROVIDER_ERROR\", message, status, false, data);\n case 401:\n case 403:\n return new ProviderError(\"AUTH_FAILED\", message, status, false, data);\n case 429:\n return new ProviderError(\"RATE_LIMITED\", message, status, true, data);\n case 404:\n return new ProviderError(\"MODEL_NOT_FOUND\", message, status, false, data);\n case 408:\n return new ProviderError(\"TIMEOUT\", message, status, true, data);\n default:\n return new ProviderError(\n status >= 500 ? \"PROVIDER_ERROR\" : \"UNKNOWN\",\n message,\n status,\n status >= 500,\n data,\n );\n }\n}\n\nexport function createGeminiAdapter(httpClient: HttpClient): ProviderAdapter {\n let apiKey = \"\";\n let baseUrl = \"https://generativelanguage.googleapis.com/v1beta\";\n let timeoutMs = 60_000;\n let maxRetries = 2;\n\n return {\n name: \"gemini\",\n\n async initialize(config: ProviderAdapterConfig): Promise<void> {\n if (!config.apiKey) {\n throw new ProviderError(\"AUTH_FAILED\", \"API key is required\");\n }\n apiKey = config.apiKey;\n if (config.baseUrl) baseUrl = config.baseUrl;\n timeoutMs = config.timeoutMs;\n maxRetries = config.maxRetries;\n },\n\n async complete(request: ProviderRequest): Promise<ProviderResponse> {\n const contents: Array<{\n role: string;\n parts: Array<Record<string, unknown>>;\n }> = [];\n let systemInstruction: { parts: Array<{ text: string }> } | undefined;\n\n for (const m of request.messages) {\n if (m.role === \"system\") {\n systemInstruction = { parts: [{ text: m.content }] };\n continue;\n }\n\n if (m.role === \"tool\") {\n contents.push({\n role: \"function\",\n parts: [\n {\n functionResponse: {\n name: m.toolName ?? \"unknown\",\n response: parseToolContent(m.content),\n },\n },\n ],\n });\n continue;\n }\n\n if (m.role === \"assistant\" && m.toolCalls && m.toolCalls.length > 0) {\n const parts: Record<string, unknown>[] = [];\n if (m.content) parts.push({ text: m.content });\n for (const tc of m.toolCalls) {\n parts.push({\n functionCall: { name: tc.name, args: tc.arguments },\n });\n }\n contents.push({ role: \"model\", parts });\n continue;\n }\n\n const geminiRole = m.role === \"assistant\" ? \"model\" : \"user\";\n contents.push({\n role: geminiRole,\n parts: [{ text: m.content }],\n });\n }\n\n const body: Record<string, unknown> = {\n contents,\n generationConfig: {\n temperature: request.params.temperature,\n maxOutputTokens: request.params.maxTokens,\n },\n };\n\n if (systemInstruction) {\n body.systemInstruction = systemInstruction;\n }\n\n const generationConfig = body.generationConfig as Record<\n string,\n unknown\n >;\n if (request.params.topP !== undefined) {\n generationConfig.topP = request.params.topP;\n }\n if (request.params.stopSequences) {\n generationConfig.stopSequences = request.params.stopSequences;\n }\n\n if (request.tools && request.tools.length > 0) {\n body.tools = [\n {\n functionDeclarations: request.tools.map((t) => ({\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n })),\n },\n ];\n if (request.toolChoice) {\n body.toolConfig = mapToolChoice(request.toolChoice);\n }\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"x-goog-api-key\": apiKey,\n };\n\n const startTime = Date.now();\n\n const url = `${baseUrl}/models/${request.model}:generateContent`;\n\n const response = await withRetry(\n () =>\n httpClient.fetch(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n timeoutMs,\n }),\n {\n maxRetries,\n shouldRetry: (error) =>\n error instanceof ProviderError && error.retryable,\n },\n );\n\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new ProviderError(\n \"PROVIDER_ERROR\",\n \"Malformed response body from Gemini API\",\n response.status,\n response.status >= 500,\n );\n }\n const latencyMs = Date.now() - startTime;\n\n if (!response.ok) {\n throw mapError(response.status, json);\n }\n\n const parsed = json as {\n candidates?: Array<{\n content?: {\n parts?: Array<{\n text?: string;\n functionCall?: { name: string; args: Record<string, unknown> };\n }>;\n };\n finishReason?: string;\n }>;\n usageMetadata?: {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n totalTokenCount?: number;\n };\n modelVersion?: string;\n };\n\n const candidate = parsed.candidates?.[0];\n const parts = candidate?.content?.parts ?? [];\n\n let text = \"\";\n const toolCalls: ProviderToolCall[] = [];\n let toolCallIndex = 0;\n\n for (const part of parts) {\n if (part.text !== undefined) {\n text += part.text;\n }\n if (part.functionCall) {\n toolCalls.push({\n id: `gemini_call_${toolCallIndex}`,\n name: part.functionCall.name,\n arguments: part.functionCall.args ?? {},\n });\n toolCallIndex++;\n }\n }\n\n return {\n text,\n toolCalls,\n usage: {\n inputTokens: parsed.usageMetadata?.promptTokenCount ?? 0,\n outputTokens: parsed.usageMetadata?.candidatesTokenCount ?? 0,\n totalTokens: parsed.usageMetadata?.totalTokenCount ?? 0,\n },\n raw: json,\n latencyMs,\n modelId: parsed.modelVersion ?? request.model,\n finishReason: mapFinishReason(\n candidate?.finishReason,\n toolCalls.length > 0,\n ),\n };\n },\n\n estimateCost(\n model: string,\n usage: ProviderResponse[\"usage\"],\n ): number | null {\n const pricing = GEMINI_PRICING[model];\n if (!pricing) return null;\n return (\n (usage.inputTokens / 1_000_000) * pricing.input +\n (usage.outputTokens / 1_000_000) * pricing.output\n );\n },\n\n supportsTools(): boolean {\n return true;\n },\n };\n}\n\nfunction parseToolContent(content: string): unknown {\n try {\n return JSON.parse(content);\n } catch {\n return { result: content };\n }\n}\n\nfunction mapToolChoice(\n choice: \"auto\" | \"required\" | \"none\",\n): Record<string, unknown> {\n switch (choice) {\n case \"auto\":\n return { functionCallingConfig: { mode: \"AUTO\" } };\n case \"required\":\n return { functionCallingConfig: { mode: \"ANY\" } };\n case \"none\":\n return { functionCallingConfig: { mode: \"NONE\" } };\n }\n}\n","import type {\n HttpClient,\n ProviderAdapter,\n ProviderAdapterConfig,\n ProviderRequest,\n ProviderResponse,\n ProviderToolCall,\n} from \"./interface.js\";\nimport { ProviderError } from \"./interface.js\";\nimport { withRetry } from \"./retry.js\";\n\nfunction mapFinishReason(\n reason: string | undefined,\n): ProviderResponse[\"finishReason\"] {\n switch (reason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"max_tokens\";\n case \"tool_calls\":\n return \"tool_calls\";\n default:\n return \"unknown\";\n }\n}\n\nfunction mapError(status: number, data: unknown): ProviderError {\n const message =\n typeof data === \"object\" && data !== null && \"message\" in data\n ? String((data as { message?: string }).message ?? \"Unknown error\")\n : typeof data === \"object\" && data !== null && \"error\" in data\n ? String(\n (data as { error: { message?: string } }).error?.message ??\n \"Unknown error\",\n )\n : \"Unknown error\";\n\n switch (status) {\n case 401:\n return new ProviderError(\"AUTH_FAILED\", message, status, false, data);\n case 429:\n return new ProviderError(\"RATE_LIMITED\", message, status, true, data);\n case 404:\n return new ProviderError(\"MODEL_NOT_FOUND\", message, status, false, data);\n case 400:\n if (message.toLowerCase().includes(\"context length\")) {\n return new ProviderError(\n \"CONTEXT_LENGTH\",\n message,\n status,\n false,\n data,\n );\n }\n return new ProviderError(\"PROVIDER_ERROR\", message, status, false, data);\n case 408:\n return new ProviderError(\"TIMEOUT\", message, status, true, data);\n default:\n return new ProviderError(\n status >= 500 ? \"PROVIDER_ERROR\" : \"UNKNOWN\",\n message,\n status,\n status >= 500,\n data,\n );\n }\n}\n\nexport function createMistralAdapter(httpClient: HttpClient): ProviderAdapter {\n let apiKey = \"\";\n let baseUrl = \"https://api.mistral.ai/v1\";\n let timeoutMs = 60_000;\n let maxRetries = 2;\n\n return {\n name: \"mistral\",\n\n async initialize(config: ProviderAdapterConfig): Promise<void> {\n if (!config.apiKey) {\n throw new ProviderError(\"AUTH_FAILED\", \"API key is required\");\n }\n apiKey = config.apiKey;\n if (config.baseUrl) baseUrl = config.baseUrl;\n timeoutMs = config.timeoutMs;\n maxRetries = config.maxRetries;\n },\n\n async complete(request: ProviderRequest): Promise<ProviderResponse> {\n const body: Record<string, unknown> = {\n model: request.model,\n messages: request.messages.map((m) => {\n if (m.role === \"tool\") {\n return {\n role: \"tool\",\n content: m.content,\n tool_call_id: m.toolCallId,\n };\n }\n if (m.role === \"assistant\" && m.toolCalls && m.toolCalls.length > 0) {\n return {\n role: \"assistant\",\n content: m.content || null,\n tool_calls: m.toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\",\n function: {\n name: tc.name,\n arguments: JSON.stringify(tc.arguments),\n },\n })),\n };\n }\n return { role: m.role, content: m.content };\n }),\n temperature: request.params.temperature,\n max_tokens: request.params.maxTokens,\n };\n\n if (request.params.topP !== undefined)\n body.top_p = request.params.topP;\n if (request.params.stopSequences)\n body.stop = request.params.stopSequences;\n\n if (request.tools && request.tools.length > 0) {\n body.tools = request.tools.map((t) => ({\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n },\n }));\n if (request.toolChoice) {\n body.tool_choice = request.toolChoice;\n }\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n };\n\n const startTime = Date.now();\n\n const response = await withRetry(\n () =>\n httpClient.fetch(`${baseUrl}/chat/completions`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n timeoutMs,\n }),\n {\n maxRetries,\n shouldRetry: (error) =>\n error instanceof ProviderError && error.retryable,\n },\n );\n\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new ProviderError(\n \"PROVIDER_ERROR\",\n \"Malformed response body from Mistral API\",\n response.status,\n response.status >= 500,\n );\n }\n const latencyMs = Date.now() - startTime;\n\n if (!response.ok) {\n throw mapError(response.status, json);\n }\n\n const parsed = json as {\n choices?: Array<{\n message?: {\n content?: string | null;\n tool_calls?: Array<{\n id: string;\n function: { name: string; arguments: string };\n }>;\n };\n finish_reason?: string;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n model?: string;\n };\n\n const choice = parsed.choices?.[0];\n const message = choice?.message;\n\n const toolCalls: ProviderToolCall[] = (message?.tool_calls ?? []).map(\n (tc) => {\n let args: Record<string, unknown>;\n try {\n args = JSON.parse(tc.function.arguments || \"{}\") as Record<\n string,\n unknown\n >;\n } catch {\n args = { _raw: tc.function.arguments };\n }\n return {\n id: tc.id,\n name: tc.function.name,\n arguments: args,\n };\n },\n );\n\n return {\n text: message?.content ?? \"\",\n toolCalls,\n usage: {\n inputTokens: parsed.usage?.prompt_tokens ?? 0,\n outputTokens: parsed.usage?.completion_tokens ?? 0,\n totalTokens: parsed.usage?.total_tokens ?? 0,\n },\n raw: json,\n latencyMs,\n modelId: parsed.model ?? request.model,\n finishReason: mapFinishReason(choice?.finish_reason),\n };\n },\n\n estimateCost(\n _model: string,\n _usage: ProviderResponse[\"usage\"],\n ): number | null {\n // Mistral does not have a public pricing API; return null\n return null;\n },\n\n supportsTools(_model: string): boolean {\n // All current Mistral models support function calling\n return true;\n },\n };\n}\n","import type {\n HttpClient,\n ProviderAdapter,\n ProviderAdapterConfig,\n ProviderRequest,\n ProviderResponse,\n ProviderToolCall,\n} from \"./interface.js\";\nimport { ProviderError } from \"./interface.js\";\nimport { withRetry } from \"./retry.js\";\n\nfunction mapFinishReason(\n reason: string | undefined,\n): ProviderResponse[\"finishReason\"] {\n switch (reason) {\n case \"COMPLETE\":\n return \"stop\";\n case \"MAX_TOKENS\":\n return \"max_tokens\";\n case \"TOOL_CALL\":\n return \"tool_calls\";\n default:\n return \"unknown\";\n }\n}\n\nfunction mapError(status: number, data: unknown): ProviderError {\n const message =\n typeof data === \"object\" && data !== null && \"message\" in data\n ? String((data as { message?: string }).message ?? \"Unknown error\")\n : \"Unknown error\";\n\n switch (status) {\n case 401:\n return new ProviderError(\"AUTH_FAILED\", message, status, false, data);\n case 429:\n return new ProviderError(\"RATE_LIMITED\", message, status, true, data);\n case 404:\n return new ProviderError(\"MODEL_NOT_FOUND\", message, status, false, data);\n case 400:\n if (message.toLowerCase().includes(\"context length\")) {\n return new ProviderError(\n \"CONTEXT_LENGTH\",\n message,\n status,\n false,\n data,\n );\n }\n return new ProviderError(\"PROVIDER_ERROR\", message, status, false, data);\n case 408:\n return new ProviderError(\"TIMEOUT\", message, status, true, data);\n default:\n return new ProviderError(\n status >= 500 ? \"PROVIDER_ERROR\" : \"UNKNOWN\",\n message,\n status,\n status >= 500,\n data,\n );\n }\n}\n\nexport function createCohereAdapter(httpClient: HttpClient): ProviderAdapter {\n let apiKey = \"\";\n let baseUrl = \"https://api.cohere.com\";\n let timeoutMs = 60_000;\n let maxRetries = 2;\n\n return {\n name: \"cohere\",\n\n async initialize(config: ProviderAdapterConfig): Promise<void> {\n if (!config.apiKey) {\n throw new ProviderError(\"AUTH_FAILED\", \"API key is required\");\n }\n apiKey = config.apiKey;\n if (config.baseUrl) baseUrl = config.baseUrl;\n timeoutMs = config.timeoutMs;\n maxRetries = config.maxRetries;\n },\n\n async complete(request: ProviderRequest): Promise<ProviderResponse> {\n const body: Record<string, unknown> = {\n model: request.model,\n messages: request.messages.map((m) => {\n if (m.role === \"tool\") {\n return {\n role: \"tool\",\n content: m.content,\n tool_call_id: m.toolCallId,\n };\n }\n if (m.role === \"assistant\" && m.toolCalls && m.toolCalls.length > 0) {\n return {\n role: \"assistant\",\n content: m.content || null,\n tool_calls: m.toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\",\n function: {\n name: tc.name,\n arguments: JSON.stringify(tc.arguments),\n },\n })),\n };\n }\n return { role: m.role, content: m.content };\n }),\n temperature: request.params.temperature,\n max_tokens: request.params.maxTokens,\n };\n\n if (request.params.topP !== undefined)\n body.p = request.params.topP;\n if (request.params.stopSequences)\n body.stop_sequences = request.params.stopSequences;\n\n if (request.tools && request.tools.length > 0) {\n body.tools = request.tools.map((t) => ({\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n },\n }));\n if (request.toolChoice) {\n body.tool_choice = request.toolChoice;\n }\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n };\n\n const startTime = Date.now();\n\n const response = await withRetry(\n () =>\n httpClient.fetch(`${baseUrl}/v2/chat`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n timeoutMs,\n }),\n {\n maxRetries,\n shouldRetry: (error) =>\n error instanceof ProviderError && error.retryable,\n },\n );\n\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new ProviderError(\n \"PROVIDER_ERROR\",\n \"Malformed response body from Cohere API\",\n response.status,\n response.status >= 500,\n );\n }\n const latencyMs = Date.now() - startTime;\n\n if (!response.ok) {\n throw mapError(response.status, json);\n }\n\n const parsed = json as {\n message?: {\n role?: string;\n content?: Array<{ type: string; text: string }>;\n tool_calls?: Array<{\n id: string;\n type: string;\n function: { name: string; arguments: string };\n }>;\n };\n finish_reason?: string;\n usage?: {\n tokens?: {\n input_tokens?: number;\n output_tokens?: number;\n };\n };\n model?: string;\n };\n\n const text =\n parsed.message?.content\n ?.filter((c) => c.type === \"text\")\n .map((c) => c.text)\n .join(\"\") ?? \"\";\n\n const toolCalls: ProviderToolCall[] = (\n parsed.message?.tool_calls ?? []\n ).map((tc) => {\n let args: Record<string, unknown>;\n try {\n args = JSON.parse(tc.function.arguments || \"{}\") as Record<\n string,\n unknown\n >;\n } catch {\n args = { _raw: tc.function.arguments };\n }\n return {\n id: tc.id,\n name: tc.function.name,\n arguments: args,\n };\n });\n\n const inputTokens = parsed.usage?.tokens?.input_tokens ?? 0;\n const outputTokens = parsed.usage?.tokens?.output_tokens ?? 0;\n\n return {\n text,\n toolCalls,\n usage: {\n inputTokens,\n outputTokens,\n totalTokens: inputTokens + outputTokens,\n },\n raw: json,\n latencyMs,\n modelId: parsed.model ?? request.model,\n finishReason: mapFinishReason(parsed.finish_reason),\n };\n },\n\n estimateCost(\n _model: string,\n _usage: ProviderResponse[\"usage\"],\n ): number | null {\n // Cohere pricing varies by model; return null for now\n return null;\n },\n\n supportsTools(_model: string): boolean {\n // Cohere v2 API supports tools for all current models\n return true;\n },\n };\n}\n","import type { HttpClient, ProviderAdapter } from \"./interface.js\";\nimport { createOpenAIAdapter } from \"./openai.js\";\nimport { createAnthropicAdapter } from \"./anthropic.js\";\nimport { createOllamaAdapter } from \"./ollama.js\";\nimport { createGeminiAdapter } from \"./gemini.js\";\nimport { createMistralAdapter } from \"./mistral.js\";\nimport { createCohereAdapter } from \"./cohere.js\";\n\nconst PROVIDER_FACTORIES: Record<string, (httpClient: HttpClient) => ProviderAdapter> = {\n openai: createOpenAIAdapter,\n anthropic: createAnthropicAdapter,\n ollama: createOllamaAdapter,\n gemini: createGeminiAdapter,\n mistral: createMistralAdapter,\n cohere: createCohereAdapter,\n};\n\nexport function createProvider(\n name: string,\n httpClient: HttpClient,\n): ProviderAdapter {\n const factory = PROVIDER_FACTORIES[name];\n if (!factory) {\n const supported = Object.keys(PROVIDER_FACTORIES).join(\", \");\n throw new Error(`Unknown provider: \"${name}\". Supported providers: ${supported}`);\n }\n return factory(httpClient);\n}\n","import type {\n ProviderAdapter,\n ProviderRequest,\n ProviderMessage,\n ProviderToolCall,\n ConversationResult,\n ConversationTurn,\n} from \"./interface.js\";\nimport type { ToolSimulation } from \"../types/config.js\";\n\nconst DEFAULT_MAX_TURNS = 10;\n\nexport async function runConversation(\n adapter: ProviderAdapter,\n initialRequest: ProviderRequest,\n toolSimulations: ToolSimulation[],\n options?: { maxTurns?: number },\n): Promise<ConversationResult> {\n const maxTurns = options?.maxTurns ?? DEFAULT_MAX_TURNS;\n const turns: ConversationTurn[] = [];\n const allToolCalls: ProviderToolCall[] = [];\n let messages: ProviderMessage[] = [...initialRequest.messages];\n const totalUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n let totalLatencyMs = 0;\n\n for (let turn = 0; turn < maxTurns; turn++) {\n const request: ProviderRequest = {\n ...initialRequest,\n messages,\n };\n\n const response = await adapter.complete(request);\n\n turns.push({ request, response });\n totalUsage.inputTokens += response.usage.inputTokens;\n totalUsage.outputTokens += response.usage.outputTokens;\n totalUsage.totalTokens += response.usage.totalTokens;\n totalLatencyMs += response.latencyMs;\n\n if (response.toolCalls.length === 0) {\n return {\n turns,\n finalText: response.text,\n allToolCalls,\n totalUsage,\n totalLatencyMs,\n };\n }\n\n allToolCalls.push(...response.toolCalls);\n\n messages = [\n ...messages,\n { role: \"assistant\", content: response.text, toolCalls: response.toolCalls },\n ];\n\n for (const toolCall of response.toolCalls) {\n const simulation = toolSimulations.find((s) => s.name === toolCall.name);\n let toolResponse: unknown;\n\n if (simulation) {\n toolResponse = resolveToolResponse(simulation, toolCall.arguments);\n } else {\n toolResponse = { error: `Tool \"${toolCall.name}\" not simulated` };\n }\n\n messages.push({\n role: \"tool\",\n content: JSON.stringify(toolResponse),\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n });\n }\n }\n\n const lastTurn = turns[turns.length - 1];\n const lastResponse = lastTurn?.response ?? {\n text: \"\",\n toolCalls: [],\n usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n raw: null,\n latencyMs: 0,\n modelId: initialRequest.model,\n finishReason: \"unknown\" as const,\n };\n return {\n turns,\n finalText: lastResponse.text,\n allToolCalls,\n totalUsage,\n totalLatencyMs,\n };\n}\n\nfunction resolveToolResponse(\n simulation: ToolSimulation,\n args: Record<string, unknown>,\n): unknown {\n if (simulation.responses) {\n for (const resp of simulation.responses) {\n if (matchArgs(resp.when, args)) {\n return resp.then;\n }\n }\n }\n\n if (simulation.defaultResponse !== undefined) {\n return simulation.defaultResponse;\n }\n\n return { error: \"No matching simulation response\" };\n}\n\nfunction matchArgs(\n expected: Record<string, unknown>,\n actual: Record<string, unknown>,\n): boolean {\n for (const [key, value] of Object.entries(expected)) {\n if (JSON.stringify(actual[key]) !== JSON.stringify(value)) {\n return false;\n }\n }\n return true;\n}\n","import { z } from \"zod\";\nimport type { Result, KindlmError } from \"../types/result.js\";\nimport { ok, err } from \"../types/result.js\";\nimport { TraceConfigSchema } from \"../trace/types.js\";\n\n// ============================================================\n// Primitive / Reusable Schemas\n// ============================================================\n\nconst NonEmptyString = z.string().min(1, \"Must not be empty\");\n\nconst Temperature = z.number().min(0).max(2).default(0.2);\n\nconst Score01 = z.number().min(0).max(1);\n\nconst RegexPattern = z.string().refine(\n (val) => {\n try {\n new RegExp(val);\n return true;\n } catch {\n return false;\n }\n },\n { message: \"Must be a valid regex pattern\" },\n);\n\n// ============================================================\n// Provider Schemas\n// ============================================================\n\nconst ProviderConfigSchema = z.object({\n apiKeyEnv: NonEmptyString.describe(\n \"Environment variable name containing the API key. Never a raw key.\",\n ),\n baseUrl: z\n .string()\n .url()\n .optional()\n .describe(\n \"Custom base URL for API-compatible proxies (e.g., Azure OpenAI, LiteLLM)\",\n ),\n organization: z\n .string()\n .optional()\n .describe(\"Organization ID (OpenAI-specific)\"),\n});\n\nconst OllamaProviderConfigSchema = z.object({\n apiKeyEnv: z\n .string()\n .min(1)\n .optional()\n .describe(\n \"Environment variable name containing the API key. Optional for Ollama (local).\",\n ),\n baseUrl: z\n .string()\n .url()\n .optional()\n .describe(\n \"Ollama server URL. Defaults to http://localhost:11434.\",\n ),\n});\n\nconst ProvidersSchema = z\n .object({\n openai: ProviderConfigSchema.optional(),\n anthropic: ProviderConfigSchema.optional(),\n ollama: OllamaProviderConfigSchema.optional(),\n gemini: ProviderConfigSchema.optional(),\n mistral: ProviderConfigSchema.optional(),\n cohere: ProviderConfigSchema.optional(),\n })\n .refine(\n (providers) =>\n Object.keys(providers).some(\n (k) => providers[k as keyof typeof providers] !== undefined,\n ),\n { message: \"At least one provider must be configured\" },\n );\n\n// ============================================================\n// Model Schema\n// ============================================================\n\nconst ModelParamsSchema = z.object({\n temperature: Temperature,\n maxTokens: z.number().int().min(1).max(128000).default(1024),\n topP: z.number().min(0).max(1).optional(),\n stopSequences: z.array(z.string()).optional(),\n seed: z\n .number()\n .int()\n .optional()\n .describe(\"Seed for reproducibility (provider-dependent support)\"),\n});\n\nconst ModelSchema = z.object({\n id: NonEmptyString.describe(\n \"Unique identifier for this model config, referenced in reports\",\n ),\n provider: z\n .enum([\"openai\", \"anthropic\", \"ollama\", \"gemini\", \"mistral\", \"cohere\"])\n .describe(\"Must match a key in the providers section\"),\n model: NonEmptyString.describe(\n \"Model name as the provider expects it (e.g., 'gpt-4o', 'claude-sonnet-4-5-20250929')\",\n ),\n params: ModelParamsSchema.default({}),\n});\n\n// ============================================================\n// Prompt Schema\n// ============================================================\n\nconst PromptSchema = z.object({\n system: z\n .string()\n .optional()\n .describe(\n \"System prompt template. Supports {{variable}} interpolation.\",\n ),\n user: NonEmptyString.describe(\n \"User prompt template. Supports {{variable}} interpolation.\",\n ),\n assistant: z\n .string()\n .optional()\n .describe(\"Prefill for assistant response (Anthropic-specific)\"),\n});\n\n// ============================================================\n// Assertion Schemas\n// ============================================================\n\nconst OutputExpectSchema = z\n .object({\n format: z.enum([\"text\", \"json\"]).default(\"text\"),\n schemaFile: z\n .string()\n .optional()\n .describe(\n \"Path to JSON Schema file (relative to config file). Required if format is 'json'.\",\n ),\n contains: z\n .array(z.string())\n .optional()\n .describe(\"Output must contain all of these substrings\"),\n notContains: z\n .array(z.string())\n .optional()\n .describe(\"Output must not contain any of these substrings\"),\n maxLength: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\"Maximum character length of the output\"),\n })\n .refine(\n (output) => {\n if (output.format === \"json\" && !output.schemaFile) {\n return false;\n }\n return true;\n },\n { message: \"schemaFile is required when format is 'json'\" },\n );\n\nconst PIIGuardrailSchema = z.object({\n enabled: z.boolean().default(true),\n denyPatterns: z\n .array(RegexPattern)\n .default([\n \"\\\\b\\\\d{3}-\\\\d{2}-\\\\d{4}\\\\b\",\n \"\\\\b\\\\d{4}[\\\\s-]?\\\\d{4}[\\\\s-]?\\\\d{4}[\\\\s-]?\\\\d{4}\\\\b\",\n \"\\\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Z|a-z]{2,}\\\\b\",\n ])\n .describe(\n \"Regex patterns that must NOT appear in output. Defaults include SSN, credit card, email.\",\n ),\n customPatterns: z\n .array(\n z.object({\n name: NonEmptyString,\n pattern: RegexPattern,\n }),\n )\n .optional()\n .describe(\"Named custom PII patterns for reporting clarity\"),\n});\n\nconst KeywordGuardrailSchema = z.object({\n deny: z\n .array(z.string())\n .default([])\n .describe(\n \"Words/phrases that must NOT appear in output (case-insensitive)\",\n ),\n allow: z\n .array(z.string())\n .optional()\n .describe(\n \"If set, output MUST contain at least one of these words/phrases\",\n ),\n});\n\nconst JudgeCriterionSchema = z.object({\n criteria: NonEmptyString.describe(\n \"Natural language description of what to evaluate (e.g., 'Response is empathetic and professional')\",\n ),\n minScore: Score01.default(0.7).describe(\n \"Minimum score (0-1) for this criterion to pass\",\n ),\n model: z\n .string()\n .optional()\n .describe(\n \"Override judge model for this criterion. Defaults to first model in models list.\",\n ),\n rubric: z\n .string()\n .optional()\n .describe(\n \"Detailed rubric for the judge. If omitted, a default rubric is generated from criteria.\",\n ),\n});\n\nconst ToolCallExpectSchema = z.object({\n tool: NonEmptyString.describe(\"Expected tool/function name\"),\n shouldNotCall: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"If true, assert this tool was NOT called\"),\n argsMatch: z\n .record(z.unknown())\n .optional()\n .describe(\n \"Key-value pairs that must be present in the tool call arguments (partial match)\",\n ),\n argsSchema: z\n .string()\n .optional()\n .describe(\n \"Path to JSON Schema file to validate the tool call arguments\",\n ),\n order: z\n .number()\n .int()\n .min(0)\n .optional()\n .describe(\n \"Expected position in the sequence of tool calls (0-indexed)\",\n ),\n responseContains: z\n .string()\n .optional()\n .describe(\n \"Assert the simulated tool response contains this substring\",\n ),\n});\n\nconst BaselineDriftSchema = z.object({\n maxScore: Score01.default(0.15).describe(\n \"Maximum drift score (0-1). Higher = more drift allowed. Fail if exceeded.\",\n ),\n method: z\n .enum([\"judge\", \"embedding\", \"field-diff\"])\n .default(\"judge\")\n .describe(\n \"Drift detection method. 'judge' uses LLM comparison, 'embedding' uses cosine similarity, 'field-diff' compares JSON fields.\",\n ),\n fields: z\n .array(z.string())\n .optional()\n .describe(\n \"For field-diff method: JSON paths to compare (e.g., ['response.action', 'response.message'])\",\n ),\n});\n\nconst GuardrailsSchema = z.object({\n pii: PIIGuardrailSchema.optional(),\n keywords: KeywordGuardrailSchema.optional(),\n});\n\nconst ExpectSchema = z.object({\n output: OutputExpectSchema.optional(),\n guardrails: GuardrailsSchema.optional(),\n judge: z\n .array(JudgeCriterionSchema)\n .optional()\n .describe(\n \"LLM-as-judge evaluations. Each criterion is scored independently.\",\n ),\n toolCalls: z\n .array(ToolCallExpectSchema)\n .optional()\n .describe(\"Expected tool/function calls in the model response\"),\n baseline: z\n .object({\n drift: BaselineDriftSchema.optional(),\n })\n .optional(),\n});\n\n// ============================================================\n// Tool Simulation Schema (for agent testing)\n// ============================================================\n\nconst ToolSimulationSchema = z.object({\n name: NonEmptyString.describe(\"Tool/function name as the model sees it\"),\n description: z\n .string()\n .optional()\n .describe(\"Tool description for documentation\"),\n parameters: z\n .record(z.unknown())\n .optional()\n .describe(\"JSON Schema for the tool's parameters\"),\n responses: z\n .array(\n z.object({\n when: z\n .record(z.unknown())\n .describe(\n \"Condition: match tool call arguments (partial match)\",\n ),\n then: z.unknown().describe(\n \"Simulated response to return when condition matches\",\n ),\n }),\n )\n .optional()\n .describe(\"Simulated responses based on argument matching\"),\n defaultResponse: z\n .unknown()\n .optional()\n .describe(\"Response when no 'when' condition matches\"),\n});\n\n// ============================================================\n// Test Case Schema\n// ============================================================\n\nconst TestCaseSchema = z.object({\n name: NonEmptyString.describe(\n \"Unique test case name within the suite. Used in reports and JUnit output.\",\n ),\n prompt: NonEmptyString.optional().describe(\n \"Reference to a key in the prompts section. Exactly one of prompt or command must be set.\",\n ),\n command: NonEmptyString.optional().describe(\n \"Shell command to execute. Stdout is captured and assertions run against it. Exactly one of prompt or command must be set.\",\n ),\n vars: z\n .record(z.string())\n .default({})\n .describe(\"Variables to interpolate into the prompt template or command\"),\n models: z\n .array(z.string())\n .optional()\n .describe(\n \"Override: run this test only against these model IDs. Defaults to all models. Ignored for command tests.\",\n ),\n repeat: z\n .number()\n .int()\n .min(1)\n .optional()\n .describe(\n \"Override: number of repeat runs for this specific test case\",\n ),\n tools: z\n .array(ToolSimulationSchema)\n .optional()\n .describe(\n \"Simulated tools available to the model for this test case\",\n ),\n expect: ExpectSchema.describe(\n \"Assertions to evaluate against the model output\",\n ),\n tags: z\n .array(z.string())\n .optional()\n .describe(\n \"Tags for filtering test cases in CLI (e.g., --tags regression)\",\n ),\n skip: z\n .boolean()\n .optional()\n .default(false)\n .describe(\"Skip this test case during execution\"),\n}).refine(\n (test) => {\n const hasPrompt = test.prompt !== undefined;\n const hasCommand = test.command !== undefined;\n return (hasPrompt || hasCommand) && !(hasPrompt && hasCommand);\n },\n { message: \"Exactly one of 'prompt' or 'command' must be set on each test case\" },\n);\n\n// ============================================================\n// Gates Schema\n// ============================================================\n\nconst GatesSchema = z.object({\n passRateMin: Score01.default(0.95).describe(\n \"Minimum overall pass rate (0-1). Computed after repeats and aggregation.\",\n ),\n schemaFailuresMax: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe(\n \"Maximum allowed schema validation failures across entire suite\",\n ),\n judgeAvgMin: Score01.optional().describe(\n \"Minimum average LLM-as-judge score across all criteria and test cases\",\n ),\n driftScoreMax: Score01.optional().describe(\n \"Maximum allowed drift score against active baseline\",\n ),\n piiFailuresMax: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe(\"Maximum allowed PII detection failures\"),\n keywordFailuresMax: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe(\"Maximum allowed keyword guardrail failures\"),\n costMaxUsd: z\n .number()\n .positive()\n .optional()\n .describe(\n \"Maximum total cost in USD for the entire run. Aborts if exceeded mid-run.\",\n ),\n latencyMaxMs: z\n .number()\n .positive()\n .optional()\n .describe(\n \"Maximum average latency in ms. Fails gate if exceeded.\",\n ),\n deterministicPassRate: Score01.optional().describe(\n \"Minimum pass rate for deterministic assertions only (tool_called, schema, pii, keywords, etc.)\",\n ),\n probabilisticPassRate: Score01.optional().describe(\n \"Minimum pass rate for probabilistic assertions only (judge, drift)\",\n ),\n});\n\n// ============================================================\n// Compliance Schema\n// ============================================================\n\nconst ComplianceSchema = z.object({\n enabled: z.boolean().default(false),\n framework: z.enum([\"eu-ai-act\", \"custom\"]).default(\"eu-ai-act\"),\n outputDir: z.string().default(\"./compliance-reports\"),\n metadata: z\n .object({\n systemName: z\n .string()\n .optional()\n .describe(\"Name of the AI system being tested\"),\n systemVersion: z\n .string()\n .optional()\n .describe(\"Version of the AI system\"),\n riskLevel: z.enum([\"high\", \"limited\", \"minimal\"]).optional(),\n operator: z\n .string()\n .optional()\n .describe(\"Organization operating the AI system\"),\n intendedPurpose: z\n .string()\n .optional()\n .describe(\n \"Documented intended purpose of the AI system\",\n ),\n dataGovernanceNotes: z.string().optional(),\n })\n .optional(),\n});\n\n// ============================================================\n// Upload Schema\n// ============================================================\n\nconst UploadSchema = z.object({\n enabled: z.boolean().default(false),\n includeArtifacts: z\n .boolean()\n .default(false)\n .describe(\n \"Upload raw prompt inputs and model outputs. Disabled by default for privacy.\",\n ),\n redactPatterns: z\n .array(RegexPattern)\n .optional()\n .describe(\n \"Patterns to redact from artifacts before upload (applied on top of PII guardrails)\",\n ),\n apiUrl: z\n .string()\n .url()\n .default(\"https://api.kindlm.com/v1\")\n .describe(\n \"Cloud API URL. Override for self-hosted deployments.\",\n ),\n});\n\n// ============================================================\n// Suite Schema\n// ============================================================\n\nconst SuiteSchema = z.object({\n name: NonEmptyString,\n description: z.string().optional(),\n tags: z.array(z.string()).optional(),\n});\n\n// ============================================================\n// Top-Level Config Schema\n// ============================================================\n\nexport const KindLMConfigSchema = z.object({\n kindlm: z.literal(1).describe(\"Config schema version. Must be 1.\"),\n project: NonEmptyString.describe(\n \"Project identifier for cloud upload and report grouping\",\n ),\n suite: SuiteSchema,\n providers: ProvidersSchema,\n models: z\n .array(ModelSchema)\n .min(1, \"At least one model must be configured\"),\n prompts: z\n .record(PromptSchema)\n .refine((prompts) => Object.keys(prompts).length > 0, {\n message: \"At least one prompt must be defined\",\n }),\n tests: z\n .array(TestCaseSchema)\n .min(1, \"At least one test case must be defined\"),\n gates: GatesSchema.default({}),\n compliance: ComplianceSchema.optional(),\n trace: TraceConfigSchema.optional().describe(\n \"OpenTelemetry trace ingestion configuration for the 'kindlm trace' command\",\n ),\n upload: UploadSchema.default({}),\n defaults: z\n .object({\n repeat: z\n .number()\n .int()\n .min(1)\n .default(1)\n .describe(\"Default repeat count per test case\"),\n concurrency: z\n .number()\n .int()\n .min(1)\n .max(32)\n .default(4)\n .describe(\"Default concurrency for test execution\"),\n timeoutMs: z\n .number()\n .int()\n .min(1000)\n .default(60000)\n .describe(\"Default timeout per provider call in ms\"),\n judgeModel: z\n .string()\n .optional()\n .describe(\n \"Default model ID for LLM-as-judge assertions. Must reference a configured model.\",\n ),\n })\n .default({}),\n});\n\n// ============================================================\n// Inferred Types\n// ============================================================\n\nexport type KindLMConfig = z.infer<typeof KindLMConfigSchema>;\nexport type TestCase = z.infer<typeof TestCaseSchema>;\nexport type Expect = z.infer<typeof ExpectSchema>;\nexport type ModelConfig = z.infer<typeof ModelSchema>;\nexport type ProviderConfig = z.infer<typeof ProviderConfigSchema>;\nexport type GatesConfig = z.infer<typeof GatesSchema>;\nexport type JudgeCriterion = z.infer<typeof JudgeCriterionSchema>;\nexport type ToolCallExpect = z.infer<typeof ToolCallExpectSchema>;\nexport type ToolSimulation = z.infer<typeof ToolSimulationSchema>;\nexport type ComplianceConfig = z.infer<typeof ComplianceSchema>;\n\n// ============================================================\n// Validation\n// ============================================================\n\nexport function validateConfig(\n raw: unknown,\n): Result<KindLMConfig, KindlmError> {\n const result = KindLMConfigSchema.safeParse(raw);\n if (!result.success) {\n return err({\n code: \"CONFIG_VALIDATION_ERROR\",\n message: \"Config validation failed\",\n details: {\n errors: result.error.issues.map(\n (issue) => `${issue.path.join(\".\")}: ${issue.message}`,\n ),\n },\n });\n }\n return ok(result.data);\n}\n","import { z } from \"zod\";\n\n// ============================================================\n// OTLP JSON Wire Types (subset we care about)\n// ============================================================\n\nexport interface OtlpAttribute {\n key: string;\n value: OtlpAttributeValue;\n}\n\nexport interface OtlpAttributeValue {\n stringValue?: string;\n intValue?: string;\n doubleValue?: number;\n boolValue?: boolean;\n arrayValue?: { values: OtlpAttributeValue[] };\n}\n\nexport interface OtlpSpan {\n traceId: string;\n spanId: string;\n parentSpanId?: string;\n name: string;\n kind: number;\n startTimeUnixNano: string;\n endTimeUnixNano: string;\n attributes?: OtlpAttribute[];\n status?: { code?: number; message?: string };\n}\n\nexport interface OtlpScopeSpans {\n scope?: { name?: string; version?: string };\n spans: OtlpSpan[];\n}\n\nexport interface OtlpResourceSpans {\n resource?: {\n attributes?: OtlpAttribute[];\n };\n scopeSpans: OtlpScopeSpans[];\n}\n\nexport interface OtlpTracesPayload {\n resourceSpans: OtlpResourceSpans[];\n}\n\n// ============================================================\n// Normalized Parsed Span\n// ============================================================\n\nexport interface ParsedSpan {\n traceId: string;\n spanId: string;\n parentSpanId?: string;\n name: string;\n kind: number;\n startTimeMs: number;\n endTimeMs: number;\n durationMs: number;\n attributes: Record<string, string | number | boolean>;\n resourceAttributes: Record<string, string | number | boolean>;\n statusCode?: number;\n statusMessage?: string;\n}\n\n// ============================================================\n// Span Mapping Result\n// ============================================================\n\nexport interface SpanMappingResult {\n outputText: string;\n toolCalls: { id: string; name: string; arguments: Record<string, unknown> }[];\n latencyMs: number;\n inputTokens: number;\n outputTokens: number;\n model?: string;\n system?: string;\n}\n\n// ============================================================\n// Trace Config Schema (for kindlm.yaml)\n// ============================================================\n\nexport const SpanMappingSchema = z.object({\n outputTextAttr: z.string().default(\"gen_ai.completion.0.content\"),\n modelAttr: z.string().default(\"gen_ai.response.model\"),\n systemAttr: z.string().default(\"gen_ai.system\"),\n inputTokensAttr: z.string().default(\"gen_ai.usage.input_tokens\"),\n outputTokensAttr: z.string().default(\"gen_ai.usage.output_tokens\"),\n});\n\nexport const SpanFilterSchema = z.object({\n namePattern: z.string().optional().describe(\"Regex to filter span names\"),\n attributeMatch: z.record(z.string()).optional().describe(\"Attributes that must match\"),\n minDurationMs: z.number().min(0).optional(),\n});\n\nexport const TraceConfigSchema = z.object({\n port: z.number().int().min(1).max(65535).default(4318),\n timeoutMs: z.number().int().min(1000).default(30000),\n spanMapping: SpanMappingSchema.default({}),\n spanFilter: SpanFilterSchema.optional(),\n});\n\nexport type TraceConfig = z.infer<typeof TraceConfigSchema>;\nexport type SpanMapping = z.infer<typeof SpanMappingSchema>;\nexport type SpanFilter = z.infer<typeof SpanFilterSchema>;\n","import { parse as parseYaml } from \"yaml\";\nimport type { KindLMConfig } from \"./schema.js\";\nimport { validateConfig } from \"./schema.js\";\nimport type { Result } from \"../types/result.js\";\nimport { ok, err } from \"../types/result.js\";\n\nexport interface FileReader {\n readFile(path: string): Result<string>;\n}\n\nexport interface ParseOptions {\n configDir: string;\n fileReader?: FileReader;\n}\n\nconst MAX_CONFIG_SIZE = 1_048_576; // 1MB\nconst MAX_TESTS = 1000;\nconst MAX_SUITES = 50;\n\nexport function parseConfig(\n yamlContent: string,\n options: ParseOptions,\n): Result<KindLMConfig> {\n // Step 0: Size guard\n if (yamlContent.length > MAX_CONFIG_SIZE) {\n return err({\n code: \"CONFIG_TOO_LARGE\",\n message: `Config exceeds maximum size of 1MB (got ${(yamlContent.length / 1_048_576).toFixed(1)}MB)`,\n });\n }\n\n // Step 1: YAML parse\n let raw: unknown;\n try {\n raw = parseYaml(yamlContent);\n } catch (cause) {\n return err({\n code: \"CONFIG_PARSE_ERROR\",\n message: `Failed to parse YAML: ${(cause as Error).message}`,\n cause: cause as Error,\n });\n }\n\n // Step 2: Zod structural validation\n const validated = validateConfig(raw);\n if (!validated.success) {\n return validated;\n }\n const config = validated.data;\n\n // Step 2.5: Cardinality limits\n if (config.tests.length > MAX_TESTS) {\n return err({\n code: \"CONFIG_VALIDATION_ERROR\",\n message: `Config exceeds maximum of ${MAX_TESTS} tests (got ${config.tests.length})`,\n });\n }\n\n // Count unique suites by model grouping — but here \"suites\" are implicit via test groupings\n // For simplicity, use the models array length as a proxy\n if (config.models.length > MAX_SUITES) {\n return err({\n code: \"CONFIG_VALIDATION_ERROR\",\n message: `Config exceeds maximum of ${MAX_SUITES} models (got ${config.models.length})`,\n });\n }\n\n // Step 3: Cross-reference validation (collect all errors)\n const errors: string[] = [];\n\n // Unique model IDs\n const modelIds = new Set<string>();\n for (const model of config.models) {\n if (modelIds.has(model.id)) {\n errors.push(`Duplicate model ID \"${model.id}\"`);\n }\n modelIds.add(model.id);\n }\n\n // Unique test names\n const testNames = new Set<string>();\n for (const test of config.tests) {\n if (testNames.has(test.name)) {\n errors.push(`Duplicate test name \"${test.name}\"`);\n }\n testNames.add(test.name);\n }\n\n // test.prompt must exist in config.prompts (only for prompt-based tests)\n for (const test of config.tests) {\n if (test.prompt && !(test.prompt in config.prompts)) {\n errors.push(\n `Test \"${test.name}\" references prompt \"${test.prompt}\" which is not defined`,\n );\n }\n }\n\n // test.models[] must reference valid model IDs\n for (const test of config.tests) {\n if (test.models) {\n for (const modelId of test.models) {\n if (!modelIds.has(modelId)) {\n errors.push(\n `Test \"${test.name}\" references model \"${modelId}\" which is not configured`,\n );\n }\n }\n }\n }\n\n // model.provider must exist in config.providers\n for (const model of config.models) {\n const providers = config.providers as Record<string, unknown>;\n if (!providers[model.provider]) {\n errors.push(\n `Model \"${model.id}\" references provider \"${model.provider}\" which is not configured`,\n );\n }\n }\n\n // defaults.judgeModel must reference valid model ID\n if (\n config.defaults.judgeModel &&\n !modelIds.has(config.defaults.judgeModel)\n ) {\n errors.push(\n `defaults.judgeModel \"${config.defaults.judgeModel}\" is not a configured model`,\n );\n }\n\n // schemaFile / argsSchema path verification via fileReader\n if (options.fileReader) {\n for (const test of config.tests) {\n if (test.expect.output?.schemaFile) {\n const pathResult = safePath(\n options.configDir,\n test.expect.output.schemaFile,\n );\n if (!pathResult.success) {\n errors.push(\n `Test \"${test.name}\": schemaFile \"${test.expect.output.schemaFile}\" — ${pathResult.error.message}`,\n );\n } else {\n const result = options.fileReader.readFile(pathResult.data);\n if (!result.success) {\n errors.push(\n `Test \"${test.name}\": schemaFile \"${test.expect.output.schemaFile}\" not found at ${pathResult.data}`,\n );\n }\n }\n }\n\n if (test.expect.toolCalls) {\n for (const tc of test.expect.toolCalls) {\n if (tc.argsSchema) {\n const pathResult = safePath(\n options.configDir,\n tc.argsSchema,\n );\n if (!pathResult.success) {\n errors.push(\n `Test \"${test.name}\": argsSchema \"${tc.argsSchema}\" for tool \"${tc.tool}\" — ${pathResult.error.message}`,\n );\n } else {\n const result = options.fileReader.readFile(pathResult.data);\n if (!result.success) {\n errors.push(\n `Test \"${test.name}\": argsSchema \"${tc.argsSchema}\" for tool \"${tc.tool}\" not found at ${pathResult.data}`,\n );\n }\n }\n }\n }\n }\n }\n }\n\n if (errors.length > 0) {\n return err({\n code: \"CONFIG_VALIDATION_ERROR\",\n message: \"Config cross-reference validation failed\",\n details: { errors },\n });\n }\n\n return ok(config);\n}\n\nexport function safePath(base: string, relative: string): Result<string> {\n // Block absolute paths\n if (relative.startsWith(\"/\") || relative.startsWith(\"\\\\\")) {\n return err({\n code: \"PATH_TRAVERSAL\",\n message: \"Absolute paths are not allowed in config references\",\n });\n }\n\n // Block Windows absolute paths (e.g. C:\\)\n if (/^[a-zA-Z]:/.test(relative)) {\n return err({\n code: \"PATH_TRAVERSAL\",\n message: \"Absolute paths are not allowed in config references\",\n });\n }\n\n const normalizedBase = base.endsWith(\"/\") ? base.slice(0, -1) : base;\n const joined = `${normalizedBase}/${relative}`;\n\n // Normalize away .. and . segments\n const resolved = normalizePath(joined);\n\n // Verify resolved path stays under config directory\n const normalizedRoot = normalizePath(normalizedBase);\n if (!resolved.startsWith(normalizedRoot + \"/\") && resolved !== normalizedRoot) {\n return err({\n code: \"PATH_TRAVERSAL\",\n message: `Path \"${relative}\" escapes the config directory`,\n });\n }\n\n return ok(resolved);\n}\n\nfunction normalizePath(p: string): string {\n const parts = p.split(\"/\");\n const result: string[] = [];\n for (const part of parts) {\n if (part === \".\" || part === \"\") continue;\n if (part === \"..\") {\n result.pop();\n } else {\n result.push(part);\n }\n }\n // Preserve leading slash for absolute paths\n const prefix = p.startsWith(\"/\") ? \"/\" : \"\";\n return prefix + result.join(\"/\");\n}\n","import type { Result } from \"../types/result.js\";\nimport { ok, err } from \"../types/result.js\";\n\nconst PLACEHOLDER_RE = /\\{\\{(\\w+)\\}\\}/g;\n\nexport function interpolate(\n template: string,\n vars: Record<string, string>,\n): Result<string> {\n const missing = findMissingVars(template, vars);\n if (missing.length > 0) {\n return err({\n code: \"CONFIG_VALIDATION_ERROR\",\n message: `Missing template variables: ${missing.join(\", \")}`,\n details: { missing },\n });\n }\n const result = template.replace(\n PLACEHOLDER_RE,\n (_match, key: string) => vars[key] as string,\n );\n return ok(result);\n}\n\nexport function findMissingVars(\n template: string,\n vars: Record<string, string>,\n): string[] {\n const missing = new Set<string>();\n for (const match of template.matchAll(PLACEHOLDER_RE)) {\n const key = match[1];\n if (key !== undefined && !(key in vars)) {\n missing.add(key);\n }\n }\n return [...missing];\n}\n","import type { AssertionResult } from \"../assertions/interface.js\";\n\nexport interface TestCaseRunResult {\n testCaseName: string;\n modelId: string;\n runIndex: number;\n outputText: string;\n assertions: AssertionResult[];\n latencyMs: number;\n tokenUsage: { inputTokens: number; outputTokens: number; totalTokens: number };\n costEstimateUsd: number | null;\n}\n\nexport interface AggregatedTestResult {\n testCaseName: string;\n modelId: string;\n runCount: number;\n passed: boolean;\n passRate: number;\n assertionScores: Record<string, { mean: number; min: number; max: number }>;\n failureCodes: string[];\n latencyAvgMs: number;\n totalCostUsd: number;\n totalTokens: number;\n runs: TestCaseRunResult[];\n}\n\nexport function aggregateRuns(runs: TestCaseRunResult[]): AggregatedTestResult {\n const first = runs[0];\n if (!first) {\n throw new Error(\"aggregateRuns requires at least one run\");\n }\n const { testCaseName, modelId } = first;\n\n const passedRuns = runs.filter((r) =>\n r.assertions.every((a) => a.passed),\n ).length;\n const passRate = passedRuns / runs.length;\n\n // Group assertion scores by type\n const scoresByType = new Map<string, number[]>();\n for (const run of runs) {\n for (const a of run.assertions) {\n let arr = scoresByType.get(a.assertionType);\n if (!arr) {\n arr = [];\n scoresByType.set(a.assertionType, arr);\n }\n arr.push(a.score);\n }\n }\n\n const assertionScores: Record<string, { mean: number; min: number; max: number }> = {};\n for (const [type, scores] of scoresByType) {\n const sum = scores.reduce((a, b) => a + b, 0);\n assertionScores[type] = {\n mean: sum / scores.length,\n min: Math.min(...scores),\n max: Math.max(...scores),\n };\n }\n\n // Collect unique failure codes\n const failureCodeSet = new Set<string>();\n for (const run of runs) {\n for (const a of run.assertions) {\n if (!a.passed && a.failureCode) {\n failureCodeSet.add(a.failureCode);\n }\n }\n }\n\n const latencyAvgMs =\n runs.reduce((sum, r) => sum + r.latencyMs, 0) / runs.length;\n\n const totalCostUsd = runs.reduce(\n (sum, r) => sum + (r.costEstimateUsd ?? 0),\n 0,\n );\n\n const totalTokens = runs.reduce(\n (sum, r) => sum + r.tokenUsage.totalTokens,\n 0,\n );\n\n return {\n testCaseName,\n modelId,\n runCount: runs.length,\n passed: passRate === 1,\n passRate,\n assertionScores,\n failureCodes: [...failureCodeSet],\n latencyAvgMs,\n totalCostUsd,\n totalTokens,\n runs,\n };\n}\n","import type { ProviderToolCall } from \"../types/provider.js\";\nimport type { Result } from \"../types/result.js\";\n\n// ============================================================\n// Command Executor Interface (injected — core has zero I/O)\n// ============================================================\n\nexport interface CommandExecutor {\n execute(command: string, options: CommandExecuteOptions): Promise<Result<RawCommandOutput>>;\n}\n\nexport interface CommandExecuteOptions {\n timeoutMs: number;\n env?: Record<string, string>;\n cwd?: string;\n}\n\nexport interface RawCommandOutput {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\n// ============================================================\n// Parsed Command Result\n// ============================================================\n\nexport interface CommandResult {\n outputText: string;\n toolCalls: ProviderToolCall[];\n outputJson?: unknown;\n exitCode: number;\n stderr: string;\n}\n\n// ============================================================\n// Protocol Event Types\n// ============================================================\n\ninterface KindlmToolCallEvent {\n kindlm: \"tool_call\";\n id?: string;\n name: string;\n arguments: Record<string, unknown>;\n}\n\ninterface KindlmOutputJsonEvent {\n kindlm: \"output_json\";\n data: unknown;\n}\n\ntype KindlmEvent = KindlmToolCallEvent | KindlmOutputJsonEvent;\n\n// ============================================================\n// Parser\n// ============================================================\n\nexport function parseCommandOutput(raw: RawCommandOutput): CommandResult {\n const lines = raw.stdout.split(\"\\n\");\n const textLines: string[] = [];\n const toolCalls: ProviderToolCall[] = [];\n let outputJson: unknown = undefined;\n let toolCallCounter = 0;\n\n for (const line of lines) {\n const trimmed = line.trimStart();\n if (!trimmed.startsWith(\"{\\\"kindlm\\\":\")) {\n textLines.push(line);\n continue;\n }\n\n const event = tryParseEvent(trimmed);\n if (!event) {\n textLines.push(line);\n continue;\n }\n\n if (event.kindlm === \"tool_call\") {\n toolCalls.push({\n id: event.id ?? `cmd_tc_${toolCallCounter++}`,\n name: event.name,\n arguments: event.arguments,\n });\n } else if (event.kindlm === \"output_json\") {\n outputJson = event.data;\n }\n }\n\n return {\n outputText: textLines.join(\"\\n\").trim(),\n toolCalls,\n outputJson,\n exitCode: raw.exitCode,\n stderr: raw.stderr,\n };\n}\n\nfunction tryParseEvent(line: string): KindlmEvent | null {\n try {\n const parsed = JSON.parse(line) as Record<string, unknown>;\n if (typeof parsed.kindlm !== \"string\") return null;\n\n if (parsed.kindlm === \"tool_call\") {\n if (typeof parsed.name !== \"string\") return null;\n return {\n kindlm: \"tool_call\",\n id: typeof parsed.id === \"string\" ? parsed.id : undefined,\n name: parsed.name,\n arguments: (typeof parsed.arguments === \"object\" && parsed.arguments !== null\n ? parsed.arguments\n : {}) as Record<string, unknown>,\n };\n }\n\n if (parsed.kindlm === \"output_json\") {\n return {\n kindlm: \"output_json\",\n data: parsed.data,\n };\n }\n\n return null;\n } catch {\n return null;\n }\n}\n","import type { KindLMConfig, TestCase, ModelConfig } from \"../types/config.js\";\nimport type { Result, KindlmError } from \"../types/result.js\";\nimport { ok, err } from \"../types/result.js\";\nimport type { ProviderAdapter, ProviderRequest, ProviderMessage, ProviderToolDefinition } from \"../providers/interface.js\";\nimport type { FileReader } from \"../config/parser.js\";\nimport type { AssertionContext, AssertionResult } from \"../assertions/interface.js\";\nimport { createAssertionsFromExpect } from \"../assertions/registry.js\";\nimport type { AssertionOverrides } from \"../assertions/registry.js\";\nimport { interpolate } from \"../config/interpolation.js\";\nimport { runConversation } from \"../providers/conversation.js\";\nimport type { TestCaseRunResult, AggregatedTestResult } from \"./aggregator.js\";\nimport { aggregateRuns } from \"./aggregator.js\";\nimport type { BaselineData } from \"../baseline/store.js\";\nimport type { CommandExecutor } from \"./command.js\";\nimport { parseCommandOutput } from \"./command.js\";\n\n// ============================================================\n// Public Types\n// ============================================================\n\nexport interface RunnerDeps {\n adapters: Map<string, ProviderAdapter>;\n configDir: string;\n fileReader: FileReader;\n onProgress?: (event: ProgressEvent) => void;\n baselineData?: BaselineData;\n commandExecutor?: CommandExecutor;\n}\n\nexport type ProgressEvent =\n | { type: \"test_start\"; test: string; model: string; run: number }\n | { type: \"test_complete\"; test: string; model: string; run: number; passed: boolean };\n\nexport interface RunResult {\n suites: SuiteRunResult[];\n totalTests: number;\n passed: number;\n failed: number;\n errored: number;\n skipped: number;\n durationMs: number;\n}\n\nexport interface SuiteRunResult {\n name: string;\n status: \"passed\" | \"failed\" | \"errored\" | \"skipped\";\n tests: TestRunResult[];\n error?: string;\n}\n\nexport interface TestRunResult {\n name: string;\n modelId: string;\n status: \"passed\" | \"failed\" | \"errored\" | \"skipped\";\n assertions: AssertionResult[];\n error?: KindlmError;\n latencyMs: number;\n costUsd: number;\n}\n\nexport interface RunnerResult {\n runResult: RunResult;\n aggregated: AggregatedTestResult[];\n}\n\n// ============================================================\n// Runner Implementation\n// ============================================================\n\ninterface ExecutionUnit {\n test: TestCase;\n modelConfig: ModelConfig | null;\n runIndex: number;\n}\n\nexport function createRunner(\n config: KindLMConfig,\n deps: RunnerDeps,\n): { run(): Promise<Result<RunnerResult>> } {\n return {\n async run(): Promise<Result<RunnerResult>> {\n const startTime = Date.now();\n\n // 1. Pre-load schema files\n const schemaCache = new Map<string, Record<string, unknown>>();\n for (const test of config.tests) {\n if (test.expect.output?.schemaFile) {\n const fullPath = joinPath(deps.configDir, test.expect.output.schemaFile);\n const readResult = deps.fileReader.readFile(fullPath);\n if (!readResult.success) {\n return err({\n code: \"SCHEMA_FILE_ERROR\",\n message: `Failed to read schema file \"${test.expect.output.schemaFile}\": ${readResult.error.message}`,\n });\n }\n try {\n schemaCache.set(test.name, JSON.parse(readResult.data) as Record<string, unknown>);\n } catch (e) {\n return err({\n code: \"SCHEMA_FILE_ERROR\",\n message: `Failed to parse schema file \"${test.expect.output.schemaFile}\" as JSON: ${e instanceof Error ? e.message : String(e)}`,\n });\n }\n }\n }\n\n // 2. Build execution plan\n const units: ExecutionUnit[] = [];\n for (const test of config.tests) {\n if (test.skip) continue;\n\n const repeat = test.repeat ?? config.defaults.repeat;\n\n if (test.command) {\n // Command tests run once per repeat, no model multiplication\n for (let runIndex = 0; runIndex < repeat; runIndex++) {\n units.push({ test, modelConfig: null, runIndex });\n }\n } else {\n const modelIds = test.models ?? config.models.map((m) => m.id);\n for (const modelId of modelIds) {\n const modelConfig = config.models.find((m) => m.id === modelId);\n if (!modelConfig) continue;\n\n for (let runIndex = 0; runIndex < repeat; runIndex++) {\n units.push({ test, modelConfig, runIndex });\n }\n }\n }\n }\n\n // 3. Execute with concurrency pool\n const caseResults = await runWithConcurrency(\n units.map((unit) => () => executeUnit(config, deps, unit, schemaCache)),\n config.defaults.concurrency,\n );\n\n // 4. Group by (testName, modelId) and aggregate\n const groupKey = (r: TestCaseRunResult) => `${r.testCaseName}::${r.modelId}`;\n const groups = new Map<string, TestCaseRunResult[]>();\n for (const r of caseResults) {\n const key = groupKey(r);\n let arr = groups.get(key);\n if (!arr) {\n arr = [];\n groups.set(key, arr);\n }\n arr.push(r);\n }\n\n const aggregated: AggregatedTestResult[] = [];\n for (const runs of groups.values()) {\n aggregated.push(aggregateRuns(runs));\n }\n\n // 5. Build TestRunResults from aggregated\n const testRunResults: TestRunResult[] = aggregated.map((agg) => ({\n name: agg.testCaseName,\n modelId: agg.modelId,\n status: agg.passed ? \"passed\" as const : \"failed\" as const,\n assertions: agg.runs[0]?.assertions ?? [],\n latencyMs: agg.latencyAvgMs,\n costUsd: agg.totalCostUsd,\n }));\n\n // 6. Build skipped test results\n const skippedTests: TestRunResult[] = config.tests\n .filter((t) => t.skip)\n .map((t) => ({\n name: t.name,\n modelId: \"\",\n status: \"skipped\" as const,\n assertions: [],\n latencyMs: 0,\n costUsd: 0,\n }));\n\n const allTests = [...testRunResults, ...skippedTests];\n\n // 7. Build SuiteRunResult\n const passed = allTests.filter((t) => t.status === \"passed\").length;\n const failed = allTests.filter((t) => t.status === \"failed\").length;\n const errored = allTests.filter((t) => t.status === \"errored\").length;\n const skipped = allTests.filter((t) => t.status === \"skipped\").length;\n\n const suiteStatus: SuiteRunResult[\"status\"] =\n errored > 0 ? \"errored\" : failed > 0 ? \"failed\" : \"passed\";\n\n const suiteResult: SuiteRunResult = {\n name: config.suite.name,\n status: suiteStatus,\n tests: allTests,\n };\n\n const runResult: RunResult = {\n suites: [suiteResult],\n totalTests: allTests.length,\n passed,\n failed,\n errored,\n skipped,\n durationMs: Date.now() - startTime,\n };\n\n return ok({ runResult, aggregated });\n },\n };\n}\n\n// ============================================================\n// Execute a single test × model × run\n// ============================================================\n\nasync function executeUnit(\n config: KindLMConfig,\n deps: RunnerDeps,\n unit: ExecutionUnit,\n schemaCache: Map<string, Record<string, unknown>>,\n): Promise<TestCaseRunResult> {\n const { test, modelConfig, runIndex } = unit;\n\n if (test.command) {\n return executeCommandUnit(config, deps, test, runIndex, schemaCache);\n }\n\n if (!modelConfig) {\n return errorResult(test.name, \"unknown\", runIndex, \"No model config for prompt-based test\");\n }\n\n deps.onProgress?.({\n type: \"test_start\",\n test: test.name,\n model: modelConfig.id,\n run: runIndex,\n });\n\n try {\n // Look up adapter\n const adapter = deps.adapters.get(modelConfig.provider);\n if (!adapter) {\n return errorResult(test.name, modelConfig.id, runIndex, `Provider adapter \"${modelConfig.provider}\" not found`);\n }\n\n // Resolve prompt\n const promptDef = test.prompt ? config.prompts[test.prompt] : undefined;\n if (!promptDef) {\n return errorResult(test.name, modelConfig.id, runIndex, `Prompt \"${test.prompt}\" not defined`);\n }\n\n const userResult = interpolate(promptDef.user, test.vars);\n if (!userResult.success) {\n return errorResult(test.name, modelConfig.id, runIndex, userResult.error.message);\n }\n\n const messages: ProviderMessage[] = [];\n if (promptDef.system) {\n const sysResult = interpolate(promptDef.system, test.vars);\n if (!sysResult.success) {\n return errorResult(test.name, modelConfig.id, runIndex, sysResult.error.message);\n }\n messages.push({ role: \"system\", content: sysResult.data });\n }\n messages.push({ role: \"user\", content: userResult.data });\n\n // Build tool definitions from simulations\n const tools: ProviderToolDefinition[] = (test.tools ?? []).map((t) => ({\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }));\n\n const request: ProviderRequest = {\n model: modelConfig.model,\n messages,\n params: {\n temperature: modelConfig.params.temperature,\n maxTokens: modelConfig.params.maxTokens,\n topP: modelConfig.params.topP,\n stopSequences: modelConfig.params.stopSequences,\n seed: modelConfig.params.seed,\n },\n tools: tools.length > 0 ? tools : undefined,\n };\n\n // Run conversation\n const conversation = await runConversation(adapter, request, test.tools ?? []);\n\n // Compute cost\n const costEstimate = adapter.estimateCost(modelConfig.model, conversation.totalUsage);\n\n // Build assertions with schema content override\n const overrides: AssertionOverrides = {};\n if (test.expect.output?.schemaFile && schemaCache.has(test.name)) {\n overrides.schemaContent = schemaCache.get(test.name);\n }\n const assertions = createAssertionsFromExpect(test.expect, overrides);\n\n // Resolve judge adapter if needed\n const judgeModelId = config.defaults.judgeModel ?? config.models[0]?.id;\n const judgeModelConfig = config.models.find((m) => m.id === judgeModelId);\n const judgeAdapter = judgeModelConfig ? deps.adapters.get(judgeModelConfig.provider) : undefined;\n\n // Build assertion context\n const context: AssertionContext = {\n outputText: conversation.finalText,\n toolCalls: conversation.allToolCalls,\n configDir: deps.configDir,\n latencyMs: conversation.totalLatencyMs,\n costUsd: costEstimate ?? undefined,\n judgeAdapter,\n judgeModel: judgeModelConfig?.model,\n };\n\n // Inject baseline text for drift assertions\n if (deps.baselineData) {\n const baselineKey = `${test.name}::${modelConfig.id}`;\n const baselineEntry = deps.baselineData.results[baselineKey];\n if (baselineEntry) {\n context.baselineText = baselineEntry.outputText;\n }\n }\n\n // Evaluate all assertions\n const allResults = [];\n for (const assertion of assertions) {\n const results = await assertion.evaluate(context);\n allResults.push(...results);\n }\n\n const allPassed = allResults.every((r) => r.passed);\n\n deps.onProgress?.({\n type: \"test_complete\",\n test: test.name,\n model: modelConfig.id,\n run: runIndex,\n passed: allPassed,\n });\n\n return {\n testCaseName: test.name,\n modelId: modelConfig.id,\n runIndex,\n outputText: conversation.finalText,\n assertions: allResults,\n latencyMs: conversation.totalLatencyMs,\n tokenUsage: conversation.totalUsage,\n costEstimateUsd: costEstimate,\n };\n } catch (e) {\n deps.onProgress?.({\n type: \"test_complete\",\n test: test.name,\n model: modelConfig.id,\n run: runIndex,\n passed: false,\n });\n\n return errorResult(\n test.name,\n modelConfig.id,\n runIndex,\n e instanceof Error ? e.message : String(e),\n );\n }\n}\n\nasync function executeCommandUnit(\n config: KindLMConfig,\n deps: RunnerDeps,\n test: TestCase,\n runIndex: number,\n schemaCache: Map<string, Record<string, unknown>>,\n): Promise<TestCaseRunResult> {\n const modelId = \"command\";\n\n deps.onProgress?.({\n type: \"test_start\",\n test: test.name,\n model: modelId,\n run: runIndex,\n });\n\n try {\n if (!deps.commandExecutor) {\n return errorResult(test.name, modelId, runIndex, \"Command executor not available\");\n }\n\n if (!test.command) {\n return errorResult(test.name, modelId, runIndex, \"No command specified\");\n }\n\n // Interpolate vars into command string\n const cmdResult = interpolate(test.command, test.vars);\n if (!cmdResult.success) {\n return errorResult(test.name, modelId, runIndex, cmdResult.error.message);\n }\n\n const startTime = Date.now();\n const execResult = await deps.commandExecutor.execute(cmdResult.data, {\n timeoutMs: config.defaults.timeoutMs,\n cwd: deps.configDir,\n });\n\n if (!execResult.success) {\n return errorResult(test.name, modelId, runIndex, execResult.error.message);\n }\n\n const latencyMs = Date.now() - startTime;\n const parsed = parseCommandOutput(execResult.data);\n\n // Build assertions\n const overrides: AssertionOverrides = {};\n if (test.expect.output?.schemaFile && schemaCache.has(test.name)) {\n overrides.schemaContent = schemaCache.get(test.name);\n }\n const assertions = createAssertionsFromExpect(test.expect, overrides);\n\n // Resolve judge adapter if needed\n const judgeModelId = config.defaults.judgeModel ?? config.models[0]?.id;\n const judgeModelConfig = config.models.find((m) => m.id === judgeModelId);\n const judgeAdapter = judgeModelConfig ? deps.adapters.get(judgeModelConfig.provider) : undefined;\n\n // Build assertion context\n const context: AssertionContext = {\n outputText: parsed.outputText,\n outputJson: parsed.outputJson,\n toolCalls: parsed.toolCalls,\n configDir: deps.configDir,\n latencyMs,\n judgeAdapter,\n judgeModel: judgeModelConfig?.model,\n };\n\n // Inject baseline text for drift assertions\n if (deps.baselineData) {\n const baselineKey = `${test.name}::${modelId}`;\n const baselineEntry = deps.baselineData.results[baselineKey];\n if (baselineEntry) {\n context.baselineText = baselineEntry.outputText;\n }\n }\n\n // Evaluate all assertions\n const allResults: AssertionResult[] = [];\n for (const assertion of assertions) {\n const results = await assertion.evaluate(context);\n allResults.push(...results);\n }\n\n const allPassed = allResults.every((r) => r.passed);\n\n deps.onProgress?.({\n type: \"test_complete\",\n test: test.name,\n model: modelId,\n run: runIndex,\n passed: allPassed,\n });\n\n return {\n testCaseName: test.name,\n modelId,\n runIndex,\n outputText: parsed.outputText,\n assertions: allResults,\n latencyMs,\n tokenUsage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n costEstimateUsd: null,\n };\n } catch (e) {\n deps.onProgress?.({\n type: \"test_complete\",\n test: test.name,\n model: modelId,\n run: runIndex,\n passed: false,\n });\n\n return errorResult(\n test.name,\n modelId,\n runIndex,\n e instanceof Error ? e.message : String(e),\n );\n }\n}\n\nfunction errorResult(\n testCaseName: string,\n modelId: string,\n runIndex: number,\n message: string,\n): TestCaseRunResult {\n return {\n testCaseName,\n modelId,\n runIndex,\n outputText: \"\",\n assertions: [\n {\n assertionType: \"internal\",\n label: \"Execution error\",\n passed: false,\n score: 0,\n failureCode: \"INTERNAL_ERROR\",\n failureMessage: message,\n },\n ],\n latencyMs: 0,\n tokenUsage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n costEstimateUsd: null,\n };\n}\n\n// ============================================================\n// Concurrency Helper\n// ============================================================\n\nasync function runWithConcurrency<T>(\n tasks: (() => Promise<T>)[],\n limit: number,\n): Promise<T[]> {\n const results: T[] = new Array(tasks.length);\n let nextIndex = 0;\n\n async function worker(): Promise<void> {\n while (nextIndex < tasks.length) {\n const index = nextIndex++;\n const task = tasks[index];\n if (task) results[index] = await task();\n }\n }\n\n const workers = Array.from({ length: Math.min(limit, tasks.length) }, () => worker());\n await Promise.all(workers);\n return results;\n}\n\n// ============================================================\n// Path Helper\n// ============================================================\n\nfunction joinPath(base: string, relative: string): string {\n if (relative.startsWith(\"/\")) return relative;\n const normalizedBase = base.endsWith(\"/\") ? base.slice(0, -1) : base;\n return `${normalizedBase}/${relative}`;\n}\n","import type { GatesConfig } from \"../types/config.js\";\nimport type { AggregatedTestResult } from \"./aggregator.js\";\nimport { classifyAssertion } from \"../assertions/classification.js\";\n\nexport interface GateResult {\n gateName: string;\n passed: boolean;\n actual: number;\n threshold: number;\n message: string;\n}\n\nexport interface GateEvaluation {\n passed: boolean;\n gates: GateResult[];\n}\n\nexport function evaluateGates(\n config: GatesConfig,\n results: AggregatedTestResult[],\n): GateEvaluation {\n const gates: GateResult[] = [];\n\n // 1. passRateMin — overall pass rate across all results\n const totalRuns = results.reduce((s, r) => s + r.runCount, 0);\n const totalPassed = results.reduce(\n (s, r) => s + Math.round(r.passRate * r.runCount),\n 0,\n );\n const overallPassRate = totalRuns > 0 ? totalPassed / totalRuns : 0;\n gates.push({\n gateName: \"passRateMin\",\n passed: overallPassRate >= config.passRateMin,\n actual: overallPassRate,\n threshold: config.passRateMin,\n message:\n overallPassRate >= config.passRateMin\n ? `Pass rate ${fmt(overallPassRate)} meets minimum ${fmt(config.passRateMin)}`\n : `Pass rate ${fmt(overallPassRate)} below minimum ${fmt(config.passRateMin)}`,\n });\n\n // 2. schemaFailuresMax\n const schemaFailures = countFailures(results, [\n \"SCHEMA_INVALID\",\n \"SCHEMA_PARSE_ERROR\",\n ]);\n gates.push({\n gateName: \"schemaFailuresMax\",\n passed: schemaFailures <= config.schemaFailuresMax,\n actual: schemaFailures,\n threshold: config.schemaFailuresMax,\n message:\n schemaFailures <= config.schemaFailuresMax\n ? `Schema failures ${schemaFailures} within limit ${config.schemaFailuresMax}`\n : `Schema failures ${schemaFailures} exceed limit ${config.schemaFailuresMax}`,\n });\n\n // 3. judgeAvgMin (optional)\n if (config.judgeAvgMin !== undefined) {\n const judgeScores = collectScores(results, \"judge\");\n const judgeAvg =\n judgeScores.length > 0\n ? judgeScores.reduce((a, b) => a + b, 0) / judgeScores.length\n : 1;\n gates.push({\n gateName: \"judgeAvgMin\",\n passed: judgeAvg >= config.judgeAvgMin,\n actual: judgeAvg,\n threshold: config.judgeAvgMin,\n message:\n judgeAvg >= config.judgeAvgMin\n ? `Judge average ${fmt(judgeAvg)} meets minimum ${fmt(config.judgeAvgMin)}`\n : `Judge average ${fmt(judgeAvg)} below minimum ${fmt(config.judgeAvgMin)}`,\n });\n }\n\n // 4. driftScoreMax (optional)\n if (config.driftScoreMax !== undefined) {\n const driftScores = collectScores(results, \"drift\");\n const maxDrift =\n driftScores.length > 0 ? Math.max(...driftScores) : 0;\n gates.push({\n gateName: \"driftScoreMax\",\n passed: maxDrift <= config.driftScoreMax,\n actual: maxDrift,\n threshold: config.driftScoreMax,\n message:\n maxDrift <= config.driftScoreMax\n ? `Drift score ${fmt(maxDrift)} within limit ${fmt(config.driftScoreMax)}`\n : `Drift score ${fmt(maxDrift)} exceeds limit ${fmt(config.driftScoreMax)}`,\n });\n }\n\n // 5. piiFailuresMax\n const piiFailures = countFailures(results, [\"PII_DETECTED\"]);\n gates.push({\n gateName: \"piiFailuresMax\",\n passed: piiFailures <= config.piiFailuresMax,\n actual: piiFailures,\n threshold: config.piiFailuresMax,\n message:\n piiFailures <= config.piiFailuresMax\n ? `PII failures ${piiFailures} within limit ${config.piiFailuresMax}`\n : `PII failures ${piiFailures} exceed limit ${config.piiFailuresMax}`,\n });\n\n // 6. keywordFailuresMax\n const keywordFailures = countFailures(results, [\n \"KEYWORD_DENIED\",\n \"KEYWORD_MISSING\",\n ]);\n gates.push({\n gateName: \"keywordFailuresMax\",\n passed: keywordFailures <= config.keywordFailuresMax,\n actual: keywordFailures,\n threshold: config.keywordFailuresMax,\n message:\n keywordFailures <= config.keywordFailuresMax\n ? `Keyword failures ${keywordFailures} within limit ${config.keywordFailuresMax}`\n : `Keyword failures ${keywordFailures} exceed limit ${config.keywordFailuresMax}`,\n });\n\n // 7. costMaxUsd (optional)\n if (config.costMaxUsd !== undefined) {\n const totalCost = results.reduce((s, r) => s + r.totalCostUsd, 0);\n gates.push({\n gateName: \"costMaxUsd\",\n passed: totalCost <= config.costMaxUsd,\n actual: totalCost,\n threshold: config.costMaxUsd,\n message:\n totalCost <= config.costMaxUsd\n ? `Total cost $${totalCost.toFixed(4)} within limit $${config.costMaxUsd.toFixed(4)}`\n : `Total cost $${totalCost.toFixed(4)} exceeds limit $${config.costMaxUsd.toFixed(4)}`,\n });\n }\n\n // 8. latencyMaxMs (optional)\n if (config.latencyMaxMs !== undefined) {\n const avgLatency =\n results.length > 0\n ? results.reduce((s, r) => s + r.latencyAvgMs, 0) / results.length\n : 0;\n gates.push({\n gateName: \"latencyMaxMs\",\n passed: avgLatency <= config.latencyMaxMs,\n actual: avgLatency,\n threshold: config.latencyMaxMs,\n message:\n avgLatency <= config.latencyMaxMs\n ? `Average latency ${Math.round(avgLatency)}ms within limit ${config.latencyMaxMs}ms`\n : `Average latency ${Math.round(avgLatency)}ms exceeds limit ${config.latencyMaxMs}ms`,\n });\n }\n\n // 9. deterministicPassRate (optional)\n if (config.deterministicPassRate !== undefined) {\n const rate = computeCategoryPassRate(results, \"deterministic\");\n gates.push({\n gateName: \"deterministicPassRate\",\n passed: rate >= config.deterministicPassRate,\n actual: rate,\n threshold: config.deterministicPassRate,\n message:\n rate >= config.deterministicPassRate\n ? `Deterministic pass rate ${fmt(rate)} meets minimum ${fmt(config.deterministicPassRate)}`\n : `Deterministic pass rate ${fmt(rate)} below minimum ${fmt(config.deterministicPassRate)}`,\n });\n }\n\n // 10. probabilisticPassRate (optional)\n if (config.probabilisticPassRate !== undefined) {\n const rate = computeCategoryPassRate(results, \"probabilistic\");\n gates.push({\n gateName: \"probabilisticPassRate\",\n passed: rate >= config.probabilisticPassRate,\n actual: rate,\n threshold: config.probabilisticPassRate,\n message:\n rate >= config.probabilisticPassRate\n ? `Probabilistic pass rate ${fmt(rate)} meets minimum ${fmt(config.probabilisticPassRate)}`\n : `Probabilistic pass rate ${fmt(rate)} below minimum ${fmt(config.probabilisticPassRate)}`,\n });\n }\n\n return {\n passed: gates.every((g) => g.passed),\n gates,\n };\n}\n\nfunction computeCategoryPassRate(\n results: AggregatedTestResult[],\n category: \"deterministic\" | \"probabilistic\",\n): number {\n let total = 0;\n let passed = 0;\n for (const r of results) {\n for (const run of r.runs) {\n for (const a of run.assertions) {\n if (classifyAssertion(a.assertionType) === category) {\n total++;\n if (a.passed) passed++;\n }\n }\n }\n }\n return total > 0 ? passed / total : 1;\n}\n\nfunction countFailures(\n results: AggregatedTestResult[],\n codes: string[],\n): number {\n let count = 0;\n for (const r of results) {\n for (const code of codes) {\n if (r.failureCodes.includes(code)) {\n count++;\n }\n }\n }\n return count;\n}\n\nfunction collectScores(\n results: AggregatedTestResult[],\n assertionType: string,\n): number[] {\n const scores: number[] = [];\n for (const r of results) {\n const entry = r.assertionScores[assertionType];\n if (entry) {\n scores.push(entry.mean);\n }\n }\n return scores;\n}\n\nfunction fmt(n: number): string {\n return (n * 100).toFixed(1) + \"%\";\n}\n","import type { RunResult } from \"../engine/runner.js\";\nimport type { GateEvaluation } from \"../engine/gate.js\";\n\nexport interface ReporterOutput {\n content: string;\n format: \"text\" | \"json\" | \"xml\" | \"markdown\";\n}\n\nexport interface Reporter {\n readonly name: string;\n generate(runResult: RunResult, gateEvaluation: GateEvaluation): ReporterOutput;\n}\n\nexport interface Colorize {\n bold: (text: string) => string;\n red: (text: string) => string;\n green: (text: string) => string;\n yellow: (text: string) => string;\n cyan: (text: string) => string;\n dim: (text: string) => string;\n greenBold: (text: string) => string;\n redBold: (text: string) => string;\n}\n\nconst identity = (t: string): string => t;\n\nexport const noColor: Colorize = {\n bold: identity,\n red: identity,\n green: identity,\n yellow: identity,\n cyan: identity,\n dim: identity,\n greenBold: identity,\n redBold: identity,\n};\n","import type { Colorize, Reporter, ReporterOutput } from \"./interface.js\";\nimport { noColor } from \"./interface.js\";\nimport type { RunResult, SuiteRunResult, TestRunResult } from \"../engine/runner.js\";\nimport type { GateEvaluation } from \"../engine/gate.js\";\nimport type { AssertionResult } from \"../assertions/interface.js\";\n\nexport function createPrettyReporter(colorize: Colorize = noColor): Reporter {\n return {\n name: \"pretty\",\n generate(runResult: RunResult, gateEvaluation: GateEvaluation): ReporterOutput {\n const lines: string[] = [];\n const c = colorize;\n\n lines.push(\"\");\n lines.push(c.bold(\" KindLM Test Results\"));\n lines.push(\"\");\n\n let totalCost = 0;\n\n for (const suite of runResult.suites) {\n lines.push(formatSuite(suite, c));\n\n for (const test of suite.tests) {\n lines.push(formatTest(test, c));\n\n // Show model, latency, cost on the next line\n const meta = formatTestMeta(test, c);\n if (meta) lines.push(meta);\n\n // Show all assertions\n for (const a of test.assertions) {\n lines.push(formatAssertion(a, c));\n }\n\n totalCost += test.costUsd;\n }\n lines.push(\"\");\n }\n\n // Summary\n lines.push(c.bold(\" Summary\"));\n const passStr = c.green(`${runResult.passed} passed`);\n const failStr =\n runResult.failed > 0\n ? c.red(`${runResult.failed} failed`)\n : `${runResult.failed} failed`;\n const errorStr =\n runResult.errored > 0\n ? c.yellow(`${runResult.errored} errored`)\n : `${runResult.errored} errored`;\n lines.push(` ${passStr}, ${failStr}, ${errorStr} (${runResult.totalTests} total)`);\n lines.push(` Duration: ${formatDuration(runResult.durationMs)}`);\n if (totalCost > 0) {\n lines.push(` Cost: ${formatCost(totalCost)}`);\n }\n lines.push(\"\");\n\n // Gates\n if (gateEvaluation.gates.length > 0) {\n lines.push(c.bold(\" Quality Gates\"));\n for (const gate of gateEvaluation.gates) {\n const icon = gate.passed ? c.green(\"✓\") : c.red(\"✗\");\n lines.push(` ${icon} ${gate.message}`);\n }\n lines.push(\"\");\n }\n\n // Verdict\n const allPassed = runResult.failed === 0 && runResult.errored === 0 && gateEvaluation.passed;\n if (allPassed) {\n lines.push(c.greenBold(\" ✓ All tests passed\"));\n } else {\n lines.push(c.redBold(\" ✗ Some tests failed\"));\n }\n lines.push(\"\");\n\n return { content: lines.join(\"\\n\"), format: \"text\" };\n },\n };\n}\n\nfunction formatSuite(suite: SuiteRunResult, c: Colorize): string {\n const icon =\n suite.status === \"passed\"\n ? c.green(\"✓\")\n : suite.status === \"skipped\"\n ? c.yellow(\"○\")\n : c.red(\"✗\");\n return ` ${icon} ${c.bold(suite.name)}`;\n}\n\nfunction formatTest(test: TestRunResult, c: Colorize): string {\n const icon =\n test.status === \"passed\"\n ? c.green(\"✓\")\n : test.status === \"skipped\"\n ? c.yellow(\"○\")\n : c.red(\"✗\");\n return ` ${icon} ${test.name}`;\n}\n\nfunction formatTestMeta(test: TestRunResult, c: Colorize): string | null {\n if (test.status === \"skipped\") return null;\n\n const parts: string[] = [];\n if (test.modelId) parts.push(test.modelId);\n if (test.latencyMs > 0) parts.push(formatDuration(test.latencyMs));\n if (test.costUsd >= 0.00005) parts.push(formatCost(test.costUsd));\n\n if (parts.length === 0) return null;\n return ` ${c.dim(parts.join(\" · \"))}`;\n}\n\nfunction formatAssertion(a: AssertionResult, c: Colorize): string {\n if (a.passed) {\n const scoreStr = formatScore(a);\n const label = scoreStr ? `${a.label} ${c.cyan(scoreStr)}` : a.label;\n return ` ${c.green(\"✓\")} ${c.dim(label)}`;\n }\n const scoreStr = formatScore(a);\n const detail = a.failureMessage ?? \"failed\";\n const label = scoreStr ? `${a.label} ${c.cyan(scoreStr)}` : a.label;\n return ` ${c.red(\"✗\")} ${label}: ${detail}`;\n}\n\nfunction formatScore(a: AssertionResult): string {\n // Show score for judge and drift assertions where score is meaningful\n if (a.assertionType === \"judge\" || a.assertionType === \"drift\") {\n const threshold = extractThreshold(a);\n if (threshold !== null) {\n const symbol = a.passed ? \"≥\" : \"<\";\n return `(${a.score.toFixed(2)} ${symbol} ${threshold.toFixed(2)})`;\n }\n return `(${a.score.toFixed(2)})`;\n }\n return \"\";\n}\n\nfunction extractThreshold(a: AssertionResult): number | null {\n if (a.metadata && typeof a.metadata === \"object\" && \"threshold\" in a.metadata) {\n const t = a.metadata.threshold;\n if (typeof t === \"number\") return t;\n }\n // Try to extract from label like \"Judge: criteria\" or failure message\n if (a.failureMessage) {\n const match = a.failureMessage.match(/threshold (\\d+\\.?\\d*)/i);\n if (match?.[1]) return parseFloat(match[1]);\n const belowMatch = a.failureMessage.match(/below (\\d+\\.?\\d*)/i);\n if (belowMatch?.[1]) return parseFloat(belowMatch[1]);\n }\n return null;\n}\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n return `${(ms / 1000).toFixed(2)}s`;\n}\n\nfunction formatCost(usd: number): string {\n if (usd < 0.01) return `$${usd.toFixed(4)}`;\n return `$${usd.toFixed(2)}`;\n}\n","import type { Reporter, ReporterOutput } from \"./interface.js\";\nimport type { RunResult } from \"../engine/runner.js\";\nimport type { GateEvaluation } from \"../engine/gate.js\";\n\nexport function createJsonReporter(): Reporter {\n return {\n name: \"json\",\n generate(runResult: RunResult, gateEvaluation: GateEvaluation): ReporterOutput {\n const report = {\n kindlm: {\n version: \"1.0.0\",\n timestamp: new Date().toISOString(),\n },\n summary: {\n totalTests: runResult.totalTests,\n passed: runResult.passed,\n failed: runResult.failed,\n errored: runResult.errored,\n skipped: runResult.skipped,\n durationMs: runResult.durationMs,\n },\n gates: {\n passed: gateEvaluation.passed,\n results: gateEvaluation.gates,\n },\n suites: runResult.suites.map((suite) => ({\n name: suite.name,\n status: suite.status,\n tests: suite.tests.map((test) => ({\n name: test.name,\n status: test.status,\n assertions: test.assertions,\n latencyMs: test.latencyMs,\n costUsd: test.costUsd,\n })),\n })),\n };\n\n return { content: JSON.stringify(report, null, 2), format: \"json\" };\n },\n };\n}\n","import type { Reporter, ReporterOutput } from \"./interface.js\";\nimport type { RunResult } from \"../engine/runner.js\";\nimport type { GateEvaluation } from \"../engine/gate.js\";\n\nexport function createJunitReporter(): Reporter {\n return {\n name: \"junit\",\n generate(runResult: RunResult, gateEvaluation: GateEvaluation): ReporterOutput {\n const totalTime = runResult.durationMs / 1000;\n const lines: string[] = [];\n\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\"?>');\n lines.push(\n `<testsuites name=\"KindLM\" tests=\"${runResult.totalTests}\" failures=\"${runResult.failed}\" errors=\"${runResult.errored}\" time=\"${totalTime.toFixed(3)}\">`,\n );\n\n for (const suite of runResult.suites) {\n const suiteFailures = suite.tests.filter(\n (t) => t.status === \"failed\",\n ).length;\n const suiteErrors = suite.tests.filter(\n (t) => t.status === \"errored\",\n ).length;\n const suiteTime =\n suite.tests.reduce((s, t) => s + t.latencyMs, 0) / 1000;\n\n lines.push(\n ` <testsuite name=\"${esc(suite.name)}\" tests=\"${suite.tests.length}\" failures=\"${suiteFailures}\" errors=\"${suiteErrors}\" time=\"${suiteTime.toFixed(3)}\">`,\n );\n\n for (const test of suite.tests) {\n const testTime = test.latencyMs / 1000;\n lines.push(\n ` <testcase name=\"${esc(test.name)}\" classname=\"${esc(suite.name)}\" time=\"${testTime.toFixed(3)}\">`,\n );\n\n if (test.status === \"skipped\") {\n lines.push(\" <skipped/>\");\n } else if (test.status === \"errored\" && test.error) {\n lines.push(\n ` <error message=\"${esc(test.error.message)}\" type=\"${esc(test.error.code)}\">${esc(test.error.message)}</error>`,\n );\n } else if (test.status === \"failed\") {\n const failedAssertions = test.assertions.filter(\n (a) => !a.passed,\n );\n for (const a of failedAssertions) {\n lines.push(\n ` <failure message=\"${esc(a.label)}\" type=\"${esc(a.failureCode ?? \"ASSERTION_FAILED\")}\">${esc(a.failureMessage ?? \"Assertion failed\")}</failure>`,\n );\n }\n }\n\n lines.push(\" </testcase>\");\n }\n\n lines.push(\" </testsuite>\");\n }\n\n // Quality gates as a separate test suite\n if (gateEvaluation.gates.length > 0) {\n const gateFailures = gateEvaluation.gates.filter(\n (g) => !g.passed,\n ).length;\n lines.push(\n ` <testsuite name=\"Quality Gates\" tests=\"${gateEvaluation.gates.length}\" failures=\"${gateFailures}\" errors=\"0\" time=\"0.000\">`,\n );\n for (const gate of gateEvaluation.gates) {\n lines.push(\n ` <testcase name=\"${esc(gate.gateName)}\" classname=\"Quality Gates\" time=\"0.000\">`,\n );\n if (!gate.passed) {\n lines.push(\n ` <failure message=\"${esc(gate.message)}\" type=\"GATE_FAILED\">${esc(gate.message)}</failure>`,\n );\n }\n lines.push(\" </testcase>\");\n }\n lines.push(\" </testsuite>\");\n }\n\n lines.push(\"</testsuites>\");\n\n return { content: lines.join(\"\\n\"), format: \"xml\" };\n },\n };\n}\n\nfunction esc(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&apos;\");\n}\n","import { createHash } from \"node:crypto\";\nimport type { Reporter, ReporterOutput } from \"./interface.js\";\nimport type { RunResult } from \"../engine/runner.js\";\nimport type { GateEvaluation } from \"../engine/gate.js\";\n\nexport function createComplianceReporter(): Reporter {\n return {\n name: \"compliance\",\n generate(runResult: RunResult, gateEvaluation: GateEvaluation): ReporterOutput {\n const timestamp = new Date().toISOString();\n const sections: string[] = [];\n\n sections.push(\"# EU AI Act — Annex IV Compliance Report\");\n sections.push(\"\");\n sections.push(`**Generated:** ${timestamp}`);\n sections.push(`**Framework:** EU AI Act (Regulation 2024/1689)`);\n sections.push(`**Tool:** KindLM v1.0.0`);\n sections.push(\"\");\n\n // Article 9 — Risk Management\n sections.push(\"## Article 9 — Risk Management System\");\n sections.push(\"\");\n sections.push(\"Testing demonstrates ongoing risk identification and mitigation through automated behavioral regression tests.\");\n sections.push(\"\");\n sections.push(formatGateEvidence(gateEvaluation, [\"passRateMin\"]));\n\n // Article 10 — Data and Data Governance\n sections.push(\"## Article 10 — Data and Data Governance\");\n sections.push(\"\");\n sections.push(\"PII detection guardrails verify that personal data is not exposed in AI system outputs.\");\n sections.push(\"\");\n sections.push(formatGateEvidence(gateEvaluation, [\"piiFailuresMax\", \"keywordFailuresMax\"]));\n\n // Article 12 — Record-Keeping / Logging\n sections.push(\"## Article 12 — Record-Keeping\");\n sections.push(\"\");\n sections.push(\"### Test Execution Log\");\n sections.push(\"\");\n sections.push(`| Metric | Value |`);\n sections.push(`|--------|-------|`);\n sections.push(`| Total Tests | ${runResult.totalTests} |`);\n sections.push(`| Passed | ${runResult.passed} |`);\n sections.push(`| Failed | ${runResult.failed} |`);\n sections.push(`| Errored | ${runResult.errored} |`);\n sections.push(`| Duration | ${runResult.durationMs}ms |`);\n sections.push(\"\");\n sections.push(\"### Suite Results\");\n sections.push(\"\");\n for (const suite of runResult.suites) {\n sections.push(`**${suite.name}** — ${suite.status}`);\n for (const test of suite.tests) {\n const icon = test.status === \"passed\" ? \"PASS\" : \"FAIL\";\n sections.push(`- [${icon}] ${test.name}`);\n }\n sections.push(\"\");\n }\n\n // Article 13 — Transparency\n sections.push(\"## Article 13 — Transparency and Provision of Information\");\n sections.push(\"\");\n sections.push(\"This report provides transparent documentation of AI system testing methodology, results, and quality gate evaluations as required under Article 13.\");\n sections.push(\"\");\n sections.push(formatGateEvidence(gateEvaluation, [\"judgeAvgMin\", \"driftScoreMax\"]));\n\n // Article 15 — Accuracy, Robustness and Cybersecurity\n sections.push(\"## Article 15 — Accuracy, Robustness and Cybersecurity\");\n sections.push(\"\");\n sections.push(\"Schema validation and behavioral assertions verify output accuracy and robustness.\");\n sections.push(\"\");\n sections.push(formatGateEvidence(gateEvaluation, [\"schemaFailuresMax\", \"costMaxUsd\", \"latencyMaxMs\"]));\n\n // Gate Summary\n sections.push(\"## Quality Gate Summary\");\n sections.push(\"\");\n sections.push(`| Gate | Result | Actual | Threshold |`);\n sections.push(`|------|--------|--------|-----------|`);\n for (const gate of gateEvaluation.gates) {\n const result = gate.passed ? \"PASS\" : \"FAIL\";\n sections.push(`| ${gate.gateName} | ${result} | ${fmtNum(gate.actual)} | ${fmtNum(gate.threshold)} |`);\n }\n sections.push(\"\");\n\n const verdict = gateEvaluation.passed ? \"PASS\" : \"FAIL\";\n sections.push(`**Overall Verdict:** ${verdict}`);\n sections.push(\"\");\n\n // Hash — computed over everything above\n const contentAboveHash = sections.join(\"\\n\");\n const hash = createHash(\"sha256\")\n .update(contentAboveHash)\n .digest(\"hex\");\n\n sections.push(\"---\");\n sections.push(`**Tamper Evidence Hash (SHA-256):** \\`${hash}\\``);\n sections.push(\"\");\n\n return { content: sections.join(\"\\n\"), format: \"markdown\" };\n },\n };\n}\n\nfunction formatGateEvidence(\n gateEvaluation: GateEvaluation,\n gateNames: string[],\n): string {\n const relevant = gateEvaluation.gates.filter((g) =>\n gateNames.includes(g.gateName),\n );\n if (relevant.length === 0) return \"\";\n\n const lines: string[] = [];\n lines.push(\"**Gate Evidence:**\");\n for (const gate of relevant) {\n const icon = gate.passed ? \"PASS\" : \"FAIL\";\n lines.push(`- [${icon}] ${gate.message}`);\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n\nfunction fmtNum(n: number): string {\n if (Number.isInteger(n)) return String(n);\n return n.toFixed(4);\n}\n","import type { Result } from \"../types/result.js\";\nimport { ok, err } from \"../types/result.js\";\n\n// ============================================================\n// Constants\n// ============================================================\n\nexport const BASELINE_VERSION = \"1\";\n\n// ============================================================\n// Types\n// ============================================================\n\nexport interface BaselineIO {\n read(suiteName: string): Result<string>;\n write(suiteName: string, content: string): Result<void>;\n list(): Result<string[]>;\n}\n\nexport interface BaselineTestEntry {\n passRate: number;\n outputText: string;\n failureCodes: string[];\n latencyAvgMs: number;\n costUsd: number;\n runCount: number;\n}\n\nexport interface BaselineData {\n version: string;\n suiteName: string;\n createdAt: string;\n results: Record<string, BaselineTestEntry>;\n}\n\n// ============================================================\n// Serialization\n// ============================================================\n\nexport function serializeBaseline(data: BaselineData): string {\n return JSON.stringify(data, null, 2);\n}\n\nexport function deserializeBaseline(raw: string): Result<BaselineData> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return err({\n code: \"BASELINE_CORRUPT\",\n message: \"Baseline file is not valid JSON\",\n });\n }\n\n if (typeof parsed !== \"object\" || parsed === null) {\n return err({\n code: \"BASELINE_CORRUPT\",\n message: \"Baseline file is not a JSON object\",\n });\n }\n\n const obj = parsed as Record<string, unknown>;\n\n if (typeof obj[\"version\"] !== \"string\") {\n return err({\n code: \"BASELINE_CORRUPT\",\n message: \"Baseline file missing required field: version\",\n });\n }\n\n if (obj[\"version\"] !== BASELINE_VERSION) {\n return err({\n code: \"BASELINE_VERSION_MISMATCH\",\n message: `Baseline version \"${obj[\"version\"]}\" does not match expected \"${BASELINE_VERSION}\". Re-run \\`kindlm baseline set\\` to update.`,\n });\n }\n\n if (typeof obj[\"suiteName\"] !== \"string\") {\n return err({\n code: \"BASELINE_CORRUPT\",\n message: \"Baseline file missing required field: suiteName\",\n });\n }\n\n if (typeof obj[\"createdAt\"] !== \"string\") {\n return err({\n code: \"BASELINE_CORRUPT\",\n message: \"Baseline file missing required field: createdAt\",\n });\n }\n\n if (typeof obj[\"results\"] !== \"object\" || obj[\"results\"] === null) {\n return err({\n code: \"BASELINE_CORRUPT\",\n message: \"Baseline file missing required field: results\",\n });\n }\n\n return ok(parsed as BaselineData);\n}\n\n// ============================================================\n// I/O-delegating functions\n// ============================================================\n\nexport function readBaseline(suiteName: string, io: BaselineIO): Result<BaselineData> {\n const readResult = io.read(suiteName);\n if (!readResult.success) {\n return readResult;\n }\n\n return deserializeBaseline(readResult.data);\n}\n\nexport function writeBaseline(data: BaselineData, io: BaselineIO): Result<void> {\n const content = serializeBaseline(data);\n return io.write(data.suiteName, content);\n}\n\nexport function listBaselines(io: BaselineIO): Result<string[]> {\n return io.list();\n}\n","import type { AggregatedTestResult } from \"../engine/aggregator.js\";\nimport type { BaselineData, BaselineTestEntry } from \"./store.js\";\nimport { BASELINE_VERSION } from \"./store.js\";\n\nexport function buildBaselineData(\n suiteName: string,\n aggregated: AggregatedTestResult[],\n timestamp: string,\n): BaselineData {\n const results: Record<string, BaselineTestEntry> = {};\n\n for (const agg of aggregated) {\n const key = `${agg.testCaseName}::${agg.modelId}`;\n\n // Pick representative output: first passing run, or first run if all failed\n const passingRun = agg.runs.find((r) => r.assertions.every((a) => a.passed));\n const representative = passingRun ?? agg.runs[0];\n\n results[key] = {\n passRate: agg.passRate,\n outputText: representative?.outputText ?? \"\",\n failureCodes: agg.failureCodes,\n latencyAvgMs: agg.latencyAvgMs,\n costUsd: agg.totalCostUsd,\n runCount: agg.runCount,\n };\n }\n\n return {\n version: BASELINE_VERSION,\n suiteName,\n createdAt: timestamp,\n results,\n };\n}\n","import type { BaselineData, BaselineTestEntry } from \"./store.js\";\n\n// ============================================================\n// Types\n// ============================================================\n\nexport interface BaselineComparison {\n suiteName: string;\n hasBaseline: boolean;\n regressions: BaselineRegression[];\n improvements: BaselineImprovement[];\n unchanged: BaselineUnchanged[];\n newTests: string[];\n removedTests: string[];\n}\n\nexport interface BaselineRegression {\n testName: string;\n baselinePassRate: number;\n currentPassRate: number;\n newFailureCodes: string[];\n}\n\nexport interface BaselineImprovement {\n testName: string;\n baselinePassRate: number;\n currentPassRate: number;\n}\n\nexport interface BaselineUnchanged {\n testName: string;\n passRate: number;\n}\n\n// ============================================================\n// Comparison\n// ============================================================\n\nconst EPSILON = 0.001;\n\nexport function compareBaseline(\n baseline: BaselineData,\n currentResults: Record<string, BaselineTestEntry>,\n): BaselineComparison {\n const regressions: BaselineRegression[] = [];\n const improvements: BaselineImprovement[] = [];\n const unchanged: BaselineUnchanged[] = [];\n const newTests: string[] = [];\n const removedTests: string[] = [];\n\n const baselineKeys = new Set(Object.keys(baseline.results));\n\n // Classify current tests\n for (const [key, current] of Object.entries(currentResults)) {\n const base = baseline.results[key];\n if (!base) {\n newTests.push(key);\n continue;\n }\n\n baselineKeys.delete(key);\n const diff = current.passRate - base.passRate;\n\n if (diff < -EPSILON) {\n const newFailureCodes = current.failureCodes.filter(\n (code) => !base.failureCodes.includes(code),\n );\n regressions.push({\n testName: key,\n baselinePassRate: base.passRate,\n currentPassRate: current.passRate,\n newFailureCodes,\n });\n } else if (diff > EPSILON) {\n improvements.push({\n testName: key,\n baselinePassRate: base.passRate,\n currentPassRate: current.passRate,\n });\n } else {\n unchanged.push({\n testName: key,\n passRate: current.passRate,\n });\n }\n }\n\n // Remaining baseline keys are removed tests\n for (const key of baselineKeys) {\n removedTests.push(key);\n }\n\n return {\n suiteName: baseline.suiteName,\n hasBaseline: true,\n regressions,\n improvements,\n unchanged,\n newTests,\n removedTests,\n };\n}\n","import type { Result } from \"../types/result.js\";\nimport { ok, err } from \"../types/result.js\";\nimport type {\n OtlpTracesPayload,\n OtlpAttribute,\n OtlpAttributeValue,\n ParsedSpan,\n} from \"./types.js\";\n\nexport function parseOtlpPayload(raw: unknown): Result<ParsedSpan[]> {\n if (!raw || typeof raw !== \"object\") {\n return err({\n code: \"CONFIG_PARSE_ERROR\",\n message: \"OTLP payload must be a non-null object\",\n });\n }\n\n const payload = raw as OtlpTracesPayload;\n if (!Array.isArray(payload.resourceSpans)) {\n return err({\n code: \"CONFIG_PARSE_ERROR\",\n message: \"OTLP payload missing resourceSpans array\",\n });\n }\n\n const spans: ParsedSpan[] = [];\n\n for (const resourceSpan of payload.resourceSpans) {\n const resourceAttrs = flattenAttributes(resourceSpan.resource?.attributes ?? []);\n\n if (!Array.isArray(resourceSpan.scopeSpans)) continue;\n\n for (const scopeSpan of resourceSpan.scopeSpans) {\n if (!Array.isArray(scopeSpan.spans)) continue;\n\n for (const span of scopeSpan.spans) {\n const startTimeMs = nanosToMs(span.startTimeUnixNano);\n const endTimeMs = nanosToMs(span.endTimeUnixNano);\n\n spans.push({\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId || undefined,\n name: span.name,\n kind: span.kind,\n startTimeMs,\n endTimeMs,\n durationMs: endTimeMs - startTimeMs,\n attributes: flattenAttributes(span.attributes ?? []),\n resourceAttributes: resourceAttrs,\n statusCode: span.status?.code,\n statusMessage: span.status?.message,\n });\n }\n }\n }\n\n return ok(spans);\n}\n\nfunction nanosToMs(nanos: string): number {\n const n = BigInt(nanos);\n return Number(n / 1_000_000n);\n}\n\nfunction flattenAttributes(\n attrs: OtlpAttribute[],\n): Record<string, string | number | boolean> {\n const result: Record<string, string | number | boolean> = {};\n\n for (const attr of attrs) {\n const val = extractValue(attr.value);\n if (val !== undefined) {\n result[attr.key] = val;\n }\n }\n\n return result;\n}\n\nfunction extractValue(\n value: OtlpAttributeValue,\n): string | number | boolean | undefined {\n if (value.stringValue !== undefined) return value.stringValue;\n if (value.intValue !== undefined) return parseInt(value.intValue, 10);\n if (value.doubleValue !== undefined) return value.doubleValue;\n if (value.boolValue !== undefined) return value.boolValue;\n return undefined;\n}\n","import type { AssertionContext } from \"../assertions/interface.js\";\nimport type { ProviderToolCall, ProviderAdapter } from \"../types/provider.js\";\nimport type { ParsedSpan, SpanMapping, SpanFilter, SpanMappingResult } from \"./types.js\";\n\nexport function filterSpans(spans: ParsedSpan[], filter?: SpanFilter): ParsedSpan[] {\n if (!filter) return spans;\n\n return spans.filter((span) => {\n if (filter.namePattern) {\n const re = new RegExp(filter.namePattern);\n if (!re.test(span.name)) return false;\n }\n\n if (filter.attributeMatch) {\n for (const [key, value] of Object.entries(filter.attributeMatch)) {\n if (String(span.attributes[key]) !== value) return false;\n }\n }\n\n if (filter.minDurationMs !== undefined) {\n if (span.durationMs < filter.minDurationMs) return false;\n }\n\n return true;\n });\n}\n\nexport function mapSpansToResult(\n spans: ParsedSpan[],\n mapping: SpanMapping,\n): SpanMappingResult {\n let outputText = \"\";\n const toolCalls: { id: string; name: string; arguments: Record<string, unknown> }[] = [];\n let latencyMs = 0;\n let inputTokens = 0;\n let outputTokens = 0;\n let model: string | undefined;\n let system: string | undefined;\n\n for (const span of spans) {\n const attrs = { ...span.resourceAttributes, ...span.attributes };\n\n // Extract output text from the configured attribute\n const text = attrs[mapping.outputTextAttr];\n if (typeof text === \"string\" && text) {\n outputText = outputText ? `${outputText}\\n${text}` : text;\n }\n\n // Extract model\n const m = attrs[mapping.modelAttr];\n if (typeof m === \"string\" && m) {\n model = m;\n }\n\n // Extract system\n const s = attrs[mapping.systemAttr];\n if (typeof s === \"string\" && s) {\n system = s;\n }\n\n // Extract tokens\n const inTok = attrs[mapping.inputTokensAttr];\n if (typeof inTok === \"number\") {\n inputTokens += inTok;\n }\n const outTok = attrs[mapping.outputTokensAttr];\n if (typeof outTok === \"number\") {\n outputTokens += outTok;\n }\n\n // Accumulate latency from root spans (no parent)\n if (!span.parentSpanId) {\n latencyMs += span.durationMs;\n }\n\n // Look for tool call attributes (GenAI convention)\n const toolName = attrs[\"gen_ai.tool.name\"];\n const toolArgs = attrs[\"gen_ai.tool.arguments\"];\n if (typeof toolName === \"string\") {\n let parsedArgs: Record<string, unknown> = {};\n if (typeof toolArgs === \"string\") {\n try {\n parsedArgs = JSON.parse(toolArgs) as Record<string, unknown>;\n } catch {\n // ignore parse errors\n }\n }\n toolCalls.push({\n id: span.spanId,\n name: toolName,\n arguments: parsedArgs,\n });\n }\n }\n\n return {\n outputText,\n toolCalls,\n latencyMs,\n inputTokens,\n outputTokens,\n model,\n system,\n };\n}\n\nexport interface BuildContextOptions {\n configDir: string;\n judgeAdapter?: ProviderAdapter;\n judgeModel?: string;\n baselineText?: string;\n}\n\nexport function buildContextFromTrace(\n result: SpanMappingResult,\n options: BuildContextOptions,\n): AssertionContext {\n const toolCalls: ProviderToolCall[] = result.toolCalls.map((tc) => ({\n id: tc.id,\n name: tc.name,\n arguments: tc.arguments,\n }));\n\n return {\n outputText: result.outputText,\n toolCalls,\n configDir: options.configDir,\n latencyMs: result.latencyMs,\n judgeAdapter: options.judgeAdapter,\n judgeModel: options.judgeModel,\n baselineText: options.baselineText,\n };\n}\n","import { readFileSync } from \"node:fs\";\nimport type { FileReader, Result } from \"@kindlm/core\";\n\nexport function createNodeFileReader(): FileReader {\n return {\n readFile(path: string): Result<string> {\n try {\n return { success: true, data: readFileSync(path, \"utf-8\") };\n } catch (e) {\n return {\n success: false,\n error: {\n code: \"CONFIG_FILE_REF_ERROR\",\n message: `Cannot read file: ${path}: ${e instanceof Error ? e.message : String(e)}`,\n },\n };\n }\n },\n };\n}\n","/* eslint-disable no-console */\nimport type { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n evaluateGates,\n createPrettyReporter,\n createJsonReporter,\n createJunitReporter,\n createComplianceReporter,\n ProviderError,\n} from \"@kindlm/core\";\nimport type { Colorize, KindlmError } from \"@kindlm/core\";\nimport { runTests } from \"../utils/run-tests.js\";\nimport { saveLastRun, computeConfigHash } from \"../utils/last-run.js\";\nimport { renderCompliancePdf } from \"../utils/pdf-renderer.js\";\n\ninterface TestOptions {\n suite?: string;\n compliance?: boolean;\n reporter: string;\n runs?: string;\n gate?: string;\n config: string;\n pdf?: string;\n}\n\nexport function registerTestCommand(program: Command): void {\n program\n .command(\"test\")\n .description(\"Run test suites\")\n .option(\"-s, --suite <name>\", \"Run a specific suite\")\n .option(\"--compliance\", \"Generate compliance report\")\n .option(\"--reporter <type>\", \"Output format: pretty, json, junit\", \"pretty\")\n .option(\"--runs <count>\", \"Override run count\")\n .option(\"--gate <percent>\", \"Fail if pass rate below threshold\")\n .option(\"--pdf <path>\", \"Export compliance report as PDF (requires --compliance)\")\n .option(\"-c, --config <path>\", \"Path to config file\", \"kindlm.yaml\")\n .action(async (options: TestOptions) => {\n try {\n const { runnerResult, config, yamlContent } = await runTests({\n configPath: options.config,\n runs: options.runs ? parseInt(options.runs, 10) : undefined,\n gate: options.gate ? parseFloat(options.gate) : undefined,\n });\n\n const { runResult: result, aggregated } = runnerResult;\n\n // Evaluate gates\n const gateEvaluation = evaluateGates(config.gates, aggregated);\n\n // Select + generate report\n const reporter = selectReporter(options.reporter);\n const report = reporter.generate(result, gateEvaluation);\n console.log(report.content);\n\n // Compliance report\n if (options.compliance) {\n const complianceReporter = createComplianceReporter();\n const complianceReport = complianceReporter.generate(result, gateEvaluation);\n console.log(\"\");\n console.log(complianceReport.content);\n\n // PDF export\n if (options.pdf) {\n const pdfPath = await renderCompliancePdf(complianceReport.content, options.pdf);\n console.log(\"\");\n console.log(chalk.green(`PDF report saved to ${pdfPath}`));\n }\n }\n\n // Cache last run for upload\n try {\n saveLastRun({\n runnerResult,\n suiteName: config.suite.name,\n configHash: computeConfigHash(yamlContent),\n timestamp: new Date().toISOString(),\n });\n } catch {\n // Non-fatal — don't block exit on cache failure\n }\n\n // Exit code\n const allPassed = result.failed === 0 && result.errored === 0 && gateEvaluation.passed;\n process.exit(allPassed ? 0 : 1);\n } catch (e) {\n if (e instanceof ProviderError) {\n const prefix = e.code === \"TIMEOUT\"\n ? \"Provider timeout\"\n : e.code === \"NETWORK_ERROR\"\n ? \"Network error\"\n : e.code === \"AUTH_FAILED\"\n ? \"Authentication failed\"\n : e.code === \"RATE_LIMITED\"\n ? \"Rate limited\"\n : `Provider error (${e.code})`;\n console.error(chalk.red(`${prefix}: ${e.message}`));\n if (e.retryable) {\n console.error(chalk.yellow(\"This error may be transient. Try again or increase --timeout.\"));\n }\n } else if (isKindlmError(e)) {\n const isConfig = e.code.startsWith(\"CONFIG_\");\n const label = isConfig ? \"Config error\" : \"Error\";\n console.error(chalk.red(`${label}: ${e.message}`));\n } else if (e instanceof Error && e.name === \"AbortError\") {\n console.error(chalk.red(\"Request timed out. Check network connectivity or increase timeout.\"));\n } else {\n console.error(chalk.red(`Error: ${e instanceof Error ? e.message : String(e)}`));\n }\n process.exit(1);\n }\n });\n}\n\nconst chalkColorize: Colorize = {\n bold: (t) => chalk.bold(t),\n red: (t) => chalk.red(t),\n green: (t) => chalk.green(t),\n yellow: (t) => chalk.yellow(t),\n cyan: (t) => chalk.cyan(t),\n dim: (t) => chalk.dim(t),\n greenBold: (t) => chalk.green.bold(t),\n redBold: (t) => chalk.red.bold(t),\n};\n\nfunction selectReporter(type: string) {\n switch (type) {\n case \"json\":\n return createJsonReporter();\n case \"junit\":\n return createJunitReporter();\n case \"pretty\":\n default:\n return createPrettyReporter(chalkColorize);\n }\n}\n\nfunction isKindlmError(e: unknown): e is KindlmError {\n return (\n typeof e === \"object\" &&\n e !== null &&\n \"code\" in e &&\n \"message\" in e &&\n typeof (e as KindlmError).code === \"string\" &&\n typeof (e as KindlmError).message === \"string\"\n );\n}\n","/* eslint-disable no-console */\nimport { readFileSync, statSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport chalk from \"chalk\";\nimport {\n parseConfig,\n createProvider,\n createRunner,\n} from \"@kindlm/core\";\nimport type {\n ProviderAdapter,\n KindLMConfig,\n ProgressEvent,\n RunnerResult,\n BaselineData,\n} from \"@kindlm/core\";\nimport { createHttpClient } from \"./http.js\";\nimport { createSpinner } from \"./spinner.js\";\nimport { createNodeFileReader } from \"./file-reader.js\";\nimport { createNodeCommandExecutor } from \"./command-executor.js\";\n\nexport interface RunTestsOptions {\n configPath: string;\n runs?: number;\n gate?: number;\n baselineData?: BaselineData;\n}\n\nexport interface RunTestsResult {\n config: KindLMConfig;\n runnerResult: RunnerResult;\n configDir: string;\n yamlContent: string;\n}\n\nconst MAX_CONFIG_SIZE = 1_048_576; // 1MB\n\nexport async function runTests(options: RunTestsOptions): Promise<RunTestsResult> {\n const spinner = createSpinner();\n\n // SIGINT handler: stop spinner, print partial results, exit 130\n let interrupted = false;\n const sigintHandler = () => {\n if (interrupted) process.exit(130);\n interrupted = true;\n spinner.stop();\n console.error(chalk.yellow(\"\\nInterrupted. Exiting...\"));\n process.exit(130);\n };\n process.on(\"SIGINT\", sigintHandler);\n\n try {\n return await runTestsInner(options, spinner);\n } finally {\n process.removeListener(\"SIGINT\", sigintHandler);\n }\n}\n\nasync function runTestsInner(\n options: RunTestsOptions,\n spinner: ReturnType<typeof createSpinner>,\n): Promise<RunTestsResult> {\n // 1. Read config\n const configPath = resolve(process.cwd(), options.configPath);\n const configDir = dirname(configPath);\n\n // Check file size before reading\n try {\n const stat = statSync(configPath);\n if (stat.size > MAX_CONFIG_SIZE) {\n console.error(chalk.red(`Config file exceeds 1MB limit (${(stat.size / 1_048_576).toFixed(1)}MB): ${configPath}`));\n process.exit(1);\n }\n } catch {\n console.error(chalk.red(`Config file not found: ${configPath}`));\n process.exit(1);\n }\n\n let yamlContent: string;\n try {\n yamlContent = readFileSync(configPath, \"utf-8\");\n } catch {\n console.error(chalk.red(`Config file not found: ${configPath}`));\n process.exit(1);\n }\n\n // 2. Parse + validate\n const fileReader = createNodeFileReader();\n const parseResult = parseConfig(yamlContent, { configDir, fileReader });\n if (!parseResult.success) {\n console.error(chalk.red(`Config validation failed: ${parseResult.error.message}`));\n process.exit(1);\n }\n\n const config: KindLMConfig = parseResult.data;\n\n // 3. Apply CLI overrides\n if (options.runs !== undefined) {\n config.defaults.repeat = options.runs;\n }\n if (options.gate !== undefined) {\n if (!config.gates) {\n config.gates = { passRateMin: options.gate / 100 } as KindLMConfig[\"gates\"];\n } else {\n config.gates.passRateMin = options.gate / 100;\n }\n }\n\n // 4. Resolve API keys + create provider adapters\n const httpClient = createHttpClient();\n const adapters = new Map<string, ProviderAdapter>();\n\n const providers = config.providers as Record<string, { apiKeyEnv?: string; baseUrl?: string; organization?: string } | undefined>;\n for (const [name, providerConfig] of Object.entries(providers)) {\n if (!providerConfig) continue;\n\n let apiKey = \"\";\n if (providerConfig.apiKeyEnv) {\n const key = process.env[providerConfig.apiKeyEnv];\n if (!key) {\n console.error(chalk.red(`Missing environment variable: ${providerConfig.apiKeyEnv}`));\n process.exit(1);\n }\n apiKey = key.trim();\n } else if (name !== \"ollama\") {\n console.error(chalk.red(`Provider \"${name}\" requires apiKeyEnv to be configured`));\n process.exit(1);\n }\n\n let adapter: ProviderAdapter;\n try {\n adapter = createProvider(name, httpClient);\n } catch (cause) {\n const msg = cause instanceof Error ? cause.message : String(cause);\n console.error(chalk.red(`Failed to create provider \"${name}\": ${msg}`));\n process.exit(1);\n }\n\n await adapter.initialize({\n apiKey,\n baseUrl: providerConfig.baseUrl,\n organization: providerConfig.organization,\n timeoutMs: config.defaults.timeoutMs,\n maxRetries: 2,\n });\n\n adapters.set(name, adapter);\n }\n\n // 5. Create + run\n let completedTests = 0;\n const totalTests = countExecutionUnits(config);\n\n const onProgress = (event: ProgressEvent) => {\n if (event.type === \"test_start\") {\n spinner.start(`Running ${event.test} [${event.model}] (${completedTests}/${totalTests})`);\n } else if (event.type === \"test_complete\") {\n completedTests++;\n }\n };\n\n // Check if any tests use command mode\n const hasCommandTests = config.tests.some((t) => t.command);\n const commandExecutor = hasCommandTests ? createNodeCommandExecutor() : undefined;\n\n const runner = createRunner(config, {\n adapters,\n configDir,\n fileReader,\n onProgress,\n baselineData: options.baselineData,\n commandExecutor,\n });\n\n const runResult = await runner.run();\n spinner.stop();\n\n if (!runResult.success) {\n console.error(chalk.red(`Run failed: ${runResult.error.message}`));\n process.exit(1);\n }\n\n return {\n config,\n runnerResult: runResult.data,\n configDir,\n yamlContent,\n };\n}\n\nfunction countExecutionUnits(config: KindLMConfig): number {\n let count = 0;\n for (const test of config.tests) {\n if (test.skip) continue;\n const repeat = test.repeat ?? config.defaults.repeat;\n if (test.command) {\n count += repeat;\n } else {\n const modelCount = test.models?.length ?? config.models.length;\n count += modelCount * repeat;\n }\n }\n return count;\n}\n","import type { HttpClient, HttpRequestInit, HttpResponse } from \"@kindlm/core\";\n\nexport function createHttpClient(): HttpClient {\n return {\n async fetch(url: string, init: HttpRequestInit): Promise<HttpResponse> {\n const controller = new AbortController();\n const timeoutId = init.timeoutMs\n ? setTimeout(() => controller.abort(), init.timeoutMs)\n : undefined;\n\n try {\n const response = await globalThis.fetch(url, {\n method: init.method,\n headers: init.headers,\n body: init.body,\n signal: controller.signal,\n });\n\n return {\n ok: response.ok,\n status: response.status,\n json: () => response.json() as Promise<unknown>,\n };\n } finally {\n if (timeoutId !== undefined) clearTimeout(timeoutId);\n }\n },\n };\n}\n","import ora, { type Ora } from \"ora\";\n\nexport interface Spinner {\n start(text: string): void;\n succeed(text: string): void;\n fail(text: string): void;\n stop(): void;\n}\n\nexport function createSpinner(): Spinner {\n let instance: Ora | undefined;\n\n return {\n start(text: string): void {\n instance = ora(text).start();\n },\n succeed(text: string): void {\n instance?.succeed(text);\n instance = undefined;\n },\n fail(text: string): void {\n instance?.fail(text);\n instance = undefined;\n },\n stop(): void {\n instance?.stop();\n instance = undefined;\n },\n };\n}\n","import { spawn } from \"node:child_process\";\nimport { ok, err } from \"@kindlm/core\";\nimport type { CommandExecutor, CommandExecuteOptions, RawCommandOutput, Result } from \"@kindlm/core\";\n\nexport function createNodeCommandExecutor(): CommandExecutor {\n return {\n async execute(command: string, options: CommandExecuteOptions): Promise<Result<RawCommandOutput>> {\n return new Promise((resolve) => {\n const child = spawn(\"sh\", [\"-c\", command], {\n cwd: options.cwd,\n env: { ...process.env, ...options.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n\n child.stdout.on(\"data\", (chunk: Buffer) => stdoutChunks.push(chunk));\n child.stderr.on(\"data\", (chunk: Buffer) => stderrChunks.push(chunk));\n\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\");\n setTimeout(() => {\n if (!child.killed) child.kill(\"SIGKILL\");\n }, 1000);\n }, options.timeoutMs);\n\n child.on(\"close\", (code, signal) => {\n clearTimeout(timer);\n\n if (signal === \"SIGTERM\" || signal === \"SIGKILL\") {\n resolve(err({\n code: \"PROVIDER_TIMEOUT\",\n message: `Command timed out after ${options.timeoutMs}ms`,\n }));\n return;\n }\n\n resolve(ok({\n stdout: Buffer.concat(stdoutChunks).toString(\"utf-8\"),\n stderr: Buffer.concat(stderrChunks).toString(\"utf-8\"),\n exitCode: code ?? 1,\n }));\n });\n\n child.on(\"error\", (e) => {\n clearTimeout(timer);\n resolve(err({\n code: \"UNKNOWN_ERROR\",\n message: `Failed to spawn command: ${e.message}`,\n }));\n });\n });\n },\n };\n}\n","import { readFileSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { RunnerResult } from \"@kindlm/core\";\n\nexport interface LastRunData {\n runnerResult: RunnerResult;\n suiteName: string;\n configHash: string;\n timestamp: string;\n}\n\nfunction getLastRunPath(): string {\n return join(process.cwd(), \".kindlm\", \"last-run.json\");\n}\n\nexport function saveLastRun(data: LastRunData): void {\n const filePath = getLastRunPath();\n const dir = join(process.cwd(), \".kindlm\");\n mkdirSync(dir, { recursive: true, mode: 0o700 });\n\n // Strip individual run data (outputText, full assertions) to reduce file size.\n // Pre-extract failure messages since upload needs them.\n const slimmed: LastRunData = {\n ...data,\n runnerResult: {\n ...data.runnerResult,\n aggregated: data.runnerResult.aggregated.map((agg) => {\n const failureMessages = agg.runs\n .flatMap((r) => r.assertions.filter((a) => !a.passed).map((a) => a.failureMessage))\n .filter((m): m is string => m !== undefined);\n\n return {\n ...agg,\n failureMessages,\n runs: [],\n };\n }),\n },\n };\n\n writeFileSync(filePath, JSON.stringify(slimmed), { mode: 0o600 });\n}\n\nexport function loadLastRun(): LastRunData | null {\n try {\n const raw = readFileSync(getLastRunPath(), \"utf-8\");\n const parsed = JSON.parse(raw) as LastRunData;\n if (\n parsed.runnerResult?.runResult &&\n Array.isArray(parsed.runnerResult.aggregated) &&\n typeof parsed.suiteName === \"string\" &&\n typeof parsed.configHash === \"string\" &&\n typeof parsed.timestamp === \"string\"\n ) {\n return parsed;\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport function computeConfigHash(yamlContent: string): string {\n return createHash(\"sha256\").update(yamlContent).digest(\"hex\");\n}\n","// @ts-expect-error pdfkit has no type declarations\nimport PDFDocument from \"pdfkit\";\nimport { createWriteStream } from \"node:fs\";\nimport { mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\ninterface Section {\n heading: string;\n headingLevel: number;\n body: string;\n}\n\nfunction parseSections(markdown: string): Section[] {\n const lines = markdown.split(\"\\n\");\n const sections: Section[] = [];\n let currentHeading = \"\";\n let currentLevel = 2;\n let currentBody: string[] = [];\n\n for (const line of lines) {\n const headingMatch = line.match(/^(#{2,4})\\s+(.+)$/);\n if (headingMatch && headingMatch[1]?.length === 2) {\n if (currentHeading || currentBody.length > 0) {\n sections.push({ heading: currentHeading, headingLevel: currentLevel, body: currentBody.join(\"\\n\").trim() });\n }\n currentHeading = headingMatch[2]?.trim() ?? \"\";\n currentLevel = 2;\n currentBody = [];\n } else {\n currentBody.push(line);\n }\n }\n\n if (currentHeading || currentBody.length > 0) {\n sections.push({ heading: currentHeading, headingLevel: currentLevel, body: currentBody.join(\"\\n\").trim() });\n }\n\n return sections;\n}\n\nfunction extractTitle(markdown: string): string {\n const match = markdown.match(/^# (.+)$/m);\n return match?.[1]?.trim() ?? \"KindLM Compliance Report\";\n}\n\nfunction extractHash(markdown: string): string | null {\n const match = markdown.match(/SHA-256:\\s*`([a-f0-9]+)`/i);\n return match?.[1] ?? null;\n}\n\nfunction headingSize(level: number): number {\n switch (level) {\n case 2: return 18;\n case 3: return 15;\n case 4: return 13;\n default: return 13;\n }\n}\n\ninterface TableRow {\n cells: string[];\n}\n\nfunction parseTable(lines: string[]): { header: TableRow; rows: TableRow[] } | null {\n if (lines.length < 2) return null;\n const headerLine = lines[0] ?? \"\";\n const separatorLine = lines[1] ?? \"\";\n if (!headerLine.includes(\"|\") || !separatorLine.match(/^\\s*\\|[-:\\s|]+\\|\\s*$/)) return null;\n\n const parseCells = (line: string): string[] =>\n line.split(\"|\").slice(1, -1).map((c) => c.trim());\n\n const header: TableRow = { cells: parseCells(headerLine) };\n const rows: TableRow[] = [];\n for (let i = 2; i < lines.length; i++) {\n const row = lines[i] ?? \"\";\n if (!row.includes(\"|\")) break;\n rows.push({ cells: parseCells(row) });\n }\n return { header, rows };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype PDFDoc = any;\n\nfunction ensureSpace(doc: PDFDoc, needed: number): void {\n const bottomMargin = doc.page.margins.bottom as number;\n const available = (doc.page.height as number) - bottomMargin - 30 - (doc.y as number);\n if (available < needed) {\n doc.addPage();\n renderPageHeader(doc);\n }\n}\n\nfunction renderPageHeader(doc: PDFDoc): void {\n const timestamp = new Date().toISOString();\n doc.fontSize(8).font(\"Helvetica\").fillColor(\"#a8a29e\").text(\"KindLM Compliance Report\", 60, 40);\n doc.text(timestamp, 60, 40, { align: \"right\" });\n doc.moveDown(3);\n}\n\nfunction renderPageFooter(doc: PDFDoc): void {\n doc.fontSize(8).font(\"Helvetica\").fillColor(\"#a8a29e\").text(\n \"Generated by KindLM · kindlm.com\",\n 60,\n (doc.page.height as number) - 50,\n { align: \"center\", width: (doc.page.width as number) - 120 },\n );\n}\n\nfunction renderTable(\n doc: PDFDoc,\n table: { header: TableRow; rows: TableRow[] },\n contentWidth: number,\n): void {\n const colCount = table.header.cells.length;\n const colWidth = contentWidth / colCount;\n const leftMargin = doc.page.margins.left as number;\n const rowHeight = 18;\n\n ensureSpace(doc, rowHeight * 2);\n\n const drawRow = (cells: string[], bold: boolean, bgColor?: string) => {\n const y = doc.y as number;\n if (bgColor) {\n doc.save();\n doc.rect(leftMargin, y - 2, contentWidth, rowHeight).fill(bgColor);\n doc.restore();\n }\n for (let i = 0; i < cells.length; i++) {\n const x = leftMargin + i * colWidth;\n doc.fontSize(8)\n .font(bold ? \"Helvetica-Bold\" : \"Courier\")\n .fillColor(\"#44403c\")\n .text(cells[i] ?? \"\", x + 4, y, { width: colWidth - 8, height: rowHeight, lineBreak: false });\n }\n doc.y = y + rowHeight;\n };\n\n drawRow(table.header.cells, true, \"#f5f5f4\");\n for (const row of table.rows) {\n ensureSpace(doc, rowHeight);\n drawRow(row.cells, false);\n }\n}\n\nexport async function renderCompliancePdf(\n markdownContent: string,\n outputPath: string,\n): Promise<string> {\n await mkdir(dirname(outputPath), { recursive: true });\n\n return new Promise((resolve, reject) => {\n const doc = new PDFDocument({\n size: \"A4\",\n margins: { top: 72, bottom: 72, left: 60, right: 60 },\n info: {\n Title: \"KindLM EU AI Act Compliance Report\",\n Author: \"KindLM\",\n Creator: \"KindLM CLI\",\n },\n });\n\n const stream = createWriteStream(outputPath);\n doc.pipe(stream);\n\n const contentWidth = (doc.page.width as number) - (doc.page.margins.left as number) - (doc.page.margins.right as number);\n const title = extractTitle(markdownContent);\n const hash = extractHash(markdownContent);\n\n // --- Title Page ---\n doc.moveDown(6);\n doc.fontSize(28).font(\"Helvetica-Bold\").fillColor(\"#1c1917\").text(title, { align: \"center\", width: contentWidth });\n doc.moveDown(0.5);\n doc.fontSize(14).font(\"Helvetica\").fillColor(\"#57534e\").text(\"EU AI Act Annex IV Documentation\", { align: \"center\", width: contentWidth });\n doc.moveDown(1);\n doc.fontSize(10).fillColor(\"#a8a29e\").text(`Generated: ${new Date().toISOString()}`, { align: \"center\", width: contentWidth });\n\n if (hash) {\n doc.moveDown(0.3);\n doc.fontSize(9).font(\"Courier\").fillColor(\"#78716c\").text(`SHA-256: ${hash}`, { align: \"center\", width: contentWidth });\n }\n\n doc.moveDown(2);\n doc.fontSize(10).font(\"Helvetica\").fillColor(\"#6366f1\").text(\"kindlm.com\", { align: \"center\", link: \"https://kindlm.com\", width: contentWidth });\n\n // --- Content Pages ---\n const sections = parseSections(markdownContent);\n\n for (const section of sections) {\n doc.addPage();\n renderPageHeader(doc);\n\n if (section.heading) {\n const size = headingSize(section.headingLevel);\n doc.fontSize(size).font(\"Helvetica-Bold\").fillColor(\"#1c1917\").text(section.heading, { width: contentWidth });\n doc.moveDown(0.5);\n doc.moveTo(60, doc.y).lineTo(60 + contentWidth, doc.y).strokeColor(\"#e7e5e4\").lineWidth(1).stroke();\n doc.moveDown(0.8);\n }\n\n const bodyLines = section.body.split(\"\\n\");\n let inCodeBlock = false;\n let i = 0;\n while (i < bodyLines.length) {\n const line = bodyLines[i] ?? \"\";\n\n if (line.startsWith(\"```\")) {\n inCodeBlock = !inCodeBlock;\n if (inCodeBlock) {\n ensureSpace(doc, 30);\n }\n i++;\n continue;\n }\n\n if (inCodeBlock) {\n ensureSpace(doc, 14);\n const codeY = doc.y as number;\n doc.save();\n doc.rect(doc.page.margins.left, codeY - 2, contentWidth, 14).fill(\"#f5f5f4\");\n doc.restore();\n doc.fontSize(9).font(\"Courier\").fillColor(\"#44403c\").text(line, { width: contentWidth });\n i++;\n continue;\n }\n\n if (!line.trim()) {\n doc.moveDown(0.4);\n i++;\n continue;\n }\n\n // Table detection: look ahead for separator line\n const nextLine = bodyLines[i + 1] ?? \"\";\n if (line.includes(\"|\") && i + 1 < bodyLines.length && nextLine.match(/^\\s*\\|[-:\\s|]+\\|\\s*$/)) {\n const tableLines: string[] = [];\n let j = i;\n while (j < bodyLines.length && (bodyLines[j] ?? \"\").includes(\"|\")) {\n tableLines.push(bodyLines[j] ?? \"\");\n j++;\n }\n const table = parseTable(tableLines);\n if (table) {\n renderTable(doc, table, contentWidth);\n i = j;\n continue;\n }\n }\n\n // Skip standalone separator lines\n if (line.match(/^\\s*\\|[-:]+/) || line.match(/^---+$/)) {\n i++;\n continue;\n }\n\n // Subheadings (### and ####)\n const subheadingMatch = line.match(/^(#{3,4})\\s+(.+)$/);\n if (subheadingMatch?.[1] && subheadingMatch[2]) {\n const level = subheadingMatch[1].length;\n const size = headingSize(level);\n ensureSpace(doc, size + 10);\n doc.moveDown(0.3);\n doc.fontSize(size).font(\"Helvetica-Bold\").fillColor(\"#1c1917\").text(subheadingMatch[2].trim(), { width: contentWidth });\n doc.moveDown(0.3);\n i++;\n continue;\n }\n\n // Bullet points\n if (line.match(/^\\s*[-*] /)) {\n ensureSpace(doc, 14);\n doc.fontSize(10).font(\"Helvetica\").fillColor(\"#44403c\").text(line.trim(), { indent: 12, width: contentWidth - 12 });\n i++;\n continue;\n }\n\n // Regular text\n ensureSpace(doc, 14);\n doc.fontSize(10).font(\"Helvetica\").fillColor(\"#44403c\").text(line.trim(), { width: contentWidth });\n i++;\n }\n\n renderPageFooter(doc);\n }\n\n doc.end();\n\n stream.on(\"finish\", () => resolve(outputPath));\n stream.on(\"error\", reject);\n });\n}\n","/* eslint-disable no-console */\nimport type { Command } from \"commander\";\nimport { resolve, dirname, join } from \"node:path\";\nimport { readFileSync } from \"node:fs\";\nimport chalk from \"chalk\";\nimport {\n parseConfig,\n readBaseline,\n writeBaseline,\n listBaselines,\n buildBaselineData,\n compareBaseline,\n deserializeBaseline,\n} from \"@kindlm/core\";\nimport { runTests } from \"../utils/run-tests.js\";\nimport { createFileBaselineIO } from \"../utils/baseline-io.js\";\nimport { createNodeFileReader } from \"../utils/file-reader.js\";\n\ninterface BaselineSetOptions {\n config: string;\n runs?: string;\n}\n\ninterface BaselineCompareOptions {\n config: string;\n runs?: string;\n}\n\ninterface BaselineListOptions {\n config: string;\n}\n\nexport function registerBaselineCommand(program: Command): void {\n const baseline = program\n .command(\"baseline\")\n .description(\"Manage test baselines\");\n\n baseline\n .command(\"set\")\n .description(\"Save current results as baseline\")\n .option(\"-c, --config <path>\", \"Path to config file\", \"kindlm.yaml\")\n .option(\"--runs <count>\", \"Override run count\")\n .action(async (options: BaselineSetOptions) => {\n try {\n const configDir = dirname(resolve(process.cwd(), options.config));\n const kindlmDir = join(configDir, \".kindlm\");\n const io = createFileBaselineIO(kindlmDir);\n\n // Run tests\n const { config, runnerResult } = await runTests({\n configPath: options.config,\n runs: options.runs ? parseInt(options.runs, 10) : undefined,\n });\n\n const { aggregated } = runnerResult;\n\n // Build + write baseline\n const baselineData = buildBaselineData(\n config.suite.name,\n aggregated,\n new Date().toISOString(),\n );\n\n const writeResult = writeBaseline(baselineData, io);\n if (!writeResult.success) {\n console.error(chalk.red(`Failed to save baseline: ${writeResult.error.message}`));\n process.exit(1);\n }\n\n const testCount = Object.keys(baselineData.results).length;\n console.log(\"\");\n console.log(\n chalk.green(`Baseline saved for suite \"${config.suite.name}\" (${testCount} test${testCount === 1 ? \"\" : \"s\"})`),\n );\n console.log(chalk.dim(` Location: ${kindlmDir}/baselines/`));\n process.exit(0);\n } catch (e) {\n console.error(chalk.red(`Error: ${e instanceof Error ? e.message : String(e)}`));\n process.exit(1);\n }\n });\n\n baseline\n .command(\"compare\")\n .description(\"Compare latest against baseline\")\n .option(\"-c, --config <path>\", \"Path to config file\", \"kindlm.yaml\")\n .option(\"--runs <count>\", \"Override run count\")\n .action(async (options: BaselineCompareOptions) => {\n try {\n const configDir = dirname(resolve(process.cwd(), options.config));\n const kindlmDir = join(configDir, \".kindlm\");\n const io = createFileBaselineIO(kindlmDir);\n\n // We need the suite name from config before running tests.\n // Parse config minimally to get the suite name for baseline lookup.\n const configPath = resolve(process.cwd(), options.config);\n let yamlContent: string;\n try {\n yamlContent = readFileSync(configPath, \"utf-8\");\n } catch {\n console.error(chalk.red(`Config file not found: ${configPath}`));\n process.exit(1);\n }\n\n const fileReader = createNodeFileReader();\n const parseResult = parseConfig(yamlContent, {\n configDir,\n fileReader,\n });\n\n if (!parseResult.success) {\n console.error(chalk.red(`Config validation failed: ${parseResult.error.message}`));\n process.exit(1);\n }\n\n const suiteName = parseResult.data.suite.name;\n\n // Load baseline — fail fast if missing\n const baselineResult = readBaseline(suiteName, io);\n if (!baselineResult.success) {\n if (baselineResult.error.code === \"BASELINE_NOT_FOUND\") {\n console.error(chalk.red(`No baseline found for suite \"${suiteName}\". Run \\`kindlm baseline set\\` first.`));\n } else {\n console.error(chalk.red(`Failed to read baseline: ${baselineResult.error.message}`));\n }\n process.exit(1);\n }\n\n const baselineData = baselineResult.data;\n\n // Run tests with baseline injected for drift assertions\n const { runnerResult } = await runTests({\n configPath: options.config,\n runs: options.runs ? parseInt(options.runs, 10) : undefined,\n baselineData,\n });\n\n const { aggregated } = runnerResult;\n\n // Build current baseline data for comparison\n const currentData = buildBaselineData(\n suiteName,\n aggregated,\n new Date().toISOString(),\n );\n\n // Compare\n const comparison = compareBaseline(baselineData, currentData.results);\n\n // Print comparison report\n console.log(\"\");\n console.log(chalk.bold(`Baseline comparison for \"${suiteName}\"`));\n console.log(chalk.dim(` Baseline from: ${baselineData.createdAt}`));\n console.log(\"\");\n\n if (comparison.regressions.length > 0) {\n console.log(chalk.red.bold(` Regressions (${comparison.regressions.length}):`));\n for (const r of comparison.regressions) {\n console.log(chalk.red(` ${r.testName}: ${formatPercent(r.baselinePassRate)} → ${formatPercent(r.currentPassRate)}`));\n if (r.newFailureCodes.length > 0) {\n console.log(chalk.red(` New failures: ${r.newFailureCodes.join(\", \")}`));\n }\n }\n console.log(\"\");\n }\n\n if (comparison.improvements.length > 0) {\n console.log(chalk.green.bold(` Improvements (${comparison.improvements.length}):`));\n for (const imp of comparison.improvements) {\n console.log(chalk.green(` ${imp.testName}: ${formatPercent(imp.baselinePassRate)} → ${formatPercent(imp.currentPassRate)}`));\n }\n console.log(\"\");\n }\n\n if (comparison.unchanged.length > 0) {\n console.log(chalk.dim(` Unchanged (${comparison.unchanged.length}):`));\n for (const u of comparison.unchanged) {\n console.log(chalk.dim(` ${u.testName}: ${formatPercent(u.passRate)}`));\n }\n console.log(\"\");\n }\n\n if (comparison.newTests.length > 0) {\n console.log(chalk.cyan(` New tests (${comparison.newTests.length}):`));\n for (const t of comparison.newTests) {\n console.log(chalk.cyan(` ${t}`));\n }\n console.log(\"\");\n }\n\n if (comparison.removedTests.length > 0) {\n console.log(chalk.yellow(` Removed tests (${comparison.removedTests.length}):`));\n for (const t of comparison.removedTests) {\n console.log(chalk.yellow(` ${t}`));\n }\n console.log(\"\");\n }\n\n // Exit 1 if any regressions\n process.exit(comparison.regressions.length > 0 ? 1 : 0);\n } catch (e) {\n console.error(chalk.red(`Error: ${e instanceof Error ? e.message : String(e)}`));\n process.exit(1);\n }\n });\n\n baseline\n .command(\"list\")\n .description(\"List saved baselines\")\n .option(\"-c, --config <path>\", \"Path to config file\", \"kindlm.yaml\")\n .action((options: BaselineListOptions) => {\n try {\n const configDir = dirname(resolve(process.cwd(), options.config));\n const kindlmDir = join(configDir, \".kindlm\");\n const io = createFileBaselineIO(kindlmDir);\n\n const listResult = listBaselines(io);\n if (!listResult.success) {\n console.error(chalk.red(`Failed to list baselines: ${listResult.error.message}`));\n process.exit(1);\n }\n\n const names = listResult.data;\n\n if (names.length === 0) {\n console.log(chalk.dim(\"No baselines saved yet. Run `kindlm baseline set` to create one.\"));\n process.exit(0);\n }\n\n console.log(chalk.bold(\"Saved baselines:\"));\n console.log(\"\");\n\n for (const name of names) {\n const readResult = io.read(name);\n if (!readResult.success) {\n console.log(` ${name} ${chalk.dim(\"(unreadable)\")}`);\n continue;\n }\n\n const parsed = deserializeBaseline(readResult.data);\n if (!parsed.success) {\n console.log(` ${name} ${chalk.dim(\"(corrupt)\")}`);\n continue;\n }\n\n const testCount = Object.keys(parsed.data.results).length;\n console.log(` ${chalk.cyan(parsed.data.suiteName)} — ${testCount} test${testCount === 1 ? \"\" : \"s\"}, saved ${chalk.dim(parsed.data.createdAt)}`);\n }\n\n process.exit(0);\n } catch (e) {\n console.error(chalk.red(`Error: ${e instanceof Error ? e.message : String(e)}`));\n process.exit(1);\n }\n });\n}\n\nfunction formatPercent(rate: number): string {\n return `${(rate * 100).toFixed(1)}%`;\n}\n","import { readFileSync, writeFileSync, mkdirSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { BaselineIO } from \"@kindlm/core\";\nimport type { Result } from \"@kindlm/core\";\n\nfunction sanitizeFilename(name: string): string {\n return name.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nexport function createFileBaselineIO(kindlmDir: string): BaselineIO {\n const baselinesDir = join(kindlmDir, \"baselines\");\n\n return {\n read(suiteName: string): Result<string> {\n const filePath = join(baselinesDir, `${sanitizeFilename(suiteName)}.json`);\n try {\n const content = readFileSync(filePath, \"utf-8\");\n return { success: true, data: content };\n } catch {\n return {\n success: false,\n error: {\n code: \"BASELINE_NOT_FOUND\",\n message: `No baseline found for suite \"${suiteName}\" at ${filePath}`,\n },\n };\n }\n },\n\n write(suiteName: string, content: string): Result<void> {\n try {\n mkdirSync(baselinesDir, { recursive: true });\n const filePath = join(baselinesDir, `${sanitizeFilename(suiteName)}.json`);\n writeFileSync(filePath, content, \"utf-8\");\n return { success: true, data: undefined };\n } catch (e) {\n return {\n success: false,\n error: {\n code: \"UNKNOWN_ERROR\",\n message: `Failed to write baseline: ${e instanceof Error ? e.message : String(e)}`,\n },\n };\n }\n },\n\n list(): Result<string[]> {\n try {\n mkdirSync(baselinesDir, { recursive: true });\n const files = readdirSync(baselinesDir);\n const names = files\n .filter((f) => f.endsWith(\".json\"))\n .map((f) => f.replace(/\\.json$/, \"\"));\n return { success: true, data: names };\n } catch (e) {\n return {\n success: false,\n error: {\n code: \"UNKNOWN_ERROR\",\n message: `Failed to list baselines: ${e instanceof Error ? e.message : String(e)}`,\n },\n };\n }\n },\n };\n}\n","/* eslint-disable no-console */\nimport type { Command } from \"commander\";\nimport { createInterface } from \"node:readline\";\nimport { Writable } from \"node:stream\";\nimport chalk from \"chalk\";\nimport { loadToken, saveToken, clearToken } from \"../cloud/auth.js\";\nimport { createCloudClient, getCloudUrl, CloudApiError } from \"../cloud/client.js\";\n\ninterface LoginOptions {\n token?: string;\n status?: boolean;\n logout?: boolean;\n}\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command(\"login\")\n .description(\"Authenticate with KindLM Cloud\")\n .option(\"-t, --token <token>\", \"API token (skips interactive prompt)\")\n .option(\"--status\", \"Show current authentication status\")\n .option(\"--logout\", \"Remove stored credentials\")\n .action(async (options: LoginOptions) => {\n try {\n if (options.logout) {\n clearToken();\n console.log(chalk.green(\"Logged out. Credentials removed.\"));\n return;\n }\n\n if (options.status) {\n await showStatus();\n return;\n }\n\n const token = options.token ?? process.env[\"KINDLM_API_TOKEN\"] ?? (await promptForToken());\n\n if (!token.startsWith(\"klm_\")) {\n console.error(chalk.red(\"Invalid token format. KindLM tokens start with \\\"klm_\\\".\"));\n process.exit(1);\n }\n\n // Validate token against Cloud API\n const client = createCloudClient(getCloudUrl(), token);\n try {\n await client.get(\"/v1/auth/tokens\");\n } catch (e) {\n if (e instanceof CloudApiError && e.status === 401) {\n console.error(chalk.red(\"Invalid or expired token.\"));\n process.exit(1);\n }\n throw e;\n }\n\n saveToken(token);\n console.log(chalk.green(\"Authenticated successfully. Token saved.\"));\n } catch (e) {\n console.error(chalk.red(`Login failed: ${e instanceof Error ? e.message : String(e)}`));\n process.exit(1);\n }\n });\n}\n\nasync function showStatus(): Promise<void> {\n const token = loadToken();\n if (!token) {\n console.log(chalk.yellow(\"Not authenticated. Run \\\"kindlm login\\\" to authenticate.\"));\n return;\n }\n\n const client = createCloudClient(getCloudUrl(), token);\n try {\n await client.get(\"/v1/auth/tokens\");\n console.log(chalk.green(\"Authenticated.\"));\n console.log(` Cloud URL: ${getCloudUrl()}`);\n } catch (e) {\n if (e instanceof CloudApiError && e.status === 401) {\n console.log(chalk.yellow(\"Stored token is invalid or expired. Run \\\"kindlm login\\\" to re-authenticate.\"));\n } else {\n console.log(chalk.yellow(`Cannot reach Cloud API: ${e instanceof Error ? e.message : String(e)}`));\n }\n }\n}\n\nfunction promptForToken(): Promise<string> {\n return new Promise((resolve, reject) => {\n // Muted output stream suppresses echo of typed characters\n const muted = new Writable({\n write(_chunk, _encoding, callback) {\n callback();\n },\n });\n\n process.stderr.write(\"Paste your KindLM API token: \");\n const rl = createInterface({ input: process.stdin, output: muted, terminal: true });\n\n rl.question(\"\", (answer) => {\n rl.close();\n process.stderr.write(\"\\n\");\n const trimmed = answer.trim();\n if (!trimmed) {\n reject(new Error(\"No token provided\"));\n return;\n }\n resolve(trimmed);\n });\n });\n}\n","import { readFileSync, writeFileSync, mkdirSync, unlinkSync, chmodSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\n\ninterface CredentialsFile {\n token: string;\n savedAt: string;\n}\n\nexport function getCredentialsPath(): string {\n return join(homedir(), \".kindlm\", \"credentials\");\n}\n\nexport function loadToken(): string | null {\n try {\n const raw = readFileSync(getCredentialsPath(), \"utf-8\");\n const parsed = JSON.parse(raw) as Partial<CredentialsFile>;\n if (typeof parsed.token === \"string\" && parsed.token.length > 0) {\n return parsed.token;\n }\n return null;\n } catch {\n return null;\n }\n}\n\nexport function saveToken(token: string): void {\n const filePath = getCredentialsPath();\n const dir = join(homedir(), \".kindlm\");\n mkdirSync(dir, { recursive: true, mode: 0o700 });\n const data: CredentialsFile = { token, savedAt: new Date().toISOString() };\n writeFileSync(filePath, JSON.stringify(data, null, 2), { mode: 0o600 });\n chmodSync(filePath, 0o600);\n}\n\nexport function clearToken(): void {\n try {\n unlinkSync(getCredentialsPath());\n } catch {\n // File doesn't exist — nothing to clear\n }\n}\n","const DEFAULT_CLOUD_URL = \"https://api.kindlm.com\";\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst RETRY_DELAY_MS = 1_000;\nconst MAX_RETRIES = 1;\n\nexport class CloudApiError extends Error {\n readonly status: number;\n\n constructor(status: number, message: string) {\n super(message);\n this.name = \"CloudApiError\";\n this.status = status;\n }\n}\n\nexport interface CloudClient {\n baseUrl: string;\n get<T>(path: string): Promise<T>;\n post<T>(path: string, body: unknown): Promise<T>;\n patch<T>(path: string, body: unknown): Promise<T>;\n delete(path: string): Promise<void>;\n}\n\nexport function getCloudUrl(): string {\n const url = process.env[\"KINDLM_CLOUD_URL\"] ?? DEFAULT_CLOUD_URL;\n if (url.startsWith(\"http://\") && !isLocalhost(url)) {\n throw new Error(\n `Refusing to use insecure HTTP for Cloud API: ${url}. Use HTTPS or target localhost for development.`,\n );\n }\n return url;\n}\n\nfunction isLocalhost(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\" || parsed.hostname === \"::1\";\n } catch {\n return false;\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function createCloudClient(baseUrl: string, token: string): CloudClient {\n async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${baseUrl}${path}`;\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n };\n\n const init: RequestInit = { method, headers };\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n init.body = JSON.stringify(body);\n }\n\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n if (attempt > 0) {\n await sleep(RETRY_DELAY_MS);\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT_MS);\n init.signal = controller.signal;\n\n try {\n const response = await fetch(url, init);\n\n if (!response.ok) {\n // Retry on 5xx\n if (response.status >= 500 && attempt < MAX_RETRIES) {\n lastError = new CloudApiError(response.status, `HTTP ${response.status}`);\n continue;\n }\n\n let message = `HTTP ${response.status}`;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"application/json\")) {\n try {\n const errorBody = (await response.json()) as { error?: string };\n if (errorBody.error) {\n message = errorBody.error;\n }\n } catch {\n // ignore parse errors\n }\n }\n throw new CloudApiError(response.status, message);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n // Validate response content-type is JSON before parsing\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"application/json\")) {\n throw new CloudApiError(\n response.status,\n `Expected JSON response but got content-type: ${contentType}`,\n );\n }\n\n return (await response.json()) as T;\n } catch (error) {\n if (error instanceof CloudApiError) throw error;\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Retry on network errors (not CloudApiErrors)\n if (attempt < MAX_RETRIES) continue;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n throw lastError ?? new Error(\"Request failed\");\n }\n\n return {\n baseUrl,\n get: <T>(path: string) => request<T>(\"GET\", path),\n post: <T>(path: string, body: unknown) => request<T>(\"POST\", path, body),\n patch: <T>(path: string, body: unknown) => request<T>(\"PATCH\", path, body),\n delete: (path: string) => request<void>(\"DELETE\", path),\n };\n}\n","/* eslint-disable no-console */\nimport type { Command } from \"commander\";\nimport { basename } from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport chalk from \"chalk\";\nimport { loadToken } from \"../cloud/auth.js\";\nimport { createCloudClient, getCloudUrl } from \"../cloud/client.js\";\nimport { loadLastRun } from \"../utils/last-run.js\";\nimport { getGitInfo } from \"../utils/git.js\";\nimport { detectCI } from \"../utils/env.js\";\nimport { uploadResults } from \"../cloud/upload.js\";\nimport { createSpinner } from \"../utils/spinner.js\";\n\ninterface UploadCommandOptions {\n token?: string;\n project?: string;\n}\n\nexport function registerUploadCommand(program: Command): void {\n program\n .command(\"upload\")\n .description(\"Push last run results to KindLM Cloud\")\n .option(\"-t, --token <token>\", \"API token (overrides stored token)\")\n .option(\"-p, --project <name>\", \"Project name\")\n .action(async (options: UploadCommandOptions) => {\n try {\n const token = options.token ?? process.env[\"KINDLM_API_TOKEN\"] ?? loadToken();\n if (!token) {\n console.error(chalk.red(\"Not authenticated. Run \\\"kindlm login\\\" first or pass --token.\"));\n process.exit(1);\n }\n\n const lastRun = loadLastRun();\n if (!lastRun) {\n console.error(chalk.red(\"No test run found. Run \\\"kindlm test\\\" first.\"));\n process.exit(1);\n }\n\n const gitInfo = getGitInfo();\n const ciEnv = detectCI();\n const projectName = options.project ?? resolveProjectName();\n\n const client = createCloudClient(getCloudUrl(), token);\n const spinner = createSpinner();\n spinner.start(\"Uploading results to KindLM Cloud...\");\n\n try {\n const result = await uploadResults(client, lastRun.runnerResult, {\n projectName,\n suiteName: lastRun.suiteName,\n configHash: lastRun.configHash,\n commitSha: ciEnv.commitSha ?? gitInfo.commitSha ?? undefined,\n branch: ciEnv.branch ?? gitInfo.branch ?? undefined,\n environment: ciEnv.isCI ? \"ci\" : \"local\",\n triggeredBy: ciEnv.name ?? \"local\",\n });\n\n spinner.succeed(\"Uploaded successfully.\");\n console.log(` Run ID: ${result.runId}`);\n console.log(` Project: ${projectName}`);\n console.log(` Suite: ${lastRun.suiteName}`);\n } catch (e) {\n spinner.fail(\"Upload failed.\");\n throw e;\n }\n } catch (e) {\n console.error(chalk.red(`Upload failed: ${e instanceof Error ? e.message : String(e)}`));\n process.exit(1);\n }\n });\n}\n\nfunction extractRepoName(remoteUrl: string): string | null {\n // HTTPS: https://github.com/org/repo.git\n try {\n const parsed = new URL(remoteUrl);\n const segments = parsed.pathname.split(\"/\").filter(Boolean);\n const last = segments[segments.length - 1];\n if (last) return last.replace(/\\.git$/, \"\");\n } catch {\n // Not a standard URL — try SSH format\n }\n\n // SSH: git@github.com:org/repo.git\n const sshMatch = remoteUrl.match(/^[\\w.-]+@[\\w.-]+:(.+?)(?:\\.git)?$/);\n if (sshMatch?.[1]) {\n const segments = sshMatch[1].split(\"/\");\n return segments[segments.length - 1] ?? null;\n }\n\n return null;\n}\n\nfunction resolveProjectName(): string {\n try {\n const remote = execSync(\"git remote get-url origin\", { encoding: \"utf-8\" }).trim();\n const name = extractRepoName(remote);\n if (name) return name;\n } catch {\n // Not in a git repo or no remote\n }\n return basename(process.cwd());\n}\n","import { execSync } from \"node:child_process\";\n\nexport interface GitInfo {\n commitSha: string | null;\n branch: string | null;\n dirty: boolean;\n}\n\nexport function getGitInfo(): GitInfo {\n try {\n const commitSha = execSync(\"git rev-parse HEAD\", { encoding: \"utf-8\" }).trim() || null;\n const branch = execSync(\"git rev-parse --abbrev-ref HEAD\", { encoding: \"utf-8\" }).trim() || null;\n const status = execSync(\"git status --porcelain\", { encoding: \"utf-8\" }).trim();\n const dirty = status.length > 0;\n return { commitSha, branch, dirty };\n } catch {\n return { commitSha: null, branch: null, dirty: false };\n }\n}\n","export interface CIEnvironment {\n name: string | null;\n isCI: boolean;\n commitSha: string | null;\n branch: string | null;\n}\n\nexport function detectCI(): CIEnvironment {\n if (process.env[\"GITHUB_ACTIONS\"]) {\n return {\n name: \"github_actions\",\n isCI: true,\n commitSha: process.env[\"GITHUB_SHA\"] ?? null,\n branch: process.env[\"GITHUB_REF_NAME\"] ?? null,\n };\n }\n\n if (process.env[\"GITLAB_CI\"]) {\n return {\n name: \"gitlab_ci\",\n isCI: true,\n commitSha: process.env[\"CI_COMMIT_SHA\"] ?? null,\n branch: process.env[\"CI_COMMIT_BRANCH\"] ?? null,\n };\n }\n\n if (process.env[\"CI\"]) {\n return {\n name: null,\n isCI: true,\n commitSha: null,\n branch: null,\n };\n }\n\n return {\n name: null,\n isCI: false,\n commitSha: null,\n branch: null,\n };\n}\n","import type { CloudClient } from \"./client.js\";\nimport type { RunnerResult } from \"@kindlm/core\";\nimport type { AggregatedTestResult } from \"@kindlm/core\";\n\nfunction e(segment: string): string {\n return encodeURIComponent(segment);\n}\n\nexport interface UploadOptions {\n projectName: string;\n suiteName: string;\n configHash: string;\n commitSha?: string;\n branch?: string;\n environment?: string;\n triggeredBy?: string;\n}\n\ninterface CloudProject {\n id: string;\n name: string;\n}\n\ninterface CloudSuite {\n id: string;\n name: string;\n}\n\ninterface CloudRun {\n id: string;\n}\n\nexport interface UploadResult {\n runId: string;\n projectId: string;\n}\n\nexport async function uploadResults(\n client: CloudClient,\n runnerResult: RunnerResult,\n options: UploadOptions,\n): Promise<UploadResult> {\n // 1. Find or create project\n const projectId = await findOrCreateProject(client, options.projectName);\n\n // 2. Find or create suite\n const suiteId = await findOrCreateSuite(client, projectId, options.suiteName, options.configHash);\n\n // 3. Create run\n const run = await client.post<CloudRun>(`/v1/runs/${e(projectId)}/runs`, {\n suiteId,\n commitSha: options.commitSha,\n branch: options.branch,\n environment: options.environment,\n triggeredBy: options.triggeredBy,\n });\n\n // 4. Batch insert results (chunks of 50 to avoid payload limits)\n const results = mapAggregatedResults(runnerResult.aggregated);\n const BATCH_SIZE = 50;\n for (let i = 0; i < results.length; i += BATCH_SIZE) {\n const batch = results.slice(i, i + BATCH_SIZE);\n await client.post(`/v1/results/${e(run.id)}/results`, { results: batch });\n }\n\n // 5. Compute run-level metrics and finalize\n const { runResult } = runnerResult;\n const passRate = runResult.totalTests > 0\n ? runResult.passed / runResult.totalTests\n : 0;\n\n const modelIds = new Set(runnerResult.aggregated.map((a) => a.modelId));\n const judgeScores = runnerResult.aggregated\n .map((a) => a.assertionScores[\"judge\"]?.mean)\n .filter((s): s is number => s !== undefined);\n const judgeAvgScore = judgeScores.length > 0\n ? judgeScores.reduce((a, b) => a + b, 0) / judgeScores.length\n : undefined;\n\n const latencies = runnerResult.aggregated.map((a) => a.latencyAvgMs);\n const latencyAvgMs = latencies.length > 0\n ? latencies.reduce((a, b) => a + b, 0) / latencies.length\n : undefined;\n\n const totalCost = runnerResult.aggregated.reduce((sum, a) => sum + a.totalCostUsd, 0);\n const costEstimateUsd = totalCost > 0 ? totalCost : undefined;\n\n await client.patch(`/v1/runs/${e(run.id)}`, {\n status: \"completed\",\n passRate,\n testCount: runResult.totalTests,\n modelCount: modelIds.size,\n judgeAvgScore,\n latencyAvgMs,\n costEstimateUsd,\n finishedAt: new Date().toISOString(),\n });\n\n return { runId: run.id, projectId };\n}\n\nasync function findOrCreateProject(client: CloudClient, name: string): Promise<string> {\n const { projects } = await client.get<{ projects: CloudProject[] }>(\"/v1/projects\");\n const existing = projects.find((p) => p.name === name);\n if (existing) return existing.id;\n\n const created = await client.post<CloudProject>(\"/v1/projects\", { name });\n return created.id;\n}\n\nasync function findOrCreateSuite(\n client: CloudClient,\n projectId: string,\n name: string,\n configHash: string,\n): Promise<string> {\n const { suites } = await client.get<{ suites: CloudSuite[] }>(\n `/v1/suites/${e(projectId)}/suites`,\n );\n const existing = suites.find((s) => s.name === name);\n if (existing) return existing.id;\n\n const created = await client.post<CloudSuite>(`/v1/suites/${e(projectId)}/suites`, {\n name,\n configHash,\n });\n return created.id;\n}\n\ninterface CloudTestResult {\n testCaseName: string;\n modelId: string;\n passed: number;\n passRate: number;\n runCount: number;\n judgeAvg: number | null;\n driftScore: number | null;\n latencyAvgMs: number | null;\n costUsd: number | null;\n totalTokens: number | null;\n failureCodes: string | null;\n failureMessages: string | null;\n assertionScores: string | null;\n}\n\nexport function mapAggregatedResults(aggregated: AggregatedTestResult[]): CloudTestResult[] {\n return aggregated.map((agg) => {\n // Extract failure messages from runs, or use pre-computed value from cache\n const cached = agg as AggregatedTestResult & { failureMessages?: string[] };\n const failureMessages = agg.runs.length > 0\n ? agg.runs\n .flatMap((r) => r.assertions.filter((a) => !a.passed).map((a) => a.failureMessage))\n .filter((m): m is string => m !== undefined)\n : (cached.failureMessages ?? []);\n\n return {\n testCaseName: agg.testCaseName,\n modelId: agg.modelId,\n passed: agg.passed ? 1 : 0,\n passRate: agg.passRate,\n runCount: agg.runCount,\n judgeAvg: agg.assertionScores[\"judge\"]?.mean ?? null,\n driftScore: agg.assertionScores[\"drift\"]?.mean ?? null,\n latencyAvgMs: agg.latencyAvgMs ?? null,\n costUsd: agg.totalCostUsd ?? null,\n totalTokens: agg.totalTokens ?? null,\n failureCodes: agg.failureCodes.length > 0 ? JSON.stringify(agg.failureCodes) : null,\n failureMessages: failureMessages.length > 0 ? JSON.stringify(failureMessages) : null,\n assertionScores: Object.keys(agg.assertionScores).length > 0\n ? JSON.stringify(agg.assertionScores)\n : null,\n };\n });\n}\n","/* eslint-disable no-console */\nimport { readFileSync, statSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { spawn } from \"node:child_process\";\nimport type { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n parseConfig,\n createProvider,\n filterSpans,\n mapSpansToResult,\n buildContextFromTrace,\n createAssertionsFromExpect,\n evaluateGates,\n} from \"@kindlm/core\";\nimport type {\n KindLMConfig,\n ProviderAdapter,\n TraceConfig,\n AssertionResult,\n} from \"@kindlm/core\";\nimport { createTraceServer } from \"../utils/trace-server.js\";\nimport { createSpinner } from \"../utils/spinner.js\";\nimport { createNodeFileReader } from \"../utils/file-reader.js\";\nimport { createHttpClient } from \"../utils/http.js\";\n\nexport function registerTraceCommand(program: Command): void {\n program\n .command(\"trace\")\n .description(\"Ingest OpenTelemetry traces and run assertions against them\")\n .option(\"-c, --config <path>\", \"Config file path\", \"kindlm.yaml\")\n .option(\"--port <port>\", \"OTLP HTTP port\", \"4318\")\n .option(\"--command <cmd>\", \"Command to spawn (traces are collected while it runs)\")\n .option(\"--timeout <ms>\", \"Timeout in ms to wait for traces\", \"30000\")\n .option(\"--reporter <type>\", \"Report format: pretty, json, junit\", \"pretty\")\n .action(async (opts: {\n config: string;\n port: string;\n command?: string;\n timeout: string;\n reporter: string;\n }) => {\n const spinner = createSpinner();\n\n try {\n // 1. Read and parse config\n const configPath = resolve(process.cwd(), opts.config);\n const configDir = dirname(configPath);\n\n try {\n const stat = statSync(configPath);\n if (stat.size > 1_048_576) {\n console.error(chalk.red(\"Config file exceeds 1MB limit\"));\n process.exit(1);\n }\n } catch {\n console.error(chalk.red(`Config file not found: ${configPath}`));\n process.exit(1);\n }\n\n let yamlContent: string;\n try {\n yamlContent = readFileSync(configPath, \"utf-8\");\n } catch {\n console.error(chalk.red(`Config file not found: ${configPath}`));\n process.exit(1);\n }\n\n const fileReader = createNodeFileReader();\n const parseResult = parseConfig(yamlContent, { configDir, fileReader });\n if (!parseResult.success) {\n console.error(chalk.red(`Config validation failed: ${parseResult.error.message}`));\n process.exit(1);\n }\n\n const config: KindLMConfig = parseResult.data;\n const traceConfig: TraceConfig = config.trace ?? {\n port: parseInt(opts.port, 10),\n timeoutMs: parseInt(opts.timeout, 10),\n spanMapping: {\n outputTextAttr: \"gen_ai.completion.0.content\",\n modelAttr: \"gen_ai.response.model\",\n systemAttr: \"gen_ai.system\",\n inputTokensAttr: \"gen_ai.usage.input_tokens\",\n outputTokensAttr: \"gen_ai.usage.output_tokens\",\n },\n };\n\n const port = parseInt(opts.port, 10) || traceConfig.port;\n const timeoutMs = parseInt(opts.timeout, 10) || traceConfig.timeoutMs;\n\n // 2. Start trace server\n const traceServer = createTraceServer(port);\n await traceServer.start();\n spinner.start(`Listening for OTLP traces on port ${port}...`);\n\n // 3. Optionally spawn command\n if (opts.command) {\n const child = spawn(\"sh\", [\"-c\", opts.command], {\n cwd: configDir,\n env: {\n ...process.env,\n OTEL_EXPORTER_OTLP_ENDPOINT: `http://localhost:${port}`,\n OTEL_EXPORTER_OTLP_PROTOCOL: \"http/json\",\n },\n stdio: \"inherit\",\n });\n\n child.on(\"error\", (e) => {\n spinner.fail(`Command failed: ${e.message}`);\n });\n }\n\n // 4. Wait for traces\n const spans = await traceServer.waitForSpans({ timeoutMs });\n await traceServer.stop();\n\n if (spans.length === 0) {\n spinner.fail(\"No traces received\");\n process.exit(1);\n }\n\n spinner.succeed(`Received ${spans.length} spans`);\n\n // 5. Filter and map spans\n const filtered = filterSpans(spans, traceConfig.spanFilter);\n const mappingResult = mapSpansToResult(filtered, traceConfig.spanMapping);\n\n // 6. Resolve judge adapter if needed\n const httpClient = createHttpClient();\n const adapters = new Map<string, ProviderAdapter>();\n const providers = config.providers as Record<string, { apiKeyEnv?: string; baseUrl?: string; organization?: string } | undefined>;\n\n for (const [name, providerConfig] of Object.entries(providers)) {\n if (!providerConfig) continue;\n let apiKey = \"\";\n if (providerConfig.apiKeyEnv) {\n const key = process.env[providerConfig.apiKeyEnv];\n if (key) apiKey = key.trim();\n }\n if (!apiKey && name !== \"ollama\") continue;\n\n try {\n const adapter = createProvider(name, httpClient);\n await adapter.initialize({\n apiKey,\n baseUrl: providerConfig.baseUrl,\n organization: providerConfig.organization,\n timeoutMs: config.defaults.timeoutMs,\n maxRetries: 2,\n });\n adapters.set(name, adapter);\n } catch {\n // Skip providers that fail to initialize\n }\n }\n\n const judgeModelId = config.defaults.judgeModel ?? config.models[0]?.id;\n const judgeModelConfig = config.models.find((m) => m.id === judgeModelId);\n const judgeAdapter = judgeModelConfig ? adapters.get(judgeModelConfig.provider) : undefined;\n\n // 7. Build context and evaluate assertions for each test\n const context = buildContextFromTrace(mappingResult, {\n configDir,\n judgeAdapter,\n judgeModel: judgeModelConfig?.model,\n });\n\n const testResults: { testName: string; assertions: AssertionResult[] }[] = [];\n\n for (const test of config.tests) {\n if (test.skip) continue;\n\n const assertions = createAssertionsFromExpect(test.expect);\n const allResults: AssertionResult[] = [];\n for (const assertion of assertions) {\n const results = await assertion.evaluate(context);\n allResults.push(...results);\n }\n testResults.push({ testName: test.name, assertions: allResults });\n }\n\n // 8. Report results\n const totalAssertions = testResults.reduce((s, t) => s + t.assertions.length, 0);\n const passedAssertions = testResults.reduce(\n (s, t) => s + t.assertions.filter((a) => a.passed).length,\n 0,\n );\n const failedAssertions = totalAssertions - passedAssertions;\n\n console.log();\n console.log(chalk.bold(\"Trace Test Results\"));\n console.log(chalk.dim(\"─\".repeat(50)));\n\n for (const { testName, assertions } of testResults) {\n const allPassed = assertions.every((a) => a.passed);\n const icon = allPassed ? chalk.green(\"✓\") : chalk.red(\"✗\");\n console.log(`${icon} ${testName}`);\n\n for (const a of assertions) {\n const aIcon = a.passed ? chalk.green(\" ✓\") : chalk.red(\" ✗\");\n const label = a.failureMessage ? `${a.label}: ${a.failureMessage}` : a.label;\n console.log(`${aIcon} ${label}`);\n }\n }\n\n console.log();\n console.log(\n `${chalk.bold(\"Total:\")} ${passedAssertions} passed, ${failedAssertions} failed out of ${totalAssertions} assertions`,\n );\n\n // 9. Evaluate gates\n // Build minimal aggregated results for gate evaluation\n const gateEval = evaluateGates(config.gates, []);\n if (!gateEval.passed) {\n for (const g of gateEval.gates.filter((g) => !g.passed)) {\n console.log(chalk.red(`Gate failed: ${g.message}`));\n }\n }\n\n // 10. Exit code\n process.exit(failedAssertions > 0 ? 1 : 0);\n } catch (e) {\n spinner.fail(`Trace command failed: ${e instanceof Error ? e.message : String(e)}`);\n process.exit(1);\n }\n });\n}\n","import { createServer } from \"node:http\";\nimport type { Server, IncomingMessage, ServerResponse } from \"node:http\";\nimport { parseOtlpPayload } from \"@kindlm/core\";\nimport type { ParsedSpan } from \"@kindlm/core\";\n\nexport interface TraceServer {\n start(): Promise<void>;\n stop(): Promise<void>;\n getSpans(): ParsedSpan[];\n waitForSpans(options: { timeoutMs: number }): Promise<ParsedSpan[]>;\n}\n\nexport function createTraceServer(port: number): TraceServer {\n const collectedSpans: ParsedSpan[] = [];\n let server: Server | null = null;\n let spanListeners: (() => void)[] = [];\n\n function notifyListeners() {\n for (const listener of spanListeners) {\n listener();\n }\n }\n\n function handleRequest(req: IncomingMessage, res: ServerResponse) {\n // CORS headers\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n res.setHeader(\"Access-Control-Allow-Methods\", \"POST, OPTIONS\");\n res.setHeader(\"Access-Control-Allow-Headers\", \"Content-Type\");\n\n if (req.method === \"OPTIONS\") {\n res.writeHead(204);\n res.end();\n return;\n }\n\n if (req.method !== \"POST\" || req.url !== \"/v1/traces\") {\n res.writeHead(404, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ error: \"Not found\" }));\n return;\n }\n\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n req.on(\"end\", () => {\n try {\n const body = Buffer.concat(chunks).toString(\"utf-8\");\n const parsed = JSON.parse(body) as unknown;\n const result = parseOtlpPayload(parsed);\n\n if (result.success) {\n collectedSpans.push(...result.data);\n notifyListeners();\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ partialSuccess: {} }));\n } else {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ error: result.error.message }));\n }\n } catch {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ error: \"Invalid JSON\" }));\n }\n });\n }\n\n return {\n start() {\n return new Promise<void>((resolve, reject) => {\n server = createServer(handleRequest);\n server.on(\"error\", reject);\n server.listen(port, () => resolve());\n });\n },\n\n stop() {\n return new Promise<void>((resolve) => {\n if (server) {\n server.close(() => resolve());\n } else {\n resolve();\n }\n });\n },\n\n getSpans() {\n return [...collectedSpans];\n },\n\n waitForSpans({ timeoutMs }) {\n return new Promise<ParsedSpan[]>((resolve) => {\n if (collectedSpans.length > 0) {\n resolve([...collectedSpans]);\n return;\n }\n\n const timer = setTimeout(() => {\n spanListeners = spanListeners.filter((l) => l !== onSpan);\n resolve([...collectedSpans]);\n }, timeoutMs);\n\n const onSpan = () => {\n clearTimeout(timer);\n spanListeners = spanListeners.filter((l) => l !== onSpan);\n // Wait a short period for any remaining spans to arrive\n setTimeout(() => resolve([...collectedSpans]), 500);\n };\n spanListeners.push(onSpan);\n });\n },\n };\n}\n","import { createProgram } from \"../index.js\";\n\nprocess.on(\"unhandledRejection\", (reason) => {\n const message =\n reason instanceof Error ? reason.message : String(reason);\n process.stderr.write(`\\nUnhandled error: ${message}\\n`);\n process.exit(1);\n});\n\nprocess.on(\"uncaughtException\", (error) => {\n process.stderr.write(`\\nFatal error: ${error.message}\\n`);\n process.exit(1);\n});\n\ncreateProgram().parse(process.argv);\n"],"mappings":"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","names":["require_identity","__commonJSMin","exports","ALIAS","DOC","MAP","PAIR","SCALAR","SEQ","NODE_TYPE","isAlias","node","isDocument","isMap","isPair","isScalar","isSeq","isCollection","isNode","hasAnchor","require_visit","__commonJSMin","exports","identity","BREAK","SKIP","REMOVE","visit","node","visitor","visitor_","initVisitor","visit_","key","path","ctrl","callVisitor","replaceNode","ci","ck","cv","visitAsync","visitAsync_","parent","pt","require_directives","__commonJSMin","exports","identity","visit","escapeChars","escapeTagName","tn","ch","Directives","_Directives","yaml","tags","copy","res","line","onError","parts","name","handle","prefix","version","isValid","source","verbatim","suffix","error","tag","doc","lines","tagEntries","tagNames","_key","node","require_anchors","__commonJSMin","exports","identity","visit","anchorIsValid","anchor","msg","anchorNames","root","anchors","_key","node","findNewAnchor","prefix","exclude","i","name","createNodeAnchors","doc","aliasObjects","sourceObjects","prevAnchors","source","ref","error","require_applyReviver","__commonJSMin","exports","applyReviver","reviver","obj","key","val","i","len","v0","v1","k","require_toJS","__commonJSMin","exports","identity","toJS","value","arg","ctx","v","i","data","res","require_Node","__commonJSMin","exports","applyReviver","identity","toJS","NodeBase","type","copy","doc","mapAsMap","maxAliasCount","onAnchor","reviver","ctx","res","count","require_Alias","__commonJSMin","exports","anchors","visit","identity","Node","toJS","Alias","source","doc","ctx","nodes","_key","node","found","_arg","maxAliasCount","msg","data","getAliasCount","_onComment","_onChompKeep","src","anchor","count","item","c","kc","vc","require_Scalar","__commonJSMin","exports","identity","Node","toJS","isScalarValue","value","Scalar","arg","ctx","require_createNode","__commonJSMin","exports","Alias","identity","Scalar","defaultTagPrefix","findTagObject","value","tagName","tags","match","t","tagObj","createNode","ctx","map","aliasDuplicateObjects","onAnchor","onTagObj","schema","sourceObjects","ref","node","require_Collection","__commonJSMin","exports","createNode","identity","Node","collectionFromPath","schema","path","value","v","i","k","isEmptyPath","Collection","type","copy","it","key","rest","node","keepScalar","allowScalar","n","require_stringifyComment","__commonJSMin","exports","stringifyComment","str","indentComment","comment","indent","lineComment","require_foldFlowLines","__commonJSMin","exports","FOLD_FLOW","FOLD_BLOCK","FOLD_QUOTED","foldFlowLines","text","indent","mode","indentAtStart","lineWidth","minContentWidth","onFold","onOverflow","endStep","folds","escapedFolds","end","split","prev","overflow","i","escStart","escEnd","consumeMoreIndentedLines","ch","next","j","res","fold","start","require_stringifyString","__commonJSMin","exports","Scalar","foldFlowLines","getFoldOptions","ctx","isBlock","containsDocumentMarker","str","lineLengthOverLimit","lineWidth","indentLength","limit","strLen","start","doubleQuotedString","value","json","implicitKey","minMultiLineLength","indent","i","ch","code","singleQuotedString","res","quotedString","singleQuote","qs","hasDouble","hasSingle","blockEndNewlines","blockString","comment","type","onComment","onChompKeep","blockQuote","commentString","literal","chomp","endStart","end","endNlPos","startWithSpace","startEnd","startNlPos","header","foldedValue","literalFallback","foldOptions","body","plainString","item","actualString","indentStep","inFlow","test","tag","compat","tags","stringifyString","ss","_stringify","_type","defaultKeyType","defaultStringType","t","require_stringify","__commonJSMin","exports","anchors","identity","stringifyComment","stringifyString","createStringifyContext","doc","options","opt","inFlow","getTagObject","tags","item","match","t","tagObj","obj","testMatch","name","stringifyProps","node","anchors$1","props","anchor","tag","stringify","ctx","onComment","onChompKeep","o","str","require_stringifyPair","__commonJSMin","exports","identity","Scalar","stringify","stringifyComment","stringifyPair","key","value","ctx","onComment","onChompKeep","allNullValues","doc","indent","indentStep","commentString","indentSeq","simpleKeys","keyComment","msg","explicitKey","keyCommentDone","chompKeep","str","vsb","vcb","valueComment","valueCommentDone","valueStr","ws","cs","vs0","nl0","hasNewline","flow","hasPropsLine","sp0","require_log","__commonJSMin","exports","node_process","debug","logLevel","messages","warn","warning","require_merge","__commonJSMin","exports","identity","Scalar","MERGE_KEY","merge","value","addMergeToJSMap","isMergeKey","ctx","key","tag","map","it","mergeValue","source","srcMap","require_addPairToJSMap","__commonJSMin","exports","log","merge","stringify","identity","toJS","addPairToJSMap","ctx","map","key","value","jsKey","stringKey","stringifyKey","jsValue","strCtx","node","strKey","jsonStr","require_Pair","__commonJSMin","exports","createNode","stringifyPair","addPairToJSMap","identity","createPair","key","value","ctx","k","v","Pair","_Pair","schema","_","pair","onComment","onChompKeep","require_stringifyCollection","__commonJSMin","exports","identity","stringify","stringifyComment","stringifyCollection","collection","ctx","options","stringifyFlowCollection","stringifyBlockCollection","comment","items","blockItemPrefix","flowChars","itemIndent","onChompKeep","onComment","indent","commentString","itemCtx","chompKeep","lines","i","item","addCommentBefore","ik","str","line","indentStep","fcPadding","reqNewline","linesAtValue","iv","start","end","len","sum","ic","require_YAMLMap","__commonJSMin","exports","stringifyCollection","addPairToJSMap","Collection","identity","Pair","Scalar","findPair","items","key","k","it","YAMLMap","schema","obj","ctx","keepUndefined","replacer","map","add","value","pair","overwrite","_pair","prev","sortEntries","i","item","keepScalar","node","_","Type","onComment","onChompKeep","require_map","__commonJSMin","exports","identity","YAMLMap","map","onError","schema","obj","ctx","require_YAMLSeq","__commonJSMin","exports","createNode","stringifyCollection","Collection","identity","Scalar","toJS","YAMLSeq","schema","value","key","idx","asItemIndex","keepScalar","it","prev","_","ctx","seq","i","item","onComment","onChompKeep","obj","replacer","require_seq","__commonJSMin","exports","identity","YAMLSeq","seq","onError","schema","obj","ctx","require_string","__commonJSMin","exports","stringifyString","string","value","str","item","ctx","onComment","onChompKeep","require_null","__commonJSMin","exports","Scalar","nullTag","value","source","ctx","require_bool","__commonJSMin","exports","Scalar","boolTag","value","str","source","ctx","sv","require_stringifyNumber","__commonJSMin","exports","stringifyNumber","format","minFractionDigits","tag","value","num","n","i","d","require_float","__commonJSMin","exports","Scalar","stringifyNumber","floatNaN","value","str","floatExp","node","num","float","dot","require_int","__commonJSMin","exports","stringifyNumber","intIdentify","value","intResolve","str","offset","radix","intAsBigInt","intStringify","node","prefix","intOct","_onError","opt","int","intHex","require_schema","__commonJSMin","exports","map","_null","seq","string","bool","float","int","schema","require_schema","__commonJSMin","exports","Scalar","map","seq","intIdentify","value","stringifyJSON","jsonScalars","str","_onError","intAsBigInt","jsonError","onError","schema","require_binary","__commonJSMin","exports","node_buffer","Scalar","stringifyString","binary","value","src","onError","str","buffer","i","comment","type","ctx","onComment","onChompKeep","buf","s","lineWidth","n","lines","o","require_pairs","__commonJSMin","exports","identity","Pair","Scalar","YAMLSeq","resolvePairs","seq","onError","i","item","pair","cn","createPairs","schema","iterable","ctx","replacer","pairs","it","key","value","keys","require_omap","__commonJSMin","exports","identity","toJS","YAMLMap","YAMLSeq","pairs","YAMLOMap","_YAMLOMap","_","ctx","map","pair","key","value","schema","iterable","pairs$1","omap","seq","onError","seenKeys","require_bool","__commonJSMin","exports","Scalar","boolStringify","value","source","ctx","trueTag","falseTag","require_float","__commonJSMin","exports","Scalar","stringifyNumber","floatNaN","value","str","floatExp","node","num","float","dot","f","require_int","__commonJSMin","exports","stringifyNumber","intIdentify","value","intResolve","str","offset","radix","intAsBigInt","sign","n","intStringify","node","prefix","intBin","_onError","opt","intOct","int","intHex","require_set","__commonJSMin","exports","identity","Pair","YAMLMap","YAMLSet","_YAMLSet","schema","key","pair","keepPair","value","prev","_","ctx","onComment","onChompKeep","iterable","replacer","set","map","onError","require_timestamp","__commonJSMin","exports","stringifyNumber","parseSexagesimal","str","asBigInt","sign","parts","num","n","res","p","stringifySexagesimal","node","value","_60","intTime","_onError","intAsBigInt","floatTime","timestamp","match","year","month","day","hour","minute","second","millisec","date","tz","require_schema","__commonJSMin","exports","map","_null","seq","string","binary","bool","float","int","merge","omap","pairs","set","timestamp","schema","require_tags","__commonJSMin","exports","map","_null","seq","string","bool","float","int","schema","schema$1","binary","merge","omap","pairs","schema$2","set","timestamp","schemas","tagsByName","coreKnownTags","getTags","customTags","schemaName","addMergeTag","schemaTags","tags","keys","key","tag","tagObj","tagName","require_Schema","__commonJSMin","exports","identity","map","seq","string","tags","sortMapEntriesByKey","a","b","Schema","_Schema","compat","customTags","merge","resolveKnownTags","schema","sortMapEntries","toStringDefaults","copy","require_stringifyDocument","__commonJSMin","exports","identity","stringify","stringifyComment","stringifyDocument","doc","options","lines","hasDirectives","dir","ctx","commentString","cs","chompKeep","contentComment","onChompKeep","body","dc","require_Document","__commonJSMin","exports","Alias","Collection","identity","Pair","toJS","Schema","stringifyDocument","anchors","applyReviver","createNode","directives","Document","_Document","value","replacer","options","_replacer","opt","version","copy","assertCollection","path","node","name","prev","keyToStr","asStr","aliasDuplicateObjects","anchorPrefix","flow","keepUndefined","onTagObj","tag","onAnchor","setAnchors","sourceObjects","ctx","key","k","v","keepScalar","sv","json","jsonArg","mapAsMap","maxAliasCount","reviver","res","count","s","contents","require_errors","__commonJSMin","exports","YAMLError","name","pos","code","message","YAMLParseError","YAMLWarning","prettifyError","src","lc","error","line","col","ci","lineStr","trimStart","prev","count","end","pointer","require_resolve_props","__commonJSMin","exports","resolveProps","tokens","flow","indicator","next","offset","onError","parentIndent","startOnNewline","spaceBefore","atNewline","hasSpace","comment","commentSep","hasNewline","reqSpace","tab","anchor","tag","newlineAfterProp","comma","found","start","token","cb","last","end","require_util_contains_newline","__commonJSMin","exports","containsNewline","key","st","it","require_util_flow_indent_check","__commonJSMin","exports","utilContainsNewline","flowIndentCheck","indent","fc","onError","end","require_util_map_includes","__commonJSMin","exports","identity","mapIncludes","ctx","items","search","uniqueKeys","isEqual","a","b","pair","require_resolve_block_map","__commonJSMin","exports","Pair","YAMLMap","resolveProps","utilContainsNewline","utilFlowIndentCheck","utilMapIncludes","startColMsg","resolveBlockMap","composeNode","composeEmptyNode","ctx","bm","onError","tag","NodeClass","map","offset","commentEnd","collItem","start","key","sep","value","keyProps","implicitKey","keyStart","keyNode","valueProps","valueNode","pair","require_resolve_block_seq","__commonJSMin","exports","YAMLSeq","resolveProps","utilFlowIndentCheck","resolveBlockSeq","composeNode","composeEmptyNode","ctx","bs","onError","tag","NodeClass","seq","offset","commentEnd","start","value","props","node","require_resolve_end","__commonJSMin","exports","resolveEnd","end","offset","reqSpace","onError","comment","hasSpace","sep","token","source","type","cb","require_resolve_flow_collection","__commonJSMin","exports","identity","Pair","YAMLMap","YAMLSeq","resolveEnd","resolveProps","utilContainsNewline","utilMapIncludes","blockMsg","isBlock","token","resolveFlowCollection","composeNode","composeEmptyNode","ctx","fc","onError","tag","isMap","fcName","NodeClass","coll","atRoot","offset","i","collItem","start","key","sep","value","props","prevItemComment","loop","st","prev","valueNode","keyStart","keyNode","valueProps","pair","map","endRange","expectedEnd","ce","ee","cePos","name","msg","end","require_compose_collection","__commonJSMin","exports","identity","Scalar","YAMLMap","YAMLSeq","resolveBlockMap","resolveBlockSeq","resolveFlowCollection","resolveCollection","CN","ctx","token","onError","tagName","tag","coll","Coll","composeCollection","props","tagToken","msg","anchor","nl","lastProp","expType","t","kt","res","node","require_resolve_block_scalar","__commonJSMin","exports","Scalar","resolveBlockScalar","ctx","scalar","onError","start","header","parseBlockScalarHeader","type","lines","splitLines","chompStart","i","content","value","end","trimIndent","offset","contentStart","indent","sep","prevMoreIndented","crlf","message","props","strict","source","mode","chomp","error","ch","n","hasSpace","comment","length","token","ts","split","first","m","require_resolve_flow_scalar","__commonJSMin","exports","Scalar","resolveEnd","resolveFlowScalar","scalar","strict","onError","offset","type","source","end","_type","value","_onError","rel","code","msg","plainValue","singleQuotedValue","doubleQuotedValue","valueEnd","re","badChar","foldLines","first","line","match","res","sep","pos","last","i","ch","fold","foldNewline","next","cc","escapeCodes","length","parseCharCode","raw","wsStart","require_compose_scalar","__commonJSMin","exports","identity","Scalar","resolveBlockScalar","resolveFlowScalar","composeScalar","ctx","token","tagToken","onError","value","type","comment","range","tagName","msg","tag","findScalarTagByName","findScalarTagByTest","scalar","res","error","schema","matchWithTest","kt","atKey","directives","compat","ts","cs","require_util_empty_scalar_position","__commonJSMin","exports","emptyScalarPosition","offset","before","pos","i","st","require_compose_node","__commonJSMin","exports","Alias","identity","composeCollection","composeScalar","resolveEnd","utilEmptyScalarPosition","CN","composeNode","composeEmptyNode","ctx","token","props","onError","atKey","spaceBefore","comment","anchor","tag","node","isSrcToken","composeAlias","message","offset","before","pos","end","options","source","alias","valueEnd","re","require_compose_doc","__commonJSMin","exports","Document","composeNode","resolveEnd","resolveProps","composeDoc","options","directives","offset","start","value","end","onError","opts","doc","ctx","props","contentEnd","re","require_composer","__commonJSMin","exports","node_process","directives","Document","errors","identity","composeDoc","resolveEnd","getErrorPos","src","offset","source","parsePrelude","prelude","comment","atComment","afterEmptyLine","i","Composer","options","code","message","warning","pos","doc","afterDoc","dc","it","cb","tokens","forceDoc","endOffset","token","msg","error","end","opts","require_cst_scalar","__commonJSMin","exports","resolveBlockScalar","resolveFlowScalar","errors","stringifyString","resolveAsScalar","token","strict","onError","_onError","pos","code","message","offset","createScalarToken","value","context","implicitKey","indent","inFlow","type","source","end","he","head","body","props","addEndtoBlockProps","setScalarValue","afterKey","header","setBlockScalarValue","setFlowScalarValue","key","st","oa","tok","nl","require_cst_stringify","__commonJSMin","exports","stringify","cst","stringifyToken","stringifyItem","token","res","tok","item","st","start","key","sep","value","require_cst_visit","__commonJSMin","exports","BREAK","SKIP","REMOVE","visit","cst","visitor","_visit","path","item","field","index","tok","parent","coll","ctrl","token","i","ci","require_cst","__commonJSMin","exports","cstScalar","cstStringify","cstVisit","BOM","DOCUMENT","FLOW_END","SCALAR","isCollection","token","isScalar","prettyToken","tokenType","source","require_lexer","__commonJSMin","exports","cst","isEmpty","ch","hexDigits","tagChars","flowIndicatorChars","invalidAnchorChars","isNotAnchorChar","Lexer","source","incomplete","next","i","n","offset","indent","dt","end","state","line","dirEnd","cs","sp","s","ch0","ch1","nl","quote","qb","loop","lastChar","inFlow","allowEmpty","allowTabs","test","require_line_counter","__commonJSMin","exports","LineCounter","offset","low","high","mid","start","require_parser","__commonJSMin","exports","node_process","cst","lexer","includesToken","list","type","i","findNonEmptyIndex","isFlowToken","token","getPrevProps","parent","it","getFirstKeyStartProps","prev","loop","fixFlowSeqItems","fc","Parser","onNewLine","source","incomplete","lexeme","message","top","n","error","last","st","doc","bv","scalar","start","sep","map","nl","end","atMapIndent","atNextItem","key","fs","seq","indent","docEnd","require_public_api","__commonJSMin","exports","composer","Document","errors","log","identity","lineCounter","parser","parseOptions","options","prettyErrors","parseAllDocuments","source","parser$1","composer$1","docs","doc","parseDocument","_doc","parse","src","reviver","_reviver","warning","stringify","value","replacer","_replacer","indent","keepUndefined","require_dist","__commonJSMin","exports","composer","Document","Schema","errors","Alias","identity","Pair","Scalar","YAMLMap","YAMLSeq","cst","lexer","lineCounter","parser","publicApi","visit","_CodeOrName","exports","Name","s","_Code","code","item","_a","c","names","_","strs","args","i","addCodeArg","plus","str","expr","safeStringify","optimize","arg","interpolate","res","mergeExprItems","a","b","strConcat","c1","c2","x","stringify","getProperty","key","getEsmExportName","regexpCode","rx","code_1","ValueError","name","UsedValueState","exports","Scope","prefixes","parent","nameOrPrefix","prefix","ng","_b","_a","ValueScopeName","nameStr","value","property","itemIndex","line","ValueScope","opts","valueKey","vs","_name","s","keyOrRef","scopeName","values","usedValues","getCode","valueCode","code","nameSet","c","def","code_1","scope_1","code_2","exports","scope_2","Node","_names","_constants","Def","varKind","name","rhs","es5","_n","names","constants","optimizeExpr","Assign","lhs","sideEffects","addExprNames","AssignOp","op","Label","label","Break","Throw","error","AnyCode","code","ParentNode","nodes","opts","n","i","subtractNames","addNames","BlockNode","Root","Else","If","_If","condition","cond","e","ns","not","_a","For","ForLoop","iteration","ForRange","from","to","ForIter","loop","iterable","Func","args","async","Return","Try","_b","Catch","Finally","CodeGen","extScope","prefix","prefixOrName","value","keyOrRef","scopeName","nameOrPrefix","constant","_constant","c","keyValues","key","thenBody","elseBody","node","forBody","arr","obj","tryBody","catchCode","finallyCode","body","nodeCount","len","toClose","funcBody","N1","N2","expr","replaceName","canOptimize","items","x","par","andCode","mappend","and","orCode","or","y","codegen_1","code_1","toHash","arr","hash","item","exports","alwaysValidSchema","it","schema","checkUnknownRules","schemaHasRules","opts","self","rules","key","checkStrictMode","schemaHasRulesButRef","RULES","schemaRefOrVal","topSchemaRef","schemaPath","keyword","$data","unescapeFragment","str","unescapeJsonPointer","escapeFragment","escapeJsonPointer","eachItem","xs","f","x","makeMergeEvaluated","mergeNames","mergeToName","mergeValues","resultToName","gen","from","to","toName","res","setEvaluated","evaluatedPropsToName","items","ps","props","p","snippets","useFunc","Type","getErrorPath","dataProp","dataPropType","jsPropertySyntax","isNumber","msg","mode","codegen_1","names","exports","codegen_1","util_1","names_1","exports","keyword","schemaType","reportError","cxt","error","errorPaths","overrideAllErrors","it","gen","compositeRule","allErrors","errObj","errorObjectCode","addError","returnErrors","reportExtraError","resetErrorsCount","errsCount","extendErrors","schemaValue","data","err","i","errs","validateName","schemaEnv","E","createErrors","errorObject","keyValues","errorInstancePath","errorSchemaPath","extraErrorProps","errorPath","instancePath","instPath","errSchemaPath","schemaPath","parentSchema","schPath","params","message","opts","propertyName","topSchemaRef","errors_1","codegen_1","names_1","boolError","topBoolOrEmptySchema","it","gen","schema","validateName","falseSchemaError","exports","boolOrEmptySchema","valid","overrideAllErrors","data","cxt","_jsonTypes","jsonTypes","isJSONType","x","exports","getRules","groups","schemaHasRulesForType","schema","self","type","group","shouldUseGroup","exports","rule","shouldUseRule","_a","kwd","rules_1","applicability_1","errors_1","codegen_1","util_1","DataType","exports","getSchemaTypes","schema","types","getJSONTypes","ts","coerceAndCheckDataType","it","gen","data","opts","coerceTo","coerceToTypes","checkTypes","wrongType","checkDataTypes","coerceData","reportTypeError","COERCIBLE","coerceTypes","t","dataType","coerced","coerceSpecificType","assignParentData","parentData","parentDataProperty","expr","checkDataType","strictNums","correct","EQ","cond","numCond","_cond","dataTypes","notObj","typeError","schemaValue","cxt","getTypeErrorContext","schemaCode","codegen_1","util_1","assignDefaults","it","ty","properties","items","key","assignDefault","sch","exports","prop","defaultValue","gen","compositeRule","data","opts","childData","condition","codegen_1","util_1","names_1","util_2","checkReportMissingProp","cxt","prop","gen","data","it","noPropertyInData","exports","checkMissingProp","opts","properties","missing","reportMissingProp","hasPropFunc","isOwnProperty","property","propertyInData","ownProperties","cond","allSchemaProperties","schemaMap","p","schemaProperties","callValidateCode","schemaCode","topSchemaRef","schemaPath","errorPath","func","context","passSchema","dataAndSchema","valCxt","args","newRegExp","usePattern","pattern","u","regExp","rx","validateArray","keyword","valid","validArr","validateItems","notValid","len","i","validateUnion","schema","sch","schValid","_sch","schCxt","codegen_1","names_1","code_1","errors_1","macroKeywordCode","cxt","def","gen","keyword","schema","parentSchema","it","macroSchema","schemaRef","useKeyword","valid","exports","funcKeywordCode","$data","checkAsyncKeyword","validate","validateRef","validateKeyword","_a","assignValid","modifyData","reportErrs","ruleErrs","validateAsync","validateSync","addErrs","e","validateErrs","_await","passCxt","passSchema","errors","data","errs","schemaEnv","result","validSchemaType","schemaType","allowUndefined","st","validateKeywordUsage","opts","self","errSchemaPath","deps","kwd","msg","codegen_1","util_1","getSubschema","it","keyword","schemaProp","schema","schemaPath","errSchemaPath","topSchemaRef","sch","exports","extendSubschemaData","subschema","dataProp","dpType","data","dataTypes","propertyName","gen","errorPath","dataPathArr","opts","nextData","dataContextProps","_nextData","extendSubschemaMode","jtdDiscriminator","jtdMetadata","compositeRule","createErrors","allErrors","require_fast_deep_equal","__commonJSMin","exports","module","equal","a","b","length","i","keys","key","require_json_schema_traverse","__commonJSMin","exports","module","traverse","schema","opts","cb","pre","post","_traverse","jsonPtr","rootSchema","parentJsonPtr","parentKeyword","parentSchema","keyIndex","key","sch","i","prop","escapeJsonPtr","str","util_1","equal","traverse","SIMPLE_INLINED","inlineRef","schema","limit","hasRef","countKeys","exports","REF_KEYWORDS","key","sch","count","getFullPath","resolver","id","normalize","normalizeId","p","_getFullPath","TRAILING_SLASH_HASH","resolveUrl","baseId","ANCHOR","getSchemaRefs","schemaId","uriResolver","schId","baseIds","pathPrefix","localRefs","schemaRefs","jsonPtr","_","parentJsonPtr","fullPath","innerBaseId","addRef","addAnchor","ref","_resolve","ambiguos","schOrRef","checkAmbiguosRef","anchor","sch1","sch2","boolSchema_1","dataType_1","applicability_1","dataType_2","defaults_1","keyword_1","subschema_1","codegen_1","names_1","resolve_1","util_1","errors_1","validateFunctionCode","it","isSchemaObj","checkKeywords","schemaCxtHasRules","topSchemaObjCode","validateFunction","exports","gen","validateName","schema","schemaEnv","opts","body","funcSourceUrl","destructureValCxtES5","destructureValCxt","commentKeyword","checkNoDefault","resetEvaluated","typeAndKeywords","returnResults","schId","subschemaCode","valid","subSchemaObjCode","self","key","updateContext","checkAsyncSchema","errsCount","checkRefsAndKeywords","schemaKeywords","types","checkedTypes","errSchemaPath","msg","schemaPath","rootName","ValidationError","assignEvaluated","evaluated","props","items","typeErrors","data","allErrors","RULES","keywordCode","checkStrictTypes","group","groupKeywords","iterateKeywords","useDefaults","rule","checkContextTypes","checkMultipleTypes","checkKeywordTypes","t","includesType","strictTypesError","narrowSchemaTypes","ts","rules","keyword","type","hasApplicableType","schTs","kwdT","withTypes","KeywordCxt","def","getData","condition","successAction","failAction","schemaCode","append","errorParams","errorPaths","cond","obj","assign","codeBlock","$dataValid","schemaType","wrong$DataType","invalid$DataSchema","st","validateSchemaRef","appl","subschema","nextContext","schemaCxt","toName","ruleType","cxt","JSON_POINTER","RELATIVE_JSON_POINTER","$data","dataLevel","dataNames","dataPathArr","jsonPointer","matches","up","errorMsg","expr","segments","segment","pointerType","ValidationError","errors","exports","resolve_1","MissingRefError","resolver","baseId","ref","msg","exports","codegen_1","validation_error_1","names_1","resolve_1","util_1","validate_1","SchemaEnv","env","schema","_a","exports","compileSchema","sch","_sch","getCompilingSchema","rootId","es5","lines","ownProperties","gen","_ValidationError","validateName","schemaCxt","sourceCode","validateCode","validate","props","items","e","resolveRef","root","baseId","ref","schOrFunc","resolve","schemaId","inlineOrCompile","schEnv","sameSchemaEnv","s1","s2","resolveSchema","p","refPath","getJsonPointer","id","schOrRef","schId","PREVENT_SCOPE_CHANGE","parsedRef","part","partSchema","$ref","require_data","__commonJSMin","exports","module","require_utils","__commonJSMin","exports","module","isUUID","isIPv4","stringArrayToHexStripped","input","acc","code","i","nonSimpleDomain","consumeIsZone","buffer","consumeHextets","address","output","hex","getIPV6","tokenCount","endipv6Encountered","endIpv6","consume","cursor","normalizeIPv6","host","findToken","ipv6","newHost","escapedHost","str","token","ind","removeDotSegments","path","nextSlash","len","normalizeComponentEncoding","component","esc","func","recomposeAuthority","uriTokens","ipV6res","require_schemes","__commonJSMin","exports","module","isUUID","URN_REG","supportedSchemeNames","isValidSchemeName","name","wsIsSecure","wsComponent","httpParse","component","httpSerialize","secure","wsParse","wsSerialize","path","query","urnParse","urnComponent","options","matches","scheme","urnScheme","schemeHandler","getSchemeHandler","urnSerialize","nid","uriComponent","nss","urnuuidParse","uuidComponent","urnuuidSerialize","http","https","ws","wss","urn","urnuuid","SCHEMES","require_fast_uri","__commonJSMin","exports","module","normalizeIPv6","removeDotSegments","recomposeAuthority","normalizeComponentEncoding","isIPv4","nonSimpleDomain","SCHEMES","getSchemeHandler","normalize","uri","options","serialize","parse","resolve","baseURI","relativeURI","schemelessOptions","resolved","resolveComponent","base","relative","skipNormalization","target","equal","uriA","uriB","cmpts","opts","component","uriTokens","schemeHandler","authority","s","URI_PARSE","parsed","isIP","matches","ipv6result","e","fastUri","uri","exports","validate_1","exports","codegen_1","validation_error_1","ref_error_1","rules_1","compile_1","codegen_2","resolve_1","dataType_1","util_1","$dataRefSchema","uri_1","defaultRegExp","str","flags","META_IGNORE_OPTIONS","EXT_SCOPE_NAMES","removedOptions","deprecatedOptions","MAX_EXPRESSION","requiredOptions","o","s","_optz","_a","optimize","regExp","_c","_b","uriResolver","_d","_f","_e","_h","_g","_k","_j","_m","_l","_p","_o","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_0","Ajv","opts","es5","lines","getLogger","formatOpt","checkOptions","getMetaSchemaOptions","addInitialFormats","addInitialKeywords","addInitialSchemas","$data","meta","schemaId","_dataRefSchema","schemaKeyRef","data","v","valid","schema","_meta","sch","loadSchema","runCompileAsync","_schema","loadMetaSchema","_compileAsync","$ref","e","checkLoaded","loadMissingSchema","ref","missingRef","_loadSchema","p","key","_validateSchema","id","throwOrLogError","$schema","message","keyRef","getSchEnv","root","cacheKey","definitions","def","kwdOrDef","keyword","checkKeyword","kwd","addRule","keywordMetaschema","definition","k","t","rule","RULES","group","i","name","format","errors","separator","dataVar","text","msg","metaSchema","keywordsJsonPointers","rules","jsonPointer","segments","keywords","seg","schemaOrData","schemas","regex","baseId","validateSchema","addSchema","localRefs","currentOpts","checkOpts","options","log","opt","optsSchemas","defs","metaOpts","noLogs","logger","KEYWORD_NAME","dataType","post","ruleGroup","addBeforeRule","before","_rule","$dataRef","def","exports","ref_error_1","code_1","codegen_1","names_1","compile_1","util_1","def","cxt","gen","$ref","it","baseId","env","validateName","opts","self","root","callRootRef","schOrEnv","callValidate","inlineRefSchema","callRef","rootName","sch","v","getValidate","schName","valid","schCxt","exports","$async","allErrors","passCxt","callAsyncRef","callSyncRef","addEvaluatedFrom","e","addErrorsFrom","source","errs","schEvaluated","_a","props","items","id_1","ref_1","core","exports","codegen_1","ops","KWDs","error","keyword","schemaCode","def","cxt","data","exports","codegen_1","error","schemaCode","def","cxt","gen","data","it","prec","res","invalid","exports","ucs2length","str","len","length","pos","value","exports","codegen_1","util_1","ucs2length_1","error","keyword","schemaCode","comp","def","cxt","data","it","op","len","exports","code_1","util_1","codegen_1","error","schemaCode","def","cxt","gen","data","$data","schema","it","u","regExp","regExpCode","valid","exports","codegen_1","error","keyword","schemaCode","comp","def","cxt","data","op","exports","code_1","codegen_1","util_1","error","missingProperty","def","cxt","gen","schema","schemaCode","data","$data","it","opts","useLoop","allErrorsMode","exitOnErrorMode","props","definedProperties","requiredKey","schemaPath","msg","loopAllRequired","prop","missing","valid","loopUntilMissing","exports","codegen_1","error","keyword","schemaCode","comp","def","cxt","data","op","exports","equal","exports","dataType_1","codegen_1","util_1","equal_1","error","i","j","def","cxt","gen","data","$data","schema","parentSchema","schemaCode","it","valid","itemTypes","validateUniqueItems","canOptimize","loopN","loopN2","t","item","wrongType","indices","eql","outer","exports","codegen_1","util_1","equal_1","error","schemaCode","def","cxt","gen","data","$data","schema","exports","codegen_1","util_1","equal_1","error","schemaCode","def","cxt","gen","data","$data","schema","it","useLoop","eql","getEql","valid","loopEnum","vSchema","_x","i","equalCode","v","sch","exports","limitNumber_1","multipleOf_1","limitLength_1","pattern_1","limitProperties_1","required_1","limitItems_1","uniqueItems_1","const_1","enum_1","validation","exports","codegen_1","util_1","error","len","def","cxt","parentSchema","it","items","validateAdditionalItems","gen","schema","data","keyword","valid","validateItems","i","exports","codegen_1","util_1","code_1","def","cxt","schema","it","validateTuple","extraItems","schArr","gen","parentSchema","data","keyword","checkStrictTuple","valid","len","sch","i","opts","errSchemaPath","l","fullTuple","msg","exports","items_1","def","cxt","exports","codegen_1","util_1","code_1","additionalItems_1","error","len","def","cxt","schema","parentSchema","it","prefixItems","exports","codegen_1","util_1","error","min","max","def","cxt","gen","schema","parentSchema","data","it","minContains","maxContains","len","cond","valid","validateItems","validateItemsWithCount","schValid","count","checkLimits","_valid","block","i","exports","codegen_1","util_1","code_1","exports","property","depsCount","deps","property_ies","missingProperty","def","cxt","propDeps","schDeps","splitDependencies","validatePropertyDeps","validateSchemaDeps","schema","propertyDeps","schemaDeps","key","gen","data","it","missing","prop","hasProperty","depProp","keyword","valid","schCxt","codegen_1","util_1","error","params","def","cxt","gen","schema","data","it","valid","key","exports","code_1","codegen_1","names_1","util_1","error","params","def","cxt","gen","schema","parentSchema","data","errsCount","it","allErrors","opts","props","patProps","checkAdditionalProperties","key","additionalPropertyCode","isAdditional","definedProp","propsSchema","p","deleteAdditional","valid","applyAdditionalSchema","errors","subschema","exports","validate_1","code_1","util_1","additionalProperties_1","def","cxt","gen","schema","parentSchema","data","it","allProps","prop","properties","p","valid","hasDefault","applyPropertySchema","exports","code_1","codegen_1","util_1","util_2","def","cxt","gen","schema","data","parentSchema","it","opts","patterns","alwaysValidPatterns","p","checkProperties","valid","props","validatePatternProperties","pat","checkMatchingProperties","validateProperties","prop","key","alwaysValid","exports","util_1","def","cxt","gen","schema","it","valid","exports","code_1","def","exports","codegen_1","util_1","error","params","def","cxt","gen","schema","parentSchema","it","schArr","valid","passing","schValid","validateOneOf","sch","i","schCxt","exports","util_1","def","cxt","gen","schema","it","valid","sch","i","schCxt","exports","codegen_1","util_1","error","params","def","cxt","gen","parentSchema","it","hasThen","hasSchema","hasElse","valid","schValid","validateIf","ifClause","validateClause","schCxt","keyword","schema","exports","util_1","def","keyword","parentSchema","it","exports","additionalItems_1","prefixItems_1","items_1","items2020_1","contains_1","dependencies_1","propertyNames_1","additionalProperties_1","properties_1","patternProperties_1","not_1","anyOf_1","oneOf_1","allOf_1","if_1","thenElse_1","getApplicator","draft2020","applicator","exports","codegen_1","error","schemaCode","def","cxt","ruleType","gen","data","$data","schema","it","opts","errSchemaPath","schemaEnv","self","validate$DataFormat","validateFormat","fmts","fDef","fType","format","unknownFmt","invalidFmt","callFormat","validData","formatDef","unknownFormat","fmtType","fmtRef","getFormat","validCondition","unknownMsg","fmtDef","code","fmt","exports","format_1","format","exports","exports","core_1","validation_1","applicator_1","format_1","metadata_1","draft7Vocabularies","exports","DiscrError","exports","codegen_1","types_1","compile_1","ref_error_1","util_1","error","discrError","tagName","tag","def","cxt","gen","data","schema","parentSchema","it","oneOf","valid","validateMapping","mapping","getMapping","tagValue","applyTagSchema","schemaProp","_valid","schCxt","oneOfMapping","topRequired","hasRequired","tagRequired","i","sch","ref","propSch","_a","addMappings","required","addMapping","exports","require_json_schema_draft_07","__commonJSMin","exports","module","core_1","draft7_1","discriminator_1","draft7MetaSchema","META_SUPPORT_DATA","META_SCHEMA_ID","Ajv","v","metaSchema","exports","module","validate_1","codegen_1","validation_error_1","ref_error_1","fmtDef","validate","compare","exports","date","compareDate","getTime","compareTime","getDateTime","compareDateTime","compareIsoTime","compareIsoDateTime","uri","regex","byte","validateInt32","validateInt64","validateNumber","isLeapYear","year","DATE","DAYS","str","matches","month","day","d1","d2","TIME","strictTimeZone","hr","min","sec","tz","tzSign","tzH","tzM","utcMin","utcHr","s1","s2","t1","t2","a1","a2","DATE_TIME_SEPARATOR","time","dateTime","dt1","dt2","res","NOT_URI_FRAGMENT","URI","BYTE","MIN_INT32","MAX_INT32","value","Z_ANCHOR","_CodeOrName","exports","Name","s","_Code","code","item","_a","c","names","_","strs","args","i","addCodeArg","plus","str","expr","safeStringify","optimize","arg","interpolate","res","mergeExprItems","a","b","strConcat","c1","c2","x","stringify","getProperty","key","getEsmExportName","regexpCode","rx","code_1","ValueError","name","UsedValueState","exports","Scope","prefixes","parent","nameOrPrefix","prefix","ng","_b","_a","ValueScopeName","nameStr","value","property","itemIndex","line","ValueScope","opts","valueKey","vs","_name","s","keyOrRef","scopeName","values","usedValues","getCode","valueCode","code","nameSet","c","def","code_1","scope_1","code_2","exports","scope_2","Node","_names","_constants","Def","varKind","name","rhs","es5","_n","names","constants","optimizeExpr","Assign","lhs","sideEffects","addExprNames","AssignOp","op","Label","label","Break","Throw","error","AnyCode","code","ParentNode","nodes","opts","n","i","subtractNames","addNames","BlockNode","Root","Else","If","_If","condition","cond","e","ns","not","_a","For","ForLoop","iteration","ForRange","from","to","ForIter","loop","iterable","Func","args","async","Return","Try","_b","Catch","Finally","CodeGen","extScope","prefix","prefixOrName","value","keyOrRef","scopeName","nameOrPrefix","constant","_constant","c","keyValues","key","thenBody","elseBody","node","forBody","arr","obj","tryBody","catchCode","finallyCode","body","nodeCount","len","toClose","funcBody","N1","N2","expr","replaceName","canOptimize","items","x","par","andCode","mappend","and","orCode","or","y","codegen_1","code_1","toHash","arr","hash","item","exports","alwaysValidSchema","it","schema","checkUnknownRules","schemaHasRules","opts","self","rules","key","checkStrictMode","schemaHasRulesButRef","RULES","schemaRefOrVal","topSchemaRef","schemaPath","keyword","$data","unescapeFragment","str","unescapeJsonPointer","escapeFragment","escapeJsonPointer","eachItem","xs","f","x","makeMergeEvaluated","mergeNames","mergeToName","mergeValues","resultToName","gen","from","to","toName","res","setEvaluated","evaluatedPropsToName","items","ps","props","p","snippets","useFunc","Type","getErrorPath","dataProp","dataPropType","jsPropertySyntax","isNumber","msg","mode","codegen_1","names","exports","codegen_1","util_1","names_1","exports","keyword","schemaType","reportError","cxt","error","errorPaths","overrideAllErrors","it","gen","compositeRule","allErrors","errObj","errorObjectCode","addError","returnErrors","reportExtraError","resetErrorsCount","errsCount","extendErrors","schemaValue","data","err","i","errs","validateName","schemaEnv","E","createErrors","errorObject","keyValues","errorInstancePath","errorSchemaPath","extraErrorProps","errorPath","instancePath","instPath","errSchemaPath","schemaPath","parentSchema","schPath","params","message","opts","propertyName","topSchemaRef","errors_1","codegen_1","names_1","boolError","topBoolOrEmptySchema","it","gen","schema","validateName","falseSchemaError","exports","boolOrEmptySchema","valid","overrideAllErrors","data","cxt","_jsonTypes","jsonTypes","isJSONType","x","exports","getRules","groups","schemaHasRulesForType","schema","self","type","group","shouldUseGroup","exports","rule","shouldUseRule","_a","kwd","rules_1","applicability_1","errors_1","codegen_1","util_1","DataType","exports","getSchemaTypes","schema","types","getJSONTypes","ts","coerceAndCheckDataType","it","gen","data","opts","coerceTo","coerceToTypes","checkTypes","wrongType","checkDataTypes","coerceData","reportTypeError","COERCIBLE","coerceTypes","t","dataType","coerced","coerceSpecificType","assignParentData","parentData","parentDataProperty","expr","checkDataType","strictNums","correct","EQ","cond","numCond","_cond","dataTypes","notObj","typeError","schemaValue","cxt","getTypeErrorContext","schemaCode","codegen_1","util_1","assignDefaults","it","ty","properties","items","key","assignDefault","sch","exports","prop","defaultValue","gen","compositeRule","data","opts","childData","condition","codegen_1","util_1","names_1","util_2","checkReportMissingProp","cxt","prop","gen","data","it","noPropertyInData","exports","checkMissingProp","opts","properties","missing","reportMissingProp","hasPropFunc","isOwnProperty","property","propertyInData","ownProperties","cond","allSchemaProperties","schemaMap","p","schemaProperties","callValidateCode","schemaCode","topSchemaRef","schemaPath","errorPath","func","context","passSchema","dataAndSchema","valCxt","args","newRegExp","usePattern","pattern","u","regExp","rx","validateArray","keyword","valid","validArr","validateItems","notValid","len","i","validateUnion","schema","sch","schValid","_sch","schCxt","codegen_1","names_1","code_1","errors_1","macroKeywordCode","cxt","def","gen","keyword","schema","parentSchema","it","macroSchema","schemaRef","useKeyword","valid","exports","funcKeywordCode","$data","checkAsyncKeyword","validate","validateRef","validateKeyword","_a","assignValid","modifyData","reportErrs","ruleErrs","validateAsync","validateSync","addErrs","e","validateErrs","_await","passCxt","passSchema","errors","data","errs","schemaEnv","result","validSchemaType","schemaType","allowUndefined","st","validateKeywordUsage","opts","self","errSchemaPath","deps","kwd","msg","codegen_1","util_1","getSubschema","it","keyword","schemaProp","schema","schemaPath","errSchemaPath","topSchemaRef","sch","exports","extendSubschemaData","subschema","dataProp","dpType","data","dataTypes","propertyName","gen","errorPath","dataPathArr","opts","nextData","dataContextProps","_nextData","extendSubschemaMode","jtdDiscriminator","jtdMetadata","compositeRule","createErrors","allErrors","require_json_schema_traverse","__commonJSMin","exports","module","traverse","schema","opts","cb","pre","post","_traverse","jsonPtr","rootSchema","parentJsonPtr","parentKeyword","parentSchema","keyIndex","key","sch","i","prop","escapeJsonPtr","str","util_1","equal","traverse","SIMPLE_INLINED","inlineRef","schema","limit","hasRef","countKeys","exports","REF_KEYWORDS","key","sch","count","getFullPath","resolver","id","normalize","normalizeId","p","_getFullPath","TRAILING_SLASH_HASH","resolveUrl","baseId","ANCHOR","getSchemaRefs","schemaId","uriResolver","schId","baseIds","pathPrefix","localRefs","schemaRefs","jsonPtr","_","parentJsonPtr","fullPath","innerBaseId","addRef","addAnchor","ref","_resolve","ambiguos","schOrRef","checkAmbiguosRef","anchor","sch1","sch2","boolSchema_1","dataType_1","applicability_1","dataType_2","defaults_1","keyword_1","subschema_1","codegen_1","names_1","resolve_1","util_1","errors_1","validateFunctionCode","it","isSchemaObj","checkKeywords","schemaCxtHasRules","topSchemaObjCode","validateFunction","exports","gen","validateName","schema","schemaEnv","opts","body","funcSourceUrl","destructureValCxtES5","destructureValCxt","commentKeyword","checkNoDefault","resetEvaluated","typeAndKeywords","returnResults","schId","subschemaCode","valid","subSchemaObjCode","self","key","updateContext","checkAsyncSchema","errsCount","checkRefsAndKeywords","schemaKeywords","types","checkedTypes","errSchemaPath","msg","schemaPath","rootName","ValidationError","assignEvaluated","evaluated","props","items","typeErrors","data","allErrors","RULES","keywordCode","checkStrictTypes","group","groupKeywords","iterateKeywords","useDefaults","rule","checkContextTypes","checkMultipleTypes","checkKeywordTypes","t","includesType","strictTypesError","narrowSchemaTypes","ts","rules","keyword","type","hasApplicableType","schTs","kwdT","withTypes","KeywordCxt","def","getData","condition","successAction","failAction","schemaCode","append","errorParams","errorPaths","cond","obj","assign","codeBlock","$dataValid","schemaType","wrong$DataType","invalid$DataSchema","st","validateSchemaRef","appl","subschema","nextContext","schemaCxt","toName","ruleType","cxt","JSON_POINTER","RELATIVE_JSON_POINTER","$data","dataLevel","dataNames","dataPathArr","jsonPointer","matches","up","errorMsg","expr","segments","segment","pointerType","ValidationError","errors","exports","resolve_1","MissingRefError","resolver","baseId","ref","msg","exports","codegen_1","validation_error_1","names_1","resolve_1","util_1","validate_1","SchemaEnv","env","schema","_a","exports","compileSchema","sch","_sch","getCompilingSchema","rootId","es5","lines","ownProperties","gen","_ValidationError","validateName","schemaCxt","sourceCode","validateCode","validate","props","items","e","resolveRef","root","baseId","ref","schOrFunc","resolve","schemaId","inlineOrCompile","schEnv","sameSchemaEnv","s1","s2","resolveSchema","p","refPath","getJsonPointer","id","schOrRef","schId","PREVENT_SCOPE_CHANGE","parsedRef","part","partSchema","$ref","require_data","__commonJSMin","exports","module","uri","exports","validate_1","exports","codegen_1","validation_error_1","ref_error_1","rules_1","compile_1","codegen_2","resolve_1","dataType_1","util_1","$dataRefSchema","uri_1","defaultRegExp","str","flags","META_IGNORE_OPTIONS","EXT_SCOPE_NAMES","removedOptions","deprecatedOptions","MAX_EXPRESSION","requiredOptions","o","s","_optz","_a","optimize","regExp","_c","_b","uriResolver","_d","_f","_e","_h","_g","_k","_j","_m","_l","_p","_o","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_0","Ajv","opts","es5","lines","getLogger","formatOpt","checkOptions","getMetaSchemaOptions","addInitialFormats","addInitialKeywords","addInitialSchemas","$data","meta","schemaId","_dataRefSchema","schemaKeyRef","data","v","valid","schema","_meta","sch","loadSchema","runCompileAsync","_schema","loadMetaSchema","_compileAsync","$ref","e","checkLoaded","loadMissingSchema","ref","missingRef","_loadSchema","p","key","_validateSchema","id","throwOrLogError","$schema","message","keyRef","getSchEnv","root","cacheKey","definitions","def","kwdOrDef","keyword","checkKeyword","kwd","addRule","keywordMetaschema","definition","k","t","rule","RULES","group","i","name","format","errors","separator","dataVar","text","msg","metaSchema","keywordsJsonPointers","rules","jsonPointer","segments","keywords","seg","schemaOrData","schemas","regex","baseId","validateSchema","addSchema","localRefs","currentOpts","checkOpts","options","log","opt","optsSchemas","defs","metaOpts","noLogs","logger","KEYWORD_NAME","dataType","post","ruleGroup","addBeforeRule","before","_rule","$dataRef","def","exports","ref_error_1","code_1","codegen_1","names_1","compile_1","util_1","def","cxt","gen","$ref","it","baseId","env","validateName","opts","self","root","callRootRef","schOrEnv","callValidate","inlineRefSchema","callRef","rootName","sch","v","getValidate","schName","valid","schCxt","exports","$async","allErrors","passCxt","callAsyncRef","callSyncRef","addEvaluatedFrom","e","addErrorsFrom","source","errs","schEvaluated","_a","props","items","id_1","ref_1","core","exports","codegen_1","ops","KWDs","error","keyword","schemaCode","def","cxt","data","exports","codegen_1","error","schemaCode","def","cxt","gen","data","it","prec","res","invalid","exports","ucs2length","str","len","length","pos","value","exports","codegen_1","util_1","ucs2length_1","error","keyword","schemaCode","comp","def","cxt","data","it","op","len","exports","code_1","util_1","codegen_1","error","schemaCode","def","cxt","gen","data","$data","schema","it","u","regExp","regExpCode","valid","exports","codegen_1","error","keyword","schemaCode","comp","def","cxt","data","op","exports","code_1","codegen_1","util_1","error","missingProperty","def","cxt","gen","schema","schemaCode","data","$data","it","opts","useLoop","allErrorsMode","exitOnErrorMode","props","definedProperties","requiredKey","schemaPath","msg","loopAllRequired","prop","missing","valid","loopUntilMissing","exports","codegen_1","error","keyword","schemaCode","comp","def","cxt","data","op","exports","equal","exports","dataType_1","codegen_1","util_1","equal_1","error","i","j","def","cxt","gen","data","$data","schema","parentSchema","schemaCode","it","valid","itemTypes","validateUniqueItems","canOptimize","loopN","loopN2","t","item","wrongType","indices","eql","outer","exports","codegen_1","util_1","equal_1","error","schemaCode","def","cxt","gen","data","$data","schema","exports","codegen_1","util_1","equal_1","error","schemaCode","def","cxt","gen","data","$data","schema","it","useLoop","eql","getEql","valid","loopEnum","vSchema","_x","i","equalCode","v","sch","exports","limitNumber_1","multipleOf_1","limitLength_1","pattern_1","limitProperties_1","required_1","limitItems_1","uniqueItems_1","const_1","enum_1","validation","exports","codegen_1","util_1","error","len","def","cxt","parentSchema","it","items","validateAdditionalItems","gen","schema","data","keyword","valid","validateItems","i","exports","codegen_1","util_1","code_1","def","cxt","schema","it","validateTuple","extraItems","schArr","gen","parentSchema","data","keyword","checkStrictTuple","valid","len","sch","i","opts","errSchemaPath","l","fullTuple","msg","exports","items_1","def","cxt","exports","codegen_1","util_1","code_1","additionalItems_1","error","len","def","cxt","schema","parentSchema","it","prefixItems","exports","codegen_1","util_1","error","min","max","def","cxt","gen","schema","parentSchema","data","it","minContains","maxContains","len","cond","valid","validateItems","validateItemsWithCount","schValid","count","checkLimits","_valid","block","i","exports","codegen_1","util_1","code_1","exports","property","depsCount","deps","property_ies","missingProperty","def","cxt","propDeps","schDeps","splitDependencies","validatePropertyDeps","validateSchemaDeps","schema","propertyDeps","schemaDeps","key","gen","data","it","missing","prop","hasProperty","depProp","keyword","valid","schCxt","codegen_1","util_1","error","params","def","cxt","gen","schema","data","it","valid","key","exports","code_1","codegen_1","names_1","util_1","error","params","def","cxt","gen","schema","parentSchema","data","errsCount","it","allErrors","opts","props","patProps","checkAdditionalProperties","key","additionalPropertyCode","isAdditional","definedProp","propsSchema","p","deleteAdditional","valid","applyAdditionalSchema","errors","subschema","exports","validate_1","code_1","util_1","additionalProperties_1","def","cxt","gen","schema","parentSchema","data","it","allProps","prop","properties","p","valid","hasDefault","applyPropertySchema","exports","code_1","codegen_1","util_1","util_2","def","cxt","gen","schema","data","parentSchema","it","opts","patterns","alwaysValidPatterns","p","checkProperties","valid","props","validatePatternProperties","pat","checkMatchingProperties","validateProperties","prop","key","alwaysValid","exports","util_1","def","cxt","gen","schema","it","valid","exports","code_1","def","exports","codegen_1","util_1","error","params","def","cxt","gen","schema","parentSchema","it","schArr","valid","passing","schValid","validateOneOf","sch","i","schCxt","exports","util_1","def","cxt","gen","schema","it","valid","sch","i","schCxt","exports","codegen_1","util_1","error","params","def","cxt","gen","parentSchema","it","hasThen","hasSchema","hasElse","valid","schValid","validateIf","ifClause","validateClause","schCxt","keyword","schema","exports","util_1","def","keyword","parentSchema","it","exports","additionalItems_1","prefixItems_1","items_1","items2020_1","contains_1","dependencies_1","propertyNames_1","additionalProperties_1","properties_1","patternProperties_1","not_1","anyOf_1","oneOf_1","allOf_1","if_1","thenElse_1","getApplicator","draft2020","applicator","exports","codegen_1","error","schemaCode","def","cxt","ruleType","gen","data","$data","schema","it","opts","errSchemaPath","schemaEnv","self","validate$DataFormat","validateFormat","fmts","fDef","fType","format","unknownFmt","invalidFmt","callFormat","validData","formatDef","unknownFormat","fmtType","fmtRef","getFormat","validCondition","unknownMsg","fmtDef","code","fmt","exports","format_1","format","exports","exports","core_1","validation_1","applicator_1","format_1","metadata_1","draft7Vocabularies","exports","DiscrError","exports","codegen_1","types_1","compile_1","ref_error_1","util_1","error","discrError","tagName","tag","def","cxt","gen","data","schema","parentSchema","it","oneOf","valid","validateMapping","mapping","getMapping","tagValue","applyTagSchema","schemaProp","_valid","schCxt","oneOfMapping","topRequired","hasRequired","tagRequired","i","sch","ref","propSch","_a","addMappings","required","addMapping","exports","require_json_schema_draft_07","__commonJSMin","exports","module","core_1","draft7_1","discriminator_1","draft7MetaSchema","META_SUPPORT_DATA","META_SCHEMA_ID","Ajv","v","metaSchema","exports","module","validate_1","codegen_1","validation_error_1","ref_error_1","ajv_1","codegen_1","ops","KWDs","error","keyword","schemaCode","exports","cxt","gen","data","it","opts","self","fCxt","validate$DataFormat","validateFormat","fmts","fmt","compareCode","format","fmtDef","formatLimitPlugin","ajv","formats_1","limit_1","codegen_1","fullName","fastName","formatsPlugin","ajv","opts","addFormats","formats","exportName","list","name","mode","f","fs","_a","_b","module","exports","Command","existsSync","writeFileSync","resolve","chalk","TEMPLATE","registerInitCommand","program","options","filePath","readFileSync","resolve","dirname","chalk","external_exports","__export","BRAND","DIRTY","EMPTY_PATH","INVALID","NEVER","OK","ParseStatus","ZodType","ZodAny","ZodArray","ZodBigInt","ZodBoolean","ZodBranded","ZodCatch","ZodDate","ZodDefault","ZodDiscriminatedUnion","ZodEffects","ZodEnum","ZodError","ZodFirstPartyTypeKind","ZodFunction","ZodIntersection","ZodIssueCode","ZodLazy","ZodLiteral","ZodMap","ZodNaN","ZodNativeEnum","ZodNever","ZodNull","ZodNullable","ZodNumber","ZodObject","ZodOptional","ZodParsedType","ZodPipeline","ZodPromise","ZodReadonly","ZodRecord","ZodSet","ZodString","ZodSymbol","ZodTuple","ZodUndefined","ZodUnion","ZodUnknown","ZodVoid","addIssueToContext","anyType","arrayType","bigIntType","booleanType","coerce","custom","dateType","datetimeRegex","en_default","discriminatedUnionType","effectsType","enumType","functionType","getErrorMap","getParsedType","instanceOfType","intersectionType","isAborted","isAsync","isDirty","isValid","late","lazyType","literalType","makeIssue","mapType","nanType","nativeEnumType","neverType","nullType","nullableType","numberType","objectType","objectUtil","oboolean","onumber","optionalType","ostring","pipelineType","preprocessType","promiseType","quotelessJson","recordType","setType","setErrorMap","strictObjectType","stringType","symbolType","tupleType","undefinedType","unionType","unknownType","util","voidType","util","_","assertIs","_arg","assertNever","_x","items","obj","item","validKeys","k","filtered","e","object","keys","key","arr","checker","val","joinValues","array","separator","value","objectUtil","first","second","ZodParsedType","getParsedType","data","ZodIssueCode","util","quotelessJson","obj","ZodError","_ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","error","curr","i","el","value","formErrors","firstEl","errorMap","issue","_ctx","message","ZodIssueCode","ZodParsedType","util","en_default","overrideErrorMap","en_default","setErrorMap","map","overrideErrorMap","getErrorMap","makeIssue","params","data","path","errorMaps","issueData","fullPath","fullIssue","errorMessage","maps","m","map","EMPTY_PATH","addIssueToContext","ctx","overrideMap","getErrorMap","issue","en_default","x","ParseStatus","_ParseStatus","status","results","arrayValue","s","INVALID","pairs","syncPairs","pair","key","value","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","message","ParseInputLazyPath","parent","value","path","key","handleResult","ctx","result","isValid","error","ZodError","processCreateParams","params","errorMap","invalid_type_error","required_error","description","iss","message","ZodType","input","getParsedType","ParseStatus","isAsync","data","err","maybeAsyncResult","check","getIssueProperties","val","setError","ZodIssueCode","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","def","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","transform","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","target","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","timeRegexSource","args","secondsRegexSource","secondsQuantifier","timeRegex","datetimeRegex","regex","opts","isValidIP","ip","version","isValidJWT","jwt","alg","header","base64","decoded","isValidCidr","ZodString","_ZodString","ZodParsedType","addIssueToContext","INVALID","status","tooBig","tooSmall","util","validation","errorUtil","options","minLength","maxLength","len","ch","min","max","floatSafeRemainder","step","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","_ZodNumber","kind","inclusive","ZodBigInt","_ZodBigInt","ZodBoolean","OK","ZodDate","_ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","_ZodArray","item","i","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","_ZodObject","shape","keys","shapeKeys","extraKeys","pairs","keyValidator","unknownKeys","catchall","syncPairs","pair","issue","defaultError","augmentation","merging","index","mask","newField","createZodEnum","handleResults","results","unionErrors","childCtx","dirty","issues","types","getDiscriminator","type","ZodLazy","ZodLiteral","ZodEnum","ZodNativeEnum","ZodDiscriminatedUnion","_ZodDiscriminatedUnion","discriminator","discriminatorValue","optionsMap","discriminatorValues","mergeValues","a","b","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","isAborted","merged","isDirty","left","right","_ZodTuple","items","itemIndex","x","rest","schemas","ZodRecord","_ZodRecord","keyType","valueType","first","second","third","ZodMap","finalMap","ZodSet","_ZodSet","finalizeSet","elements","parsedSet","element","minSize","maxSize","size","ZodFunction","_ZodFunction","makeArgsIssue","makeIssue","getErrorMap","en_default","makeReturnsIssue","returns","fn","me","parsedArgs","e","parsedReturns","returnType","func","getter","values","_ZodEnum","expectedValues","enumValues","newDef","opt","nativeEnumValues","promisified","effect","checkCtx","arg","processed","DIRTY","executeRefinement","acc","inner","base","preprocess","ZodOptional","ZodType","input","ZodParsedType","OK","type","params","ZodFirstPartyTypeKind","processCreateParams","ZodNullable","ZodDefault","ctx","data","ZodCatch","newCtx","result","isAsync","ZodError","ZodNaN","addIssueToContext","ZodIssueCode","INVALID","BRAND","ZodBranded","ZodPipeline","_ZodPipeline","status","inResult","DIRTY","a","b","ZodReadonly","freeze","isValid","cleanParams","p","custom","check","_params","fatal","ZodAny","r","_fatal","late","ZodObject","ZodFirstPartyTypeKind","instanceOfType","cls","params","custom","data","stringType","ZodString","numberType","ZodNumber","nanType","ZodNaN","bigIntType","ZodBigInt","booleanType","ZodBoolean","dateType","ZodDate","symbolType","ZodSymbol","undefinedType","ZodUndefined","nullType","ZodNull","anyType","ZodAny","unknownType","ZodUnknown","neverType","ZodNever","voidType","ZodVoid","arrayType","ZodArray","objectType","ZodObject","strictObjectType","unionType","ZodUnion","discriminatedUnionType","ZodDiscriminatedUnion","intersectionType","ZodIntersection","tupleType","ZodTuple","recordType","ZodRecord","mapType","ZodMap","setType","ZodSet","functionType","ZodFunction","lazyType","ZodLazy","literalType","ZodLiteral","enumType","ZodEnum","nativeEnumType","ZodNativeEnum","promiseType","ZodPromise","effectsType","ZodEffects","optionalType","ZodOptional","nullableType","ZodNullable","preprocessType","pipelineType","ZodPipeline","ostring","onumber","oboolean","coerce","arg","NEVER","INVALID","import_yaml","createHash","ProviderError","code","message","statusCode","retryable","raw","ok","data","err","error","matchArgs","actual","expected","key","value","createToolCalledAssertion","tool","argsMatch","context","results","matching","tc","actualNames","anyMatch","createToolNotCalledAssertion","found","createToolOrderAssertion","expectations","exp","actualIndex","orderMatch","ajvInstance","getAjvInstance","ajvMod","formatsMod","Ajv","addFormats","instance","validatorCache","getOrCompileValidator","ajv","schema","cached","validate","createSchemaAssertion","config","parsed","e","valid","lowerOutput","substring","lowerOutputNc","withinLimit","redact","match","NESTED_QUANTIFIER_RE","hasNestedQuantifiers","pattern","safeRegexExec","regex","text","maxMatches","start","m","createPiiAssertion","compiledPatterns","compilationError","i","cp","matches","totalMatches","name","remaining","passed","createKeywordsPresentAssertion","keywords","lower","kw","createKeywordsAbsentAssertion","keyword","JUDGE_SYSTEM_PROMPT","buildUserPrompt","outputText","criteria","rubric","prompt","parseJudgeResponse","jsonMatch","createJudgeAssertion","response","DRIFT_JUDGE_SYSTEM","parseDriftResponse","getNestedField","obj","path","parts","current","part","fieldDiff","baselineText","fields","baselineObj","outputObj","mismatched","field","baseVal","outVal","createDriftAssertion","driftScore","score","createAssertionsFromExpect","expect","overrides","assertions","tc","createToolOrderAssertion","createToolNotCalledAssertion","createToolCalledAssertion","createSchemaAssertion","createPiiAssertion","createKeywordsPresentAssertion","createKeywordsAbsentAssertion","criterion","createJudgeAssertion","createDriftAssertion","PROBABILISTIC_TYPES","classifyAssertion","assertionType","withRetry","fn","options","maxRetries","shouldRetry","baseDelayMs","lastError","attempt","error","delay","sleep","ms","resolve","OPENAI_PRICING","mapFinishReason","reason","mapError","status","data","message","ProviderError","createOpenAIAdapter","httpClient","apiKey","baseUrl","organization","timeoutMs","config","request","body","m","tc","t","headers","startTime","response","json","latencyMs","parsed","choice","toolCalls","args","model","usage","pricing","ANTHROPIC_PRICING","createAnthropicAdapter","systemMessage","nonSystemMessages","contentBlocks","text","block","inputTokens","outputTokens","entry","key","_model","doneReason","hasToolCalls","createOllamaAdapter","messages","rawToolCalls","index","GEMINI_PRICING","createGeminiAdapter","contents","systemInstruction","parseToolContent","parts","geminiRole","generationConfig","mapToolChoice","url","candidate","toolCallIndex","part","content","createMistralAdapter","_usage","createCohereAdapter","c","PROVIDER_FACTORIES","createProvider","name","factory","supported","runConversation","adapter","initialRequest","toolSimulations","maxTurns","turns","allToolCalls","totalUsage","totalLatencyMs","turn","toolCall","simulation","s","toolResponse","resolveToolResponse","lastResponse","resp","matchArgs","expected","actual","value","SpanMappingSchema","z","SpanFilterSchema","TraceConfigSchema","NonEmptyString","Temperature","Score01","RegexPattern","val","ProviderConfigSchema","OllamaProviderConfigSchema","ProvidersSchema","providers","k","ModelParamsSchema","ModelSchema","PromptSchema","OutputExpectSchema","output","PIIGuardrailSchema","KeywordGuardrailSchema","JudgeCriterionSchema","ToolCallExpectSchema","BaselineDriftSchema","GuardrailsSchema","ExpectSchema","ToolSimulationSchema","TestCaseSchema","test","hasPrompt","hasCommand","GatesSchema","ComplianceSchema","UploadSchema","SuiteSchema","KindLMConfigSchema","prompts","validateConfig","raw","result","ok","err","issue","MAX_CONFIG_SIZE","MAX_TESTS","MAX_SUITES","parseConfig","yamlContent","parseYaml","cause","validated","errors","modelIds","testNames","modelId","pathResult","safePath","base","relative","normalizedBase","joined","resolved","normalizePath","normalizedRoot","p","PLACEHOLDER_RE","interpolate","template","vars","missing","findMissingVars","_match","match","aggregateRuns","runs","first","testCaseName","passRate","r","a","scoresByType","run","arr","assertionScores","type","scores","sum","b","failureCodeSet","latencyAvgMs","totalCostUsd","totalTokens","parseCommandOutput","lines","textLines","outputJson","toolCallCounter","line","trimmed","event","tryParseEvent","createRunner","deps","schemaCache","fullPath","joinPath","readResult","e","units","repeat","runIndex","modelConfig","caseResults","runWithConcurrency","unit","executeUnit","groupKey","groups","aggregated","testRunResults","agg","skippedTests","allTests","passed","failed","errored","skipped","suiteStatus","runResult","executeCommandUnit","errorResult","promptDef","userResult","sysResult","tools","conversation","costEstimate","overrides","assertions","createAssertionsFromExpect","judgeModelId","judgeModelConfig","judgeAdapter","context","baselineKey","baselineEntry","allResults","assertion","results","allPassed","cmdResult","execResult","tasks","limit","nextIndex","worker","task","workers","evaluateGates","gates","totalRuns","totalPassed","overallPassRate","fmt","schemaFailures","countFailures","judgeScores","collectScores","judgeAvg","driftScores","maxDrift","piiFailures","keywordFailures","totalCost","avgLatency","rate","computeCategoryPassRate","g","category","total","classifyAssertion","codes","count","code","assertionType","n","identity","noColor","createPrettyReporter","colorize","gateEvaluation","suite","formatSuite","formatTest","meta","formatTestMeta","formatAssertion","passStr","failStr","errorStr","formatDuration","formatCost","gate","icon","scoreStr","formatScore","label","detail","threshold","extractThreshold","symbol","belowMatch","usd","createJsonReporter","report","createJunitReporter","totalTime","suiteFailures","suiteErrors","suiteTime","esc","testTime","failedAssertions","gateFailures","createComplianceReporter","timestamp","sections","formatGateEvidence","fmtNum","verdict","contentAboveHash","hash","createHash","gateNames","relevant","BASELINE_VERSION","serializeBaseline","deserializeBaseline","obj","readBaseline","suiteName","io","writeBaseline","listBaselines","buildBaselineData","representative","compareBaseline","baseline","currentResults","regressions","improvements","unchanged","newTests","removedTests","baselineKeys","current","diff","newFailureCodes","parseOtlpPayload","payload","spans","resourceSpan","resourceAttrs","flattenAttributes","scopeSpan","span","startTimeMs","nanosToMs","endTimeMs","nanos","attrs","attr","extractValue","filterSpans","filter","mapSpansToResult","mapping","outputText","system","inTok","outTok","toolName","toolArgs","parsedArgs","buildContextFromTrace","readFileSync","createNodeFileReader","path","registerValidateCommand","program","options","configPath","resolve","configDir","dirname","yamlContent","readFileSync","chalk","fileReader","createNodeFileReader","result","Vt","details","e","config","chalk","readFileSync","statSync","resolve","dirname","chalk","createHttpClient","url","init","controller","timeoutId","response","ora","createSpinner","instance","text","spawn","createNodeCommandExecutor","command","options","resolve","child","spawn","stdoutChunks","stderrChunks","chunk","timer","code","signal","A","M","e","MAX_CONFIG_SIZE","runTests","options","spinner","createSpinner","interrupted","sigintHandler","chalk","runTestsInner","configPath","resolve","configDir","dirname","stat","statSync","yamlContent","readFileSync","fileReader","createNodeFileReader","parseResult","Vt","config","httpClient","createHttpClient","adapters","providers","name","providerConfig","apiKey","key","adapter","bt","cause","msg","completedTests","totalTests","countExecutionUnits","onProgress","event","commandExecutor","t","createNodeCommandExecutor","runResult","Ht","count","test","repeat","modelCount","readFileSync","writeFileSync","mkdirSync","join","createHash","getLastRunPath","saveLastRun","data","filePath","dir","slimmed","agg","failureMessages","r","a","m","loadLastRun","raw","parsed","computeConfigHash","yamlContent","PDFDocument","createWriteStream","mkdir","dirname","parseSections","markdown","lines","sections","currentHeading","currentLevel","currentBody","line","headingMatch","extractTitle","extractHash","headingSize","level","parseTable","headerLine","separatorLine","parseCells","c","header","rows","i","row","ensureSpace","doc","needed","bottomMargin","renderPageHeader","timestamp","renderPageFooter","renderTable","table","contentWidth","colCount","colWidth","leftMargin","rowHeight","drawRow","cells","bold","bgColor","y","x","renderCompliancePdf","markdownContent","outputPath","resolve","reject","stream","title","hash","section","size","bodyLines","inCodeBlock","codeY","nextLine","tableLines","j","subheadingMatch","registerTestCommand","program","options","runnerResult","config","yamlContent","runTests","result","aggregated","gateEvaluation","Qt","report","selectReporter","complianceReport","is","pdfPath","renderCompliancePdf","chalk","saveLastRun","computeConfigHash","allPassed","e","g","prefix","isKindlmError","label","chalkColorize","type","os","ns","Zt","resolve","dirname","join","readFileSync","chalk","readFileSync","writeFileSync","mkdirSync","readdirSync","join","sanitizeFilename","name","createFileBaselineIO","kindlmDir","baselinesDir","suiteName","filePath","content","e","f","registerBaselineCommand","program","baseline","options","configDir","dirname","resolve","kindlmDir","join","io","createFileBaselineIO","config","runnerResult","runTests","aggregated","baselineData","cs","writeResult","us","chalk","testCount","e","configPath","yamlContent","readFileSync","fileReader","createNodeFileReader","parseResult","Vt","suiteName","baselineResult","ls","currentData","comparison","ds","r","formatPercent","imp","u","t","listResult","ps","names","name","readResult","parsed","$e","rate","createInterface","Writable","chalk","readFileSync","writeFileSync","mkdirSync","unlinkSync","chmodSync","join","homedir","getCredentialsPath","loadToken","raw","parsed","saveToken","token","filePath","dir","data","clearToken","DEFAULT_CLOUD_URL","CloudApiError","status","message","getCloudUrl","url","DEFAULT_CLOUD_URL","isLocalhost","parsed","sleep","ms","resolve","createCloudClient","baseUrl","token","request","method","path","body","headers","init","lastError","attempt","controller","timeoutId","response","errorBody","contentType","error","registerLoginCommand","program","options","clearToken","chalk","showStatus","token","promptForToken","client","createCloudClient","getCloudUrl","e","CloudApiError","saveToken","loadToken","resolve","reject","muted","Writable","_chunk","_encoding","callback","rl","createInterface","answer","trimmed","basename","execSync","chalk","execSync","getGitInfo","commitSha","branch","dirty","detectCI","e","segment","uploadResults","client","runnerResult","options","projectId","findOrCreateProject","suiteId","findOrCreateSuite","run","results","mapAggregatedResults","BATCH_SIZE","i","batch","runResult","passRate","modelIds","a","judgeScores","s","judgeAvgScore","b","latencies","latencyAvgMs","totalCost","sum","costEstimateUsd","name","projects","existing","p","configHash","suites","aggregated","agg","cached","failureMessages","r","m","registerUploadCommand","program","options","token","loadToken","chalk","lastRun","loadLastRun","gitInfo","getGitInfo","ciEnv","detectCI","projectName","resolveProjectName","client","createCloudClient","getCloudUrl","spinner","createSpinner","result","uploadResults","e","extractRepoName","remoteUrl","segments","last","sshMatch","remote","execSync","name","basename","readFileSync","statSync","resolve","dirname","spawn","chalk","createServer","createTraceServer","port","collectedSpans","server","spanListeners","notifyListeners","listener","handleRequest","req","res","chunks","chunk","body","parsed","result","ms","resolve","reject","createServer","timeoutMs","timer","l","onSpan","registerTraceCommand","program","opts","spinner","createSpinner","configPath","resolve","configDir","dirname","statSync","chalk","yamlContent","readFileSync","fileReader","createNodeFileReader","parseResult","Vt","config","traceConfig","port","timeoutMs","traceServer","createTraceServer","spawn","e","spans","filtered","gs","mappingResult","hs","httpClient","createHttpClient","adapters","providers","name","providerConfig","apiKey","key","adapter","bt","judgeModelId","judgeModelConfig","m","judgeAdapter","context","Rs","testResults","test","assertions","H","allResults","assertion","results","totalAssertions","s","t","passedAssertions","a","failedAssertions","testName","icon","aIcon","label","gateEval","Qt","g","createProgram","program","Command","registerInitCommand","registerValidateCommand","registerTestCommand","registerBaselineCommand","registerLoginCommand","registerUploadCommand","registerTraceCommand","reason","message","error","createProgram"]}