{"version":3,"sources":["../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/codegen/code.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/codegen/scope.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/codegen/index.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/util.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/names.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/errors.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/validate/boolSchema.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/rules.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/validate/applicability.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/validate/dataType.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/validate/defaults.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/code.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/validate/keyword.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/validate/subschema.ts","../../../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../../../../node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/resolve.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/validate/index.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/runtime/validation_error.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/ref_error.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/compile/index.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/dist/refs/data.json","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/index.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/urn-uuid.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/urn.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/mailto.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/wss.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/ws.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/https.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/http.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/uri.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/node_modules/punycode/punycode.es6.js","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/regexps-iri.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/regexps-uri.ts","../../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/util.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/runtime/uri.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/core.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/core/id.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/core/ref.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/core/index.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/runtime/ucs2length.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/limitLength.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/pattern.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/required.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/limitItems.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/runtime/equal.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/const.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/enum.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/validation/index.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/items.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/items2020.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/contains.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/properties.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/not.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/allOf.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/if.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/applicator/index.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/format/format.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/format/index.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/metadata.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/draft7.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/discriminator/types.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/vocabularies/discriminator/index.ts","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/dist/refs/json-schema-draft-07.json","../../../../node_modules/.pnpm/ajv@8.16.0/node_modules/ajv/lib/ajv.ts","../../src/index.ts","../../../chromadb-core/package.json","../../../chromadb-core/src/generated/runtime.ts","../../../chromadb-core/src/generated/api.ts","../../../chromadb-core/src/generated/models.ts","../../../chromadb-core/src/generated/configuration.ts","../../../chromadb-core/src/Errors.ts","../../../chromadb-core/src/CollectionConfiguration.ts","../../../chromadb-core/src/Collection.ts","../../../chromadb-core/src/utils.ts","../../../chromadb-core/src/auth.ts","../../../chromadb-core/src/ChromaFetch.ts","../../../chromadb-core/src/AdminClient.ts","../../../../../../schemas/embedding_functions/amazon_bedrock.json","../../../../../../schemas/embedding_functions/base_schema.json","../../../../../../schemas/embedding_functions/chroma_langchain.json","../../../../../../schemas/embedding_functions/cohere.json","../../../../../../schemas/embedding_functions/default.json","../../../../../../schemas/embedding_functions/google_generative_ai.json","../../../../../../schemas/embedding_functions/google_palm.json","../../../../../../schemas/embedding_functions/google_vertex.json","../../../../../../schemas/embedding_functions/huggingface.json","../../../../../../schemas/embedding_functions/huggingface_server.json","../../../../../../schemas/embedding_functions/instructor.json","../../../../../../schemas/embedding_functions/jina.json","../../../../../../schemas/embedding_functions/ollama.json","../../../../../../schemas/embedding_functions/onnx_mini_lm_l6_v2.json","../../../../../../schemas/embedding_functions/open_clip.json","../../../../../../schemas/embedding_functions/openai.json","../../../../../../schemas/embedding_functions/roboflow.json","../../../../../../schemas/embedding_functions/sentence_transformer.json","../../../../../../schemas/embedding_functions/text2vec.json","../../../../../../schemas/embedding_functions/transformers.json","../../../../../../schemas/embedding_functions/voyageai.json","../../../chromadb-core/src/schemas/schemaUtils.ts","../../../chromadb-core/src/embeddings/DefaultEmbeddingFunction.ts","../../../chromadb-core/src/ChromaClient.ts","../../../chromadb-core/src/CloudClient.ts","../../../chromadb-core/src/embeddings/CohereEmbeddingFunction.ts","../../../chromadb-core/src/embeddings/GoogleGeminiEmbeddingFunction.ts","../../../chromadb-core/src/embeddings/HuggingFaceEmbeddingServerFunction.ts","../../../chromadb-core/src/embeddings/JinaEmbeddingFunction.ts","../../../chromadb-core/src/embeddings/OllamaEmbeddingFunction.ts","../../../chromadb-core/src/embeddings/OpenAIEmbeddingFunction.ts","../../../chromadb-core/src/embeddings/TransformersEmbeddingFunction.ts","../../../chromadb-core/src/embeddings/VoyageAIEmbeddingFunction.ts","../../../chromadb-core/src/types.ts"],"sourcesContent":["export 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 {URIComponents} from \"uri-js\"\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: URIComponents): 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 * as URI from \"uri-js\"\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: URI.URIComponents,\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 { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler<UUIDComponents, URIOptions, URNComponents> = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler<URNComponents,URNOptions> = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array<string>,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\";  //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$));  //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\";  //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$);  //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$));  //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\";  //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler<MailtoComponents> =  {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler<Components extends URIComponents = URIComponents, Options extends URIOptions = URIOptions, ParentComponents extends URIComponents = URIComponents> {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array<string>(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce<Array<{index:number,length:number}>>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = (<RegExpMatchArray>(\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else {  //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array<string> = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\");  //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\");  //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options);  //normalize base components\n\t\trelative = parse(serialize(relative, options), options);  //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(<URIComponents>uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(<URIComponents>uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(<URIComponents>uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),  //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),  //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",  //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",  //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),  //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp(                                                            subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), //                           6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp(                                                 \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), //                      \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp(                                 H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[               h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" +        H16$ + \"\\\\:\"          + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\"    h16 \":\"   ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\"                                + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\"              ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\"                                + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\"              h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"                                       ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),  //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),  //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),  //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),  //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),  //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\")  //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","export function merge(...sets:Array<string>):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array<any> {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}","import * as uri from \"uri-js\"\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  $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 {_, 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 {data, $data, schema, schemaCode, it} = cxt\n    // TODO regexp should be wrapped in try/catchs\n    const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n    const regExp = $data ? _`(new RegExp(${schemaCode}, ${u}))` : usePattern(cxt, schema)\n    cxt.fail$data(_`!${regExp}.test(${data})`)\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","/**\n * Re-exports all functionality from the core package\n */\nexport * from \"@internal/chromadb-core\";\n","{\n  \"name\": \"@internal/chromadb-core\",\n  \"version\": \"2.3.0\",\n  \"private\": true,\n  \"description\": \"Core functionality for ChromaDB JavaScript client\",\n  \"license\": \"Apache-2.0\",\n  \"type\": \"module\",\n  \"main\": \"dist/cjs/chromadb-core.cjs\",\n  \"types\": \"dist/chromadb-core.d.ts\",\n  \"module\": \"dist/chromadb-core.legacy-esm.js\",\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./dist/chromadb-core.d.ts\",\n        \"default\": \"./dist/chromadb-core.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./dist/cjs/chromadb-core.d.cts\",\n        \"default\": \"./dist/cjs/chromadb-core.cjs\"\n      }\n    }\n  },\n  \"files\": [\n    \"src\",\n    \"dist\"\n  ],\n  \"scripts\": {\n    \"test\": \"jest --runInBand\",\n    \"test:functional\": \"jest --runInBand --testPathIgnorePatterns=test/auth.*.test.ts\",\n    \"test:update\": \"jest --runInBand --updateSnapshot\",\n    \"prebuild\": \"rimraf dist\",\n    \"build\": \"NODE_OPTIONS=--enable-source-maps tsup\",\n    \"watch\": \"NODE_OPTIONS=--enable-source-maps tsup --watch\"\n  },\n  \"dependencies\": {\n    \"ajv\": \"^8.12.0\",\n    \"cliui\": \"^8.0.1\",\n    \"isomorphic-fetch\": \"^3.0.0\"\n  },\n  \"devDependencies\": {\n    \"@jest/globals\": \"^29.7.0\",\n    \"@jest/types\": \"^29.6.3\",\n    \"@types/jest\": \"^29.5.0\",\n    \"@types/node\": \"^20.8.10\",\n    \"bcrypt\": \"^5.1.1\",\n    \"jest\": \"^29.5.0\",\n    \"prettier\": \"2.8.7\",\n    \"rimraf\": \"^5.0.0\",\n    \"ts-jest\": \"^29.1.0\",\n    \"ts-node\": \"^10.9.1\",\n    \"tsup\": \"^7.2.0\",\n    \"typescript\": \"^5.0.4\"\n  }\n}\n","import \"isomorphic-fetch\";\n/* eslint-disable */\n// tslint:disable\n/**\n * chroma-frontend\n *\n *\n * OpenAPI spec version: 1.0.0\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator+.\n * https://github.com/karlvr/openapi-generator-plus\n * Do not edit the class manually.\n */\n\nexport const defaultFetch = fetch;\nimport { Configuration } from \"./configuration\";\n\nexport const BASE_PATH = \"\";\n\n/**\n *\n * @export\n */\nexport const COLLECTION_FORMATS = {\n  csv: \",\",\n  ssv: \" \",\n  tsv: \"\\t\",\n  pipes: \"|\",\n};\n\n/**\n *\n * @export\n * @type FetchAPI\n */\nexport type FetchAPI = typeof defaultFetch;\n\n/**\n *\n * @export\n * @interface FetchArgs\n */\nexport interface FetchArgs {\n  url: string;\n  options: RequestInit;\n}\n\n/**\n *\n * @export\n * @class BaseAPI\n */\nexport class BaseAPI {\n  protected configuration?: Configuration;\n\n  constructor(\n    configuration?: Configuration,\n    protected basePath: string = BASE_PATH,\n    protected fetch: FetchAPI = defaultFetch,\n  ) {\n    if (configuration) {\n      this.configuration = configuration;\n      this.basePath = configuration.basePath || this.basePath;\n    }\n  }\n}\n\n/**\n *\n * @export\n * @class RequiredError\n * @extends {Error}\n */\nexport class RequiredError extends Error {\n  constructor(public field: string, msg?: string) {\n    super(msg);\n    Object.setPrototypeOf(this, RequiredError.prototype);\n    this.name = \"RequiredError\";\n  }\n}\n","/* eslint-disable */\n// tslint:disable\n/**\n * chroma-frontend\n *\n *\n * OpenAPI spec version: 1.0.0\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator+.\n * https://github.com/karlvr/openapi-generator-plus\n * Do not edit the class manually.\n */\n\nimport { Configuration } from \"./configuration\";\nimport {\n  BASE_PATH,\n  COLLECTION_FORMATS,\n  FetchAPI,\n  FetchArgs,\n  BaseAPI,\n  RequiredError,\n  defaultFetch,\n} from \"./runtime\";\nimport { Api } from \"./models\";\n\nexport type FactoryFunction<T> = (\n  configuration?: Configuration,\n  basePath?: string,\n  fetch?: FetchAPI,\n) => T;\n\n/**\n * ApiApi - fetch parameter creator\n * @export\n */\nexport const ApiApiFetchParamCreator = function (\n  configuration?: Configuration,\n) {\n  return {\n    /**\n     * @summary Adds records to a collection.\n     * @param {string} tenant\n     * @param {string} database\n     * @param {string} collectionId\n     * @param {Api.AddCollectionRecordsPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionAdd(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.AddCollectionRecordsPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling collectionAdd.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling collectionAdd.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling collectionAdd.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling collectionAdd.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}/add`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Retrieves the number of records in a collection.\n     * @param {string} tenant <p>Tenant ID for the collection</p>\n     * @param {string} database <p>Database containing this collection</p>\n     * @param {string} collectionId <p>Collection ID whose records are counted</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionCount(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling collectionCount.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling collectionCount.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling collectionCount.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}/count`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Deletes records in a collection. Can filter by IDs or metadata.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>Collection ID</p>\n     * @param {Api.DeleteCollectionRecordsPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionDelete(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.DeleteCollectionRecordsPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling collectionDelete.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling collectionDelete.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling collectionDelete.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling collectionDelete.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}/delete`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Retrieves records from a collection by ID or metadata filter.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name for the collection</p>\n     * @param {string} collectionId <p>Collection ID to fetch records from</p>\n     * @param {Api.GetRequestPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionGet(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.GetRequestPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling collectionGet.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling collectionGet.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling collectionGet.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling collectionGet.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}/get`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Query a collection in a variety of ways, including vector search, metadata filtering, and full-text search\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name containing the collection</p>\n     * @param {string} collectionId <p>Collection ID to query</p>\n     * @param {number} [limit] <p>Limit for pagination</p>\n     * @param {number} [offset] <p>Offset for pagination</p>\n     * @param {Api.QueryRequestPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionQuery(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      limit: number | undefined,\n      offset: number | undefined,\n      request: Api.QueryRequestPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling collectionQuery.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling collectionQuery.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling collectionQuery.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling collectionQuery.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}/query`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      if (limit !== undefined) {\n        localVarQueryParameter.append(\"limit\", String(limit));\n      }\n\n      if (offset !== undefined) {\n        localVarQueryParameter.append(\"offset\", String(offset));\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Updates records in a collection by ID.\n     * @param {string} tenant\n     * @param {string} database\n     * @param {string} collectionId\n     * @param {Api.UpdateCollectionRecordsPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionUpdate(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.UpdateCollectionRecordsPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling collectionUpdate.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling collectionUpdate.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling collectionUpdate.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling collectionUpdate.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}/update`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Upserts records in a collection (create if not exists, otherwise update).\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>Collection ID</p>\n     * @param {Api.UpsertCollectionRecordsPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionUpsert(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.UpsertCollectionRecordsPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling collectionUpsert.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling collectionUpsert.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling collectionUpsert.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling collectionUpsert.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}/upsert`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Retrieves the total number of collections in a given database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name to count collections from</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    countCollections(\n      tenant: string,\n      database: string,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling countCollections.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling countCollections.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections_count`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Creates a new collection under the specified database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name containing the new collection</p>\n     * @param {Api.CreateCollectionPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    createCollection(\n      tenant: string,\n      database: string,\n      request: Api.CreateCollectionPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling createCollection.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling createCollection.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling createCollection.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Creates a new database for a given tenant.\n     * @param {string} tenant <p>Tenant ID to associate with the new database</p>\n     * @param {Api.CreateDatabasePayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    createDatabase(\n      tenant: string,\n      request: Api.CreateDatabasePayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling createDatabase.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling createDatabase.\",\n        );\n      }\n      let localVarPath = `/api/v2/tenants/{tenant}/databases`.replace(\n        \"{tenant}\",\n        encodeURIComponent(String(tenant)),\n      );\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Creates a new tenant.\n     * @param {Api.CreateTenantPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    createTenant(\n      request: Api.CreateTenantPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling createTenant.\",\n        );\n      }\n      let localVarPath = `/api/v2/tenants`;\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Deletes a collection in a given database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>UUID of the collection to delete</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    deleteCollection(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling deleteCollection.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling deleteCollection.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling deleteCollection.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"DELETE\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Deletes a specific database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Name of the database to delete</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    deleteDatabase(\n      tenant: string,\n      database: string,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling deleteDatabase.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling deleteDatabase.\",\n        );\n      }\n      let localVarPath = `/api/v2/tenants/{tenant}/databases/{database}`\n        .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n        .replace(\"{database}\", encodeURIComponent(String(database)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"DELETE\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Forks an existing collection.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>UUID of the collection to update</p>\n     * @param {Api.ForkCollectionPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    forkCollection(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.ForkCollectionPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling forkCollection.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling forkCollection.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling forkCollection.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling forkCollection.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}/fork`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Retrieves a collection by ID or name.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>UUID of the collection</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    getCollection(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling getCollection.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling getCollection.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling getCollection.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Retrieves a specific database by name.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Name of the database to retrieve</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    getDatabase(\n      tenant: string,\n      database: string,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling getDatabase.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling getDatabase.\",\n        );\n      }\n      let localVarPath = `/api/v2/tenants/{tenant}/databases/{database}`\n        .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n        .replace(\"{database}\", encodeURIComponent(String(database)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Returns an existing tenant by name.\n     * @param {string} tenantName <p>Tenant name or ID to retrieve</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    getTenant(tenantName: string, options: RequestInit = {}): FetchArgs {\n      // verify required parameter 'tenantName' is not null or undefined\n      if (tenantName === null || tenantName === undefined) {\n        throw new RequiredError(\n          \"tenantName\",\n          \"Required parameter tenantName was null or undefined when calling getTenant.\",\n        );\n      }\n      let localVarPath = `/api/v2/tenants/{tenant_name}`.replace(\n        \"{tenant_name}\",\n        encodeURIComponent(String(tenantName)),\n      );\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Retrieves the current user's identity, tenant, and databases.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    getUserIdentity(options: RequestInit = {}): FetchArgs {\n      let localVarPath = `/api/v2/auth/identity`;\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Health check endpoint that returns 200 if the server and executor are ready\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    healthcheck(options: RequestInit = {}): FetchArgs {\n      let localVarPath = `/api/v2/healthcheck`;\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Heartbeat endpoint that returns a nanosecond timestamp of the current time.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    heartbeat(options: RequestInit = {}): FetchArgs {\n      let localVarPath = `/api/v2/heartbeat`;\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Lists all collections in the specified database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name to list collections from</p>\n     * @param {number} [limit] <p>Limit for pagination</p>\n     * @param {number} [offset] <p>Offset for pagination</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    listCollections(\n      tenant: string,\n      database: string,\n      limit: number | undefined,\n      offset: number | undefined,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling listCollections.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling listCollections.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      if (limit !== undefined) {\n        localVarQueryParameter.append(\"limit\", String(limit));\n      }\n\n      if (offset !== undefined) {\n        localVarQueryParameter.append(\"offset\", String(offset));\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Lists all databases for a given tenant.\n     * @param {string} tenant <p>Tenant ID to list databases for</p>\n     * @param {number} [limit] <p>Limit for pagination</p>\n     * @param {number} [offset] <p>Offset for pagination</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    listDatabases(\n      tenant: string,\n      limit: number | undefined,\n      offset: number | undefined,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling listDatabases.\",\n        );\n      }\n      let localVarPath = `/api/v2/tenants/{tenant}/databases`.replace(\n        \"{tenant}\",\n        encodeURIComponent(String(tenant)),\n      );\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      if (limit !== undefined) {\n        localVarQueryParameter.append(\"limit\", String(limit));\n      }\n\n      if (offset !== undefined) {\n        localVarQueryParameter.append(\"offset\", String(offset));\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Pre-flight checks endpoint reporting basic readiness info.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    preFlightChecks(options: RequestInit = {}): FetchArgs {\n      let localVarPath = `/api/v2/pre-flight-checks`;\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Reset endpoint allowing authorized users to reset the database.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    reset(options: RequestInit = {}): FetchArgs {\n      let localVarPath = `/api/v2/reset`;\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"POST\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Updates an existing collection's name or metadata.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>UUID of the collection to update</p>\n     * @param {Api.UpdateCollectionPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    updateCollection(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.UpdateCollectionPayload,\n      options: RequestInit = {},\n    ): FetchArgs {\n      // verify required parameter 'tenant' is not null or undefined\n      if (tenant === null || tenant === undefined) {\n        throw new RequiredError(\n          \"tenant\",\n          \"Required parameter tenant was null or undefined when calling updateCollection.\",\n        );\n      }\n      // verify required parameter 'database' is not null or undefined\n      if (database === null || database === undefined) {\n        throw new RequiredError(\n          \"database\",\n          \"Required parameter database was null or undefined when calling updateCollection.\",\n        );\n      }\n      // verify required parameter 'collectionId' is not null or undefined\n      if (collectionId === null || collectionId === undefined) {\n        throw new RequiredError(\n          \"collectionId\",\n          \"Required parameter collectionId was null or undefined when calling updateCollection.\",\n        );\n      }\n      // verify required parameter 'request' is not null or undefined\n      if (request === null || request === undefined) {\n        throw new RequiredError(\n          \"request\",\n          \"Required parameter request was null or undefined when calling updateCollection.\",\n        );\n      }\n      let localVarPath =\n        `/api/v2/tenants/{tenant}/databases/{database}/collections/{collection_id}`\n          .replace(\"{tenant}\", encodeURIComponent(String(tenant)))\n          .replace(\"{database}\", encodeURIComponent(String(database)))\n          .replace(\"{collection_id}\", encodeURIComponent(String(collectionId)));\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"PUT\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarHeaderParameter.set(\"Content-Type\", \"application/json\");\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      if (request !== undefined) {\n        localVarRequestOptions.body = JSON.stringify(request || {});\n      }\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * @summary Returns the version of the server.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    version(options: RequestInit = {}): FetchArgs {\n      let localVarPath = `/api/v2/version`;\n      const localVarPathQueryStart = localVarPath.indexOf(\"?\");\n      const localVarRequestOptions: RequestInit = Object.assign(\n        { method: \"GET\" },\n        options,\n      );\n      const localVarHeaderParameter: Headers = options.headers\n        ? new Headers(options.headers)\n        : new Headers();\n      const localVarQueryParameter = new URLSearchParams(\n        localVarPathQueryStart !== -1\n          ? localVarPath.substring(localVarPathQueryStart + 1)\n          : \"\",\n      );\n      if (localVarPathQueryStart !== -1) {\n        localVarPath = localVarPath.substring(0, localVarPathQueryStart);\n      }\n\n      localVarRequestOptions.headers = localVarHeaderParameter;\n\n      const localVarQueryParameterString = localVarQueryParameter.toString();\n      if (localVarQueryParameterString) {\n        localVarPath += \"?\" + localVarQueryParameterString;\n      }\n      return {\n        url: localVarPath,\n        options: localVarRequestOptions,\n      };\n    },\n  };\n};\n\n/**\n * ApiApi - functional programming interface\n * @export\n */\nexport const ApiApiFp = function (configuration?: Configuration) {\n  return {\n    /**\n     * @summary Adds records to a collection.\n     * @param {string} tenant\n     * @param {string} database\n     * @param {string} collectionId\n     * @param {Api.AddCollectionRecordsPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionAdd(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.AddCollectionRecordsPayload,\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.AddCollectionRecordsResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).collectionAdd(tenant, database, collectionId, request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 201) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 400) {\n            return response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Retrieves the number of records in a collection.\n     * @param {string} tenant <p>Tenant ID for the collection</p>\n     * @param {string} database <p>Database containing this collection</p>\n     * @param {string} collectionId <p>Collection ID whose records are counted</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionCount(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<number> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).collectionCount(tenant, database, collectionId, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Deletes records in a collection. Can filter by IDs or metadata.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>Collection ID</p>\n     * @param {Api.DeleteCollectionRecordsPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionDelete(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.DeleteCollectionRecordsPayload,\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.DeleteCollectionRecordsResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).collectionDelete(tenant, database, collectionId, request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Retrieves records from a collection by ID or metadata filter.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name for the collection</p>\n     * @param {string} collectionId <p>Collection ID to fetch records from</p>\n     * @param {Api.GetRequestPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionGet(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.GetRequestPayload,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.GetResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).collectionGet(tenant, database, collectionId, request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Query a collection in a variety of ways, including vector search, metadata filtering, and full-text search\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name containing the collection</p>\n     * @param {string} collectionId <p>Collection ID to query</p>\n     * @param {number} [limit] <p>Limit for pagination</p>\n     * @param {number} [offset] <p>Offset for pagination</p>\n     * @param {Api.QueryRequestPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionQuery(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      limit: number | undefined,\n      offset: number | undefined,\n      request: Api.QueryRequestPayload,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.QueryResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).collectionQuery(\n        tenant,\n        database,\n        collectionId,\n        limit,\n        offset,\n        request,\n        options,\n      );\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Updates records in a collection by ID.\n     * @param {string} tenant\n     * @param {string} database\n     * @param {string} collectionId\n     * @param {Api.UpdateCollectionRecordsPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionUpdate(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.UpdateCollectionRecordsPayload,\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.UpdateCollectionRecordsResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).collectionUpdate(tenant, database, collectionId, request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            return response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Upserts records in a collection (create if not exists, otherwise update).\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>Collection ID</p>\n     * @param {Api.UpsertCollectionRecordsPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    collectionUpsert(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.UpsertCollectionRecordsPayload,\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.UpsertCollectionRecordsResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).collectionUpsert(tenant, database, collectionId, request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Retrieves the total number of collections in a given database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name to count collections from</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    countCollections(\n      tenant: string,\n      database: string,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<number> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).countCollections(tenant, database, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Creates a new collection under the specified database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name containing the new collection</p>\n     * @param {Api.CreateCollectionPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    createCollection(\n      tenant: string,\n      database: string,\n      request: Api.CreateCollectionPayload,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.Collection> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).createCollection(tenant, database, request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Creates a new database for a given tenant.\n     * @param {string} tenant <p>Tenant ID to associate with the new database</p>\n     * @param {Api.CreateDatabasePayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    createDatabase(\n      tenant: string,\n      request: Api.CreateDatabasePayload,\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.CreateDatabaseResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).createDatabase(tenant, request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Creates a new tenant.\n     * @param {Api.CreateTenantPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    createTenant(\n      request: Api.CreateTenantPayload,\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.CreateTenantResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).createTenant(request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Deletes a collection in a given database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>UUID of the collection to delete</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    deleteCollection(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.UpdateCollectionResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).deleteCollection(tenant, database, collectionId, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Deletes a specific database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Name of the database to delete</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    deleteDatabase(\n      tenant: string,\n      database: string,\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.DeleteDatabaseResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).deleteDatabase(tenant, database, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Forks an existing collection.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>UUID of the collection to update</p>\n     * @param {Api.ForkCollectionPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    forkCollection(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.ForkCollectionPayload,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.Collection> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).forkCollection(tenant, database, collectionId, request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Retrieves a collection by ID or name.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>UUID of the collection</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    getCollection(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.Collection> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).getCollection(tenant, database, collectionId, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Retrieves a specific database by name.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Name of the database to retrieve</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    getDatabase(\n      tenant: string,\n      database: string,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.Database> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).getDatabase(tenant, database, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Returns an existing tenant by name.\n     * @param {string} tenantName <p>Tenant name or ID to retrieve</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    getTenant(\n      tenantName: string,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.GetTenantResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).getTenant(tenantName, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Retrieves the current user's identity, tenant, and databases.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    getUserIdentity(\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.GetUserIdentityResponse> {\n      const localVarFetchArgs =\n        ApiApiFetchParamCreator(configuration).getUserIdentity(options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Health check endpoint that returns 200 if the server and executor are ready\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    healthcheck(\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<string> {\n      const localVarFetchArgs =\n        ApiApiFetchParamCreator(configuration).healthcheck(options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 503) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Heartbeat endpoint that returns a nanosecond timestamp of the current time.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    heartbeat(\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.HeartbeatResponse> {\n      const localVarFetchArgs =\n        ApiApiFetchParamCreator(configuration).heartbeat(options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Lists all collections in the specified database.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name to list collections from</p>\n     * @param {number} [limit] <p>Limit for pagination</p>\n     * @param {number} [offset] <p>Offset for pagination</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    listCollections(\n      tenant: string,\n      database: string,\n      limit: number | undefined,\n      offset: number | undefined,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.Vec2[]> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).listCollections(tenant, database, limit, offset, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Lists all databases for a given tenant.\n     * @param {string} tenant <p>Tenant ID to list databases for</p>\n     * @param {number} [limit] <p>Limit for pagination</p>\n     * @param {number} [offset] <p>Offset for pagination</p>\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    listDatabases(\n      tenant: string,\n      limit: number | undefined,\n      offset: number | undefined,\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.Vec2[]> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).listDatabases(tenant, limit, offset, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Pre-flight checks endpoint reporting basic readiness info.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    preFlightChecks(\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<Api.ChecklistResponse> {\n      const localVarFetchArgs =\n        ApiApiFetchParamCreator(configuration).preFlightChecks(options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Reset endpoint allowing authorized users to reset the database.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    reset(\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<boolean> {\n      const localVarFetchArgs =\n        ApiApiFetchParamCreator(configuration).reset(options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Updates an existing collection's name or metadata.\n     * @param {string} tenant <p>Tenant ID</p>\n     * @param {string} database <p>Database name</p>\n     * @param {string} collectionId <p>UUID of the collection to update</p>\n     * @param {Api.UpdateCollectionPayload} request\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    updateCollection(\n      tenant: string,\n      database: string,\n      collectionId: string,\n      request: Api.UpdateCollectionPayload,\n      options?: RequestInit,\n    ): (\n      fetch?: FetchAPI,\n      basePath?: string,\n    ) => Promise<Api.UpdateCollectionResponse> {\n      const localVarFetchArgs = ApiApiFetchParamCreator(\n        configuration,\n      ).updateCollection(tenant, database, collectionId, request, options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          if (response.status === 401) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 404) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          if (response.status === 500) {\n            if (mimeType === \"application/json\") {\n              throw response;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n    /**\n     * @summary Returns the version of the server.\n     * @param {RequestInit} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    version(\n      options?: RequestInit,\n    ): (fetch?: FetchAPI, basePath?: string) => Promise<string> {\n      const localVarFetchArgs =\n        ApiApiFetchParamCreator(configuration).version(options);\n      return (fetch: FetchAPI = defaultFetch, basePath: string = BASE_PATH) => {\n        return fetch(\n          basePath + localVarFetchArgs.url,\n          localVarFetchArgs.options,\n        ).then((response) => {\n          const contentType = response.headers.get(\"Content-Type\");\n          const mimeType = contentType\n            ? contentType.replace(/;.*/, \"\")\n            : undefined;\n\n          if (response.status === 200) {\n            if (mimeType === \"application/json\") {\n              return response.json() as any;\n            }\n            throw response;\n          }\n          throw response;\n        });\n      };\n    },\n  };\n};\n\n/**\n * ApiApi - factory interface\n * @export\n */\nexport const ApiApiFactory: FactoryFunction<ApiApi> = function (\n  configuration?: Configuration,\n  basePath?: string,\n  fetch?: FetchAPI,\n) {\n  return new ApiApi(configuration, basePath, fetch);\n};\n\n/**\n * ApiApi - object-oriented interface\n * @export\n * @class ApiApi\n * @extends {BaseAPI}\n */\nexport class ApiApi extends BaseAPI {\n  /**\n   * @summary Adds records to a collection.\n   * @param {string} tenant\n   * @param {string} database\n   * @param {string} collectionId\n   * @param {Api.AddCollectionRecordsPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public collectionAdd(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    request: Api.AddCollectionRecordsPayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).collectionAdd(\n      tenant,\n      database,\n      collectionId,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Retrieves the number of records in a collection.\n   * @param {string} tenant <p>Tenant ID for the collection</p>\n   * @param {string} database <p>Database containing this collection</p>\n   * @param {string} collectionId <p>Collection ID whose records are counted</p>\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public collectionCount(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).collectionCount(\n      tenant,\n      database,\n      collectionId,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Deletes records in a collection. Can filter by IDs or metadata.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name</p>\n   * @param {string} collectionId <p>Collection ID</p>\n   * @param {Api.DeleteCollectionRecordsPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public collectionDelete(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    request: Api.DeleteCollectionRecordsPayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).collectionDelete(\n      tenant,\n      database,\n      collectionId,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Retrieves records from a collection by ID or metadata filter.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name for the collection</p>\n   * @param {string} collectionId <p>Collection ID to fetch records from</p>\n   * @param {Api.GetRequestPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public collectionGet(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    request: Api.GetRequestPayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).collectionGet(\n      tenant,\n      database,\n      collectionId,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Query a collection in a variety of ways, including vector search, metadata filtering, and full-text search\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name containing the collection</p>\n   * @param {string} collectionId <p>Collection ID to query</p>\n   * @param {number} [limit] <p>Limit for pagination</p>\n   * @param {number} [offset] <p>Offset for pagination</p>\n   * @param {Api.QueryRequestPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public collectionQuery(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    limit: number | undefined,\n    offset: number | undefined,\n    request: Api.QueryRequestPayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).collectionQuery(\n      tenant,\n      database,\n      collectionId,\n      limit,\n      offset,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Updates records in a collection by ID.\n   * @param {string} tenant\n   * @param {string} database\n   * @param {string} collectionId\n   * @param {Api.UpdateCollectionRecordsPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public collectionUpdate(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    request: Api.UpdateCollectionRecordsPayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).collectionUpdate(\n      tenant,\n      database,\n      collectionId,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Upserts records in a collection (create if not exists, otherwise update).\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name</p>\n   * @param {string} collectionId <p>Collection ID</p>\n   * @param {Api.UpsertCollectionRecordsPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public collectionUpsert(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    request: Api.UpsertCollectionRecordsPayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).collectionUpsert(\n      tenant,\n      database,\n      collectionId,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Retrieves the total number of collections in a given database.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name to count collections from</p>\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public countCollections(\n    tenant: string,\n    database: string,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).countCollections(\n      tenant,\n      database,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Creates a new collection under the specified database.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name containing the new collection</p>\n   * @param {Api.CreateCollectionPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public createCollection(\n    tenant: string,\n    database: string,\n    request: Api.CreateCollectionPayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).createCollection(\n      tenant,\n      database,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Creates a new database for a given tenant.\n   * @param {string} tenant <p>Tenant ID to associate with the new database</p>\n   * @param {Api.CreateDatabasePayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public createDatabase(\n    tenant: string,\n    request: Api.CreateDatabasePayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).createDatabase(\n      tenant,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Creates a new tenant.\n   * @param {Api.CreateTenantPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public createTenant(request: Api.CreateTenantPayload, options?: RequestInit) {\n    return ApiApiFp(this.configuration).createTenant(request, options)(\n      this.fetch,\n      this.basePath,\n    );\n  }\n\n  /**\n   * @summary Deletes a collection in a given database.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name</p>\n   * @param {string} collectionId <p>UUID of the collection to delete</p>\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public deleteCollection(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).deleteCollection(\n      tenant,\n      database,\n      collectionId,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Deletes a specific database.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Name of the database to delete</p>\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public deleteDatabase(\n    tenant: string,\n    database: string,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).deleteDatabase(\n      tenant,\n      database,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Forks an existing collection.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name</p>\n   * @param {string} collectionId <p>UUID of the collection to update</p>\n   * @param {Api.ForkCollectionPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public forkCollection(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    request: Api.ForkCollectionPayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).forkCollection(\n      tenant,\n      database,\n      collectionId,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Retrieves a collection by ID or name.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name</p>\n   * @param {string} collectionId <p>UUID of the collection</p>\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public getCollection(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).getCollection(\n      tenant,\n      database,\n      collectionId,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Retrieves a specific database by name.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Name of the database to retrieve</p>\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public getDatabase(tenant: string, database: string, options?: RequestInit) {\n    return ApiApiFp(this.configuration).getDatabase(\n      tenant,\n      database,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Returns an existing tenant by name.\n   * @param {string} tenantName <p>Tenant name or ID to retrieve</p>\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public getTenant(tenantName: string, options?: RequestInit) {\n    return ApiApiFp(this.configuration).getTenant(tenantName, options)(\n      this.fetch,\n      this.basePath,\n    );\n  }\n\n  /**\n   * @summary Retrieves the current user's identity, tenant, and databases.\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public getUserIdentity(options?: RequestInit) {\n    return ApiApiFp(this.configuration).getUserIdentity(options)(\n      this.fetch,\n      this.basePath,\n    );\n  }\n\n  /**\n   * @summary Health check endpoint that returns 200 if the server and executor are ready\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public healthcheck(options?: RequestInit) {\n    return ApiApiFp(this.configuration).healthcheck(options)(\n      this.fetch,\n      this.basePath,\n    );\n  }\n\n  /**\n   * @summary Heartbeat endpoint that returns a nanosecond timestamp of the current time.\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public heartbeat(options?: RequestInit) {\n    return ApiApiFp(this.configuration).heartbeat(options)(\n      this.fetch,\n      this.basePath,\n    );\n  }\n\n  /**\n   * @summary Lists all collections in the specified database.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name to list collections from</p>\n   * @param {number} [limit] <p>Limit for pagination</p>\n   * @param {number} [offset] <p>Offset for pagination</p>\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public listCollections(\n    tenant: string,\n    database: string,\n    limit: number | undefined,\n    offset: number | undefined,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).listCollections(\n      tenant,\n      database,\n      limit,\n      offset,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Lists all databases for a given tenant.\n   * @param {string} tenant <p>Tenant ID to list databases for</p>\n   * @param {number} [limit] <p>Limit for pagination</p>\n   * @param {number} [offset] <p>Offset for pagination</p>\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public listDatabases(\n    tenant: string,\n    limit: number | undefined,\n    offset: number | undefined,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).listDatabases(\n      tenant,\n      limit,\n      offset,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Pre-flight checks endpoint reporting basic readiness info.\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public preFlightChecks(options?: RequestInit) {\n    return ApiApiFp(this.configuration).preFlightChecks(options)(\n      this.fetch,\n      this.basePath,\n    );\n  }\n\n  /**\n   * @summary Reset endpoint allowing authorized users to reset the database.\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public reset(options?: RequestInit) {\n    return ApiApiFp(this.configuration).reset(options)(\n      this.fetch,\n      this.basePath,\n    );\n  }\n\n  /**\n   * @summary Updates an existing collection's name or metadata.\n   * @param {string} tenant <p>Tenant ID</p>\n   * @param {string} database <p>Database name</p>\n   * @param {string} collectionId <p>UUID of the collection to update</p>\n   * @param {Api.UpdateCollectionPayload} request\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public updateCollection(\n    tenant: string,\n    database: string,\n    collectionId: string,\n    request: Api.UpdateCollectionPayload,\n    options?: RequestInit,\n  ) {\n    return ApiApiFp(this.configuration).updateCollection(\n      tenant,\n      database,\n      collectionId,\n      request,\n      options,\n    )(this.fetch, this.basePath);\n  }\n\n  /**\n   * @summary Returns the version of the server.\n   * @param {RequestInit} [options] Override http request option.\n   * @throws {RequiredError}\n   */\n  public version(options?: RequestInit) {\n    return ApiApiFp(this.configuration).version(options)(\n      this.fetch,\n      this.basePath,\n    );\n  }\n}\n\n/**\n * We sometimes represent dates as strings (in models) and as Dates (in parameters) so this\n * function converts them both to a string.\n */\nfunction dateToString(value: Date | string | undefined): string | undefined {\n  if (value instanceof Date) {\n    return value.toISOString();\n  } else if (typeof value === \"string\") {\n    return value;\n  } else {\n    return undefined;\n  }\n}\n","/* eslint-disable */\n// tslint:disable\n/**\n * chroma-frontend\n *\n *\n * OpenAPI spec version: 1.0.0\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator+.\n * https://github.com/karlvr/openapi-generator-plus\n * Do not edit the class manually.\n */\n\nexport namespace Api {\n  export interface AddCollectionRecordsPayload {\n    documents?: (string | null)[] | null;\n    embeddings?: number[][] | null;\n    ids: string[];\n    metadatas?:\n      | ({ [name: string]: boolean | number | number | string } | null)[]\n      | null;\n    uris?: (string | null)[] | null;\n  }\n\n  export interface AddCollectionRecordsResponse {}\n\n  export interface ChecklistResponse {\n    /**\n     * @type {number}\n     * @memberof ChecklistResponse\n     * minimum: 0\n     */\n    max_batch_size: number;\n  }\n\n  export interface Collection {\n    configuration_json: Api.CollectionConfiguration;\n    database: string;\n    /**\n     * @type {number | null}\n     * @memberof Collection\n     */\n    dimension?: number | null;\n    /**\n     * @description <p>CollectionUuid is a wrapper around Uuid to provide a type for the collection id.</p>\n     * @type {string}\n     * @memberof Collection\n     */\n    id: string;\n    /**\n     * @type {number}\n     * @memberof Collection\n     */\n    log_position: number;\n    metadata?: { [name: string]: boolean | number | number | string } | null;\n    name: string;\n    tenant: string;\n    /**\n     * @type {number}\n     * @memberof Collection\n     */\n    version: number;\n  }\n\n  export interface CollectionConfiguration {\n    embedding_function?: Api.EmbeddingFunctionConfiguration | null;\n    hnsw?: Api.HnswConfiguration | null;\n    spann?: Api.SpannConfiguration | null;\n  }\n\n  export interface CreateCollectionPayload {\n    configuration?: Api.CollectionConfiguration | null;\n    get_or_create?: boolean;\n    metadata?: { [name: string]: boolean | number | number | string } | null;\n    name: string;\n  }\n\n  export interface CreateDatabasePayload {\n    name: string;\n  }\n\n  export interface CreateDatabaseResponse {}\n\n  export interface CreateTenantPayload {\n    name: string;\n  }\n\n  export interface CreateTenantResponse {}\n\n  export interface Database {\n    id: string;\n    name: string;\n    tenant: string;\n  }\n\n  export interface DeleteCollectionRecordsPayload extends Api.RawWhereFields {\n    ids?: string[] | null;\n  }\n\n  export interface DeleteCollectionRecordsResponse {}\n\n  export interface DeleteDatabaseResponse {}\n\n  export type EmbeddingFunctionConfiguration =\n    | Api.EmbeddingFunctionConfiguration.ObjectValue\n    | Api.EmbeddingFunctionConfiguration.AllofValue;\n\n  /**\n   * @export\n   * @namespace EmbeddingFunctionConfiguration\n   */\n  export namespace EmbeddingFunctionConfiguration {\n    export interface ObjectValue {\n      type: Api.EmbeddingFunctionConfiguration.ObjectValue.TypeEnum;\n    }\n\n    /**\n     * @export\n     * @namespace ObjectValue\n     */\n    export namespace ObjectValue {\n      export enum TypeEnum {\n        Legacy = \"legacy\",\n      }\n    }\n\n    export interface AllofValue extends Api.EmbeddingFunctionNewConfiguration {\n      type: Api.EmbeddingFunctionConfiguration.AllofValue.TypeEnum;\n    }\n\n    /**\n     * @export\n     * @namespace AllofValue\n     */\n    export namespace AllofValue {\n      export enum TypeEnum {\n        Known = \"known\",\n      }\n    }\n  }\n\n  export interface EmbeddingFunctionNewConfiguration {\n    config: unknown;\n    name: string;\n  }\n\n  export interface ErrorResponse {\n    error: string;\n    message: string;\n  }\n\n  export interface ForkCollectionPayload {\n    new_name: string;\n  }\n\n  export interface GetRequestPayload extends Api.RawWhereFields {\n    ids?: string[] | null;\n    include?: Api.Include[];\n    /**\n     * @type {number | null}\n     * @memberof GetRequestPayload\n     * minimum: 0\n     */\n    limit?: number | null;\n    /**\n     * @type {number | null}\n     * @memberof GetRequestPayload\n     * minimum: 0\n     */\n    offset?: number | null;\n  }\n\n  export interface GetResponse {\n    documents?: (string | null)[] | null;\n    embeddings?: number[][] | null;\n    ids: string[];\n    include: Api.Include[];\n    metadatas?:\n      | ({ [name: string]: boolean | number | number | string } | null)[]\n      | null;\n    uris?: (string | null)[] | null;\n  }\n\n  export interface GetTenantResponse {\n    name: string;\n  }\n\n  export interface GetUserIdentityResponse {\n    databases: string[];\n    tenant: string;\n    user_id: string;\n  }\n\n  export interface HeartbeatResponse {\n    /**\n     * @type {number}\n     * @memberof HeartbeatResponse\n     * minimum: 0\n     */\n    \"nanosecond heartbeat\": number;\n  }\n\n  export interface HnswConfiguration {\n    /**\n     * @type {number}\n     * @memberof HnswConfiguration\n     * minimum: 0\n     */\n    ef_construction?: number;\n    /**\n     * @type {number}\n     * @memberof HnswConfiguration\n     * minimum: 0\n     */\n    ef_search?: number;\n    /**\n     * @type {number}\n     * @memberof HnswConfiguration\n     * minimum: 0\n     */\n    max_neighbors?: number;\n    /**\n     * @type {number}\n     * @memberof HnswConfiguration\n     */\n    resize_factor?: number;\n    space?: Api.HnswSpace;\n    /**\n     * @type {number}\n     * @memberof HnswConfiguration\n     * minimum: 0\n     */\n    sync_threshold?: number;\n  }\n\n  export enum HnswSpace {\n    L2 = \"l2\",\n    Cosine = \"cosine\",\n    Ip = \"ip\",\n  }\n\n  export enum Include {\n    Distances = \"distances\",\n    Documents = \"documents\",\n    Embeddings = \"embeddings\",\n    Metadatas = \"metadatas\",\n    Uris = \"uris\",\n  }\n\n  export interface QueryRequestPayload extends Api.RawWhereFields {\n    ids?: string[] | null;\n    include?: Api.Include[];\n    /**\n     * @type {number | null}\n     * @memberof QueryRequestPayload\n     * minimum: 0\n     */\n    n_results?: number | null;\n    query_embeddings: number[][];\n  }\n\n  export interface QueryResponse {\n    distances?: (number | null)[][] | null;\n    documents?: (string | null)[][] | null;\n    embeddings?: (number[] | null)[][] | null;\n    ids: string[][];\n    include: Api.Include[];\n    metadatas?:\n      | ({ [name: string]: boolean | number | number | string } | null)[][]\n      | null;\n    uris?: (string | null)[][] | null;\n  }\n\n  export interface RawWhereFields {\n    where?: unknown;\n    where_document?: unknown;\n  }\n\n  export interface SpannConfiguration {\n    /**\n     * @type {number}\n     * @memberof SpannConfiguration\n     * minimum: 0\n     */\n    ef_construction?: number;\n    /**\n     * @type {number}\n     * @memberof SpannConfiguration\n     * minimum: 0\n     */\n    ef_search?: number;\n    /**\n     * @type {number}\n     * @memberof SpannConfiguration\n     * minimum: 0\n     */\n    max_neighbors?: number;\n    /**\n     * @type {number}\n     * @memberof SpannConfiguration\n     * minimum: 0\n     */\n    merge_threshold?: number;\n    /**\n     * @type {number}\n     * @memberof SpannConfiguration\n     * minimum: 0\n     */\n    reassign_neighbor_count?: number;\n    /**\n     * @type {number}\n     * @memberof SpannConfiguration\n     * minimum: 0\n     */\n    search_nprobe?: number;\n    space?: Api.HnswSpace;\n    /**\n     * @type {number}\n     * @memberof SpannConfiguration\n     * minimum: 0\n     */\n    split_threshold?: number;\n    /**\n     * @type {number}\n     * @memberof SpannConfiguration\n     * minimum: 0\n     */\n    write_nprobe?: number;\n  }\n\n  export interface UpdateCollectionConfiguration {\n    embedding_function?: Api.EmbeddingFunctionConfiguration | null;\n    hnsw?: Api.UpdateHnswConfiguration | null;\n    spann?: Api.SpannConfiguration | null;\n  }\n\n  export interface UpdateCollectionPayload {\n    new_configuration?: Api.UpdateCollectionConfiguration | null;\n    new_metadata?: {\n      [name: string]: boolean | number | number | string;\n    } | null;\n    new_name?: string | null;\n  }\n\n  export interface UpdateCollectionRecordsPayload {\n    documents?: (string | null)[] | null;\n    embeddings?: (number[] | null)[] | null;\n    ids: string[];\n    metadatas?:\n      | ({ [name: string]: boolean | number | number | string } | null)[]\n      | null;\n    uris?: (string | null)[] | null;\n  }\n\n  export interface UpdateCollectionRecordsResponse {}\n\n  export interface UpdateCollectionResponse {}\n\n  export interface UpdateHnswConfiguration {\n    /**\n     * @type {number | null}\n     * @memberof UpdateHnswConfiguration\n     * minimum: 0\n     */\n    batch_size?: number | null;\n    /**\n     * @type {number | null}\n     * @memberof UpdateHnswConfiguration\n     * minimum: 0\n     */\n    ef_search?: number | null;\n    /**\n     * @type {number | null}\n     * @memberof UpdateHnswConfiguration\n     * minimum: 0\n     */\n    max_neighbors?: number | null;\n    /**\n     * @type {number | null}\n     * @memberof UpdateHnswConfiguration\n     * minimum: 0\n     */\n    num_threads?: number | null;\n    /**\n     * @type {number | null}\n     * @memberof UpdateHnswConfiguration\n     */\n    resize_factor?: number | null;\n    /**\n     * @type {number | null}\n     * @memberof UpdateHnswConfiguration\n     * minimum: 0\n     */\n    sync_threshold?: number | null;\n  }\n\n  export interface UpsertCollectionRecordsPayload {\n    documents?: (string | null)[] | null;\n    embeddings?: number[][] | null;\n    ids: string[];\n    metadatas?:\n      | ({ [name: string]: boolean | number | number | string } | null)[]\n      | null;\n    uris?: (string | null)[] | null;\n  }\n\n  export interface UpsertCollectionRecordsResponse {}\n\n  export interface Vec2 {\n    configuration_json: Api.CollectionConfiguration;\n    database: string;\n    /**\n     * @type {number | null}\n     * @memberof Vec2\n     */\n    dimension?: number | null;\n    /**\n     * @description <p>CollectionUuid is a wrapper around Uuid to provide a type for the collection id.</p>\n     * @type {string}\n     * @memberof Vec2\n     */\n    id: string;\n    /**\n     * @type {number}\n     * @memberof Vec2\n     */\n    log_position: number;\n    metadata?: { [name: string]: boolean | number | number | string } | null;\n    name: string;\n    tenant: string;\n    /**\n     * @type {number}\n     * @memberof Vec2\n     */\n    version: number;\n  }\n}\n","/* eslint-disable */\n// tslint:disable\n/**\n * chroma-frontend\n *\n *\n * OpenAPI spec version: 1.0.0\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator+.\n * https://github.com/karlvr/openapi-generator-plus\n * Do not edit the class manually.\n */\n\nexport interface ConfigurationParameters {\n  apiKey?: string | ((name: string) => string | null);\n  username?: string;\n  password?: string;\n  authorization?: string | ((name: string, scopes?: string[]) => string | null);\n  basePath?: string;\n}\n\nexport class Configuration {\n  /**\n   * parameter for apiKey security\n   * @param name security name\n   * @memberof Configuration\n   */\n  apiKey?: string | ((name: string) => string | null);\n  /**\n   * parameter for basic security\n   *\n   * @type {string}\n   * @memberof Configuration\n   */\n  username?: string;\n  /**\n   * parameter for basic security\n   *\n   * @type {string}\n   * @memberof Configuration\n   */\n  password?: string;\n  /**\n   * parameter for oauth2, openIdConnect or http security\n   * @param name security name\n   * @param scopes oauth2 scopes\n   * @memberof Configuration\n   */\n  authorization?: string | ((name: string, scopes?: string[]) => string | null);\n  /**\n   * override base path\n   *\n   * @type {string}\n   * @memberof Configuration\n   */\n  basePath?: string;\n\n  constructor(param: ConfigurationParameters = {}) {\n    this.apiKey = param.apiKey;\n    this.username = param.username;\n    this.password = param.password;\n    this.authorization = param.authorization;\n    this.basePath = param.basePath;\n  }\n}\n","/**\n * This is a generic Chroma error.\n */\nexport class ChromaError extends Error {\n  constructor(name: string, message: string, public readonly cause?: unknown) {\n    super(message);\n    this.name = name;\n  }\n}\n\n/**\n * Indicates that there was a problem with the connection to the Chroma server (e.g. the server is down or the client is not connected to the internet)\n */\nexport class ChromaConnectionError extends Error {\n  name = \"ChromaConnectionError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\n/** Indicates that the server encountered an error while handling the request. */\nexport class ChromaServerError extends Error {\n  name = \"ChromaServerError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\n/** Indicate that there was an issue with the request that the client made. */\nexport class ChromaClientError extends Error {\n  name = \"ChromaClientError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\n/** The request lacked valid authentication. */\nexport class ChromaUnauthorizedError extends Error {\n  name = \"ChromaAuthError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\n/** The user does not have permission to access the requested resource. */\nexport class ChromaForbiddenError extends Error {\n  name = \"ChromaForbiddenError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\nexport class ChromaNotFoundError extends Error {\n  name = \"ChromaNotFoundError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\nexport class ChromaValueError extends Error {\n  name = \"ChromaValueError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\nexport class InvalidCollectionError extends Error {\n  name = \"InvalidCollectionError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\nexport class InvalidArgumentError extends Error {\n  name = \"InvalidArgumentError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\nexport class ChromaUniqueError extends Error {\n  name = \"ChromaUniqueError\";\n  constructor(message: string, public readonly cause?: unknown) {\n    super(message);\n  }\n}\n\nexport function createErrorByType(type: string, message: string) {\n  switch (type) {\n    case \"InvalidCollection\":\n      return new InvalidCollectionError(message);\n    case \"InvalidArgumentError\":\n      return new InvalidArgumentError(message);\n    default:\n      return undefined;\n  }\n}\n","import {\n  IEmbeddingFunction,\n  EmbeddingFunctionSpace,\n} from \"./embeddings/IEmbeddingFunction\";\nimport { DefaultEmbeddingFunction } from \"./embeddings/DefaultEmbeddingFunction\";\nimport { Api } from \"./generated\";\nexport type HnswSpace = EmbeddingFunctionSpace;\n\n// --- Common Interfaces ---\n\nexport class InvalidConfigurationError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"InvalidConfigurationError\";\n  }\n}\n\n// --- HNSW Configuration ---\n\nexport interface HNSWConfiguration {\n  space?: HnswSpace;\n  ef_construction?: number;\n  max_neighbors?: number;\n  ef_search?: number;\n  num_threads?: number;\n  batch_size?: number;\n  sync_threshold?: number;\n  resize_factor?: number;\n}\n\nexport interface CreateHNSWConfiguration extends HNSWConfiguration {}\n\nexport interface UpdateHNSWConfiguration {\n  ef_search?: number;\n  num_threads?: number;\n  batch_size?: number;\n  sync_threshold?: number;\n  resize_factor?: number;\n}\n\n// --- SPANN Configuration ---\n\nexport interface SpannConfiguration {\n  space?: EmbeddingFunctionSpace; // Re-using HnswSpace which is EmbeddingFunctionSpace\n  search_nprobe?: number;\n  write_nprobe?: number;\n  ef_construction?: number;\n  max_neighbors?: number;\n  ef_search?: number;\n  reassign_neighbor_count?: number;\n  split_threshold?: number;\n  merge_threshold?: number;\n}\n\nexport interface CreateSpannConfiguration extends SpannConfiguration {}\n\nexport interface UpdateSpannConfiguration {\n  search_nprobe?: number;\n  ef_search?: number;\n}\n\n// --- Collection Configuration ---\n\nexport interface CollectionConfiguration {\n  hnsw?: HNSWConfiguration | null;\n  spann?: SpannConfiguration | null;\n  embedding_function?: IEmbeddingFunction | null;\n}\n\nexport interface CreateCollectionConfiguration {\n  hnsw?: CreateHNSWConfiguration | null;\n  spann?: CreateSpannConfiguration | null;\n  embedding_function?: IEmbeddingFunction | null;\n}\n\nexport interface UpdateCollectionConfiguration {\n  hnsw?: UpdateHNSWConfiguration | null;\n  spann?: UpdateSpannConfiguration | null;\n  embedding_function?: IEmbeddingFunction | null;\n}\n\n// --- Known Embedding Functions Registry ---\n// Known embedding functions registry (replace with actual implementation if needed)\nconst knownEmbeddingFunctions: Record<\n  string,\n  { build_from_config: (config: any) => IEmbeddingFunction }\n> = {};\n\n// --- JSON Conversion Helpers ---\n\nfunction serializeEmbeddingFunction(\n  ef: IEmbeddingFunction | null | undefined,\n): Record<string, any> | null {\n  let efConfig: Record<string, any> | null = null;\n  if (ef === null || ef === undefined) {\n    efConfig = { type: \"legacy\" };\n  } else {\n    try {\n      if (ef.getConfig && ef.name) {\n        if (ef.validateConfig) {\n          ef.validateConfig(ef.getConfig());\n        }\n        efConfig = {\n          name: ef.name,\n          type: \"known\",\n          config: ef.getConfig(),\n        };\n      } else {\n        console.warn(\n          \"Could not serialize embedding function - missing getConfig or name method.\",\n        );\n        efConfig = { type: \"legacy\" }; // Fallback\n      }\n    } catch (e) {\n      console.warn(\n        \"Error processing embedding function for serialization, falling back to legacy:\",\n        e,\n        \"DeprecationWarning\",\n      );\n      efConfig = { type: \"legacy\" };\n    }\n  }\n  return efConfig;\n}\n\nfunction deserializeEmbeddingFunction(\n  efConfig: Record<string, any> | null | undefined,\n): IEmbeddingFunction | null | undefined {\n  if (!efConfig) return undefined; // Or null? Python seems to map missing to None/null EF.\n\n  if (efConfig.type === \"legacy\") {\n    console.warn(\n      \"Legacy embedding function config detected during load.\",\n      \"DeprecationWarning\",\n    );\n    return null; // Treat legacy as null/default\n  } else if (\n    efConfig.type === \"known\" &&\n    knownEmbeddingFunctions[efConfig.name]\n  ) {\n    const efBuilder = knownEmbeddingFunctions[efConfig.name];\n    try {\n      return efBuilder.build_from_config(efConfig.config);\n    } catch (e) {\n      console.error(\"Error building embedding function from config:\", e);\n      return null; // Fallback if build fails\n    }\n  } else {\n    console.warn(\n      `Unknown embedding function type or name: ${efConfig.type}, ${efConfig.name}`,\n    );\n    return null;\n  }\n}\n\n// TODO: make warnings prettier and add link to migration docs\nexport function loadCollectionConfigurationFromJson(\n  jsonMap: Record<string, any>,\n): CollectionConfiguration {\n  if (jsonMap.hnsw && jsonMap.spann) {\n    throw new InvalidConfigurationError(\n      \"Cannot specify both 'hnsw' and 'spann' configurations.\",\n    );\n  }\n  let hnswConfig: HNSWConfiguration | null | undefined = jsonMap.hnsw; // Assume structure matches HNSWConfiguration\n  let spannConfig: SpannConfiguration | null | undefined = jsonMap.spann; // Assume structure matches SpannConfiguration\n  let embeddingFunction: IEmbeddingFunction | null | undefined =\n    deserializeEmbeddingFunction(jsonMap.embedding_function);\n\n  return {\n    hnsw: hnswConfig,\n    spann: spannConfig,\n    embedding_function: embeddingFunction,\n  };\n}\n\nexport function loadCollectionConfigurationFromJsonStr(\n  jsonStr: string,\n): CollectionConfiguration {\n  try {\n    const jsonMap = JSON.parse(jsonStr);\n    return loadCollectionConfigurationFromJson(jsonMap);\n  } catch (e: any) {\n    if (e instanceof InvalidConfigurationError) throw e;\n    console.error(\"Error parsing JSON string for collection configuration:\", e);\n    throw new Error(\"Invalid JSON string for collection configuration\");\n  }\n}\n\nexport function collectionConfigurationToJson(\n  config: CollectionConfiguration,\n): Record<string, any> {\n  if (config.hnsw && config.spann) {\n    throw new InvalidConfigurationError(\n      \"Cannot specify both 'hnsw' and 'spann' configurations.\",\n    );\n  }\n  let hnswConfig = config.hnsw;\n  let spannConfig = config.spann;\n  let ef = config.embedding_function;\n  let efConfig = serializeEmbeddingFunction(ef);\n\n  // Basic validation/casting attempt (already done in create/update, but maybe check types?)\n  if (hnswConfig && typeof hnswConfig !== \"object\") {\n    throw new Error(\"Invalid HNSW config provided\");\n  }\n  if (spannConfig && typeof spannConfig !== \"object\") {\n    throw new Error(\"Invalid SPANN config provided\");\n  }\n\n  // Note: Validation (like validateCreateHnswConfig) is tied to creation/update actions\n  // not necessarily to retrieving/displaying the existing config.\n\n  return {\n    hnsw: hnswConfig,\n    spann: spannConfig,\n    embedding_function: efConfig,\n  };\n}\n\nexport function collectionConfigurationToJsonStr(\n  config: CollectionConfiguration,\n): string {\n  try {\n    const jsonObj = collectionConfigurationToJson(config);\n    return JSON.stringify(jsonObj);\n  } catch (e: any) {\n    if (e instanceof InvalidConfigurationError) throw e;\n    console.error(\"Error serializing collection configuration to JSON:\", e);\n    throw new Error(\"Could not serialize collection configuration\");\n  }\n}\n\n// --- Create Configuration Helpers ---\n\nexport function loadApiCollectionConfigurationFromCreateCollectionConfiguration(\n  config: CreateCollectionConfiguration,\n): Api.CollectionConfiguration {\n  // Cast needed because the generated Api type might not be perfectly aligned\n  // with our internal Create* types, but the structure should match after JSON conversion.\n  return createCollectionConfigurationToJson(\n    config,\n  ) as Api.CollectionConfiguration;\n}\n\n// TODO: make warnings prettier and add link to migration docs\nexport function createCollectionConfigurationToJson(\n  config: CreateCollectionConfiguration,\n): Record<string, any> {\n  if (config.hnsw && config.spann) {\n    throw new InvalidConfigurationError(\n      \"Cannot specify both 'hnsw' and 'spann' configurations during creation.\",\n    );\n  }\n  let hnswConfig = config.hnsw;\n  let spannConfig = config.spann;\n  let ef = config.embedding_function;\n  let efConfig = serializeEmbeddingFunction(ef);\n\n  // Basic validation/casting attempt\n  if (hnswConfig && typeof hnswConfig !== \"object\") {\n    throw new Error(\n      \"Invalid HNSW config provided in CreateCollectionConfiguration\",\n    );\n  }\n  if (spannConfig && typeof spannConfig !== \"object\") {\n    throw new Error(\n      \"Invalid SPANN config provided in CreateCollectionConfiguration\",\n    );\n  }\n\n  return {\n    hnsw: hnswConfig,\n    spann: spannConfig,\n    embedding_function: efConfig,\n  };\n}\n\n// --- Update Configuration Helpers ---\n\nexport function jsonToUpdateHnswConfiguration(\n  jsonMap: Record<string, any>,\n): UpdateHNSWConfiguration {\n  const config: UpdateHNSWConfiguration = {};\n  if (\"ef_search\" in jsonMap) config.ef_search = jsonMap.ef_search;\n  if (\"num_threads\" in jsonMap) config.num_threads = jsonMap.num_threads;\n  if (\"batch_size\" in jsonMap) config.batch_size = jsonMap.batch_size;\n  if (\"sync_threshold\" in jsonMap)\n    config.sync_threshold = jsonMap.sync_threshold;\n  if (\"resize_factor\" in jsonMap) config.resize_factor = jsonMap.resize_factor;\n  return config;\n}\n\nexport function jsonToUpdateSpannConfiguration(\n  jsonMap: Record<string, any>,\n): UpdateSpannConfiguration {\n  const config: UpdateSpannConfiguration = {};\n  if (\"search_nprobe\" in jsonMap) config.search_nprobe = jsonMap.search_nprobe;\n  if (\"ef_search\" in jsonMap) config.ef_search = jsonMap.ef_search;\n  return config;\n}\n\nexport function updateCollectionConfigurationToJson(\n  config: UpdateCollectionConfiguration,\n): Record<string, any> {\n  if (config.hnsw && config.spann) {\n    throw new InvalidConfigurationError(\n      \"Cannot specify both 'hnsw' and 'spann' configurations during update.\",\n    );\n  }\n  let hnswConfig = config.hnsw;\n  let spannConfig = config.spann;\n  let ef = config.embedding_function;\n  let efConfig: Record<string, any> | null | undefined = undefined; // Initialize as undefined\n\n  // Validate HNSW config if present\n  if (hnswConfig) {\n    if (typeof hnswConfig !== \"object\") {\n      throw new Error(\n        \"Invalid HNSW config provided in UpdateCollectionConfiguration\",\n      );\n    }\n  }\n\n  // Validate SPANN config if present\n  if (spannConfig) {\n    if (typeof spannConfig !== \"object\") {\n      throw new Error(\n        \"Invalid SPANN config provided in UpdateCollectionConfiguration\",\n      );\n    }\n  }\n\n  // Handle embedding function serialization only if explicitly provided (ef !== undefined)\n  if (ef !== undefined) {\n    efConfig = serializeEmbeddingFunction(ef);\n  }\n\n  // Construct the result object, only including defined fields\n  const result: Record<string, any> = {};\n  if (hnswConfig !== undefined) result.hnsw = hnswConfig;\n  if (spannConfig !== undefined) result.spann = spannConfig;\n  if (efConfig !== undefined) result.embedding_function = efConfig;\n\n  // Check if the result is empty, which means no valid update fields were provided\n  if (Object.keys(result).length === 0) {\n    throw new InvalidConfigurationError(\n      \"No valid configuration fields provided for update.\",\n    );\n  }\n\n  return result;\n}\n\nexport function loadApiUpdateCollectionConfigurationFromUpdateCollectionConfiguration(\n  config: UpdateCollectionConfiguration,\n): Api.UpdateCollectionConfiguration {\n  return updateCollectionConfigurationToJson(\n    config,\n  ) as Api.UpdateCollectionConfiguration;\n}\n","import { ChromaClient } from \"./ChromaClient\";\nimport { IEmbeddingFunction } from \"./embeddings/IEmbeddingFunction\";\nimport {\n  CollectionMetadata,\n  AddRecordsParams,\n  UpsertRecordsParams,\n  BaseGetParams,\n  GetResponse,\n  UpdateRecordsParams,\n  QueryRecordsParams,\n  MultiQueryResponse,\n  PeekParams,\n  MultiGetResponse,\n  DeleteParams,\n  Embeddings,\n  CollectionParams,\n  IncludeEnum,\n  Metadata,\n  ForkCollectionParams,\n} from \"./types\";\nimport { prepareRecordRequest, toArray, toArrayOfArrays } from \"./utils\";\nimport { Api as GeneratedApi, Api } from \"./generated\";\nimport {\n  UpdateCollectionConfiguration,\n  loadApiUpdateCollectionConfigurationFromUpdateCollectionConfiguration,\n} from \"./CollectionConfiguration\";\n\nexport class Collection {\n  public name: string;\n  public id: string;\n  public metadata: CollectionMetadata | undefined;\n  /**\n   * @ignore\n   */\n  private client: ChromaClient;\n  /**\n   * @ignore\n   */\n  public embeddingFunction: IEmbeddingFunction;\n\n  public configuration: Api.CollectionConfiguration | undefined;\n\n  /**\n   * @ignore\n   */\n  constructor(\n    name: string,\n    id: string,\n    client: ChromaClient,\n    embeddingFunction: IEmbeddingFunction,\n    metadata?: CollectionMetadata,\n    configuration?: Api.CollectionConfiguration,\n  ) {\n    this.name = name;\n    this.id = id;\n    this.metadata = metadata;\n    this.client = client;\n    this.embeddingFunction = embeddingFunction;\n    this.configuration = configuration;\n  }\n\n  /**\n   * Add items to the collection\n   * @param {Object} params - The parameters for the query.\n   * @param {ID | IDs} [params.ids] - IDs of the items to add.\n   * @param {Embedding | Embeddings} [params.embeddings] - Optional embeddings of the items to add.\n   * @param {Metadata | Metadatas} [params.metadatas] - Optional metadata of the items to add.\n   * @param {Document | Documents} [params.documents] - Optional documents of the items to add.\n   * @returns {Promise<AddResponse>} - The response from the API. True if successful.\n   *\n   * @example\n   * ```typescript\n   * const response = await collection.add({\n   *   ids: [\"id1\", \"id2\"],\n   *   embeddings: [[1, 2, 3], [4, 5, 6]],\n   *   metadatas: [{ \"key\": \"value\" }, { \"key\": \"value\" }],\n   *   documents: [\"document1\", \"document2\"]\n   * });\n   * ```\n   */\n  async add(params: AddRecordsParams): Promise<void> {\n    await this.client.init();\n\n    await this.client.api.collectionAdd(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      // TODO: For some reason the auto generated code requires metadata to be defined here.\n      (await prepareRecordRequest(\n        params,\n        this.embeddingFunction,\n      )) as GeneratedApi.AddCollectionRecordsPayload,\n      this.client.api.options,\n    );\n  }\n\n  /**\n   * Upsert items to the collection\n   * @param {Object} params - The parameters for the query.\n   * @param {ID | IDs} [params.ids] - IDs of the items to add.\n   * @param {Embedding | Embeddings} [params.embeddings] - Optional embeddings of the items to add.\n   * @param {Metadata | Metadatas} [params.metadatas] - Optional metadata of the items to add.\n   * @param {Document | Documents} [params.documents] - Optional documents of the items to add.\n   * @returns {Promise<void>}\n   *\n   * @example\n   * ```typescript\n   * const response = await collection.upsert({\n   *   ids: [\"id1\", \"id2\"],\n   *   embeddings: [[1, 2, 3], [4, 5, 6]],\n   *   metadatas: [{ \"key\": \"value\" }, { \"key\": \"value\" }],\n   *   documents: [\"document1\", \"document2\"],\n   * });\n   * ```\n   */\n  async upsert(params: UpsertRecordsParams): Promise<void> {\n    await this.client.init();\n\n    await this.client.api.collectionUpsert(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      // TODO: For some reason the auto generated code requires metadata to be defined here.\n      (await prepareRecordRequest(\n        params,\n        this.embeddingFunction,\n      )) as GeneratedApi.UpsertCollectionRecordsPayload,\n      this.client.api.options,\n    );\n  }\n\n  /**\n   * Count the number of items in the collection\n   * @returns {Promise<number>} - The number of items in the collection.\n   *\n   * @example\n   * ```typescript\n   * const count = await collection.count();\n   * ```\n   */\n  async count(): Promise<number> {\n    await this.client.init();\n    return (await this.client.api.collectionCount(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      this.client.api.options,\n    )) as number;\n  }\n\n  /**\n   * Get items from the collection\n   * @param {Object} params - The parameters for the query.\n   * @param {ID | IDs} [params.ids] - Optional IDs of the items to get.\n   * @param {Where} [params.where] - Optional where clause to filter items by.\n   * @param {PositiveInteger} [params.limit] - Optional limit on the number of items to get.\n   * @param {PositiveInteger} [params.offset] - Optional offset on the items to get.\n   * @param {IncludeEnum[]} [params.include] - Optional list of items to include in the response.\n   * @param {WhereDocument} [params.whereDocument] - Optional where clause to filter items by.\n   * @returns {Promise<GetResponse>} - The response from the server.\n   *\n   * @example\n   * ```typescript\n   * const response = await collection.get({\n   *   ids: [\"id1\", \"id2\"],\n   *   where: { \"key\": \"value\" },\n   *   limit: 10,\n   *   offset: 0,\n   *   include: [\"embeddings\", \"metadatas\", \"documents\"],\n   *   whereDocument: { \"$contains\": \"value\" },\n   * });\n   * ```\n   */\n  async get({\n    ids,\n    where,\n    limit,\n    offset,\n    include,\n    whereDocument,\n  }: BaseGetParams = {}): Promise<GetResponse> {\n    await this.client.init();\n\n    const idsArray = ids ? toArray(ids) : undefined;\n\n    const resp = await this.client.api.collectionGet(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      {\n        ids: idsArray,\n        where,\n        limit,\n        offset,\n        include: include as GeneratedApi.Include[] | undefined,\n        where_document: whereDocument,\n      },\n      this.client.api.options,\n    );\n\n    const finalResp: GetResponse = {\n      ...resp,\n      metadatas: resp.metadatas as (Metadata | null)[],\n      documents: resp.documents as (string | null)[],\n      embeddings: resp.embeddings as Embeddings | null,\n      included: resp.include as unknown as IncludeEnum[],\n    };\n\n    return finalResp;\n  }\n\n  /**\n   * Update items in the collection\n   * @param {Object} params - The parameters for the query.\n   * @param {ID | IDs} [params.ids] - IDs of the items to add.\n   * @param {Embedding | Embeddings} [params.embeddings] - Optional embeddings of the items to add.\n   * @param {Metadata | Metadatas} [params.metadatas] - Optional metadata of the items to add.\n   * @param {Document | Documents} [params.documents] - Optional documents of the items to add.\n   * @returns {Promise<void>}\n   *\n   * @example\n   * ```typescript\n   * const response = await collection.update({\n   *   ids: [\"id1\", \"id2\"],\n   *   embeddings: [[1, 2, 3], [4, 5, 6]],\n   *   metadatas: [{ \"key\": \"value\" }, { \"key\": \"value\" }],\n   *   documents: [\"document1\", \"document2\"],\n   * });\n   * ```\n   */\n  async update(params: UpdateRecordsParams): Promise<void> {\n    await this.client.init();\n\n    await this.client.api.collectionUpdate(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      await prepareRecordRequest(params, this.embeddingFunction, true),\n      this.client.api.options,\n    );\n  }\n\n  /**\n   * Performs a query on the collection using the specified parameters.\n   *\n   * @param {Object} params - The parameters for the query.\n   * @param {Embedding | Embeddings} [params.queryEmbeddings] - Optional query embeddings to use for the search.\n   * @param {PositiveInteger} [params.nResults] - Optional number of results to return (default is 10).\n   * @param {Where} [params.where] - Optional query condition to filter results based on metadata values.\n   * @param {string | string[]} [params.queryTexts] - Optional query text(s) to search for in the collection.\n   * @param {WhereDocument} [params.whereDocument] - Optional query condition to filter results based on document content.\n   * @param {IncludeEnum[]} [params.include] - Optional array of fields to include in the result, such as \"metadata\" and \"document\".\n   *\n   * @returns {Promise<QueryResponse>} A promise that resolves to the query results.\n   * @throws {Error} If there is an issue executing the query.\n   * @example\n   * // Query the collection using embeddings\n   * const results = await collection.query({\n   *   queryEmbeddings: [[0.1, 0.2, ...], ...],\n   *   nResults: 10,\n   *   where: {\"name\": {\"$eq\": \"John Doe\"}},\n   *   include: [\"metadata\", \"document\"]\n   * });\n   * @example\n   * ```js\n   * // Query the collection using query text\n   * const results = await collection.query({\n   *   queryTexts: \"some text\",\n   *   nResults: 10,\n   *   where: {\"name\": {\"$eq\": \"John Doe\"}},\n   *   include: [\"metadata\", \"document\"]\n   * });\n   * ```\n   *\n   */\n  async query({\n    nResults = 10,\n    where,\n    whereDocument,\n    include,\n    queryTexts,\n    queryEmbeddings,\n  }: QueryRecordsParams): Promise<MultiQueryResponse> {\n    await this.client.init();\n\n    let embeddings: number[][] = [];\n\n    // If queryEmbeddings is provided, use it\n    if (queryEmbeddings) {\n      embeddings = toArrayOfArrays(queryEmbeddings);\n    }\n    // If queryTexts is provided, use it to generate queryEmbeddings\n    else if (queryTexts) {\n      embeddings = await this.embeddingFunction.generate(toArray(queryTexts));\n    }\n\n    if (embeddings.length === 0) {\n      throw new TypeError(\n        \"You must provide either queryEmbeddings or queryTexts\",\n      );\n    }\n\n    const resp = await this.client.api.collectionQuery(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      nResults,\n      undefined,\n      {\n        query_embeddings: embeddings,\n        n_results: nResults,\n        where,\n        where_document: whereDocument,\n        include: include as GeneratedApi.Include[] | undefined,\n      },\n      this.client.api.options,\n    );\n\n    const finalResp: MultiQueryResponse = {\n      ...resp,\n      metadatas: resp.metadatas as (Metadata | null)[][],\n      documents: resp.documents as (string | null)[][],\n      embeddings: resp.embeddings as Embeddings[] | null,\n      distances: resp.distances as number[][] | null,\n      included: resp.include as unknown as IncludeEnum[],\n    };\n\n    return finalResp;\n  }\n\n  /**\n   * Modify the collection name or metadata\n   * @param {Object} params - The parameters for the query.\n   * @param {string} [params.name] - Optional new name for the collection.\n   * @param {CollectionMetadata} [params.metadata] - Optional new metadata for the collection.\n   * @returns {Promise<void>} - The response from the API.\n   *\n   * @example\n   * ```typescript\n   * const response = await client.updateCollection({\n   *   name: \"new name\",\n   *   metadata: { \"key\": \"value\" },\n   * });\n   * ```\n   */\n  async modify({\n    name,\n    metadata,\n    configuration,\n  }: {\n    name?: string;\n    metadata?: CollectionMetadata;\n    configuration?: UpdateCollectionConfiguration;\n  }): Promise<CollectionParams> {\n    await this.client.init();\n    let updateCollectionConfiguration:\n      | Api.UpdateCollectionConfiguration\n      | undefined = undefined;\n    if (configuration) {\n      updateCollectionConfiguration =\n        loadApiUpdateCollectionConfigurationFromUpdateCollectionConfiguration(\n          configuration,\n        );\n    }\n    const resp = (await this.client.api.updateCollection(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      {\n        new_name: name,\n        new_metadata: metadata,\n        new_configuration: updateCollectionConfiguration,\n      },\n      this.client.api.options,\n    )) as CollectionParams;\n\n    if (name) {\n      this.name = name;\n    }\n\n    if (metadata) {\n      this.metadata = metadata;\n    }\n\n    return resp;\n  }\n\n  /**\n   * Peek inside the collection\n   * @param {Object} params - The parameters for the query.\n   * @param {PositiveInteger} [params.limit] - Optional number of results to return (default is 10).\n   * @returns {Promise<GetResponse>} A promise that resolves to the query results.\n   * @throws {Error} If there is an issue executing the query.\n   *\n   * @example\n   * ```typescript\n   * const results = await collection.peek({\n   *   limit: 10\n   * });\n   * ```\n   */\n  async peek({ limit = 10 }: PeekParams = {}): Promise<MultiGetResponse> {\n    await this.client.init();\n    return (await this.client.api.collectionGet(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      {\n        limit,\n      },\n      this.client.api.options,\n    )) as unknown as MultiGetResponse;\n  }\n\n  /**\n   * Deletes items from the collection.\n   * @param {Object} params - The parameters for deleting items from the collection.\n   * @param {ID | IDs} [params.ids] - Optional ID or array of IDs of items to delete.\n   * @param {Where} [params.where] - Optional query condition to filter items to delete based on metadata values.\n   * @param {WhereDocument} [params.whereDocument] - Optional query condition to filter items to delete based on document content.\n   * @returns {Promise<string[]>} A promise that resolves to the IDs of the deleted items.\n   * @throws {Error} If there is an issue deleting items from the collection.\n   *\n   * @example\n   * ```typescript\n   * const results = await collection.delete({\n   *   ids: \"some_id\",\n   *   where: {\"name\": {\"$eq\": \"John Doe\"}},\n   *   whereDocument: {\"$contains\":\"search_string\"}\n   * });\n   * ```\n   */\n  async delete({\n    ids,\n    where,\n    whereDocument,\n  }: DeleteParams = {}): Promise<void> {\n    await this.client.init();\n\n    const idsArray = ids ? toArray(ids) : undefined;\n\n    await this.client.api.collectionDelete(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      {\n        ids: idsArray,\n        where: where,\n        where_document: whereDocument,\n      },\n      this.client.api.options,\n    );\n  }\n\n  /**\n   * Forks the collection into a new collection with a new name and configuration.\n   *\n   * @param {Object} params - The parameters for forking the collection.\n   * @param {string} params.newName - The name for the new forked collection.\n   *\n   * @returns {Promise<Collection>} A promise that resolves to the new forked Collection object.\n   * @throws {Error} If there is an issue forking the collection.\n   *\n   * @example\n   * ```typescript\n   * const newCollection = await collection.fork({\n   *   newName: \"my_forked_collection\",\n   * });\n   * ```\n   */\n  async fork({ newName }: ForkCollectionParams): Promise<Collection> {\n    await this.client.init();\n\n    const resp = await this.client.api.forkCollection(\n      this.client.tenant,\n      this.client.database,\n      this.id,\n      {\n        new_name: newName,\n      },\n      this.client.api.options,\n    );\n\n    // The API returns an Api.Collection, we wrap it in our Collection class\n    const newCollection = new Collection(\n      resp.name,\n      resp.id,\n      this.client,\n      this.embeddingFunction,\n      resp.metadata as CollectionMetadata | undefined,\n    );\n\n    return newCollection;\n  }\n}\n","import { AdminClient } from \"./AdminClient\";\nimport { ChromaClient } from \"./ChromaClient\";\nimport { ChromaConnectionError } from \"./Errors\";\nimport { IEmbeddingFunction } from \"./embeddings/IEmbeddingFunction\";\nimport {\n  AddRecordsParams,\n  BaseRecordOperationParams,\n  CollectionParams,\n  Metadata,\n  MultiRecordOperationParams,\n  UpdateRecordsParams,\n} from \"./types\";\nimport { Collection } from \"./Collection\";\n\n// a function to convert a non-Array object to an Array\nexport function toArray<T>(obj: T | T[]): Array<T> {\n  if (Array.isArray(obj)) {\n    return obj;\n  } else {\n    return [obj] as T[];\n  }\n}\n\n// a function to convert an array to array of arrays\nexport function toArrayOfArrays<T>(\n  obj: Array<Array<T>> | Array<T>,\n): Array<Array<T>> {\n  if (obj.length === 0) {\n    return [];\n  }\n\n  if (Array.isArray(obj[0])) {\n    return obj as Array<Array<T>>;\n  }\n\n  if (obj[0] && typeof (obj[0] as any)[Symbol.iterator] === \"function\") {\n    return (obj as unknown as Array<Iterable<T>>).map((el) => Array.from(el));\n  }\n\n  return [obj] as Array<Array<T>>;\n}\n\n/**\n * Dynamically imports a specified module, providing a workaround for browser environments.\n * This function is necessary because we dynamically import optional dependencies\n * which can cause issues with bundlers that detect the import and throw an error\n * on build time when the dependency is not installed.\n * Using this workaround, the dynamic import is only evaluated on runtime\n * where we work with try-catch when importing optional dependencies.\n *\n * @param {string} moduleName - Specifies the module to import.\n * @returns {Promise<any>} Returns a Promise that resolves to the imported module.\n */\nexport async function importOptionalModule(moduleName: string) {\n  return Function(`return import(\"${moduleName}\")`)();\n}\n\nexport async function validateTenantDatabase(\n  adminClient: AdminClient,\n  tenant: string,\n  database: string,\n): Promise<void> {\n  try {\n    await adminClient.getTenant({ name: tenant });\n  } catch (error) {\n    if (error instanceof ChromaConnectionError) {\n      throw error;\n    }\n    throw new Error(\n      `Could not connect to tenant ${tenant}. Are you sure it exists? Underlying error:\n${error}`,\n    );\n  }\n\n  try {\n    await adminClient.getDatabase({ name: database, tenantName: tenant });\n  } catch (error) {\n    if (error instanceof ChromaConnectionError) {\n      throw error;\n    }\n    throw new Error(\n      `Could not connect to database ${database} for tenant ${tenant}. Are you sure it exists? Underlying error:\n${error}`,\n    );\n  }\n}\n\nexport function isBrowser() {\n  return (\n    typeof window !== \"undefined\" && typeof window.document !== \"undefined\"\n  );\n}\n\nfunction arrayifyParams(\n  params: BaseRecordOperationParams,\n): MultiRecordOperationParams {\n  return {\n    ids: toArray(params.ids),\n    embeddings: params.embeddings\n      ? toArrayOfArrays(params.embeddings)\n      : undefined,\n    metadatas: params.metadatas\n      ? toArray<Metadata>(params.metadatas)\n      : undefined,\n    documents: params.documents ? toArray(params.documents) : undefined,\n  };\n}\n\nexport async function prepareRecordRequest(\n  reqParams: AddRecordsParams | UpdateRecordsParams,\n  embeddingFunction: IEmbeddingFunction,\n  update?: true,\n): Promise<MultiRecordOperationParams> {\n  const { ids, embeddings, metadatas, documents } = arrayifyParams(reqParams);\n\n  if (!embeddings && !documents && !update) {\n    throw new Error(\"embeddings and documents cannot both be undefined\");\n  }\n\n  const embeddingsArray = embeddings\n    ? embeddings\n    : documents\n    ? await embeddingFunction.generate(documents)\n    : undefined;\n\n  if (!embeddingsArray && !update) {\n    throw new Error(\"Failed to generate embeddings for your request.\");\n  }\n\n  for (let i = 0; i < ids.length; i += 1) {\n    if (typeof ids[i] !== \"string\") {\n      throw new Error(\n        `Expected ids to be strings, found ${typeof ids[i]} at index ${i}`,\n      );\n    }\n  }\n\n  if (\n    (embeddingsArray !== undefined && ids.length !== embeddingsArray.length) ||\n    (metadatas !== undefined && ids.length !== metadatas.length) ||\n    (documents !== undefined && ids.length !== documents.length)\n  ) {\n    throw new Error(\n      \"ids, embeddings, metadatas, and documents must all be the same length\",\n    );\n  }\n\n  const uniqueIds = new Set(ids);\n  if (uniqueIds.size !== ids.length) {\n    const duplicateIds = ids.filter(\n      (item, index) => ids.indexOf(item) !== index,\n    );\n    throw new Error(\n      `ID's must be unique, found duplicates for: ${duplicateIds}`,\n    );\n  }\n\n  if (\n    embeddingsArray &&\n    embeddingsArray.some((embedding) => embedding.length === 0)\n  ) {\n    throw new Error(\"got empty embedding at pos\");\n  }\n\n  return {\n    ids,\n    metadatas,\n    documents,\n    embeddings: embeddingsArray,\n  };\n}\n\nexport function wrapCollection(\n  api: ChromaClient,\n  collection: CollectionParams,\n): Collection {\n  return new Collection(\n    collection.name,\n    collection.id,\n    api,\n    collection.embeddingFunction,\n    collection.metadata,\n    collection.configuration,\n  );\n}\n","export type AuthHeaders = { [header: string]: string };\ntype TokenHeaderType = \"AUTHORIZATION\" | \"X_CHROMA_TOKEN\";\n\nexport type AuthOptions = {\n  provider: ClientAuthProvider | string | undefined;\n  credentials?: any | undefined;\n\n  // Only relevant for token auth\n  tokenHeaderType?: TokenHeaderType | undefined;\n};\n\nexport const tokenHeaderTypeToHeaderKey = (\n  headerType: TokenHeaderType,\n): string => {\n  if (headerType === \"AUTHORIZATION\") {\n    return \"Authorization\";\n  } else {\n    return \"X-Chroma-Token\";\n  }\n};\n\nconst base64Encode = (str: string): string => {\n  return Buffer.from(str).toString(\"base64\");\n};\n\nexport interface ClientAuthProvider {\n  /**\n   * Abstract method for authenticating a client.\n   */\n  authenticate(): AuthHeaders;\n}\n\nexport class BasicAuthClientProvider implements ClientAuthProvider {\n  private readonly credentials: AuthHeaders;\n\n  /**\n   * Creates a new BasicAuthClientProvider.\n   * @param textCredentials - The credentials for the authentication provider. Must be of the form \"username:password\". If not supplied, the environment variable CHROMA_CLIENT_AUTH_CREDENTIALS will be used.\n   * @throws {Error} If neither credentials provider or text credentials are supplied.\n   */\n  constructor(textCredentials: string | undefined) {\n    const creds = textCredentials ?? process.env.CHROMA_CLIENT_AUTH_CREDENTIALS;\n    if (creds === undefined) {\n      throw new Error(\n        \"Credentials must be supplied via environment variable (CHROMA_CLIENT_AUTH_CREDENTIALS) or passed in as configuration.\",\n      );\n    }\n    this.credentials = {\n      Authorization: \"Basic \" + base64Encode(creds),\n    };\n  }\n\n  authenticate(): AuthHeaders {\n    return this.credentials;\n  }\n}\n\nexport class TokenAuthClientProvider implements ClientAuthProvider {\n  private readonly credentials: AuthHeaders;\n\n  constructor(\n    textCredentials: any,\n    headerType: TokenHeaderType = \"AUTHORIZATION\",\n  ) {\n    const creds = textCredentials ?? process.env.CHROMA_CLIENT_AUTH_CREDENTIALS;\n    if (creds === undefined) {\n      throw new Error(\n        \"Credentials must be supplied via environment variable (CHROMA_CLIENT_AUTH_CREDENTIALS) or passed in as configuration.\",\n      );\n    }\n\n    const headerKey: string = tokenHeaderTypeToHeaderKey(headerType);\n    const headerVal =\n      headerType === \"AUTHORIZATION\" ? `Bearer ${creds}` : creds;\n    this.credentials = {};\n    this.credentials[headerKey] = headerVal;\n  }\n\n  authenticate(): AuthHeaders {\n    return this.credentials;\n  }\n}\n\nexport const authOptionsToAuthProvider = (\n  auth: AuthOptions,\n): ClientAuthProvider => {\n  if (auth.provider === undefined) {\n    throw new Error(\"Auth provider not specified\");\n  }\n  if (auth.credentials === undefined) {\n    throw new Error(\"Auth credentials not specified\");\n  }\n  switch (auth.provider) {\n    case \"basic\":\n      return new BasicAuthClientProvider(auth.credentials);\n    case \"token\":\n      return new TokenAuthClientProvider(\n        auth.credentials,\n        auth.tokenHeaderType,\n      );\n      break;\n    default:\n      throw new Error(\"Invalid auth provider\");\n  }\n};\n","import {\n  ChromaUnauthorizedError,\n  ChromaClientError,\n  ChromaConnectionError,\n  ChromaForbiddenError,\n  ChromaNotFoundError,\n  ChromaServerError,\n  ChromaValueError,\n  ChromaError,\n  createErrorByType,\n  ChromaUniqueError,\n} from \"./Errors\";\nimport { FetchAPI } from \"./generated\";\n\nfunction isOfflineError(error: any): boolean {\n  return Boolean(\n    (error?.name === \"TypeError\" || error?.name === \"FetchError\") &&\n      (error.message?.includes(\"fetch failed\") ||\n        error.message?.includes(\"Failed to fetch\") ||\n        error.message?.includes(\"ENOTFOUND\")),\n  );\n}\n\nfunction parseServerError(error: string | undefined): Error {\n  const regex = /(\\w+)\\('(.+)'\\)/;\n  const match = error?.match(regex);\n  if (match) {\n    const [, name, message] = match;\n    switch (name) {\n      case \"ValueError\":\n        return new ChromaValueError(message);\n      default:\n        return new ChromaError(name, message);\n    }\n  }\n  return new ChromaServerError(\n    \"The server encountered an error while handling the request.\",\n  );\n}\n\n/** This utility allows a single entrypoint for custom error handling logic\n *  that works across all ChromaClient methods.\n *\n *  It is intended to be passed to the ApiApi constructor.\n */\nexport const chromaFetch: FetchAPI = async (\n  input: RequestInfo | URL,\n  init?: RequestInit,\n): Promise<Response> => {\n  try {\n    const resp = await fetch(input, init);\n\n    const clonedResp = resp.clone();\n    const respBody = await clonedResp.json();\n    if (!clonedResp.ok) {\n      const error = createErrorByType(respBody?.error, respBody?.message);\n      if (error) {\n        throw error;\n      }\n      switch (resp.status) {\n        case 400:\n          throw new ChromaClientError(\n            `Bad request to ${input} with status: ${resp.statusText}`,\n          );\n        case 401:\n          throw new ChromaUnauthorizedError(`Unauthorized`);\n        case 403:\n          throw new ChromaForbiddenError(\n            `You do not have permission to access the requested resource.`,\n          );\n        case 404:\n          throw new ChromaNotFoundError(\n            `The requested resource could not be found: ${input}`,\n          );\n        case 409:\n          throw new ChromaUniqueError(\"The resource already exists\");\n        case 500:\n          throw parseServerError(respBody?.error);\n        case 502:\n        case 503:\n        case 504:\n          throw new ChromaConnectionError(\n            `Unable to connect to the chromadb server. Please try again later.`,\n          );\n      }\n\n      throw new Error(\n        `Failed to fetch ${input} with status ${resp.status}: ${resp.statusText}`,\n      );\n    }\n\n    if (respBody?.error) {\n      throw parseServerError(respBody.error);\n    }\n\n    return resp;\n  } catch (error) {\n    if (isOfflineError(error)) {\n      throw new ChromaConnectionError(\n        \"Failed to connect to chromadb. Make sure your server is running and try again. If you are running from a browser, make sure that your chromadb instance is configured to allow requests from the current origin using the CHROMA_SERVER_CORS_ALLOW_ORIGINS environment variable.\",\n        error,\n      );\n    }\n    throw error;\n  }\n};\n","import { Configuration, ApiApi as DefaultApi } from \"./generated\";\nimport { validateTenantDatabase } from \"./utils\";\nimport { ConfigOptions } from \"./types\";\nimport {\n  AuthOptions,\n  authOptionsToAuthProvider,\n  ClientAuthProvider,\n} from \"./auth\";\nimport { chromaFetch } from \"./ChromaFetch\";\n\nconst DEFAULT_TENANT = \"default_tenant\";\nconst DEFAULT_DATABASE = \"default_database\";\n\n// interface for tenant\ninterface Tenant {\n  name: string;\n}\n\ninterface Database {\n  id: string;\n  tenant: string;\n  name: string;\n}\n\nexport class AdminClient {\n  /**\n   * @ignore\n   */\n  private api: DefaultApi & ConfigOptions;\n  private authProvider: ClientAuthProvider | undefined;\n  public tenant: string = DEFAULT_TENANT;\n  public database: string = DEFAULT_DATABASE;\n\n  /**\n   * Creates a new AdminClient instance.\n   * @param {Object} params - The parameters for creating a new client\n   * @param {string} [params.path] - The base path for the Chroma API.\n   * @returns {AdminClient} A new AdminClient instance.\n   *\n   * @example\n   * ```typescript\n   * const client = new AdminClient({\n   *   path: \"http://localhost:8000\"\n   * });\n   * ```\n   */\n  constructor({\n    path,\n    fetchOptions,\n    auth,\n    tenant = DEFAULT_TENANT,\n    database = DEFAULT_DATABASE,\n  }: {\n    path?: string;\n    fetchOptions?: RequestInit;\n    auth?: AuthOptions;\n    tenant?: string;\n    database?: string;\n  } = {}) {\n    if (path === undefined) path = \"http://localhost:8000\";\n    this.tenant = tenant;\n    this.database = database;\n    this.authProvider = undefined;\n\n    const apiConfig: Configuration = new Configuration({\n      basePath: path,\n    });\n\n    this.api = new DefaultApi(apiConfig, undefined, chromaFetch);\n    this.api.options = fetchOptions ?? {};\n\n    if (auth !== undefined) {\n      this.authProvider = authOptionsToAuthProvider(auth);\n      this.api.options.headers = {\n        ...this.api.options.headers,\n        ...this.authProvider.authenticate(),\n      };\n    }\n  }\n\n  /**\n   * Sets the tenant and database for the client.\n   *\n   * @param {Object} params - The parameters for setting tenant and database.\n   * @param {string} params.tenant - The name of the tenant.\n   * @param {string} params.database - The name of the database.\n   *\n   * @returns {Promise<void>} A promise that returns nothing\n   * @throws {Error} Any issues\n   *\n   * @example\n   * ```typescript\n   * await adminClient.setTenant({\n   *   tenant: \"my_tenant\",\n   *   database: \"my_database\",\n   * });\n   * ```\n   */\n  public async setTenant({\n    tenant = DEFAULT_TENANT,\n    database = DEFAULT_DATABASE,\n  }: {\n    tenant: string;\n    database?: string;\n  }): Promise<void> {\n    await validateTenantDatabase(this, tenant, database);\n    this.tenant = tenant;\n    this.database = database;\n  }\n\n  /**\n   * Sets the database for the client.\n   *\n   * @param {Object} params - The parameters for setting the database.\n   * @param {string} params.database - The name of the database.\n   *\n   * @returns {Promise<void>} A promise that returns nothing\n   * @throws {Error} Any issues\n   *\n   * @example\n   * ```typescript\n   * await adminClient.setDatabase({\n   *   database: \"my_database\",\n   * });\n   * ```\n   */\n  public async setDatabase({\n    database = DEFAULT_DATABASE,\n  }: {\n    database?: string;\n  }): Promise<void> {\n    await validateTenantDatabase(this, this.tenant, database);\n    this.database = database;\n  }\n\n  /**\n   * Creates a new tenant with the specified properties.\n   *\n   * @param {Object} params - The parameters for creating a new tenant.\n   * @param {string} params.name - The name of the tenant.\n   *\n   * @returns {Promise<Tenant>} A promise that resolves to the created tenant.\n   * @throws {Error} If there is an issue creating the tenant.\n   *\n   * @example\n   * ```typescript\n   * await adminClient.createTenant({\n   *   name: \"my_tenant\",\n   * });\n   * ```\n   */\n  public async createTenant({ name }: { name: string }): Promise<Tenant> {\n    await this.api.createTenant({ name }, this.api.options);\n\n    return { name };\n  }\n\n  /**\n   * Gets a tenant with the specified properties.\n   *\n   * @param {Object} params - The parameters for getting a tenant.\n   * @param {string} params.name - The name of the tenant.\n   *\n   * @returns {Promise<Tenant>} A promise that resolves to the tenant.\n   * @throws {Error} If there is an issue getting the tenant.\n   *\n   * @example\n   * ```typescript\n   * await adminClient.getTenant({\n   *   name: \"my_tenant\",\n   * });\n   * ```\n   */\n  public async getTenant({ name }: { name: string }): Promise<Tenant> {\n    const getTenant = (await this.api.getTenant(\n      name,\n      this.api.options,\n    )) as Tenant;\n\n    return { name: getTenant.name };\n  }\n\n  /**\n   * Creates a new database with the specified properties.\n   *\n   * @param {Object} params - The parameters for creating a new database.\n   * @param {string} params.name - The name of the database.\n   * @param {string} params.tenantName - The name of the tenant.\n   *\n   * @returns {Promise<Database>} A promise that resolves to the created database.\n   * @throws {Error} If there is an issue creating the database.\n   *\n   * @example\n   * ```typescript\n   * await adminClient.createDatabase({\n   *   name: \"my_database\",\n   *   tenantName: \"my_tenant\",\n   * });\n   * ```\n   */\n  public async createDatabase({\n    name,\n    tenantName,\n  }: {\n    name: string;\n    tenantName: string;\n  }): Promise<{ name: string }> {\n    await this.api.createDatabase(tenantName, { name }, this.api.options);\n\n    return { name };\n  }\n\n  /**\n   * Gets a database with the specified properties.\n   *\n   * @param {Object} params - The parameters for getting a database.\n   * @param {string} params.name - The name of the database.\n   * @param {string} params.tenantName - The name of the tenant.\n   *\n   * @returns {Promise<Database>} A promise that resolves to the database.\n   * @throws {Error} If there is an issue getting the database.\n   *\n   * @example\n   * ```typescript\n   * await adminClient.getDatabase({\n   *   name: \"my_database\",\n   *   tenantName: \"my_tenant\",\n   * });\n   * ```\n   */\n  public async getDatabase({\n    name,\n    tenantName,\n  }: {\n    name: string;\n    tenantName: string;\n  }): Promise<Database> {\n    const result = (await this.api.getDatabase(\n      tenantName,\n      name,\n      this.api.options,\n    )) as Database;\n\n    return result;\n  }\n\n  /**\n   * Deletes a database.\n   *\n   * @param {Object} params - The parameters for deleting a database.\n   * @param {string} params.name - The name of the database.\n   * @param {string} params.tenantName - The name of the tenant.\n   *\n   * @returns {Promise<void>} A promise that returns nothing.\n   * @throws {Error} If there is an issue deleting the database.\n   */\n  public async deleteDatabase({\n    name,\n    tenantName,\n  }: {\n    name: string;\n    tenantName: string;\n  }): Promise<void> {\n    await this.api.deleteDatabase(tenantName, name, this.api.options);\n    return;\n  }\n\n  /**\n   * Lists database for a specific tenant.\n   *\n   * @param {Object} params - The parameters for listing databases.\n   * @param {number} [params.limit] - The maximum number of databases to return.\n   * @param {number} [params.offset] - The number of databases to skip.\n   *\n   * @returns {Promise<Database[]>} A promise that resolves to a list of databases.\n   * @throws {Error} If there is an issue listing the databases.\n   */\n  public async listDatabases({\n    limit,\n    offset,\n    tenantName,\n  }: {\n    limit?: number;\n    offset?: number;\n    tenantName: string;\n  }): Promise<Database[]> {\n    const response = await this.api.listDatabases(\n      tenantName,\n      limit,\n      offset,\n      this.api.options,\n    );\n\n    return response as Database[];\n  }\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Amazon Bedrock Embedding Function Schema\",\n  \"description\": \"Schema for the Amazon Bedrock embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"session_args\": {\n      \"type\": \"object\",\n      \"description\": \"The arguments to pass to the boto3 session\"\n    },\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"The name of the model to use for embeddings\"\n    },\n    \"kwargs\": {\n      \"type\": \"object\",\n      \"description\": \"Additional arguments to pass to the Amazon Bedrock client\"\n    }\n  },\n  \"required\": [\n    \"session_args\",\n    \"model_name\",\n    \"kwargs\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"title\": \"Embedding Function Base Schema\",\n    \"description\": \"Base schema for all embedding functions in Chroma\",\n    \"type\": \"object\",\n    \"properties\": {\n        \"version\": {\n            \"type\": \"string\",\n            \"description\": \"Schema version for the embedding function\"\n        },\n        \"name\": {\n            \"type\": \"string\",\n            \"description\": \"Name of the embedding function\"\n        },\n        \"config\": {\n            \"type\": \"object\",\n            \"description\": \"Configuration parameters for the embedding function\"\n        }\n    },\n    \"required\": [\n        \"version\",\n        \"name\",\n        \"config\"\n    ],\n    \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Langchain Embedding Function Schema\",\n  \"description\": \"Schema for the langchain embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"embedding_function\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter embedding_function for the langchain embedding function\"\n    }\n  },\n  \"required\": [\n    \"embedding_function\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"title\": \"Cohere Embedding Function Schema\",\n    \"description\": \"Schema for the Cohere embedding function configuration\",\n    \"version\": \"1.0.0\",\n    \"type\": \"object\",\n    \"properties\": {\n        \"model_name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the model to use for text embeddings\"\n        },\n        \"api_key_env_var\": {\n            \"type\": \"string\",\n            \"description\": \"Environment variable name that contains your API key for the Cohere API\"\n        }\n    },\n    \"required\": [\n        \"api_key_env_var\",\n        \"model_name\"\n    ],\n    \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Default Embedding Function Schema\",\n  \"description\": \"Schema for the default embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {},\n  \"required\": [],\n  \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Google Generative AI Embedding Function Schema\",\n  \"description\": \"Schema for the Google Generative AI embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"The name of the model to use for text embeddings\"\n    },\n    \"task_type\": {\n      \"type\": \"string\",\n      \"description\": \"The task type for the embeddings (e.g., RETRIEVAL_DOCUMENT)\"\n    },\n    \"api_key_env_var\": {\n      \"type\": \"string\",\n      \"description\": \"Environment variable name that contains your API key for the Google Generative AI API\"\n    }\n  },\n  \"required\": [\n    \"api_key_env_var\",\n    \"model_name\",\n    \"task_type\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Google PaLM Embedding Function Schema\",\n  \"description\": \"Schema for the Google PaLM embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"The name of the model to use for text embeddings\"\n    },\n    \"api_key_env_var\": {\n      \"type\": \"string\",\n      \"description\": \"Environment variable name that contains your API key for the Google PaLM API\"\n    }\n  },\n  \"required\": [\n    \"api_key_env_var\",\n    \"model_name\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Google Vertex Embedding Function Schema\",\n  \"description\": \"Schema for the Google Vertex embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"The name of the model to use for text embeddings\"\n    },\n    \"project_id\": {\n      \"type\": \"string\",\n      \"description\": \"The Google Cloud project ID\"\n    },\n    \"region\": {\n      \"type\": \"string\",\n      \"description\": \"The Google Cloud region\"\n    },\n    \"api_key_env_var\": {\n      \"type\": \"string\",\n      \"description\": \"Environment variable name that contains your API key for the Google Vertex API\"\n    }\n  },\n  \"required\": [\n    \"api_key_env_var\",\n    \"model_name\",\n    \"project_id\",\n    \"region\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"title\": \"HuggingFace Embedding Function Schema\",\n    \"description\": \"Schema for the HuggingFace embedding function configuration\",\n    \"version\": \"1.0.0\",\n    \"type\": \"object\",\n    \"properties\": {\n        \"model_name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the model to use for text embeddings\"\n        },\n        \"api_key_env_var\": {\n            \"type\": \"string\",\n            \"description\": \"Environment variable name that contains your API key for the HuggingFace API\"\n        }\n    },\n    \"required\": [\n        \"api_key_env_var\",\n        \"model_name\"\n    ],\n    \"additionalProperties\": false\n}\n","{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"title\": \"HuggingFace Embedding Server Schema\",\n    \"description\": \"Schema for the HuggingFace embedding server configuration\",\n    \"version\": \"1.0.0\",\n    \"type\": \"object\",\n    \"properties\": {\n        \"url\": {\n            \"type\": \"string\",\n            \"description\": \"The URL of the HuggingFace Embedding Server\"\n        }\n    },\n    \"required\": [\n        \"url\"\n    ],\n    \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Instructor Embedding Function Schema\",\n  \"description\": \"Schema for the instructor embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter model_name for the instructor embedding function\"\n    },\n    \"device\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter device for the instructor embedding function\"\n    },\n    \"instruction\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter instruction for the instructor embedding function\"\n    }\n  },\n  \"required\": [\n    \"model_name\",\n    \"device\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Jina Embedding Function Schema\",\n  \"description\": \"Schema for the jina embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter model_name for the jina embedding function\"\n    },\n    \"api_key_env_var\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter api_key_env_var for the jina embedding function\"\n    },\n    \"task\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter task for the jina embedding function\"\n    },\n    \"late_chunking\": {\n      \"type\": \"boolean\",\n      \"description\": \"Parameter late_chunking for the jina embedding function\"\n    },\n    \"truncate\": {\n      \"type\": \"boolean\",\n      \"description\": \"Parameter truncate for the jina embedding function\"\n    },\n    \"dimensions\": {\n      \"type\": \"integer\",\n      \"description\": \"Parameter dimensions for the jina embedding function\"\n    },\n    \"embedding_type\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter embedding_type for the jina embedding function\"\n    },\n    \"normalized\": {\n      \"type\": \"boolean\",\n      \"description\": \"Parameter normalized for the jina embedding function\"\n    }\n  },\n  \"required\": [\n    \"api_key_env_var\",\n    \"model_name\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Ollama Embedding Function Schema\",\n  \"description\": \"Schema for the Ollama embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"url\": {\n      \"type\": \"string\",\n      \"description\": \"The URL of the Ollama server\"\n    },\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"The name of the model to use for embeddings\"\n    },\n    \"timeout\": {\n      \"type\": \"integer\",\n      \"description\": \"Timeout in seconds for the API request\"\n    }\n  },\n  \"required\": [\n    \"url\",\n    \"model_name\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Onnx_mini_lm_l6_v2 Embedding Function Schema\",\n  \"description\": \"Schema for the onnx_mini_lm_l6_v2 embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"preferred_providers\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Parameter preferred_providers for the onnx_mini_lm_l6_v2 embedding function\"\n    }\n  },\n  \"required\": [],\n  \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Open_clip Embedding Function Schema\",\n  \"description\": \"Schema for the open_clip embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter model_name for the open_clip embedding function\"\n    },\n    \"checkpoint\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter checkpoint for the open_clip embedding function\"\n    },\n    \"device\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter device for the open_clip embedding function\"\n    }\n  },\n  \"required\": [\n    \"model_name\",\n    \"checkpoint\",\n    \"device\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"title\": \"OpenAI Embedding Function Schema\",\n    \"description\": \"Schema for the OpenAI embedding function configuration\",\n    \"version\": \"1.0.0\",\n    \"type\": \"object\",\n    \"properties\": {\n        \"model_name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the model to use for text embeddings\"\n        },\n        \"organization_id\": {\n            \"type\": [\n                \"string\",\n                \"null\"\n            ],\n            \"description\": \"The OpenAI organization ID if applicable\"\n        },\n        \"api_base\": {\n            \"type\": [\n                \"string\",\n                \"null\"\n            ],\n            \"description\": \"The base path for the API\"\n        },\n        \"api_type\": {\n            \"type\": [\n                \"string\",\n                \"null\"\n            ],\n            \"description\": \"The type of the API deployment\"\n        },\n        \"api_version\": {\n            \"type\": [\n                \"string\",\n                \"null\"\n            ],\n            \"description\": \"The api version for the API\"\n        },\n        \"deployment_id\": {\n            \"type\": [\n                \"string\",\n                \"null\"\n            ],\n            \"description\": \"Deployment ID for Azure OpenAI\"\n        },\n        \"default_headers\": {\n            \"type\": [\n                \"object\",\n                \"null\"\n            ],\n            \"description\": \"A mapping of default headers to be sent with each API request\"\n        },\n        \"dimensions\": {\n            \"type\": [\n                \"integer\",\n                \"null\"\n            ],\n            \"description\": \"The number of dimensions for the embeddings\"\n        },\n        \"api_key_env_var\": {\n            \"type\": \"string\",\n            \"description\": \"Environment variable name that contains your API key for the OpenAI API\"\n        }\n    },\n    \"required\": [\n        \"api_key_env_var\",\n        \"model_name\"\n    ],\n    \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Roboflow Embedding Function Schema\",\n  \"description\": \"Schema for the roboflow embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"api_url\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter api_url for the roboflow embedding function\"\n    },\n    \"api_key_env_var\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter api_key_env_var for the roboflow embedding function\"\n    }\n  },\n  \"required\": [\n    \"api_key_env_var\",\n    \"api_url\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"title\": \"SentenceTransformer Embedding Function Schema\",\n    \"description\": \"Schema for the SentenceTransformer embedding function configuration\",\n    \"version\": \"1.0.0\",\n    \"type\": \"object\",\n    \"properties\": {\n        \"model_name\": {\n            \"type\": \"string\",\n            \"description\": \"Identifier of the SentenceTransformer model\"\n        },\n        \"device\": {\n            \"type\": \"string\",\n            \"description\": \"Device used for computation\"\n        },\n        \"normalize_embeddings\": {\n            \"type\": \"boolean\",\n            \"description\": \"Whether to normalize returned vectors\"\n        },\n        \"kwargs\": {\n            \"type\": \"object\",\n            \"description\": \"Additional arguments to pass to the SentenceTransformer model\",\n            \"additionalProperties\": {\n                \"type\": [\n                    \"string\",\n                    \"integer\",\n                    \"number\",\n                    \"boolean\",\n                    \"array\",\n                    \"object\"\n                ]\n            }\n        }\n    },\n    \"required\": [\n        \"model_name\",\n        \"device\",\n        \"normalize_embeddings\"\n    ],\n    \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Text2vec Embedding Function Schema\",\n  \"description\": \"Schema for the text2vec embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter model_name for the text2vec embedding function\"\n    }\n  },\n  \"required\": [\n    \"model_name\"\n  ],\n  \"additionalProperties\": false\n}\n","{\n    \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n    \"title\": \"Transformers Embedding Function Schema\",\n    \"description\": \"Schema for the Transformers embedding function configuration\",\n    \"version\": \"1.0.0\",\n    \"type\": \"object\",\n    \"properties\": {\n        \"model\": {\n            \"type\": \"string\",\n            \"description\": \"Identifier of the SentenceTransformer model\"\n        },\n        \"revision\": {\n            \"type\": \"string\",\n            \"description\": \"Specific model version to use (can be a branch, tag name, or commit id)\"\n        },\n        \"quantized\": {\n            \"type\": \"boolean\",\n            \"description\": \"Whether to load the 8-bit quantized version of the model\"\n        }\n    },\n    \"required\": [\n        \"model\",\n        \"revision\",\n        \"quantized\"\n    ],\n    \"additionalProperties\": false\n}\n","{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Voyageai Embedding Function Schema\",\n  \"description\": \"Schema for the voyageai embedding function configuration\",\n  \"version\": \"1.0.0\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"model_name\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter model_name for the voyageai embedding function\"\n    },\n    \"api_key_env_var\": {\n      \"type\": \"string\",\n      \"description\": \"Parameter api_key_env_var for the voyageai embedding function\"\n    }\n  },\n  \"required\": [\n    \"api_key_env_var\",\n    \"model_name\"\n  ],\n  \"additionalProperties\": false\n}\n","// Import schemas directly\nimport amazonBedrockSchema from \"../../../../../../schemas/embedding_functions/amazon_bedrock.json\";\nimport baseSchema from \"../../../../../../schemas/embedding_functions/base_schema.json\";\nimport chromaLangchainSchema from \"../../../../../../schemas/embedding_functions/chroma_langchain.json\";\nimport cohereSchema from \"../../../../../../schemas/embedding_functions/cohere.json\";\nimport defaultSchema from \"../../../../../../schemas/embedding_functions/default.json\";\nimport googleGenerativeAiSchema from \"../../../../../../schemas/embedding_functions/google_generative_ai.json\";\nimport googlePalmSchema from \"../../../../../../schemas/embedding_functions/google_palm.json\";\nimport googleVertexSchema from \"../../../../../../schemas/embedding_functions/google_vertex.json\";\nimport huggingfaceSchema from \"../../../../../../schemas/embedding_functions/huggingface.json\";\nimport huggingfaceServerSchema from \"../../../../../../schemas/embedding_functions/huggingface_server.json\";\nimport instructorSchema from \"../../../../../../schemas/embedding_functions/instructor.json\";\nimport jinaSchema from \"../../../../../../schemas/embedding_functions/jina.json\";\nimport ollamaSchema from \"../../../../../../schemas/embedding_functions/ollama.json\";\nimport onnxMiniLmL6V2Schema from \"../../../../../../schemas/embedding_functions/onnx_mini_lm_l6_v2.json\";\nimport openClipSchema from \"../../../../../../schemas/embedding_functions/open_clip.json\";\nimport openaiSchema from \"../../../../../../schemas/embedding_functions/openai.json\";\nimport roboflowSchema from \"../../../../../../schemas/embedding_functions/roboflow.json\";\nimport sentenceTransformerSchema from \"../../../../../../schemas/embedding_functions/sentence_transformer.json\";\nimport text2vecSchema from \"../../../../../../schemas/embedding_functions/text2vec.json\";\nimport transformersSchema from \"../../../../../../schemas/embedding_functions/transformers.json\";\nimport voyageaiSchema from \"../../../../../../schemas/embedding_functions/voyageai.json\";\n\nimport Ajv from \"ajv\";\n\n// Define a common interface for all schemas\ninterface Schema {\n  $schema: string;\n  title?: string;\n  description?: string;\n  version?: string;\n  type: string;\n  properties: Record<string, any>;\n  required?: string[];\n  additionalProperties?: boolean;\n  [key: string]: any; // Allow for other properties\n}\n\nconst ajv = new Ajv({\n  strict: false, // Allow unknown keywords\n  allErrors: true,\n});\n\n// Map of schema names to schema objects\nconst schemaMap = {\n  amazon_bedrock: amazonBedrockSchema as Schema,\n  base_schema: baseSchema as Schema,\n  chroma_langchain: chromaLangchainSchema as Schema,\n  cohere: cohereSchema as Schema,\n  default: defaultSchema as Schema,\n  google_generative_ai: googleGenerativeAiSchema as Schema,\n  google_palm: googlePalmSchema as Schema,\n  google_vertex: googleVertexSchema as Schema,\n  huggingface: huggingfaceSchema as Schema,\n  huggingface_server: huggingfaceServerSchema as Schema,\n  instructor: instructorSchema as Schema,\n  jina: jinaSchema as Schema,\n  ollama: ollamaSchema as Schema,\n  onnx_mini_lm_l6_v2: onnxMiniLmL6V2Schema as Schema,\n  open_clip: openClipSchema as Schema,\n  openai: openaiSchema as Schema,\n  roboflow: roboflowSchema as Schema,\n  sentence_transformer: sentenceTransformerSchema as Schema,\n  text2vec: text2vecSchema as Schema,\n  transformers: transformersSchema as Schema,\n  voyageai: voyageaiSchema as Schema,\n};\n\n/**\n * Load a JSON schema.\n *\n * @param schemaName Name of the schema file (without .json extension)\n * @returns The loaded schema as an object\n * @throws Error if the schema is not available\n */\nexport function loadSchema(schemaName: keyof typeof schemaMap): Schema {\n  if (!schemaMap[schemaName]) {\n    throw new Error(`Schema '${schemaName}' not found`);\n  }\n\n  return schemaMap[schemaName];\n}\n\n/**\n * Validate a configuration against a schema.\n *\n * @param config Configuration to validate\n * @param schemaName Name of the schema file (without .json extension)\n * @throws Error if the configuration does not match the schema\n */\nexport function validateConfigSchema(\n  config: Record<string, any>,\n  schemaName: keyof typeof schemaMap,\n): void {\n  const schema = loadSchema(schemaName);\n\n  const validate = ajv.compile(schema);\n  const valid = validate(config);\n\n  if (!valid) {\n    const errors = validate.errors || [];\n    const errorPaths = errors\n      .map((e) => `${e.instancePath || \"/\"}: ${e.message}`)\n      .join(\", \");\n    throw new Error(\n      `Config validation failed for schema '${schemaName}': ${errorPaths}`,\n    );\n  }\n}\n\n/**\n * Get the version of a schema.\n *\n * @param schemaName Name of the schema file (without .json extension)\n * @returns The schema version as a string\n * @throws Error if the schema file does not exist or is not valid JSON\n */\nexport function getSchemaVersion(schemaName: keyof typeof schemaMap): string {\n  const schema = loadSchema(schemaName);\n  return schema.version || \"1.0.0\";\n}\n\n/**\n * Get a list of all available schemas.\n *\n * @returns A list of schema names (without .json extension)\n */\nexport function getAvailableSchemas(): (keyof typeof schemaMap)[] {\n  return Object.keys(schemaMap).filter(\n    (name) => name !== \"base_schema\",\n  ) as (keyof typeof schemaMap)[];\n}\n\n/**\n * Get information about all available schemas.\n *\n * @returns A dictionary mapping schema names to information about the schema\n */\nexport function getSchemaInfo(): Record<\n  string,\n  { version: string; title: string; description: string }\n> {\n  const schemaInfo: Record<\n    string,\n    { version: string; title: string; description: string }\n  > = {};\n\n  for (const schemaName of getAvailableSchemas()) {\n    try {\n      const schema = schemaMap[schemaName];\n      schemaInfo[schemaName] = {\n        version: schema.version || \"1.0.0\",\n        title: schema.title || \"\",\n        description: schema.description || \"\",\n      };\n    } catch (error) {\n      console.error(`Failed to load schema '${schemaName}':`, error);\n    }\n  }\n\n  return schemaInfo;\n}\n","import { validateConfigSchema } from \"../schemas/schemaUtils\";\nimport { isBrowser } from \"../utils\";\nimport { IEmbeddingFunction } from \"./IEmbeddingFunction\";\n\n// Dynamically import module\nlet TransformersApi: Promise<any>;\n\ninterface StoredConfig {\n  model_name: string;\n  revision: string;\n  quantized: boolean;\n}\n\nexport class DefaultEmbeddingFunction implements IEmbeddingFunction {\n  name = \"default\";\n\n  private pipelinePromise?: Promise<any> | null;\n  private transformersApi: any;\n  private model: string;\n  private revision: string;\n  private quantized: boolean;\n  private progress_callback: Function | null;\n\n  /**\n   * DefaultEmbeddingFunction constructor.\n   * @param options The configuration options.\n   * @param options.model The model to use to calculate embeddings. Defaults to 'Xenova/all-MiniLM-L6-v2', which is an ONNX port of `sentence-transformers/all-MiniLM-L6-v2`.\n   * @param options.revision The specific model version to use (can be a branch, tag name, or commit id). Defaults to 'main'.\n   * @param options.quantized Whether to load the 8-bit quantized version of the model. Defaults to `false`.\n   * @param options.progress_callback If specified, this function will be called during model construction, to provide the user with progress updates.\n   */\n  constructor({\n    model = \"Xenova/all-MiniLM-L6-v2\",\n    revision = \"main\",\n    quantized = false,\n    progress_callback = null,\n  }: {\n    model?: string;\n    revision?: string;\n    quantized?: boolean;\n    progress_callback?: Function | null;\n  } = {}) {\n    this.model = model;\n    this.revision = revision;\n    this.quantized = quantized;\n    this.progress_callback = progress_callback;\n  }\n\n  public async generate(texts: string[]): Promise<number[][]> {\n    await this.loadClient();\n\n    // Store a promise that resolves to the pipeline\n    this.pipelinePromise = new Promise(async (resolve, reject) => {\n      try {\n        const pipeline = this.transformersApi;\n\n        const quantized = this.quantized;\n        const revision = this.revision;\n        const progress_callback = this.progress_callback;\n\n        resolve(\n          await pipeline(\"feature-extraction\", this.model, {\n            quantized,\n            revision,\n            progress_callback,\n          }),\n        );\n      } catch (e) {\n        reject(e);\n      }\n    });\n\n    let pipe = await this.pipelinePromise;\n    let output = await pipe(texts, { pooling: \"mean\", normalize: true });\n    return output.tolist();\n  }\n\n  getConfig(): StoredConfig {\n    return {\n      model_name: this.model,\n      revision: this.revision,\n      quantized: this.quantized,\n    };\n  }\n\n  buildFromConfig(config: StoredConfig): DefaultEmbeddingFunction {\n    return new DefaultEmbeddingFunction({\n      model: config.model_name,\n      revision: config.revision,\n      quantized: config.quantized,\n    });\n  }\n\n  validateConfigUpdate(oldConfig: StoredConfig, newConfig: StoredConfig): void {\n    if (oldConfig.model_name !== newConfig.model_name) {\n      throw new Error(\n        \"DefaultEmbeddingFunction model_name cannot be changed after initialization.\",\n      );\n    }\n  }\n\n  validateConfig(config: StoredConfig): void {\n    validateConfigSchema(config, \"transformers\");\n  }\n\n  private async loadClient() {\n    if (this.transformersApi) return;\n    try {\n      // eslint-disable-next-line global-require,import/no-extraneous-dependencies\n      let { pipeline } = await DefaultEmbeddingFunction.import();\n      TransformersApi = pipeline;\n    } catch (_a) {\n      // @ts-ignore\n      if (_a.code === \"MODULE_NOT_FOUND\") {\n        throw new Error(\n          \"Please install the chromadb-default-embed package to use the DefaultEmbeddingFunction, `npm install chromadb-default-embed`\",\n        );\n      }\n      throw _a; // Re-throw other errors\n    }\n    this.transformersApi = TransformersApi;\n  }\n\n  /** @ignore */\n  static async import(): Promise<{\n    // @ts-ignore\n    pipeline: typeof import(\"chromadb-default-embed\");\n  }> {\n    try {\n      // @ts-ignore\n      const { pipeline } = await import(\"chromadb-default-embed\");\n      return { pipeline };\n    } catch (e) {\n      throw new Error(\n        \"Please install chromadb-default-embed as a dependency with, e.g. `npm install chromadb-default-embed`\",\n      );\n    }\n  }\n}\n","import { version } from \"../package.json\";\nimport { AdminClient } from \"./AdminClient\";\nimport { authOptionsToAuthProvider, ClientAuthProvider } from \"./auth\";\nimport { chromaFetch } from \"./ChromaFetch\";\nimport { Collection } from \"./Collection\";\nimport { DefaultEmbeddingFunction } from \"./embeddings/DefaultEmbeddingFunction\";\nimport { Configuration, ApiApi as DefaultApi, Api } from \"./generated\";\nimport type {\n  ChromaClientParams,\n  CollectionMetadata,\n  CollectionParams,\n  ConfigOptions,\n  CreateCollectionParams,\n  DeleteCollectionParams,\n  GetCollectionParams,\n  GetOrCreateCollectionParams,\n  ListCollectionsParams,\n  UserIdentity,\n} from \"./types\";\nimport { validateTenantDatabase, wrapCollection } from \"./utils\";\nimport { loadApiCollectionConfigurationFromCreateCollectionConfiguration } from \"./CollectionConfiguration\";\nimport { warn } from \"console\";\nconst DEFAULT_TENANT = \"default_tenant\";\nconst DEFAULT_DATABASE = \"default_database\";\n\nexport class ChromaClient {\n  /**\n   * @ignore\n   */\n  public api: DefaultApi & ConfigOptions;\n  /**\n   * @ignore\n   */\n  public tenant: string;\n  /**\n   * @ignore\n   */\n  public database: string;\n  /**\n   * @ignore\n   */\n  private _adminClient: AdminClient;\n  /**\n   * @ignore\n   */\n  private authProvider: ClientAuthProvider | undefined;\n  /**\n   * @ignore\n   */\n  private _initPromise: Promise<void> | undefined;\n\n  /**\n   * Creates a new ChromaClient instance.\n   * @param {Object} params - The parameters for creating a new client\n   * @param {string} [params.path] - The base path for the Chroma API.\n   * @returns {ChromaClient} A new ChromaClient instance.\n   *\n   * @example\n   * ```typescript\n   * const client = new ChromaClient({\n   *   path: \"http://localhost:8000\"\n   * });\n   * ```\n   */\n  constructor({\n    path = \"http://localhost:8000\",\n    fetchOptions,\n    auth,\n    tenant = DEFAULT_TENANT,\n    database = DEFAULT_DATABASE,\n  }: ChromaClientParams = {}) {\n    this.tenant = tenant;\n    this.database = database;\n    this.authProvider = undefined;\n\n    const apiConfig: Configuration = new Configuration({\n      basePath: path,\n    });\n\n    this.api = new DefaultApi(apiConfig, undefined, chromaFetch);\n    this.api.options = fetchOptions ?? {};\n\n    this.api.options.headers = {\n      ...this.api.options.headers,\n      \"user-agent\": `Chroma Javascript Client v${version} (https://github.com/chroma-core/chroma)`,\n    };\n\n    if (auth !== undefined) {\n      this.authProvider = authOptionsToAuthProvider(auth);\n      this.api.options.headers = {\n        ...this.api.options.headers,\n        ...this.authProvider.authenticate(),\n      };\n    }\n\n    this._adminClient = new AdminClient({\n      path,\n      fetchOptions,\n      auth,\n      tenant,\n      database,\n    });\n  }\n\n  /** @ignore */\n  async init(): Promise<void> {\n    if (!this._initPromise) {\n      if (this.authProvider !== undefined) {\n        await this.getUserIdentity();\n      }\n\n      this._initPromise = validateTenantDatabase(\n        this._adminClient,\n        this.tenant,\n        this.database,\n      );\n    }\n\n    return this._initPromise;\n  }\n\n  /**\n   * Tries to set the tenant and database for the client.\n   *\n   * @returns {Promise<void>} A promise that resolves when the tenant/database is resolved.\n   * @throws {Error} If there is an issue resolving the tenant and database.\n   *\n   */\n  async getUserIdentity(): Promise<void> {\n    const user_identity = (await this.api.getUserIdentity(\n      this.api.options,\n    )) as UserIdentity;\n    const user_tenant = user_identity.tenant;\n    const user_databases = user_identity.databases;\n\n    if (\n      user_tenant !== null &&\n      user_tenant !== undefined &&\n      user_tenant !== \"*\" &&\n      this.tenant == DEFAULT_TENANT\n    ) {\n      this.tenant = user_tenant;\n    }\n\n    if (\n      user_databases !== null &&\n      user_databases !== undefined &&\n      user_databases.length == 1 &&\n      user_databases[0] !== \"*\" &&\n      this.database == DEFAULT_DATABASE\n    ) {\n      this.database = user_databases[0];\n    }\n  }\n\n  /**\n   * Resets the state of the object by making an API call to the reset endpoint.\n   *\n   * @returns {Promise<boolean>} A promise that resolves when the reset operation is complete.\n   * @throws {ChromaConnectionError} If the client is unable to connect to the server.\n   * @throws {ChromaServerError} If the server experienced an error while the state.\n   *\n   * @example\n   * ```typescript\n   * await client.reset();\n   * ```\n   */\n  async reset(): Promise<boolean> {\n    await this.init();\n    return await this.api.reset(this.api.options);\n  }\n\n  /**\n   * Returns the version of the Chroma API.\n   * @returns {Promise<string>} A promise that resolves to the version of the Chroma API.\n   * @throws {ChromaConnectionError} If the client is unable to connect to the server.\n   *\n   * @example\n   * ```typescript\n   * const version = await client.version();\n   * ```\n   */\n  async version(): Promise<string> {\n    return await this.api.version(this.api.options);\n  }\n\n  /**\n   * Returns a heartbeat from the Chroma API.\n   * @returns {Promise<number>} A promise that resolves to the heartbeat from the Chroma API.\n   * @throws {ChromaConnectionError} If the client is unable to connect to the server.\n   *\n   * @example\n   * ```typescript\n   * const heartbeat = await client.heartbeat();\n   * ```\n   */\n  async heartbeat(): Promise<number> {\n    const response = await this.api.heartbeat(this.api.options);\n    return response[\"nanosecond heartbeat\"];\n  }\n\n  /**\n   * Creates a new collection with the specified properties.\n   *\n   * @param {Object} params - The parameters for creating a new collection.\n   * @param {string} params.name - The name of the collection.\n   * @param {CollectionMetadata} [params.metadata] - Optional metadata associated with the collection.\n   * @param {IEmbeddingFunction} [params.embeddingFunction] - Optional custom embedding function for the collection.\n   *\n   * @returns {Promise<Collection>} A promise that resolves to the created collection.\n   * @throws {ChromaConnectionError} If the client is unable to connect to the server.\n   * @throws {ChromaServerError} If there is an issue creating the collection.\n   *\n   * @example\n   * ```typescript\n   * const collection = await client.createCollection({\n   *   name: \"my_collection\",\n   *   metadata: {\n   *     \"description\": \"My first collection\"\n   *   }\n   * });\n   * ```\n   */\n  async createCollection({\n    name,\n    metadata,\n    embeddingFunction = new DefaultEmbeddingFunction(),\n    configuration,\n  }: CreateCollectionParams): Promise<Collection> {\n    await this.init();\n    let collectionConfiguration: Api.CollectionConfiguration | undefined =\n      undefined;\n    if (configuration) {\n      collectionConfiguration =\n        loadApiCollectionConfigurationFromCreateCollectionConfiguration(\n          configuration,\n        );\n    }\n    const newCollection = await this.api.createCollection(\n      this.tenant,\n      this.database,\n      {\n        name,\n        configuration: collectionConfiguration,\n        metadata: metadata,\n      },\n      this.api.options,\n    );\n\n    let config: Api.CollectionConfiguration = {};\n    try {\n      config = newCollection.configuration_json;\n    } catch {\n      warn(\n        \"Server does not respond with configuration_json. Please update server\",\n      );\n    }\n\n    return wrapCollection(this, {\n      name: newCollection.name,\n      id: newCollection.id,\n      metadata: newCollection.metadata as CollectionMetadata | undefined,\n      embeddingFunction,\n      configuration: config,\n    });\n  }\n\n  /**\n   * Gets or creates a collection with the specified properties.\n   *\n   * @param {Object} params - The parameters for creating a new collection.\n   * @param {string} params.name - The name of the collection.\n   * @param {CollectionMetadata} [params.metadata] - Optional metadata associated with the collection.\n   * @param {IEmbeddingFunction} [params.embeddingFunction] - Optional custom embedding function for the collection.\n   *\n   * @returns {Promise<Collection>} A promise that resolves to the got or created collection.\n   * @throws {Error} If there is an issue getting or creating the collection.\n   *\n   * @example\n   * ```typescript\n   * const collection = await client.getOrCreateCollection({\n   *   name: \"my_collection\",\n   *   metadata: {\n   *     \"description\": \"My first collection\"\n   *   }\n   * });\n   * ```\n   */\n  async getOrCreateCollection({\n    name,\n    metadata,\n    embeddingFunction = new DefaultEmbeddingFunction(),\n    configuration,\n  }: GetOrCreateCollectionParams): Promise<Collection> {\n    await this.init();\n\n    let collectionConfiguration: Api.CollectionConfiguration | undefined =\n      undefined;\n\n    if (configuration) {\n      collectionConfiguration =\n        loadApiCollectionConfigurationFromCreateCollectionConfiguration(\n          configuration,\n        );\n    }\n\n    const newCollection = await this.api.createCollection(\n      this.tenant,\n      this.database,\n      {\n        name,\n        configuration: collectionConfiguration,\n        metadata: metadata,\n        get_or_create: true,\n      },\n      this.api.options,\n    );\n\n    let config: Api.CollectionConfiguration = {};\n    try {\n      config = newCollection.configuration_json;\n    } catch {\n      warn(\n        \"Server does not respond with configuration_json. Please update server\",\n      );\n    }\n\n    return wrapCollection(this, {\n      name: newCollection.name,\n      id: newCollection.id,\n      metadata: newCollection.metadata as CollectionMetadata | undefined,\n      embeddingFunction,\n      configuration: config,\n    });\n  }\n\n  /**\n   * Get all collection names.\n   *\n   * @returns {Promise<string[]>} A promise that resolves to a list of collection names.\n   * @param {PositiveInteger} [params.limit] - Optional limit on the number of items to get.\n   * @param {PositiveInteger} [params.offset] - Optional offset on the items to get.\n   * @throws {Error} If there is an issue listing the collections.\n   *\n   * @example\n   * ```typescript\n   * const collections = await client.listCollections({\n   *     limit: 10,\n   *     offset: 0,\n   * });\n   * ```\n   */\n  async listCollections({ limit, offset }: ListCollectionsParams = {}): Promise<\n    string[]\n  > {\n    await this.init();\n\n    const response = (await this.api.listCollections(\n      this.tenant,\n      this.database,\n      limit,\n      offset,\n      this.api.options,\n    )) as { name: string; tenant: string; database: string }[];\n\n    return response.map((collection) => collection.name);\n  }\n\n  /**\n   * List collection names, IDs, and metadata.\n   *\n   * @param {PositiveInteger} [params.limit] - Optional limit on the number of items to get.\n   * @param {PositiveInteger} [params.offset] - Optional offset on the items to get.\n   * @throws {Error} If there is an issue listing the collections.\n   * @returns {Promise<{ name: string, id: string, metadata?: CollectionMetadata }[]>} A promise that resolves to a list of collection names, IDs, and metadata.\n   *\n   * @example\n   * ```typescript\n   * const collections = await client.listCollectionsAndMetadata({\n   *    limit: 10,\n   *    offset: 0,\n   * });\n   */\n  async listCollectionsAndMetadata({\n    limit,\n    offset,\n  }: ListCollectionsParams = {}): Promise<\n    {\n      name: string;\n      id: string;\n      metadata?: CollectionMetadata;\n    }[]\n  > {\n    await this.init();\n    const results = (await this.api.listCollections(\n      this.tenant,\n      this.database,\n      limit,\n      offset,\n      this.api.options,\n    )) as { name: string; id: string; metadata?: CollectionMetadata }[];\n\n    return results ?? [];\n  }\n\n  /**\n   * Counts all collections.\n   *\n   * @returns {Promise<number>} A promise that resolves to the number of collections.\n   * @throws {Error} If there is an issue counting the collections.\n   *\n   * @example\n   * ```typescript\n   * const collections = await client.countCollections();\n   * ```\n   */\n  async countCollections(): Promise<number> {\n    await this.init();\n    const response = (await this.api.countCollections(\n      this.tenant,\n      this.database,\n      this.api.options,\n    )) as number;\n\n    return response;\n  }\n\n  /**\n   * Gets a collection with the specified name.\n   * @param {Object} params - The parameters for getting a collection.\n   * @param {string} params.name - The name of the collection.\n   * @param {IEmbeddingFunction} [params.embeddingFunction] - Optional custom embedding function for the collection.\n   * @returns {Promise<Collection>} A promise that resolves to the collection.\n   * @throws {Error} If there is an issue getting the collection.\n   *\n   * @example\n   * ```typescript\n   * const collection = await client.getCollection({\n   *   name: \"my_collection\"\n   * });\n   * ```\n   */\n  async getCollection({\n    name,\n    embeddingFunction,\n  }: GetCollectionParams): Promise<Collection> {\n    await this.init();\n    const response = await this.api.getCollection(\n      this.tenant,\n      this.database,\n      name,\n      this.api.options,\n    );\n\n    let config: Api.CollectionConfiguration = {};\n    try {\n      config = response.configuration_json;\n    } catch {\n      warn(\n        \"Server does not respond with configuration_json. Please update server\",\n      );\n    }\n\n    return wrapCollection(this, {\n      id: response.id,\n      name: response.name,\n      metadata: response.metadata as CollectionMetadata | undefined,\n      embeddingFunction:\n        embeddingFunction !== undefined\n          ? embeddingFunction\n          : new DefaultEmbeddingFunction(),\n      configuration: config,\n    });\n  }\n\n  /**\n   * Deletes a collection with the specified name.\n   * @param {Object} params - The parameters for deleting a collection.\n   * @param {string} params.name - The name of the collection.\n   * @returns {Promise<void>} A promise that resolves when the collection is deleted.\n   * @throws {Error} If there is an issue deleting the collection.\n   *\n   * @example\n   * ```typescript\n   * await client.deleteCollection({\n   *  name: \"my_collection\"\n   * });\n   * ```\n   */\n  async deleteCollection({ name }: DeleteCollectionParams): Promise<void> {\n    await this.init();\n\n    await this.api.deleteCollection(\n      this.tenant,\n      this.database,\n      name,\n      this.api.options,\n    );\n  }\n}\n","// create a cloudclient class that takes in an api key and an optional database\n// this should wrap ChromaClient and specify the auth scheme correctly\n\nimport { ChromaClient } from \"./ChromaClient\";\nimport { AuthOptions } from \"./auth\";\n\ninterface CloudClientParams {\n  apiKey?: string;\n  database?: string;\n  tenant?: string;\n  cloudHost?: string;\n  cloudPort?: string;\n}\n\nclass CloudClient extends ChromaClient {\n  constructor({\n    apiKey,\n    database,\n    tenant,\n    cloudHost,\n    cloudPort,\n  }: CloudClientParams) {\n    // If no API key is provided, try to load it from the environment variable\n    if (!apiKey) {\n      apiKey = process.env.CHROMA_API_KEY;\n    }\n    if (!apiKey) {\n      throw new Error(\"No API key provided\");\n    }\n\n    cloudHost = cloudHost || \"https://api.trychroma.com\";\n    cloudPort = cloudPort || \"8000\";\n\n    const path = `${cloudHost}:${cloudPort}`;\n\n    const auth: AuthOptions = {\n      provider: \"token\",\n      credentials: apiKey,\n      tokenHeaderType: \"X_CHROMA_TOKEN\",\n    };\n\n    return new ChromaClient({\n      path: path,\n      auth: auth,\n      database,\n      tenant,\n    });\n\n    super();\n  }\n}\n\nexport { CloudClient };\n","import type {\n  EmbeddingFunctionSpace,\n  IEmbeddingFunction,\n} from \"./IEmbeddingFunction\";\nimport { validateConfigSchema } from \"../schemas/schemaUtils\";\ninterface CohereAIAPI {\n  createEmbedding: (params: {\n    model: string;\n    input: string[];\n    isImage?: boolean;\n  }) => Promise<number[][]>;\n}\n\nclass CohereAISDK56 implements CohereAIAPI {\n  private cohereClient: any;\n  private apiKey: string;\n\n  constructor(configuration: { apiKey: string }) {\n    this.apiKey = configuration.apiKey;\n  }\n\n  private async loadClient() {\n    if (this.cohereClient) return;\n    //@ts-ignore\n    const { default: cohere } = await import(\"cohere-ai\");\n    // @ts-ignore\n    cohere.init(this.apiKey);\n    this.cohereClient = cohere;\n  }\n\n  public async createEmbedding(params: {\n    model: string;\n    input: string[];\n  }): Promise<number[][]> {\n    await this.loadClient();\n    return await this.cohereClient\n      .embed({\n        texts: params.input,\n        model: params.model,\n      })\n      .then((response: any) => {\n        return response.body.embeddings;\n      });\n  }\n}\n\nclass CohereAISDK7 implements CohereAIAPI {\n  private cohereClient: any;\n  private apiKey: string;\n\n  constructor(configuration: { apiKey: string }) {\n    this.apiKey = configuration.apiKey;\n  }\n\n  private async loadClient() {\n    if (this.cohereClient) return;\n    //@ts-ignore\n    const cohere = await import(\"cohere-ai\").then((cohere) => {\n      return cohere;\n    });\n    // @ts-ignore\n    this.cohereClient = new cohere.CohereClient({\n      token: this.apiKey,\n    });\n  }\n\n  public async createEmbedding(params: {\n    model: string;\n    input: string[];\n    isImage?: boolean;\n  }): Promise<number[][]> {\n    await this.loadClient();\n    if (params.isImage) {\n      return await this.cohereClient\n        .embed({ images: params.input, model: params.model })\n        .then((response: any) => {\n          return response.embeddings;\n        });\n    } else {\n      return await this.cohereClient\n        .embed({ texts: params.input, model: params.model })\n        .then((response: any) => {\n          return response.embeddings;\n        });\n    }\n  }\n}\n\ninterface StoredConfig {\n  model_name: string;\n  api_key_env_var: string;\n}\n\nexport class CohereEmbeddingFunction implements IEmbeddingFunction {\n  name = \"cohere\";\n\n  private cohereAiApi?: CohereAIAPI;\n  private model: string;\n  private isImage: boolean;\n  private apiKey: string;\n  private apiKeyEnvVar: string;\n\n  constructor({\n    cohere_api_key,\n    model = \"large\",\n    cohere_api_key_env_var = \"CHROMA_COHERE_API_KEY\",\n    /**\n     * If true, the input texts passed to `generate` are expected to be\n     * base64 encoded PNG data URIs.\n     */\n    isImage = false,\n  }: {\n    cohere_api_key?: string;\n    model?: string;\n    cohere_api_key_env_var: string;\n    /**\n     * If true, the input texts passed to `generate` are expected to be\n     * base64 encoded PNG data URIs.\n     */\n    isImage?: boolean;\n  }) {\n    this.model = model;\n    this.isImage = isImage;\n\n    const apiKey = cohere_api_key ?? process.env[cohere_api_key_env_var];\n    if (!apiKey) {\n      throw new Error(\n        `Cohere API key is required. Please provide it in the constructor or set the environment variable ${cohere_api_key_env_var}.`,\n      );\n    }\n\n    this.apiKey = apiKey;\n    this.apiKeyEnvVar = cohere_api_key_env_var;\n  }\n\n  private async initCohereClient() {\n    if (this.cohereAiApi) return;\n    try {\n      // @ts-ignore\n      this.cohereAiApi = await import(\"cohere-ai\").then((cohere) => {\n        // @ts-ignore\n        if (cohere.CohereClient) {\n          return new CohereAISDK7({ apiKey: this.apiKey });\n        } else {\n          return new CohereAISDK56({ apiKey: this.apiKey });\n        }\n      });\n    } catch (e) {\n      // @ts-ignore\n      if (e.code === \"MODULE_NOT_FOUND\") {\n        throw new Error(\n          \"Please install the cohere-ai package to use the CohereEmbeddingFunction, `npm install -S cohere-ai`\",\n        );\n      }\n      throw e;\n    }\n  }\n\n  public async generate(texts: string[]): Promise<number[][]> {\n    await this.initCohereClient();\n    // @ts-ignore\n    return await this.cohereAiApi.createEmbedding({\n      model: this.model,\n      input: texts,\n      isImage: this.isImage,\n    });\n  }\n\n  buildFromConfig(config: StoredConfig): CohereEmbeddingFunction {\n    return new CohereEmbeddingFunction({\n      model: config.model_name,\n      cohere_api_key_env_var: config.api_key_env_var,\n    });\n  }\n\n  getConfig(): StoredConfig {\n    return {\n      model_name: this.model,\n      api_key_env_var: this.apiKeyEnvVar,\n    };\n  }\n\n  validateConfigUpdate(oldConfig: StoredConfig, newConfig: StoredConfig): void {\n    if (oldConfig.model_name !== newConfig.model_name) {\n      throw new Error(\n        \"CohereEmbeddingFunction model_name cannot be changed after initialization.\",\n      );\n    }\n  }\n\n  validateConfig(config: StoredConfig): void {\n    validateConfigSchema(config, \"cohere\");\n  }\n\n  supportedSpaces(): EmbeddingFunctionSpace[] {\n    if (this.model === \"embed-english-v3.0\") {\n      return [\"cosine\", \"l2\", \"ip\"];\n    }\n\n    if (this.model === \"embed-english-light-v3.0\") {\n      return [\"cosine\", \"ip\", \"l2\"];\n    }\n\n    if (this.model === \"embed-english-v2.0\") {\n      return [\"cosine\"];\n    }\n\n    if (this.model === \"embed-english-light-v2.0\") {\n      return [\"cosine\"];\n    }\n\n    if (this.model === \"embed-multilingual-v3.0\") {\n      return [\"cosine\", \"l2\", \"ip\"];\n    }\n\n    if (this.model === \"embed-multilingual-light-v3.0\") {\n      return [\"cosine\", \"l2\", \"ip\"];\n    }\n\n    if (this.model === \"embed-multilingual-v2.0\") {\n      return [\"ip\"];\n    }\n\n    return [\"cosine\", \"l2\", \"ip\"];\n  }\n\n  defaultSpace(): EmbeddingFunctionSpace {\n    if (this.model == \"embed-multilingual-v2.0\") {\n      return \"ip\";\n    }\n\n    return \"cosine\";\n  }\n}\n","import {\n  EmbeddingFunctionSpace,\n  IEmbeddingFunction,\n} from \"./IEmbeddingFunction\";\nimport { validateConfigSchema } from \"../schemas/schemaUtils\";\ninterface StoredConfig {\n  api_key_env_var: string;\n  model_name: string;\n  task_type: string;\n}\n\nlet googleGenAiApi: any;\n\nexport class GoogleGenerativeAiEmbeddingFunction implements IEmbeddingFunction {\n  name = \"google_generative_ai\";\n\n  private api_key: string;\n  private api_key_env_var: string;\n  private model: string;\n  private googleGenAiApi?: any;\n  private taskType: string;\n\n  constructor({\n    googleApiKey,\n    model = \"embedding-001\",\n    taskType = \"RETRIEVAL_DOCUMENT\",\n    apiKeyEnvVar = \"GOOGLE_API_KEY\",\n  }: {\n    googleApiKey?: string;\n    model?: string;\n    taskType?: string;\n    apiKeyEnvVar: string;\n  }) {\n    const apiKey = googleApiKey ?? process.env[apiKeyEnvVar];\n    if (!apiKey) {\n      throw new Error(\n        `Google API key is required. Please provide it in the constructor or set the environment variable ${apiKeyEnvVar}.`,\n      );\n    }\n\n    this.api_key = apiKey;\n    this.api_key_env_var = apiKeyEnvVar;\n    this.model = model;\n    this.taskType = taskType;\n  }\n\n  private async loadClient() {\n    if (this.googleGenAiApi) return;\n    try {\n      // eslint-disable-next-line global-require,import/no-extraneous-dependencies\n      const { googleGenAi } =\n        await GoogleGenerativeAiEmbeddingFunction.import();\n      googleGenAiApi = googleGenAi;\n      // googleGenAiApi.init(this.api_key);\n      googleGenAiApi = new googleGenAiApi(this.api_key);\n    } catch (_a) {\n      // @ts-ignore\n      if (_a.code === \"MODULE_NOT_FOUND\") {\n        throw new Error(\n          \"Please install the @google/generative-ai package to use the GoogleGenerativeAiEmbeddingFunction, `npm install @google/generative-ai`\",\n        );\n      }\n      throw _a; // Re-throw other errors\n    }\n    this.googleGenAiApi = googleGenAiApi;\n  }\n\n  public async generate(texts: string[]) {\n    await this.loadClient();\n    const model = this.googleGenAiApi.getGenerativeModel({ model: this.model });\n    const response = await model.batchEmbedContents({\n      requests: texts.map((t) => ({\n        content: { parts: [{ text: t }] },\n        taskType: this.taskType,\n      })),\n    });\n    const embeddings = response.embeddings.map((e: any) => e.values);\n\n    return embeddings;\n  }\n\n  /** @ignore */\n  static async import(): Promise<{\n    // @ts-ignore\n    googleGenAi: typeof import(\"@google/generative-ai\");\n  }> {\n    try {\n      // @ts-ignore\n      const { GoogleGenerativeAI } = await import(\"@google/generative-ai\");\n      const googleGenAi = GoogleGenerativeAI;\n      // @ts-ignore\n      return { googleGenAi };\n    } catch (e) {\n      throw new Error(\n        \"Please install @google/generative-ai as a dependency with, e.g. `npm install @google/generative-ai`\",\n      );\n    }\n  }\n\n  buildFromConfig(config: StoredConfig): GoogleGenerativeAiEmbeddingFunction {\n    return new GoogleGenerativeAiEmbeddingFunction({\n      model: config.model_name,\n      apiKeyEnvVar: config.api_key_env_var,\n      taskType: config.task_type,\n    });\n  }\n\n  getConfig(): StoredConfig {\n    return {\n      api_key_env_var: this.api_key_env_var,\n      model_name: this.model,\n      task_type: this.taskType,\n    };\n  }\n\n  validateConfigUpdate(\n    oldConfig: Record<string, any>,\n    newConfig: Record<string, any>,\n  ): void {\n    if (oldConfig.model_name !== newConfig.model_name) {\n      throw new Error(\"The model name cannot be changed after initialization.\");\n    }\n\n    if (oldConfig.taskType !== newConfig.taskType) {\n      throw new Error(\"The task type cannot be changed after initialization.\");\n    }\n  }\n\n  validateConfig(config: Record<string, any>): void {\n    validateConfigSchema(config, \"google_generative_ai\");\n  }\n}\n","import { validateConfigSchema } from \"../schemas/schemaUtils\";\nimport { IEmbeddingFunction } from \"./IEmbeddingFunction\";\n\ntype StoredConfig = {\n  url: string;\n};\n\nexport class HuggingFaceEmbeddingServerFunction implements IEmbeddingFunction {\n  name = \"huggingface_server\";\n\n  private url: string;\n\n  constructor({ url }: { url: string }) {\n    // we used to construct the client here, but we need to async import the types\n    // for the openai npm package, and the constructor can not be async\n    this.url = url;\n  }\n\n  public async generate(texts: string[]) {\n    const response = await fetch(this.url, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify({ inputs: texts }),\n    });\n\n    if (!response.ok) {\n      throw new Error(`Failed to generate embeddings: ${response.statusText}`);\n    }\n\n    const data = await response.json();\n    return data;\n  }\n\n  buildFromConfig(config: StoredConfig): HuggingFaceEmbeddingServerFunction {\n    return new HuggingFaceEmbeddingServerFunction(config);\n  }\n\n  getConfig(): StoredConfig {\n    return {\n      url: this.url,\n    };\n  }\n\n  validateConfigUpdate(\n    oldConfig: Record<string, any>,\n    newConfig: Record<string, any>,\n  ): void {\n    if (oldConfig.url !== newConfig.url) {\n      throw new Error(\"Changing the URL is not allowed.\");\n    }\n  }\n\n  validateConfig(config: Record<string, any>): void {\n    validateConfigSchema(config, \"huggingface_server\");\n  }\n}\n","import { IEmbeddingFunction } from \"./IEmbeddingFunction\";\nimport { validateConfigSchema } from \"../schemas/schemaUtils\";\ntype StoredConfig = {\n  api_key_env_var: string;\n  model_name: string;\n  task?: string;\n  late_chunking?: boolean;\n  truncate?: boolean;\n  dimensions?: number;\n  embedding_type?: string;\n  normalized?: boolean;\n};\n\ninterface JinaRequestBody {\n  input: string[];\n  model: string;\n  task?: string;\n  late_chunking?: boolean;\n  truncate?: boolean;\n  dimensions?: number;\n  embedding_type?: string;\n  normalized?: boolean;\n}\n\nexport class JinaEmbeddingFunction implements IEmbeddingFunction {\n  name = \"jina\";\n\n  private api_key_env_var: string;\n  private model_name: string;\n  private api_url: string;\n  private headers: { [key: string]: string };\n  private task: string | undefined;\n  private late_chunking: boolean | undefined;\n  private truncate: boolean | undefined;\n  private dimensions: number | undefined;\n  private embedding_type: string | undefined;\n  private normalized: boolean | undefined;\n\n  constructor({\n    jinaai_api_key,\n    model_name = \"jina-embeddings-v2-base-en\",\n    api_key_env_var = \"JINAAI_API_KEY\",\n    task,\n    late_chunking,\n    truncate,\n    dimensions,\n    embedding_type,\n    normalized,\n  }: {\n    jinaai_api_key?: string;\n    model_name?: string;\n    api_key_env_var: string;\n    task?: string;\n    late_chunking?: boolean;\n    truncate?: boolean;\n    dimensions?: number;\n    embedding_type?: string;\n    normalized?: boolean;\n  }) {\n    const apiKey = jinaai_api_key ?? process.env[api_key_env_var];\n    if (!apiKey) {\n      throw new Error(\n        `Jina AI API key is required. Please provide it in the constructor or set the environment variable ${api_key_env_var}.`,\n      );\n    }\n\n    this.model_name = model_name;\n    this.api_key_env_var = api_key_env_var;\n    this.task = task;\n    this.late_chunking = late_chunking;\n    this.truncate = truncate;\n    this.dimensions = dimensions;\n    this.embedding_type = embedding_type;\n    this.normalized = normalized;\n\n    this.api_url = \"https://api.jina.ai/v1/embeddings\";\n    this.headers = {\n      Authorization: `Bearer ${jinaai_api_key}`,\n      \"Accept-Encoding\": \"identity\",\n      \"Content-Type\": \"application/json\",\n    };\n  }\n\n  public async generate(texts: string[]) {\n    let json_body: JinaRequestBody = {\n      input: texts,\n      model: this.model_name,\n    };\n\n    if (this.task) {\n      json_body.task = this.task;\n    }\n\n    if (this.late_chunking) {\n      json_body.late_chunking = this.late_chunking;\n    }\n\n    if (this.truncate) {\n      json_body.truncate = this.truncate;\n    }\n\n    if (this.dimensions) {\n      json_body.dimensions = this.dimensions;\n    }\n\n    if (this.embedding_type) {\n      json_body.embedding_type = this.embedding_type;\n    }\n\n    if (this.normalized) {\n      json_body.normalized = this.normalized;\n    }\n\n    try {\n      const response = await fetch(this.api_url, {\n        method: \"POST\",\n        headers: this.headers,\n        body: JSON.stringify(json_body),\n      });\n\n      const data = (await response.json()) as { data: any[]; detail: string };\n      if (!data || !data.data) {\n        throw new Error(data.detail);\n      }\n\n      const embeddings: any[] = data.data;\n      const sortedEmbeddings = embeddings.sort((a, b) => a.index - b.index);\n\n      return sortedEmbeddings.map((result) => result.embedding);\n    } catch (error) {\n      if (error instanceof Error) {\n        throw new Error(`Error calling Jina AI API: ${error.message}`);\n      } else {\n        throw new Error(`Error calling Jina AI API: ${error}`);\n      }\n    }\n  }\n\n  buildFromConfig(config: StoredConfig): JinaEmbeddingFunction {\n    return new JinaEmbeddingFunction({\n      model_name: config.model_name,\n      api_key_env_var: config.api_key_env_var,\n      task: config.task,\n      late_chunking: config.late_chunking,\n      truncate: config.truncate,\n      dimensions: config.dimensions,\n      embedding_type: config.embedding_type,\n      normalized: config.normalized,\n    });\n  }\n\n  getConfig(): StoredConfig {\n    return {\n      api_key_env_var: this.api_key_env_var,\n      model_name: this.model_name,\n      task: this.task,\n      late_chunking: this.late_chunking,\n      truncate: this.truncate,\n      dimensions: this.dimensions,\n      embedding_type: this.embedding_type,\n      normalized: this.normalized,\n    };\n  }\n\n  validateConfig(config: StoredConfig): void {\n    validateConfigSchema(config, \"jina\");\n  }\n}\n","import type { IEmbeddingFunction } from \"./IEmbeddingFunction\";\nimport { validateConfigSchema } from \"../schemas/schemaUtils\";\ntype StoredConfig = {\n  url: string;\n  model_name: string;\n};\n\nexport class OllamaEmbeddingFunction implements IEmbeddingFunction {\n  name = \"ollama\";\n\n  private readonly url: string;\n  private readonly model: string;\n  private ollamaClient?: any;\n\n  constructor({\n    url = \"http://localhost:11434\",\n    model = \"chroma/all-minilm-l6-v2-f32\",\n  }: { url?: string; model?: string } = {}) {\n    // we used to construct the client here, but we need to async import the types\n    // for the openai npm package, and the constructor can not be async\n    if (url && url.endsWith(\"/api/embeddings\")) {\n      this.url = url.slice(0, -\"/api/embeddings\".length);\n    } else {\n      this.url = url;\n    }\n    this.model = model;\n  }\n\n  private async initClient() {\n    if (this.ollamaClient) return;\n    try {\n      // @ts-ignore\n      const { ollama } = await OllamaEmbeddingFunction.import();\n      this.ollamaClient = new ollama.Ollama({ host: this.url });\n    } catch (e) {\n      // @ts-ignore\n      if (e.code === \"MODULE_NOT_FOUND\") {\n        throw new Error(\n          \"Please install the ollama package to use the OllamaEmbeddingFunction, `npm install -S ollama`\",\n        );\n      }\n      throw e;\n    }\n  }\n\n  /** @ignore */\n  static async import(): Promise<{\n    // @ts-ignore\n    ollama: typeof import(\"ollama\");\n  }> {\n    try {\n      // @ts-ignore\n      const { ollama } = await import(\"ollama\").then((m) => ({ ollama: m }));\n      // @ts-ignore\n      return { ollama };\n    } catch (e) {\n      throw new Error(\n        \"Please install Ollama as a dependency with, e.g. `npm install ollama`\",\n      );\n    }\n  }\n\n  public async generate(texts: string[]) {\n    await this.initClient();\n    return await this.ollamaClient!.embed({\n      model: this.model,\n      input: texts,\n    }).then((response: any) => {\n      return response.embeddings;\n    });\n  }\n\n  buildFromConfig(config: StoredConfig): OllamaEmbeddingFunction {\n    return new OllamaEmbeddingFunction({\n      url: config.url,\n      model: config.model_name,\n    });\n  }\n\n  getConfig(): StoredConfig {\n    return {\n      url: this.url,\n      model_name: this.model,\n    };\n  }\n\n  validateConfig(config: StoredConfig): void {\n    validateConfigSchema(config, \"ollama\");\n  }\n}\n","import { IEmbeddingFunction } from \"./IEmbeddingFunction\";\nimport { validateConfigSchema } from \"../schemas/schemaUtils\";\nlet OpenAIApi: any;\nlet openAiVersion = null;\nlet openAiMajorVersion = null;\n\ninterface OpenAIAPI {\n  createEmbedding: (params: {\n    model: string;\n    input: string[];\n    user?: string;\n    dimensions?: number;\n  }) => Promise<number[][]>;\n}\n\nclass OpenAIAPIv3 implements OpenAIAPI {\n  private readonly configuration: any;\n  private openai: any;\n\n  constructor(configuration: { organization: string; apiKey: string }) {\n    this.configuration = new OpenAIApi.Configuration({\n      organization: configuration.organization,\n      apiKey: configuration.apiKey,\n    });\n    this.openai = new OpenAIApi.OpenAIApi(this.configuration);\n  }\n\n  public async createEmbedding(params: {\n    model: string;\n    input: string[];\n    user?: string;\n    dimensions?: number;\n  }): Promise<number[][]> {\n    const embeddings: number[][] = [];\n    const response = await this.openai\n      .createEmbedding({\n        model: params.model,\n        input: params.input,\n      })\n      .catch((error: any) => {\n        throw error;\n      });\n    // @ts-ignore\n    const data = response.data[\"data\"];\n    for (let i = 0; i < data.length; i += 1) {\n      embeddings.push(data[i][\"embedding\"]);\n    }\n    return embeddings;\n  }\n}\n\nclass OpenAIAPIv4 implements OpenAIAPI {\n  private readonly apiKey: any;\n  private openai: any;\n\n  constructor(apiKey: any) {\n    this.apiKey = apiKey;\n    this.openai = new OpenAIApi({\n      apiKey: this.apiKey,\n    });\n  }\n\n  public async createEmbedding(params: {\n    model: string;\n    input: string[];\n    user?: string;\n    dimensions?: number;\n  }): Promise<number[][]> {\n    const embeddings: number[][] = [];\n    const response = await this.openai.embeddings.create(params);\n    const data = response[\"data\"];\n    for (let i = 0; i < data.length; i += 1) {\n      embeddings.push(data[i][\"embedding\"]);\n    }\n    return embeddings;\n  }\n}\n\ntype StoredConfig = {\n  api_key_env_var: string;\n  model_name: string;\n  organization_id: string;\n  dimensions: number;\n};\n\nexport class OpenAIEmbeddingFunction implements IEmbeddingFunction {\n  name = \"openai\";\n\n  private api_key: string;\n  private org_id: string;\n  private model: string;\n  private openaiApi?: OpenAIAPI;\n  private dimensions?: number;\n\n  constructor({\n    openai_api_key,\n    openai_model = \"text-embedding-ada-002\",\n    openai_organization_id,\n    openai_embedding_dimensions,\n    openai_api_key_env_var = \"OPENAI_API_KEY\",\n  }: {\n    openai_api_key?: string;\n    openai_model?: string;\n    openai_organization_id?: string;\n    openai_embedding_dimensions?: number;\n    openai_api_key_env_var?: string;\n  }) {\n    const apiKey = openai_api_key ?? process.env[openai_api_key_env_var];\n    if (!apiKey) {\n      throw new Error(\n        `OpenAI API key is required. Please provide it in the constructor or set the environment variable ${openai_api_key_env_var}.`,\n      );\n    }\n    this.api_key = apiKey;\n\n    this.org_id = openai_organization_id ?? \"\";\n    this.model = openai_model;\n    this.dimensions = openai_embedding_dimensions ?? 1536;\n  }\n\n  private async loadClient() {\n    // cache the client\n    if (this.openaiApi) return;\n\n    try {\n      const { openai, version } = await OpenAIEmbeddingFunction.import();\n      OpenAIApi = openai;\n      let versionVar: string = version;\n      openAiVersion = versionVar.replace(/[^0-9.]/g, \"\");\n      openAiMajorVersion = parseInt(openAiVersion.split(\".\")[0]);\n    } catch (_a) {\n      // @ts-ignore\n      if (_a.code === \"MODULE_NOT_FOUND\") {\n        throw new Error(\n          \"Please install the openai package to use the OpenAIEmbeddingFunction, e.g. `npm install openai`\",\n        );\n      }\n      throw _a; // Re-throw other errors\n    }\n\n    if (openAiMajorVersion > 3) {\n      this.openaiApi = new OpenAIAPIv4(this.api_key);\n    } else {\n      this.openaiApi = new OpenAIAPIv3({\n        organization: this.org_id,\n        apiKey: this.api_key,\n      });\n    }\n  }\n\n  public async generate(texts: string[]): Promise<number[][]> {\n    await this.loadClient();\n\n    return await this.openaiApi!.createEmbedding({\n      model: this.model,\n      input: texts,\n      dimensions: this.dimensions,\n    }).catch((error: any) => {\n      throw error;\n    });\n  }\n\n  /** @ignore */\n  static async import(): Promise<{\n    // @ts-ignore\n    openai: typeof import(\"openai\");\n    version: string;\n  }> {\n    try {\n      // @ts-ignore\n      const { default: openai } = await import(\"openai\");\n      // @ts-ignore\n      const { VERSION } = await import(\"openai/version\");\n      // @ts-ignore\n      return { openai, version: VERSION };\n    } catch (e) {\n      throw new Error(\n        \"Please install the openai package to use the OpenAIEmbeddingFunction, e.g. `npm install openai`\",\n      );\n    }\n  }\n\n  buildFromConfig(config: StoredConfig): OpenAIEmbeddingFunction {\n    return new OpenAIEmbeddingFunction({\n      openai_api_key: config.api_key_env_var,\n      openai_model: config.model_name,\n      openai_organization_id: config.organization_id,\n      openai_embedding_dimensions: config.dimensions,\n    });\n  }\n\n  getConfig(): StoredConfig {\n    return {\n      api_key_env_var: this.api_key,\n      model_name: this.model,\n      organization_id: this.org_id,\n      dimensions: this.dimensions ?? 1536,\n    };\n  }\n\n  validateConfigUpdate(oldConfig: StoredConfig, newConfig: StoredConfig): void {\n    if (oldConfig.model_name !== newConfig.model_name) {\n      throw new Error(\"Cannot change model name.\");\n    }\n  }\n\n  validateConfig(config: StoredConfig): void {\n    validateConfigSchema(config, \"openai\");\n  }\n}\n","import { IEmbeddingFunction } from \"./IEmbeddingFunction\";\nimport { validateConfigSchema } from \"../schemas/schemaUtils\";\n// Dynamically import module\nlet TransformersApi: Promise<any>;\n\ntype StoredConfig = {\n  model: string;\n  revision: string;\n  quantized: boolean;\n};\n\nexport class TransformersEmbeddingFunction implements IEmbeddingFunction {\n  name = \"transformers\";\n\n  private pipelinePromise?: Promise<any> | null;\n  private transformersApi: any;\n  private model: string;\n  private revision: string;\n  private quantized: boolean;\n  private progress_callback: Function | null;\n\n  /**\n   * TransformersEmbeddingFunction constructor.\n   * @param options The configuration options.\n   * @param options.model The model to use to calculate embeddings. Defaults to 'Xenova/all-MiniLM-L6-v2', which is an ONNX port of `sentence-transformers/all-MiniLM-L6-v2`.\n   * @param options.revision The specific model version to use (can be a branch, tag name, or commit id). Defaults to 'main'.\n   * @param options.quantized Whether to load the 8-bit quantized version of the model. Defaults to `false`.\n   * @param options.progress_callback If specified, this function will be called during model construction, to provide the user with progress updates.\n   */\n  constructor({\n    model = \"Xenova/all-MiniLM-L6-v2\",\n    revision = \"main\",\n    quantized = false,\n    progress_callback = null,\n  }: {\n    model?: string;\n    revision?: string;\n    quantized?: boolean;\n    progress_callback?: Function | null;\n  } = {}) {\n    this.model = model;\n    this.revision = revision;\n    this.quantized = quantized;\n    this.progress_callback = progress_callback;\n  }\n\n  public async generate(texts: string[]): Promise<number[][]> {\n    await this.loadClient();\n\n    // Store a promise that resolves to the pipeline\n    this.pipelinePromise = new Promise(async (resolve, reject) => {\n      try {\n        const pipeline = this.transformersApi;\n\n        const quantized = this.quantized;\n        const revision = this.revision;\n        const progress_callback = this.progress_callback;\n\n        resolve(\n          await pipeline(\"feature-extraction\", this.model, {\n            quantized,\n            revision,\n            progress_callback,\n          }),\n        );\n      } catch (e) {\n        reject(e);\n      }\n    });\n\n    let pipe = await this.pipelinePromise;\n    let output = await pipe(texts, { pooling: \"mean\", normalize: true });\n    return output.tolist();\n  }\n\n  private async loadClient() {\n    if (this.transformersApi) return;\n    try {\n      // eslint-disable-next-line global-require,import/no-extraneous-dependencies\n      let { pipeline } = await TransformersEmbeddingFunction.import();\n      TransformersApi = pipeline;\n    } catch (_a) {\n      // @ts-ignore\n      if (_a.code === \"MODULE_NOT_FOUND\") {\n        throw new Error(\n          \"Please install the @xenova/transformers package to use the TransformersEmbeddingFunction, `npm install @xenova/transformers`\",\n        );\n      }\n      throw _a; // Re-throw other errors\n    }\n    this.transformersApi = TransformersApi;\n  }\n\n  /** @ignore */\n  static async import(): Promise<{\n    // @ts-ignore\n    pipeline: typeof import(\"@xenova/transformers\");\n  }> {\n    try {\n      // @ts-ignore\n      const { pipeline } = await import(\"@xenova/transformers\");\n      return { pipeline };\n    } catch (e) {\n      throw new Error(\n        \"Please install @xenova/transformers as a dependency with, e.g. `npm install @xenova/transformers`\",\n      );\n    }\n  }\n\n  buildFromConfig(config: StoredConfig): TransformersEmbeddingFunction {\n    return new TransformersEmbeddingFunction({\n      model: config.model,\n      revision: config.revision,\n      quantized: config.quantized,\n    });\n  }\n\n  getConfig(): StoredConfig {\n    return {\n      model: this.model,\n      revision: this.revision,\n      quantized: this.quantized,\n    };\n  }\n\n  validateConfigUpdate(oldConfig: StoredConfig, newConfig: StoredConfig): void {\n    if (oldConfig.model !== newConfig.model) {\n      throw new Error(\"Cannot change the model of the embedding function.\");\n    }\n    if (oldConfig.revision !== newConfig.revision) {\n      throw new Error(\"Cannot change the revision of the embedding function.\");\n    }\n    if (oldConfig.quantized !== newConfig.quantized) {\n      throw new Error(\n        \"Cannot change the quantization of the embedding function.\",\n      );\n    }\n  }\n\n  validateConfig(config: StoredConfig): void {\n    validateConfigSchema(config, \"transformers\");\n  }\n}\n","import { IEmbeddingFunction } from \"./IEmbeddingFunction\";\nimport { validateConfigSchema } from \"../schemas/schemaUtils\";\nclass VoyageAIAPI {\n  private client: any;\n  private apiKey: string;\n\n  constructor(configuration: { apiKey: string }) {\n    this.apiKey = configuration.apiKey;\n  }\n\n  private async loadClient() {\n    if (this.client) return;\n    //@ts-ignore\n    const voyageai = await import(\"voyageai\").then((voyageai) => {\n      return voyageai;\n    });\n    // @ts-ignore\n    this.client = new voyageai.VoyageAIClient({\n      apiKey: this.apiKey,\n    });\n  }\n\n  public async createEmbedding(params: {\n    model: string;\n    input: string[];\n  }): Promise<number[][]> {\n    await this.loadClient();\n    return await this.client\n      .embed({ input: params.input, model: params.model })\n      .then((response: any) => {\n        return response.data.map(\n          (item: { embedding: number[] }) => item.embedding,\n        );\n      });\n  }\n}\n\ntype StoredConfig = {\n  api_key_env_var: string;\n  model_name: string;\n};\n\nexport class VoyageAIEmbeddingFunction implements IEmbeddingFunction {\n  name = \"voyageai\";\n\n  private voyageAiApi?: VoyageAIAPI;\n  private model: string;\n  private apiKey: string;\n  private apiKeyEnvVar: string;\n  constructor({\n    api_key,\n    model,\n    api_key_env_var = \"VOYAGE_API_KEY\",\n  }: {\n    api_key?: string;\n    model: string;\n    api_key_env_var: string;\n  }) {\n    const apiKey = api_key ?? process.env[api_key_env_var];\n    if (!apiKey) {\n      throw new Error(\n        `VoyageAI API key is required. Please provide it in the constructor or set the environment variable ${api_key_env_var}.`,\n      );\n    }\n    this.apiKey = apiKey;\n    this.model = model;\n    this.apiKeyEnvVar = api_key_env_var;\n  }\n\n  private async initClient() {\n    if (this.voyageAiApi) return;\n    try {\n      // @ts-ignore\n      this.voyageAiApi = await import(\"voyageai\").then((voyageai) => {\n        // @ts-ignore\n        return new VoyageAIAPI({ apiKey: this.apiKey });\n      });\n    } catch (e) {\n      // @ts-ignore\n      if (e.code === \"MODULE_NOT_FOUND\") {\n        throw new Error(\n          \"Please install the voyageai package to use the VoyageAIEmbeddingFunction, `npm install -S voyageai`\",\n        );\n      }\n      throw e;\n    }\n  }\n\n  public async generate(texts: string[]): Promise<number[][]> {\n    await this.initClient();\n    // @ts-ignore\n    return await this.voyageAiApi.createEmbedding({\n      model: this.model,\n      input: texts,\n    });\n  }\n\n  buildFromConfig(config: StoredConfig): VoyageAIEmbeddingFunction {\n    return new VoyageAIEmbeddingFunction({\n      api_key_env_var: config.api_key_env_var,\n      model: config.model_name,\n    });\n  }\n\n  getConfig(): StoredConfig {\n    return {\n      api_key_env_var: this.apiKeyEnvVar,\n      model_name: this.model,\n    };\n  }\n\n  validateConfigUpdate(oldConfig: StoredConfig, newConfig: StoredConfig): void {\n    if (oldConfig.model_name !== newConfig.model_name) {\n      throw new Error(\"Cannot change the model of the embedding function.\");\n    }\n  }\n\n  validateConfig(config: StoredConfig): void {\n    validateConfigSchema(config, \"voyageai\");\n  }\n}\n","import { AuthOptions } from \"./auth\";\nimport { CreateCollectionConfiguration } from \"./CollectionConfiguration\";\nimport { IEmbeddingFunction } from \"./embeddings/IEmbeddingFunction\";\nimport { Api } from \"./generated\";\n\nexport enum IncludeEnum {\n  Documents = \"documents\",\n  Embeddings = \"embeddings\",\n  Metadatas = \"metadatas\",\n  Distances = \"distances\",\n  Uris = \"uris\",\n}\n\nexport type Embedding = number[];\nexport type Embeddings = Embedding[];\n\nexport type Metadata = Record<string, string | number | boolean>;\nexport type Metadatas = Metadata[];\n\nexport type Document = string;\nexport type Documents = Document[];\n\nexport type ID = string;\nexport type IDs = ID[];\n\nexport type PositiveInteger = number;\n\ntype LiteralValue = string | number | boolean;\ntype ListLiteralValue = LiteralValue[];\ntype LiteralNumber = number;\ntype LogicalOperator = \"$and\" | \"$or\";\ntype InclusionOperator = \"$in\" | \"$nin\";\ntype WhereOperator = \"$gt\" | \"$gte\" | \"$lt\" | \"$lte\" | \"$ne\" | \"$eq\";\n\ntype OperatorExpression = {\n  [key in WhereOperator | InclusionOperator | LogicalOperator]?:\n    | LiteralValue\n    | ListLiteralValue;\n};\n\ntype BaseWhere = {\n  [key: string]: LiteralValue | OperatorExpression;\n};\n\ntype LogicalWhere = {\n  [key in LogicalOperator]?: Where[];\n};\n\nexport type Where = BaseWhere | LogicalWhere;\n\ntype WhereDocumentOperator = \"$contains\" | \"$not_contains\" | LogicalOperator;\n\nexport type WhereDocument = {\n  [key in WhereDocumentOperator]?:\n    | LiteralValue\n    | LiteralNumber\n    | WhereDocument[];\n};\n\nexport type MultiGetResponse = {\n  ids: IDs;\n  embeddings: Embeddings | null;\n  documents: (Document | null)[];\n  metadatas: (Metadata | null)[];\n  included: IncludeEnum[];\n};\n\nexport type GetResponse = MultiGetResponse;\n\nexport type SingleQueryResponse = {\n  ids: IDs;\n  embeddings: Embeddings | null;\n  documents: (Document | null)[];\n  metadatas: (Metadata | null)[];\n  distances: number[] | null;\n  included: IncludeEnum[];\n};\n\nexport type MultiQueryResponse = {\n  ids: IDs[];\n  embeddings: Embeddings[] | null;\n  documents: (Document | null)[][];\n  metadatas: (Metadata | null)[][];\n  distances: number[][] | null;\n  included: IncludeEnum[];\n};\n\nexport type QueryResponse = SingleQueryResponse | MultiQueryResponse;\n\nexport type AddResponse = {};\n\nexport interface CollectionParams {\n  name: string;\n  id: string;\n  metadata: CollectionMetadata | undefined;\n  embeddingFunction: IEmbeddingFunction;\n  configuration: Api.CollectionConfiguration | undefined;\n}\n\nexport type CollectionMetadata = Record<string, boolean | number | string>;\n\n// RequestInit can be used to set Authorization headers and more\n// see all options here: https://www.jsdocs.io/package/@types/node-fetch#RequestInit\nexport type ConfigOptions = {\n  options?: RequestInit;\n};\n\nexport type BaseGetParams = {\n  ids?: ID | IDs;\n  where?: Where;\n  limit?: PositiveInteger;\n  offset?: PositiveInteger;\n  include?: IncludeEnum[];\n  whereDocument?: WhereDocument;\n};\n\nexport type SingleGetParams = BaseGetParams & {\n  ids: ID;\n};\n\nexport type MultiGetParams = BaseGetParams & {\n  ids?: IDs;\n};\n\nexport type GetParams = SingleGetParams | MultiGetParams;\n\nexport type ListCollectionsParams = {\n  limit?: PositiveInteger;\n  offset?: PositiveInteger;\n};\n\nexport type ChromaClientParams = {\n  path?: string;\n  fetchOptions?: RequestInit;\n  auth?: AuthOptions;\n  tenant?: string;\n  database?: string;\n};\n\nexport type CreateCollectionParams = {\n  name: string;\n  metadata?: CollectionMetadata;\n  embeddingFunction?: IEmbeddingFunction;\n  configuration?: CreateCollectionConfiguration;\n};\n\nexport type GetOrCreateCollectionParams = CreateCollectionParams;\n\nexport type GetCollectionParams = {\n  name: string;\n  embeddingFunction?: IEmbeddingFunction;\n};\n\nexport type DeleteCollectionParams = {\n  name: string;\n};\n\nexport type BaseRecordOperationParams = {\n  ids: ID | IDs;\n  embeddings?: Embedding | Embeddings;\n  metadatas?: Metadata | Metadatas;\n  documents?: Document | Documents;\n};\n\nexport type SingleRecordOperationParams = BaseRecordOperationParams & {\n  ids: ID;\n  embeddings?: Embedding;\n  metadatas?: Metadata;\n  documents?: Document;\n};\n\ntype SingleEmbeddingRecordOperationParams = SingleRecordOperationParams & {\n  embeddings: Embedding;\n};\n\ntype SingleContentRecordOperationParams = SingleRecordOperationParams & {\n  documents: Document;\n};\n\nexport type SingleAddRecordOperationParams =\n  | SingleEmbeddingRecordOperationParams\n  | SingleContentRecordOperationParams;\n\nexport type MultiRecordOperationParams = BaseRecordOperationParams & {\n  ids: IDs;\n  embeddings?: Embeddings;\n  metadatas?: Metadatas;\n  documents?: Documents;\n};\n\ntype MultiEmbeddingRecordOperationParams = MultiRecordOperationParams & {\n  embeddings: Embeddings;\n};\n\ntype MultiContentRecordOperationParams = MultiRecordOperationParams & {\n  documents: Documents;\n};\n\nexport type MultiAddRecordsOperationParams =\n  | MultiEmbeddingRecordOperationParams\n  | MultiContentRecordOperationParams;\n\nexport type AddRecordsParams =\n  | SingleAddRecordOperationParams\n  | MultiAddRecordsOperationParams;\n\nexport type UpsertRecordsParams = AddRecordsParams;\nexport type UpdateRecordsParams =\n  | MultiRecordOperationParams\n  | SingleRecordOperationParams;\n\nexport type ModifyCollectionParams = {\n  name?: string;\n  metadata?: CollectionMetadata;\n};\n\nexport type ForkCollectionParams = {\n  newName: string;\n};\n\nexport type BaseQueryParams = {\n  nResults?: PositiveInteger;\n  where?: Where;\n  queryTexts?: string | string[];\n  queryEmbeddings?: Embedding | Embeddings;\n  whereDocument?: WhereDocument; // {\"$contains\":\"search_string\"}\n  include?: IncludeEnum[]; // [\"metadata\", \"document\"]\n};\n\nexport type SingleTextQueryParams = BaseQueryParams & {\n  queryTexts: string;\n  queryEmbeddings?: never;\n};\n\nexport type SingleEmbeddingQueryParams = BaseQueryParams & {\n  queryTexts?: never;\n  queryEmbeddings: Embedding;\n};\n\nexport type MultiTextQueryParams = BaseQueryParams & {\n  queryTexts: string[];\n  queryEmbeddings?: never;\n};\n\nexport type MultiEmbeddingQueryParams = BaseQueryParams & {\n  queryTexts?: never;\n  queryEmbeddings: Embeddings;\n};\n\nexport type QueryRecordsParams =\n  | SingleTextQueryParams\n  | SingleEmbeddingQueryParams\n  | MultiTextQueryParams\n  | MultiEmbeddingQueryParams;\n\nexport type PeekParams = { limit?: PositiveInteger };\n\nexport type DeleteParams = {\n  ids?: ID | IDs;\n  where?: Where;\n  whereDocument?: WhereDocument;\n};\n\nexport type UserIdentity = {\n  tenant: string;\n  databases: string[];\n};\n"],"mappings":"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","names":["exports","UsedValueState","exports","exports","exports","Type","exports","exports","exports","exports","exports","DataType","exports","exports","exports","schemaMap","exports","_a","exports","exports","module","exports","module","exports","exports","exports","exports","exports","exports","module","merge","sets","length","slice","xl","x","join","subexp","str","typeOf","o","undefined","Object","prototype","toString","call","split","pop","shift","toLowerCase","toUpperCase","toArray","obj","Array","setInterval","assign","target","source","key","buildExps","isIRI","ALPHA$$","CR$","DIGIT$$","DQUOTE$$","HEXDIG$$","SP$$","PCT_ENCODED$","SUB_DELIMS$$","RESERVED$$","GEN_DELIMS$$","UCSCHAR$$","SCHEME$","USERINFO$","UNRESERVED$$","DEC_OCTET$","DEC_OCTET_RELAXED$","H16$","LS32$","IPV4ADDRESS$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","ZONEID$","IPV6ADDRESS$","IP_LITERAL$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","HOST$","REG_NAME$","PORT$","AUTHORITY$","PCHAR$","SEGMENT$","SEGMENT_NZ$","SEGMENT_NZ_NC$","PATH_ABEMPTY$","PATH_ABSOLUTE$","PATH$","PATH_NOSCHEME$","PATH_ROOTLESS$","PATH_EMPTY$","QUERY$","IPRIVATE$$","FRAGMENT$","HIER_PART$","URI$","RELATIVE_PART$","RELATIVE$","URI_REFERENCE$","ABSOLUTE_URI$","GENERIC_REF$","RELATIVE_REF$","ABSOLUTE_REF$","SAMEDOC_REF$","AUTHORITY_REF$","RegExp","maxInt","base","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","floor","Math","stringFromCharCode","String","fromCharCode","error","type","RangeError","map","array","fn","result","mapDomain","string","parts","replace","labels","encoded","ucs2decode","output","counter","value","charCodeAt","extra","push","ucs2encode","fromCodePoint","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","k","decode","input","inputLength","i","n","bias","basic","lastIndexOf","j","index","oldi","w","t","baseMinusT","out","splice","encode","currentValue","basicLength","handledCPCount","m","handledCPCountPlusOne","q","qMinusT","toUnicode","test","toASCII","punycode","SCHEMES","pctEncChar","chr","c","e","pctDecChars","newStr","il","parseInt","substr","c2","c3","_normalizeComponentEncoding","components","protocol","decodeUnreserved","decStr","match","UNRESERVED","scheme","PCT_ENCODED","NOT_SCHEME","userinfo","NOT_USERINFO","host","NOT_HOST","path","NOT_PATH","NOT_PATH_NOSCHEME","query","NOT_QUERY","fragment","NOT_FRAGMENT","_stripLeadingZeros","_normalizeIPv4","matches","IPV4ADDRESS","address","_normalizeIPv6","IPV6ADDRESS","zone","reverse","last","first","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","fields","allZeroFields","reduce","acc","field","lastLongest","longestZeroFields","sort","a","b","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","parse","uriString","options","iri","IRI_PROTOCOL","URI_PROTOCOL","reference","port","isNaN","indexOf","schemeHandler","unicodeSupport","domainHost","_recomposeAuthority","uriTokens","_","$1","$2","RDS1","RDS2","RDS3","RDS5","removeDotSegments","im","s","Error","serialize","authority","charAt","absolutePath","resolveComponents","relative","skipNormalization","tolerant","resolve","baseURI","relativeURI","schemelessOptions","normalize","uri","equal","uriA","uriB","escapeComponent","ESCAPE","unescapeComponent","handler","secure","http","isSecure","wsComponents","resourceName","ws","O","ATEXT$$","QTEXT$$","VCHAR$$","SOME_DELIMS$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","mailtoComponents","to","unknownHeaders","headers","hfields","hfield","toAddrs","subject","body","addr","toAddr","atIdx","localPart","domain","name","URN_PARSE","urnComponents","nid","nss","urnScheme","uriComponents","UUID","uuidComponents","uuid","https","wss","mailto","urn","exports","exports","Ajv","loadSchema","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","exports","DiscrError","exports","exports","exports","module","Ajv","exports","module","fetch","fetch","Api","EmbeddingFunctionConfiguration","ObjectValue","TypeEnum","AllofValue","HnswSpace","Include","Ajv","DEFAULT_TENANT","DEFAULT_DATABASE","cohere","version","TransformersApi","voyageai","IncludeEnum"]}