{
  "version": 3,
  "sources": ["../../../helpers/compile/plugins/fill-plugin/fillers/buffer-small.ts", "../../../helpers/compile/plugins/fill-plugin/fillers/process.ts", "../../../helpers/compile/plugins/fill-plugin/fillers/perf_hooks.ts", "../../../helpers/compile/plugins/fill-plugin/fillers/function.ts", "../../../node_modules/.pnpm/decimal.js-light@2.5.1/node_modules/decimal.js-light/decimal.mjs", "../../../helpers/compile/plugins/fill-plugin/fillers/decimal-small.ts", "../../../helpers/compile/plugins/fill-plugin/fillers/crypto.ts", "fill-plugin-u4cmy:os", "../../../node_modules/.pnpm/@prisma+engines-version@7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3/node_modules/@prisma/engines-version/package.json", "../../../node_modules/.pnpm/@prisma+engines-version@7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3/node_modules/@prisma/engines-version/index.js", "../../../node_modules/.pnpm/indent-string@4.0.0/node_modules/indent-string/index.js", "../../../node_modules/.pnpm/new-github-issue-url@0.2.1/node_modules/new-github-issue-url/index.js", "../../../node_modules/.pnpm/js-levenshtein@1.1.6/node_modules/js-levenshtein/index.js", "../../ts-builders/src/TypeBuilder.ts", "../../ts-builders/src/KeyType.ts", "../../../helpers/compile/plugins/fill-plugin/fillers/events.ts", "../src/runtime/index.ts", "../src/runtime/core/extensions/index.ts", "../src/runtime/core/extensions/defineExtension.ts", "../src/runtime/core/extensions/getExtensionContext.ts", "../src/runtime/core/public/index.ts", "../src/runtime/core/public/validator.ts", "../src/runtime/core/jsonProtocol/serializeJsonQuery.ts", "../../client-common/src/index.ts", "../../client-common/src/Cache.ts", "../../client-common/src/casing.ts", "../../client-common/src/Dictionary.ts", "../../client-common/src/lazyProperty.ts", "../../client-common/src/runtimeDataModel.ts", "../../internals/src/index.ts", "../../../node_modules/.pnpm/kleur@4.1.5/node_modules/kleur/colors.mjs", "../../debug/src/index.ts", "../../get-platform/src/index.ts", "../../internals/src/utils/assertNever.ts", "../../internals/src/utils/prismaPostgres.ts", "../../internals/src/logger.ts", "../../../node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js", "../../../node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js", "../../internals/src/utils/hasOwnProperty.ts", "../../internals/src/utils/mapObjectValues.ts", "../../internals/src/utils/max.ts", "../../internals/src/utils/setClassName.ts", "../../internals/src/warnOnce.ts", "../src/runtime/utils/date.ts", "../src/runtime/utils/decimalJsLike.ts", "../src/runtime/core/errorRendering/throwValidationException.ts", "../src/runtime/utils/createErrorMessageWithContext.ts", "../../dmmf/src/index.ts", "../../dmmf/src/convert.ts", "../../dmmf/src/dmmf.ts", "../src/runtime/core/errorRendering/applyValidationError.ts", "../src/runtime/core/errorRendering/applyUnionError.ts", "../src/runtime/core/errorRendering/ObjectFieldSuggestion.ts", "../src/runtime/core/errorRendering/ObjectValue.ts", "../../ts-builders/src/index.ts", "../../ts-builders/src/Writer.ts", "../src/runtime/core/errorRendering/ArrayValue.ts", "../src/runtime/core/errorRendering/ArrayField.ts", "../src/runtime/core/errorRendering/base.ts", "../src/runtime/core/errorRendering/FormattedString.ts", "../src/runtime/core/errorRendering/Value.ts", "../src/runtime/core/errorRendering/ScalarValue.ts", "../src/runtime/core/errorRendering/SuggestionObjectValue.ts", "../src/runtime/core/errorRendering/ArgumentsRenderingTree.ts", "../src/runtime/core/model/FieldRef.ts", "../src/runtime/core/errorRendering/ObjectField.ts", "../src/runtime/core/extensions/MergedExtensionsList.ts", "../src/runtime/core/model/utils/dmmfToJSModelName.ts", "../src/runtime/core/extensions/resultUtils.ts", "../src/runtime/core/model/Param.ts", "../src/runtime/core/types/index.ts", "../src/runtime/core/types/exported/Skip.ts", "../src/runtime/core/runtimeDataModel.ts", "../src/runtime/core/types/exported/TypedSql.ts", "../src/runtime/getPrismaClient.ts", "fill-plugin-u4cmy:async_hooks", "../src/runtime/core/compositeProxy/index.ts", "../src/runtime/core/compositeProxy/addObjectProperties.ts", "../src/runtime/core/compositeProxy/addProperty.ts", "../src/runtime/core/compositeProxy/cacheProperties.ts", "../src/runtime/core/compositeProxy/createCompositeProxy.ts", "../src/runtime/core/model/utils/defaultProxyHandlers.ts", "../src/runtime/core/compositeProxy/removeProperties.ts", "../src/runtime/core/errorRendering/prettyPrintArguments.ts", "../src/runtime/core/extensions/$extends.ts", "../src/runtime/core/model/applyModelsAndClientExtensions.ts", "../src/runtime/core/model/applyModel.ts", "../src/runtime/utils/CallSite.ts", "../../../node_modules/.pnpm/stacktrace-parser@0.1.11/node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js", "../src/runtime/core/model/applyAggregates.ts", "../src/runtime/core/model/aggregates/aggregate.ts", "../src/runtime/core/model/aggregates/utils/aggregateMap.ts", "../src/runtime/core/model/aggregates/count.ts", "../src/runtime/core/model/aggregates/groupBy.ts", "../src/runtime/core/model/applyFieldsProxy.ts", "../src/runtime/core/model/applyFluent.ts", "../src/runtime/utils/deep-set.ts", "../src/runtime/core/model/utils/jsToDMMFModelName.ts", "../src/runtime/core/extensions/applyAllResultExtensions.ts", "../src/runtime/core/extensions/applyResultExtensions.ts", "../src/runtime/core/extensions/visitQueryResult.ts", "../src/runtime/core/extensions/applyQueryExtensions.ts", "../src/runtime/utils/deepCloneArgs.ts", "../src/runtime/core/types/exported/itxClientDenyList.ts", "../src/runtime/core/extensions/resolve-result-extension-context.ts", "../src/runtime/core/init/getEngineInstance.ts", "../src/runtime/core/engines/index.ts", "../src/runtime/core/engines/client/ClientEngine.ts", "../../client-engine-runtime/src/index.ts", "../../client-engine-runtime/src/batch.ts", "../../client-engine-runtime/src/json-protocol.ts", "../../client-engine-runtime/src/utils.ts", "../../client-engine-runtime/src/user-facing-error.ts", "../../driver-adapter-utils/src/index.ts", "../../driver-adapter-utils/src/error.ts", "../../driver-adapter-utils/src/const.ts", "../../client-engine-runtime/src/interpreter/data-mapper.ts", "../../client-engine-runtime/src/interpreter/query-interpreter.ts", "../../../node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs", "../../client-engine-runtime/src/sql-commenter.ts", "../../client-engine-runtime/src/tracing.ts", "../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/index.ts", "../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/span_kind.ts", "../../client-engine-runtime/src/interpreter/generators.ts", "../../../node_modules/.pnpm/@bugsnag+cuid@3.2.1/node_modules/@bugsnag/cuid/index.esm.mjs", "../../../node_modules/.pnpm/@bugsnag+cuid@3.2.1/node_modules/@bugsnag/cuid/lib/fingerprint.mjs", "../../../node_modules/.pnpm/@bugsnag+cuid@3.2.1/node_modules/@bugsnag/cuid/lib/pad.mjs", "../../../node_modules/.pnpm/@bugsnag+cuid@3.2.1/node_modules/@bugsnag/cuid/lib/cuid.mjs", "../../../node_modules/.pnpm/@bugsnag+cuid@3.2.1/node_modules/@bugsnag/cuid/lib/is-cuid.mjs", "../../../node_modules/.pnpm/@paralleldrive+cuid2@3.3.0/node_modules/@paralleldrive/cuid2/index.js", "../../../node_modules/.pnpm/@paralleldrive+cuid2@3.3.0/node_modules/@paralleldrive/cuid2/src/index.js", "../../../node_modules/.pnpm/@noble+hashes@2.2.0/node_modules/@noble/hashes/src/sha3.ts", "../../../node_modules/.pnpm/@noble+hashes@2.2.0/node_modules/@noble/hashes/src/_u64.ts", "../../../node_modules/.pnpm/@noble+hashes@2.2.0/node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/.pnpm/bignumber.js@9.3.1/node_modules/bignumber.js/bignumber.mjs", "../../../node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/index.js", "../../../node_modules/.pnpm/nanoid@5.1.16/node_modules/nanoid/url-alphabet/index.js", "../../../node_modules/.pnpm/ulid@3.0.0/node_modules/ulid/dist/node/index.js", "../../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist-node/index.js", "../../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist-node/stringify.js", "../../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist-node/rng.js", "../../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist-node/v4.js", "../../../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid/dist-node/v7.js", "../../client-engine-runtime/src/interpreter/in-memory-processing.ts", "../../client-engine-runtime/src/interpreter/render-query.ts", "../../client-engine-runtime/src/query-plan.ts", "../../client-engine-runtime/src/interpreter/serialize-sql.ts", "../../client-engine-runtime/src/interpreter/validation.ts", "../../client-engine-runtime/src/parameterization/parameterize.ts", "../../param-graph/src/index.ts", "../../param-graph/src/param-graph.ts", "../../param-graph/src/serialization.ts", "../../client-engine-runtime/src/parameterization/classify.ts", "../../client-engine-runtime/src/transaction-manager/transaction-manager.ts", "../../client-engine-runtime/src/crypto.ts", "../../client-engine-runtime/src/web-platform.ts", "../../client-engine-runtime/src/transaction-manager/transaction-manager-error.ts", "../package.json", "../src/runtime/utils/deserializeRawParameters.ts", "../src/runtime/core/engines/common/utils/getBatchRequestPayload.ts", "../src/runtime/core/engines/common/utils/getErrorMessageWithLink.ts", "../src/runtime/core/engines/common/utils/maskQuery.ts", "../src/runtime/core/engines/common/utils/normalizeLogs.ts", "../src/runtime/core/engines/common/utils/util.ts", "../src/runtime/core/engines/client/LocalExecutor.ts", "../src/runtime/core/engines/client/query-plan-cache.ts", "../src/runtime/core/engines/client/RemoteExecutor.ts", "../../../node_modules/.pnpm/cookie-es@2.0.0/node_modules/cookie-es/dist/index.mjs", "../src/runtime/core/engines/accelerate/getUrlAndApiKey.ts", "../src/runtime/core/engines/accelerate/errors/invalid-datasource-error.ts", "../src/runtime/core/engines/accelerate/errors/accelerate-error.ts", "../src/runtime/core/errors/PrismaClientError.ts", "../src/runtime/core/engines/accelerate/errors/utils/set-retryable.ts", "../src/runtime/core/engines/accelerate/HeaderBuilder.ts", "../src/runtime/core/engines/client/utils/engine-timestamp.ts", "../src/runtime/core/engines/client/WasmQueryCompilerLoader.ts", "../src/runtime/core/raw-query/rawCommandArgsMapper.ts", "../src/runtime/core/raw-query/rawQueryArgsMapper.ts", "../src/runtime/utils/mssqlPreparedStatement.ts", "../src/runtime/utils/serializeRawParameters.ts", "../src/runtime/core/request/createPrismaPromise.ts", "../src/runtime/core/tracing/TracingHelper.ts", "../../instrumentation-contract/src/index.ts", "../../instrumentation-contract/src/global.ts", "../../instrumentation-contract/package.json", "../src/runtime/core/transaction/utils/createLockCountPromise.ts", "../src/runtime/getLogLevel.ts", "../src/runtime/RequestHandler.ts", "../src/runtime/core/jsonProtocol/getBatchId.ts", "../src/runtime/core/jsonProtocol/isWrite.ts", "../src/runtime/DataLoader.ts", "../src/runtime/utils/deserializeRawResults.ts", "../src/runtime/utils/modelNameForTable.ts", "../src/runtime/utils/clientVersion.ts", "../src/runtime/utils/validatePrismaClientOptions.ts", "../src/runtime/core/errors/PrismaClientConstructorValidationError.ts", "../src/runtime/utils/waitForBatch.ts", "../src/runtime/strictEnum.ts", "../src/runtime/utils/getRuntime.ts"],
  "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\nexport interface BufferClass {\n  readBigInt64BE(offset: number): bigint\n  readBigInt64BE(offset: number): bigint\n  readBigInt64LE(offset: number): bigint\n  readBigInt64LE(offset: number): bigint\n  readBigUint64BE(offset: number): bigint\n  readBigUInt64BE(offset: number): bigint\n  readBigUint64LE(offset: number): bigint\n  readBigUInt64LE(offset: number): bigint\n  readDoubleBE(offset: number): number\n  readDoubleLE(offset: number): number\n  readFloatBE(offset: number): number\n  readFloatLE(offset: number): number\n  readInt16BE(offset: number): number\n  readInt16LE(offset: number): number\n  readInt32BE(offset: number): number\n  readInt32LE(offset: number): number\n  readInt8(offset: number): number\n  readIntBE(offset: number, byteLength: number): number\n  readIntLE(offset: number, byteLength: number): number\n  readUint16BE(offset: number): number\n  readUInt16BE(offset: number): number\n  readUint16LE(offset: number): number\n  readUInt16LE(offset: number): number\n  readUint32BE(offset: number): number\n  readUInt32BE(offset: number): number\n  readUint32LE(offset: number): number\n  readUInt32LE(offset: number): number\n  readUint8(offset: number): number\n  readUInt8(offset: number): number\n  readUInt8(offset: number): number\n  readUintBE(offset: number, byteLength: number): number\n  readUIntBE(offset: number, byteLength: number): number\n  readUintLE(offset: number, byteLength: number): number\n  readUIntLE(offset: number, byteLength: number): number\n  writeBigInt64BE(value: bigint, offset: number): number\n  writeBigInt64BE(value: bigint, offset: number): number\n  writeBigInt64LE(value: bigint, offset: number): number\n  writeBigInt64LE(value: bigint, offset: number): number\n  writeBigUint64BE(value: bigint, offset: number): number\n  writeBigUInt64BE(value: bigint, offset: number): number\n  writeBigUint64LE(value: bigint, offset: number): number\n  writeBigUInt64LE(value: bigint, offset: number): number\n  writeDoubleBE(value: number, offset: number): number\n  writeDoubleLE(value: number, offset: number): number\n  writeFloatBE(value: number, offset: number): number\n  writeFloatLE(value: number, offset: number): number\n  writeInt16BE(value: number, offset: number): number\n  writeInt16LE(value: number, offset: number): number\n  writeInt32BE(value: number, offset: number): number\n  writeInt32LE(value: number, offset: number): number\n  writeInt8(value: number, offset: number): number\n  writeIntBE(value: number, offset: number, byteLength: number): number\n  writeIntLE(value: number, offset: number, byteLength: number): number\n  writeUint16BE(value: number, offset: number): number\n  writeUInt16BE(value: number, offset: number): number\n  writeUint16LE(value: number, offset: number): number\n  writeUInt16LE(value: number, offset: number): number\n  writeUint32BE(value: number, offset: number): number\n  writeUInt32BE(value: number, offset: number): number\n  writeUint32LE(value: number, offset: number): number\n  writeUInt32LE(value: number, offset: number): number\n  writeUint8(value: number, offset: number): number\n  writeUInt8(value: number, offset: number): number\n  writeUintBE(value: number, offset: number, byteLength: number): number\n  writeUIntBE(value: number, offset: number, byteLength: number): number\n  writeUintLE(value: number, offset: number, byteLength: number): number\n  writeUIntLE(value: number, offset: number, byteLength: number): number\n}\n\nexport class BufferClass extends Uint8Array /* implements NodeBuffer */ {\n  readonly _isBuffer = true\n\n  get offset() {\n    return this.byteOffset\n  }\n\n  static alloc(size: number, fill: string | number | Uint8Array = 0, encoding: Encoding = 'utf8') {\n    assertString(encoding, 'encoding')\n\n    return BufferClass.allocUnsafe(size).fill(fill, encoding)\n  }\n\n  static allocUnsafe(size: number) {\n    return BufferClass.from(size)\n  }\n\n  static allocUnsafeSlow(size: number) {\n    return BufferClass.from(size)\n  }\n\n  static isBuffer(arg: any): arg is BufferClass {\n    return arg && !!arg._isBuffer\n  }\n\n  static byteLength(string: unknown, encoding: Encoding = 'utf8') {\n    if (typeof string === 'string') return stringToBuffer(string, encoding).byteLength\n    if (string && string['byteLength']) return string['byteLength']\n\n    const e = new TypeError('The \"string\" argument must be of type string or an instance of Buffer or ArrayBuffer.')\n    e['code'] = 'ERR_INVALID_ARG_TYPE'\n    throw e\n  }\n\n  static isEncoding(encoding: string): encoding is Encoding {\n    return Encodings.includes(encoding as any)\n  }\n\n  static compare(buff1: Uint8Array, buff2: Uint8Array) {\n    assertUint8Array(buff1, 'buff1')\n    assertUint8Array(buff2, 'buff2')\n\n    for (let i = 0; i < buff1.length; i++) {\n      if (buff1[i] < buff2[i]) return -1\n      if (buff1[i] > buff2[i]) return 1\n    }\n\n    return buff1.length === buff2.length ? 0 : buff1.length > buff2.length ? 1 : -1\n  }\n\n  static from(value: unknown, encoding: any = 'utf8'): BufferClass {\n    if (value && typeof value === 'object' && value['type'] === 'Buffer') {\n      return new BufferClass(value['data'])\n    }\n\n    if (typeof value === 'number') {\n      return new BufferClass(new Uint8Array(value))\n    }\n\n    if (typeof value === 'string') {\n      return stringToBuffer(value, encoding)\n    }\n\n    if (ArrayBuffer.isView(value)) {\n      const { byteOffset, byteLength, buffer } = value\n\n      if ('map' in value && typeof value.map === 'function') {\n        return new BufferClass(\n          value.map((v) => v % 256),\n          byteOffset,\n          byteLength,\n        )\n      }\n\n      return new BufferClass(buffer, byteOffset, byteLength)\n    }\n\n    if (value && typeof value === 'object' && ('length' in value || 'byteLength' in value || 'buffer' in value)) {\n      return new BufferClass(value as ArrayLike<number>)\n    }\n\n    throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n  }\n\n  static concat(list: readonly Uint8Array[], totalLength?: number) {\n    if (list.length === 0) return BufferClass.alloc(0)\n\n    const concat = ([] as number[]).concat(...list.map((item) => [...item]))\n    const result = BufferClass.alloc(totalLength !== undefined ? totalLength : concat.length)\n\n    result.set(totalLength !== undefined ? concat.slice(0, totalLength) : concat)\n\n    return result\n  }\n\n  slice(start = 0, end = this.length) {\n    return this.subarray(start, end)\n  }\n\n  subarray(start = 0, end = this.length) {\n    return Object.setPrototypeOf(super.subarray(start, end), BufferClass.prototype) as BufferClass\n  }\n\n  reverse() {\n    super.reverse()\n\n    return this\n  }\n\n  readIntBE(offset: number, byteLength: number) {\n    assertNumber(offset, 'offset')\n    assertInteger(offset, 'offset')\n    assertUnsigned(offset, 'offset', this.length - 1)\n    assertNumber(byteLength, 'byteLength')\n    assertInteger(byteLength, 'byteLength')\n\n    const view = new DataView(this.buffer, offset, byteLength)\n    let val = 0\n    for (let i = 0; i < byteLength; i++) {\n      val = val * 0x100 + view.getUint8(i)\n    }\n\n    if (view.getUint8(0) & 0x80) {\n      val -= Math.pow(0x100, byteLength)\n    }\n\n    return val\n  }\n\n  readIntLE(offset: number, byteLength: number) {\n    assertNumber(offset, 'offset')\n    assertInteger(offset, 'offset')\n    assertUnsigned(offset, 'offset', this.length - 1)\n    assertNumber(byteLength, 'byteLength')\n    assertInteger(byteLength, 'byteLength')\n\n    const view = new DataView(this.buffer, offset, byteLength)\n    let val = 0\n    for (let i = 0; i < byteLength; i++) {\n      val += view.getUint8(i) * Math.pow(0x100, i)\n    }\n\n    if (view.getUint8(byteLength - 1) & 0x80) {\n      val -= Math.pow(0x100, byteLength)\n    }\n\n    return val\n  }\n\n  readUIntBE(offset: number, byteLength: number) {\n    assertNumber(offset, 'offset')\n    assertInteger(offset, 'offset')\n    assertUnsigned(offset, 'offset', this.length - 1)\n    assertNumber(byteLength, 'byteLength')\n    assertInteger(byteLength, 'byteLength')\n\n    const view = new DataView(this.buffer, offset, byteLength)\n    let val = 0\n    for (let i = 0; i < byteLength; i++) {\n      val = val * 0x100 + view.getUint8(i)\n    }\n\n    return val\n  }\n\n  readUintBE(offset: number, byteLength: number) {\n    return this.readUIntBE(offset, byteLength)\n  }\n\n  readUIntLE(offset: number, byteLength: number) {\n    assertNumber(offset, 'offset')\n    assertInteger(offset, 'offset')\n    assertUnsigned(offset, 'offset', this.length - 1)\n    assertNumber(byteLength, 'byteLength')\n    assertInteger(byteLength, 'byteLength')\n\n    const view = new DataView(this.buffer, offset, byteLength)\n    let val = 0\n    for (let i = 0; i < byteLength; i++) {\n      val += view.getUint8(i) * Math.pow(0x100, i)\n    }\n\n    return val\n  }\n\n  readUintLE(offset: number, byteLength: number) {\n    return this.readUIntLE(offset, byteLength)\n  }\n\n  writeIntBE(value: number, offset: number, byteLength: number) {\n    value = value < 0 ? value + Math.pow(0x100, byteLength) : value\n    return this.writeUIntBE(value, offset, byteLength)\n  }\n\n  writeIntLE(value: number, offset: number, byteLength: number) {\n    value = value < 0 ? value + Math.pow(0x100, byteLength) : value\n    return this.writeUIntLE(value, offset, byteLength)\n  }\n\n  writeUIntBE(value: number, offset: number, byteLength: number) {\n    assertNumber(offset, 'offset')\n    assertInteger(offset, 'offset')\n    assertUnsigned(offset, 'offset', this.length - 1)\n    assertNumber(byteLength, 'byteLength')\n    assertInteger(byteLength, 'byteLength')\n\n    const view = new DataView(this.buffer, offset, byteLength)\n    for (let i = byteLength - 1; i >= 0; i--) {\n      view.setUint8(i, value & 0xff)\n      value = value / 0x100\n    }\n\n    return offset + byteLength\n  }\n\n  writeUintBE(value: number, offset: number, byteLength: number) {\n    return this.writeUIntBE(value, offset, byteLength)\n  }\n\n  writeUIntLE(value: number, offset: number, byteLength: number) {\n    assertNumber(offset, 'offset')\n    assertInteger(offset, 'offset')\n    assertUnsigned(offset, 'offset', this.length - 1)\n    assertNumber(byteLength, 'byteLength')\n    assertInteger(byteLength, 'byteLength')\n\n    const view = new DataView(this.buffer, offset, byteLength)\n    for (let i = 0; i < byteLength; i++) {\n      view.setUint8(i, value & 0xff) // bitwise 0xff is to get the last 8 bits\n      value = value / 0x100 // shift 8 bits to the right to iterate\n    }\n\n    return offset + byteLength\n  }\n\n  writeUintLE(value: number, offset: number, byteLength: number) {\n    return this.writeUIntLE(value, offset, byteLength)\n  }\n\n  toJSON() {\n    return { type: 'Buffer', data: Array.from(this) } as const\n  }\n\n  swap16() {\n    const buffer = new DataView(this.buffer, this.byteOffset, this.byteLength)\n    for (let i = 0; i < this.length; i += 2) {\n      buffer.setUint16(i, buffer.getUint16(i, true), false)\n    }\n    return this\n  }\n\n  swap32() {\n    const buffer = new DataView(this.buffer, this.byteOffset, this.byteLength)\n    for (let i = 0; i < this.length; i += 4) {\n      buffer.setUint32(i, buffer.getUint32(i, true), false)\n    }\n    return this\n  }\n\n  swap64() {\n    const view = new DataView(this.buffer, this.byteOffset, this.byteLength)\n    for (let i = 0; i < this.length; i += 8) {\n      view.setBigUint64(i, view.getBigUint64(i, true), false)\n    }\n    return this\n  }\n\n  compare(target: Uint8Array, targetStart = 0, targetEnd = target.length, sourceStart = 0, sourceEnd = this.length) {\n    assertUint8Array(target, 'target')\n    assertNumber(targetStart, 'targetStart')\n    assertNumber(targetEnd, 'targetEnd')\n    assertNumber(sourceStart, 'sourceStart')\n    assertNumber(sourceEnd, 'sourceEnd')\n    assertUnsigned(targetStart, 'targetStart')\n    assertUnsigned(targetEnd, 'targetEnd', target.length)\n    assertUnsigned(sourceStart, 'sourceStart')\n    assertUnsigned(sourceEnd, 'sourceEnd', this.length)\n\n    return BufferClass.compare(this.slice(sourceStart, sourceEnd), target.slice(targetStart, targetEnd))\n  }\n\n  equals(otherBuffer: Uint8Array) {\n    assertUint8Array(otherBuffer, 'otherBuffer')\n\n    return this.length === otherBuffer.length && this.every((v, i) => v === otherBuffer[i])\n  }\n\n  copy(target: Uint8Array, targetStart = 0, sourceStart = 0, sourceEnd = this.length) {\n    assertUnsigned(targetStart, 'targetStart')\n    assertUnsigned(sourceStart, 'sourceStart', this.length)\n    assertUnsigned(sourceEnd, 'sourceEnd')\n\n    targetStart >>>= 0\n    sourceStart >>>= 0\n    sourceEnd >>>= 0\n\n    let copiedBytes = 0\n    while (sourceStart < sourceEnd) {\n      if (this[sourceStart] === undefined) break\n      if (target[targetStart] === undefined) break\n\n      target[targetStart] = this[sourceStart]\n      copiedBytes++\n      sourceStart++\n      targetStart++\n    }\n\n    return copiedBytes\n  }\n\n  write(string: string, encoding?: Encoding): number\n  write(string: string, offset: number, encoding?: Encoding): number\n  write(string: string, offset: number, length: number, encoding?: Encoding): number\n  write(string: string, offsetEnc?: number | Encoding, lengthEnc?: number | Encoding, encoding: Encoding = 'utf8') {\n    const offset = typeof offsetEnc === 'string' ? 0 : (offsetEnc ?? 0)\n    let length = typeof lengthEnc === 'string' ? this.length - offset : (lengthEnc ?? this.length - offset)\n    encoding = typeof offsetEnc === 'string' ? offsetEnc : typeof lengthEnc === 'string' ? lengthEnc : encoding\n\n    assertNumber(offset, 'offset')\n    assertNumber(length, 'length')\n    assertUnsigned(offset, 'offset', this.length)\n    assertUnsigned(length, 'length', this.length)\n\n    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n      length = length - (length % 2)\n    }\n\n    return stringToBuffer(string, encoding).copy(this, offset, 0, length)\n  }\n\n  fill(\n    value: string | number | Uint8Array = 0,\n    offsetEnc: number | Encoding = 0,\n    endEnc: number | Encoding = this.length,\n    encoding: Encoding = 'utf-8',\n  ) {\n    const offset = typeof offsetEnc === 'string' ? 0 : offsetEnc\n    const end = typeof endEnc === 'string' ? this.length : endEnc\n    encoding = typeof offsetEnc === 'string' ? offsetEnc : typeof endEnc === 'string' ? endEnc : encoding\n    value = BufferClass.from(typeof value === 'number' ? [value] : (value ?? []), encoding)\n\n    assertString(encoding, 'encoding')\n    assertUnsigned(offset, 'offset', this.length)\n    assertUnsigned(end, 'end', this.length)\n\n    if (value.length !== 0) {\n      for (let i = offset; i < end; i += value.length) {\n        super.set(value.slice(0, value.length + i >= this.length ? this.length - i : value.length), i)\n      }\n    }\n\n    return this\n  }\n\n  includes(value: string | number | Uint8Array, byteOffset: number | null = null, encoding: Encoding = 'utf-8') {\n    return this.indexOf(value, byteOffset, encoding) !== -1\n  }\n\n  lastIndexOf(\n    value: string | number | Uint8Array,\n    byteOffsetOrEncoding: number | Encoding | null = null,\n    encoding: Encoding = 'utf-8',\n  ) {\n    return this.indexOf(value, byteOffsetOrEncoding, encoding, true)\n  }\n\n  indexOf(\n    value: string | number | Uint8Array,\n    byteOffsetOrEncoding: number | Encoding | null = null,\n    encoding: Encoding = 'utf-8',\n    lastIndexOf = false,\n  ) {\n    const method = lastIndexOf ? this.findLastIndex.bind(this) : this.findIndex.bind(this)\n    encoding = typeof byteOffsetOrEncoding === 'string' ? byteOffsetOrEncoding : encoding\n    const toSearch = BufferClass.from(typeof value === 'number' ? [value] : value, encoding)\n    let byteOffset = typeof byteOffsetOrEncoding === 'string' ? 0 : byteOffsetOrEncoding\n    byteOffset = typeof byteOffsetOrEncoding === 'number' ? byteOffset : null\n    byteOffset = Number.isNaN(byteOffset) ? null : byteOffset\n    byteOffset ??= lastIndexOf ? this.length : 0\n    byteOffset = byteOffset < 0 ? this.length + byteOffset : byteOffset\n\n    if (toSearch.length === 0 && lastIndexOf === false) {\n      return byteOffset >= this.length ? this.length : byteOffset\n    }\n    if (toSearch.length === 0 && lastIndexOf === true) {\n      return (byteOffset >= this.length ? this.length : byteOffset) || this.length\n    }\n\n    return method((_, i) => {\n      const searchIf = lastIndexOf ? i <= byteOffset! : i >= byteOffset!\n      return searchIf && this[i] === toSearch[0] && toSearch.every((val, j) => this[i + j] === val)\n    })\n  }\n\n  toString(encoding: Encoding = 'utf8', start = 0, end = this.length) {\n    start = start < 0 ? 0 : start\n    encoding = encoding.toString().toLowerCase() as Encoding\n\n    if (end <= 0) return ''\n\n    if (encoding === 'utf8' || encoding === 'utf-8') {\n      return decoder.decode(this.slice(start, end))\n    }\n    if (encoding === 'base64' || encoding === 'base64url') {\n      const string = btoa(this.reduce((s, v) => s + c2s(v), ''))\n\n      if (encoding === 'base64url') {\n        return string.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n      }\n\n      return string\n    }\n    if (encoding === 'binary' || encoding === 'ascii' || encoding === 'latin1' || encoding === 'latin-1') {\n      return this.slice(start, end).reduce((s, v) => s + c2s(v & (encoding === 'ascii' ? 0x7f : 0xff)), '')\n    }\n    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n      const view = new DataView(this.buffer.slice(start, end))\n      return Array.from({ length: view.byteLength / 2 }, (_, i) => {\n        // if the byte length is odd, the last character will be ignored\n        return i * 2 + 1 < view.byteLength ? c2s(view.getUint16(i * 2, true)) : ''\n      }).join('')\n    }\n    if (encoding === 'hex') {\n      return this.slice(start, end).reduce((s, v) => s + v.toString(16).padStart(2, '0'), '')\n    }\n\n    bufferPolyfillDoesNotImplement(`encoding \"${encoding}\"`)\n  }\n\n  toLocaleString() {\n    return this.toString()\n  }\n\n  inspect() {\n    const hex = this.toString('hex')\n    const byteHex = hex.match(/.{1,2}/g)!.join(' ')\n\n    return `<Buffer ${byteHex}>`\n  }\n}\n\nfunction stringToBuffer(value: string, encoding: string) {\n  encoding = encoding.toLowerCase() as Encoding\n\n  if (encoding === 'utf8' || encoding === 'utf-8') {\n    return new BufferClass(encoder.encode(value))\n  }\n  if (encoding === 'base64' || encoding === 'base64url') {\n    value = value.replace(/-/g, '+').replace(/_/g, '/')\n    value = value.replace(/[^A-Za-z0-9+/]/g, '')\n\n    return new BufferClass([...atob(value)].map((v) => v.charCodeAt(0)))\n  }\n  if (encoding === 'binary' || encoding === 'ascii' || encoding === 'latin1' || encoding === 'latin-1') {\n    return new BufferClass([...value].map((v) => v.charCodeAt(0)))\n  }\n  if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n    const buffer = new BufferClass(value.length * 2)\n    const view = new DataView(buffer.buffer)\n    for (let i = 0; i < value.length; i++) {\n      view.setUint16(i * 2, value.charCodeAt(i), true)\n    }\n    return buffer\n  }\n  if (encoding === 'hex') {\n    const bytes = new BufferClass(value.length / 2)\n    for (let byteIndex = 0, i = 0; i < value.length; i += 2, byteIndex++) {\n      bytes[byteIndex] = parseInt(value.slice(i, i + 2), 16)\n    }\n\n    return bytes\n  }\n\n  bufferPolyfillDoesNotImplement(`encoding \"${encoding}\"`)\n}\n\nfunction initReadMethods(prototype: BufferClass) {\n  const dataViewProtoProps = Object.getOwnPropertyNames(DataView.prototype)\n  const dataViewMethods = dataViewProtoProps.filter((m) => m.startsWith('get') || m.startsWith('set'))\n  const bufferBaseMethods = dataViewMethods.map((m) => m.replace('get', 'read').replace('set', 'write'))\n\n  const genericReadMethod = (i: number, littleEndian: boolean) => {\n    return function (this: BufferClass, offset = 0) {\n      assertNumber(offset, 'offset')\n      assertInteger(offset, 'offset')\n      assertUnsigned(offset, 'offset', this.length - 1)\n      return new DataView(this.buffer)[dataViewMethods[i]](offset, littleEndian)\n    }\n  }\n\n  const genericWriteMethod = (i: number, littleEndian: boolean) => {\n    return function (this: BufferClass, value: any, offset = 0) {\n      const boundKey = dataViewMethods[i].match(/set(\\w+\\d+)/)![1].toLowerCase()\n      const bound = bounds[boundKey as keyof typeof bounds]\n\n      assertNumber(offset, 'offset')\n      assertInteger(offset, 'offset')\n      assertUnsigned(offset, 'offset', this.length - 1)\n      assertBounds(value, 'value', bound[0], bound[1])\n      new DataView(this.buffer)[dataViewMethods[i]](offset, value, littleEndian)\n      return offset + parseInt(dataViewMethods[i].match(/\\d+/)![0]) / 8\n    }\n  }\n\n  const createAlias = (methods: string[]) => {\n    methods.forEach((method) => {\n      if (method.includes('Uint')) prototype[method.replace('Uint', 'UInt')] = prototype[method]\n      if (method.includes('Float64')) prototype[method.replace('Float64', 'Double')] = prototype[method]\n      if (method.includes('Float32')) prototype[method.replace('Float32', 'Float')] = prototype[method]\n    })\n  }\n\n  bufferBaseMethods.forEach((method, i) => {\n    if (method.startsWith('read')) {\n      prototype[method] = genericReadMethod(i, false)\n      prototype[method + 'LE'] = genericReadMethod(i, true)\n      prototype[method + 'BE'] = genericReadMethod(i, false)\n    }\n    if (method.startsWith('write')) {\n      prototype[method] = genericWriteMethod(i, false)\n      prototype[method + 'LE'] = genericWriteMethod(i, true)\n      prototype[method + 'BE'] = genericWriteMethod(i, false)\n    }\n    createAlias([method, method + 'LE', method + 'BE'])\n  })\n}\n\nfunction bufferPolyfillDoesNotImplement(message: string): never {\n  throw new Error(`Buffer polyfill does not implement \"${message}\"`)\n}\n\nfunction assertUint8Array(value: any, argName: string): asserts value is Uint8Array {\n  if (!(value instanceof Uint8Array)) {\n    throw new TypeError(`The \"${argName}\" argument must be an instance of Buffer or Uint8Array`)\n  }\n}\n\nfunction assertUnsigned(value: number, argName: string, maxValue = MAX_UNSIGNED_32_BIT + 1) {\n  if (value < 0 || value > maxValue) {\n    const e = new RangeError(\n      `The value of \"${argName}\" is out of range. It must be >= 0 && <= ${maxValue}. Received ${value}`,\n    )\n    e['code'] = 'ERR_OUT_OF_RANGE'\n    throw e\n  }\n}\n\nfunction assertNumber(value: any, argName: string): asserts value is number {\n  if (typeof value !== 'number') {\n    const e = new TypeError(`The \"${argName}\" argument must be of type number. Received type ${typeof value}.`)\n    e['code'] = 'ERR_INVALID_ARG_TYPE'\n    throw e\n  }\n}\n\nfunction assertInteger(value: any, argName: string): asserts value is number {\n  if (!Number.isInteger(value) || Number.isNaN(value)) {\n    const e = new RangeError(`The value of \"${argName}\" is out of range. It must be an integer. Received ${value}`)\n    e['code'] = 'ERR_OUT_OF_RANGE'\n    throw e\n  }\n}\n\nfunction assertBounds(value: number, argName: string, min: any, max: any) {\n  if (value < min || value > max) {\n    const e = new RangeError(\n      `The value of \"${argName}\" is out of range. It must be >= ${min} and <= ${max}. Received ${value}`,\n    )\n    e['code'] = 'ERR_OUT_OF_RANGE'\n    throw e\n  }\n}\n\nfunction assertString(value: any, argName: string): asserts value is string {\n  if (typeof value !== 'string') {\n    const e = new TypeError(`The \"${argName}\" argument must be of type string. Received type ${typeof value}`)\n    e['code'] = 'ERR_INVALID_ARG_TYPE'\n    throw e\n  }\n}\n\nconst bounds = {\n  int8: [-0x80, 0x7f],\n  int16: [-0x8000, 0x7fff],\n  int32: [-0x80000000, 0x7fffffff],\n  uint8: [0, 0xff],\n  uint16: [0, 0xffff],\n  uint32: [0, 0xffffffff],\n  float32: [-Infinity, Infinity],\n  float64: [-Infinity, Infinity],\n  bigint64: [-0x8000000000000000n, 0x7fffffffffffffffn],\n  biguint64: [0n, 0xffffffffffffffffn],\n} as const\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nexport type Encoding = (typeof Encodings)[number]\n\nconst Encodings = [\n  'utf8',\n  'utf-8',\n  'hex',\n  'base64',\n  'ascii',\n  'binary',\n  'base64url',\n  'ucs2',\n  'ucs-2',\n  'utf16le',\n  'utf-16le',\n  'latin1',\n  'latin-1',\n] as const\n\nconst MAX_UNSIGNED_32_BIT = 0xffffffff\n\ninitReadMethods(BufferClass.prototype)\n\nfunction $Buffer(value: unknown, encoding: any = 'utf8') {\n  return BufferClass.from(value, encoding)\n}\n\nexport const Buffer = new Proxy($Buffer, {\n  construct(_, [value, encoding]) {\n    return BufferClass.from(value, encoding)\n  },\n  get(_, prop) {\n    return BufferClass[prop]\n  },\n}) as typeof $Buffer & typeof BufferClass\n\nconst c2s = String.fromCodePoint\n\nexport default Buffer\n", "export const process: Partial<NodeJS.Process> = {\n  nextTick: (fn: Function, ...args: unknown[]) => {\n    setTimeout(() => {\n      fn(...args)\n    }, 0)\n  },\n  env: {},\n  version: '',\n  cwd: () => '/',\n  stderr: {} as any,\n  argv: ['/bin/node'],\n  pid: 10000,\n}\n\nexport const { cwd } = process\nexport default process\n", "const performance =\n  globalThis['performance'] ??\n  (() => {\n    const origin = Date.now()\n    return {\n      now: () => Date.now() - origin,\n    }\n  })()\n\nexport { performance }\nexport default { performance }\n", "export const fn = () => {}\n\nfn.prototype = fn\n", "/*\r\n *  decimal.js-light v2.5.1\r\n *  An arbitrary-precision Decimal type for JavaScript.\r\n *  https://github.com/MikeMcl/decimal.js-light\r\n *  Copyright (c) 2020 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *  MIT Expat Licence\r\n */\r\n\r\n\r\n// ------------------------------------  EDITABLE DEFAULTS  ------------------------------------- //\r\n\r\n\r\n// The limit on the value of `precision`, and on the value of the first argument to\r\n// `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\nvar MAX_DIGITS = 1e9,                        // 0 to 1e9\r\n\r\n\r\n  // The initial configuration properties of the Decimal constructor.\r\n  defaults = {\r\n\r\n    // These values must be integers within the stated ranges (inclusive).\r\n    // Most of these values can be changed during run-time using `Decimal.config`.\r\n\r\n    // The maximum number of significant digits of the result of a calculation or base conversion.\r\n    // E.g. `Decimal.config({ precision: 20 });`\r\n    precision: 20,                         // 1 to MAX_DIGITS\r\n\r\n    // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`,\r\n    // `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n    //\r\n    // ROUND_UP         0 Away from zero.\r\n    // ROUND_DOWN       1 Towards zero.\r\n    // ROUND_CEIL       2 Towards +Infinity.\r\n    // ROUND_FLOOR      3 Towards -Infinity.\r\n    // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n    // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n    // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n    // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n    // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n    //\r\n    // E.g.\r\n    // `Decimal.rounding = 4;`\r\n    // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n    rounding: 4,                           // 0 to 8\r\n\r\n    // The exponent value at and beneath which `toString` returns exponential notation.\r\n    // JavaScript numbers: -7\r\n    toExpNeg: -7,                          // 0 to -MAX_E\r\n\r\n    // The exponent value at and above which `toString` returns exponential notation.\r\n    // JavaScript numbers: 21\r\n    toExpPos:  21,                         // 0 to MAX_E\r\n\r\n    // The natural logarithm of 10.\r\n    // 115 digits\r\n    LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'\r\n  },\r\n\r\n\r\n// ------------------------------------ END OF EDITABLE DEFAULTS -------------------------------- //\r\n\r\n\r\n  Decimal,\r\n  external = true,\r\n\r\n  decimalError = '[DecimalError] ',\r\n  invalidArgument = decimalError + 'Invalid argument: ',\r\n  exponentOutOfRange = decimalError + 'Exponent out of range: ',\r\n\r\n  mathfloor = Math.floor,\r\n  mathpow = Math.pow,\r\n\r\n  isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n  ONE,\r\n  BASE = 1e7,\r\n  LOG_BASE = 7,\r\n  MAX_SAFE_INTEGER = 9007199254740991,\r\n  MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE),    // 1286742750677284\r\n\r\n  // Decimal.prototype object\r\n  P = {};\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n *  absoluteValue                       abs\r\n *  comparedTo                          cmp\r\n *  decimalPlaces                       dp\r\n *  dividedBy                           div\r\n *  dividedToIntegerBy                  idiv\r\n *  equals                              eq\r\n *  exponent\r\n *  greaterThan                         gt\r\n *  greaterThanOrEqualTo                gte\r\n *  isInteger                           isint\r\n *  isNegative                          isneg\r\n *  isPositive                          ispos\r\n *  isZero\r\n *  lessThan                            lt\r\n *  lessThanOrEqualTo                   lte\r\n *  logarithm                           log\r\n *  minus                               sub\r\n *  modulo                              mod\r\n *  naturalExponential                  exp\r\n *  naturalLogarithm                    ln\r\n *  negated                             neg\r\n *  plus                                add\r\n *  precision                           sd\r\n *  squareRoot                          sqrt\r\n *  times                               mul\r\n *  toDecimalPlaces                     todp\r\n *  toExponential\r\n *  toFixed\r\n *  toInteger                           toint\r\n *  toNumber\r\n *  toPower                             pow\r\n *  toPrecision\r\n *  toSignificantDigits                 tosd\r\n *  toString\r\n *  valueOf                             val\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n  var x = new this.constructor(this);\r\n  if (x.s) x.s = 1;\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n *   1    if the value of this Decimal is greater than the value of `y`,\r\n *  -1    if the value of this Decimal is less than the value of `y`,\r\n *   0    if they have the same value\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n  var i, j, xdL, ydL,\r\n    x = this;\r\n\r\n  y = new x.constructor(y);\r\n\r\n  // Signs differ?\r\n  if (x.s !== y.s) return x.s || -y.s;\r\n\r\n  // Compare exponents.\r\n  if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;\r\n\r\n  xdL = x.d.length;\r\n  ydL = y.d.length;\r\n\r\n  // Compare digit by digit.\r\n  for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n    if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;\r\n  }\r\n\r\n  // Compare lengths.\r\n  return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n  var x = this,\r\n    w = x.d.length - 1,\r\n    dp = (w - x.e) * LOG_BASE;\r\n\r\n  // Subtract the number of trailing zeros of the last word.\r\n  w = x.d[w];\r\n  if (w) for (; w % 10 == 0; w /= 10) dp--;\r\n\r\n  return dp < 0 ? 0 : dp;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n  return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, truncated to `precision` significant digits.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.idiv = function (y) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n  return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n  return !this.cmp(y);\r\n};\r\n\r\n\r\n/*\r\n * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).\r\n *\r\n */\r\nP.exponent = function () {\r\n  return getBase10Exponent(this);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.gt = function (y) {\r\n  return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n  return this.cmp(y) >= 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isint = function () {\r\n  return this.e > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isneg = function () {\r\n  return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.ispos = function () {\r\n  return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n  return this.s === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.lt = function (y) {\r\n  return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n  return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, truncated to\r\n * `precision` significant digits.\r\n *\r\n * If no base is specified, return log[10](x).\r\n *\r\n * log[base](x) = ln(x) / ln(base)\r\n *\r\n * The maximum error of the result is 1 ulp (unit in the last place).\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n  var r,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision,\r\n    wpr = pr + 5;\r\n\r\n  // Default base is 10.\r\n  if (base === void 0) {\r\n    base = new Ctor(10);\r\n  } else {\r\n    base = new Ctor(base);\r\n\r\n    // log[-b](x) = NaN\r\n    // log[0](x)  = NaN\r\n    // log[1](x)  = NaN\r\n    if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');\r\n  }\r\n\r\n  // log[b](-x) = NaN\r\n  // log[b](0) = -Infinity\r\n  if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n  // log[b](1) = 0\r\n  if (x.eq(ONE)) return new Ctor(0);\r\n\r\n  external = false;\r\n  r = divide(ln(x, wpr), ln(base, wpr), wpr);\r\n  external = true;\r\n\r\n  return round(r, pr);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n  var x = this;\r\n  y = new x.constructor(y);\r\n  return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n  var q,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // x % 0 = NaN\r\n  if (!y.s) throw Error(decimalError + 'NaN');\r\n\r\n  // Return x if x is 0.\r\n  if (!x.s) return round(new Ctor(x), pr);\r\n\r\n  // Prevent rounding of intermediate calculations.\r\n  external = false;\r\n  q = divide(x, y, 0, 1).times(y);\r\n  external = true;\r\n\r\n  return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n  return exp(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * truncated to `precision` significant digits.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n  return ln(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n  var x = new this.constructor(this);\r\n  x.s = -x.s || 0;\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n  var x = this;\r\n  y = new x.constructor(y);\r\n  return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n  var e, sd, w,\r\n    x = this;\r\n\r\n  if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n  e = getBase10Exponent(x) + 1;\r\n  w = x.d.length - 1;\r\n  sd = w * LOG_BASE + 1;\r\n  w = x.d[w];\r\n\r\n  // If non-zero...\r\n  if (w) {\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    for (; w % 10 == 0; w /= 10) sd--;\r\n\r\n    // Add the number of digits of the first word.\r\n    for (w = x.d[0]; w >= 10; w /= 10) sd++;\r\n  }\r\n\r\n  return z && e > sd ? e : sd;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision`\r\n * significant digits.\r\n *\r\n */\r\nP.squareRoot = P.sqrt = function () {\r\n  var e, n, pr, r, s, t, wpr,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  // Negative or zero?\r\n  if (x.s < 1) {\r\n    if (!x.s) return new Ctor(0);\r\n\r\n    // sqrt(-x) = NaN\r\n    throw Error(decimalError + 'NaN');\r\n  }\r\n\r\n  e = getBase10Exponent(x);\r\n  external = false;\r\n\r\n  // Initial estimate.\r\n  s = Math.sqrt(+x);\r\n\r\n  // Math.sqrt underflow/overflow?\r\n  // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n  if (s == 0 || s == 1 / 0) {\r\n    n = digitsToString(x.d);\r\n    if ((n.length + e) % 2 == 0) n += '0';\r\n    s = Math.sqrt(n);\r\n    e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n    if (s == 1 / 0) {\r\n      n = '5e' + e;\r\n    } else {\r\n      n = s.toExponential();\r\n      n = n.slice(0, n.indexOf('e') + 1) + e;\r\n    }\r\n\r\n    r = new Ctor(n);\r\n  } else {\r\n    r = new Ctor(s.toString());\r\n  }\r\n\r\n  pr = Ctor.precision;\r\n  s = wpr = pr + 3;\r\n\r\n  // Newton-Raphson iteration.\r\n  for (;;) {\r\n    t = r;\r\n    r = t.plus(divide(x, t, wpr + 2)).times(0.5);\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {\r\n      n = n.slice(wpr - 3, wpr + 1);\r\n\r\n      // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n      // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n      if (s == wpr && n == '4999') {\r\n\r\n        // On the first iteration only, check to see if rounding up gives the exact result as the\r\n        // nines may infinitely repeat.\r\n        round(t, pr + 1, 0);\r\n\r\n        if (t.times(t).eq(x)) {\r\n          r = t;\r\n          break;\r\n        }\r\n      } else if (n != '9999') {\r\n        break;\r\n      }\r\n\r\n      wpr += 4;\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return round(r, pr);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to\r\n * `precision` significant digits.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n  var carry, e, i, k, r, rL, t, xdL, ydL,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    xd = x.d,\r\n    yd = (y = new Ctor(y)).d;\r\n\r\n  // Return 0 if either is 0.\r\n  if (!x.s || !y.s) return new Ctor(0);\r\n\r\n  y.s *= x.s;\r\n  e = x.e + y.e;\r\n  xdL = xd.length;\r\n  ydL = yd.length;\r\n\r\n  // Ensure xd points to the longer array.\r\n  if (xdL < ydL) {\r\n    r = xd;\r\n    xd = yd;\r\n    yd = r;\r\n    rL = xdL;\r\n    xdL = ydL;\r\n    ydL = rL;\r\n  }\r\n\r\n  // Initialise the result array with zeros.\r\n  r = [];\r\n  rL = xdL + ydL;\r\n  for (i = rL; i--;) r.push(0);\r\n\r\n  // Multiply!\r\n  for (i = ydL; --i >= 0;) {\r\n    carry = 0;\r\n    for (k = xdL + i; k > i;) {\r\n      t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n      r[k--] = t % BASE | 0;\r\n      carry = t / BASE | 0;\r\n    }\r\n\r\n    r[k] = (r[k] + carry) % BASE | 0;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; !r[--rL];) r.pop();\r\n\r\n  if (carry) ++e;\r\n  else r.shift();\r\n\r\n  y.d = r;\r\n  y.e = e;\r\n\r\n  return external ? round(y, Ctor.precision) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.todp = function (dp, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  x = new Ctor(x);\r\n  if (dp === void 0) return x;\r\n\r\n  checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n  if (rm === void 0) rm = Ctor.rounding;\r\n  else checkInt32(rm, 0, 8);\r\n\r\n  return round(x, dp + getBase10Exponent(x) + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n  var str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) {\r\n    str = toString(x, true);\r\n  } else {\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = round(new Ctor(x), dp + 1, rm);\r\n    str = toString(x, true, dp + 1);\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n  var str, y,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) return toString(x);\r\n\r\n  checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n  if (rm === void 0) rm = Ctor.rounding;\r\n  else checkInt32(rm, 0, 8);\r\n\r\n  y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);\r\n  str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);\r\n\r\n  // To determine whether to add the minus sign look at the value before it was rounded,\r\n  // i.e. look at `x` rather than `y`.\r\n  return x.isneg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.toInteger = P.toint = function () {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n  return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n *\r\n */\r\nP.toNumber = function () {\r\n  return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`,\r\n * truncated to `precision` significant digits.\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n *   x^y = exp(y*ln(x))\r\n *\r\n * The maximum error is 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n  var e, k, pr, r, sign, yIsInt,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    guard = 12,\r\n    yn = +(y = new Ctor(y));\r\n\r\n  // pow(x, 0) = 1\r\n  if (!y.s) return new Ctor(ONE);\r\n\r\n  x = new Ctor(x);\r\n\r\n  // pow(0, y > 0) = 0\r\n  // pow(0, y < 0) = Infinity\r\n  if (!x.s) {\r\n    if (y.s < 1) throw Error(decimalError + 'Infinity');\r\n    return x;\r\n  }\r\n\r\n  // pow(1, y) = 1\r\n  if (x.eq(ONE)) return x;\r\n\r\n  pr = Ctor.precision;\r\n\r\n  // pow(x, 1) = x\r\n  if (y.eq(ONE)) return round(x, pr);\r\n\r\n  e = y.e;\r\n  k = y.d.length - 1;\r\n  yIsInt = e >= k;\r\n  sign = x.s;\r\n\r\n  if (!yIsInt) {\r\n\r\n    // pow(x < 0, y non-integer) = NaN\r\n    if (sign < 0) throw Error(decimalError + 'NaN');\r\n\r\n  // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n  } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n    r = new Ctor(ONE);\r\n\r\n    // Max k of 9007199254740991 takes 53 loop iterations.\r\n    // Maximum digits array length; leaves [28, 34] guard digits.\r\n    e = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n    external = false;\r\n\r\n    for (;;) {\r\n      if (k % 2) {\r\n        r = r.times(x);\r\n        truncate(r.d, e);\r\n      }\r\n\r\n      k = mathfloor(k / 2);\r\n      if (k === 0) break;\r\n\r\n      x = x.times(x);\r\n      truncate(x.d, e);\r\n    }\r\n\r\n    external = true;\r\n\r\n    return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);\r\n  }\r\n\r\n  // Result is negative if x is negative and the last digit of integer y is odd.\r\n  sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;\r\n\r\n  x.s = 1;\r\n  external = false;\r\n  r = y.times(ln(x, pr + guard));\r\n  external = true;\r\n  r = exp(r);\r\n  r.s = sign;\r\n\r\n  return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n  var e, str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    e = getBase10Exponent(x);\r\n    str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = round(new Ctor(x), sd, rm);\r\n    e = getBase10Exponent(x);\r\n    str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);\r\n  }\r\n\r\n  return str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toSignificantDigits = P.tosd = function (sd, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    sd = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n  }\r\n\r\n  return round(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = P.valueOf = P.val = P.toJSON = P[Symbol.for('nodejs.util.inspect.custom')] = function () {\r\n  var x = this,\r\n    e = getBase10Exponent(x),\r\n    Ctor = x.constructor;\r\n\r\n  return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n *  add                 P.minus, P.plus\r\n *  checkInt32          P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd\r\n *  digitsToString      P.log, P.sqrt, P.pow, toString, exp, ln\r\n *  divide              P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln\r\n *  exp                 P.exp, P.pow\r\n *  getBase10Exponent   P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,\r\n *                      P.toString, divide, round, toString, exp, ln\r\n *  getLn10             P.log, ln\r\n *  getZeroString       digitsToString, toString\r\n *  ln                  P.log, P.ln, P.pow, exp\r\n *  parseDecimal        Decimal\r\n *  round               P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,\r\n *                      P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,\r\n *                      divide, getLn10, exp, ln\r\n *  subtract            P.minus, P.plus\r\n *  toString            P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf\r\n *  truncate            P.pow\r\n *\r\n *  Throws:             P.log, P.mod, P.sd, P.sqrt, P.pow,  checkInt32, divide, round,\r\n *                      getLn10, exp, ln, parseDecimal, Decimal, config\r\n */\r\n\r\n\r\nfunction add(x, y) {\r\n  var carry, d, e, i, k, len, xd, yd,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  // If either is zero...\r\n  if (!x.s || !y.s) {\r\n\r\n    // Return x if y is zero.\r\n    // Return y if y is non-zero.\r\n    if (!y.s) y = new Ctor(x);\r\n    return external ? round(y, pr) : y;\r\n  }\r\n\r\n  xd = x.d;\r\n  yd = y.d;\r\n\r\n  // x and y are finite, non-zero numbers with the same sign.\r\n\r\n  k = x.e;\r\n  e = y.e;\r\n  xd = xd.slice();\r\n  i = k - e;\r\n\r\n  // If base 1e7 exponents differ...\r\n  if (i) {\r\n    if (i < 0) {\r\n      d = xd;\r\n      i = -i;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = k;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n    k = Math.ceil(pr / LOG_BASE);\r\n    len = k > len ? k + 1 : len + 1;\r\n\r\n    if (i > len) {\r\n      i = len;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n    d.reverse();\r\n    for (; i--;) d.push(0);\r\n    d.reverse();\r\n  }\r\n\r\n  len = xd.length;\r\n  i = yd.length;\r\n\r\n  // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n  if (len - i < 0) {\r\n    i = len;\r\n    d = yd;\r\n    yd = xd;\r\n    xd = d;\r\n  }\r\n\r\n  // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n  for (carry = 0; i;) {\r\n    carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n    xd[i] %= BASE;\r\n  }\r\n\r\n  if (carry) {\r\n    xd.unshift(carry);\r\n    ++e;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n  for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n  y.d = xd;\r\n  y.e = e;\r\n\r\n  return external ? round(y, pr) : y;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n  if (i !== ~~i || i < min || i > max) {\r\n    throw Error(invalidArgument + i);\r\n  }\r\n}\r\n\r\n\r\nfunction digitsToString(d) {\r\n  var i, k, ws,\r\n    indexOfLastWord = d.length - 1,\r\n    str = '',\r\n    w = d[0];\r\n\r\n  if (indexOfLastWord > 0) {\r\n    str += w;\r\n    for (i = 1; i < indexOfLastWord; i++) {\r\n      ws = d[i] + '';\r\n      k = LOG_BASE - ws.length;\r\n      if (k) str += getZeroString(k);\r\n      str += ws;\r\n    }\r\n\r\n    w = d[i];\r\n    ws = w + '';\r\n    k = LOG_BASE - ws.length;\r\n    if (k) str += getZeroString(k);\r\n  } else if (w === 0) {\r\n    return '0';\r\n  }\r\n\r\n  // Remove trailing zeros of last w.\r\n  for (; w % 10 === 0;) w /= 10;\r\n\r\n  return str + w;\r\n}\r\n\r\n\r\nvar divide = (function () {\r\n\r\n  // Assumes non-zero x and k, and hence non-zero result.\r\n  function multiplyInteger(x, k) {\r\n    var temp,\r\n      carry = 0,\r\n      i = x.length;\r\n\r\n    for (x = x.slice(); i--;) {\r\n      temp = x[i] * k + carry;\r\n      x[i] = temp % BASE | 0;\r\n      carry = temp / BASE | 0;\r\n    }\r\n\r\n    if (carry) x.unshift(carry);\r\n\r\n    return x;\r\n  }\r\n\r\n  function compare(a, b, aL, bL) {\r\n    var i, r;\r\n\r\n    if (aL != bL) {\r\n      r = aL > bL ? 1 : -1;\r\n    } else {\r\n      for (i = r = 0; i < aL; i++) {\r\n        if (a[i] != b[i]) {\r\n          r = a[i] > b[i] ? 1 : -1;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    return r;\r\n  }\r\n\r\n  function subtract(a, b, aL) {\r\n    var i = 0;\r\n\r\n    // Subtract b from a.\r\n    for (; aL--;) {\r\n      a[aL] -= i;\r\n      i = a[aL] < b[aL] ? 1 : 0;\r\n      a[aL] = i * BASE + a[aL] - b[aL];\r\n    }\r\n\r\n    // Remove leading zeros.\r\n    for (; !a[0] && a.length > 1;) a.shift();\r\n  }\r\n\r\n  return function (x, y, pr, dp) {\r\n    var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,\r\n      Ctor = x.constructor,\r\n      sign = x.s == y.s ? 1 : -1,\r\n      xd = x.d,\r\n      yd = y.d;\r\n\r\n    // Either 0?\r\n    if (!x.s) return new Ctor(x);\r\n    if (!y.s) throw Error(decimalError + 'Division by zero');\r\n\r\n    e = x.e - y.e;\r\n    yL = yd.length;\r\n    xL = xd.length;\r\n    q = new Ctor(sign);\r\n    qd = q.d = [];\r\n\r\n    // Result exponent may be one less than e.\r\n    for (i = 0; yd[i] == (xd[i] || 0); ) ++i;\r\n    if (yd[i] > (xd[i] || 0)) --e;\r\n\r\n    if (pr == null) {\r\n      sd = pr = Ctor.precision;\r\n    } else if (dp) {\r\n      sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;\r\n    } else {\r\n      sd = pr;\r\n    }\r\n\r\n    if (sd < 0) return new Ctor(0);\r\n\r\n    // Convert precision in number of base 10 digits to base 1e7 digits.\r\n    sd = sd / LOG_BASE + 2 | 0;\r\n    i = 0;\r\n\r\n    // divisor < 1e7\r\n    if (yL == 1) {\r\n      k = 0;\r\n      yd = yd[0];\r\n      sd++;\r\n\r\n      // k is the carry.\r\n      for (; (i < xL || k) && sd--; i++) {\r\n        t = k * BASE + (xd[i] || 0);\r\n        qd[i] = t / yd | 0;\r\n        k = t % yd | 0;\r\n      }\r\n\r\n    // divisor >= 1e7\r\n    } else {\r\n\r\n      // Normalise xd and yd so highest order digit of yd is >= BASE/2\r\n      k = BASE / (yd[0] + 1) | 0;\r\n\r\n      if (k > 1) {\r\n        yd = multiplyInteger(yd, k);\r\n        xd = multiplyInteger(xd, k);\r\n        yL = yd.length;\r\n        xL = xd.length;\r\n      }\r\n\r\n      xi = yL;\r\n      rem = xd.slice(0, yL);\r\n      remL = rem.length;\r\n\r\n      // Add zeros to make remainder as long as divisor.\r\n      for (; remL < yL;) rem[remL++] = 0;\r\n\r\n      yz = yd.slice();\r\n      yz.unshift(0);\r\n      yd0 = yd[0];\r\n\r\n      if (yd[1] >= BASE / 2) ++yd0;\r\n\r\n      do {\r\n        k = 0;\r\n\r\n        // Compare divisor and remainder.\r\n        cmp = compare(yd, rem, yL, remL);\r\n\r\n        // If divisor < remainder.\r\n        if (cmp < 0) {\r\n\r\n          // Calculate trial digit, k.\r\n          rem0 = rem[0];\r\n          if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);\r\n\r\n          // k will be how many times the divisor goes into the current remainder.\r\n          k = rem0 / yd0 | 0;\r\n\r\n          //  Algorithm:\r\n          //  1. product = divisor * trial digit (k)\r\n          //  2. if product > remainder: product -= divisor, k--\r\n          //  3. remainder -= product\r\n          //  4. if product was < remainder at 2:\r\n          //    5. compare new remainder and divisor\r\n          //    6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n          if (k > 1) {\r\n            if (k >= BASE) k = BASE - 1;\r\n\r\n            // product = divisor * trial digit.\r\n            prod = multiplyInteger(yd, k);\r\n            prodL = prod.length;\r\n            remL = rem.length;\r\n\r\n            // Compare product and remainder.\r\n            cmp = compare(prod, rem, prodL, remL);\r\n\r\n            // product > remainder.\r\n            if (cmp == 1) {\r\n              k--;\r\n\r\n              // Subtract divisor from product.\r\n              subtract(prod, yL < prodL ? yz : yd, prodL);\r\n            }\r\n          } else {\r\n\r\n            // cmp is -1.\r\n            // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n            // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n            if (k == 0) cmp = k = 1;\r\n            prod = yd.slice();\r\n          }\r\n\r\n          prodL = prod.length;\r\n          if (prodL < remL) prod.unshift(0);\r\n\r\n          // Subtract product from remainder.\r\n          subtract(rem, prod, remL);\r\n\r\n          // If product was < previous remainder.\r\n          if (cmp == -1) {\r\n            remL = rem.length;\r\n\r\n            // Compare divisor and new remainder.\r\n            cmp = compare(yd, rem, yL, remL);\r\n\r\n            // If divisor < new remainder, subtract divisor from remainder.\r\n            if (cmp < 1) {\r\n              k++;\r\n\r\n              // Subtract divisor from remainder.\r\n              subtract(rem, yL < remL ? yz : yd, remL);\r\n            }\r\n          }\r\n\r\n          remL = rem.length;\r\n        } else if (cmp === 0) {\r\n          k++;\r\n          rem = [0];\r\n        }    // if cmp === 1, k will be 0\r\n\r\n        // Add the next digit, k, to the result array.\r\n        qd[i++] = k;\r\n\r\n        // Update the remainder.\r\n        if (cmp && rem[0]) {\r\n          rem[remL++] = xd[xi] || 0;\r\n        } else {\r\n          rem = [xd[xi]];\r\n          remL = 1;\r\n        }\r\n\r\n      } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n    }\r\n\r\n    // Leading zero?\r\n    if (!qd[0]) qd.shift();\r\n\r\n    q.e = e;\r\n\r\n    return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);\r\n  };\r\n})();\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` truncated to `sd`\r\n * significant digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n *   Repeat x = x / 32, k += 5, until |x| < 0.1\r\n *   exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n *  exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n */\r\nfunction exp(x, sd) {\r\n  var denominator, guard, pow, sum, t, wpr,\r\n    i = 0,\r\n    k = 0,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n\r\n  // exp(0) = 1\r\n  if (!x.s) return new Ctor(ONE);\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  t = new Ctor(0.03125);\r\n\r\n  while (x.abs().gte(0.1)) {\r\n    x = x.times(t);    // x = x / 2^5\r\n    k += 5;\r\n  }\r\n\r\n  // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.\r\n  guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n  wpr += guard;\r\n  denominator = pow = sum = new Ctor(ONE);\r\n  Ctor.precision = wpr;\r\n\r\n  for (;;) {\r\n    pow = round(pow.times(x), wpr);\r\n    denominator = denominator.times(++i);\r\n    t = sum.plus(divide(pow, denominator, wpr));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      while (k--) sum = round(sum.times(sum), wpr);\r\n      Ctor.precision = pr;\r\n      return sd == null ? (external = true, round(sum, pr)) : sum;\r\n    }\r\n\r\n    sum = t;\r\n  }\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(x) {\r\n  var e = x.e * LOG_BASE,\r\n    w = x.d[0];\r\n\r\n  // Add the number of digits of the first word of the digits array.\r\n  for (; w >= 10; w /= 10) e++;\r\n  return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n\r\n  if (sd > Ctor.LN10.sd()) {\r\n\r\n\r\n    // Reset global state in case the exception is caught.\r\n    external = true;\r\n    if (pr) Ctor.precision = pr;\r\n    throw Error(decimalError + 'LN10 precision limit exceeded');\r\n  }\r\n\r\n  return round(new Ctor(Ctor.LN10), sd);\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n  var zs = '';\r\n  for (; k--;) zs += '0';\r\n  return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` truncated to `sd` significant\r\n * digits.\r\n *\r\n *  ln(n) is non-terminating (n != 1)\r\n *\r\n */\r\nfunction ln(y, sd) {\r\n  var c, c0, denominator, e, numerator, sum, t, wpr, x2,\r\n    n = 1,\r\n    guard = 10,\r\n    x = y,\r\n    xd = x.d,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  // ln(-x) = NaN\r\n  // ln(0) = -Infinity\r\n  if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n  // ln(1) = 0\r\n  if (x.eq(ONE)) return new Ctor(0);\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  if (x.eq(10)) {\r\n    if (sd == null) external = true;\r\n    return getLn10(Ctor, wpr);\r\n  }\r\n\r\n  wpr += guard;\r\n  Ctor.precision = wpr;\r\n  c = digitsToString(xd);\r\n  c0 = c.charAt(0);\r\n  e = getBase10Exponent(x);\r\n\r\n  if (Math.abs(e) < 1.5e15) {\r\n\r\n    // Argument reduction.\r\n    // The series converges faster the closer the argument is to 1, so using\r\n    // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b\r\n    // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n    // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n    // later be divided by this number, then separate out the power of 10 using\r\n    // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n    // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n    //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n    // max n is 6 (gives 0.7 - 1.3)\r\n    while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n      x = x.times(y);\r\n      c = digitsToString(x.d);\r\n      c0 = c.charAt(0);\r\n      n++;\r\n    }\r\n\r\n    e = getBase10Exponent(x);\r\n\r\n    if (c0 > 1) {\r\n      x = new Ctor('0.' + c);\r\n      e++;\r\n    } else {\r\n      x = new Ctor(c0 + '.' + c.slice(1));\r\n    }\r\n  } else {\r\n\r\n    // The argument reduction method above may result in overflow if the argument y is a massive\r\n    // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n    // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n    t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n    x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n\r\n    Ctor.precision = pr;\r\n    return sd == null ? (external = true, round(x, pr)) : x;\r\n  }\r\n\r\n  // x is reduced to a value near 1.\r\n\r\n  // Taylor series.\r\n  // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n  // where x = (y - 1)/(y + 1)    (|x| < 1)\r\n  sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);\r\n  x2 = round(x.times(x), wpr);\r\n  denominator = 3;\r\n\r\n  for (;;) {\r\n    numerator = round(numerator.times(x2), wpr);\r\n    t = sum.plus(divide(numerator, new Ctor(denominator), wpr));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      sum = sum.times(2);\r\n\r\n      // Reverse the argument reduction.\r\n      if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n      sum = divide(sum, new Ctor(n), wpr);\r\n\r\n      Ctor.precision = pr;\r\n      return sd == null ? (external = true, round(sum, pr)) : sum;\r\n    }\r\n\r\n    sum = t;\r\n    denominator += 2;\r\n  }\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n  var e, i, len;\r\n\r\n  // Decimal point?\r\n  if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n  // Exponential form?\r\n  if ((i = str.search(/e/i)) > 0) {\r\n\r\n    // Determine exponent.\r\n    if (e < 0) e = i;\r\n    e += +str.slice(i + 1);\r\n    str = str.substring(0, i);\r\n  } else if (e < 0) {\r\n\r\n    // Integer.\r\n    e = str.length;\r\n  }\r\n\r\n  // Determine leading zeros.\r\n  for (i = 0; str.charCodeAt(i) === 48;) ++i;\r\n\r\n  // Determine trailing zeros.\r\n  for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;\r\n  str = str.slice(i, len);\r\n\r\n  if (str) {\r\n    len -= i;\r\n    e = e - i - 1;\r\n    x.e = mathfloor(e / LOG_BASE);\r\n    x.d = [];\r\n\r\n    // Transform base\r\n\r\n    // e is the base 10 exponent.\r\n    // i is where to slice str to get the first word of the digits array.\r\n    i = (e + 1) % LOG_BASE;\r\n    if (e < 0) i += LOG_BASE;\r\n\r\n    if (i < len) {\r\n      if (i) x.d.push(+str.slice(0, i));\r\n      for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n      str = str.slice(i);\r\n      i = LOG_BASE - str.length;\r\n    } else {\r\n      i -= len;\r\n    }\r\n\r\n    for (; i--;) str += '0';\r\n    x.d.push(+str);\r\n\r\n    if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);\r\n  } else {\r\n\r\n    // Zero.\r\n    x.s = 0;\r\n    x.e = 0;\r\n    x.d = [0];\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits, using rounding mode `rm` if present (truncate otherwise).\r\n */\r\n function round(x, sd, rm) {\r\n  var i, j, k, n, rd, doRound, w, xdi,\r\n    xd = x.d;\r\n\r\n  // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n  // w: the word of xd which contains the rounding digit, a base 1e7 number.\r\n  // xdi: the index of w within xd.\r\n  // n: the number of digits of w.\r\n  // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n  // they had leading zeros)\r\n  // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n  // Get the length of the first word of the digits array xd.\r\n  for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;\r\n  i = sd - n;\r\n\r\n  // Is the rounding digit in the first word of xd?\r\n  if (i < 0) {\r\n    i += LOG_BASE;\r\n    j = sd;\r\n    w = xd[xdi = 0];\r\n  } else {\r\n    xdi = Math.ceil((i + 1) / LOG_BASE);\r\n    k = xd.length;\r\n    if (xdi >= k) return x;\r\n    w = k = xd[xdi];\r\n\r\n    // Get the number of digits of w.\r\n    for (n = 1; k >= 10; k /= 10) n++;\r\n\r\n    // Get the index of rd within w.\r\n    i %= LOG_BASE;\r\n\r\n    // Get the index of rd within w, adjusted for leading zeros.\r\n    // The number of leading zeros of w is given by LOG_BASE - n.\r\n    j = i - LOG_BASE + n;\r\n  }\r\n\r\n  if (rm !== void 0) {\r\n    k = mathpow(10, n - j - 1);\r\n\r\n    // Get the rounding digit at index j of w.\r\n    rd = w / k % 10 | 0;\r\n\r\n    // Are there any non-zero digits after the rounding digit?\r\n    doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;\r\n\r\n    // The expression `w % mathpow(10, n - j - 1)` returns all the digits of w to the right of the\r\n    // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give\r\n    // 714.\r\n\r\n    doRound = rm < 4\r\n      ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n      : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&\r\n\r\n        // Check whether the digit to the left of the rounding digit is odd.\r\n        ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n          rm == (x.s < 0 ? 8 : 7));\r\n  }\r\n\r\n  if (sd < 1 || !xd[0]) {\r\n    if (doRound) {\r\n      k = getBase10Exponent(x);\r\n      xd.length = 1;\r\n\r\n      // Convert sd to decimal places.\r\n      sd = sd - k - 1;\r\n\r\n      // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n      xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n      x.e = mathfloor(-sd / LOG_BASE) || 0;\r\n    } else {\r\n      xd.length = 1;\r\n\r\n      // Zero.\r\n      xd[0] = x.e = x.s = 0;\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n  // Remove excess digits.\r\n  if (i == 0) {\r\n    xd.length = xdi;\r\n    k = 1;\r\n    xdi--;\r\n  } else {\r\n    xd.length = xdi + 1;\r\n    k = mathpow(10, LOG_BASE - i);\r\n\r\n    // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n    // j > 0 means i > number of leading zeros of w.\r\n    xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;\r\n  }\r\n\r\n  if (doRound) {\r\n    for (;;) {\r\n\r\n      // Is the digit to be rounded up in the first word of xd?\r\n      if (xdi == 0) {\r\n        if ((xd[0] += k) == BASE) {\r\n          xd[0] = 1;\r\n          ++x.e;\r\n        }\r\n\r\n        break;\r\n      } else {\r\n        xd[xdi] += k;\r\n        if (xd[xdi] != BASE) break;\r\n        xd[xdi--] = 0;\r\n        k = 1;\r\n      }\r\n    }\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n\r\n  if (external && (x.e > MAX_E || x.e < -MAX_E)) {\r\n    throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\nfunction subtract(x, y) {\r\n  var d, e, i, j, k, len, xd, xe, xLTy, yd,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision;\r\n\r\n  // Return y negated if x is zero.\r\n  // Return x if y is zero and x is non-zero.\r\n  if (!x.s || !y.s) {\r\n    if (y.s) y.s = -y.s;\r\n    else y = new Ctor(x);\r\n    return external ? round(y, pr) : y;\r\n  }\r\n\r\n  xd = x.d;\r\n  yd = y.d;\r\n\r\n  // x and y are non-zero numbers with the same sign.\r\n\r\n  e = y.e;\r\n  xe = x.e;\r\n  xd = xd.slice();\r\n  k = xe - e;\r\n\r\n  // If exponents differ...\r\n  if (k) {\r\n    xLTy = k < 0;\r\n\r\n    if (xLTy) {\r\n      d = xd;\r\n      k = -k;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = xe;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Numbers with massively different exponents would result in a very high number of zeros\r\n    // needing to be prepended, but this can be avoided while still ensuring correct rounding by\r\n    // limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n    i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n    if (k > i) {\r\n      k = i;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents.\r\n    d.reverse();\r\n    for (i = k; i--;) d.push(0);\r\n    d.reverse();\r\n\r\n  // Base 1e7 exponents equal.\r\n  } else {\r\n\r\n    // Check digits to determine which is the bigger number.\r\n\r\n    i = xd.length;\r\n    len = yd.length;\r\n    xLTy = i < len;\r\n    if (xLTy) len = i;\r\n\r\n    for (i = 0; i < len; i++) {\r\n      if (xd[i] != yd[i]) {\r\n        xLTy = xd[i] < yd[i];\r\n        break;\r\n      }\r\n    }\r\n\r\n    k = 0;\r\n  }\r\n\r\n  if (xLTy) {\r\n    d = xd;\r\n    xd = yd;\r\n    yd = d;\r\n    y.s = -y.s;\r\n  }\r\n\r\n  len = xd.length;\r\n\r\n  // Append zeros to xd if shorter.\r\n  // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.\r\n  for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n  // Subtract yd from xd.\r\n  for (i = yd.length; i > k;) {\r\n    if (xd[--i] < yd[i]) {\r\n      for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n      --xd[j];\r\n      xd[i] += BASE;\r\n    }\r\n\r\n    xd[i] -= yd[i];\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; xd[--len] === 0;) xd.pop();\r\n\r\n  // Remove leading zeros and adjust exponent accordingly.\r\n  for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n  // Zero?\r\n  if (!xd[0]) return new Ctor(0);\r\n\r\n  y.d = xd;\r\n  y.e = e;\r\n\r\n  //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;\r\n  return external ? round(y, pr) : y;\r\n}\r\n\r\n\r\nfunction toString(x, isExp, sd) {\r\n  var k,\r\n    e = getBase10Exponent(x),\r\n    str = digitsToString(x.d),\r\n    len = str.length;\r\n\r\n  if (isExp) {\r\n    if (sd && (k = sd - len) > 0) {\r\n      str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n    } else if (len > 1) {\r\n      str = str.charAt(0) + '.' + str.slice(1);\r\n    }\r\n\r\n    str = str + (e < 0 ? 'e' : 'e+') + e;\r\n  } else if (e < 0) {\r\n    str = '0.' + getZeroString(-e - 1) + str;\r\n    if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n  } else if (e >= len) {\r\n    str += getZeroString(e + 1 - len);\r\n    if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n  } else {\r\n    if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n    if (sd && (k = sd - len) > 0) {\r\n      if (e + 1 === len) str += '.';\r\n      str += getZeroString(k);\r\n    }\r\n  }\r\n\r\n  return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n  if (arr.length > len) {\r\n    arr.length = len;\r\n    return true;\r\n  }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n *  clone\r\n *  config/set\r\n */\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n  var i, p, ps;\r\n\r\n  /*\r\n   * The Decimal constructor and exported function.\r\n   * Return a new Decimal instance.\r\n   *\r\n   * value {number|string|Decimal} A numeric value.\r\n   *\r\n   */\r\n  function Decimal(value) {\r\n    var x = this;\r\n\r\n    // Decimal called without new.\r\n    if (!(x instanceof Decimal)) return new Decimal(value);\r\n\r\n    // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n    // which points to Object.\r\n    x.constructor = Decimal;\r\n\r\n    // Duplicate.\r\n    if (value instanceof Decimal) {\r\n      x.s = value.s;\r\n      x.e = value.e;\r\n      x.d = (value = value.d) ? value.slice() : value;\r\n      return;\r\n    }\r\n\r\n    if (typeof value === 'number') {\r\n\r\n      // Reject Infinity/NaN.\r\n      if (value * 0 !== 0) {\r\n        throw Error(invalidArgument + value);\r\n      }\r\n\r\n      if (value > 0) {\r\n        x.s = 1;\r\n      } else if (value < 0) {\r\n        value = -value;\r\n        x.s = -1;\r\n      } else {\r\n        x.s = 0;\r\n        x.e = 0;\r\n        x.d = [0];\r\n        return;\r\n      }\r\n\r\n      // Fast path for small integers.\r\n      if (value === ~~value && value < 1e7) {\r\n        x.e = 0;\r\n        x.d = [value];\r\n        return;\r\n      }\r\n\r\n      return parseDecimal(x, value.toString());\r\n    } else if (typeof value !== 'string') {\r\n      throw Error(invalidArgument + value);\r\n    }\r\n\r\n    // Minus sign?\r\n    if (value.charCodeAt(0) === 45) {\r\n      value = value.slice(1);\r\n      x.s = -1;\r\n    } else {\r\n      x.s = 1;\r\n    }\r\n\r\n    if (isDecimal.test(value)) parseDecimal(x, value);\r\n    else throw Error(invalidArgument + value);\r\n  }\r\n\r\n  Decimal.prototype = P;\r\n\r\n  Decimal.ROUND_UP = 0;\r\n  Decimal.ROUND_DOWN = 1;\r\n  Decimal.ROUND_CEIL = 2;\r\n  Decimal.ROUND_FLOOR = 3;\r\n  Decimal.ROUND_HALF_UP = 4;\r\n  Decimal.ROUND_HALF_DOWN = 5;\r\n  Decimal.ROUND_HALF_EVEN = 6;\r\n  Decimal.ROUND_HALF_CEIL = 7;\r\n  Decimal.ROUND_HALF_FLOOR = 8;\r\n\r\n  Decimal.clone = clone;\r\n  Decimal.config = Decimal.set = config;\r\n\r\n  if (obj === void 0) obj = {};\r\n  if (obj) {\r\n    ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];\r\n    for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n  }\r\n\r\n  Decimal.config(obj);\r\n\r\n  return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n *   precision  {number}\r\n *   rounding   {number}\r\n *   toExpNeg   {number}\r\n *   toExpPos   {number}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n  if (!obj || typeof obj !== 'object') {\r\n    throw Error(decimalError + 'Object expected');\r\n  }\r\n  var i, p, v,\r\n    ps = [\r\n      'precision', 1, MAX_DIGITS,\r\n      'rounding', 0, 8,\r\n      'toExpNeg', -1 / 0, 0,\r\n      'toExpPos', 0, 1 / 0\r\n    ];\r\n\r\n  for (i = 0; i < ps.length; i += 3) {\r\n    if ((v = obj[p = ps[i]]) !== void 0) {\r\n      if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n      else throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n  }\r\n\r\n  if ((v = obj[p = 'LN10']) !== void 0) {\r\n      if (v == Math.LN10) this[p] = new this(v);\r\n      else throw Error(invalidArgument + p + ': ' + v);\r\n  }\r\n\r\n  return this;\r\n}\r\n\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = clone(defaults);\r\n\r\n// Internal constant.\r\nONE = new Decimal(1);\r\n\r\nexport default Decimal;\r\n", "import DecimalLight from 'decimal.js-light/decimal.mjs'\n\nclass Decimal extends DecimalLight {\n  static isDecimal(value: any): boolean {\n    return value instanceof DecimalLight\n  }\n\n  static random(sd = 20): Decimal {\n    if (TARGET_BUILD_TYPE === 'wasm-compiler-edge') {\n      const bytes = globalThis.crypto.getRandomValues(new Uint8Array(sd))\n      const result = bytes.reduce((acc, byte) => acc + byte, '')\n      return new DecimalLight(`0.${result.slice(0, sd)}`)\n    } else {\n      throw new Error('Not implemented for Node.js yet')\n    }\n  }\n}\n\nexport default Decimal\nexport { Decimal }\n", "export const webcrypto = globalThis.crypto\n\nexport function randomUUID(): string {\n  return globalThis.crypto.randomUUID()\n}\n\nexport function randomFillSync(buffer: Uint8Array, offset?: number, length?: number): Uint8Array {\n  if (offset !== undefined) {\n    if (length !== undefined) {\n      buffer = buffer.subarray(offset, offset + length)\n    } else {\n      buffer = buffer.subarray(offset)\n    }\n  }\n  return globalThis.crypto.getRandomValues(buffer)\n}\n\nexport function createHash(algorithm: string): Hash {\n  return new Hash(algorithm)\n}\n\nexport class Hash {\n  #chunks: Uint8Array[] = []\n  #algorithm: string\n\n  constructor(algorithm: string) {\n    this.#algorithm = algorithm\n  }\n\n  update(data: Uint8Array): void {\n    this.#chunks.push(data)\n  }\n\n  async digest(): Promise<Uint8Array> {\n    const data = new Uint8Array(this.#chunks.reduce((acc, chunk) => acc + chunk.length, 0))\n    let offset = 0\n    for (const chunk of this.#chunks) {\n      data.set(chunk, offset)\n      offset += chunk.length\n    }\n    const arrayBuffer = await globalThis.crypto.subtle.digest(this.#algorithm, data)\n    return new Uint8Array(arrayBuffer)\n  }\n}\n\nexport default {\n  webcrypto,\n  randomUUID,\n  randomFillSync,\n  createHash,\n  Hash,\n}\n", "", "{\n  \"name\": \"@prisma/engines-version\",\n  \"version\": \"7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3\",\n  \"main\": \"index.js\",\n  \"types\": \"index.d.ts\",\n  \"license\": \"Apache-2.0\",\n  \"author\": \"Tim Suchanek <suchanek@prisma.io>\",\n  \"prisma\": {\n    \"enginesVersion\": \"0edf323efd1d98336f3f0a68684b56f689b900d3\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/prisma/engines-wrapper.git\",\n    \"directory\": \"packages/engines-version\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"18.19.76\",\n    \"typescript\": \"4.9.5\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"index.d.ts\"\n  ],\n  \"scripts\": {\n    \"build\": \"tsc -d\"\n  }\n}", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.enginesVersion = void 0;\nexports.enginesVersion = require('./package.json').prisma.enginesVersion;\n//# sourceMappingURL=index.js.map", "'use strict';\n\nmodule.exports = (string, count = 1, options) => {\n\toptions = {\n\t\tindent: ' ',\n\t\tincludeEmptyLines: false,\n\t\t...options\n\t};\n\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof string}\\``\n\t\t);\n\t}\n\n\tif (typeof count !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof count}\\``\n\t\t);\n\t}\n\n\tif (typeof options.indent !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof options.indent}\\``\n\t\t);\n\t}\n\n\tif (count === 0) {\n\t\treturn string;\n\t}\n\n\tconst regex = options.includeEmptyLines ? /^/gm : /^(?!\\s*$)/gm;\n\n\treturn string.replace(regex, options.indent.repeat(count));\n};\n", "'use strict';\n\nmodule.exports = (options = {}) => {\n\tlet repoUrl;\n\tif (options.repoUrl) {\n\t\trepoUrl = options.repoUrl;\n\t} else if (options.user && options.repo) {\n\t\trepoUrl = `https://github.com/${options.user}/${options.repo}`;\n\t} else {\n\t\tthrow new Error('You need to specify either the `repoUrl` option or both the `user` and `repo` options');\n\t}\n\n\tconst url = new URL(`${repoUrl}/issues/new`);\n\n\tconst types = [\n\t\t'body',\n\t\t'title',\n\t\t'labels',\n\t\t'template',\n\t\t'milestone',\n\t\t'assignee',\n\t\t'projects'\n\t];\n\n\tfor (const type of types) {\n\t\tlet value = options[type];\n\t\tif (value === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (type === 'labels' || type === 'projects') {\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tthrow new TypeError(`The \\`${type}\\` option should be an array`);\n\t\t\t}\n\n\t\t\tvalue = value.join(',');\n\t\t}\n\n\t\turl.searchParams.set(type, value);\n\t}\n\n\treturn url.toString();\n};\n\n// TODO: Remove this for the next major release\nmodule.exports.default = module.exports;\n", "'use strict';\nmodule.exports = (function()\n{\n  function _min(d0, d1, d2, bx, ay)\n  {\n    return d0 < d1 || d2 < d1\n        ? d0 > d2\n            ? d2 + 1\n            : d0 + 1\n        : bx === ay\n            ? d1\n            : d1 + 1;\n  }\n\n  return function(a, b)\n  {\n    if (a === b) {\n      return 0;\n    }\n\n    if (a.length > b.length) {\n      var tmp = a;\n      a = b;\n      b = tmp;\n    }\n\n    var la = a.length;\n    var lb = b.length;\n\n    while (la > 0 && (a.charCodeAt(la - 1) === b.charCodeAt(lb - 1))) {\n      la--;\n      lb--;\n    }\n\n    var offset = 0;\n\n    while (offset < la && (a.charCodeAt(offset) === b.charCodeAt(offset))) {\n      offset++;\n    }\n\n    la -= offset;\n    lb -= offset;\n\n    if (la === 0 || lb < 3) {\n      return lb;\n    }\n\n    var x = 0;\n    var y;\n    var d0;\n    var d1;\n    var d2;\n    var d3;\n    var dd;\n    var dy;\n    var ay;\n    var bx0;\n    var bx1;\n    var bx2;\n    var bx3;\n\n    var vector = [];\n\n    for (y = 0; y < la; y++) {\n      vector.push(y + 1);\n      vector.push(a.charCodeAt(offset + y));\n    }\n\n    var len = vector.length - 1;\n\n    for (; x < lb - 3;) {\n      bx0 = b.charCodeAt(offset + (d0 = x));\n      bx1 = b.charCodeAt(offset + (d1 = x + 1));\n      bx2 = b.charCodeAt(offset + (d2 = x + 2));\n      bx3 = b.charCodeAt(offset + (d3 = x + 3));\n      dd = (x += 4);\n      for (y = 0; y < len; y += 2) {\n        dy = vector[y];\n        ay = vector[y + 1];\n        d0 = _min(dy, d0, d1, bx0, ay);\n        d1 = _min(d0, d1, d2, bx1, ay);\n        d2 = _min(d1, d2, d3, bx2, ay);\n        dd = _min(d2, d3, dd, bx3, ay);\n        vector[y] = dd;\n        d3 = d2;\n        d2 = d1;\n        d1 = d0;\n        d0 = dy;\n      }\n    }\n\n    for (; x < lb;) {\n      bx0 = b.charCodeAt(offset + (d0 = x));\n      dd = ++x;\n      for (y = 0; y < len; y += 2) {\n        dy = vector[y];\n        vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]);\n        d0 = dy;\n      }\n    }\n\n    return dd;\n  };\n})();\n\n", "import { BasicBuilder } from './BasicBuilder'\nimport type { KeyType } from './KeyType'\nimport { Writer } from './Writer'\n\nexport abstract class TypeBuilder implements BasicBuilder {\n  // TODO(@SevInf): this should be replaced with precedence system that would\n  // automatically add parenthesis where they are needed\n  needsParenthesisWhenIndexed = false\n  needsParenthesisInKeyof = false\n  needsParenthesisInUnion = false\n  needsParenthesisInIntersection = false\n\n  abstract write(writer: Writer): void\n\n  subKey(key: string): KeyType {\n    // TODO: since we translating ESM to CommonJS during bundling, we\n    // can't handle circular dependencies the same way ESM does. We have to delay KeyType import\n    // to resolve it. Once we stop doing this, we can move this import to top of the file.\n    const { KeyType } = require('./KeyType')\n    return new KeyType(this, key)\n  }\n\n  writeIndexed(writer: Writer) {\n    if (this.needsParenthesisWhenIndexed) {\n      writer.write('(')\n    }\n\n    writer.write(this)\n\n    if (this.needsParenthesisWhenIndexed) {\n      writer.write(')')\n    }\n  }\n}\n", "import { TypeBuilder } from './TypeBuilder'\nimport { Writer } from './Writer'\n\nexport class KeyType extends TypeBuilder {\n  constructor(\n    public baseType: TypeBuilder,\n    public key: string,\n  ) {\n    super()\n  }\n  write(writer: Writer): void {\n    this.baseType.writeIndexed(writer)\n\n    writer.write('[').write(`\"${this.key}\"`).write(']')\n  }\n}\n\nexport function keyType(baseType: TypeBuilder, key: string) {\n  return new KeyType(baseType, key)\n}\n", "type Listener = (...args: any[]) => void\n\nexport class EventEmitter {\n  private events: Record<string, Listener[]> = {}\n\n  on(event: string, listener: Listener) {\n    if (!this.events[event]) {\n      this.events[event] = []\n    }\n\n    this.events[event].push(listener)\n\n    return this\n  }\n\n  emit(event: string, ...args: any[]) {\n    if (!this.events[event]) {\n      return false\n    }\n\n    this.events[event].forEach((listener) => {\n      listener(...args)\n    })\n\n    return true\n  }\n}\n\n/**\n * A poor man's shim for the \"events\" module\n */\nconst events = {\n  EventEmitter,\n}\n\nexport default events\n", "import * as Extensions from './core/extensions'\nimport * as Public from './core/public'\nimport * as Types from './core/types'\n\nexport { type Types }\nexport { Extensions }\nexport { Public }\n\nexport { type JsonBatchQuery, type JsonQuery } from './core/engines'\nexport { serializeJsonQuery } from './core/jsonProtocol/serializeJsonQuery'\nexport { createParam } from './core/model/Param'\nexport { defineDmmfProperty } from './core/runtimeDataModel'\nexport type * from './core/types/exported'\nexport type { ITXClientDenyList } from './core/types/exported/itxClientDenyList'\nexport { skip } from './core/types/exported/Skip'\nexport { makeTypedQueryFactory } from './core/types/exported/TypedSql'\nexport type { PrismaClientOptions } from './getPrismaClient'\nexport { getPrismaClient } from './getPrismaClient'\nexport { makeStrictEnum } from './strictEnum'\nexport { deserializeRawResult } from './utils/deserializeRawResults'\nexport { getRuntime } from './utils/getRuntime'\nexport {\n  type BaseDMMF,\n  dmmfToRuntimeDataModel,\n  type GetPrismaClientConfig,\n  type Operation,\n  type RuntimeDataModel,\n} from '@prisma/client-common'\nexport { deserializeJsonObject } from '@prisma/client-engine-runtime'\nexport type { RawValue, Value } from '@prisma/client-runtime-utils'\nexport type { AnyNullClass, DbNullClass, JsonNullClass } from '@prisma/client-runtime-utils'\nexport {\n  PrismaClientInitializationError,\n  PrismaClientKnownRequestError,\n  PrismaClientRustPanicError,\n  PrismaClientUnknownRequestError,\n  PrismaClientValidationError,\n} from '@prisma/client-runtime-utils'\nexport { empty, join, raw, Sql, sql as sqltag } from '@prisma/client-runtime-utils'\nexport {\n  AnyNull,\n  DbNull,\n  isAnyNull,\n  isDbNull,\n  isJsonNull,\n  isObjectEnumValue,\n  JsonNull,\n  NullTypes,\n  ObjectEnumValue,\n} from '@prisma/client-runtime-utils'\nexport { Decimal } from '@prisma/client-runtime-utils'\nexport { Debug } from '@prisma/debug'\nexport * as DMMF from '@prisma/dmmf'\nexport type { SqlDriverAdapterFactory } from '@prisma/driver-adapter-utils'\nexport { warnOnce } from '@prisma/internals'\nexport type {\n  SqlCommenterContext,\n  SqlCommenterPlugin,\n  SqlCommenterQueryInfo,\n  SqlCommenterSingleQueryInfo,\n  SqlCommenterTags,\n} from '@prisma/sqlcommenter'\n", "import { defineExtension } from './defineExtension'\nimport { getExtensionContext } from './getExtensionContext'\n\nexport { defineExtension }\nexport { getExtensionContext }\n", "import { Client } from '../../getPrismaClient'\nimport { ExtensionArgs } from '../types/exported/ExtensionArgs'\n\nexport function defineExtension(ext: ExtensionArgs | ((client: Client) => Client)) {\n  if (typeof ext === 'function') {\n    return ext\n  }\n\n  return (client: Client) => client.$extends(ext)\n}\n", "/*\n * Because we use a symbol to store the context, we need to merge the context\n * with the original this type. We manage the context via `getExtensionContext`\n * to circumvent the limitations of `this` inference in TS, while also providing\n * a unified API for context management in generic and non-generic extensions.\n */\n\n/* eslint-disable prettier/prettier */\nexport type Context<T> = T extends { [K: symbol]: { ctx: infer C } }\n  ? C &\n      T & {\n        /**\n         * @deprecated Use `$name` instead.\n         */\n        name?: string\n        $name?: string\n        $parent?: unknown\n      }\n  : T & {\n      /**\n       * @deprecated Use `$name` instead.\n       */\n      name?: string\n      $name?: string\n      $parent?: unknown\n    }\n\nexport function getExtensionContext<T>(that: T) {\n  return that as any as Context<T>\n}\n", "import { validator } from './validator'\n\n/*\n * /!\\ These exports are exposed to the user. Proceed with caution.\n *\n * TODO: Move more hardcoded utils from generation into here\n */\n\nexport { validator }\n", "import { Args, Operation } from '../types/exported/Public'\nimport { Exact } from '../types/exported/Utils'\n\nexport function validator<V>(): <S>(select: Exact<S, V>) => S\nexport function validator<C, M extends Exclude<keyof C, `$${string}`>, O extends keyof C[M] & Operation>(\n  client: C,\n  model: M,\n  operation: O,\n): <S>(select: Exact<S, Args<C[M], O>>) => S\nexport function validator<\n  C,\n  M extends Exclude<keyof C, `$${string}`>,\n  O extends keyof C[M] & Operation,\n  P extends keyof Args<C[M], O>,\n>(client: C, model: M, operation: O, prop: P): <S>(select: Exact<S, Args<C[M], O>[P]>) => S\nexport function validator(..._args: any[]) {\n  return (args: any) => args\n}\n", "import { RuntimeDataModel, RuntimeModel, uncapitalize } from '@prisma/client-common'\nimport { isObjectEnumValue } from '@prisma/client-runtime-utils'\nimport { assertNever } from '@prisma/internals'\n\nimport { ErrorFormat } from '../../getPrismaClient'\nimport { CallSite } from '../../utils/CallSite'\nimport { isDate, isValidDate } from '../../utils/date'\nimport { isDecimalJsLike } from '../../utils/decimalJsLike'\nimport {\n  JsonArgumentValue,\n  JsonFieldSelection,\n  JsonQuery,\n  JsonQueryAction,\n  JsonSelectionSet,\n  OutputTypeDescription,\n  RawTaggedValue,\n} from '../engines'\nimport { throwValidationException } from '../errorRendering/throwValidationException'\nimport { MergedExtensionsList } from '../extensions/MergedExtensionsList'\nimport { computeEngineSideOmissions, computeEngineSideSelection } from '../extensions/resultUtils'\nimport { isFieldRef } from '../model/FieldRef'\nimport { isParam } from '../model/Param'\nimport { isSkip, Skip } from '../types'\nimport {\n  Action,\n  JsArgs,\n  JsInputValue,\n  JsonConvertible,\n  Omission,\n  RawParameters,\n  Selection,\n} from '../types/exported/JsApi'\nimport { ValidationError } from '../types/ValidationError'\n\nconst jsActionToProtocolAction: Record<Action, JsonQueryAction> = {\n  findUnique: 'findUnique',\n  findUniqueOrThrow: 'findUniqueOrThrow',\n  findFirst: 'findFirst',\n  findFirstOrThrow: 'findFirstOrThrow',\n  findMany: 'findMany',\n  count: 'aggregate',\n  create: 'createOne',\n  createMany: 'createMany',\n  createManyAndReturn: 'createManyAndReturn',\n  update: 'updateOne',\n  updateMany: 'updateMany',\n  updateManyAndReturn: 'updateManyAndReturn',\n  upsert: 'upsertOne',\n  delete: 'deleteOne',\n  deleteMany: 'deleteMany',\n  executeRaw: 'executeRaw',\n  queryRaw: 'queryRaw',\n  aggregate: 'aggregate',\n  groupBy: 'groupBy',\n  runCommandRaw: 'runCommandRaw',\n  findRaw: 'findRaw',\n  aggregateRaw: 'aggregateRaw',\n}\n\nexport type GlobalOmitOptions = {\n  [modelName: string]: {\n    [fieldName: string]: boolean\n  }\n}\n\nexport type SerializeParams = {\n  runtimeDataModel: RuntimeDataModel\n  modelName?: string\n  action: Action\n  args?: JsArgs\n  extensions?: MergedExtensionsList\n  callsite?: CallSite\n  clientMethod: string\n  clientVersion: string\n  errorFormat: ErrorFormat\n  previewFeatures: string[]\n  globalOmit?: GlobalOmitOptions\n  wrapRawValues?: boolean\n}\n\nconst STRICT_UNDEFINED_ERROR_MESSAGE = 'explicitly `undefined` values are not allowed'\n\nexport function serializeJsonQuery({\n  modelName,\n  action,\n  args,\n  runtimeDataModel,\n  extensions = MergedExtensionsList.empty(),\n  callsite,\n  clientMethod,\n  errorFormat,\n  clientVersion,\n  previewFeatures,\n  globalOmit,\n  wrapRawValues,\n}: SerializeParams): JsonQuery {\n  const context = new SerializeContext({\n    runtimeDataModel,\n    modelName,\n    action,\n    rootArgs: args,\n    callsite,\n    extensions,\n    selectionPath: [],\n    argumentPath: [],\n    originalMethod: clientMethod,\n    errorFormat,\n    clientVersion,\n    previewFeatures,\n    globalOmit,\n    wrapRawValues,\n  })\n  return {\n    modelName,\n    action: jsActionToProtocolAction[action],\n    query: serializeFieldSelection(args, context),\n  }\n}\n\nfunction serializeFieldSelection(\n  { select, include, ...args }: JsArgs = {},\n  context: SerializeContext,\n): JsonFieldSelection {\n  const omit = args.omit\n  delete args.omit\n  return {\n    arguments: serializeArgumentsObject(args, context),\n    selection: serializeSelectionSet(select, include, omit, context),\n  }\n}\n\nfunction serializeSelectionSet(\n  select: Selection | undefined,\n  include: Selection | undefined,\n  omit: Omission | undefined,\n  context: SerializeContext,\n): JsonSelectionSet {\n  if (select) {\n    if (include) {\n      context.throwValidationError({\n        kind: 'MutuallyExclusiveFields',\n        firstField: 'include',\n        secondField: 'select',\n        selectionPath: context.getSelectionPath(),\n      })\n    } else if (omit) {\n      context.throwValidationError({\n        kind: 'MutuallyExclusiveFields',\n        firstField: 'omit',\n        secondField: 'select',\n        selectionPath: context.getSelectionPath(),\n      })\n    }\n    return createExplicitSelection(select, context)\n  }\n\n  return createImplicitSelection(context, include, omit)\n}\n\nfunction createImplicitSelection(\n  context: SerializeContext,\n  include: Selection | undefined,\n  omit: Omission | undefined,\n) {\n  const selectionSet: JsonSelectionSet = {}\n\n  if (context.modelOrType && !context.isRawAction()) {\n    selectionSet.$composites = true\n    selectionSet.$scalars = true\n  }\n\n  if (include) {\n    addIncludedRelations(selectionSet, include, context)\n  }\n\n  omitFields(selectionSet, omit, context)\n\n  return selectionSet\n}\n\nfunction addIncludedRelations(selectionSet: JsonSelectionSet, include: Selection, context: SerializeContext) {\n  for (const [key, value] of Object.entries(include)) {\n    if (isSkip(value)) {\n      continue\n    }\n    const nestedContext = context.nestSelection(key)\n    validateSelectionForUndefined(value, nestedContext)\n    if (value === false || value === undefined) {\n      selectionSet[key] = false\n      continue\n    }\n\n    const field = context.findField(key)\n    if (field && field.kind !== 'object') {\n      context.throwValidationError({\n        kind: 'IncludeOnScalar',\n        selectionPath: context.getSelectionPath().concat(key),\n        outputType: context.getOutputTypeDescription(),\n      })\n    }\n    if (field) {\n      selectionSet[key] = serializeFieldSelection(value === true ? {} : value, nestedContext)\n      continue\n    }\n\n    if (value === true) {\n      selectionSet[key] = true\n      continue\n    }\n\n    // value is an object, field is unknown\n    // this can either be user error (in that case, qe will respond with an error)\n    // or virtual field not present on datamodel (like `_count`).\n    // Since we don't know which one cast is, we still attempt to serialize selection\n    selectionSet[key] = serializeFieldSelection(value, nestedContext)\n  }\n}\n\nfunction omitFields(selectionSet: JsonSelectionSet, localOmit: Omission | undefined, context: SerializeContext) {\n  const computedFields = context.getComputedFields()\n  const combinedOmits = { ...context.getGlobalOmit(), ...localOmit }\n  const omitWithComputedFields = computeEngineSideOmissions(combinedOmits, computedFields)\n  for (const [key, value] of Object.entries(omitWithComputedFields)) {\n    if (isSkip(value)) {\n      continue\n    }\n    validateSelectionForUndefined(value, context.nestSelection(key))\n    const field = context.findField(key)\n    if (computedFields?.[key] && !field) {\n      continue\n    }\n    selectionSet[key] = !value\n  }\n}\n\nfunction createExplicitSelection(select: Selection, context: SerializeContext) {\n  const selectionSet: JsonSelectionSet = {}\n  const computedFields = context.getComputedFields()\n  const selectWithComputedFields = computeEngineSideSelection(select, computedFields)\n\n  for (const [key, value] of Object.entries(selectWithComputedFields)) {\n    if (isSkip(value)) {\n      continue\n    }\n    const nestedContext = context.nestSelection(key)\n    validateSelectionForUndefined(value, nestedContext)\n    const field = context.findField(key)\n    if (computedFields?.[key] && !field) {\n      continue\n    }\n    if (value === false || value === undefined || isSkip(value)) {\n      selectionSet[key] = false\n      continue\n    }\n    if (value === true) {\n      if (field?.kind === 'object') {\n        selectionSet[key] = serializeFieldSelection({}, nestedContext)\n      } else {\n        selectionSet[key] = true\n      }\n      continue\n    }\n    selectionSet[key] = serializeFieldSelection(value, nestedContext)\n  }\n  return selectionSet\n}\n\nfunction serializeArgumentsValue(\n  jsValue: Exclude<JsInputValue, undefined | Skip>,\n  context: SerializeContext,\n): JsonArgumentValue {\n  if (jsValue === null) {\n    return null\n  }\n\n  if (typeof jsValue === 'string' || typeof jsValue === 'number' || typeof jsValue === 'boolean') {\n    return jsValue\n  }\n\n  if (typeof jsValue === 'bigint') {\n    return { $type: 'BigInt', value: String(jsValue) }\n  }\n\n  if (isDate(jsValue)) {\n    if (isValidDate(jsValue)) {\n      return { $type: 'DateTime', value: jsValue.toISOString() }\n    } else {\n      context.throwValidationError({\n        kind: 'InvalidArgumentValue',\n        selectionPath: context.getSelectionPath(),\n        argumentPath: context.getArgumentPath(),\n        argument: {\n          name: context.getArgumentName(),\n          typeNames: ['Date'],\n        },\n        underlyingError: 'Provided Date object is invalid',\n      })\n    }\n  }\n\n  if (isParam(jsValue)) {\n    return { $type: 'Param', value: jsValue.name }\n  }\n\n  if (isFieldRef(jsValue)) {\n    return { $type: 'FieldRef', value: { _ref: jsValue.name, _container: jsValue.modelName } }\n  }\n\n  if (Array.isArray(jsValue)) {\n    return serializeArgumentsArray(jsValue, context)\n  }\n\n  if (ArrayBuffer.isView(jsValue)) {\n    const { buffer, byteOffset, byteLength } = jsValue\n    // TODO(perf): get rid of this conversion\n    return { $type: 'Bytes', value: Buffer.from(buffer, byteOffset, byteLength).toString('base64') }\n  }\n\n  if (isRawParameters(jsValue)) {\n    return jsValue.values\n  }\n\n  if (isDecimalJsLike(jsValue)) {\n    return { $type: 'Decimal', value: jsValue.toFixed() }\n  }\n\n  if (isObjectEnumValue(jsValue)) {\n    const name = jsValue._getName()\n    if (name !== 'DbNull' && name !== 'JsonNull' && name !== 'AnyNull') {\n      throw new Error(`Invalid ObjectEnumValue: expected DbNull, JsonNull, or AnyNull, got ${name}`)\n    }\n    return { $type: 'Enum', value: name }\n  }\n\n  if (isJSONConvertible(jsValue)) {\n    return jsValue.toJSON() as JsonArgumentValue\n  }\n\n  if (typeof jsValue === 'object') {\n    return serializeArgumentsObject(jsValue, context)\n  }\n\n  context.throwValidationError({\n    kind: 'InvalidArgumentValue',\n    selectionPath: context.getSelectionPath(),\n    argumentPath: context.getArgumentPath(),\n    argument: {\n      name: context.getArgumentName(),\n      typeNames: [],\n    },\n    underlyingError: `We could not serialize ${Object.prototype.toString.call(\n      jsValue,\n    )} value. Serialize the object to JSON or implement a \".toJSON()\" method on it`,\n  })\n}\n\nfunction serializeArgumentsObject(\n  object: Record<string, JsInputValue>,\n  context: SerializeContext,\n): Record<string, JsonArgumentValue> | RawTaggedValue {\n  if (context.shouldWrapRawValues()) {\n    if (object['$type']) {\n      return { $type: 'Raw', value: object }\n    }\n  }\n  const result: Record<string, JsonArgumentValue> = {}\n  for (const key in object) {\n    const value = object[key]\n    const nestedContext = context.nestArgument(key)\n    if (isSkip(value)) {\n      continue\n    }\n    if (value !== undefined) {\n      result[key] = serializeArgumentsValue(value, nestedContext)\n    } else if (context.isPreviewFeatureOn('strictUndefinedChecks')) {\n      context.throwValidationError({\n        kind: 'InvalidArgumentValue',\n        argumentPath: nestedContext.getArgumentPath(),\n        selectionPath: context.getSelectionPath(),\n        argument: { name: context.getArgumentName(), typeNames: [] },\n        underlyingError: STRICT_UNDEFINED_ERROR_MESSAGE,\n      })\n    }\n  }\n  return result\n}\n\nfunction serializeArgumentsArray(array: JsInputValue[], context: SerializeContext): JsonArgumentValue[] {\n  const result: JsonArgumentValue[] = []\n  for (let i = 0; i < array.length; i++) {\n    const itemContext = context.nestArgument(String(i))\n    const value = array[i]\n    if (value === undefined || isSkip(value)) {\n      const valueName = value === undefined ? 'undefined' : `Prisma.skip`\n      context.throwValidationError({\n        kind: 'InvalidArgumentValue',\n        selectionPath: itemContext.getSelectionPath(),\n        argumentPath: itemContext.getArgumentPath(),\n        argument: {\n          name: `${context.getArgumentName()}[${i}]`,\n          typeNames: [],\n        },\n        underlyingError: `Can not use \\`${valueName}\\` value within array. Use \\`null\\` or filter out \\`${valueName}\\` values`,\n      })\n    }\n    result.push(serializeArgumentsValue(value, itemContext))\n  }\n  return result\n}\n\nfunction isRawParameters(value: JsInputValue): value is RawParameters {\n  return typeof value === 'object' && value !== null && value['__prismaRawParameters__'] === true\n}\n\nfunction isJSONConvertible(value: JsInputValue): value is JsonConvertible {\n  return typeof value === 'object' && value !== null && typeof value['toJSON'] === 'function'\n}\n\nfunction validateSelectionForUndefined(value: unknown, context: SerializeContext) {\n  if (value === undefined && context.isPreviewFeatureOn('strictUndefinedChecks')) {\n    context.throwValidationError({\n      kind: 'InvalidSelectionValue',\n      selectionPath: context.getSelectionPath(),\n      underlyingError: STRICT_UNDEFINED_ERROR_MESSAGE,\n    })\n  }\n}\n\ntype ContextParams = {\n  runtimeDataModel: RuntimeDataModel\n  originalMethod: string\n  rootArgs: JsArgs | undefined\n  extensions: MergedExtensionsList\n  selectionPath: string[]\n  argumentPath: string[]\n  modelName?: string\n  action: Action\n  callsite?: CallSite\n  errorFormat: ErrorFormat\n  clientVersion: string\n  previewFeatures: string[]\n  globalOmit?: GlobalOmitOptions\n  wrapRawValues?: boolean\n}\n\nclass SerializeContext {\n  public readonly modelOrType: RuntimeModel | undefined\n  constructor(private params: ContextParams) {\n    if (this.params.modelName) {\n      // TODO: throw if not found\n      this.modelOrType =\n        this.params.runtimeDataModel.models[this.params.modelName] ??\n        this.params.runtimeDataModel.types[this.params.modelName]\n    }\n  }\n\n  throwValidationError(error: ValidationError): never {\n    throwValidationException({\n      errors: [error],\n      originalMethod: this.params.originalMethod,\n      args: this.params.rootArgs ?? {},\n      callsite: this.params.callsite,\n      errorFormat: this.params.errorFormat,\n      clientVersion: this.params.clientVersion,\n      globalOmit: this.params.globalOmit,\n    })\n  }\n\n  getSelectionPath() {\n    return this.params.selectionPath\n  }\n\n  getArgumentPath() {\n    return this.params.argumentPath\n  }\n\n  getArgumentName() {\n    return this.params.argumentPath[this.params.argumentPath.length - 1]\n  }\n\n  getOutputTypeDescription(): OutputTypeDescription | undefined {\n    if (!this.params.modelName || !this.modelOrType) {\n      return undefined\n    }\n    return {\n      name: this.params.modelName,\n      fields: this.modelOrType.fields.map((field) => ({\n        name: field.name,\n        typeName: 'boolean',\n        isRelation: field.kind === 'object',\n      })),\n    }\n  }\n\n  isRawAction() {\n    return ['executeRaw', 'queryRaw', 'runCommandRaw', 'findRaw', 'aggregateRaw'].includes(this.params.action)\n  }\n\n  isPreviewFeatureOn(previewFeature: string) {\n    return this.params.previewFeatures.includes(previewFeature)\n  }\n\n  shouldWrapRawValues(): boolean {\n    return this.params.wrapRawValues ?? true\n  }\n\n  getComputedFields() {\n    if (!this.params.modelName) {\n      return undefined\n    }\n\n    return this.params.extensions.getAllComputedFields(this.params.modelName)\n  }\n\n  findField(name: string) {\n    return this.modelOrType?.fields.find((field) => field.name === name)\n  }\n\n  nestSelection(fieldName: string) {\n    const field = this.findField(fieldName)\n    const modelName = field?.kind === 'object' ? field.type : undefined\n\n    return new SerializeContext({\n      ...this.params,\n      modelName,\n      selectionPath: this.params.selectionPath.concat(fieldName),\n    })\n  }\n\n  getGlobalOmit(): Record<string, boolean> {\n    if (this.params.modelName && this.shouldApplyGlobalOmit()) {\n      return this.params.globalOmit?.[uncapitalize(this.params.modelName)] ?? {}\n    }\n    return {}\n  }\n\n  shouldApplyGlobalOmit(): boolean {\n    switch (this.params.action) {\n      case 'findFirst':\n      case 'findFirstOrThrow':\n      case 'findUniqueOrThrow':\n      case 'findMany':\n      case 'upsert':\n      case 'findUnique':\n      case 'createManyAndReturn':\n      case 'create':\n      case 'update':\n      case 'updateManyAndReturn':\n      case 'delete':\n        return true\n      case 'executeRaw':\n      case 'aggregateRaw':\n      case 'runCommandRaw':\n      case 'findRaw':\n      case 'createMany':\n      case 'deleteMany':\n      case 'groupBy':\n      case 'updateMany':\n      case 'count':\n      case 'aggregate':\n      case 'queryRaw':\n        return false\n      default:\n        assertNever(this.params.action, 'Unknown action')\n    }\n  }\n\n  nestArgument(fieldName: string) {\n    return new SerializeContext({\n      ...this.params,\n      argumentPath: this.params.argumentPath.concat(fieldName),\n    })\n  }\n}\n", "export * from './Cache'\nexport * from './casing'\nexport * from './client-config'\nexport * from './Dictionary'\nexport * from './dmmf'\nexport * from './enums'\nexport * from './lazyProperty'\nexport * from './omit'\nexport * from './operations'\nexport * from './QueryCompiler'\nexport * from './QueryEngine'\nexport * from './runtimeDataModel'\nexport * from './uniqueBy'\n", "type CacheEntry<V> = {\n  value: V\n}\nexport class Cache<K, V> {\n  private _map = new Map<K, CacheEntry<V>>()\n\n  get(key: K): V | undefined {\n    return this._map.get(key)?.value\n  }\n\n  set(key: K, value: V): void {\n    this._map.set(key, { value })\n  }\n\n  getOrCreate(key: K, create: () => V): V {\n    const cached = this._map.get(key)\n    if (cached) {\n      return cached.value\n    }\n    const value = create()\n    this.set(key, value)\n    return value\n  }\n}\n", "/**\n * Converts the first character of a word to upper case.\n */\nexport function capitalize<T extends string>(self: T): Capitalize<T> {\n  if (self.length === 0) return self as Capitalize<T>\n\n  return (self[0].toUpperCase() + self.slice(1)) as Capitalize<T>\n}\n\n/**\n * Converts the first character of a word to lower case.\n */\nexport function uncapitalize<T extends string>(self: T): Uncapitalize<T> {\n  return (self.substring(0, 1).toLowerCase() + self.substring(1)) as Uncapitalize<T>\n}\n", "export interface Dictionary<T> {\n  [key: string]: T\n}\n\nexport function keyBy<P extends PropertyKey, T extends { [key in P]: string }>(\n  collection: readonly T[],\n  prop: P,\n): Dictionary<T> {\n  const acc: Dictionary<T> = {}\n\n  for (const obj of collection) {\n    const key = obj[prop]\n    acc[key] = obj\n  }\n\n  return acc\n}\n", "export type LazyProperty<T> = {\n  get: () => T\n}\n\nexport function lazyProperty<T>(compute: () => T): LazyProperty<T> {\n  let resultContainer: undefined | { value: T }\n\n  return {\n    get() {\n      if (resultContainer) {\n        return resultContainer.value\n      }\n      resultContainer = { value: compute() }\n      return resultContainer.value\n    },\n  }\n}\n", "import type * as DMMF from '@prisma/dmmf'\n\nexport type RuntimeModel = Omit<DMMF.Model, 'name'>\nexport type RuntimeEnum = Omit<DMMF.DatamodelEnum, 'name'>\n\nexport type RuntimeDataModel = {\n  readonly models: Record<string, RuntimeModel>\n  readonly enums: Record<string, RuntimeEnum>\n  readonly types: Record<string, RuntimeModel>\n}\n\nexport type PrunedRuntimeModel = {\n  readonly dbName: RuntimeModel['dbName']\n  readonly schema: RuntimeModel['schema']\n  readonly fields: Pick<RuntimeModel['fields'][number], 'name' | 'kind' | 'type' | 'relationName' | 'dbName'>[]\n}\n\nexport type PrunedRuntimeDataModel = {\n  readonly models: Record<string, PrunedRuntimeModel>\n  readonly enums: {}\n  readonly types: {}\n}\n\nexport function dmmfToRuntimeDataModel(dmmfDataModel: DMMF.Datamodel): RuntimeDataModel {\n  return {\n    models: buildMapForRuntime(dmmfDataModel.models),\n    enums: buildMapForRuntime(dmmfDataModel.enums),\n    types: buildMapForRuntime(dmmfDataModel.types),\n  }\n}\n\n/**\n * Minimal version of the runtime datamodel for the Client to work\n * @param runtimeDataModel\n * @returns\n */\nexport function pruneRuntimeDataModel({ models }: RuntimeDataModel) {\n  const prunedModels: PrunedRuntimeDataModel['models'] = {}\n\n  for (const modelName of Object.keys(models)) {\n    prunedModels[modelName] = { fields: [], dbName: models[modelName].dbName, schema: models[modelName].schema }\n\n    for (const { name, kind, type, relationName, dbName } of models[modelName].fields) {\n      prunedModels[modelName].fields.push({ name, kind, type, relationName, dbName })\n    }\n  }\n\n  return { models: prunedModels, enums: {}, types: {} }\n}\n\nfunction buildMapForRuntime<T extends { name: string }>(list: readonly T[]): Record<string, Omit<T, 'name'>> {\n  const result: Record<string, Omit<T, 'name'>> = {}\n  for (const { name, ...rest } of list) {\n    result[name] = rest\n  }\n  return result\n}\n", "export { BuiltInProvider } from './built-in-provider'\nexport { checkUnsupportedDataProxy } from './cli/checkUnsupportedDataProxy'\nexport {\n  completionApiKeyHint,\n  completionClientOutputPaths,\n  completionCompositeTypeDepths,\n  completionConfigPaths,\n  completionDatabaseIdHint,\n  completionDatabaseSchemas,\n  completionDatasourceProviders,\n  completionDatasourceUrls,\n  completionDevDbPorts,\n  completionDevHttpPorts,\n  completionDevServerNames,\n  completionDevShadowDbPorts,\n  completionDiffOutputPaths,\n  completionGeneratorNames,\n  completionGeneratorProviders,\n  completionMigrationIds,\n  completionMigrationNames,\n  completionMigrationsDirPaths,\n  completionPreviewFeatures,\n  completionSchemaPaths,\n  completionSqlScriptPaths,\n  completionStudioBrowsers,\n  completionStudioPorts,\n} from './cli/completion-values'\nexport { type DirectoryConfig, inferDirectoryConfig } from './cli/directoryConfig'\nexport { getGeneratorSuccessMessage } from './cli/getGeneratorSuccessMessage'\nexport {\n  createSchemaPathInput,\n  type GetSchemaOptions,\n  getSchemaWithPath,\n  getSchemaWithPathOptional,\n  printSchemaLoadedMessage,\n  type SchemaPathInput,\n} from './cli/getSchema'\nexport { getTypescriptVersion } from './cli/getTypescriptVersion'\nexport { getCLIPathHash, getProjectHash } from './cli/hashes'\nexport { unknownCommand } from './cli/Help'\nexport { HelpError } from './cli/Help'\nexport {\n  getSchemaDatasourceProvider,\n  loadSchemaContext,\n  processSchemaResult,\n  type SchemaContext,\n} from './cli/schemaContext'\nexport type {\n  Command,\n  CommandCompletion,\n  Commands,\n  CompiledGeneratorDefinition,\n  CompletionOption,\n  CompletionValue,\n  Dictionary,\n  GeneratorConfig,\n  GeneratorDefinition,\n  GeneratorDefinitionWithPackage,\n  GeneratorFunction,\n  GeneratorOptions,\n} from './cli/types'\nexport { arg, format, isError } from './cli/utils'\nexport { credentialsToUri, protocolToConnectorType, uriToCredentials } from './convertCredentials'\nexport * from './engine-commands'\nexport { relativizePathInPSLError } from './engine-commands/relativizePathInPSLError'\nexport { Generator } from './Generator'\nexport {\n  type GeneratorRegistry,\n  type GeneratorRegistryEntry,\n  getGenerator,\n  getGenerators,\n} from './get-generators/getGenerators'\nexport { fixBinaryTargets } from './get-generators/utils/fixBinaryTargets'\nexport { printGeneratorConfig } from './get-generators/utils/printGeneratorConfig'\nexport { getPackedPackage } from './getPackedPackage'\nexport { highlightDatamodel, highlightSql, highlightTS } from './highlight/highlight'\nexport * as logger from './logger'\nexport type { MigrateTypes } from './migrateTypes'\nexport { ErrorArea, getWasmError, isRustPanic, isWasmPanic, RustPanic } from './panic'\nexport { BinaryType } from './resolveBinary'\nexport { engineEnvVarMap, resolveBinary } from './resolveBinary'\nexport { resolvePkg } from './resolvePkg'\nexport type { SchemaEngineLogLine } from './schemaEngineCommands'\nexport { canConnectToDatabase, createDatabase, dropDatabase } from './schemaEngineCommands'\nexport { SchemaEngineExitCode } from './schemaEngineCommands'\nexport { sendPanic } from './sendPanic'\nexport type { DatabaseCredentials, RequireKey } from './types'\nexport { assertAlways } from './utils/assertAlways'\nexport { assertNever } from './utils/assertNever'\nexport { binaryTargetRegex } from './utils/binaryTargetRegex'\nexport { callOnceOnSuccess } from './utils/callOnce'\nexport { canPrompt } from './utils/canPrompt'\nexport { chmodPlusX } from './utils/chmodPlusX'\nexport { drawBox } from './utils/drawBox'\nexport { extractPreviewFeatures } from './utils/extractPreviewFeatures'\nexport { formatms } from './utils/formatms'\nexport { formatTable } from './utils/formatTable'\nexport * as fsFunctional from './utils/fs-functional'\nexport * as fsUtils from './utils/fs-utils'\nexport { getCommandWithExecutor } from './utils/getCommandWithExecutor'\nexport { version } from './utils/getVersionFromPackageJson'\nexport { handlePanic } from './utils/handlePanic'\nexport { hasOwnProperty } from './utils/hasOwnProperty'\nexport { isCi } from './utils/isCi'\nexport { isCurrentBinInstalledGlobally } from './utils/isCurrentBinInstalledGlobally'\nexport { isInContainer } from './utils/isInContainer'\nexport { isInNpmLifecycleHook } from './utils/isInNpmLifecycleHook'\nexport { isInteractive } from './utils/isInteractive'\nexport { isPromiseLike } from './utils/isPromiseLike'\nexport { isValidJsIdentifier } from './utils/isValidJsIdentifier'\nexport { keyBy } from './utils/keyBy'\nexport { link } from './utils/link'\nexport { mapObjectValues } from './utils/mapObjectValues'\nexport { maxBy, maxWithComparator } from './utils/max'\nexport { maybeInGitHook } from './utils/maybeInGitHook'\nexport { missingGeneratorMessage } from './utils/missingGeneratorMessage'\nexport { parseAWSNodejsRuntimeEnvVarVersion } from './utils/parseAWSNodejsRuntimeEnvVarVersion'\nexport { parseBinaryTargetsEnvValue, parseEnvValue } from './utils/parseEnvValue'\nexport { longestCommonPathPrefix, pathToPosix } from './utils/path'\nexport { pick } from './utils/pick'\nexport { printConfigWarnings } from './utils/printConfigWarnings'\nexport {\n  isPrismaPostgres,\n  isPrismaPostgresDev,\n  PRISMA_POSTGRES_PROTOCOL,\n  PRISMA_POSTGRES_PROVIDER,\n} from './utils/prismaPostgres'\nexport { extractSchemaContent } from './utils/schemaFileInput'\nexport { setClassName } from './utils/setClassName'\nexport { toSchemasContainer, toSchemasWithConfigDir } from './utils/toSchemasContainer'\nexport {\n  type PrismaConfigWithDatasource,\n  validatePrismaConfigWithDatasource,\n} from './utils/validatePrismaConfigWithDatasource'\nexport { vercelPkgPathRegex } from './utils/vercelPkgPathRegex'\nexport { warnOnce } from './warnOnce'\nexport * as wasm from './wasm'\nexport { wasmSchemaEngineLoader } from './WasmSchemaEngineLoader'\nexport { type MultipleSchemas, type SchemaFileInput } from '@prisma/get-dmmf'\nexport type { BinaryTarget } from '@prisma/get-platform'\nexport { getBinaryTargetForCurrentPlatform } from '@prisma/get-platform'\nexport type { GetSchemaResult } from '@prisma/schema-files-loader'\n", "let FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {});\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nexport const $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t)\n}\n\nfunction init(x, y) {\n\tlet rgx = new RegExp(`\\\\x1b\\\\[${y}m`, 'g');\n\tlet open = `\\x1b[${x}m`, close = `\\x1b[${y}m`;\n\n\treturn function (txt) {\n\t\tif (!$.enabled || txt == null) return txt;\n\t\treturn open + (!!~(''+txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + close;\n\t};\n}\n\n// modifiers\nexport const reset = init(0, 0);\nexport const bold = init(1, 22);\nexport const dim = init(2, 22);\nexport const italic = init(3, 23);\nexport const underline = init(4, 24);\nexport const inverse = init(7, 27);\nexport const hidden = init(8, 28);\nexport const strikethrough = init(9, 29);\n\n// colors\nexport const black = init(30, 39);\nexport const red = init(31, 39);\nexport const green = init(32, 39);\nexport const yellow = init(33, 39);\nexport const blue = init(34, 39);\nexport const magenta = init(35, 39);\nexport const cyan = init(36, 39);\nexport const white = init(37, 39);\nexport const gray = init(90, 39);\nexport const grey = init(90, 39);\n\n// background colors\nexport const bgBlack = init(40, 49);\nexport const bgRed = init(41, 49);\nexport const bgGreen = init(42, 49);\nexport const bgYellow = init(43, 49);\nexport const bgBlue = init(44, 49);\nexport const bgMagenta = init(45, 49);\nexport const bgCyan = init(46, 49);\nexport const bgWhite = init(47, 49);\n", "import * as kleur from 'kleur/colors'\nimport { bold } from 'kleur/colors'\n\nconst MAX_ARGS_HISTORY = 100\nconst COLORS = ['green', 'yellow', 'blue', 'magenta', 'cyan', 'red']\n\nconst argsHistory: [namespace: string, ...unknown[]][] = []\nlet lastTimestamp = Date.now()\nlet lastColor = 0\n\nconst processEnv = typeof process !== 'undefined' ? process.env : {}\n\nglobalThis.DEBUG ??= processEnv.DEBUG ?? ''\nglobalThis.DEBUG_COLORS ??= processEnv.DEBUG_COLORS ? processEnv.DEBUG_COLORS === 'true' : true\n\n/**\n * Top-level utilities to configure the debug module.\n *\n * @example\n * ```ts\n * import Debug from '@prisma/debug'\n * Debug.enable('prisma:client')\n * const debug = Debug('prisma:client')\n * debug('Hello World')\n * ```\n */\nconst topProps = {\n  enable(namespace: any) {\n    if (typeof namespace === 'string') {\n      globalThis.DEBUG = namespace\n    }\n  },\n  disable() {\n    const prev = globalThis.DEBUG\n    globalThis.DEBUG = ''\n    return prev\n  },\n  // this is the core logic to check if logging should happen or not\n  enabled(namespace: string) {\n    // these are the namespaces that we are listening to in DEBUG=...\n    const listenedNamespaces: string[] = globalThis.DEBUG.split(',').map((s: string) => {\n      return s.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&') // escape regex except \"*\"\n    })\n\n    // we take incoming namespaces and check then against listened\n    const isListened = listenedNamespaces.some((listenedNamespace) => {\n      if (listenedNamespace === '' || listenedNamespace[0] === '-') return false\n\n      return namespace.match(RegExp(listenedNamespace.split('*').join('.*') + '$'))\n    })\n\n    // we take incoming namespaces and check then against excluded\n    const isExcluded = listenedNamespaces.some((listenedNamespace) => {\n      if (listenedNamespace === '' || listenedNamespace[0] !== '-') return false\n\n      return namespace.match(RegExp(listenedNamespace.slice(1).split('*').join('.*') + '$'))\n    })\n\n    return isListened && !isExcluded\n  },\n  log: (...args: string[]) => {\n    const [namespace, format, ...rest] = args\n    // Note: `console.warn` / `console.log` use `util.format` internally, so they can handle\n    // `printf`-style string interpolation.\n    const logWithFormatting = console.warn ?? console.log\n\n    // console only formats first arg, concat ns+format\n    logWithFormatting(`${namespace} ${format}`, ...rest)\n  },\n  formatters: {}, // not implemented\n}\n\n/**\n * Create a new debug instance with the given namespace.\n *\n * @example\n * ```ts\n * import Debug from '@prisma/debug'\n * const debug = Debug('prisma:client')\n * debug('Hello World')\n * ```\n */\nfunction debugCreate(namespace: string) {\n  const instanceProps = {\n    color: COLORS[lastColor++ % COLORS.length],\n    enabled: topProps.enabled(namespace),\n    namespace: namespace,\n    log: topProps.log,\n    extend: () => {}, // not implemented\n  }\n\n  const debugCall = (...args: any[]) => {\n    const { enabled, namespace, color, log } = instanceProps\n\n    // we push the args to our history of args\n    if (args.length !== 0) {\n      argsHistory.push([namespace, ...args])\n    }\n\n    // if it is too big, then we remove some\n    if (argsHistory.length > MAX_ARGS_HISTORY) {\n      argsHistory.shift()\n    }\n\n    if (topProps.enabled(namespace) || enabled) {\n      const stringArgs = args.map((arg) => {\n        if (typeof arg === 'string') {\n          return arg\n        }\n\n        return safeStringify(arg)\n      })\n\n      const ms = `+${Date.now() - lastTimestamp}ms`\n      lastTimestamp = Date.now()\n\n      if (globalThis.DEBUG_COLORS) {\n        log(kleur[color](bold(namespace)), ...stringArgs, kleur[color](ms))\n      } else {\n        log(namespace, ...stringArgs, ms)\n      }\n    }\n  }\n\n  return new Proxy(debugCall, {\n    get: (_, prop) => instanceProps[prop],\n    set: (_, prop, value) => (instanceProps[prop] = value),\n  }) as typeof debugCall & typeof instanceProps\n}\n\nconst Debug = new Proxy(debugCreate, {\n  get: (_, prop) => topProps[prop],\n  set: (_, prop, value) => (topProps[prop] = value),\n}) as typeof debugCreate & typeof topProps\n\nfunction safeStringify(value: any, indent = 2) {\n  const cache = new Set<any>()\n\n  return JSON.stringify(\n    value,\n    (key, value) => {\n      if (typeof value === 'object' && value !== null) {\n        if (cache.has(value)) {\n          return `[Circular *]`\n        }\n\n        cache.add(value)\n      } else if (typeof value === 'bigint') {\n        return value.toString()\n      }\n\n      return value\n    },\n    indent,\n  )\n}\n\n/**\n * We can get the logs for all the last {@link MAX_ARGS_HISTORY} ${@link debugCall} that\n * have happened in the different packages. Useful to generate error report links.\n * @see https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers\n * @param numChars\n * @returns\n */\nexport function getLogs(numChars = 7500): string {\n  const logs = argsHistory\n    .map(([namespace, ...args]) => {\n      return `${namespace} ${args\n        .map((arg) => {\n          if (typeof arg === 'string') {\n            return arg\n          } else {\n            return JSON.stringify(arg)\n          }\n        })\n        .join(' ')}`\n    })\n    .join('\\n')\n\n  if (logs.length < numChars) {\n    return logs\n  }\n\n  return logs.slice(-numChars)\n}\n\nexport function clearLogs() {\n  argsHistory.length = 0\n}\n\nexport { Debug }\nexport default Debug\n", "export { type BinaryTarget, binaryTargets } from './binaryTargets'\nexport type { PlatformInfo } from './getPlatform'\nexport { getBinaryTargetForCurrentPlatform, getos, getPlatformInfo } from './getPlatform'\nexport { link } from './link'\nexport * from './test-utils'\n", "/**\n * Utility function to ensure exhaustive checks for union types.\n *\n * @example\n *   ```ts\n *   declare const fruit: 'Apple' | 'Orange'\n *\n *   switch (fruit) {\n *     case 'Apple:\n *       // do apple things\n *       break;\n *     case 'Orange:\n *       // do orange things\n *       break;\n *     default:\n *       // in case `fruit` type will expand in the future,\n *       // we'll get a compile-time error here, listing all unhandled\n *       // cases\n *       assertNever(fruit, 'Unknown fruit')\n *   }\n *   ```\n * @param arg variable of the any union type. By the time `assertNever` is called\n * all possible cases of this union must already be handled\n * @param errorMessage error message to throw in runtime. Normally, should never happen\n * unless compile-time check is skipped\n */\nexport function assertNever(arg: never, errorMessage: string): never {\n  throw new Error(errorMessage)\n}\n", "export const PRISMA_POSTGRES_PROVIDER = 'prisma+postgres'\n\nexport const PRISMA_POSTGRES_PROTOCOL = `${PRISMA_POSTGRES_PROVIDER}:`\n\ndeclare const prismaPostgresBrand: unique symbol\ndeclare const prismaPostgresDevBrand: unique symbol\n\nexport type PrismaPostgresUrl<T extends string | URL> = T & {\n  readonly [prismaPostgresBrand]: true\n}\n\nexport type PrismaPostgresDevUrl<T extends string | URL> = PrismaPostgresUrl<T> & {\n  readonly [prismaPostgresDevBrand]: true\n}\n\nexport function isPrismaPostgres<T extends string | URL>(\n  connectionString?: T,\n): connectionString is PrismaPostgresUrl<T> {\n  return connectionString?.toString().startsWith(`${PRISMA_POSTGRES_PROTOCOL}//`) ?? false\n}\n\nexport function isPrismaPostgresDev<T extends string | URL>(\n  connectionString?: T,\n): connectionString is PrismaPostgresDevUrl<T> {\n  if (!isPrismaPostgres(connectionString)) {\n    return false\n  }\n\n  const { host } = new URL(connectionString)\n\n  return host.includes('localhost') || host.includes('127.0.0.1') || host.includes('[::1]')\n}\n", "import { blue, cyan, red, yellow } from 'kleur/colors'\n\nexport const tags = {\n  error: red('prisma:error'),\n  warn: yellow('prisma:warn'),\n  info: cyan('prisma:info'),\n  query: blue('prisma:query'),\n}\nexport const should = {\n  warn: () => !process.env.PRISMA_DISABLE_WARNINGS,\n}\nexport function log(...data: any[]) {\n  console.log(...data)\n}\nexport function warn(message: any, ...optionalParams: any[]) {\n  if (should.warn()) {\n    console.warn(`${tags.warn} ${message}`, ...optionalParams)\n  }\n}\nexport function info(message: any, ...optionalParams: any[]) {\n  console.info(`${tags.info} ${message}`, ...optionalParams)\n}\nexport function error(message: any, ...optionalParams: any[]) {\n  console.error(`${tags.error} ${message}`, ...optionalParams)\n}\nexport function query(message: any, ...optionalParams: any[]) {\n  console.log(`${tags.query} ${message}`, ...optionalParams)\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "export function hasOwnProperty(object: object, key: PropertyKey): boolean {\n  return Object.prototype.hasOwnProperty.call(object, key)\n}\n", "export function mapObjectValues<K extends PropertyKey, T, U>(\n  object: Record<K, T>,\n  mapper: (value: T, key: K) => U,\n): Record<K, U> {\n  const result = {} as Record<K, U>\n\n  for (const key of Object.keys(object)) {\n    result[key] = mapper(object[key] as T, key as K)\n  }\n\n  return result\n}\n", "/**\n * Accepts an array and comparator function (similar to Array.prototype.sort)\n * and returns max element of that array, ordered with that comparator.\n * Functionally, equivalent of items.sort(comparator).at(-1), but performed non-destructively\n * in O(n)\n * @param items\n * @param comparator callback specifying the relative order of two items. See `Array.prototype.sort`\n * @returns\n */\nexport function maxWithComparator<T>(items: T[], comparator: (a: T, b: T) => number): T | undefined {\n  if (items.length === 0) {\n    return undefined\n  }\n  let result = items[0]\n\n  for (let i = 1; i < items.length; i++) {\n    const compareValue = comparator(result, items[i])\n    // comparator returning negative number means that b>a\n    if (compareValue < 0) {\n      result = items[i]\n    }\n  }\n  return result\n}\n\nexport function maxBy<T>(items: T[], callback: (item: T) => number): T | undefined {\n  return maxWithComparator(items, (a, b) => callback(a) - callback(b))\n}\n", "/**\n * Used for preserving class names for minified class instances\n * Useful for error objects and other classes where public name\n * actually matters\n *\n * @param classObject\n * @param name\n */\nexport function setClassName(classObject: Function, name: string) {\n  Object.defineProperty(classObject, 'name', {\n    value: name,\n    configurable: true,\n  })\n}\n", "import { warn } from './logger'\n\nconst alreadyWarned = new Set()\n\nexport const warnOnce = (key: string, message: string, ...args: unknown[]) => {\n  if (!alreadyWarned.has(key)) {\n    alreadyWarned.add(key)\n    warn(message, ...args)\n  }\n}\n", "export function isDate(value: unknown): value is Date {\n  return (\n    value instanceof Date ||\n    // date created in other JS context (for example, worker)\n    Object.prototype.toString.call(value) === '[object Date]'\n  )\n}\n\nexport function isValidDate(date: Date) {\n  return date.toString() !== 'Invalid Date'\n}\n", "import { Decimal } from '@prisma/client-runtime-utils'\n\nimport { DecimalJsLike } from '../core/types/exported/DecimalJsLike'\n\nexport function isDecimalJsLike(value: unknown): value is DecimalJsLike {\n  if (Decimal.isDecimal(value)) {\n    return true\n  }\n  return (\n    value !== null &&\n    typeof value === 'object' &&\n    typeof value['s'] === 'number' &&\n    typeof value['e'] === 'number' &&\n    typeof value['toFixed'] === 'function' &&\n    Array.isArray(value['d'])\n  )\n}\n", "import { PrismaClientValidationError } from '@prisma/client-runtime-utils'\n\nimport { ErrorFormat } from '../../getPrismaClient'\nimport { CallSite } from '../../utils/CallSite'\nimport { createErrorMessageWithContext } from '../../utils/createErrorMessageWithContext'\nimport { GlobalOmitOptions } from '../jsonProtocol/serializeJsonQuery'\nimport { JsArgs } from '../types/exported/JsApi'\nimport { ValidationError } from '../types/ValidationError'\nimport { applyValidationError } from './applyValidationError'\nimport { buildArgumentsRenderingTree, renderArgsTree } from './ArgumentsRenderingTree'\n\ntype ExceptionParams = {\n  errors: ValidationError[]\n  args: JsArgs\n  callsite?: CallSite\n  originalMethod: string\n  errorFormat: ErrorFormat\n  clientVersion: string\n  globalOmit?: GlobalOmitOptions\n}\n\nexport function throwValidationException({\n  args,\n  errors,\n  errorFormat,\n  callsite,\n  originalMethod,\n  clientVersion,\n  globalOmit,\n}: ExceptionParams): never {\n  const argsTree = buildArgumentsRenderingTree(args)\n  for (const error of errors) {\n    applyValidationError(error, argsTree, globalOmit)\n  }\n\n  const { message, args: renderedArgs } = renderArgsTree(argsTree, errorFormat)\n\n  const messageWithContext = createErrorMessageWithContext({\n    message,\n    callsite,\n    originalMethod,\n    showColors: errorFormat === 'pretty',\n    callArguments: renderedArgs,\n  })\n\n  throw new PrismaClientValidationError(messageWithContext, { clientVersion })\n}\n", "import * as DMMF from '@prisma/dmmf'\nimport indentString from 'indent-string'\nimport { bold, dim, gray, red, underline } from 'kleur/colors'\n\nimport { CallSite, LocationInFile } from './CallSite'\nimport { SourceFileSlice } from './SourceFileSlice'\n\ndeclare global {\n  /**\n   * a global variable that is injected by us via jest to make our snapshots\n   * work in clients that cannot read from disk (e.g. wasm or edge clients)\n   */\n  let $getTemplateParameters: typeof getTemplateParameters | undefined\n}\n\nexport interface ErrorArgs {\n  callsite?: CallSite\n  originalMethod: string\n  message: string\n  isPanic?: boolean\n  showColors?: boolean\n  callArguments?: string\n}\n\ntype Colors = {\n  red: (str: string) => string\n  gray: (str: string) => string\n  dim: (str: string) => string\n  bold: (str: string) => string\n  underline: (str: string) => string\n  highlightSource: (source: SourceFileSlice) => SourceFileSlice\n}\n\nconst colorsEnabled: Colors = {\n  red,\n  gray,\n  dim,\n  bold,\n  underline,\n  highlightSource: (source) => source.highlight(),\n}\n\nconst colorsDisabled: Colors = {\n  red: (str) => str,\n  gray: (str) => str,\n  dim: (str) => str,\n  bold: (str) => str,\n  underline: (str) => str,\n  highlightSource: (source) => source,\n}\n\ntype ErrorContextTemplateParameters = {\n  functionName: string\n  message: string\n  location?: LocationInFile\n  contextLines?: SourceFileSlice\n  callArguments?: string\n  isPanic: boolean\n}\n\nfunction getRawTemplateParameters({\n  message,\n  originalMethod,\n  isPanic,\n  callArguments,\n}: ErrorArgs): ErrorContextTemplateParameters {\n  return {\n    functionName: `prisma.${originalMethod}()`,\n    message,\n    isPanic: isPanic ?? false,\n    callArguments,\n  }\n}\n\nexport function getTemplateParameters(\n  { callsite, message, originalMethod, isPanic, callArguments }: ErrorArgs,\n  colors: Colors,\n): ErrorContextTemplateParameters {\n  const templateParameters = getRawTemplateParameters({ message, originalMethod, isPanic, callArguments })\n\n  // @ts-ignore\n  if (!callsite || typeof window !== 'undefined') {\n    return templateParameters\n  }\n\n  if (process.env.NODE_ENV === 'production') {\n    return templateParameters\n  }\n\n  const callLocation = callsite.getLocation()\n  if (!callLocation || !callLocation.lineNumber || !callLocation.columnNumber) {\n    return templateParameters\n  }\n\n  const contextFirstLine = Math.max(1, callLocation.lineNumber - 3)\n  let source = SourceFileSlice.read(callLocation.fileName)?.slice(contextFirstLine, callLocation.lineNumber)\n  const invocationLine = source?.lineAt(callLocation.lineNumber)\n  if (source && invocationLine) {\n    const invocationLineIndent = getIndent(invocationLine)\n    const invocationCallCode = findPrismaActionCall(invocationLine)\n    if (!invocationCallCode) {\n      return templateParameters\n    }\n    templateParameters.functionName = `${invocationCallCode.code})`\n    templateParameters.location = callLocation\n\n    if (!isPanic) {\n      source = source.mapLineAt(callLocation.lineNumber, (line) => line.slice(0, invocationCallCode.openingBraceIndex))\n    }\n\n    source = colors.highlightSource(source)\n    const numberColumnWidth = String(source.lastLineNumber).length\n    templateParameters.contextLines = source\n      .mapLines((line, lineNumber) => colors.gray(String(lineNumber).padStart(numberColumnWidth)) + ' ' + line)\n      .mapLines((line) => colors.dim(line))\n      .prependSymbolAt(callLocation.lineNumber, colors.bold(colors.red('\u2192')))\n\n    if (callArguments) {\n      let indentValue = invocationLineIndent + numberColumnWidth + 1 /* space between number and code */\n      indentValue += 2 // arrow + space between arrow and number\n\n      // indent all lines but first, because first line of the arguments will be printed\n      // on the same line as the function call\n      templateParameters.callArguments = indentString(callArguments, indentValue).slice(indentValue)\n    }\n  }\n  return templateParameters\n}\n\nfunction findPrismaActionCall(str: string): { code: string; openingBraceIndex: number } | null {\n  const allActions = Object.keys(DMMF.ModelAction).join('|')\n  const regexp = new RegExp(String.raw`\\.(${allActions})\\(`)\n  const match = regexp.exec(str)\n  if (match) {\n    const openingBraceIndex = match.index + match[0].length\n    // to get the code we are slicing the string up to a found brace. We start\n    // with first non-space character if space is found in the line before that or\n    // 0 if it is not.\n    const statementStart = str.lastIndexOf(' ', match.index) + 1\n    return {\n      code: str.slice(statementStart, openingBraceIndex),\n      openingBraceIndex,\n    }\n  }\n  return null\n}\n\nfunction getIndent(line: string): number {\n  let spaceCount = 0\n  for (let i = 0; i < line.length; i++) {\n    if (line.charAt(i) !== ' ') {\n      return spaceCount\n    }\n    spaceCount++\n  }\n\n  return spaceCount\n}\n\nfunction stringifyErrorMessage(\n  { functionName, location, message, isPanic, contextLines, callArguments }: ErrorContextTemplateParameters,\n  colors: Colors,\n) {\n  const lines: string[] = ['']\n\n  const introSuffix = location ? ' in' : ':'\n  if (isPanic) {\n    lines.push(colors.red(`Oops, an unknown error occurred! This is ${colors.bold('on us')}, you did nothing wrong.`))\n    lines.push(colors.red(`It occurred in the ${colors.bold(`\\`${functionName}\\``)} invocation${introSuffix}`))\n  } else {\n    lines.push(colors.red(`Invalid ${colors.bold(`\\`${functionName}\\``)} invocation${introSuffix}`))\n  }\n\n  if (location) {\n    lines.push(colors.underline(stringifyLocationInFile(location)))\n  }\n\n  if (contextLines) {\n    lines.push('')\n\n    const contextLineParts = [contextLines.toString()]\n\n    if (callArguments) {\n      contextLineParts.push(callArguments)\n      contextLineParts.push(colors.dim(')'))\n    }\n    lines.push(contextLineParts.join(''))\n    if (callArguments) {\n      lines.push('')\n    }\n  } else {\n    lines.push('')\n    if (callArguments) {\n      lines.push(callArguments)\n    }\n    lines.push('')\n  }\n\n  lines.push(message)\n  return lines.join('\\n')\n}\n\nfunction stringifyLocationInFile(location: LocationInFile): string {\n  const parts = [location.fileName]\n  if (location.lineNumber) {\n    parts.push(String(location.lineNumber))\n  }\n\n  if (location.columnNumber) {\n    parts.push(String(location.columnNumber))\n  }\n\n  return parts.join(':')\n}\n\nexport function createErrorMessageWithContext(args: ErrorArgs): string {\n  const colors = args.showColors ? colorsEnabled : colorsDisabled\n  let templateParameters: ErrorContextTemplateParameters\n\n  if (TARGET_BUILD_TYPE === 'wasm-compiler-edge') {\n    if (typeof $getTemplateParameters !== 'undefined') {\n      templateParameters = $getTemplateParameters(args, colors)\n    } else {\n      templateParameters = getRawTemplateParameters(args)\n    }\n  } else {\n    templateParameters = getTemplateParameters(args, colors)\n  }\n\n  return stringifyErrorMessage(templateParameters, colors)\n}\n", "export * from './convert'\nexport * from './dmmf'\nexport * from './util'\n", "import { DatamodelEnum, SchemaEnum } from './dmmf'\n\nexport function datamodelEnumToSchemaEnum(datamodelEnum: DatamodelEnum): SchemaEnum {\n  return {\n    name: datamodelEnum.name,\n    values: datamodelEnum.values.map((v) => v.name),\n  }\n}\n", "import { ReadonlyDeep } from './util'\n\nexport type Document = ReadonlyDeep<{\n  datamodel: Datamodel\n  schema: Schema\n  mappings: Mappings\n}>\n\nexport type Mappings = ReadonlyDeep<{\n  modelOperations: ModelMapping[]\n  otherOperations: {\n    read: string[]\n    write: string[]\n  }\n}>\n\nexport type OtherOperationMappings = ReadonlyDeep<{\n  read: string[]\n  write: string[]\n}>\n\nexport type DatamodelEnum = ReadonlyDeep<{\n  name: string\n  values: EnumValue[]\n  dbName?: string | null\n  documentation?: string\n}>\n\nexport type SchemaEnum = ReadonlyDeep<{\n  name: string\n  values: string[]\n}>\n\nexport type EnumValue = ReadonlyDeep<{\n  name: string\n  dbName: string | null\n}>\n\nexport type Datamodel = ReadonlyDeep<{\n  models: Model[]\n  enums: DatamodelEnum[]\n  types: Model[]\n  indexes: Index[]\n}>\n\nexport type uniqueIndex = ReadonlyDeep<{\n  name: string\n  fields: string[]\n}>\nexport type PrimaryKey = ReadonlyDeep<{\n  name: string | null\n  fields: string[]\n}>\nexport type Model = ReadonlyDeep<{\n  name: string\n  dbName: string | null\n  schema: string | null\n  fields: Field[]\n  uniqueFields: string[][]\n  uniqueIndexes: uniqueIndex[]\n  documentation?: string\n  primaryKey: PrimaryKey | null\n  isGenerated?: boolean\n}>\n\nexport type FieldKind = 'scalar' | 'object' | 'enum' | 'unsupported'\n\nexport type FieldNamespace = 'model' | 'prisma'\nexport type FieldLocation = 'scalar' | 'inputObjectTypes' | 'outputObjectTypes' | 'enumTypes' | 'fieldRefTypes'\n\nexport type Field = ReadonlyDeep<{\n  kind: FieldKind\n  name: string\n  isRequired: boolean\n  isList: boolean\n  isUnique: boolean\n  isId: boolean\n  isReadOnly: boolean\n  isGenerated?: boolean // does not exist on 'type' but does on 'model'\n  isUpdatedAt?: boolean // does not exist on 'type' but does on 'model'\n  /**\n   * Describes the data type in the same the way it is defined in the Prisma schema:\n   * BigInt, Boolean, Bytes, DateTime, Decimal, Float, Int, JSON, String, $ModelName\n   */\n  type: string\n  /**\n   * Native database type, if specified.\n   * For example, `@db.VarChar(191)` is encoded as `['VarChar', ['191']]`,\n   * `@db.Text` is encoded as `['Text', []]`.\n   */\n  nativeType?: [string, string[]] | null\n  dbName?: string | null\n  hasDefaultValue: boolean\n  default?: FieldDefault | FieldDefaultScalar | FieldDefaultScalar[]\n  relationFromFields?: string[]\n  relationToFields?: string[]\n  relationOnDelete?: string\n  relationOnUpdate?: string\n  relationName?: string\n  documentation?: string\n}>\n\nexport type FieldDefault = ReadonlyDeep<{\n  name: string\n  args: Array<string | number>\n}>\n\nexport type FieldDefaultScalar = string | boolean | number\n\nexport type Index = ReadonlyDeep<{\n  model: string\n  type: IndexType\n  isDefinedOnField: boolean\n  name?: string\n  dbName?: string\n  algorithm?: string\n  clustered?: boolean\n  fields: IndexField[]\n}>\n\nexport type IndexType = 'id' | 'normal' | 'unique' | 'fulltext'\n\nexport type IndexField = ReadonlyDeep<{\n  name: string\n  sortOrder?: SortOrder\n  length?: number\n  operatorClass?: string\n}>\n\nexport type SortOrder = 'asc' | 'desc'\n\nexport type Schema = ReadonlyDeep<{\n  rootQueryType?: string\n  rootMutationType?: string\n  inputObjectTypes: {\n    // For now there are no `model` InputTypes\n    model?: InputType[]\n    prisma?: InputType[]\n  }\n  outputObjectTypes: {\n    model: OutputType[]\n    prisma: OutputType[]\n  }\n  enumTypes: {\n    model?: SchemaEnum[]\n    prisma: SchemaEnum[]\n  }\n  fieldRefTypes: {\n    prisma?: FieldRefType[]\n  }\n}>\n\nexport type Query = ReadonlyDeep<{\n  name: string\n  args: SchemaArg[]\n  output: QueryOutput\n}>\n\nexport type QueryOutput = ReadonlyDeep<{\n  name: string\n  isRequired: boolean\n  isList: boolean\n}>\n\nexport type TypeRef<AllowedLocations extends FieldLocation> = {\n  isList: boolean\n  type: string\n  location: AllowedLocations\n  namespace?: FieldNamespace\n}\n\nexport type InputTypeRef = TypeRef<'scalar' | 'inputObjectTypes' | 'enumTypes' | 'fieldRefTypes'>\n\nexport type SchemaArg = ReadonlyDeep<{\n  name: string\n  comment?: string\n  isNullable: boolean\n  isRequired: boolean\n  inputTypes: InputTypeRef[]\n  isParameterizable: boolean\n  requiresOtherFields?: string[]\n  deprecation?: Deprecation\n}>\n\nexport type OutputType = ReadonlyDeep<{\n  name: string\n  fields: SchemaField[]\n}>\n\nexport type SchemaField = ReadonlyDeep<{\n  name: string\n  isNullable?: boolean\n  outputType: OutputTypeRef\n  args: SchemaArg[]\n  deprecation?: Deprecation\n  documentation?: string\n}>\n\nexport type OutputTypeRef = TypeRef<'scalar' | 'outputObjectTypes' | 'enumTypes'>\n\nexport type Deprecation = ReadonlyDeep<{\n  sinceVersion: string\n  reason: string\n  plannedRemovalVersion?: string\n}>\n\nexport type InputType = ReadonlyDeep<{\n  name: string\n  constraints: {\n    maxNumFields: number | null\n    minNumFields: number | null\n    fields?: string[]\n  }\n  meta?: {\n    source?: string\n    grouping?: string\n  }\n  fields: SchemaArg[]\n}>\n\nexport type FieldRefType = ReadonlyDeep<{\n  name: string\n  allowTypes: FieldRefAllowType[]\n  fields: SchemaArg[]\n}>\n\nexport type FieldRefAllowType = TypeRef<'scalar' | 'enumTypes'>\n\nexport type ModelMapping = ReadonlyDeep<{\n  model: string\n  plural: string\n  findUnique?: string | null\n  findUniqueOrThrow?: string | null\n  findFirst?: string | null\n  findFirstOrThrow?: string | null\n  findMany?: string | null\n  create?: string | null\n  createMany?: string | null\n  createManyAndReturn?: string | null\n  update?: string | null\n  updateMany?: string | null\n  updateManyAndReturn?: string | null\n  upsert?: string | null\n  delete?: string | null\n  deleteMany?: string | null\n  aggregate?: string | null\n  groupBy?: string | null\n  count?: string | null\n  findRaw?: string | null\n  aggregateRaw?: string | null\n}>\n\nexport enum ModelAction {\n  findUnique = 'findUnique',\n  findUniqueOrThrow = 'findUniqueOrThrow',\n  findFirst = 'findFirst',\n  findFirstOrThrow = 'findFirstOrThrow',\n  findMany = 'findMany',\n  create = 'create',\n  createMany = 'createMany',\n  createManyAndReturn = 'createManyAndReturn',\n  update = 'update',\n  updateMany = 'updateMany',\n  updateManyAndReturn = 'updateManyAndReturn',\n  upsert = 'upsert',\n  delete = 'delete',\n  deleteMany = 'deleteMany',\n  groupBy = 'groupBy',\n  count = 'count', // TODO: count does not actually exist in DMMF\n  aggregate = 'aggregate',\n  findRaw = 'findRaw',\n  aggregateRaw = 'aggregateRaw',\n}\n", "import { uncapitalize } from '@prisma/client-common'\nimport levenshtein from 'js-levenshtein'\n\nimport {\n  ArgumentDescription,\n  EmptySelectionError,\n  InputTypeDescription,\n  InvalidArgumentTypeError,\n  InvalidArgumentValueError,\n  OutputTypeDescription,\n  RequiredArgumentMissingError,\n  SomeFieldsMissingError,\n  TooManyFieldsGivenError,\n  UnknownArgumentError,\n  UnknownInputFieldError,\n  UnknownSelectionFieldError,\n  ValueTooLargeError,\n} from '../engines'\nimport { GlobalOmitOptions } from '../jsonProtocol/serializeJsonQuery'\nimport {\n  IncludeOnScalarError,\n  InvalidSelectionValueError,\n  MutuallyExclusiveFieldsError,\n  ValidationError,\n} from '../types/ValidationError'\nimport { applyUnionError } from './applyUnionError'\nimport { ArgumentsRenderingTree } from './ArgumentsRenderingTree'\nimport { Colors } from './base'\nimport { ObjectField } from './ObjectField'\nimport { ObjectFieldSuggestion } from './ObjectFieldSuggestion'\nimport { ObjectValue } from './ObjectValue'\nimport { ScalarValue } from './ScalarValue'\nimport { SuggestionObjectValue } from './SuggestionObjectValue'\n\n/**\n * Given the validation error and arguments rendering tree, applies corresponding\n * formatting to an error tree and adds all relevant messages.\n *\n * @param error\n * @param args\n */\nexport function applyValidationError(\n  error: ValidationError,\n  args: ArgumentsRenderingTree,\n  globalOmit?: GlobalOmitOptions,\n): void {\n  switch (error.kind) {\n    case 'MutuallyExclusiveFields':\n      applyMutuallyExclusiveFieldsError(error, args)\n      break\n    case 'IncludeOnScalar':\n      applyIncludeOnScalarError(error, args)\n      break\n    case 'EmptySelection':\n      applyEmptySelectionError(error, args, globalOmit)\n      break\n    case 'UnknownSelectionField':\n      applyUnknownSelectionFieldError(error, args)\n      break\n    case 'InvalidSelectionValue':\n      applyInvalidSelectionValueError(error, args)\n      break\n    case 'UnknownArgument':\n      applyUnknownArgumentError(error, args)\n      break\n    case 'UnknownInputField':\n      applyUnknownInputFieldError(error, args)\n      break\n    case 'RequiredArgumentMissing':\n      applyRequiredArgumentMissingError(error, args)\n      break\n    case 'InvalidArgumentType':\n      applyInvalidArgumentTypeError(error, args)\n      break\n    case 'InvalidArgumentValue':\n      applyInvalidArgumentValueError(error, args)\n      break\n    case 'ValueTooLarge':\n      applyValueTooLargeError(error, args)\n      break\n    case 'SomeFieldsMissing':\n      applySomeFieldsMissingError(error, args)\n      break\n    case 'TooManyFieldsGiven':\n      applyTooManyFieldsGivenError(error, args)\n      break\n    case 'Union':\n      applyUnionError(error, args, globalOmit)\n      break\n    default:\n      throw new Error('not implemented: ' + error.kind)\n  }\n}\n\nfunction applyMutuallyExclusiveFieldsError(error: MutuallyExclusiveFieldsError, argsTree: ArgumentsRenderingTree) {\n  const object = argsTree.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n  if (object) {\n    object.getField(error.firstField)?.markAsError()\n    object.getField(error.secondField)?.markAsError()\n  }\n\n  argsTree.addErrorMessage(\n    (colors) =>\n      `Please ${colors.bold('either')} use ${colors.green(`\\`${error.firstField}\\``)} or ${colors.green(\n        `\\`${error.secondField}\\``,\n      )}, but ${colors.red('not both')} at the same time.`,\n  )\n}\n\nfunction applyIncludeOnScalarError(error: IncludeOnScalarError, argsTree: ArgumentsRenderingTree) {\n  const [selectionPath, field] = splitPath(error.selectionPath)\n  const outputType = error.outputType\n\n  const object = argsTree.arguments.getDeepSelectionParent(selectionPath)?.value\n  if (object) {\n    object.getField(field)?.markAsError()\n\n    if (outputType) {\n      for (const field of outputType.fields) {\n        if (field.isRelation) {\n          object.addSuggestion(new ObjectFieldSuggestion(field.name, 'true'))\n        }\n      }\n    }\n  }\n\n  argsTree.addErrorMessage((colors) => {\n    let msg = `Invalid scalar field ${colors.red(`\\`${field}\\``)} for ${colors.bold('include')} statement`\n    if (outputType) {\n      msg += ` on model ${colors.bold(outputType.name)}. ${availableOptionsMessage(colors)}`\n    } else {\n      msg += '.'\n    }\n\n    msg += `\\nNote that ${colors.bold('include')} statements only accept relation fields.`\n    return msg\n  })\n}\n\nfunction applyEmptySelectionError(\n  error: EmptySelectionError,\n  argsTree: ArgumentsRenderingTree,\n  globalOmit?: GlobalOmitOptions,\n) {\n  const subSelection = argsTree.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n  if (subSelection) {\n    const omit = subSelection.getField('omit')?.value.asObject()\n    if (omit) {\n      applyEmptySelectionErrorOmit(error, argsTree, omit)\n      return\n    }\n    if (subSelection.hasField('select')) {\n      applyEmptySelectionErrorSelect(error, argsTree)\n      return\n    }\n  }\n\n  if (globalOmit?.[uncapitalize(error.outputType.name)]) {\n    applyEmptySelectionErrorGlobalOmit(error, argsTree)\n    return\n  }\n\n  // should never happen, but in case it does\n  argsTree.addErrorMessage(() => `Unknown field at \"${error.selectionPath.join('.')} selection\"`)\n}\n\n// case for `EmptySelectionError`, triggered by excessive omit\nfunction applyEmptySelectionErrorOmit(\n  error: EmptySelectionError,\n  argsTree: ArgumentsRenderingTree,\n  omitValue: ObjectValue,\n) {\n  omitValue.removeAllFields()\n  for (const field of error.outputType.fields) {\n    omitValue.addSuggestion(new ObjectFieldSuggestion(field.name, 'false'))\n  }\n\n  argsTree.addErrorMessage((colors) => {\n    return `The ${colors.red('omit')} statement includes every field of the model ${colors.bold(\n      error.outputType.name,\n    )}. At least one field must be included in the result`\n  })\n}\n\n// case for `EmptySelectionError`, triggered by empty/falsy `select`\nfunction applyEmptySelectionErrorSelect(error: EmptySelectionError, argsTree: ArgumentsRenderingTree) {\n  const outputType = error.outputType\n  const selection = argsTree.arguments.getDeepSelectionParent(error.selectionPath)?.value\n  const isEmpty = selection?.isEmpty() ?? false\n\n  if (selection) {\n    // If selection has fields and we get EmptySelection error, it means all fields within the\n    // selection are false. We have 2 possible ways to handle suggestions here:\n    //\n    // 1. Suggest only the fields, not present inside of the selection. Example:\n    //\n    // {\n    //   select: {\n    //     id: false\n    //     posts: false,\n    // ?   name?: true\n    // ?   email?: true\n    //  }\n    // }\n    // There are couple of possible problems here. First, we are assuming that user needs to\n    // add new field to the selection, rather than change one of the existing ones to true.\n    // Second, we might end up in a situation where all fields are already used in selection and we have nothing left to suggest.\n    //\n    // 2.Completely ignore users input and suggest all the fields. Example rendering:\n    // {\n    //  select: {\n    //  ?   id?: true\n    //  ?   posts?: true,\n    //  ?   name?: true\n    //  ?   email?: true\n    //   }\n    //  }\n    //\n    // So we will be suggesting to either change one of the fields to true, or add a new one which would be true.\n    // This is the approach we are taking and in order to it, we need to remove all the fields from selection. Code\n    // below will then add them back as a suggestion.\n    selection.removeAllFields()\n    addSelectionSuggestions(selection, outputType)\n  }\n\n  argsTree.addErrorMessage((colors) => {\n    if (isEmpty) {\n      return `The ${colors.red('`select`')} statement for type ${colors.bold(\n        outputType.name,\n      )} must not be empty. ${availableOptionsMessage(colors)}`\n    }\n    return `The ${colors.red('`select`')} statement for type ${colors.bold(outputType.name)} needs ${colors.bold(\n      'at least one truthy value',\n    )}.`\n  })\n}\n\n// case for `EmptySelectionError`, triggered by excessive global omit\nfunction applyEmptySelectionErrorGlobalOmit(error: EmptySelectionError, argsTree: ArgumentsRenderingTree) {\n  const suggestedOmitConfig = new SuggestionObjectValue()\n  for (const field of error.outputType.fields) {\n    if (!field.isRelation) {\n      suggestedOmitConfig.addField(field.name, 'false')\n    }\n  }\n\n  const omitSuggestion = new ObjectFieldSuggestion('omit', suggestedOmitConfig).makeRequired()\n\n  if (error.selectionPath.length === 0) {\n    argsTree.arguments.addSuggestion(omitSuggestion)\n  } else {\n    const [parentPath, fieldName] = splitPath(error.selectionPath)\n    const parent = argsTree.arguments.getDeepSelectionParent(parentPath)?.value.asObject()\n    const field = parent?.getField(fieldName)\n    if (field) {\n      const fieldValue = field?.value.asObject() ?? new ObjectValue()\n      fieldValue.addSuggestion(omitSuggestion)\n      field.value = fieldValue\n    }\n  }\n\n  // neither select, nor omit are used, but global omit global omit configuration for the model exists\n  argsTree.addErrorMessage((colors) => {\n    return `The global ${colors.red('omit')} configuration excludes every field of the model ${colors.bold(\n      error.outputType.name,\n    )}. At least one field must be included in the result`\n  })\n}\n\nfunction applyUnknownSelectionFieldError(error: UnknownSelectionFieldError, argsTree: ArgumentsRenderingTree) {\n  const locateResult = locateSelectionField(error.selectionPath, argsTree)\n  if (locateResult.parentKind !== 'unknown') {\n    locateResult.field.markAsError()\n    const parent = locateResult.parent\n    switch (locateResult.parentKind) {\n      case 'select':\n        addSelectionSuggestions(parent, error.outputType)\n        break\n      case 'include':\n        addInclusionSuggestions(parent, error.outputType)\n        break\n      case 'omit':\n        addOmissionSuggestions(parent, error.outputType)\n        break\n    }\n  }\n  argsTree.addErrorMessage((colors) => {\n    const parts = [`Unknown field ${colors.red(`\\`${locateResult.fieldName}\\``)}`]\n    if (locateResult.parentKind !== 'unknown') {\n      parts.push(`for ${colors.bold(locateResult.parentKind)} statement`)\n    }\n    parts.push(`on model ${colors.bold(`\\`${error.outputType.name}\\``)}.`)\n    parts.push(availableOptionsMessage(colors))\n    return parts.join(' ')\n  })\n}\n\nfunction applyInvalidSelectionValueError(error: InvalidSelectionValueError, argsTree: ArgumentsRenderingTree) {\n  const locateResult = locateSelectionField(error.selectionPath, argsTree)\n  if (locateResult.parentKind !== 'unknown') {\n    locateResult.field.value.markAsError()\n  }\n\n  argsTree.addErrorMessage((colors) => {\n    return `Invalid value for selection field \\`${colors.red(locateResult.fieldName)}\\`: ${error.underlyingError}`\n  })\n}\n\nfunction applyUnknownArgumentError(error: UnknownArgumentError, argsTree: ArgumentsRenderingTree) {\n  const argName = error.argumentPath[0]\n  const selection = argsTree.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n\n  if (selection) {\n    selection.getField(argName)?.markAsError()\n    addArgumentsSuggestions(selection, error.arguments)\n  }\n\n  argsTree.addErrorMessage((colors) =>\n    unknownArgumentMessage(\n      colors,\n      argName,\n      error.arguments.map((arg) => arg.name),\n    ),\n  )\n}\n\nfunction applyUnknownInputFieldError(error: UnknownInputFieldError, argsTree: ArgumentsRenderingTree) {\n  const [argParentPath, argName] = splitPath(error.argumentPath)\n  const selection = argsTree.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n\n  if (selection) {\n    selection.getDeepField(error.argumentPath)?.markAsError()\n    const argParent = selection.getDeepFieldValue(argParentPath)?.asObject()\n    if (argParent) {\n      addInputSuggestions(argParent, error.inputType)\n    }\n  }\n\n  argsTree.addErrorMessage((colors) =>\n    unknownArgumentMessage(\n      colors,\n      argName,\n      error.inputType.fields.map((f) => f.name),\n    ),\n  )\n}\n\nfunction unknownArgumentMessage(colors: Colors, argName: string, options: string[]) {\n  const parts = [`Unknown argument \\`${colors.red(argName)}\\`.`]\n  const suggestion = getSuggestion(argName, options)\n\n  if (suggestion) {\n    parts.push(`Did you mean \\`${colors.green(suggestion)}\\`?`)\n  }\n\n  if (options.length > 0) {\n    parts.push(availableOptionsMessage(colors))\n  }\n\n  return parts.join(' ')\n}\n\nfunction applyRequiredArgumentMissingError(error: RequiredArgumentMissingError, args: ArgumentsRenderingTree) {\n  let existingField: ObjectField | undefined = undefined\n\n  args.addErrorMessage((colors) => {\n    if (existingField?.value instanceof ScalarValue && existingField.value.text === 'null') {\n      return `Argument \\`${colors.green(argumentName)}\\` must not be ${colors.red('null')}.`\n    }\n    return `Argument \\`${colors.green(argumentName)}\\` is missing.`\n  })\n  const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n  if (!selection) {\n    return\n  }\n\n  const [argParent, argumentName] = splitPath(error.argumentPath)\n  const objectSuggestion = new SuggestionObjectValue()\n  const parent = selection.getDeepFieldValue(argParent)?.asObject()\n  if (!parent) {\n    return\n  }\n\n  existingField = parent.getField(argumentName)\n  if (existingField) {\n    parent.removeField(argumentName)\n  }\n\n  if (error.inputTypes.length === 1 && error.inputTypes[0].kind === 'object') {\n    for (const field of error.inputTypes[0].fields) {\n      objectSuggestion.addField(field.name, field.typeNames.join(' | '))\n    }\n\n    parent.addSuggestion(new ObjectFieldSuggestion(argumentName, objectSuggestion).makeRequired())\n  } else {\n    const typeName = error.inputTypes.map(getInputTypeName).join(' | ')\n    parent.addSuggestion(new ObjectFieldSuggestion(argumentName, typeName).makeRequired())\n  }\n\n  if (error.dependentArgumentPath) {\n    selection.getDeepField(error.dependentArgumentPath)?.markAsError()\n    const [, dependentArgumentName] = splitPath(error.dependentArgumentPath)\n    args.addErrorMessage((colors) => {\n      return `Argument \\`${colors.green(argumentName)}\\` is required because argument \\`${colors.green(\n        dependentArgumentName,\n      )}\\` was provided.`\n    })\n  }\n}\n\nfunction getInputTypeName(description: InputTypeDescription) {\n  if (description.kind === 'list') {\n    return `${getInputTypeName(description.elementType)}[]`\n  }\n  return description.name\n}\n\nfunction applyInvalidArgumentTypeError(error: InvalidArgumentTypeError, args: ArgumentsRenderingTree) {\n  const argName = error.argument.name\n  const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n  if (selection) {\n    selection.getDeepFieldValue(error.argumentPath)?.markAsError()\n  }\n\n  args.addErrorMessage((colors) => {\n    const expected = joinWithPreposition(\n      'or',\n      error.argument.typeNames.map((type) => colors.green(type)),\n    )\n    // TODO: print value\n    return `Argument \\`${colors.bold(argName)}\\`: Invalid value provided. Expected ${expected}, provided ${colors.red(\n      error.inferredType,\n    )}.`\n  })\n}\n\nfunction applyInvalidArgumentValueError(error: InvalidArgumentValueError, args: ArgumentsRenderingTree) {\n  const argName = error.argument.name\n  const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n  if (selection) {\n    selection.getDeepFieldValue(error.argumentPath)?.markAsError()\n  }\n\n  args.addErrorMessage((colors) => {\n    const parts = [`Invalid value for argument \\`${colors.bold(argName)}\\``]\n    if (error.underlyingError) {\n      parts.push(`: ${error.underlyingError}`)\n    }\n    parts.push('.')\n    if (error.argument.typeNames.length > 0) {\n      const expected = joinWithPreposition(\n        'or',\n        error.argument.typeNames.map((type) => colors.green(type)),\n      )\n      parts.push(` Expected ${expected}.`)\n    }\n    return parts.join('')\n  })\n}\n\nfunction applyValueTooLargeError(error: ValueTooLargeError, args: ArgumentsRenderingTree) {\n  const argName = error.argument.name\n  const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n  let printedValue: string | undefined\n  if (selection) {\n    const field = selection.getDeepField(error.argumentPath)\n    const value = field?.value\n    value?.markAsError()\n    if (value instanceof ScalarValue) {\n      printedValue = value.text\n    }\n  }\n\n  args.addErrorMessage((colors) => {\n    const parts: string[] = ['Unable to fit value']\n    if (printedValue) {\n      parts.push(colors.red(printedValue))\n    }\n    parts.push(`into a 64-bit signed integer for field \\`${colors.bold(argName)}\\``)\n\n    return parts.join(' ')\n  })\n}\n\nfunction applySomeFieldsMissingError(error: SomeFieldsMissingError, args: ArgumentsRenderingTree) {\n  const argumentName = error.argumentPath[error.argumentPath.length - 1]\n  const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n  if (selection) {\n    const argument = selection.getDeepFieldValue(error.argumentPath)?.asObject()\n    if (argument) {\n      addInputSuggestions(argument, error.inputType)\n    }\n  }\n\n  args.addErrorMessage((colors) => {\n    const parts = [`Argument \\`${colors.bold(argumentName)}\\` of type ${colors.bold(error.inputType.name)} needs`]\n    if (error.constraints.minFieldCount === 1) {\n      if (error.constraints.requiredFields) {\n        parts.push(\n          `${colors.green('at least one of')} ${joinWithPreposition(\n            'or',\n            error.constraints.requiredFields.map((f) => `\\`${colors.bold(f)}\\``),\n          )} arguments.`,\n        )\n      } else {\n        parts.push(`${colors.green('at least one')} argument.`)\n      }\n    } else {\n      parts.push(`${colors.green(`at least ${error.constraints.minFieldCount}`)} arguments.`)\n    }\n    parts.push(availableOptionsMessage(colors))\n    return parts.join(' ')\n  })\n}\n\nfunction applyTooManyFieldsGivenError(error: TooManyFieldsGivenError, args: ArgumentsRenderingTree) {\n  const argumentName = error.argumentPath[error.argumentPath.length - 1]\n  const selection = args.arguments.getDeepSubSelectionValue(error.selectionPath)?.asObject()\n  let providedArguments: string[] = []\n  if (selection) {\n    const argument = selection.getDeepFieldValue(error.argumentPath)?.asObject()\n    if (argument) {\n      argument.markAsError()\n      providedArguments = Object.keys(argument.getFields())\n    }\n  }\n\n  args.addErrorMessage((colors) => {\n    const parts = [`Argument \\`${colors.bold(argumentName)}\\` of type ${colors.bold(error.inputType.name)} needs`]\n    if (error.constraints.minFieldCount === 1 && error.constraints.maxFieldCount == 1) {\n      parts.push(`${colors.green('exactly one')} argument,`)\n    } else if (error.constraints.maxFieldCount == 1) {\n      parts.push(`${colors.green('at most one')} argument,`)\n    } else {\n      parts.push(`${colors.green(`at most ${error.constraints.maxFieldCount}`)} arguments,`)\n    }\n\n    parts.push(\n      `but you provided ${joinWithPreposition(\n        'and',\n        providedArguments.map((arg) => colors.red(arg)),\n      )}. Please choose`,\n    )\n\n    if (error.constraints.maxFieldCount === 1) {\n      parts.push('one.')\n    } else {\n      parts.push(`${error.constraints.maxFieldCount}.`)\n    }\n\n    return parts.join(' ')\n  })\n}\n\nfunction addSelectionSuggestions(selection: ObjectValue, outputType: OutputTypeDescription) {\n  for (const field of outputType.fields) {\n    if (!selection.hasField(field.name)) {\n      selection.addSuggestion(new ObjectFieldSuggestion(field.name, 'true'))\n    }\n  }\n}\n\nfunction addInclusionSuggestions(selection: ObjectValue, outputType: OutputTypeDescription) {\n  for (const field of outputType.fields) {\n    if (field.isRelation && !selection.hasField(field.name)) {\n      selection.addSuggestion(new ObjectFieldSuggestion(field.name, 'true'))\n    }\n  }\n}\n\nfunction addOmissionSuggestions(selection: ObjectValue, outputType: OutputTypeDescription) {\n  for (const field of outputType.fields) {\n    if (!selection.hasField(field.name) && !field.isRelation) {\n      selection.addSuggestion(new ObjectFieldSuggestion(field.name, 'true'))\n    }\n  }\n}\n\nfunction addArgumentsSuggestions(argumentsParent: ObjectValue, args: ArgumentDescription[]) {\n  for (const arg of args) {\n    if (!argumentsParent.hasField(arg.name)) {\n      argumentsParent.addSuggestion(new ObjectFieldSuggestion(arg.name, arg.typeNames.join(' | ')))\n    }\n  }\n}\n\nfunction locateSelectionField(selectionPath: string[], argsTree: ArgumentsRenderingTree) {\n  const [parentPath, fieldName] = splitPath(selectionPath)\n\n  const subSelection = argsTree.arguments.getDeepSubSelectionValue(parentPath)?.asObject()\n  if (!subSelection) {\n    return { parentKind: 'unknown' as const, fieldName }\n  }\n  const select = subSelection.getFieldValue('select')?.asObject()\n  const include = subSelection.getFieldValue('include')?.asObject()\n  const omit = subSelection.getFieldValue('omit')?.asObject()\n  let field = select?.getField(fieldName)\n  if (select && field) {\n    return { parentKind: 'select' as const, parent: select, field, fieldName }\n  }\n  field = include?.getField(fieldName)\n  if (include && field) {\n    return { parentKind: 'include' as const, field, parent: include, fieldName }\n  }\n\n  field = omit?.getField(fieldName)\n  if (omit && field) {\n    return { parentKind: 'omit' as const, field, parent: omit, fieldName }\n  }\n  return { parentKind: 'unknown' as const, fieldName }\n}\n\nfunction addInputSuggestions(parent: ObjectValue, inputType: InputTypeDescription) {\n  if (inputType.kind !== 'object') {\n    return\n  }\n\n  for (const field of inputType.fields) {\n    if (!parent.hasField(field.name)) {\n      parent.addSuggestion(new ObjectFieldSuggestion(field.name, field.typeNames.join(' | ')))\n    }\n  }\n}\n\nfunction splitPath(path: string[]): [parentPath: string[], fieldName: string] {\n  const selectionPath = [...path]\n  const fieldName = selectionPath.pop()\n  if (!fieldName) {\n    throw new Error('unexpected empty path')\n  }\n  return [selectionPath, fieldName]\n}\n\nfunction availableOptionsMessage({ green, enabled }: Colors) {\n  return `Available options are ` + (enabled ? `listed in ${green('green')}` : `marked with ?`) + '.'\n}\n\nfunction joinWithPreposition(preposition: 'and' | 'or', items: string[]): string {\n  if (items.length === 1) {\n    return items[0]\n  }\n  const itemsCopy = [...items]\n  const lastItem = itemsCopy.pop()\n  return `${itemsCopy.join(', ')} ${preposition} ${lastItem}`\n}\n\n/**\n * Options with edit distance above this value will never be suggested\n */\nconst MAX_EDIT_DISTANCE = 3\n\nfunction getSuggestion(str: string, options: string[]): string | undefined {\n  let minDistance = Infinity\n  let result: string | undefined\n\n  for (const option of options) {\n    const editDistance = levenshtein(str, option)\n    if (editDistance > MAX_EDIT_DISTANCE) {\n      continue\n    }\n    if (editDistance < minDistance) {\n      minDistance = editDistance\n      result = option\n    }\n  }\n  return result\n}\n", "import { maxWithComparator } from '@prisma/internals'\n\nimport { EngineValidationError, InvalidArgumentTypeError, UnionError } from '../engines'\nimport { GlobalOmitOptions } from '../jsonProtocol/serializeJsonQuery'\nimport { applyValidationError } from './applyValidationError'\nimport { ArgumentsRenderingTree } from './ArgumentsRenderingTree'\n\ntype NonUnionError = Exclude<EngineValidationError, UnionError>\n\n/**\n * When a particular field has multiple allowed types on the schema level\n * and none of them match users input, engine returns special kind of error: UnionError.\n * This error acts as a container for individual errors for each non-matching type.\n * In that case, we need to make a guess which of the errors corresponds users intent the most.\n * General algorithm of processing them is the following:\n * - flatten all nested errors and get a single list of all possible errors\n * - merge individual InvalidArgumentType errors at the same path\n * - pick the best error based on combined argument and selection paths length and type of the error.\n *\n * For details of each step, see other comments in this file.\n * @param error\n * @param args\n */\nexport function applyUnionError(error: UnionError, args: ArgumentsRenderingTree, globalOmit?: GlobalOmitOptions) {\n  const allErrors = flattenUnionError(error)\n  const merged = mergeInvalidArgumentTypeErrors(allErrors)\n  const bestError = getBestScoringError(merged)\n  if (bestError) {\n    applyValidationError(bestError, args, globalOmit)\n  } else {\n    args.addErrorMessage(() => 'Unknown error')\n  }\n}\n\nfunction flattenUnionError(error: UnionError): NonUnionError[] {\n  return error.errors.flatMap((error) => {\n    if (error.kind === 'Union') {\n      return flattenUnionError(error)\n    }\n    return [error]\n  })\n}\n\n/**\n * Iterates over provided error list and merges all InvalidArgumentType\n * with matching selectionPath and argumentPath into one. For example,\n * if the list has an error, saying that `where.arg` does not match `Int`\n * and another, saying that `where.arg` does not match IntFilter, resulting\n * list will contain a single error for `where.arg` saying it does not\n * match `Int | IntFilter`\n * @param errorList\n * @returns\n */\nfunction mergeInvalidArgumentTypeErrors(errorList: NonUnionError[]) {\n  const invalidArgsError = new Map<string, InvalidArgumentTypeError>()\n  const result: NonUnionError[] = []\n\n  for (const error of errorList) {\n    if (error.kind !== 'InvalidArgumentType') {\n      result.push(error)\n      continue\n    }\n\n    const key = `${error.selectionPath.join('.')}:${error.argumentPath.join('.')}`\n    const prevError = invalidArgsError.get(key)\n    if (!prevError) {\n      invalidArgsError.set(key, error)\n    } else {\n      invalidArgsError.set(key, {\n        ...error,\n        argument: {\n          ...error.argument,\n          typeNames: uniqueConcat(prevError.argument.typeNames, error.argument.typeNames),\n        },\n      })\n    }\n  }\n\n  result.push(...invalidArgsError.values())\n  return result\n}\n\nfunction uniqueConcat<T>(head: T[], tail: T[]): T[] {\n  return [...new Set(head.concat(tail))]\n}\n\n/**\n * Function that attempts to pick the best error from the list\n * by ranking them. In most cases, highest ranking error would be the one\n * which has the longest combined \"selectionPath\" + \"argumentPath\". Justification\n * for that is that type that made it deeper into validation tree before failing\n * is probably closer to the one user actually wanted to do.\n *\n * However, if two errors are at the same depth level, we introduce additional ranking based\n * on error type. See `getErrorTypeScore` function for details\n * @param errors\n * @returns\n */\nfunction getBestScoringError(errors: NonUnionError[]) {\n  return maxWithComparator(errors, (errorA, errorB) => {\n    const aPathLength = getCombinedPathLength(errorA)\n    const bPathLength = getCombinedPathLength(errorB)\n    if (aPathLength !== bPathLength) {\n      return aPathLength - bPathLength\n    }\n    return getErrorTypeScore(errorA) - getErrorTypeScore(errorB)\n  })\n}\n\nfunction getCombinedPathLength(error: EngineValidationError) {\n  let score = 0\n  if (Array.isArray(error['selectionPath'])) {\n    score += error['selectionPath'].length\n  }\n\n  if (Array.isArray(error['argumentPath'])) {\n    score += error['argumentPath'].length\n  }\n  return score\n}\n\n/**\n * Function is invoked to determine most relevant error based on its type.\n * Specific numbers returned from this function do not really matter, it's only\n * important how they compare relatively to each other.\n *\n * Current logic is:\n * - InvalidArgumentValue/ValueTooLarge is treated as the best possible error to display\n * since when it is present we know that the field causing the error is defined on the schema\n * and provided value has correct type, it's just that value violates some other constraint.\n * - Next candidate is `InvalidArgumentType` error. We know the field user specified can exists in\n * this spot, it's just that value provided has incorrect type.\n * - All other engine-side errors follow. At that point it's difficult to say which of them is more relevant,\n * so we treat them equally. We might adjust this logic in the future.\n * - RequiredArgumentMissing is penalized because this error is often used to disambiguate\n * union types and what is required in one arm of the union might be fine to leave out in another\n * @param error\n * @returns\n */\nfunction getErrorTypeScore(error: EngineValidationError): number {\n  switch (error.kind) {\n    case 'InvalidArgumentValue':\n    case 'ValueTooLarge':\n      return 20\n    case 'InvalidArgumentType':\n      return 10\n    case 'RequiredArgumentMissing':\n      return -10\n    default:\n      return 0\n  }\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\nimport { SuggestionObjectValue } from './SuggestionObjectValue'\n\nexport class ObjectFieldSuggestion implements ErrorBasicBuilder {\n  public isRequired = false\n  constructor(\n    readonly name: string,\n    readonly value: string | SuggestionObjectValue,\n  ) {}\n\n  makeRequired() {\n    this.isRequired = true\n    return this\n  }\n\n  write(writer: ErrorWriter): void {\n    const {\n      colors: { green },\n    } = writer.context\n\n    writer.addMarginSymbol(green(this.isRequired ? '+' : '?'))\n    writer.write(green(this.name))\n\n    if (!this.isRequired) {\n      writer.write(green('?'))\n    }\n\n    writer.write(green(`: `))\n    if (typeof this.value === 'string') {\n      writer.write(green(this.value))\n    } else {\n      writer.write(this.value)\n    }\n  }\n}\n", "import { INDENT_SIZE } from '@prisma/ts-builders'\n\nimport { ArrayValue } from './ArrayValue'\nimport { ErrorWriter, fieldsSeparator } from './base'\nimport { Field } from './Field'\nimport { FormattedString } from './FormattedString'\nimport { ObjectField } from './ObjectField'\nimport { ObjectFieldSuggestion } from './ObjectFieldSuggestion'\nimport { Value } from './Value'\n\ntype SelectionParent = {\n  kind: 'include' | 'select'\n  value: ObjectValue\n}\n\n/**\n * Class for representing object value within rendering tree. Also used for accessing\n * different fields of the object.\n *\n * Terminology used within:\n * - selection parent = either `select` or `include` property value. For example for object\n * `{ select: { posts: true }}`, selection parent is `{ posts: true }`\n * - sub selection: value of a property of selection parent. Can be deep. In that case, specified\n * path is expected to not contain either `select` or `include` values in between (the way engine reports `selectionPath`).\n * For example, for this query:\n *\n * {\n *   include: {\n *     posts: {\n *       select: { attachments: { where: { published: true }} }\n *     }\n *   }\n * }\n * Value of sub selection at path [posts, attachments] is { where: { published: true }}\n */\nexport class ObjectValue extends Value {\n  private fields: Record<string, ObjectField> = {}\n  private suggestions: ObjectFieldSuggestion[] = []\n\n  addField(field: ObjectField) {\n    this.fields[field.name] = field\n  }\n\n  addSuggestion(suggestion: ObjectFieldSuggestion) {\n    this.suggestions.push(suggestion)\n  }\n\n  getField(key: string): ObjectField | undefined {\n    return this.fields[key]\n  }\n\n  getDeepField(path: string[]): Field | undefined {\n    const [head, ...tail] = path\n    const firstField = this.getField(head)\n    if (!firstField) {\n      return undefined\n    }\n    let field: Field = firstField\n    for (const segment of tail) {\n      let nextField: Field | undefined\n\n      if (field.value instanceof ObjectValue) {\n        nextField = field.value.getField(segment)\n      } else if (field.value instanceof ArrayValue) {\n        nextField = field.value.getField(Number(segment))\n      }\n      if (!nextField) {\n        return undefined\n      }\n      field = nextField\n    }\n    return field\n  }\n\n  getDeepFieldValue(path: string[]) {\n    if (path.length === 0) {\n      return this\n    }\n    return this.getDeepField(path)?.value\n  }\n\n  hasField(key: string) {\n    return Boolean(this.getField(key))\n  }\n\n  removeAllFields() {\n    this.fields = {}\n  }\n\n  removeField(key: string) {\n    delete this.fields[key]\n  }\n\n  getFields() {\n    return this.fields\n  }\n\n  isEmpty(): boolean {\n    return Object.keys(this.fields).length === 0\n  }\n\n  getFieldValue(key: string): Value | undefined {\n    return this.getField(key)?.value\n  }\n\n  getDeepSubSelectionValue(path: string[]): Value | undefined {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let selection: Value = this\n    for (const segment of path) {\n      if (!(selection instanceof ObjectValue)) {\n        return undefined\n      }\n      const next = selection.getSubSelectionValue(segment)\n      if (!next) {\n        return undefined\n      }\n\n      selection = next\n    }\n\n    return selection\n  }\n\n  getDeepSelectionParent(path: string[]): SelectionParent | undefined {\n    const thisParent = this.getSelectionParent()\n    if (!thisParent) {\n      return undefined\n    }\n\n    let parent = thisParent\n\n    for (const segment of path) {\n      const next = parent.value.getFieldValue(segment)\n      if (!next || !(next instanceof ObjectValue)) {\n        return undefined\n      }\n\n      const nextParent = next.getSelectionParent()\n      if (!nextParent) {\n        return undefined\n      }\n      parent = nextParent\n    }\n\n    return parent\n  }\n\n  getSelectionParent(): SelectionParent | undefined {\n    const select = this.getField('select')?.value.asObject()\n    if (select) {\n      return { kind: 'select', value: select }\n    }\n\n    const include = this.getField('include')?.value.asObject()\n    if (include) {\n      return { kind: 'include', value: include }\n    }\n    return undefined\n  }\n\n  getSubSelectionValue(key: string): Value | undefined {\n    return this.getSelectionParent()?.value.fields[key].value\n  }\n\n  override getPrintWidth(): number {\n    const fields = Object.values(this.fields)\n    if (fields.length == 0) {\n      return 2 // {}\n    }\n    const maxFieldWidth = Math.max(...fields.map((f) => f.getPrintWidth()))\n    return maxFieldWidth + INDENT_SIZE\n  }\n\n  override write(writer: ErrorWriter): void {\n    const fields = Object.values(this.fields)\n    if (fields.length === 0 && this.suggestions.length === 0) {\n      this.writeEmpty(writer)\n      return\n    }\n\n    this.writeWithContents(writer, fields)\n  }\n\n  override asObject(): ObjectValue {\n    return this\n  }\n\n  private writeEmpty(writer: ErrorWriter) {\n    const output = new FormattedString('{}')\n    if (this.hasError) {\n      output.setColor(writer.context.colors.red).underline()\n    }\n\n    writer.write(output)\n  }\n\n  private writeWithContents(writer: ErrorWriter, fields: ObjectField[]) {\n    writer.writeLine('{').withIndent(() => {\n      writer.writeJoined(fieldsSeparator, [...fields, ...this.suggestions]).newLine()\n    })\n\n    writer.write('}')\n    if (this.hasError) {\n      writer.afterNextNewline(() => {\n        writer.writeLine(writer.context.colors.red('~'.repeat(this.getPrintWidth())))\n      })\n    }\n  }\n}\n", "export * from './AnyDeclarationBuilder'\nexport * from './ArraySpread'\nexport * from './ArrayType'\nexport * from './BasicBuilder'\nexport * from './Class'\nexport * from './ConditionalType'\nexport * from './ConstDeclaration'\nexport * from './DocComment'\nexport * from './Export'\nexport * from './ExportFrom'\nexport * from './File'\nexport * from './FunctionCall'\nexport * from './FunctionType'\nexport * from './GenericParameter'\nexport * from './helpers'\nexport * from './Import'\nexport * from './Interface'\nexport * from './IntersectionType'\nexport * from './KeyofType'\nexport * from './KeyType'\nexport * from './Method'\nexport * from './NamedType'\nexport * from './NamedValue'\nexport * from './NamespaceDeclaration'\nexport * from './ObjectType'\nexport * from './Parameter'\nexport * from './PrimitiveType'\nexport * from './Property'\nexport * from './stringify'\nexport * from './StringLiteralType'\nexport * from './TupleType'\nexport * from './TypeBuilder'\nexport * from './TypeDeclaration'\nexport * from './UnionType'\nexport * from './ValueBuilder'\nexport * from './WellKnownSymbol'\nexport * from './Writer'\n", "import type { BasicBuilder } from './BasicBuilder'\n\nexport const INDENT_SIZE = 2\n/**\n * Helper class for building long multi-line formatted strings from building blocks.\n * Can use either plain strings or `Builder` objects, that would encapsulate formatting logic.\n */\nexport class Writer<ContextType = undefined> {\n  private lines: string[] = []\n  private currentLine = ''\n  private currentIndent = 0\n  private marginSymbol?: string\n  private afterNextNewLineCallback?: () => void\n\n  constructor(\n    startingIndent = 0,\n    readonly context: ContextType,\n  ) {\n    this.currentIndent = startingIndent\n  }\n\n  /**\n   * Adds provided value to the current line. Does not end the line.\n   *\n   * @param value\n   * @returns\n   */\n  write(value: string | BasicBuilder<ContextType>): this {\n    if (typeof value === 'string') {\n      this.currentLine += value\n    } else {\n      value.write(this)\n    }\n    return this\n  }\n\n  /**\n   * Adds several `values` to the current line, separated by `separator`. Both values and separator\n   * can also be `Builder` instances for more advanced formatting.\n   *\n   * @param separator\n   * @param values\n   * @param writeItem allow to customize how individual item is written\n   * @returns\n   */\n  writeJoined<T extends string | BasicBuilder<ContextType>>(\n    separator: string | BasicBuilder<ContextType>,\n    values: T[],\n    writeItem: (item: T, writer: this) => void = (item, w) => w.write(item),\n  ): this {\n    const last = values.length - 1\n    for (let i = 0; i < values.length; i++) {\n      writeItem(values[i], this)\n      if (i !== last) {\n        this.write(separator)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Adds a string to current line, flushes current line and starts a new line.\n   * @param line\n   * @returns\n   */\n  writeLine(line: string | BasicBuilder<ContextType>): this {\n    return this.write(line).newLine()\n  }\n\n  /**\n   * Flushes current line and starts a new line. New line starts at previously configured indentation level\n   * @returns\n   */\n  newLine(): this {\n    this.lines.push(this.indentedCurrentLine())\n    this.currentLine = ''\n    this.marginSymbol = undefined\n\n    const afterNextNewLineCallback = this.afterNextNewLineCallback\n    this.afterNextNewLineCallback = undefined\n    afterNextNewLineCallback?.()\n    return this\n  }\n\n  /**\n   * Increases indentation level by 1, calls provided callback and then decreases indentation again.\n   * Could be used for writing indented blocks of text:\n   *\n   * @example\n   * ```ts\n   * writer\n   *   .writeLine('{')\n   *   .withIndent(() => {\n   *      writer.writeLine('foo: 123');\n   *      writer.writeLine('bar: 456');\n   *   })\n   *   .writeLine('}')\n   * ```\n   * @param callback\n   * @returns\n   */\n  withIndent(callback: (writer: this) => void): this {\n    this.indent()\n    callback(this)\n    this.unindent()\n    return this\n  }\n\n  /**\n   * Calls provided callback next time when new line is started.\n   * Callback is called after old line have already been flushed and a new\n   * line have been started. Can be used for adding \"between the lines\" decorations,\n   * such as underlines.\n   *\n   * @param callback\n   * @returns\n   */\n  afterNextNewline(callback: () => void) {\n    this.afterNextNewLineCallback = callback\n    return this\n  }\n\n  /**\n   * Increases indentation level of the current line by 1\n   * @returns\n   */\n  indent(): this {\n    this.currentIndent++\n    return this\n  }\n\n  /**\n   * Decreases indentation level of the current line by 1, if it is possible\n   * @returns\n   */\n  unindent(): this {\n    if (this.currentIndent > 0) {\n      this.currentIndent--\n    }\n    return this\n  }\n\n  /**\n   * Adds a symbol, that will replace the first character of the current line (including indentation)\n   * when it is flushed. Can be used for adding markers to the line.\n   *\n   * Note: if indentation level of the line is 0, it will replace the first actually printed character\n   * of the line. Use with caution.\n   * @param symbol\n   * @returns\n   */\n  addMarginSymbol(symbol: string): this {\n    this.marginSymbol = symbol\n    return this\n  }\n\n  toString() {\n    return this.lines.concat(this.indentedCurrentLine()).join('\\n')\n  }\n\n  getCurrentLineLength() {\n    return this.currentLine.length\n  }\n\n  private indentedCurrentLine(): string {\n    const line = this.currentLine.padStart(this.currentLine.length + INDENT_SIZE * this.currentIndent)\n    if (this.marginSymbol) {\n      return this.marginSymbol + line.slice(1)\n    }\n    return line\n  }\n}\n", "import { INDENT_SIZE } from '@prisma/ts-builders'\n\nimport { ArrayField } from './ArrayField'\nimport { ErrorWriter, fieldsSeparator } from './base'\nimport { FormattedString } from './FormattedString'\nimport { Value } from './Value'\n\nexport class ArrayValue extends Value {\n  private items: ArrayField[] = []\n\n  addItem(item: Value): this {\n    this.items.push(new ArrayField(item))\n    return this\n  }\n\n  getField(index: number): ArrayField | undefined {\n    return this.items[index]\n  }\n\n  override getPrintWidth(): number {\n    if (this.items.length === 0) {\n      return 2\n    }\n    const maxItemWidth = Math.max(...this.items.map((item) => item.value.getPrintWidth()))\n    return maxItemWidth + INDENT_SIZE\n  }\n\n  override write(writer: ErrorWriter): void {\n    if (this.items.length === 0) {\n      this.writeEmpty(writer)\n      return\n    }\n    this.writeWithItems(writer)\n  }\n\n  private writeEmpty(writer: ErrorWriter) {\n    const output = new FormattedString('[]')\n    if (this.hasError) {\n      output.setColor(writer.context.colors.red).underline()\n    }\n    writer.write(output)\n  }\n\n  private writeWithItems(writer: ErrorWriter) {\n    const { colors } = writer.context\n\n    writer\n      .writeLine('[')\n      .withIndent(() => writer.writeJoined(fieldsSeparator, this.items).newLine())\n      .write(']')\n\n    if (this.hasError) {\n      writer.afterNextNewline(() => {\n        writer.writeLine(colors.red('~'.repeat(this.getPrintWidth())))\n      })\n    }\n  }\n\n  override asObject(): undefined {\n    return undefined\n  }\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\nimport { Field } from './Field'\nimport { Value } from './Value'\n\nexport class ArrayField implements ErrorBasicBuilder, Field {\n  constructor(public value: Value) {}\n  write(writer: ErrorWriter): void {\n    writer.write(this.value)\n  }\n\n  markAsError(): void {\n    this.value.markAsError()\n  }\n}\n", "import { BasicBuilder, Writer } from '@prisma/ts-builders'\nimport { bold, dim, green, red } from 'kleur/colors'\n\ntype ColorFn = (str: string) => string\nexport type Colors = {\n  bold: ColorFn\n  red: ColorFn\n  green: ColorFn\n  dim: ColorFn\n  // if false, all color functions are useless\n  readonly enabled: boolean\n}\n\nconst noop = (str: string) => str\n\nexport const inactiveColors: Colors = {\n  bold: noop,\n  red: noop,\n  green: noop,\n  dim: noop,\n  enabled: false,\n}\n\nexport const activeColors: Colors = {\n  bold,\n  red,\n  green,\n  dim,\n  enabled: true,\n}\n\nexport type ErrorRenderContext = {\n  colors: Colors\n}\n\nexport type ErrorWriter = Writer<ErrorRenderContext>\nexport type ErrorBasicBuilder = BasicBuilder<ErrorRenderContext>\n\nexport const fieldsSeparator: ErrorBasicBuilder = {\n  write(writer) {\n    writer.writeLine(',')\n  },\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\n\nexport type ColorFn = (str: string) => string\n\nexport class FormattedString implements ErrorBasicBuilder {\n  private isUnderlined = false\n  private color: ColorFn = (str) => str\n  constructor(public contents: string) {}\n\n  underline(): this {\n    this.isUnderlined = true\n    return this\n  }\n\n  setColor(color: ColorFn): this {\n    this.color = color\n    return this\n  }\n\n  write(writer: ErrorWriter): void {\n    const paddingSize = writer.getCurrentLineLength()\n    writer.write(this.color(this.contents))\n    if (this.isUnderlined) {\n      writer.afterNextNewline(() => {\n        writer.write(' '.repeat(paddingSize)).writeLine(this.color('~'.repeat(this.contents.length)))\n      })\n    }\n  }\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\nimport { ObjectValue } from './ObjectValue'\n\nexport abstract class Value implements ErrorBasicBuilder {\n  abstract write(writer: ErrorWriter): void\n\n  /**\n   * Returns total width the value when it is rendered. Used\n   * for determining underline width.\n   */\n  abstract getPrintWidth(): number\n\n  public hasError = false\n\n  markAsError(): this {\n    this.hasError = true\n    return this\n  }\n\n  abstract asObject(): ObjectValue | undefined\n}\n", "import { ErrorWriter } from './base'\nimport { FormattedString } from './FormattedString'\nimport { Value } from './Value'\n\nexport class ScalarValue extends Value {\n  constructor(readonly text: string) {\n    super()\n  }\n\n  override getPrintWidth(): number {\n    return this.text.length\n  }\n\n  override write(writer: ErrorWriter): void {\n    const string = new FormattedString(this.text)\n    if (this.hasError) {\n      string.underline().setColor(writer.context.colors.red)\n    }\n    writer.write(string)\n  }\n\n  override asObject(): undefined {\n    return undefined\n  }\n}\n", "import { ErrorBasicBuilder, ErrorWriter, fieldsSeparator } from './base'\n\nexport class SuggestionObjectValue implements ErrorBasicBuilder {\n  private fields: ErrorBasicBuilder[] = []\n\n  addField(name: string, value: string) {\n    this.fields.push({\n      write(writer) {\n        const { green, dim } = writer.context.colors\n        writer.write(green(dim(`${name}: ${value}`))).addMarginSymbol(green(dim('+')))\n      },\n    })\n    return this\n  }\n\n  write(writer: ErrorWriter): void {\n    const {\n      colors: { green },\n    } = writer.context\n    writer\n      .writeLine(green('{'))\n      .withIndent(() => {\n        writer.writeJoined(fieldsSeparator, this.fields).newLine()\n      })\n      .write(green('}'))\n      .addMarginSymbol(green('+'))\n  }\n}\n", "import { uncapitalize } from '@prisma/client-common'\nimport { isObjectEnumValue } from '@prisma/client-runtime-utils'\nimport { Writer } from '@prisma/ts-builders'\n\nimport { ErrorFormat } from '../../getPrismaClient'\nimport { isValidDate } from '../../utils/date'\nimport { isDecimalJsLike } from '../../utils/decimalJsLike'\nimport { isFieldRef } from '../model/FieldRef'\nimport { ArrayValue } from './ArrayValue'\nimport { activeColors, Colors, ErrorBasicBuilder, ErrorWriter, inactiveColors } from './base'\nimport { ObjectField } from './ObjectField'\nimport { ObjectValue } from './ObjectValue'\nimport { ScalarValue } from './ScalarValue'\n\ntype MessageRender = (colors: Colors) => string\n\nexport class ArgumentsRenderingTree implements ErrorBasicBuilder {\n  readonly arguments: ObjectValue\n  private errorMessages: MessageRender[] = []\n\n  constructor(args: ObjectValue) {\n    this.arguments = args\n  }\n\n  write(writer: ErrorWriter): void {\n    writer.write(this.arguments)\n  }\n\n  addErrorMessage(renderer: MessageRender) {\n    this.errorMessages.push(renderer)\n  }\n\n  renderAllMessages(colors: Colors): string {\n    return this.errorMessages.map((messageRenderer) => messageRenderer(colors)).join('\\n')\n  }\n}\n\n/**\n * Given JS call arguments, produces rendering tree for outputting rich errors into the console\n * Difference between rendering tree and plain object is that fields and values can have different attributes:\n * colors, underlines, markers on the margins. `applyValidationError` function will then apply specific formatting\n * to the rendering tree.\n *\n * @param args\n * @returns\n */\nexport function buildArgumentsRenderingTree(args: Record<PropertyKey, unknown>): ArgumentsRenderingTree {\n  return new ArgumentsRenderingTree(buildInputObject(args))\n}\n\nfunction buildInputObject(inputObject: Record<PropertyKey, unknown>) {\n  const object = new ObjectValue()\n\n  for (const [key, value] of Object.entries(inputObject)) {\n    const field = new ObjectField(key, buildInputValue(value))\n    object.addField(field)\n  }\n  return object\n}\n\nfunction buildInputValue(value: unknown) {\n  if (typeof value === 'string') {\n    return new ScalarValue(JSON.stringify(value))\n  }\n\n  if (typeof value === 'number' || typeof value === 'boolean') {\n    return new ScalarValue(String(value))\n  }\n\n  if (typeof value === 'bigint') {\n    return new ScalarValue(`${value}n`)\n  }\n\n  if (value === null) {\n    return new ScalarValue('null')\n  }\n\n  if (value === undefined) {\n    return new ScalarValue('undefined')\n  }\n\n  if (isDecimalJsLike(value)) {\n    return new ScalarValue(`new Prisma.Decimal(\"${value.toFixed()}\")`)\n  }\n\n  if (value instanceof Uint8Array) {\n    if (Buffer.isBuffer(value)) {\n      return new ScalarValue(`Buffer.alloc(${value.byteLength})`)\n    }\n    return new ScalarValue(`new Uint8Array(${value.byteLength})`)\n  }\n\n  if (value instanceof Date) {\n    const dateStr = isValidDate(value) ? value.toISOString() : 'Invalid Date'\n    return new ScalarValue(`new Date(\"${dateStr}\")`)\n  }\n\n  if (isObjectEnumValue(value)) {\n    return new ScalarValue(`Prisma.${value._getName()}`)\n  }\n\n  if (isFieldRef(value)) {\n    return new ScalarValue(`prisma.${uncapitalize(value.modelName)}.$fields.${value.name}`)\n  }\n\n  if (Array.isArray(value)) {\n    return buildInputArray(value)\n  }\n\n  if (typeof value === 'object') {\n    return buildInputObject(value as Record<PropertyKey, unknown>)\n  }\n\n  return new ScalarValue(Object.prototype.toString.call(value))\n}\n\nfunction buildInputArray(array: unknown[]) {\n  const result = new ArrayValue()\n  for (const item of array) {\n    result.addItem(buildInputValue(item))\n  }\n  return result\n}\n\nexport function renderArgsTree(argsTree: ArgumentsRenderingTree, errorFormat: ErrorFormat) {\n  const colors = errorFormat === 'pretty' ? activeColors : inactiveColors\n\n  const message = argsTree.renderAllMessages(colors)\n  const args = new Writer(0, { colors }).write(argsTree).toString()\n\n  return { message, args }\n}\n", "import { FieldRef } from '../types/exported/FieldRef'\n\nexport class FieldRefImpl<Model, FieldType> implements FieldRef<Model, FieldType> {\n  public readonly modelName: Model\n  public readonly name: string\n  public readonly typeName: FieldType\n  public readonly isList: boolean\n  public readonly isEnum: boolean\n\n  constructor(modelName: Model, name: string, fieldType: FieldType, isList: boolean, isEnum: boolean) {\n    this.modelName = modelName\n    this.name = name\n    this.typeName = fieldType\n    this.isList = isList\n    this.isEnum = isEnum\n  }\n\n  _toGraphQLInputType() {\n    const listPrefix = this.isList ? `List` : ''\n    const enumPrefix = this.isEnum ? 'Enum' : ''\n\n    return `${listPrefix}${enumPrefix}${this.typeName}FieldRefInput<${this.modelName}>`\n  }\n}\n\nexport function isFieldRef(value: unknown): value is FieldRef<string, unknown> {\n  return value instanceof FieldRefImpl\n}\n", "import { ErrorBasicBuilder, ErrorWriter } from './base'\nimport { Field } from './Field'\nimport { FormattedString } from './FormattedString'\nimport { Value } from './Value'\n\nconst separator = ': '\nexport class ObjectField implements ErrorBasicBuilder, Field {\n  hasError = false\n  constructor(\n    readonly name: string,\n    public value: Value,\n  ) {}\n\n  markAsError() {\n    this.hasError = true\n  }\n\n  getPrintWidth() {\n    return this.name.length + this.value.getPrintWidth() + separator.length\n  }\n\n  write(writer: ErrorWriter): void {\n    const name = new FormattedString(this.name)\n    if (this.hasError) {\n      name.underline().setColor(writer.context.colors.red)\n    }\n    writer.write(name).write(separator).write(this.value)\n  }\n}\n", "import { Cache, lazyProperty } from '@prisma/client-common'\n\nimport { dmmfToJSModelName } from '../model/utils/dmmfToJSModelName'\nimport { ClientArg, ExtensionArgs, ModelArg, QueryOptionsCb } from '../types/exported/ExtensionArgs'\nimport { BatchQueryOptionsCb, QueryOptionsPrivate } from '../types/internal/ExtensionsInternalArgs'\nimport { ComputedFieldsMap, getComputedFields } from './resultUtils'\n\nclass MergedExtensionsListNode {\n  private computedFieldsCache = new Cache<string, ComputedFieldsMap | undefined>()\n  private modelExtensionsCache = new Cache<string, ModelArg | undefined>()\n  private queryCallbacksCache = new Cache<string, QueryOptionsCb[]>()\n\n  private clientExtensions = lazyProperty(() => {\n    if (!this.extension.client) {\n      return this.previous?.getAllClientExtensions()\n    }\n\n    return {\n      ...this.previous?.getAllClientExtensions(),\n      ...this.extension.client,\n    }\n  })\n\n  private batchCallbacks = lazyProperty(() => {\n    const previous: BatchQueryOptionsCb[] = this.previous?.getAllBatchQueryCallbacks() ?? []\n    const newCb = (this.extension as QueryOptionsPrivate).query?.$__internalBatch\n    if (!newCb) {\n      return previous\n    }\n    return previous.concat(newCb)\n  })\n\n  constructor(\n    public extension: ExtensionArgs,\n    public previous?: MergedExtensionsListNode,\n  ) {}\n\n  getAllComputedFields(dmmfModelName: string): ComputedFieldsMap | undefined {\n    return this.computedFieldsCache.getOrCreate(dmmfModelName, () => {\n      return getComputedFields(this.previous?.getAllComputedFields(dmmfModelName), this.extension, dmmfModelName)\n    })\n  }\n\n  getAllClientExtensions(): ClientArg | undefined {\n    return this.clientExtensions.get()\n  }\n\n  getAllModelExtensions(dmmfModelName: string): ModelArg | undefined {\n    return this.modelExtensionsCache.getOrCreate(dmmfModelName, () => {\n      const jsModelName = dmmfToJSModelName(dmmfModelName)\n      if (!this.extension.model || !(this.extension.model[jsModelName] || this.extension.model.$allModels)) {\n        return this.previous?.getAllModelExtensions(dmmfModelName)\n      }\n\n      return {\n        ...this.previous?.getAllModelExtensions(dmmfModelName),\n        ...this.extension.model.$allModels,\n        ...this.extension.model[jsModelName],\n      }\n    })\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  getAllQueryCallbacks(jsModelName: string | '$none', operation: string) {\n    return this.queryCallbacksCache.getOrCreate(`${jsModelName}:${operation}`, () => {\n      const prevCbs = this.previous?.getAllQueryCallbacks(jsModelName, operation) ?? []\n      const newCbs: QueryOptionsCb[] = []\n      const query = this.extension.query\n\n      if (!query || !(query[jsModelName] || query['$allModels'] || query[operation] || query['$allOperations'])) {\n        return prevCbs\n      }\n\n      if (query[jsModelName] !== undefined) {\n        if (query[jsModelName][operation] !== undefined) {\n          newCbs.push(query[jsModelName][operation])\n        }\n\n        // when the model-bound extension has a wildcard for the operation\n        if (query[jsModelName]['$allOperations'] !== undefined) {\n          newCbs.push(query[jsModelName]['$allOperations'])\n        }\n      }\n\n      // when the extension isn't model-bound, apply it to all models\n      // '$none' is a special case for top-level operations without model\n      if (jsModelName !== '$none' && query['$allModels'] !== undefined) {\n        if (query['$allModels'][operation] !== undefined) {\n          newCbs.push(query['$allModels'][operation])\n        }\n\n        // when the non-model-bound extension has a wildcard for the operation\n        if (query['$allModels']['$allOperations'] !== undefined) {\n          newCbs.push(query['$allModels']['$allOperations'])\n        }\n      }\n\n      // when the extension is not bound to a model & is a top-level operation\n      if (query[operation] !== undefined) {\n        newCbs.push(query[operation] as QueryOptionsCb)\n      }\n\n      // when the extension is not bound to a model & is any top-level operation\n      if (query['$allOperations'] !== undefined) {\n        newCbs.push(query['$allOperations'] as QueryOptionsCb)\n      }\n\n      return prevCbs.concat(newCbs)\n    })\n  }\n\n  getAllBatchQueryCallbacks() {\n    return this.batchCallbacks.get()\n  }\n}\n\n/**\n * Class that holds the list of all extensions, applied to particular instance,\n * as well as resolved versions of the components that need to apply on\n * different levels. Main idea of this class: avoid re-resolving as much of the\n * stuff as possible when new extensions are added while also delaying the\n * resolve until the point it is actually needed. For example, computed fields\n * of the model won't be resolved unless the model is actually queried. Neither\n * adding extensions with `client` component only cause other components to\n * recompute.\n */\nexport class MergedExtensionsList {\n  private constructor(private head?: MergedExtensionsListNode) {}\n\n  static empty() {\n    return new MergedExtensionsList()\n  }\n\n  static single(extension: ExtensionArgs) {\n    return new MergedExtensionsList(new MergedExtensionsListNode(extension))\n  }\n\n  isEmpty(): boolean {\n    return this.head === undefined\n  }\n\n  append(extension: ExtensionArgs) {\n    return new MergedExtensionsList(new MergedExtensionsListNode(extension, this.head))\n  }\n\n  getAllComputedFields(dmmfModelName: string): ComputedFieldsMap | undefined {\n    return this.head?.getAllComputedFields(dmmfModelName)\n  }\n\n  getAllClientExtensions() {\n    return this.head?.getAllClientExtensions()\n  }\n\n  getAllModelExtensions(dmmfModelName: string) {\n    return this.head?.getAllModelExtensions(dmmfModelName)\n  }\n\n  getAllQueryCallbacks(jsModelName: string, operation: string) {\n    return this.head?.getAllQueryCallbacks(jsModelName, operation) ?? []\n  }\n\n  getAllBatchQueryCallbacks() {\n    return this.head?.getAllBatchQueryCallbacks() ?? []\n  }\n}\n", "/**\n * Transforms a model name coming from the DMMF to a runtime model name.\n * @param name\n * @returns\n */\nexport function dmmfToJSModelName(name: string) {\n  return name.replace(/^./, (str) => str.toLowerCase())\n}\n", "import { Cache } from '@prisma/client-common'\nimport { mapObjectValues } from '@prisma/internals'\n\nimport { dmmfToJSModelName } from '../model/utils/dmmfToJSModelName'\nimport { ExtensionArgs, ResultArg, ResultArgsFieldCompute } from '../types/exported/ExtensionArgs'\nimport { Omission, Selection } from '../types/exported/JsApi'\n\nexport type ComputedField = {\n  name: string\n  needs: string[]\n  compute: ResultArgsFieldCompute\n}\n\nexport type ComputedFieldsMap = {\n  [fieldName: string]: ComputedField\n}\n\n/**\n * Given the list of previously resolved computed fields, new extension and dmmf model name, produces a map\n * of all computed fields that may be applied to this model, accounting for all previous and past extensions.\n *\n * All naming conflicts which could be produced by the plain list of extensions are resolved as follows:\n * - extension, that declared later always wins\n * - in a single extension, specific model takes precedence over $allModels\n *\n * Additionally, resolves all `needs` dependencies down to the model fields. For example,\n * if `nameAndTitle` field depends on `fullName` computed field and `title` model field and\n * `fullName` field depends on `firstName` and `lastName` field, full list of `nameAndTitle` dependencies\n * would be `firstName`, `lastName`, `title`.\n * @param previousComputedFields\n * @param extension\n * @param dmmfModelName\n * @returns\n */\nexport function getComputedFields(\n  previousComputedFields: ComputedFieldsMap | undefined,\n  extension: ExtensionArgs,\n  dmmfModelName: string,\n) {\n  const jsName = dmmfToJSModelName(dmmfModelName)\n  if (!extension.result || !(extension.result.$allModels || extension.result[jsName])) {\n    return previousComputedFields\n  }\n\n  return resolveDependencies({\n    ...previousComputedFields,\n    ...getComputedFieldsFromModel(extension.name, previousComputedFields, extension.result.$allModels),\n    ...getComputedFieldsFromModel(extension.name, previousComputedFields, extension.result[jsName]),\n  })\n}\n\nexport function resolveDependencies(computedFields: ComputedFieldsMap): ComputedFieldsMap {\n  const cache = new Cache<string, string[]>()\n  const resolveNeeds = (fieldName: string, visitedFields: Set<string>) => {\n    return cache.getOrCreate(fieldName, () => {\n      if (visitedFields.has(fieldName)) {\n        return [fieldName]\n      }\n      visitedFields.add(fieldName)\n      if (!computedFields[fieldName]) {\n        return [fieldName]\n      }\n      return computedFields[fieldName].needs.flatMap((fieldDep) => resolveNeeds(fieldDep, visitedFields))\n    })\n  }\n\n  return mapObjectValues(computedFields, (field) => {\n    return {\n      ...field,\n      needs: resolveNeeds(field.name, new Set()),\n    }\n  })\n}\n\nfunction getComputedFieldsFromModel(\n  name: string | undefined,\n  previousComputedFields: ComputedFieldsMap | undefined,\n  modelResult: ResultArg | undefined,\n): ComputedFieldsMap {\n  if (!modelResult) {\n    return {}\n  }\n\n  return mapObjectValues(modelResult, ({ needs, compute }, fieldName) => ({\n    name: fieldName,\n    needs: needs ? Object.keys(needs).filter((key) => needs[key]) : [],\n    compute: composeCompute(previousComputedFields, fieldName, compute),\n  }))\n}\n\nfunction composeCompute(\n  previousComputedFields: ComputedFieldsMap | undefined,\n  fieldName: string,\n  nextCompute: ResultArgsFieldCompute,\n): ResultArgsFieldCompute {\n  const previousCompute = previousComputedFields?.[fieldName]?.compute\n  if (!previousCompute) {\n    return nextCompute\n  }\n  return (model, modelName) => {\n    return nextCompute({ ...model, [fieldName]: previousCompute(model, modelName) }, modelName)\n  }\n}\n\nexport function computeEngineSideSelection(\n  selection: Selection,\n  computedFields: ComputedFieldsMap | undefined,\n): Selection {\n  if (!computedFields) {\n    return selection\n  }\n  const result = { ...selection }\n\n  for (const field of Object.values(computedFields)) {\n    if (!selection[field.name]) {\n      continue\n    }\n\n    for (const dependency of field.needs) {\n      result[dependency] = true\n    }\n  }\n  return result\n}\n\n/**\n * Given user-supplied omissions, computes the results to send to the engine, taking\n * into account dependencies of the computed field. Consider following example:\n *\n * ```\n * const xprisma = prisma.$extends({\n *       result: {\n *         user: {\n *           sanitizedPassword: {\n *             needs: { password: true },\n *             compute(user) {\n *               return sanitze(user.password)\n *             },\n *           },\n *         },\n *       },\n * })\n *\n * const user = await xprisma.user.findFirstOrThrow({\n *       omit: {\n *         password: true,\n *       },\n * })\n * ```\n *\n * In that case, user wants to omit the `password` but not `sanitizedPassword`.\n * Since `sanitizedPassword` can not be computed without `password`, we can not let\n * the engine handle omission in this case - we have to still query `password` from the\n * database and omit it on the client, after computing `sanitizedPassword`.\n *\n * This function removes the omission (thus, including the field into result set) if it is a dependency of\n * a non-omitted computed field. Client-side omission after we get a response is handled by `applyResultExtensions`\n *\n * @param omission\n * @param computedFields\n * @returns\n */\nexport function computeEngineSideOmissions(\n  omission: Omission,\n  computedFields: ComputedFieldsMap | undefined,\n): Omission {\n  if (!computedFields) {\n    return omission\n  }\n  const result = { ...omission }\n\n  for (const field of Object.values(computedFields)) {\n    if (omission[field.name]) {\n      continue\n    }\n\n    for (const dependency of field.needs) {\n      delete result[dependency]\n    }\n  }\n  return result\n}\n", "import { Param } from '../types/exported/Param'\n\nexport class ParamImpl<Type, Name extends string> implements Param<Type, Name> {\n  constructor(public readonly name: Name) {}\n}\n\nexport function isParam(value: unknown): value is Param<unknown, string> {\n  return value instanceof ParamImpl\n}\n\nexport function createParam(name: string): Param<unknown, string> {\n  return new ParamImpl(name)\n}\n", "import * as Extensions from './exported/Extensions'\nimport { OperationPayload } from './exported/Payload'\nimport * as Public from './exported/Public'\nimport * as Result from './exported/Result'\nimport * as Utils from './exported/Utils'\n\n/** Specific types */\nexport { Result }\nexport { Extensions }\nexport { Utils }\nexport { Public }\n\nexport { isSkip, Skip, skip } from './exported/Skip'\nexport { type UnknownTypedSql } from './exported/TypedSql'\n\n/** General types */\nexport { type OperationPayload as Payload }\n", "// private symbol that prevents direct construction of a class\nconst secret = Symbol()\n\nexport class Skip {\n  constructor(param?: symbol) {\n    if (param !== secret) {\n      throw new Error(`Skip instance can not be constructed directly`)\n    }\n  }\n\n  ifUndefined<T>(value: T | undefined): T | Skip {\n    if (value === undefined) {\n      return skip\n    }\n    return value\n  }\n}\n\nexport const skip = new Skip(secret)\n\nexport function isSkip(value: unknown): value is Skip {\n  return value instanceof Skip\n}\n", "import { BaseDMMF, lazyProperty, RuntimeDataModel } from '@prisma/client-common'\n\nexport function defineDmmfProperty(target: object, runtimeDataModel: RuntimeDataModel) {\n  const dmmfLazy = lazyProperty(() => runtimeDataModelToBaseDmmf(runtimeDataModel))\n\n  Object.defineProperty(target, 'dmmf', {\n    get: () => dmmfLazy.get(),\n  })\n}\n\nfunction runtimeDataModelToBaseDmmf(runtimeDataModel: RuntimeDataModel): BaseDMMF {\n  if (TARGET_BUILD_TYPE === 'wasm-compiler-edge') {\n    throw new Error('Prisma.dmmf is not available when running in edge runtimes.')\n  }\n\n  return {\n    datamodel: {\n      models: buildDMMFList(runtimeDataModel.models),\n      enums: buildDMMFList(runtimeDataModel.enums),\n      types: buildDMMFList(runtimeDataModel.types),\n    },\n  }\n}\n\nfunction buildDMMFList<T>(map: Record<string, T>): Array<T & { name: string }> {\n  return Object.entries(map).map(([name, props]) => ({ name, ...props }))\n}\n", "type TypedSqlInternal = {\n  sql: string\n  values: readonly unknown[]\n}\n\nconst internals = new WeakMap<TypedSql<any, any>, TypedSqlInternal>()\nconst TypedSqlMarker = '$$PrismaTypedSql'\n\nexport declare const PrivateResultType: unique symbol\n\nexport class TypedSql<Values extends readonly unknown[], Result> {\n  declare [PrivateResultType]: Result\n\n  constructor(sql: string, values: Values) {\n    internals.set(this, {\n      sql,\n      values,\n    })\n\n    Object.defineProperty(this, TypedSqlMarker, { value: TypedSqlMarker })\n  }\n\n  get sql(): string {\n    return internals.get(this)!.sql\n  }\n\n  get values(): Values {\n    return internals.get(this)!.values as Values\n  }\n}\n\nexport type UnknownTypedSql = TypedSql<unknown[], unknown>\n\nexport function makeTypedQueryFactory(sql: string) {\n  return (...values) => new TypedSql(sql, values)\n}\n\n// used so we could detect typed sql instances, created by different instance of runtime\n// or after hmr trigger\nexport function isTypedSql(value: unknown): value is UnknownTypedSql {\n  return value != null && value[TypedSqlMarker] === TypedSqlMarker\n}\n", "import type { Context } from '@opentelemetry/api'\nimport { GetPrismaClientConfig, RuntimeDataModel } from '@prisma/client-common'\nimport { RawValue, Sql } from '@prisma/client-runtime-utils'\nimport { clearLogs, Debug } from '@prisma/debug'\nimport type { SqlDriverAdapterFactory } from '@prisma/driver-adapter-utils'\nimport type { ExtendedSpanOptions, TracingHelper } from '@prisma/instrumentation-contract'\nimport { logger } from '@prisma/internals'\nimport type { SqlCommenterPlugin } from '@prisma/sqlcommenter'\nimport { AsyncResource } from 'async_hooks'\nimport { EventEmitter } from 'events'\n\nimport { PrismaClientInitializationError, PrismaClientValidationError } from '.'\nimport { addProperty, createCompositeProxy, removeProperties } from './core/compositeProxy'\nimport { BatchTransactionOptions, Engine, EngineConfig, Options } from './core/engines'\nimport { AccelerateEngineConfig, AccelerateExtensionFetchDecorator } from './core/engines/common/Engine'\nimport { EngineEvent, LogEmitter } from './core/engines/common/types/Events'\nimport type * as Transaction from './core/engines/common/types/Transaction'\nimport { prettyPrintArguments } from './core/errorRendering/prettyPrintArguments'\nimport { $extends } from './core/extensions/$extends'\nimport { applyAllResultExtensions } from './core/extensions/applyAllResultExtensions'\nimport { applyQueryExtensions } from './core/extensions/applyQueryExtensions'\nimport { MergedExtensionsList } from './core/extensions/MergedExtensionsList'\nimport { resolveResultExtensionContext } from './core/extensions/resolve-result-extension-context'\nimport { getEngineInstance } from './core/init/getEngineInstance'\nimport { GlobalOmitOptions, serializeJsonQuery } from './core/jsonProtocol/serializeJsonQuery'\nimport {\n  applyModelsAndClientExtensions,\n  unApplyModelsAndClientExtensions,\n} from './core/model/applyModelsAndClientExtensions'\nimport { rawCommandArgsMapper } from './core/raw-query/rawCommandArgsMapper'\nimport {\n  checkAlter,\n  rawQueryArgsMapper,\n  sqlMiddlewareArgsMapper,\n  templateStringMiddlewareArgsMapper,\n} from './core/raw-query/rawQueryArgsMapper'\nimport { createPrismaPromiseFactory } from './core/request/createPrismaPromise'\nimport {\n  PrismaPromise,\n  PrismaPromiseInteractiveTransaction,\n  PrismaPromiseTransaction,\n} from './core/request/PrismaPromise'\nimport { UserArgs } from './core/request/UserArgs'\nimport { getTracingHelper } from './core/tracing/TracingHelper'\nimport { getLockCountPromise } from './core/transaction/utils/createLockCountPromise'\nimport { itxClientDenyList } from './core/types/exported/itxClientDenyList'\nimport { JsInputValue } from './core/types/exported/JsApi'\nimport { RawQueryArgs } from './core/types/exported/RawQueryArgs'\nimport { UnknownTypedSql } from './core/types/exported/TypedSql'\nimport { getLogLevel } from './getLogLevel'\nimport type { QueryMiddlewareParams } from './QueryMiddlewareParams'\nimport { RequestHandler } from './RequestHandler'\nimport { CallSite, getCallSite } from './utils/CallSite'\nimport { clientVersion } from './utils/clientVersion'\nimport { validatePrismaClientOptions } from './utils/validatePrismaClientOptions'\nimport { waitForBatch } from './utils/waitForBatch'\n\nconst debug = Debug('prisma:client')\n\ndeclare global {\n  // eslint-disable-next-line no-var\n  var NODE_CLIENT: true\n  const TARGET_BUILD_TYPE: 'wasm-compiler-edge' | 'client'\n}\n\n// used by esbuild for tree-shaking\ntypeof globalThis === 'object' ? (globalThis.NODE_CLIENT = true) : 0\n\nexport type ErrorFormat = 'pretty' | 'colorless' | 'minimal'\n\n/**\n * Options common to all variants of `PrismaClientOptions`, regardless of\n * whether you connect to your database through a driver adapter or through\n * Prisma Accelerate.\n */\nexport interface PrismaClientBaseOptions {\n  /**\n   * @default \"colorless\"\n   */\n  errorFormat?: ErrorFormat\n\n  /**\n   * The default values for Transaction options\n   * maxWait ?= 2000\n   * timeout ?= 5000\n   */\n  transactionOptions?: Transaction.Options\n\n  /**\n   * @example\n   * \\`\\`\\`\n   * // Defaults to stdout\n   * log: ['query', 'info', 'warn']\n   *\n   * // Emit as events\n   * log: [\n   *  { emit: 'stdout', level: 'query' },\n   *  { emit: 'stdout', level: 'info' },\n   *  { emit: 'stdout', level: 'warn' }\n   * ]\n   * \\`\\`\\`\n   * Read more in our [docs](https://pris.ly/d/logging).\n   */\n  log?: Array<LogLevel | LogDefinition>\n\n  omit?: GlobalOmitOptions\n\n  /**\n   * SQL commenter plugins that add metadata to SQL queries as comments.\n   * Comments follow the sqlcommenter format: https://google.github.io/sqlcommenter/\n   *\n   * @example\n   * ```ts\n   * new PrismaClient({\n   *   adapter: new PrismaPg({ connectionString }),\n   *   comments: [\n   *     traceContext(),\n   *     queryInsights(),\n   *   ],\n   * })\n   * ```\n   */\n  comments?: SqlCommenterPlugin[]\n\n  /**\n   * Optional maximum size for the query plan cache. If not provided, a default size will be used.\n   * A value of `0` can be used to disable the cache entirely. A higher cache size can improve\n   * performance for applications that execute a large number of unique queries, while a smaller\n   * cache size can reduce memory usage.\n   *\n   * @example\n   * ```\n   * const prisma = new PrismaClient({\n   *   adapter,\n   *   queryPlanCacheMaxSize: 100,\n   * })\n   * ```\n   */\n  queryPlanCacheMaxSize?: number\n\n  /**\n   * @internal\n   * You probably don't want to use this. \\`__internal\\` is used by internal tooling.\n   */\n  __internal?: {\n    debug?: boolean\n    /** This can be used for testing purposes */\n    configOverride?: (config: GetPrismaClientConfig) => GetPrismaClientConfig\n  }\n}\n\n// NOTE: `PrismaClientOptionsWithAccelerateUrl` is intentionally declared before\n// `PrismaClientOptionsWithAdapter`, and `PrismaClientOptions` lists them in\n// the same order in its union. TypeScript's missing-property error elaboration\n// for a discriminated union reports against the *second* union member, so the\n// adapter branch must come second to make `new PrismaClient({ log: [...] })`\n// say \"adapter is missing\" (the recommended option for most users) rather than\n// \"accelerateUrl is missing\". The generated client mirrors this order in\n// `prismaNamespace.ts`.\n\n/**\n * `PrismaClient` options for connecting to your database through Prisma\n * Accelerate instead of a driver adapter.\n *\n * Learn more: https://pris.ly/d/accelerate\n */\nexport interface PrismaClientOptionsWithAccelerateUrl extends PrismaClientBaseOptions {\n  /**\n   * The Prisma Accelerate connection URL. Use this option to connect to\n   * your database through Prisma Accelerate instead of using a driver\n   * adapter to connect directly.\n   *\n   * Learn more: https://pris.ly/d/accelerate\n   */\n  accelerateUrl: string\n  adapter?: never\n}\n\n/**\n * `PrismaClient` options for connecting to your database through a driver\n * adapter. This is the common case in Prisma 7.\n *\n * Learn more: https://pris.ly/d/driver-adapters\n */\nexport interface PrismaClientOptionsWithAdapter extends PrismaClientBaseOptions {\n  /**\n   * A driver adapter that PrismaClient uses to connect to your database,\n   * such as the ones provided by `@prisma/adapter-pg`,\n   * `@prisma/adapter-libsql`, `@prisma/adapter-planetscale`, etc.\n   *\n   * A driver adapter is **required** unless you connect to your database\n   * through Prisma Accelerate (in which case use `accelerateUrl` instead).\n   *\n   * Learn more: https://pris.ly/d/driver-adapters\n   *\n   * @example\n   * ```ts\n   * import { PrismaPg } from '@prisma/adapter-pg'\n   * import { PrismaClient } from './generated/prisma/client'\n   *\n   * const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })\n   * const prisma = new PrismaClient({ adapter })\n   * ```\n   */\n  adapter: SqlDriverAdapterFactory\n  accelerateUrl?: never\n}\n\n/**\n * Options passed to the `PrismaClient` constructor.\n *\n * A driver adapter (or, alternatively, a Prisma Accelerate URL) is **required**.\n * See {@link PrismaClientOptionsWithAdapter} and\n * {@link PrismaClientOptionsWithAccelerateUrl} for the two variants. All other\n * properties live in {@link PrismaClientBaseOptions} and are optional.\n *\n * Learn more about driver adapters: https://pris.ly/d/driver-adapters\n */\nexport type PrismaClientOptions = PrismaClientOptionsWithAccelerateUrl | PrismaClientOptionsWithAdapter\n\nexport type Unpacker = (data: any) => any\n\nexport type InternalRequestParams = {\n  /**\n   * The original client method being called.\n   * Even though the rootField / operation can be changed,\n   * this method stays as it is, as it's what the user's\n   * code looks like\n   */\n  clientMethod: string // TODO what is this\n  /**\n   * Name of js model that triggered the request. Might be used\n   * for warnings or error messages\n   */\n  jsModelName?: string\n  // Extra headers for data proxy.\n  callsite?: CallSite\n  transaction?: PrismaPromiseTransaction\n  unpacker?: Unpacker // TODO what is this\n  otelParentCtx?: Context\n  /** Used to \"desugar\" a user input into an \"expanded\" one */\n  argsMapper?: (args?: UserArgs) => UserArgs\n\n  /** Used to convert args for middleware and back */\n  middlewareArgsMapper?: MiddlewareArgsMapper<unknown, unknown>\n  /** Used for Accelerate client extension via Data Proxy */\n  customDataProxyFetch?: AccelerateExtensionFetchDecorator\n} & Omit<QueryMiddlewareParams, 'runInTransaction'>\n\nexport type MiddlewareArgsMapper<RequestArgs, MiddlewareArgs> = {\n  requestArgsToMiddlewareArgs(requestArgs: RequestArgs): MiddlewareArgs\n  middlewareArgsToRequestArgs(middlewareArgs: MiddlewareArgs): RequestArgs\n}\n\nconst noopMiddlewareArgsMapper: MiddlewareArgsMapper<unknown, unknown> = {\n  requestArgsToMiddlewareArgs: (param) => param,\n  middlewareArgsToRequestArgs: (param) => param,\n}\n\n/* Types for Logging */\nexport type LogLevel = 'info' | 'query' | 'warn' | 'error'\nexport type LogDefinition = {\n  level: LogLevel\n  emit: 'stdout' | 'event'\n}\n\nexport type QueryEvent = {\n  timestamp: Date\n  query: string\n  params: string\n  duration: number\n  target: string\n}\n\nexport type LogEvent = {\n  timestamp: Date\n  message: string\n  target: string\n}\n/* End Types for Logging */\n\ntype ExtendedEventType = LogLevel | 'beforeExit'\ntype EventCallback<E extends ExtendedEventType> = [E] extends ['beforeExit']\n  ? () => Promise<void>\n  : [E] extends [LogLevel]\n    ? (event: EngineEvent<E>) => void\n    : never\n\nconst TX_SCOPE_CONTEXT = Symbol.for('prisma.client.transaction.scope_context')\n\ntype ItxScopeState = {\n  stack: string[]\n}\n\ntype TopLevelItxScopeContext = {\n  kind: 'top-level'\n}\n\ntype NestedItxScopeContext = {\n  kind: 'nested'\n  txId: string\n  scopeId: string\n  scopeState: ItxScopeState\n}\n\ntype ItxScopeContext = TopLevelItxScopeContext | NestedItxScopeContext\n\nfunction getItxScopeContext(client: object): ItxScopeContext {\n  const symbolStorage = client as Record<symbol, unknown>\n  const context = symbolStorage[TX_SCOPE_CONTEXT]\n\n  if (context === undefined) {\n    return { kind: 'top-level' }\n  }\n\n  if (isNestedItxScopeContext(context)) {\n    return context\n  }\n\n  throw new Error('Internal error: inconsistent transaction scope context.')\n}\n\nfunction isNestedItxScopeContext(value: unknown): value is NestedItxScopeContext {\n  if (typeof value !== 'object' || value === null) {\n    return false\n  }\n\n  const objectValue = value as Record<string, unknown>\n  return (\n    objectValue['kind'] === 'nested' &&\n    typeof objectValue['txId'] === 'string' &&\n    typeof objectValue['scopeId'] === 'string' &&\n    isItxScopeState(objectValue['scopeState'])\n  )\n}\n\nfunction isItxScopeState(value: unknown): value is ItxScopeState {\n  if (typeof value !== 'object' || value === null) {\n    return false\n  }\n\n  return Array.isArray(value['stack'])\n}\n\nfunction createItxScopeId(): string {\n  return typeof globalThis.crypto?.randomUUID === 'function'\n    ? globalThis.crypto.randomUUID()\n    : `${Date.now()}-${Math.random().toString(16).slice(2)}`\n}\n\nconst BatchTxIdCounter = {\n  id: 0,\n  nextId() {\n    return ++this.id\n  },\n}\n\nexport type Client =\n  ReturnType<typeof getPrismaClient> extends new (optionsArg: PrismaClientOptions) => infer T ? T : never\n\nexport function getPrismaClient(config: GetPrismaClientConfig) {\n  class PrismaClient {\n    _originalClient = this\n    _runtimeDataModel: RuntimeDataModel\n    _requestHandler: RequestHandler\n    _connectionPromise?: Promise<any>\n    _disconnectionPromise?: Promise<any>\n    _engineConfig: EngineConfig\n    _accelerateEngineConfig: AccelerateEngineConfig\n    _clientVersion: string\n    _errorFormat: ErrorFormat\n    _tracingHelper: TracingHelper\n    _previewFeatures: string[]\n    _activeProvider: string\n    _globalOmit?: GlobalOmitOptions\n    _extensions: MergedExtensionsList\n    /**\n     * @remarks This is used internally by Policy, do not rename or remove\n     */\n    _engine: Engine\n    /**\n     * A fully constructed/applied Client that references the parent\n     * PrismaClient. This is used for Client extensions only.\n     */\n    _appliedParent: PrismaClient\n    _createPrismaPromise = createPrismaPromiseFactory()\n\n    constructor(optionsArg: PrismaClientOptions) {\n      if (!optionsArg) {\n        throw new PrismaClientInitializationError(\n          `\\\nPrismaClient was instantiated without any options. A driver adapter is required to connect to your database.\n\nPass a driver adapter to the PrismaClient constructor, for example:\n\n  import { PrismaPg } from '@prisma/adapter-pg'\n  import { PrismaClient } from './generated/prisma/client'\n\n  const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })\n  const prisma = new PrismaClient({ adapter })\n\nLearn more about driver adapters: https://pris.ly/d/driver-adapters\n\nIf you use Prisma Accelerate instead of connecting to your database directly, pass \\`accelerateUrl\\` to the PrismaClient constructor instead of \\`adapter\\`.`,\n          clientVersion,\n        )\n      }\n      config = optionsArg.__internal?.configOverride?.(config) ?? config\n      validatePrismaClientOptions(optionsArg, config)\n\n      // prevents unhandled error events when users do not explicitly listen to them\n      const logEmitter = new EventEmitter().on('error', () => {}) as LogEmitter\n\n      this._extensions = MergedExtensionsList.empty()\n      this._previewFeatures = config.previewFeatures\n      this._clientVersion = config.clientVersion ?? clientVersion\n      this._activeProvider = config.activeProvider\n      this._globalOmit = optionsArg?.omit\n      this._tracingHelper = getTracingHelper()\n\n      /**\n       * Initialise and validate the Driver Adapter, if provided.\n       */\n\n      let adapter: SqlDriverAdapterFactory | undefined\n      if (optionsArg.adapter) {\n        adapter = optionsArg.adapter\n\n        // Note:\n        // - `getConfig(..).datasources[0].provider` can be `postgresql`, `postgres`, `mysql`, or other known providers\n        // - `getConfig(..).datasources[0].activeProvider`, stored in `config.activeProvider`, can be `postgresql`, `mysql`, or other known providers\n        // - `adapter.provider` can be `postgres`, `mysql`, or `sqlite`, and changing this requires changes to Rust as well,\n        //    see https://github.com/prisma/prisma-engines/blob/d116c37d7d27aee74fdd840fc85ab2b45407e5ce/query-engine/driver-adapters/src/types.rs#L22-L23.\n        //\n        // TODO: Normalize these provider names once and for all in Prisma 6.\n        const expectedDriverAdapterProvider =\n          config.activeProvider === 'postgresql'\n            ? 'postgres'\n            : // CockroachDB is only accessible through Postgres driver adapters\n              config.activeProvider === 'cockroachdb'\n              ? 'postgres'\n              : config.activeProvider\n\n        if (adapter.provider !== expectedDriverAdapterProvider) {\n          throw new PrismaClientInitializationError(\n            `The Driver Adapter \\`${adapter.adapterName}\\`, based on \\`${adapter.provider}\\`, is not compatible with the provider \\`${expectedDriverAdapterProvider}\\` specified in the Prisma schema.`,\n            this._clientVersion,\n          )\n        }\n      }\n\n      try {\n        const options: PrismaClientOptions = optionsArg ?? {}\n        const internal = options.__internal ?? {}\n\n        const useDebug = internal.debug === true\n        if (useDebug) {\n          Debug.enable('prisma:client')\n        }\n\n        if (options.errorFormat) {\n          this._errorFormat = options.errorFormat\n        } else if (process.env.NODE_ENV === 'production') {\n          this._errorFormat = 'minimal'\n        } else if (process.env.NO_COLOR) {\n          this._errorFormat = 'colorless'\n        } else {\n          this._errorFormat = 'colorless' // default errorFormat\n        }\n\n        this._runtimeDataModel = config.runtimeDataModel\n\n        this._engineConfig = {\n          enableDebugLogs: useDebug,\n          logLevel: options.log && (getLogLevel(options.log) as any), // TODO\n          logQueries:\n            options.log &&\n            Boolean(\n              typeof options.log === 'string'\n                ? options.log === 'query'\n                : options.log.find((o) => (typeof o === 'string' ? o === 'query' : o.level === 'query')),\n            ),\n          compilerWasm: config.compilerWasm,\n          clientVersion: config.clientVersion,\n          previewFeatures: this._previewFeatures,\n          activeProvider: config.activeProvider,\n          inlineSchema: config.inlineSchema,\n          tracingHelper: this._tracingHelper,\n          transactionOptions: {\n            maxWait: options.transactionOptions?.maxWait ?? 2000,\n            timeout: options.transactionOptions?.timeout ?? 5000,\n            isolationLevel: options.transactionOptions?.isolationLevel,\n          },\n          logEmitter,\n          adapter,\n          accelerateUrl: options.accelerateUrl,\n          sqlCommenters: options.comments,\n          parameterizationSchema: config.parameterizationSchema,\n          runtimeDataModel: config.runtimeDataModel,\n          queryPlanCacheMaxSize: optionsArg.queryPlanCacheMaxSize,\n        }\n\n        // Used in <https://github.com/prisma/prisma-extension-accelerate/blob/b6ffa853f038780f5ab2fc01bff584ca251f645b/src/extension.ts#L514>\n        this._accelerateEngineConfig = Object.create(this._engineConfig)\n        this._accelerateEngineConfig.accelerateUtils = {\n          resolveDatasourceUrl: () => {\n            if (options.accelerateUrl) {\n              return options.accelerateUrl\n            }\n            throw new PrismaClientInitializationError(\n              `\\\n\\`accelerateUrl\\` is required when using \\`@prisma/extension-accelerate\\`:\n\nnew PrismaClient({\n  accelerateUrl: \"prisma://...\",\n}).$extends(withAccelerate())\n`,\n              config.clientVersion,\n            )\n          },\n        }\n\n        debug('clientVersion', config.clientVersion)\n\n        this._engine = getEngineInstance(this._engineConfig)\n        this._requestHandler = new RequestHandler(this, logEmitter)\n\n        if (options.log) {\n          for (const log of options.log) {\n            const level = typeof log === 'string' ? log : log.emit === 'stdout' ? log.level : null\n            if (level) {\n              this.$on(level, (event) => {\n                logger.log(`${logger.tags[level] ?? ''}`, (event as LogEvent).message || (event as QueryEvent).query)\n              })\n            }\n          }\n        }\n      } catch (e: any) {\n        e.clientVersion = this._clientVersion\n        throw e\n      }\n\n      // the first client has no parent so it is its own parent client\n      // this is used for extensions to reference their parent client\n      return (this._appliedParent = applyModelsAndClientExtensions(this))\n      // this applied client is also a custom constructor return value\n    }\n\n    get [Symbol.toStringTag]() {\n      return 'PrismaClient'\n    }\n\n    $on<E extends ExtendedEventType>(eventType: E, callback: EventCallback<E>): PrismaClient {\n      if (eventType === 'beforeExit') {\n        this._engine.onBeforeExit(callback as EventCallback<'beforeExit'>)\n      } else if (eventType) {\n        this._engineConfig.logEmitter.on(eventType, callback as EventCallback<LogLevel>)\n      }\n      return this\n    }\n\n    $connect() {\n      try {\n        return this._engine.start()\n      } catch (e: any) {\n        e.clientVersion = this._clientVersion\n        throw e\n      }\n    }\n\n    /**\n     * Disconnect from the database\n     */\n    async $disconnect() {\n      try {\n        await this._engine.stop()\n      } catch (e: any) {\n        e.clientVersion = this._clientVersion\n        throw e\n      } finally {\n        // Debug module keeps a list of last 100 logs regardless of environment\n        // variables. This can cause a memory leak. It's especially bad in jest\n        // environment where keeping an error in this list prevents jest sandbox\n        // from being GCed. Clearing logs on disconnect helps to avoid that\n        clearLogs()\n      }\n    }\n\n    /**\n     * Executes a raw query and always returns a number\n     */\n    $executeRawInternal(\n      transaction: PrismaPromiseTransaction | undefined,\n      clientMethod: string,\n      args: RawQueryArgs,\n      middlewareArgsMapper?: MiddlewareArgsMapper<unknown, unknown>,\n    ): Promise<number> {\n      const activeProvider = this._activeProvider\n\n      return this._request({\n        action: 'executeRaw',\n        args,\n        transaction,\n        clientMethod,\n        argsMapper: rawQueryArgsMapper({ clientMethod, activeProvider, clientVersion: this._clientVersion }),\n        callsite: getCallSite(this._errorFormat),\n        dataPath: [],\n        middlewareArgsMapper,\n      })\n    }\n\n    /**\n     * Executes a raw query provided through a safe tag function\n     * @see https://github.com/prisma/prisma/issues/7142\n     *\n     * @param query\n     * @param values\n     * @returns\n     */\n    $executeRaw(query: TemplateStringsArray | Sql, ...values: any[]) {\n      return this._createPrismaPromise((transaction) => {\n        if ((query as TemplateStringsArray).raw !== undefined || (query as Sql).sql !== undefined) {\n          const [sql, argsMapper] = toSql(query, values)\n          checkAlter(\n            this._activeProvider,\n            sql.text,\n            sql.values,\n            Array.isArray(query) ? 'prisma.$executeRaw`<SQL>`' : 'prisma.$executeRaw(sql`<SQL>`)',\n          )\n          return this.$executeRawInternal(transaction, '$executeRaw', sql, argsMapper)\n        }\n\n        throw new PrismaClientValidationError(\n          `\\`$executeRaw\\` is a tag function, please use it like the following:\n\\`\\`\\`\nconst result = await prisma.$executeRaw\\`UPDATE User SET cool = \\${true} WHERE email = \\${'user@email.com'};\\`\n\\`\\`\\`\n\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#executeraw\n`,\n          { clientVersion: this._clientVersion },\n        )\n      })\n    }\n\n    /**\n     * Unsafe counterpart of `$executeRaw` that is susceptible to SQL injections\n     * @see https://github.com/prisma/prisma/issues/7142\n     *\n     * @param query\n     * @param values\n     * @returns\n     */\n    $executeRawUnsafe(query: string, ...values: RawValue[]) {\n      return this._createPrismaPromise((transaction) => {\n        checkAlter(this._activeProvider, query, values, 'prisma.$executeRawUnsafe(<SQL>, [...values])')\n        return this.$executeRawInternal(transaction, '$executeRawUnsafe', [query, ...values])\n      })\n    }\n\n    /**\n     * Executes a raw command only for MongoDB\n     *\n     * @param command\n     * @returns\n     */\n    $runCommandRaw(command: Record<string, JsInputValue>) {\n      if (config.activeProvider !== 'mongodb') {\n        throw new PrismaClientValidationError(\n          `The ${config.activeProvider} provider does not support $runCommandRaw. Use the mongodb provider.`,\n          { clientVersion: this._clientVersion },\n        )\n      }\n\n      return this._createPrismaPromise((transaction) => {\n        return this._request({\n          args: command,\n          clientMethod: '$runCommandRaw',\n          dataPath: [],\n          action: 'runCommandRaw',\n          argsMapper: rawCommandArgsMapper,\n          callsite: getCallSite(this._errorFormat),\n          transaction: transaction,\n        })\n      })\n    }\n\n    /**\n     * Executes a raw query and returns selected data\n     */\n    async $queryRawInternal(\n      transaction: PrismaPromiseTransaction | undefined,\n      clientMethod: string,\n      args: RawQueryArgs,\n      middlewareArgsMapper?: MiddlewareArgsMapper<unknown, unknown>,\n    ) {\n      const activeProvider = this._activeProvider\n\n      return this._request({\n        action: 'queryRaw',\n        args,\n        transaction,\n        clientMethod,\n        argsMapper: rawQueryArgsMapper({ clientMethod, activeProvider, clientVersion: this._clientVersion }),\n        callsite: getCallSite(this._errorFormat),\n        dataPath: [],\n        middlewareArgsMapper,\n      })\n    }\n\n    /**\n     * Executes a raw query provided through a safe tag function\n     * @see https://github.com/prisma/prisma/issues/7142\n     *\n     * @param query\n     * @param values\n     * @returns\n     */\n    $queryRaw(query: TemplateStringsArray | Sql, ...values: any[]) {\n      return this._createPrismaPromise((transaction) => {\n        if ((query as TemplateStringsArray).raw !== undefined || (query as Sql).sql !== undefined) {\n          return this.$queryRawInternal(transaction, '$queryRaw', ...toSql(query, values))\n        }\n\n        throw new PrismaClientValidationError(\n          `\\`$queryRaw\\` is a tag function, please use it like the following:\n\\`\\`\\`\nconst result = await prisma.$queryRaw\\`SELECT * FROM User WHERE id = \\${1} OR email = \\${'user@email.com'};\\`\n\\`\\`\\`\n\nOr read our docs at https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#queryraw\n`,\n          { clientVersion: this._clientVersion },\n        )\n      })\n    }\n\n    /**\n     * Counterpart to $queryRaw, that returns strongly typed results\n     * @param typedSql\n     */\n    $queryRawTyped(typedSql: UnknownTypedSql) {\n      return this._createPrismaPromise((transaction) => {\n        if (!this._hasPreviewFlag('typedSql')) {\n          throw new PrismaClientValidationError(\n            '`typedSql` preview feature must be enabled in order to access $queryRawTyped API',\n            { clientVersion: this._clientVersion },\n          )\n        }\n        return this.$queryRawInternal(transaction, '$queryRawTyped', typedSql)\n      })\n    }\n\n    /**\n     * Unsafe counterpart of `$queryRaw` that is susceptible to SQL injections\n     * @see https://github.com/prisma/prisma/issues/7142\n     *\n     * @param query\n     * @param values\n     * @returns\n     */\n    $queryRawUnsafe(query: string, ...values: RawValue[]) {\n      return this._createPrismaPromise((transaction) => {\n        return this.$queryRawInternal(transaction, '$queryRawUnsafe', [query, ...values])\n      })\n    }\n\n    /**\n     * Execute a batch of requests in a transaction\n     * @param requests\n     * @param options\n     */\n    _transactionWithArray({\n      promises,\n      options,\n    }: {\n      promises: Array<PrismaPromise<any>>\n      options?: BatchTransactionOptions\n    }): Promise<any> {\n      const id = BatchTxIdCounter.nextId()\n      const lock = getLockCountPromise(promises.length)\n\n      const requests = promises.map((request, index) => {\n        if (request?.[Symbol.toStringTag] !== 'PrismaPromise') {\n          throw new Error(\n            `All elements of the array need to be Prisma Client promises. Hint: Please make sure you are not awaiting the Prisma client calls you intended to pass in the $transaction function.`,\n          )\n        }\n\n        const isolationLevel = options?.isolationLevel ?? this._engineConfig.transactionOptions.isolationLevel\n        const transaction = {\n          kind: 'batch',\n          id,\n          index,\n          isolationLevel,\n          maxWait: options?.maxWait ?? this._engineConfig.transactionOptions.maxWait,\n          timeout: options?.timeout ?? this._engineConfig.transactionOptions.timeout,\n          lock,\n        } as const\n        return request.requestTransaction?.(transaction) ?? request\n      })\n\n      return waitForBatch(requests)\n    }\n\n    /**\n     * Perform a long-running transaction\n     * @param callback\n     * @param options\n     * @returns\n     */\n    async _transactionWithCallback({\n      callback,\n      options = {},\n    }: {\n      callback: (client: Client) => Promise<unknown>\n      options?: Options\n    }) {\n      const itxContext = getItxScopeContext(this)\n      const isNested = itxContext.kind === 'nested'\n      const scopeState: ItxScopeState = isNested ? itxContext.scopeState : { stack: [] }\n      const scopeStack = scopeState.stack\n\n      const scopeId = createItxScopeId()\n\n      if (isNested) {\n        // Only the currently-active (innermost) scope can start another nested scope.\n        // This prevents sibling nested transactions from running concurrently.\n        const activeScope = scopeStack.at(-1)\n        if (activeScope !== itxContext.scopeId) {\n          throw new Error('Concurrent nested transactions are not supported')\n        }\n\n        // Re-use the underlying transaction in the engine by reusing the same transaction id.\n        options.newTxId = itxContext.txId\n      }\n      scopeStack.push(scopeId)\n\n      const headers = { traceparent: this._tracingHelper.getTraceParent() }\n\n      const optionsWithDefaults: Options = {\n        maxWait: options?.maxWait ?? this._engineConfig.transactionOptions.maxWait,\n        timeout: options?.timeout ?? this._engineConfig.transactionOptions.timeout,\n        isolationLevel: options?.isolationLevel ?? this._engineConfig.transactionOptions.isolationLevel,\n        newTxId: options.newTxId,\n      }\n      let info: Transaction.InteractiveTransactionInfo<unknown>\n      try {\n        info = await this._engine.transaction('start', headers, optionsWithDefaults)\n      } catch (e) {\n        // Ensure we don't leave the scope stack dirty if starting the transaction fails.\n        if (scopeStack.at(-1) === scopeId) scopeStack.pop()\n        throw e\n      }\n\n      let result: unknown\n      try {\n        // execute user logic with a proxied the client\n        const transaction = { kind: 'itx', ...info } as const\n\n        result = await callback(this._createItxClient(transaction, scopeId, scopeState))\n\n        if (isNested) {\n          // Don't allow closing a transaction if we are not the active scope.\n          if (scopeStack.at(-1) !== scopeId) {\n            throw new Error('Nested transactions must be closed in reverse order of creation.')\n          }\n        } else if (scopeStack.length !== 1) {\n          throw new Error('Cannot close transaction while a nested transaction is still active.')\n        }\n\n        await this._engine.transaction('commit', headers, info)\n      } catch (e: any) {\n        // If we try to close out-of-order (e.g. un-awaited nested transaction),\n        // the TransactionManager depth will be > 1 and a single rollback would\n        // only roll back to the latest savepoint, leaving the top-level transaction\n        // open and leaking it. Force rollback to depth 0 in that case.\n        const isOrderViolation = scopeStack.at(-1) !== scopeId\n        const rollbackScopeCount = isOrderViolation ? Math.max(1, scopeStack.length) : 1\n        for (let i = 0; i < rollbackScopeCount; i++) {\n          await this._engine.transaction('rollback', headers, info).catch((rollbackError) => {\n            debug('rollback attempt %d/%d failed: %O', i + 1, rollbackScopeCount, rollbackError)\n          })\n        }\n\n        throw e // silent rollback, throw original error\n      } finally {\n        if (scopeStack.at(-1) === scopeId) {\n          scopeStack.pop()\n        } else {\n          // Reset the scope stack to avoid poisoning this transaction context after an ordering violation.\n          scopeStack.length = 0\n        }\n      }\n\n      return result\n    }\n\n    _createItxClient(\n      transaction: PrismaPromiseInteractiveTransaction,\n      scopeId: string,\n      scopeState: ItxScopeState,\n    ): Client {\n      const itxScopeContext: NestedItxScopeContext = {\n        kind: 'nested',\n        txId: transaction.id,\n        scopeId,\n        scopeState,\n      }\n\n      return createCompositeProxy(\n        applyModelsAndClientExtensions(\n          createCompositeProxy(unApplyModelsAndClientExtensions(this), [\n            addProperty('_appliedParent', () => this._appliedParent._createItxClient(transaction, scopeId, scopeState)),\n            addProperty('_createPrismaPromise', () => createPrismaPromiseFactory(transaction)),\n            addProperty(TX_SCOPE_CONTEXT, () => itxScopeContext),\n          ]),\n        ),\n        [removeProperties(itxClientDenyList)],\n      )\n    }\n\n    /**\n     * Execute queries within a transaction\n     * @param input a callback or a query list\n     * @param options to set timeouts (callback)\n     * @returns\n     */\n    $transaction(input: any, options?: any) {\n      let callback: () => Promise<any>\n\n      // iTx - Interactive transaction\n      if (typeof input === 'function') {\n        if (this._engineConfig.adapter?.adapterName === '@prisma/adapter-d1') {\n          callback = () => {\n            throw new Error(\n              'Cloudflare D1 does not support interactive transactions. We recommend you to refactor your queries with that limitation in mind, and use batch transactions with `prisma.$transactions([])` where applicable.',\n            )\n          }\n        } else if (config.activeProvider === 'mongodb' && getItxScopeContext(this).kind === 'nested') {\n          callback = () => {\n            throw new PrismaClientValidationError(\n              `The ${config.activeProvider} provider does not support nested transactions`,\n              { clientVersion: this._clientVersion },\n            )\n          }\n        } else {\n          callback = () => this._transactionWithCallback({ callback: input, options })\n        }\n      } else {\n        // Batch transaction\n        callback = () => this._transactionWithArray({ promises: input, options })\n      }\n\n      const spanOptions = {\n        name: 'transaction',\n        attributes: { method: '$transaction' },\n      }\n\n      return this._tracingHelper.runInChildSpan(spanOptions, callback)\n    }\n\n    /**\n     * Runs the middlewares over params before executing a request\n     * @param internalParams\n     * @returns\n     */\n    _request(internalParams: InternalRequestParams): Promise<any> {\n      // this is the otel context that is active at the callsite\n      internalParams.otelParentCtx = this._tracingHelper.getActiveContext()\n      const middlewareArgsMapper = internalParams.middlewareArgsMapper ?? noopMiddlewareArgsMapper\n\n      // make sure that we don't leak extra properties to users\n      const params: QueryMiddlewareParams = {\n        args: middlewareArgsMapper.requestArgsToMiddlewareArgs(internalParams.args),\n        dataPath: internalParams.dataPath,\n        runInTransaction: Boolean(internalParams.transaction),\n        action: internalParams.action,\n        model: internalParams.model,\n      }\n\n      // span options for opentelemetry instrumentation\n      const spanOptions = {\n        operation: {\n          name: 'operation',\n          attributes: {\n            method: params.action,\n            model: params.model,\n            name: params.model ? `${params.model}.${params.action}` : params.action,\n          },\n        } as ExtendedSpanOptions,\n      }\n\n      // prepare recursive fn that will pipe params through middlewares\n      const consumer = async (changedMiddlewareParams: QueryMiddlewareParams) => {\n        // we proceed with request execution\n        // before we send the execution request, we use the changed params\n        const { runInTransaction, args, ...changedRequestParams } = changedMiddlewareParams\n        const requestParams = {\n          ...internalParams,\n          ...changedRequestParams,\n        }\n\n        if (args) {\n          requestParams.args = middlewareArgsMapper.middlewareArgsToRequestArgs(args)\n        }\n\n        // if middleware switched off `runInTransaction`, unset `transaction`\n        // property on request as well so it will be executed outside of the tx\n        if (internalParams.transaction !== undefined && runInTransaction === false) {\n          delete requestParams.transaction // client extensions check for this\n        }\n\n        const result = await applyQueryExtensions(this, requestParams) // also executes the query\n        if (!requestParams.model) {\n          return result\n        }\n\n        const extensionContext = resolveResultExtensionContext({\n          dataPath: requestParams.dataPath,\n          modelName: requestParams.model,\n          args: requestParams.args,\n          runtimeDataModel: this._runtimeDataModel,\n        })\n\n        return applyAllResultExtensions({\n          result,\n          modelName: extensionContext.modelName,\n          args: extensionContext.args,\n          extensions: this._extensions,\n          runtimeDataModel: this._runtimeDataModel,\n          globalOmit: this._globalOmit,\n        })\n      }\n\n      return this._tracingHelper.runInChildSpan(spanOptions.operation, () => {\n        if (NODE_CLIENT) {\n          // https://github.com/prisma/prisma/issues/3148 not for edge client\n          const asyncRes = new AsyncResource('prisma-client-request')\n          return asyncRes.runInAsyncScope(() => consumer(params))\n        }\n\n        return consumer(params)\n      })\n    }\n\n    async _executeRequest({\n      args,\n      clientMethod,\n      dataPath,\n      callsite,\n      action,\n      model,\n      argsMapper,\n      transaction,\n      unpacker,\n      otelParentCtx,\n      customDataProxyFetch,\n    }: InternalRequestParams) {\n      try {\n        // execute argument transformation before execution\n        args = argsMapper ? argsMapper(args) : args\n\n        const spanOptions: ExtendedSpanOptions = {\n          name: 'serialize',\n        }\n\n        const message = this._tracingHelper.runInChildSpan(spanOptions, () =>\n          serializeJsonQuery({\n            modelName: model,\n            runtimeDataModel: this._runtimeDataModel,\n            action,\n            args,\n            clientMethod,\n            callsite,\n            extensions: this._extensions,\n            errorFormat: this._errorFormat,\n            clientVersion: this._clientVersion,\n            previewFeatures: this._previewFeatures,\n            globalOmit: this._globalOmit,\n          }),\n        )\n\n        // as prettyPrintArguments takes a bit of compute\n        // we only want to do it, if debug is enabled for 'prisma-client'\n        if (Debug.enabled('prisma:client')) {\n          debug(`Prisma Client call:`)\n          debug(`prisma.${clientMethod}(${prettyPrintArguments(args)})`)\n          debug(`Generated request:`)\n          debug(JSON.stringify(message, null, 2) + '\\n')\n        }\n\n        if (transaction?.kind === 'batch') {\n          /** @see {@link getLockCountPromise} */\n          await transaction.lock\n        }\n\n        return this._requestHandler.request({\n          protocolQuery: message,\n          modelName: model,\n          action,\n          clientMethod,\n          dataPath,\n          callsite,\n          args,\n          extensions: this._extensions,\n          transaction,\n          unpacker,\n          otelParentCtx,\n          otelChildCtx: this._tracingHelper.getActiveContext(),\n          globalOmit: this._globalOmit,\n          customDataProxyFetch,\n        })\n      } catch (e) {\n        e.clientVersion = this._clientVersion\n        throw e\n      }\n    }\n\n    /**\n     * Shortcut for checking a preview flag\n     * @param feature preview flag\n     * @returns\n     */\n    _hasPreviewFlag(feature: string) {\n      return !!this._engineConfig.previewFeatures?.includes(feature)\n    }\n\n    $extends = $extends\n  }\n\n  return PrismaClient\n}\n\nfunction toSql(query: TemplateStringsArray | Sql, values: unknown[]): [Sql, MiddlewareArgsMapper<unknown, unknown>] {\n  if (isTemplateStringArray(query)) {\n    return [new Sql(query, values), templateStringMiddlewareArgsMapper]\n  }\n\n  return [query, sqlMiddlewareArgsMapper]\n}\n\nfunction isTemplateStringArray(value: unknown): value is TemplateStringsArray {\n  return Array.isArray(value) && Array.isArray(value['raw'])\n}\n", "", "export { addObjectProperties as addObjectProperties } from './addObjectProperties'\nexport { addProperty } from './addProperty'\nexport { cacheProperties } from './cacheProperties'\nexport { type CompositeProxyLayer, createCompositeProxy } from './createCompositeProxy'\nexport { removeProperties } from './removeProperties'\n", "import type { CompositeProxyLayer } from './createCompositeProxy'\n\n/**\n * Composite proxy layer that forwards all reads\n * to provided object\n *\n * @param object\n * @returns\n */\nexport function addObjectProperties(object: object): CompositeProxyLayer {\n  return {\n    getKeys() {\n      return Object.keys(object)\n    },\n\n    getPropertyValue(key) {\n      return object[key]\n    },\n  }\n}\n", "import { CompositeProxyLayer } from './createCompositeProxy'\n\n/**\n * Composite proxy layer, that adds a single property to the target\n * @param key  the name of the property\n * @param factory the function that returns the value of the property\n * @returns\n */\nexport function addProperty(key: string | symbol, factory: () => unknown): CompositeProxyLayer {\n  return {\n    getKeys() {\n      return [key]\n    },\n\n    getPropertyValue() {\n      return factory()\n    },\n  }\n}\n", "import { Cache } from '@prisma/client-common'\n\nimport { CompositeProxyLayer } from './createCompositeProxy'\n\n/**\n * Composite proxy layer that adds caching to another\n * layer.\n *\n * @param baseLayer\n * @returns\n */\nexport function cacheProperties<KeyType extends string | symbol>(\n  baseLayer: CompositeProxyLayer<KeyType>,\n): CompositeProxyLayer<KeyType> {\n  const cache = new Cache<KeyType, unknown>()\n  return {\n    getKeys() {\n      return baseLayer.getKeys()\n    },\n\n    getPropertyValue(key) {\n      return cache.getOrCreate(key, () => baseLayer.getPropertyValue(key))\n    },\n\n    getPropertyDescriptor(key) {\n      return baseLayer.getPropertyDescriptor?.(key)\n    },\n  }\n}\n", "import { defaultPropertyDescriptor } from '../model/utils/defaultProxyHandlers'\n\nexport interface CompositeProxyLayer<KeyType extends string | symbol = string | symbol> {\n  /**\n   * Returns a list of keys, defined by a layer\n   */\n  getKeys(): ReadonlyArray<KeyType>\n\n  /**\n   * Returns a value for a property for a given key (one of the keys, returned\n   * from `getKeys`)\n   * @param key\n   */\n  getPropertyValue(key: KeyType): unknown\n\n  /**\n   * Gets a descriptor for given property. If not implemented or undefined is returned, { enumerable: true, writeable: true, configurable: true} is defaulted\n   * is used\n   * @param key\n   */\n  getPropertyDescriptor?(key: KeyType): PropertyDescriptor | undefined\n\n  /**\n   * Allows to override results for hasOwnProperty/in operator. If not implemented, returns true\n   * @param key\n   */\n  has?(key: KeyType): boolean\n}\n\nconst customInspect = Symbol.for('nodejs.util.inspect.custom')\n\n/**\n * Creates a proxy from a set of layers.\n * Each layer is a building for a proxy (potentially, reusable) that\n * can add or override property on top of the target.\n * When multiple layers define the same property, last one wins\n *\n * @param target\n * @param layers\n * @returns\n */\nexport function createCompositeProxy<T extends object>(target: T, layers: CompositeProxyLayer[]): T {\n  const keysToLayerMap = mapKeysToLayers(layers)\n  const overwrittenKeys = new Set<string | symbol>()\n\n  const proxy = new Proxy(target, {\n    get(target, prop) {\n      // explicit overwrites of a property have highest priority\n      if (overwrittenKeys.has(prop)) {\n        return target[prop]\n      }\n\n      // next, we see if property is defined in one of the layers\n      const layer = keysToLayerMap.get(prop)\n      if (layer) {\n        return layer.getPropertyValue(prop)\n      }\n\n      // finally, we read a prop from target\n      return target[prop]\n    },\n\n    has(target, prop) {\n      if (overwrittenKeys.has(prop)) {\n        return true\n      }\n      const layer = keysToLayerMap.get(prop)\n      if (layer) {\n        return layer.has?.(prop) ?? true\n      }\n\n      return Reflect.has(target, prop)\n    },\n\n    ownKeys(target) {\n      const targetKeys = getExistingKeys(Reflect.ownKeys(target), keysToLayerMap)\n      const layerKeys = getExistingKeys(Array.from(keysToLayerMap.keys()), keysToLayerMap)\n      return [...new Set([...targetKeys, ...layerKeys, ...overwrittenKeys])]\n    },\n\n    set(target, prop, value) {\n      const layer = keysToLayerMap.get(prop)\n      if (layer?.getPropertyDescriptor?.(prop)?.writable === false) {\n        return false\n      }\n      overwrittenKeys.add(prop)\n      return Reflect.set(target, prop, value)\n    },\n\n    getOwnPropertyDescriptor(target, prop) {\n      const original = Reflect.getOwnPropertyDescriptor(target, prop)\n      if (original && !original.configurable) {\n        // non-configurable properties can not change descriptors\n        return original\n      }\n\n      const layer = keysToLayerMap.get(prop)\n      if (layer) {\n        if (layer.getPropertyDescriptor) {\n          return {\n            ...defaultPropertyDescriptor,\n            ...layer?.getPropertyDescriptor(prop),\n          }\n        }\n        return defaultPropertyDescriptor\n      }\n\n      return original\n    },\n\n    defineProperty(target, property, attributes) {\n      overwrittenKeys.add(property)\n      return Reflect.defineProperty(target, property, attributes)\n    },\n\n    getPrototypeOf: () => Object.prototype,\n  })\n\n  proxy[customInspect] = function () {\n    // Default node.js console.log and util.inspect deliberately avoid triggering any proxy traps and log\n    // original target. This is not we want for our usecases: we want console.log to output the result as if\n    // the properties actually existed on the target. Using spread operator forces us to produce correct object\n    const toLog = { ...this }\n    delete toLog[customInspect]\n    return toLog\n  }\n  return proxy\n}\n\nfunction mapKeysToLayers(layers: CompositeProxyLayer[]) {\n  const keysToLayerMap = new Map<string | symbol, CompositeProxyLayer>()\n  for (const layer of layers) {\n    const keys = layer.getKeys()\n    for (const key of keys) {\n      keysToLayerMap.set(key, layer)\n    }\n  }\n  return keysToLayerMap\n}\n\nfunction getExistingKeys(keys: Array<string | symbol>, keysToLayerMap: Map<string | symbol, CompositeProxyLayer>) {\n  return keys.filter((key) => {\n    const layer = keysToLayerMap.get(key)\n    return layer?.has?.(key) ?? true\n  })\n}\n", "export const defaultPropertyDescriptor = {\n  enumerable: true,\n  configurable: true,\n  writable: true,\n}\n\nexport function defaultProxyHandlers<T extends object>(ownKeys: (string | symbol)[]) {\n  const _ownKeys = new Set(ownKeys)\n  return {\n    getPrototypeOf: () => Object.prototype,\n    getOwnPropertyDescriptor: () => defaultPropertyDescriptor,\n    has: (target: T, prop: string | symbol) => _ownKeys.has(prop),\n    set: (target: T, prop: string | symbol, value: any) => {\n      return _ownKeys.add(prop) && Reflect.set(target, prop, value)\n    },\n    ownKeys: () => [..._ownKeys],\n  } as const\n}\n", "import { CompositeProxyLayer } from './createCompositeProxy'\n\nexport function removeProperties(keys: ReadonlyArray<string | symbol>): CompositeProxyLayer {\n  return {\n    getKeys() {\n      return keys\n    },\n\n    has() {\n      return false\n    },\n\n    getPropertyValue() {\n      return undefined\n    },\n  }\n}\n", "import { Writer } from '@prisma/ts-builders'\n\nimport { JsArgs } from '../types/exported/JsApi'\nimport { buildArgumentsRenderingTree } from './ArgumentsRenderingTree'\nimport { inactiveColors } from './base'\n\nexport function prettyPrintArguments(args?: JsArgs): string {\n  if (args === undefined) {\n    return ''\n  }\n  const tree = buildArgumentsRenderingTree(args)\n  const writer = new Writer(0, { colors: inactiveColors })\n  return writer.write(tree).toString()\n}\n", "import { Client } from '../../getPrismaClient'\nimport { applyModelsAndClientExtensions } from '../model/applyModelsAndClientExtensions'\nimport { ExtensionArgs } from '../types/exported'\n\n/**\n * @param this\n */\nexport function $extends(this: Client, extension: ExtensionArgs | ((client: Client) => Client)): Client {\n  if (typeof extension === 'function') {\n    return extension(this)\n  }\n\n  const newClient = Object.create(this._originalClient, {\n    _extensions: { value: this._extensions.append(extension) },\n    _appliedParent: { value: this, configurable: true },\n    $on: { value: undefined },\n  }) as Client\n\n  return applyModelsAndClientExtensions(newClient)\n}\n", "import type { Client } from '../../getPrismaClient'\nimport {\n  addObjectProperties,\n  addProperty,\n  cacheProperties,\n  CompositeProxyLayer,\n  createCompositeProxy,\n} from '../compositeProxy'\nimport { applyModel } from './applyModel'\nimport { dmmfToJSModelName } from './utils/dmmfToJSModelName'\nimport { jsToDMMFModelName } from './utils/jsToDMMFModelName'\n\n// symbol we use for storing raw, unproxied\n// client instance, so we later can retrieve it\n// via `unapplyModels` methods\nconst rawClient = Symbol()\n\n/**\n * Dynamically creates a model proxy interface for a give name. For each prop\n * accessed on this proxy, it will lookup the dmmf to find if that model exists.\n * If it is the case, it will create a proxy for that model via {@link applyModel}.\n * @param client to create the proxy around\n * @returns a proxy to access models\n */\nexport function applyModelsAndClientExtensions(client: Client) {\n  const layers = [\n    rootLayer(client),\n    modelsLayer(client),\n    addProperty(rawClient, () => client),\n    addProperty('$parent', () => client._appliedParent),\n  ]\n  const clientExtensions = client._extensions.getAllClientExtensions()\n  if (clientExtensions) {\n    layers.push(addObjectProperties(clientExtensions))\n  }\n  return createCompositeProxy(client, layers)\n}\n\nfunction rootLayer(client: Client): CompositeProxyLayer {\n  const prototype = Object.getPrototypeOf(client._originalClient)\n  const allKeys = [...new Set(Object.getOwnPropertyNames(prototype))]\n\n  return {\n    getKeys() {\n      return allKeys\n    },\n\n    getPropertyValue(prop) {\n      return client[prop]\n    },\n  }\n}\n\nfunction modelsLayer(client: Client): CompositeProxyLayer {\n  const dmmfModelKeys = Object.keys(client._runtimeDataModel.models)\n  const jsModelKeys = dmmfModelKeys.map(dmmfToJSModelName)\n  const allKeys = [...new Set(dmmfModelKeys.concat(jsModelKeys))]\n\n  return cacheProperties({\n    getKeys() {\n      return allKeys\n    },\n\n    getPropertyValue(prop) {\n      const dmmfModelName = jsToDMMFModelName(prop)\n      // creates a new model proxy on the fly and caches it\n      if (client._runtimeDataModel.models[dmmfModelName] !== undefined) {\n        return applyModel(client, dmmfModelName)\n      }\n\n      // above silently failed if model name is lower cased\n      if (client._runtimeDataModel.models[prop] !== undefined) {\n        return applyModel(client, prop)\n      }\n\n      return undefined\n    },\n\n    getPropertyDescriptor(key) {\n      if (!jsModelKeys.includes(key)) {\n        return { enumerable: false }\n      }\n\n      return undefined\n    },\n  })\n}\n\nexport function unApplyModelsAndClientExtensions(client: Client): Client {\n  if (client[rawClient]) {\n    return client[rawClient]\n  }\n  return client\n}\n", "import * as DMMF from '@prisma/dmmf'\nimport type { O } from 'ts-toolbelt'\n\nimport { type Client, type InternalRequestParams } from '../../getPrismaClient'\nimport { getCallSite } from '../../utils/CallSite'\nimport {\n  addObjectProperties,\n  addProperty,\n  cacheProperties,\n  CompositeProxyLayer,\n  createCompositeProxy,\n} from '../compositeProxy'\nimport type { PrismaPromise } from '../request/PrismaPromise'\nimport type { UserArgs } from '../request/UserArgs'\nimport { applyAggregates } from './applyAggregates'\nimport { applyFieldsProxy } from './applyFieldsProxy'\nimport { applyFluent } from './applyFluent'\nimport { dmmfToJSModelName } from './utils/dmmfToJSModelName'\n\nexport type ModelAction = (\n  paramOverrides: O.Optional<InternalRequestParams>,\n) => (userArgs?: UserArgs) => PrismaPromise<unknown>\n\nconst fluentProps = [\n  'findUnique',\n  'findUniqueOrThrow',\n  'findFirst',\n  'findFirstOrThrow',\n  'create',\n  'update',\n  'upsert',\n  'delete',\n] as const\nconst aggregateProps = ['aggregate', 'count', 'groupBy'] as const\n\n/**\n * Dynamically creates a model interface via a proxy.\n * @param client to trigger the request execution\n * @param dmmfModelName the dmmf name of the model\n * @returns\n */\nexport function applyModel(client: Client, dmmfModelName: string) {\n  const modelExtensions = client._extensions.getAllModelExtensions(dmmfModelName) ?? {}\n\n  const layers = [\n    modelActionsLayer(client, dmmfModelName),\n    fieldsPropertyLayer(client, dmmfModelName),\n    addObjectProperties(modelExtensions),\n    addProperty('name', () => dmmfModelName),\n    addProperty('$name', () => dmmfModelName),\n    addProperty('$parent', () => client._appliedParent),\n  ]\n\n  return createCompositeProxy({}, layers)\n}\n\n/**\n * Dynamically creates a model interface via a proxy.\n * @param client to trigger the request execution\n * @param dmmfModelName the dmmf name of the model\n * @returns\n */\nfunction modelActionsLayer(client: Client, dmmfModelName: string): CompositeProxyLayer<string> {\n  // we use the javascript model name for display purposes\n  const jsModelName = dmmfToJSModelName(dmmfModelName)\n  const ownKeys = Object.keys(DMMF.ModelAction).concat('count')\n\n  return {\n    getKeys() {\n      return ownKeys\n    },\n\n    getPropertyValue(key) {\n      const dmmfActionName = key as DMMF.ModelAction\n\n      // we return a function as the model action that we want to expose\n      // it takes user args and executes the request in a Prisma Promise\n      const action = (paramOverrides: O.Optional<InternalRequestParams>) => (userArgs?: UserArgs) => {\n        const callSite = getCallSite(client._errorFormat) // used for showing better errors\n\n        return client._createPrismaPromise(\n          (transaction) => {\n            const params: InternalRequestParams = {\n              // data and its dataPath for nested results\n              args: userArgs,\n              dataPath: [],\n\n              // action name and its related model\n              action: dmmfActionName,\n              model: dmmfModelName,\n\n              // method name for display only\n              clientMethod: `${jsModelName}.${key}`,\n              jsModelName,\n\n              // transaction information\n              transaction,\n\n              // stack trace\n              callsite: callSite,\n            }\n\n            return client._request({ ...params, ...paramOverrides })\n          },\n          {\n            action: dmmfActionName,\n            args: userArgs,\n            model: dmmfModelName,\n          },\n        )\n      }\n\n      // we give the control over action for building the fluent api\n      if ((fluentProps as readonly string[]).includes(dmmfActionName)) {\n        return applyFluent(client, dmmfModelName, action)\n      }\n\n      // we handle the edge case of aggregates that need extra steps\n      if (isValidAggregateName(key)) {\n        return applyAggregates(client, key, action)\n      }\n\n      return action({}) // and by default, don't override any params\n    },\n  }\n}\n\nfunction isValidAggregateName(action: string): action is (typeof aggregateProps)[number] {\n  return (aggregateProps as readonly string[]).includes(action)\n}\n\nfunction fieldsPropertyLayer(client: Client, dmmfModelName: string) {\n  return cacheProperties(\n    addProperty('fields', () => {\n      const model = client._runtimeDataModel.models[dmmfModelName]\n      return applyFieldsProxy(dmmfModelName, model)\n    }),\n  )\n}\n", "import { pathToPosix } from '@prisma/internals'\nimport * as stackTraceParser from 'stacktrace-parser'\n\nimport { ErrorFormat } from '../getPrismaClient'\n\ndeclare global {\n  /**\n   * a global variable that is injected by us via jest to make our snapshots\n   * work in clients that cannot read from disk (e.g. wasm or edge clients)\n   */\n  let $EnabledCallSite: typeof EnabledCallSite | undefined\n}\n\nexport type LocationInFile = {\n  fileName: string\n  lineNumber: number | null\n  columnNumber: number | null\n}\n\nexport interface CallSite {\n  getLocation(): LocationInFile | null\n}\n\nclass DisabledCallSite implements CallSite {\n  getLocation(): LocationInFile | null {\n    return null\n  }\n}\n\nexport class EnabledCallSite implements CallSite {\n  private _error: Error\n  constructor() {\n    this._error = new Error()\n  }\n  getLocation(): LocationInFile | null {\n    const stack = this._error.stack\n    if (!stack) {\n      return null\n    }\n    const stackFrames = stackTraceParser.parse(stack)\n    // TODO: more resilient logic to check that it's not relative to cwd\n    const frame = stackFrames.find((t) => {\n      // Here we are trying to find the location in the user's code which caused the error\n      if (!t.file) {\n        return false\n      }\n\n      // convert windows path to posix path\n      const posixFile = pathToPosix(t.file)\n      return (\n        posixFile !== '<anonymous>' && // Ignore as we can not read an <anonymous> file\n        !posixFile.includes('@prisma') && // Internal, unbundled code\n        !posixFile.includes('/packages/client/src/runtime/') && // Runtime sources when source maps are used\n        !posixFile.endsWith('/runtime/client.js') && // Bundled runtimes\n        !posixFile.startsWith('internal/') && // We don't want internal nodejs files\n        !t.methodName.includes('new ') && // \"new CallSite\" call and maybe other constructors\n        !t.methodName.includes('getCallSite') && // getCallSite function from this module\n        !t.methodName.includes('Proxy.') && // Model proxies\n        t.methodName.split('.').length < 4\n      )\n    })\n\n    if (!frame || !frame.file) {\n      return null\n    }\n\n    return {\n      fileName: frame.file,\n      lineNumber: frame.lineNumber,\n      columnNumber: frame.column,\n    }\n  }\n}\n\nexport function getCallSite(errorFormat: ErrorFormat): CallSite {\n  if (errorFormat === 'minimal' || TARGET_BUILD_TYPE === 'wasm-compiler-edge') {\n    if (typeof $EnabledCallSite === 'function' && errorFormat !== 'minimal') {\n      return new $EnabledCallSite()\n    } else {\n      return new DisabledCallSite()\n    }\n  } else {\n    return new EnabledCallSite()\n  }\n}\n", "var UNKNOWN_FUNCTION = '<unknown>';\n/**\n * This parses the different stack traces and puts them into one format\n * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n */\n\nfunction parse(stackString) {\n  var lines = stackString.split('\\n');\n  return lines.reduce(function (stack, line) {\n    var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n    if (parseResult) {\n      stack.push(parseResult);\n    }\n\n    return stack;\n  }, []);\n}\nvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|rsc|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nfunction parseChrome(line) {\n  var parts = chromeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n  var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n  var submatch = chromeEvalRe.exec(parts[2]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line/column number\n    parts[2] = submatch[1]; // url\n\n    parts[3] = submatch[2]; // line\n\n    parts[4] = submatch[3]; // column\n  }\n\n  return {\n    file: !isNative ? parts[2] : null,\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: isNative ? [parts[2]] : [],\n    lineNumber: parts[3] ? +parts[3] : null,\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|rsc|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseWinjs(line) {\n  var parts = winjsRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|rsc|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nfunction parseGecko(line) {\n  var parts = geckoRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n  var submatch = geckoEvalRe.exec(parts[3]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line number\n    parts[3] = submatch[1];\n    parts[4] = submatch[2];\n    parts[5] = null; // no column when eval\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: parts[2] ? parts[2].split(',') : [],\n    lineNumber: parts[4] ? +parts[4] : null,\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\nfunction parseJSC(line) {\n  var parts = javaScriptCoreRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[4],\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseNode(line) {\n  var parts = nodeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nexport { parse };\n", "import type { Client } from '../../getPrismaClient'\nimport type { UserArgs } from '../request/UserArgs'\nimport { Action } from '../types/exported/JsApi'\nimport { aggregate } from './aggregates/aggregate'\nimport { count } from './aggregates/count'\nimport { groupBy } from './aggregates/groupBy'\nimport type { ModelAction } from './applyModel'\n\n/**\n * Dynamically returns the appropriate aggregate action for a given `action`.\n * With this, we are able to provide an aggregate api that has a better DX. In\n * short, we manipulate the user input which is designed to have DX to transform\n * it into something that the engines understand. Similarly, we take the engine\n * output for that input and produce something that is easier to work with.\n * @param action that tells which aggregate action to execute\n * @param modelAction a callback action that triggers request execution\n * @returns\n */\nexport function applyAggregates(client: Client, action: Action, modelAction: ModelAction) {\n  // we effectively take over the aggregate api to perform data changes\n  if (action === 'aggregate') return (userArgs?: UserArgs) => aggregate(userArgs, modelAction)\n  if (action === 'count') return (userArgs?: UserArgs) => count(userArgs, modelAction)\n  if (action === 'groupBy') return (userArgs?: UserArgs) => groupBy(userArgs, modelAction)\n\n  return undefined\n}\n", "import type { UserArgs } from '../../request/UserArgs'\nimport type { ModelAction } from '../applyModel'\nimport { aggregateMap } from './utils/aggregateMap'\n\n/**\n * Transforms the `userArgs` for the `.aggregate` shorthand. It is an API sugar\n * for not having to do things like: `{select: {_avg: {select: {age: true}}}}`.\n * The goal here is to desugar it into something that is understood by the QE.\n * @param args to transform\n * @returns\n */\nexport function desugarUserArgs(args: UserArgs = {}) {\n  const _args = desugarCountInUserArgs(args)\n  const userArgsEntries = Object.entries(_args)\n\n  return userArgsEntries.reduce(\n    (aggregateArgs, [key, value]) => {\n      if (aggregateMap[key] !== undefined) {\n        // if it's an aggregate, we re-wrap into select\n        aggregateArgs['select']![key] = { select: value }\n      } else {\n        aggregateArgs[key] = value // or leave it alone\n      }\n\n      return aggregateArgs\n    },\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n    { select: {} } as UserArgs & { select: UserArgs },\n  )\n}\n\n/**\n * Desugar `userArgs` when it contains `{_count: true}`.\n * @param args the user input\n * @returns\n */\nfunction desugarCountInUserArgs(args: UserArgs = {}) {\n  if (typeof args['_count'] === 'boolean') {\n    return { ...args, _count: { _all: args['_count'] } }\n  }\n\n  return args\n}\n\n/**\n * Creates an unpacker that adds sugar to the basic result of the QE. An\n * unpacker helps to transform a result before returning it to the user.\n * @param args the user input\n * @returns\n */\nexport function createUnpacker(args: UserArgs = {}) {\n  return (data: object) => {\n    if (typeof args['_count'] === 'boolean') {\n      data['_count'] = data['_count']['_all']\n    }\n\n    return data\n  }\n}\n\n/**\n * Executes the `.aggregate` action on a model.\n * @see {desugarUserArgs}\n * @param args the user input to desugar\n * @param modelAction a callback action that triggers request execution\n * @returns\n */\nexport function aggregate(args: UserArgs, modelAction: ModelAction) {\n  const aggregateUnpacker = createUnpacker(args)\n\n  return modelAction({\n    action: 'aggregate',\n    unpacker: aggregateUnpacker,\n    argsMapper: desugarUserArgs,\n  })(args)\n}\n", "export const aggregateMap = {\n  _avg: true,\n  _count: true,\n  _sum: true,\n  _min: true,\n  _max: true,\n}\n", "import type { UserArgs } from '../../request/UserArgs'\nimport type { ModelAction } from '../applyModel'\nimport { createUnpacker as createUnpackerAggregate, desugarUserArgs as desugarUserArgsAggregate } from './aggregate'\n\n/**\n * Transforms the `userArgs` for the `.count` shorthand. It is an API sugar. It\n * reuses the logic from the `.aggregate` shorthand to add additional handling.\n * The goal here is to desugar it into something that is understood by the QE.\n * @param args to transform\n * @returns\n */\nfunction desugarUserArgs(args: UserArgs = {}) {\n  const { select, ..._args } = args // exclude select\n\n  if (typeof select === 'object') {\n    return desugarUserArgsAggregate({ ..._args, _count: select })\n  } else {\n    return desugarUserArgsAggregate({ ..._args, _count: { _all: true } })\n  }\n}\n\n/**\n * Creates an unpacker that adds sugar to the basic result of the QE. An\n * unpacker helps to transform a result before returning it to the user.\n * @param args the user input\n * @returns\n */\nexport function createUnpacker(args: UserArgs = {}) {\n  if (typeof args['select'] === 'object') {\n    return (data: object) => createUnpackerAggregate(args)(data)['_count']\n  } else {\n    return (data: object) => createUnpackerAggregate(args)(data)['_count']['_all']\n  }\n}\n\n/**\n * Executes the `.count` action on a model via {@link aggregate}.\n * @param args the user input to desugar\n * @param modelAction a callback action that triggers request execution\n * @returns\n */\nexport function count(args: UserArgs, modelAction: ModelAction) {\n  return modelAction({\n    action: 'count',\n    unpacker: createUnpacker(args),\n    argsMapper: desugarUserArgs,\n  })(args)\n}\n", "import type { UserArgs } from '../../request/UserArgs'\nimport type { ModelAction } from '../applyModel'\nimport { desugarUserArgs as desugarUserArgsAggregate } from './aggregate'\n\n/**\n * Transforms the `userArgs` for the `.groupBy` shorthand. It is an API sugar.\n * It reuses the logic from the `.aggregate` shorthand and adds additional\n * handling for the `by` clause. The goal here is to desugar it into something\n * that is understood by the QE.\n * @param args to transform\n * @returns\n */\nfunction desugarUserArgs(args: UserArgs = {}) {\n  const _args = desugarUserArgsAggregate(args)\n\n  // we desugar the array into { [key]: boolean }\n  if (Array.isArray(_args['by'])) {\n    for (const key of _args['by']) {\n      if (typeof key === 'string') {\n        _args['select'][key] = true\n      }\n    }\n  } else if (typeof _args['by'] === 'string') {\n    _args['select'][_args['by']] = true\n  }\n\n  return _args\n}\n\n/**\n * Creates an unpacker that adds sugar to the basic result of the QE. An\n * unpacker helps to transform a result before returning it to the user.\n * @param args the user input\n * @returns\n */\nexport function createUnpacker(args: UserArgs = {}) {\n  return (data: object[]) => {\n    if (typeof args?.['_count'] === 'boolean') {\n      data.forEach((row) => {\n        row['_count'] = row['_count']['_all']\n      })\n    }\n\n    return data\n  }\n}\n\n/**\n * Executes the `.groupBy` action on a model by reusing {@link aggregate}.\n * @param args the user input to desugar\n * @param modelAction a callback action that triggers request execution\n * @returns\n */\nexport function groupBy(args: UserArgs, modelAction: ModelAction) {\n  return modelAction({\n    action: 'groupBy',\n    unpacker: createUnpacker(args),\n    argsMapper: desugarUserArgs,\n  })(args)\n}\n", "import { keyBy, RuntimeModel } from '@prisma/client-common'\n\nimport { FieldRefImpl } from './FieldRef'\nimport { defaultProxyHandlers } from './utils/defaultProxyHandlers'\n\nexport type FieldProxy = {\n  readonly [key: string]: FieldRefImpl<string, string>\n}\n\nexport function applyFieldsProxy(modelName: string, model: RuntimeModel): FieldProxy {\n  const scalarFieldsList = model.fields.filter((field) => !field.relationName)\n  const scalarFields = keyBy(scalarFieldsList, 'name')\n  return new Proxy(\n    {},\n    {\n      get(target, prop) {\n        if (prop in target || typeof prop === 'symbol') {\n          return target[prop]\n        }\n        const dmmfField = scalarFields[prop]\n        if (dmmfField) {\n          return new FieldRefImpl(modelName, prop, dmmfField.type, dmmfField.isList, dmmfField.kind === 'enum')\n        }\n\n        return undefined\n      },\n      ...defaultProxyHandlers(Object.keys(scalarFields)),\n    },\n  )\n}\n", "import type * as DMMF from '@prisma/dmmf'\n\nimport type { Client } from '../../getPrismaClient'\nimport { getCallSite } from '../../utils/CallSite'\nimport { deepSet } from '../../utils/deep-set'\nimport type { UserArgs } from '../request/UserArgs'\nimport type { ModelAction } from './applyModel'\nimport { defaultProxyHandlers } from './utils/defaultProxyHandlers'\n\n/**\n * The fluent API makes that nested relations can be retrieved at once. It's a\n * helper for writing `select` statements on relations with a chaining api.\n * Because of this, we automatically add `select` statements to the query, that\n * also means that we need to provide a `dataPath` for unpacking nested values.\n * @see {getNextUserArgs}\n * @param dmmfModelName\n * @param prevDataPath\n * @returns\n */\nfunction getNextDataPath(fluentPropName?: string, prevDataPath?: string[]) {\n  if (fluentPropName === undefined || prevDataPath === undefined) return []\n\n  return [...prevDataPath, 'select', fluentPropName]\n}\n\n/**\n * @see {getNextDataPath} for introduction. The goal of the fluent API is to\n * make it easy to retrieve nested relations. For this, we construct the query\n * args that are necessary to retrieve the nested relations. It consists of\n * nesting `select` statements each time that we access a relation.\n * @param callArgs usually passed on the last call of the chaining api\n * @param prevArgs when multiple chaining occurs, they are the previous\n * @param nextDataPath path where to set `callArgs` in `prevArgs`\n * @example\n * ```ts\n * prisma.user.findUnique().link().user()\n *\n * // will end up with an args like this:\n * // args {\n * //   \"where\": {\n * //     \"email\": \"1639498523518@gmail.com\"\n * //   },\n * //   \"select\": {\n * //     \"link\": {\n * //       \"select\": {\n * //         \"user\": true\n * //       }\n * //     }\n * //   }\n * // }\n * ```\n */\nfunction getNextUserArgs(callArgs: UserArgs, prevArgs: UserArgs, nextDataPath: string[]): UserArgs {\n  if (prevArgs === undefined) return callArgs ?? {}\n\n  return deepSet(prevArgs, nextDataPath, callArgs || true)\n}\n\n/**\n * Dynamically creates a fluent API from a `modelAction` and a `dmmfModelName`.\n * We use the current `dmmfModelName` to determine what can be chained on next.\n * The fluent API allows to chain on model relations to provide an alternative\n * way to fetch and access nested data all at once. When triggered, it calls\n * `modelActions` after having accumulated `prevDataPath` and `prevUserArgs`\n * with the chaining. You can find an example of usage at {@link applyModel}.\n * @param client to provide dmmf information\n * @param dmmfModelName the dmmf name of the model to apply the api to\n * @param modelAction a callback action that triggers request execution\n * @param fluentPropName the name of the api link that was just called\n * @param prevDataPath the dataPath from the previous api link\n * @param prevUserArgs the userArgs from the previous api link\n * @remarks optional parameters are empty on the first call via\n * {@link applyModel}\n * @returns\n */\nexport function applyFluent(\n  client: Client,\n  dmmfModelName: string,\n  modelAction: ModelAction,\n  fluentPropName?: string,\n  prevDataPath?: string[],\n  prevUserArgs?: UserArgs,\n) {\n  // we retrieve the model that is described from the DMMF\n  const dmmfModel = client._runtimeDataModel.models[dmmfModelName]\n\n  // map[field.name] === field, basically for quick access; built lazily and\n  // only when the fluent API is actually chained on, so plain queries pay nothing\n  let dmmfModelFieldMap: { [dmmfModelFieldName: string]: DMMF.Field } | undefined\n\n  // we return a regular model action but proxy its return\n  return (userArgs?: UserArgs) => {\n    const callsite = getCallSite(client._errorFormat)\n    // ! first call: nextDataPath => [], nextUserArgs => userArgs\n    const nextDataPath = getNextDataPath(fluentPropName, prevDataPath)\n    const nextUserArgs = getNextUserArgs(userArgs, prevUserArgs, nextDataPath)\n    const prismaPromise = modelAction({ dataPath: nextDataPath, callsite })(nextUserArgs)\n    // TODO: use an unpacker here instead of ClientFetcher logic\n    // TODO: once it's done we can deprecate the use of dataPath\n    const ownKeys = getOwnKeys(client, dmmfModelName)\n\n    // we take control of the return promise to allow chaining\n    return new Proxy(prismaPromise, {\n      get(target, prop: string) {\n        // fluent api only works on fields that are relational\n        if (!ownKeys.includes(prop)) return target[prop]\n\n        // here we are sure that prop is a field of type object\n        dmmfModelFieldMap ??= Object.fromEntries(dmmfModel.fields.map((field) => [field.name, field] as const))\n        const dmmfModelName = dmmfModelFieldMap[prop].type\n        const modelArgs = [dmmfModelName, modelAction, prop] as const\n        const dataArgs = [nextDataPath, nextUserArgs] as const\n\n        // we allow for chaining more with this recursive call\n        return applyFluent(client, ...modelArgs, ...dataArgs)\n      },\n      ...defaultProxyHandlers([...ownKeys, ...Object.getOwnPropertyNames(prismaPromise)]),\n    })\n  }\n}\n\n// the only accessible fields are relations to be chained on\nfunction getOwnKeys(client: Client, dmmfModelName: string) {\n  return client._runtimeDataModel.models[dmmfModelName].fields\n    .filter((field) => field.kind === 'object') // relations\n    .map((field) => field.name)\n}\n", "// Taken from https://gist.github.com/LukeChannings/15c92cef5a016a8b21a0\n\n// ensure the keys being passed is an array of key paths\n// example: 'a.b' becomes ['a', 'b'] unless it was already ['a', 'b']\nconst keys = (ks: string | string[]) => (Array.isArray(ks) ? ks : ks.split('.'))\n\n// traverse the set of keys left to right,\n// returning the current value in each iteration.\n// if at any point the value for the current key does not exist,\n// return the default value\nexport const deepGet = (o, kp: string[]) => keys(kp).reduce((o, k) => o && o[k], o)\n\n// traverse the set of keys right to left,\n// returning a new object containing both properties from the object\n// we were originally passed and our new property.\n//\n// Example:\n// If o = { a: { b: { c: 1 } } }\n//\n// deepSet(o, ['a', 'b', 'c'], 2) will progress thus:\n// 1. c = Object.assign({}, {c: 1}, { c: 2 })\n// 2. b = Object.assign({}, { b: { c: 1 } }, { b: c })\n// 3. returned = Object.assign({}, { a: { b: { c: 1 } } }, { a: b })\nexport const deepSet = (o: any, kp: string | string[], v: any) =>\n  keys(kp).reduceRight((v, k, i, ks) => Object.assign({}, deepGet(o, ks.slice(0, i)), { [k]: v }), v)\n", "/**\n * Transforms a model name coming from the runtime to a DMMF model name.\n * @param name\n * @returns\n */\nexport function jsToDMMFModelName(name: string) {\n  return name.replace(/^./, (str) => str.toUpperCase())\n}\n", "import { RuntimeDataModel } from '@prisma/client-common'\n\nimport { GlobalOmitOptions } from '../jsonProtocol/serializeJsonQuery'\nimport { dmmfToJSModelName } from '../model/utils/dmmfToJSModelName'\nimport { JsArgs } from '../types/exported/JsApi'\nimport { applyResultExtensions } from './applyResultExtensions'\nimport { MergedExtensionsList } from './MergedExtensionsList'\nimport { visitQueryResult } from './visitQueryResult'\n\ntype ApplyAllResultExtensionsParams = {\n  result: object | null\n  modelName: string\n  args: JsArgs\n  extensions: MergedExtensionsList\n  runtimeDataModel: RuntimeDataModel\n  globalOmit?: GlobalOmitOptions\n}\n\n/**\n * Walks the result of the query and applies all possible result extensions\n * to all parts of it, including nested relations\n */\nexport function applyAllResultExtensions({\n  result,\n  modelName,\n  args,\n  extensions,\n  runtimeDataModel,\n  globalOmit,\n}: ApplyAllResultExtensionsParams) {\n  // We return the result directly (not applying result extensions) if\n  // - there is no extension to apply\n  // - result is `null`\n  // - result is not an object (e.g. `.count()`)\n  if (extensions.isEmpty() || result == null || typeof result !== 'object') {\n    return result\n  }\n  const model = runtimeDataModel.models[modelName]\n  if (!model) {\n    return result\n  }\n\n  return visitQueryResult({\n    result,\n    args: args ?? {},\n    modelName,\n    runtimeDataModel,\n    visitor: (value, dmmfModelName, args) => {\n      const jsName = dmmfToJSModelName(dmmfModelName)\n      return applyResultExtensions({\n        result: value,\n        modelName: jsName,\n        select: args.select,\n        // passing omit only if explicit select is not set - those 2 options are\n        // mutually exclusive\n        omit: args.select ? undefined : { ...globalOmit?.[jsName], ...args.omit },\n        extensions,\n      })\n    },\n  })\n}\n", "import { hasOwnProperty } from '@prisma/internals'\n\nimport {\n  addProperty,\n  cacheProperties,\n  CompositeProxyLayer,\n  createCompositeProxy,\n  removeProperties,\n} from '../compositeProxy'\nimport { Omission, Selection } from '../types/exported/JsApi'\nimport { MergedExtensionsList } from './MergedExtensionsList'\nimport { ComputedField } from './resultUtils'\n\ntype ApplyExtensionsArgs = {\n  result: object\n  select?: Selection\n  omit?: Omission\n  modelName: string\n  extensions: MergedExtensionsList\n}\n\n/**\n * Given a part of a query result, it's model name and a list of extension,\n * applies computed fields to the results. Fields are computed lazily on a first access,\n * after that the result of computation is cached. In case `select` is used, all dependencies\n * of the computed fields would be excluded from final result, unless they are also specified in the select.\n *\n * This function applies computed fields to a single object only: it does not traverse relationships.\n * For full functionality, it is meant to be combined with `visitQueryResult`.\n *\n * @param params\n * @returns\n */\nexport function applyResultExtensions({ result, modelName, select, omit, extensions }: ApplyExtensionsArgs) {\n  const computedFields = extensions.getAllComputedFields(modelName)\n  if (!computedFields) {\n    return result\n  }\n\n  const computedPropertiesLayers: CompositeProxyLayer[] = []\n  const maskingLayers: CompositeProxyLayer[] = []\n\n  for (const field of Object.values(computedFields)) {\n    if (omit) {\n      if (omit[field.name]) {\n        continue\n      }\n      const toMask = field.needs.filter((prop) => omit[prop])\n      if (toMask.length > 0) {\n        maskingLayers.push(removeProperties(toMask))\n      }\n    } else if (select) {\n      if (!select[field.name]) {\n        continue\n      }\n\n      const toMask = field.needs.filter((prop) => !select[prop])\n      if (toMask.length > 0) {\n        maskingLayers.push(removeProperties(toMask))\n      }\n    }\n\n    if (areNeedsMet(result, field.needs)) {\n      computedPropertiesLayers.push(\n        computedPropertyLayer(field, createCompositeProxy(result, computedPropertiesLayers), modelName),\n      )\n    }\n  }\n\n  if (computedPropertiesLayers.length > 0 || maskingLayers.length > 0) {\n    return createCompositeProxy(result, [...computedPropertiesLayers, ...maskingLayers])\n  }\n  return result\n}\n\nfunction areNeedsMet(result: object, neededProperties: string[]) {\n  return neededProperties.every((property) => hasOwnProperty(result, property))\n}\n\nfunction computedPropertyLayer(field: ComputedField, result: object, modelName: string): CompositeProxyLayer {\n  return cacheProperties(addProperty(field.name, () => field.compute(result, modelName)))\n}\n", "import { RuntimeDataModel } from '@prisma/client-common'\n\nimport { isSkip } from '../types'\nimport { JsArgs, Selection } from '../types/exported/JsApi'\n\ntype ModelVisitor = (value: object, modelName: string, queryArgs: JsArgs) => object | undefined\n\ntype VisitParams = {\n  result: object\n  args: JsArgs\n  modelName: string\n  runtimeDataModel: RuntimeDataModel\n  visitor: ModelVisitor\n}\n\n/**\n * Function recursively walks through provided query response using `include` and `select`\n * query parameters and calls `visitor` callback for each model it encounters.\n * `visitor` receives the value of a particular response section, model it corresponds to and\n * the arguments used to query it. If visitor returns any non-undefined value that value will\n * replace corresponding part of the final result.\n *\n * @param params\n * @returns\n */\nexport function visitQueryResult({ visitor, result, args, runtimeDataModel, modelName }: VisitParams) {\n  if (Array.isArray(result)) {\n    for (let i = 0; i < result.length; i++) {\n      result[i] = visitQueryResult({\n        result: result[i],\n        args,\n        modelName,\n        runtimeDataModel,\n        visitor,\n      })\n    }\n    return result\n  }\n  const visitResult = visitor(result, modelName, args) ?? result\n  if (args.include) {\n    visitNested({\n      includeOrSelect: args.include,\n      result: visitResult,\n      parentModelName: modelName,\n      runtimeDataModel,\n      visitor,\n    })\n  }\n  if (args.select) {\n    visitNested({\n      includeOrSelect: args.select,\n      result: visitResult,\n      parentModelName: modelName,\n      runtimeDataModel,\n      visitor,\n    })\n  }\n  return visitResult\n}\n\ntype VisitNestedParams = {\n  includeOrSelect: Selection\n  result: object\n  parentModelName: string\n  runtimeDataModel: RuntimeDataModel\n  visitor: ModelVisitor\n}\n\nfunction visitNested({ includeOrSelect, result, parentModelName, runtimeDataModel, visitor }: VisitNestedParams) {\n  for (const [fieldName, subConfig] of Object.entries(includeOrSelect)) {\n    if (!subConfig || result[fieldName] == null || isSkip(subConfig)) {\n      continue\n    }\n    const parentModel = runtimeDataModel.models[parentModelName]\n    const field = parentModel.fields.find((field) => field.name === fieldName)\n    if (!field || field.kind !== 'object' || !field.relationName) {\n      continue\n    }\n    const args = typeof subConfig === 'object' ? subConfig : {}\n    result[fieldName] = visitQueryResult({\n      visitor,\n      result: result[fieldName],\n      args,\n      modelName: field.type,\n      runtimeDataModel,\n    })\n  }\n}\n", "import { Client, InternalRequestParams } from '../../getPrismaClient'\nimport { RequestParams } from '../../RequestHandler'\nimport { deepCloneArgs } from '../../utils/deepCloneArgs'\nimport { AccelerateExtensionFetchDecorator } from '../engines'\nimport { QueryOptionsCb } from '../types/exported/ExtensionArgs'\nimport { BatchInternalParams, BatchQueryOptionsCb } from '../types/internal/ExtensionsInternalArgs'\n\nfunction iterateAndCallQueryCallbacks(\n  client: Client,\n  params: InternalRequestParams,\n  queryCbs: QueryOptionsCb[],\n  i = 0,\n) {\n  return client._createPrismaPromise((transaction) => {\n    // we need to keep track of the previous customDataProxyFetch\n    const prevCustomFetch = params.customDataProxyFetch\n\n    // allow query extensions to re-wrap in transactions\n    // this will automatically discard the prev batch tx\n    if ('transaction' in params && transaction !== undefined) {\n      if (params.transaction?.kind === 'batch') {\n        void params.transaction.lock.then() // discard\n      }\n      params.transaction = transaction\n    }\n\n    // if we are done recursing, we execute the request\n    if (i === queryCbs.length) {\n      return client._executeRequest(params)\n    }\n\n    // if not, call the next query cb and recurse query\n    return queryCbs[i]({\n      model: params.model,\n      operation: params.model ? params.action : params.clientMethod,\n      args: deepCloneArgs(params.args ?? {}),\n      // @ts-expect-error because not part of public API\n      __internalParams: params,\n      query: (args, __internalParams = params) => {\n        // we need to keep track of the current customDataProxyFetch\n        // this is to cascade customDataProxyFetch like a middleware\n        const currCustomFetch = __internalParams.customDataProxyFetch\n        __internalParams.customDataProxyFetch = composeCustomDataProxyFetch(prevCustomFetch, currCustomFetch)\n        __internalParams.args = args\n\n        return iterateAndCallQueryCallbacks(client, __internalParams, queryCbs, i + 1)\n      },\n    })\n  })\n}\n\nexport function applyQueryExtensions(client: Client, params: InternalRequestParams): Promise<any> {\n  const { jsModelName, action, clientMethod } = params\n  const operation = jsModelName ? action : clientMethod\n\n  // query extensions only apply to model-bound operations\n  if (client._extensions.isEmpty()) {\n    return client._executeRequest(params)\n  }\n\n  // get the cached query cbs for a given model and action\n  const cbs = client._extensions.getAllQueryCallbacks(jsModelName ?? '$none', operation)\n\n  return iterateAndCallQueryCallbacks(client, params, cbs)\n}\n\ntype BatchExecuteCallback = (params: BatchInternalParams) => Promise<unknown[]>\n\nexport function createApplyBatchExtensionsFunction(executeBatch: BatchExecuteCallback) {\n  return (requests: RequestParams[]) => {\n    const params = { requests }\n    const callbacks = requests[0].extensions.getAllBatchQueryCallbacks()\n    if (!callbacks.length) {\n      return executeBatch(params)\n    }\n\n    return iterateAndCallBatchCallbacks(params, callbacks, 0, executeBatch)\n  }\n}\n\nexport function iterateAndCallBatchCallbacks(\n  params: BatchInternalParams,\n  callbacks: BatchQueryOptionsCb[],\n  i: number,\n  executeBatch: BatchExecuteCallback,\n) {\n  if (i === callbacks.length) {\n    return executeBatch(params)\n  }\n\n  const prevFetch = params.customDataProxyFetch\n  const transaction = params.requests[0].transaction\n  return callbacks[i]({\n    args: {\n      queries: params.requests.map((request) => ({\n        model: request.modelName,\n        operation: request.action,\n        args: request.args,\n      })),\n      transaction: transaction\n        ? {\n            isolationLevel: transaction.kind === 'batch' ? transaction.isolationLevel : undefined,\n          }\n        : undefined,\n    },\n    __internalParams: params,\n    query(_args, __internalParams = params) {\n      const nextFetch = __internalParams.customDataProxyFetch\n      __internalParams.customDataProxyFetch = composeCustomDataProxyFetch(prevFetch, nextFetch)\n      return iterateAndCallBatchCallbacks(__internalParams, callbacks, i + 1, executeBatch)\n    },\n  })\n}\n\nconst noopFetch: AccelerateExtensionFetchDecorator = (f) => f\nfunction composeCustomDataProxyFetch(prevFetch = noopFetch, nextFetch = noopFetch): AccelerateExtensionFetchDecorator {\n  return (f) => prevFetch(nextFetch(f))\n}\n", "import { Decimal, isObjectEnumValue, Sql } from '@prisma/client-runtime-utils'\nimport { assertNever } from '@prisma/internals'\n\nimport { isFieldRef } from '../core/model/FieldRef'\nimport { isSkip } from '../core/types'\nimport { isTypedSql, TypedSql, UnknownTypedSql } from '../core/types/exported'\nimport { JsArgs, JsInputValue } from '../core/types/exported/JsApi'\nimport { RawQueryArgs } from '../core/types/exported/RawQueryArgs'\nimport { isDate } from './date'\nimport { isDecimalJsLike } from './decimalJsLike'\n\nexport function deepCloneArgs(args: JsArgs | RawQueryArgs): JsArgs | RawQueryArgs {\n  if (args instanceof Sql) {\n    return cloneSql(args)\n  }\n\n  if (isTypedSql(args)) {\n    return cloneTypedSql(args)\n  }\n\n  if (Array.isArray(args)) {\n    const clone: RawQueryArgs = [args[0]]\n\n    for (let i = 1; i < args.length; i++) {\n      clone[i] = deepCloneValue(args[i] as JsInputValue)\n    }\n\n    return clone\n  }\n  const clone: JsArgs = {}\n  for (const k in args) {\n    clone[k] = deepCloneValue(args[k])\n  }\n  return clone\n}\n\nfunction cloneSql(rawParam: Sql): Sql {\n  return new Sql(rawParam.strings, rawParam.values)\n}\n\nfunction cloneTypedSql(rawParam: UnknownTypedSql): UnknownTypedSql {\n  return new TypedSql(rawParam.sql, rawParam.values)\n}\n\n// based on https://github.com/lukeed/klona/blob/v2.0.6/src/index.js\nfunction deepCloneValue(x: JsInputValue): JsInputValue {\n  if (typeof x !== 'object' || x == null || isObjectEnumValue(x) || isFieldRef(x) || isSkip(x)) {\n    return x\n  }\n\n  if (isDecimalJsLike(x)) {\n    return new Decimal(x.toFixed())\n  }\n\n  if (isDate(x)) {\n    return new Date(+x)\n  }\n\n  if (ArrayBuffer.isView(x)) {\n    return x.slice(0)\n  }\n\n  if (Array.isArray(x)) {\n    let k = x.length\n    let copy\n    for (copy = Array(k); k--; ) {\n      copy[k] = deepCloneValue(x[k])\n    }\n    return copy\n  }\n\n  if (typeof x === 'object') {\n    const copy = {}\n    for (const k in x) {\n      if (k === '__proto__') {\n        Object.defineProperty(copy, k, {\n          value: deepCloneValue(x[k]),\n          configurable: true,\n          enumerable: true,\n          writable: true,\n        })\n      } else {\n        copy[k] = deepCloneValue(x[k])\n      }\n    }\n    return copy\n  }\n\n  assertNever(x, 'Unknown value')\n}\n", "const denylist = ['$connect', '$disconnect', '$on', '$use', '$extends'] as const\n\nexport const itxClientDenyList = denylist as ReadonlyArray<string | symbol>\n\nexport type ITXClientDenyList = (typeof denylist)[number]\n", "import { RuntimeDataModel } from '@prisma/client-common'\n\nimport { JsArgs } from '../types/exported/JsApi'\n\ntype ResolveResultExtensionContextParams = {\n  dataPath: string[]\n  modelName: string\n  args?: JsArgs\n  runtimeDataModel: RuntimeDataModel\n}\n\ntype ResultExtensionContext = {\n  modelName: string\n  args: JsArgs\n}\n\n/**\n * Resolves the model/args context used for result extensions from a query dataPath.\n * Falls back to the root model context when traversal can not continue because the model is\n * missing, the segment is not a relation, or the path format is invalid.\n * Throws when a relation field segment from dataPath does not exist on the current model.\n */\nexport function resolveResultExtensionContext({\n  dataPath,\n  modelName,\n  args,\n  runtimeDataModel,\n}: ResolveResultExtensionContextParams): ResultExtensionContext {\n  const rootContext = {\n    modelName,\n    args: args ?? {},\n  }\n\n  const relationPath = relationPathFromDataPath(dataPath)\n  if (!relationPath || relationPath.length === 0) {\n    return rootContext\n  }\n\n  let currentModelName = modelName\n  let currentArgs: JsArgs = args ?? {}\n\n  for (const relationFieldName of relationPath) {\n    const currentModel = runtimeDataModel.models[currentModelName]\n    if (!currentModel) {\n      return rootContext\n    }\n\n    const relationField = currentModel.fields.find((field) => field.name === relationFieldName)\n    if (!relationField) {\n      throw new Error(\n        `Could not resolve relation field \"${relationFieldName}\" on model \"${currentModelName}\" from dataPath \"${dataPath.join('.')}\"`,\n      )\n    }\n    if (relationField.kind !== 'object' || !relationField.relationName) {\n      return rootContext\n    }\n\n    currentModelName = relationField.type\n    currentArgs = resolveNextArgs(currentArgs, relationFieldName)\n  }\n\n  return {\n    modelName: currentModelName,\n    args: currentArgs,\n  }\n}\n\nfunction relationPathFromDataPath(dataPath: string[]): string[] | undefined {\n  const relationPath: string[] = []\n\n  for (let index = 0; index < dataPath.length; index += 2) {\n    const selector = dataPath[index]\n    const relationFieldName = dataPath[index + 1]\n\n    if ((selector !== 'select' && selector !== 'include') || relationFieldName === undefined) {\n      return undefined\n    }\n\n    relationPath.push(relationFieldName)\n  }\n\n  return relationPath\n}\n\nfunction resolveNextArgs(args: JsArgs, relationFieldName: string): JsArgs {\n  const select = args.select?.[relationFieldName]\n  if (isNestedArgs(select)) {\n    return select\n  }\n\n  const include = args.include?.[relationFieldName]\n  if (isNestedArgs(include)) {\n    return include\n  }\n\n  return {}\n}\n\nfunction isNestedArgs(value: unknown): value is JsArgs {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n", "import { ClientEngine, Engine, EngineConfig } from '../engines'\n\n/**\n * Get the engine instance based on the runtime bundle type and engine configuration.\n */\nexport function getEngineInstance(engineConfig: EngineConfig): Engine {\n  return new ClientEngine(engineConfig)\n}\n", "export { ClientEngine } from './client/ClientEngine'\nexport {\n  type AccelerateExtensionFetchDecorator,\n  type BatchTransactionOptions,\n  type Engine,\n  type EngineConfig,\n  type GraphQLQuery,\n  type InteractiveTransactionOptions,\n  type TransactionOptions,\n} from './common/Engine'\nexport * from './common/types/EngineValidationError'\nexport type { LogEmitter } from './common/types/Events'\nexport type { IsolationLevel, Options, TransactionHeaders } from './common/types/Transaction'\nexport type * from '@prisma/json-protocol'\n", "import { QueryCompiler, QueryCompilerConstructor, QueryEngineLogLevel } from '@prisma/client-common'\nimport {\n  BatchResponse,\n  convertCompactedRows,\n  parameterizeBatch,\n  parameterizeQuery,\n  QueryEvent,\n  QueryPlanNode,\n  safeJsonStringify,\n  TransactionInfo,\n  UserFacingError,\n} from '@prisma/client-engine-runtime'\nimport {\n  PrismaClientInitializationError,\n  PrismaClientKnownRequestError,\n  PrismaClientRustPanicError,\n  PrismaClientUnknownRequestError,\n} from '@prisma/client-runtime-utils'\nimport { Debug } from '@prisma/debug'\nimport type { IsolationLevel as SqlIsolationLevel, SqlDriverAdapterFactory } from '@prisma/driver-adapter-utils'\nimport type { ActiveConnectorType } from '@prisma/generator'\nimport type { TracingHelper } from '@prisma/instrumentation-contract'\nimport { assertNever } from '@prisma/internals'\nimport type { JsonBatchQuery, JsonQuery, RawJsonQuery } from '@prisma/json-protocol'\nimport { ParamGraph } from '@prisma/param-graph'\n\nimport { version as clientVersion } from '../../../../../package.json'\nimport { deserializeRawParameters } from '../../../utils/deserializeRawParameters'\nimport type { BatchQueryEngineResult, EngineConfig, RequestBatchOptions, RequestOptions } from '../common/Engine'\nimport { Engine } from '../common/Engine'\nimport { LogEmitter, QueryEvent as ClientQueryEvent } from '../common/types/Events'\nimport { RustRequestError, SyncRustError } from '../common/types/QueryEngine'\nimport type * as Tx from '../common/types/Transaction'\nimport { InteractiveTransactionInfo } from '../common/types/Transaction'\nimport { getBatchRequestPayload } from '../common/utils/getBatchRequestPayload'\nimport { getErrorMessageWithLink as genericGetErrorMessageWithLink } from '../common/utils/getErrorMessageWithLink'\nimport type { Executor } from './Executor'\nimport { LocalExecutor } from './LocalExecutor'\nimport { QueryPlanCache } from './query-plan-cache'\nimport { RemoteExecutor } from './RemoteExecutor'\nimport { QueryCompilerLoader } from './types/QueryCompiler'\nimport { wasmQueryCompilerLoader } from './WasmQueryCompilerLoader'\n\n/**\n * Prisma error code for the `PrismaClientInitializationError` raised when\n * `PrismaClient` is instantiated without a driver adapter.\n */\nconst CLIENT_ENGINE_ERROR = 'P2038'\n\nconst debug = Debug('prisma:client:clientEngine')\n\ntype GlobalWithPanicHandler = typeof globalThis & {\n  PRISMA_WASM_PANIC_REGISTRY: {\n    set_message?: (message: string) => void\n  }\n}\n\nconst globalWithPanicHandler = globalThis as GlobalWithPanicHandler\n\n// The fallback panic handler shared across all instances. This ensures that any\n// panic is caught and handled, but each instance should prefer temporarily\n// setting its own local panic handler for the duration of a synchronous WASM\n// function call for better error messages.\nglobalWithPanicHandler.PRISMA_WASM_PANIC_REGISTRY = {\n  set_message(message: string) {\n    throw new PrismaClientRustPanicError(message, clientVersion)\n  },\n}\n\ninterface ConnectedEngine {\n  executor: Executor\n  queryCompiler: QueryCompiler\n}\n\ntype EngineState =\n  | {\n      type: 'disconnected'\n    }\n  | {\n      type: 'connecting'\n      promise: Promise<ConnectedEngine>\n    }\n  | {\n      type: 'connected'\n      engine: ConnectedEngine\n    }\n  | {\n      type: 'disconnecting'\n      promise: Promise<void>\n    }\n\ntype ExecutorKind =\n  | {\n      remote: false\n      driverAdapterFactory: SqlDriverAdapterFactory\n    }\n  | {\n      remote: true\n      accelerateUrl: string\n    }\n\nexport class ClientEngine implements Engine {\n  name = 'ClientEngine' as const\n\n  #QueryCompilerConstructor?: QueryCompilerConstructor\n  #state: EngineState = { type: 'disconnected' }\n  #queryCompilerLoader: QueryCompilerLoader\n  #executorKind: ExecutorKind\n  #queryPlanCache?: QueryPlanCache\n  #paramGraph: ParamGraph\n\n  config: EngineConfig\n  datamodel: string\n\n  logEmitter: LogEmitter\n  logQueries: boolean\n  logLevel: QueryEngineLogLevel\n  tracingHelper: TracingHelper\n\n  #emitQueryEvent?: (event: QueryEvent) => void\n\n  constructor(config: EngineConfig, queryCompilerLoader?: QueryCompilerLoader) {\n    if (config.accelerateUrl !== undefined) {\n      this.#executorKind = { remote: true, accelerateUrl: config.accelerateUrl }\n    } else if (config.adapter) {\n      this.#executorKind = { remote: false, driverAdapterFactory: config.adapter }\n      debug('Using driver adapter: %O', config.adapter)\n    } else {\n      throw new PrismaClientInitializationError(\n        'PrismaClient requires a driver adapter to connect to your database, but none was provided. Pass one to the PrismaClient constructor, e.g. `new PrismaClient({ adapter })`. Learn more: https://pris.ly/d/driver-adapters',\n        config.clientVersion,\n        CLIENT_ENGINE_ERROR,\n      )\n    }\n\n    if (TARGET_BUILD_TYPE === 'client' || TARGET_BUILD_TYPE === 'wasm-compiler-edge') {\n      this.#queryCompilerLoader = queryCompilerLoader ?? wasmQueryCompilerLoader\n    } else {\n      throw new Error(`Invalid TARGET_BUILD_TYPE: ${TARGET_BUILD_TYPE}`)\n    }\n\n    this.config = config\n    this.logQueries = config.logQueries ?? false\n    this.logLevel = config.logLevel ?? 'error'\n    this.logEmitter = config.logEmitter\n    this.datamodel = config.inlineSchema\n    this.tracingHelper = config.tracingHelper\n    this.#queryPlanCache =\n      config.queryPlanCacheMaxSize === 0 ? undefined : new QueryPlanCache(config.queryPlanCacheMaxSize)\n    this.#paramGraph = ParamGraph.deserialize(config.parameterizationSchema, (enumName) => {\n      if (!Object.hasOwn(config.runtimeDataModel.enums, enumName)) {\n        return undefined\n      }\n      const mapping: Record<string, string> = {}\n      for (const value of config.runtimeDataModel.enums[enumName].values) {\n        mapping[value.name] = value.dbName ?? value.name\n      }\n      return mapping\n    })\n\n    if (config.enableDebugLogs) {\n      this.logLevel = 'debug'\n    }\n\n    if (this.logQueries) {\n      this.#emitQueryEvent = (event: QueryEvent) => {\n        this.logEmitter.emit('query', {\n          ...event,\n          // TODO: we should probably change the interface to contain a proper array in the next major version.\n          params: safeJsonStringify(event.params),\n          // TODO: this field only exists for historical reasons as we grandfathered it from the time\n          // when we emitted `tracing` events to stdout in the engine unchanged, and then described\n          // them in the public API as TS types. Thus this field used to contain the name of the Rust\n          // module in which an event originated. When using library engine, which uses a different\n          // mechanism with a JavaScript callback for logs, it's normally just an empty string instead.\n          // This field is definitely not useful and should be removed from the public types (but it's\n          // technically a breaking change, even if a tiny and inconsequential one).\n          target: 'ClientEngine',\n        } satisfies ClientQueryEvent)\n      }\n    }\n  }\n\n  async #ensureStarted(): Promise<ConnectedEngine> {\n    switch (this.#state.type) {\n      case 'disconnected': {\n        const connecting = this.tracingHelper.runInChildSpan('connect', async () => {\n          let executor: Executor | undefined = undefined\n          let queryCompiler: QueryCompiler | undefined = undefined\n\n          try {\n            executor = await this.#connectExecutor()\n            queryCompiler = await this.#instantiateQueryCompiler(executor)\n          } catch (error) {\n            this.#state = { type: 'disconnected' }\n            queryCompiler?.free()\n            await executor?.disconnect()\n            throw error\n          }\n\n          const engine: ConnectedEngine = {\n            executor,\n            queryCompiler,\n          }\n\n          this.#state = { type: 'connected', engine }\n\n          return engine\n        })\n\n        this.#state = {\n          type: 'connecting',\n          promise: connecting,\n        }\n\n        return await connecting\n      }\n\n      case 'connecting':\n        return await this.#state.promise\n\n      case 'connected':\n        return this.#state.engine\n\n      case 'disconnecting':\n        await this.#state.promise\n        return await this.#ensureStarted()\n    }\n  }\n\n  async #connectExecutor(): Promise<Executor> {\n    if (this.#executorKind.remote) {\n      return new RemoteExecutor({\n        clientVersion: this.config.clientVersion,\n        accelerateUrl: this.#executorKind.accelerateUrl,\n        logEmitter: this.logEmitter,\n        logLevel: this.logLevel,\n        logQueries: this.logQueries,\n        tracingHelper: this.tracingHelper,\n        sqlCommenters: this.config.sqlCommenters,\n      })\n    } else {\n      return await LocalExecutor.connect({\n        driverAdapterFactory: this.#executorKind.driverAdapterFactory,\n        tracingHelper: this.tracingHelper,\n        transactionOptions: {\n          ...this.config.transactionOptions,\n          isolationLevel: this.#convertIsolationLevel(this.config.transactionOptions.isolationLevel),\n        },\n        onQuery: this.#emitQueryEvent,\n        provider: this.config.activeProvider as ActiveConnectorType | undefined,\n        sqlCommenters: this.config.sqlCommenters,\n      })\n    }\n  }\n\n  async #instantiateQueryCompiler(executor: Executor): Promise<QueryCompiler> {\n    // We reuse the `QueryCompilerConstructor` from the same `WebAssembly.Instance` between\n    // reconnects as long as there are no panics. This avoids the overhead of loading and\n    // JIT compiling the WebAssembly module after every reconnect. If it panics, we discard\n    // it and load a new one from scratch if the client reconnects again.\n    let QueryCompilerConstructor = this.#QueryCompilerConstructor\n\n    if (QueryCompilerConstructor === undefined) {\n      QueryCompilerConstructor = await this.#queryCompilerLoader.loadQueryCompiler(this.config)\n      this.#QueryCompilerConstructor = QueryCompilerConstructor\n    }\n\n    const { provider, connectionInfo } = await executor.getConnectionInfo()\n\n    try {\n      return this.#withLocalPanicHandler(\n        () =>\n          new QueryCompilerConstructor({\n            datamodel: this.datamodel,\n            provider,\n            connectionInfo,\n          }),\n        undefined,\n        false,\n      )\n    } catch (e) {\n      throw this.#transformInitError(e)\n    }\n  }\n\n  #transformInitError(err: Error): Error {\n    if (err instanceof PrismaClientRustPanicError) {\n      return err\n    }\n    try {\n      const error: SyncRustError = JSON.parse(err.message)\n      return new PrismaClientInitializationError(error.message, this.config.clientVersion, error.error_code)\n    } catch (e) {\n      return err\n    }\n  }\n\n  #transformRequestError(err: any, query?: string): Error {\n    if (err instanceof PrismaClientInitializationError) return err\n\n    if (err.code === 'GenericFailure' && err.message?.startsWith('PANIC:'))\n      return new PrismaClientRustPanicError(\n        getErrorMessageWithLink(this, err.message, query),\n        this.config.clientVersion,\n      )\n\n    if (err instanceof UserFacingError) {\n      return new PrismaClientKnownRequestError(err.message, {\n        code: err.code,\n        meta: err.meta,\n        clientVersion: this.config.clientVersion,\n      })\n    }\n\n    try {\n      const error: RustRequestError = JSON.parse(err as string)\n      return new PrismaClientUnknownRequestError(`${error.message}\\n${error.backtrace}`, {\n        clientVersion: this.config.clientVersion,\n      })\n    } catch (e) {\n      return err\n    }\n  }\n\n  #transformCompileError(error: any): any {\n    if (error instanceof PrismaClientRustPanicError) {\n      return error\n    }\n\n    if (typeof error['message'] === 'string' && typeof error['code'] === 'string') {\n      return new PrismaClientKnownRequestError(error['message'], {\n        code: error['code'],\n        meta: error.meta,\n        clientVersion: this.config.clientVersion,\n      })\n    } else if (typeof error['message'] === 'string') {\n      return new PrismaClientUnknownRequestError(error['message'], { clientVersion: this.config.clientVersion })\n    } else {\n      return error\n    }\n  }\n\n  #withLocalPanicHandler<T>(fn: () => T, query?: string, disconnectOnPanic = true): T {\n    const previousHandler = globalWithPanicHandler.PRISMA_WASM_PANIC_REGISTRY.set_message\n    let panic: string | undefined = undefined\n\n    global.PRISMA_WASM_PANIC_REGISTRY.set_message = (message: string) => {\n      panic = message\n    }\n\n    try {\n      return fn()\n    } finally {\n      global.PRISMA_WASM_PANIC_REGISTRY.set_message = previousHandler\n\n      if (panic) {\n        // Discard the current `WebAssembly.Instance` to avoid memory leaks:\n        // WebAssembly doesn't unwind the stack or call destructors on panic.\n        this.#QueryCompilerConstructor = undefined\n        // Disconnect and drop the compiler, unless this panic happened during\n        // initialization. In that case, we let `#ensureStarted` deal with it\n        // and change the state to `disconnected` by itself.\n        if (disconnectOnPanic) {\n          void this.stop().catch((err) => debug('failed to disconnect:', err))\n        }\n        // eslint-disable-next-line no-unsafe-finally\n        throw new PrismaClientRustPanicError(getErrorMessageWithLink(this, panic, query), this.config.clientVersion)\n      }\n    }\n  }\n\n  onBeforeExit() {\n    throw new Error(\n      '\"beforeExit\" hook is not applicable to the client engine, it is only relevant and implemented for the binary engine. Please add your event listener to the `process` object directly instead.',\n    )\n  }\n\n  async start(): Promise<void> {\n    await this.#ensureStarted()\n  }\n\n  async stop(): Promise<void> {\n    switch (this.#state.type) {\n      case 'disconnected':\n        return\n\n      case 'connecting':\n        await this.#state.promise\n        return await this.stop()\n\n      case 'connected': {\n        const engine = this.#state.engine\n\n        const disconnecting = this.tracingHelper.runInChildSpan('disconnect', async () => {\n          try {\n            await engine.executor.disconnect()\n            engine.queryCompiler.free()\n          } finally {\n            this.#state = { type: 'disconnected' }\n          }\n        })\n\n        this.#state = {\n          type: 'disconnecting',\n          promise: disconnecting,\n        }\n\n        return await disconnecting\n      }\n\n      case 'disconnecting':\n        return await this.#state.promise\n    }\n  }\n\n  version(): string {\n    return 'unknown'\n  }\n\n  async transaction(\n    action: 'start',\n    headers: Tx.TransactionHeaders,\n    options: Tx.Options,\n  ): Promise<Tx.InteractiveTransactionInfo>\n  async transaction(\n    action: 'commit',\n    headers: Tx.TransactionHeaders,\n    info: Tx.InteractiveTransactionInfo,\n  ): Promise<undefined>\n  async transaction(\n    action: 'rollback',\n    headers: Tx.TransactionHeaders,\n    info: Tx.InteractiveTransactionInfo,\n  ): Promise<undefined>\n  async transaction(\n    action: 'start' | 'commit' | 'rollback',\n    _headers: Tx.TransactionHeaders,\n    arg?: any,\n  ): Promise<Tx.InteractiveTransactionInfo | undefined> {\n    let result: TransactionInfo | undefined\n\n    const { executor } = await this.#ensureStarted()\n\n    try {\n      if (action === 'start') {\n        const options: Tx.Options = arg\n        result = await executor.startTransaction({\n          ...options,\n          isolationLevel: this.#convertIsolationLevel(options.isolationLevel),\n        })\n      } else if (action === 'commit') {\n        const txInfo: Tx.InteractiveTransactionInfo<undefined> = arg\n        await executor.commitTransaction(txInfo)\n      } else if (action === 'rollback') {\n        const txInfo: Tx.InteractiveTransactionInfo<undefined> = arg\n        await executor.rollbackTransaction(txInfo)\n      } else {\n        assertNever(action, 'Invalid transaction action.')\n      }\n    } catch (error) {\n      throw this.#transformRequestError(error)\n    }\n\n    return result ? { id: result.id, payload: undefined } : undefined\n  }\n\n  async request<T>(\n    query: JsonQuery,\n    { interactiveTransaction, customDataProxyFetch }: RequestOptions<unknown>,\n  ): Promise<{ data: T }> {\n    debug(`sending request`)\n\n    const { executor, queryCompiler } = await this.#ensureStarted().catch((err) => {\n      throw this.#transformRequestError(err, JSON.stringify(query))\n    })\n\n    let plan: QueryPlanNode\n    let placeholderValues: Record<string, unknown> = {}\n    let queryInfoQuery = query.query\n\n    if (isRawQuery(query)) {\n      plan = compileRawQuery(query)\n    } else {\n      const { parameterizedQuery, placeholderValues: extractedValues } = parameterizeQuery(query, this.#paramGraph)\n      const cacheKey = JSON.stringify(parameterizedQuery)\n      placeholderValues = extractedValues\n      queryInfoQuery = parameterizedQuery.query\n\n      // We do not cache `createMany` and `createManyAndReturn` queries as they are very unlikely\n      // to benefit from caching due to their high variability in parameters, which leads to a very\n      // high cache miss rate and potential cache bloat.\n      const isCacheable = query.action !== 'createMany' && query.action !== 'createManyAndReturn'\n      const cached = isCacheable ? this.#queryPlanCache?.getSingle(cacheKey) : undefined\n      if (cached) {\n        debug('query plan cache hit')\n        plan = cached\n      } else {\n        debug('query plan cache miss')\n        plan = this.#compileQuery(parameterizedQuery, cacheKey, queryCompiler)\n        if (isCacheable) {\n          this.#queryPlanCache?.setSingle(cacheKey, plan)\n        }\n      }\n    }\n\n    try {\n      debug(`query plan created`, plan)\n\n      const result = await executor.execute({\n        plan,\n        model: query.modelName,\n        operation: query.action,\n        placeholderValues,\n        transaction: interactiveTransaction,\n        batchIndex: undefined,\n        customFetch: customDataProxyFetch?.(globalThis.fetch),\n        queryInfo: {\n          type: 'single',\n          modelName: query.modelName,\n          action: query.action,\n          query: queryInfoQuery,\n        },\n      })\n\n      debug(`query plan executed`)\n\n      return { data: { [query.action]: result } as T }\n    } catch (e: any) {\n      throw this.#transformRequestError(e, JSON.stringify(query))\n    }\n  }\n\n  async requestBatch<T>(\n    queries: JsonQuery[],\n    { transaction, customDataProxyFetch }: RequestBatchOptions<unknown>,\n  ): Promise<BatchQueryEngineResult<T>[]> {\n    if (queries.length === 0) {\n      return []\n    }\n\n    const firstAction = queries[0].action\n    const firstModelName = queries[0].modelName\n\n    const batchPayload = getBatchRequestPayload(queries, transaction)\n    const request = JSON.stringify(batchPayload)\n\n    const { executor, queryCompiler } = await this.#ensureStarted().catch((err) => {\n      throw this.#transformRequestError(err, request)\n    })\n\n    const hasRawQueries = firstModelName === undefined\n    let batchResponse: BatchResponse\n    let placeholderValues: Record<string, unknown> = {}\n    let queryInfoQueries = queries.map((query) => query.query)\n\n    if (!hasRawQueries) {\n      const { parameterizedBatch, placeholderValues: extractedValues } = parameterizeBatch(\n        batchPayload as JsonBatchQuery,\n        this.#paramGraph,\n      )\n      const cacheKeyStr = JSON.stringify(parameterizedBatch)\n      placeholderValues = extractedValues\n      queryInfoQueries = parameterizedBatch.batch.map((query) => query.query)\n\n      const cached = this.#queryPlanCache?.getBatch(cacheKeyStr)\n      if (cached) {\n        debug('batch query plan cache hit')\n        batchResponse = cached\n      } else {\n        debug('batch query plan cache miss')\n        try {\n          batchResponse = this.#compileBatch(parameterizedBatch.batch, cacheKeyStr, queryCompiler)\n          this.#queryPlanCache?.setBatch(cacheKeyStr, batchResponse)\n        } catch (error) {\n          throw this.#transformCompileError(error)\n        }\n      }\n    } else {\n      batchResponse = this.#compileBatch(queries, request, queryCompiler)\n    }\n\n    try {\n      let txInfo: InteractiveTransactionInfo | undefined\n      if (transaction?.kind === 'itx') {\n        // If we are already in an interactive transaction we do not nest transactions\n        txInfo = transaction.options\n      }\n\n      switch (batchResponse.type) {\n        case 'multi': {\n          if (transaction?.kind !== 'itx') {\n            const batchOptions = transaction?.options\n            const txOptions = {\n              maxWait: batchOptions?.maxWait ?? this.config.transactionOptions.maxWait,\n              timeout: batchOptions?.timeout ?? this.config.transactionOptions.timeout,\n              isolationLevel: batchOptions?.isolationLevel ?? this.config.transactionOptions.isolationLevel,\n            }\n            txInfo = await this.transaction('start', {}, txOptions)\n          }\n\n          const results: BatchQueryEngineResult<unknown>[] = []\n          let rollback = false\n          let canContinueOnError: boolean | undefined\n          for (const [batchIndex, plan] of batchResponse.plans.entries()) {\n            try {\n              const rows = await executor.execute({\n                plan: plan as QueryPlanNode,\n                placeholderValues,\n                model: queries[batchIndex].modelName,\n                operation: queries[batchIndex].action,\n                batchIndex,\n                transaction: txInfo,\n                customFetch: customDataProxyFetch?.(globalThis.fetch) as typeof globalThis.fetch | undefined,\n                queryInfo: {\n                  type: 'single',\n                  modelName: queries[batchIndex].modelName,\n                  action: queries[batchIndex].action,\n                  query: queryInfoQueries[batchIndex],\n                },\n              })\n              results.push({ data: { [queries[batchIndex].action]: rows } })\n            } catch (err) {\n              canContinueOnError ??=\n                transaction?.kind !== 'batch' &&\n                queries.every((query) => query.action === 'findUnique' || query.action === 'findUniqueOrThrow')\n\n              results.push(err as Error)\n              rollback = true\n              if (!canContinueOnError) {\n                break\n              }\n            }\n          }\n\n          if (txInfo !== undefined && transaction?.kind !== 'itx') {\n            if (rollback) {\n              await this.transaction('rollback', {}, txInfo)\n            } else {\n              await this.transaction('commit', {}, txInfo)\n            }\n          }\n          return results as BatchQueryEngineResult<T>[]\n        }\n        case 'compacted': {\n          if (!queries.every((q) => q.action === firstAction && q.modelName === firstModelName)) {\n            const actions = queries.map((q) => q.action).join(', ')\n            const modelNames = queries.map((q) => q.modelName).join(', ')\n            throw new Error(\n              `Internal error: All queries in a compacted batch must have the same action and model name, but received actions: [${actions}] and model names: [${modelNames}]. ` +\n                'This indicates a bug in the client. Please report this issue to the Prisma team with your query details.',\n            )\n          }\n\n          if (firstModelName === undefined) {\n            throw new Error(\n              'Internal error: A compacted batch cannot contain raw queries. ' +\n                'This indicates a bug in the client. Please report this issue to the Prisma team with your query details.',\n            )\n          }\n\n          const rows = await executor.execute({\n            plan: batchResponse.plan as QueryPlanNode,\n            placeholderValues,\n            model: firstModelName,\n            operation: firstAction,\n            batchIndex: undefined,\n            transaction: txInfo,\n            customFetch: customDataProxyFetch?.(globalThis.fetch) as typeof globalThis.fetch | undefined,\n            queryInfo: {\n              type: 'compacted',\n              action: firstAction,\n              modelName: firstModelName,\n              queries: queryInfoQueries,\n            },\n          })\n\n          const results = convertCompactedRows(rows as {}[], batchResponse, placeholderValues)\n          return results.map((result) => ({ data: { [firstAction]: result } }) as BatchQueryEngineResult<T>)\n        }\n      }\n    } catch (e: any) {\n      throw this.#transformRequestError(e, request)\n    }\n  }\n\n  /**\n   * Used by `@prisma/extension-accelerate`\n   */\n  async apiKey(): Promise<string | null> {\n    const { executor } = await this.#ensureStarted()\n    return executor.apiKey()\n  }\n\n  #compileQuery(query: JsonQuery, request: string, compiler: QueryCompiler): QueryPlanNode {\n    try {\n      return this.#withLocalPanicHandler(() =>\n        this.#withCompileSpan({\n          queries: [query],\n          execute: () => compiler.compile(request),\n        }),\n      )\n    } catch (error) {\n      throw this.#transformCompileError(error)\n    }\n  }\n\n  #compileBatch(queries: JsonQuery[], request: string, compiler: QueryCompiler): BatchResponse {\n    if (queries.every(isRawQuery)) {\n      return {\n        type: 'multi',\n        plans: queries.map((q) => compileRawQuery(q)),\n      }\n    }\n\n    try {\n      return this.#withLocalPanicHandler(() =>\n        this.#withCompileSpan({\n          queries,\n          execute: () => compiler.compileBatch(request),\n        }),\n      )\n    } catch (err) {\n      throw this.#transformCompileError(err)\n    }\n  }\n\n  #convertIsolationLevel(clientIsolationLevel: Tx.IsolationLevel | undefined): SqlIsolationLevel | undefined {\n    switch (clientIsolationLevel) {\n      case undefined:\n        return undefined\n      case 'ReadUncommitted':\n        return 'READ UNCOMMITTED'\n      case 'ReadCommitted':\n        return 'READ COMMITTED'\n      case 'RepeatableRead':\n        return 'REPEATABLE READ'\n      case 'Serializable':\n        return 'SERIALIZABLE'\n      case 'Snapshot':\n        return 'SNAPSHOT'\n      default:\n        throw new PrismaClientKnownRequestError(\n          `Inconsistent column data: Conversion failed: Invalid isolation level \\`${\n            clientIsolationLevel satisfies never\n          }\\``,\n          {\n            code: 'P2023',\n            clientVersion: this.config.clientVersion,\n            meta: {\n              providedIsolationLevel: clientIsolationLevel,\n            },\n          },\n        )\n    }\n  }\n\n  #withCompileSpan<T>({ queries, execute }: { queries: JsonQuery[]; execute: () => T }): T {\n    return this.tracingHelper.runInChildSpan(\n      {\n        name: 'compile',\n        attributes: {\n          models: queries.map((q) => q.modelName).filter((m) => m !== undefined),\n          actions: queries.map((q) => q.action),\n        },\n      },\n      execute,\n    )\n  }\n}\n\nfunction getErrorMessageWithLink(engine: ClientEngine, title: string, query?: string) {\n  return genericGetErrorMessageWithLink({\n    binaryTarget: undefined,\n    title,\n    version: engine.config.clientVersion,\n    engineVersion: 'unknown', // WASM engines do not export their version info\n    database: engine.config.activeProvider as any,\n    query,\n  })\n}\n\nfunction isRawQuery(query: JsonQuery): query is RawJsonQuery {\n  return query.action === 'queryRaw' || query.action === 'executeRaw'\n}\n\nfunction compileRawQuery(query: RawJsonQuery): QueryPlanNode {\n  const sql = query.query.arguments.query\n  const { args, argTypes } = deserializeRawParameters(query.query.arguments.parameters)\n  return {\n    type: query.action === 'queryRaw' ? 'query' : 'execute',\n    args: { type: 'rawSql', sql, args, argTypes },\n  }\n}\n", "export * from './batch'\nexport type { QueryEvent } from './events'\nexport { DataMapperError } from './interpreter/data-mapper'\nexport {\n  QueryInterpreter,\n  type QueryInterpreterOptions,\n  type QueryInterpreterSqlCommenter,\n  type QueryInterpreterTransactionManager,\n} from './interpreter/query-interpreter'\nexport * from './json-protocol'\nexport { parameterizeBatch, parameterizeQuery } from './parameterization/parameterize'\nexport * from './query-plan'\nexport * from './raw-json-protocol'\nexport type { SchemaProvider } from './schema'\nexport { applySqlCommenters } from './sql-commenter'\nexport { noopTracingHelper, type TracingHelper } from './tracing'\nexport type { TransactionInfo, Options as TransactionOptions } from './transaction-manager/transaction'\nexport { TransactionManager } from './transaction-manager/transaction-manager'\nexport { TransactionManagerError } from './transaction-manager/transaction-manager-error'\nexport { UserFacingError } from './user-facing-error'\nexport { doKeysMatch, isDeepStrictEqual, safeJsonStringify } from './utils'\n", "import { deserializeJsonObject } from './json-protocol'\nimport { QueryPlanNode } from './query-plan'\nimport { UserFacingError } from './user-facing-error'\nimport { doKeysMatch } from './utils'\n\nexport type BatchResponse = MultiBatchResponse | CompactedBatchResponse\n\nexport type MultiBatchResponse = {\n  type: 'multi'\n  plans: QueryPlanNode[]\n}\n\nexport type CompactedBatchResponse = {\n  type: 'compacted'\n  plan: QueryPlanNode\n  arguments: Record<string, {}>[]\n  nestedSelection: string[]\n  keys: string[]\n  expectNonEmpty: boolean\n}\n\n/**\n * Checks if a value is a placeholder.\n * Handles both formats: `{ $type: 'Param', value: { name: '...' } }` and `{ prisma__type: 'param', prisma__value: { name: '...' } }`\n */\nfunction isPlaceholder(\n  value: unknown,\n): value is { $type: 'Param'; value: { name: string } } | { prisma__type: 'param'; prisma__value: { name: string } } {\n  if (typeof value !== 'object' || value === null) {\n    return false\n  }\n  const obj = value as Record<string, unknown>\n  if ('$type' in obj && obj.$type === 'Param') {\n    return true\n  }\n  if ('prisma__type' in obj && obj.prisma__type === 'param') {\n    return true\n  }\n  return false\n}\n\nfunction getPlaceholderName(\n  value: { $type: 'Param'; value: { name: string } } | { prisma__type: 'param'; prisma__value: { name: string } },\n): string | undefined {\n  if ('prisma__type' in value) {\n    return value.prisma__value?.name\n  }\n  return (value as { value: { name: string } }).value.name\n}\n\nfunction resolveArgPlaceholders(\n  args: Record<string, {}>,\n  placeholderValues: Record<string, unknown>,\n): Record<string, {}> {\n  const resolved: Record<string, {}> = {}\n  for (const [key, value] of Object.entries(args)) {\n    resolved[key] = value\n    if (isPlaceholder(value)) {\n      const placeholderName = getPlaceholderName(value)\n      if (placeholderName && placeholderName in placeholderValues) {\n        resolved[key] = placeholderValues[placeholderName] as {}\n      }\n    }\n  }\n  return resolved\n}\n\n/**\n * Converts the result of a compacted query back to result objects analogous to what queries\n * would return when executed individually.\n */\nexport function convertCompactedRows(\n  rows: {}[],\n  compiledBatch: CompactedBatchResponse,\n  placeholderValues: Record<string, unknown> = {},\n): unknown[] {\n  // a list of objects that contain the keys of every row\n  const keysPerRow = rows.map((item) =>\n    compiledBatch.keys.reduce((acc, key) => {\n      acc[key] = deserializeJsonObject(item[key])\n      return acc\n    }, {}),\n  )\n\n  // the selections inferred from the request, used to filter unwanted columns from the results\n  const selection = new Set(compiledBatch.nestedSelection)\n\n  return compiledBatch.arguments.map((args) => {\n    const resolvedArgs = resolveArgPlaceholders(args, placeholderValues)\n\n    // we find the index of the row that matches the input arguments - this is the row we want\n    // to return minus any extra columns not present in the selection\n    const rowIndex = keysPerRow.findIndex((rowKeys) => doKeysMatch(rowKeys, resolvedArgs))\n    if (rowIndex === -1) {\n      if (compiledBatch.expectNonEmpty) {\n        return new UserFacingError(\n          'An operation failed because it depends on one or more records that were required but not found',\n          'P2025',\n        )\n      } else {\n        return null\n      }\n    } else {\n      const selected = Object.entries(rows[rowIndex]).filter(([k]) => selection.has(k))\n      return Object.fromEntries(selected)\n    }\n  })\n}\n", "import { Decimal } from '@prisma/client-runtime-utils'\n\nimport { assertNever } from './utils'\n\nexport type DateTaggedValue = { $type: 'DateTime'; value: string }\nexport type DecimalTaggedValue = { $type: 'Decimal'; value: string }\nexport type BytesTaggedValue = { $type: 'Bytes'; value: string }\nexport type BigIntTaggedValue = { $type: 'BigInt'; value: string }\nexport type FieldRefTaggedValue = { $type: 'FieldRef'; value: { _ref: string } }\nexport type EnumTaggedValue = { $type: 'Enum'; value: string }\nexport type JsonTaggedValue = { $type: 'Json'; value: string }\nexport type RawTaggedValue = { $type: 'Raw'; value: unknown }\n\nexport type JsonInputTaggedValue =\n  | DateTaggedValue\n  | DecimalTaggedValue\n  | BytesTaggedValue\n  | BigIntTaggedValue\n  | FieldRefTaggedValue\n  | JsonTaggedValue\n  | EnumTaggedValue\n  | RawTaggedValue\n\nexport type JsonOutputTaggedValue =\n  | DateTaggedValue\n  | DecimalTaggedValue\n  | BytesTaggedValue\n  | BigIntTaggedValue\n  | JsonTaggedValue\n\nexport type JsOutputValue =\n  | null\n  | string\n  | number\n  | boolean\n  | bigint\n  | Uint8Array\n  | Date\n  | Decimal\n  | JsOutputValue[]\n  | { [key: string]: JsOutputValue }\n\nexport function normalizeJsonProtocolValues(result: unknown): unknown {\n  if (result === null) {\n    return result\n  }\n\n  if (Array.isArray(result)) {\n    return result.map(normalizeJsonProtocolValues)\n  }\n\n  if (typeof result === 'object') {\n    if (isTaggedValue(result)) {\n      return normalizeTaggedValue(result)\n    }\n\n    if (ArrayBuffer.isView(result)) {\n      const buffer = Buffer.from(result.buffer, result.byteOffset, result.byteLength)\n      return buffer.toString('base64')\n    }\n\n    // avoid mapping class instances\n    if (result.constructor !== null && result.constructor.name !== 'Object') {\n      return result\n    }\n\n    return mapObjectValues(result, normalizeJsonProtocolValues)\n  }\n\n  return result\n}\n\nfunction isTaggedValue(value: unknown): value is JsonOutputTaggedValue {\n  return value !== null && typeof value == 'object' && typeof value['$type'] === 'string'\n}\n\n/**\n * Normalizes the value inside a tagged value to match the snapshots in tests.\n * Sometimes there are multiple equally valid representations of the same value\n * (e.g. a decimal string may contain an arbitrary number of trailing zeros,\n * datetime strings may specify the UTC offset as either '+00:00' or 'Z', etc).\n * Since these differences have no effect on the actual values received from the\n * Prisma Client once the response is deserialized to JavaScript values, we don't\n * spend extra CPU cycles on normalizing them in the data mapper. Instead, we\n * patch and normalize them here to ensure they are consistent with the snapshots\n * in the query engine tests.\n */\nfunction normalizeTaggedValue({\n  $type,\n  value,\n}: JsonInputTaggedValue | JsonOutputTaggedValue): JsonInputTaggedValue | JsonOutputTaggedValue {\n  switch ($type) {\n    case 'BigInt':\n      return { $type, value: String(value) }\n    case 'Bytes':\n      return { $type, value: Buffer.from(value, 'base64').toString('base64') }\n    case 'DateTime':\n      return { $type, value: new Date(value).toISOString() }\n    case 'Decimal':\n      return { $type, value: String(new Decimal(value)) }\n    case 'Json':\n      return { $type, value: JSON.stringify(JSON.parse(value)) }\n    case 'Raw':\n      return { $type, value }\n    case 'FieldRef':\n      return { $type, value }\n    case 'Enum':\n      return { $type, value }\n    default:\n      assertNever(value, 'Unknown tagged value')\n  }\n}\n\nfunction mapObjectValues<K extends PropertyKey, T, U>(\n  object: Record<K, T>,\n  mapper: (value: T, key: K) => U,\n): Record<K, U> {\n  const result = {} as Record<K, U>\n\n  for (const key of Object.keys(object)) {\n    result[key] = mapper(object[key] as T, key as K)\n  }\n\n  return result\n}\n\nexport function deserializeJsonObject(result: unknown): unknown {\n  if (result === null) {\n    return result\n  }\n\n  if (Array.isArray(result)) {\n    return result.map(deserializeJsonObject)\n  }\n\n  if (typeof result === 'object') {\n    if (isTaggedValue(result)) {\n      return deserializeTaggedValue(result)\n    }\n\n    // avoid mapping class instances\n    if (result.constructor !== null && result.constructor.name !== 'Object') {\n      return result\n    }\n\n    return mapObjectValues(result, deserializeJsonObject)\n  }\n\n  return result\n}\n\nfunction deserializeTaggedValue({ $type, value }: JsonInputTaggedValue | JsonOutputTaggedValue): JsOutputValue {\n  switch ($type) {\n    case 'BigInt':\n      return BigInt(value)\n    case 'Bytes':\n      // copy instead of returning a view into Node's shared Buffer pool\n      return new Uint8Array(Buffer.from(value, 'base64'))\n    case 'DateTime':\n      return new Date(value)\n    case 'Decimal':\n      return new Decimal(value)\n    case 'Json':\n      return JSON.parse(value)\n    case 'Raw':\n      return value as JsOutputValue\n    case 'FieldRef':\n      throw new Error('FieldRef tagged values cannot be deserialized to JavaScript values')\n    case 'Enum':\n      return value\n    default:\n      assertNever(value, 'Unknown tagged value')\n  }\n}\n", "import { Decimal } from '@prisma/client-runtime-utils'\n\nexport type DeepReadonly<T> = T extends undefined | null | boolean | string | number | symbol | Function | Date\n  ? T\n  : T extends Array<infer U>\n    ? ReadonlyArray<DeepReadonly<U>>\n    : unknown extends T\n      ? unknown\n      : { readonly [K in keyof T]: DeepReadonly<T[K]> }\n\nexport type DeepUnreadonly<T> = T extends undefined | null | boolean | string | number | symbol | Function | Date\n  ? T\n  : T extends ReadonlyArray<infer U>\n    ? Array<DeepUnreadonly<U>>\n    : unknown extends T\n      ? unknown\n      : { -readonly [K in keyof T]: DeepUnreadonly<T[K]> }\n\n// Copied over to avoid the heavy dependency on `@prisma/internals` with its\n// transitive dependencies that are not needed for other query plan executor\n// implementations outside of Prisma Client (e.g. test executor for query\n// engine tests and query plan executor for Accelerate) that also depend on\n// `@prisma/client-engine-runtime`.\n/**\n * Cross-realm safe check for Uint8Array. `instanceof Uint8Array` fails when the value\n * was created in a different realm (e.g. jsdom, iframes, vm contexts).\n */\nexport function isUint8Array(value: unknown): value is Uint8Array {\n  return ArrayBuffer.isView(value) && Object.prototype.toString.call(value) === '[object Uint8Array]'\n}\n\n/**\n * Cross-realm safe check for Date. `instanceof Date` fails when the value\n * was created in a different realm (e.g. jsdom, iframes, vm contexts).\n */\nexport function isDate(value: unknown): value is Date {\n  return Object.prototype.toString.call(value) === '[object Date]'\n}\n\nexport function assertNever(_: never, message: string): never {\n  throw new Error(message)\n}\n\n/**\n * Checks if two objects are deeply equal, recursively checking all properties for strict equality.\n */\nexport function isDeepStrictEqual(a: unknown, b: unknown): boolean {\n  return (\n    a === b ||\n    (a !== null &&\n      b !== null &&\n      typeof a === 'object' &&\n      typeof b === 'object' &&\n      Object.keys(a).length === Object.keys(b).length &&\n      Object.keys(a).every((key) => isDeepStrictEqual(a[key], b[key])))\n  )\n}\n\n/**\n * Checks if two objects representing the names and values of key columns match. A match is\n * defined by one of the sets of keys being a subset of the other. This function also\n * converts arguments to the types used by driver adapters if necessary.\n */\nexport function doKeysMatch(lhs: {}, rhs: {}): boolean {\n  const lhsKeys = Object.keys(lhs)\n  const rhsKeys = Object.keys(rhs)\n  const smallerKeyList = lhsKeys.length < rhsKeys.length ? lhsKeys : rhsKeys\n\n  return smallerKeyList.every((key) => {\n    if (typeof lhs[key] === typeof rhs[key] && typeof lhs[key] !== 'object') {\n      // fast path for primitive types\n      return lhs[key] === rhs[key]\n    }\n\n    if (Decimal.isDecimal(lhs[key]) || Decimal.isDecimal(rhs[key])) {\n      const lhsDecimal = asDecimal(lhs[key])\n      const rhsDecimal = asDecimal(rhs[key])\n      return lhsDecimal && rhsDecimal && lhsDecimal.equals(rhsDecimal)\n    } else if (isUint8Array(lhs[key]) || isUint8Array(rhs[key])) {\n      const lhsBuffer = asBuffer(lhs[key])\n      const rhsBuffer = asBuffer(rhs[key])\n      return lhsBuffer && rhsBuffer && lhsBuffer.equals(rhsBuffer)\n    } else if (isDate(lhs[key]) || isDate(rhs[key])) {\n      return asDate(lhs[key])?.getTime() === asDate(rhs[key])?.getTime()\n    } else if (typeof lhs[key] === 'bigint' || typeof rhs[key] === 'bigint') {\n      return asBigInt(lhs[key]) === asBigInt(rhs[key])\n    } else if (typeof lhs[key] === 'number' || typeof rhs[key] === 'number') {\n      return asNumber(lhs[key]) === asNumber(rhs[key])\n    }\n\n    return isDeepStrictEqual(lhs[key], rhs[key])\n  })\n}\n\nfunction asDecimal(value: unknown): Decimal | undefined {\n  if (Decimal.isDecimal(value)) {\n    return value\n  } else if (typeof value === 'number' || typeof value === 'string') {\n    return new Decimal(value)\n  } else {\n    return\n  }\n}\n\nfunction asBuffer(value: unknown): Buffer | undefined {\n  if (Buffer.isBuffer(value)) {\n    return value\n  } else if (isUint8Array(value)) {\n    return Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n  } else if (typeof value === 'string') {\n    return Buffer.from(value, 'base64')\n  } else {\n    return\n  }\n}\n\nfunction asDate(value: unknown): Date | undefined {\n  if (isDate(value)) {\n    return value\n  } else if (typeof value === 'string' || typeof value === 'number') {\n    return new Date(value)\n  } else {\n    return\n  }\n}\n\nfunction asBigInt(value: unknown): bigint | undefined {\n  if (typeof value === 'bigint') {\n    return value\n  } else if (typeof value === 'number' || typeof value === 'string') {\n    return BigInt(value)\n  } else {\n    return\n  }\n}\n\nfunction asNumber(value: unknown): number | undefined {\n  if (typeof value === 'number') {\n    return value\n  } else if (typeof value === 'string') {\n    return Number(value)\n  } else {\n    return\n  }\n}\n\n/**\n * `JSON.stringify` wrapper with custom replacer function that handles nested\n * BigInt and Uint8Array values.\n */\nexport function safeJsonStringify(obj: unknown): string {\n  return JSON.stringify(obj, (_key, val) => {\n    if (typeof val === 'bigint') {\n      return val.toString()\n    } else if (ArrayBuffer.isView(val)) {\n      return Buffer.from(val.buffer, val.byteOffset, val.byteLength).toString('base64')\n    }\n    return val\n  })\n}\n\n// Stays well below the engine's maximum argument count (~65K in V8) so that\n// `push(...)` remains safe even when the call stack is already deep, while a\n// single spread stays the fast path for typical sizes.\n// See https://github.com/prisma/prisma/issues/29746.\nconst MAX_PUSH_SPREAD_ARGS = 8192\n\n/**\n * Appends all elements of `source` to `target` without spreading the whole\n * array as call arguments, which overflows the stack for large arrays.\n */\nexport function appendToArray<T>(target: T[], source: readonly T[]): void {\n  if (source.length <= MAX_PUSH_SPREAD_ARGS) {\n    target.push(...source)\n    return\n  }\n  for (let i = 0; i < source.length; i += MAX_PUSH_SPREAD_ARGS) {\n    target.push(...source.slice(i, i + MAX_PUSH_SPREAD_ARGS))\n  }\n}\n", "import { DriverAdapterError, isDriverAdapterError } from '@prisma/driver-adapter-utils'\n\nimport { assertNever, safeJsonStringify } from './utils'\n\nexport class UserFacingError extends Error {\n  name = 'UserFacingError'\n  code: string\n  meta: Record<string, unknown>\n\n  constructor(message: string, code: string, meta?: Record<string, unknown>) {\n    super(message)\n    this.code = code\n    this.meta = meta ?? {}\n  }\n\n  toQueryResponseErrorObject() {\n    return {\n      error: this.message,\n      user_facing_error: {\n        is_panic: false,\n        message: this.message,\n        meta: this.meta,\n        error_code: this.code,\n      },\n    }\n  }\n}\n\nexport function rethrowAsUserFacing(error: any): never {\n  if (!isDriverAdapterError(error)) {\n    throw error\n  }\n\n  const code = getErrorCode(error)\n  const message = renderErrorMessage(error)\n  if (code !== undefined && message !== undefined) {\n    const meta: Record<string, unknown> = { driverAdapterError: error }\n    if (error.cause.kind === 'UniqueConstraintViolation' && error.cause.table) {\n      meta.table = error.cause.table\n    }\n    throw new UserFacingError(message, code, meta)\n  }\n\n  // No specific mapping exists for this error kind. For database-specific\n  // kinds (`postgres`, `mysql`, `sqlite`, `mssql`) this happens when the\n  // adapter doesn't recognize the underlying database error code. Falling\n  // back to a P2039 user-facing error with the raw database code and\n  // message ensures that:\n  //\n  //   1. Locally, the error surfaces as a `PrismaClientKnownRequestError`\n  //      that users can catch and inspect, instead of an opaque\n  //      `PrismaClientUnknownRequestError`.\n  //   2. The query plan executor returns HTTP 400 with the full error\n  //      details instead of HTTP 500. This matters for Accelerate, which\n  //      strips the response body on 500 responses and would otherwise\n  //      hide the real error from the user.\n  //\n  // These cases are not necessarily bugs \u2014 they routinely occur when the\n  // database schema is out of sync with the Prisma schema (e.g. a migration\n  // hasn't been applied, or the client hasn't been regenerated after a\n  // schema change), so we need to make the underlying database error\n  // visible to the user.\n  //\n  // We use a distinct code (P2039) from the raw-query path (P2010,\n  // \"Raw query failed.\") so that the error message doesn't claim a\n  // non-raw query is a raw one.\n  if (isGenericDatabaseErrorKind(error.cause.kind)) {\n    throw buildUnmappedDatabaseUserFacingError(error)\n  }\n\n  throw error\n}\n\nexport function rethrowAsUserFacingRawError(error: any): never {\n  if (!isDriverAdapterError(error)) {\n    throw error\n  }\n\n  throw buildRawQueryUserFacingError(error)\n}\n\nfunction buildRawQueryUserFacingError(error: DriverAdapterError): UserFacingError {\n  const code = error.cause.originalCode ?? 'N/A'\n  const message = pickErrorMessage(error)\n  return new UserFacingError(`Raw query failed. Code: \\`${code}\\`. Message: \\`${message}\\``, 'P2010', {\n    driverAdapterError: error,\n  })\n}\n\nfunction buildUnmappedDatabaseUserFacingError(error: DriverAdapterError): UserFacingError {\n  const code = error.cause.originalCode ?? 'N/A'\n  const message = pickErrorMessage(error)\n  return new UserFacingError(`Database error. Code: \\`${code}\\`. Message: \\`${message}\\``, 'P2039', {\n    driverAdapterError: error,\n  })\n}\n\n/**\n * Picks the most informative human-readable message available for a driver\n * adapter error, falling back through:\n *   1. `originalMessage` set by the adapter (always present for known DB\n *      kinds; the raw error string from the underlying driver),\n *   2. the per-kind message rendered by `renderErrorMessage()`,\n *   3. the `DriverAdapterError`'s own `message` (which is either the\n *      cause's `message` field or the cause's `kind` name).\n *\n * Note that no member of the `MappedError` union is required to carry a\n * `message` field, so all three steps may be missing data; the final\n * fallback to `'N/A'` exists so we never interpolate `undefined` into a\n * user-facing message.\n */\nfunction pickErrorMessage(error: DriverAdapterError): string {\n  return error.cause.originalMessage ?? renderErrorMessage(error) ?? error.message ?? 'N/A'\n}\n\nfunction isGenericDatabaseErrorKind(kind: DriverAdapterError['cause']['kind']): boolean {\n  switch (kind) {\n    case 'postgres':\n    case 'mysql':\n    case 'sqlite':\n    case 'mssql':\n      return true\n    default:\n      return false\n  }\n}\n\nfunction getErrorCode(err: DriverAdapterError): string | undefined {\n  switch (err.cause.kind) {\n    case 'AuthenticationFailed':\n      return 'P1000'\n    case 'DatabaseNotReachable':\n      return 'P1001'\n    case 'DatabaseDoesNotExist':\n      return 'P1003'\n    case 'SocketTimeout':\n      return 'P1008'\n    case 'DatabaseAlreadyExists':\n      return 'P1009'\n    case 'DatabaseAccessDenied':\n      return 'P1010'\n    case 'TlsConnectionError':\n      return 'P1011'\n    case 'ConnectionClosed':\n      return 'P1017'\n    case 'TransactionAlreadyClosed':\n      return 'P1018'\n    case 'LengthMismatch':\n      return 'P2000'\n    case 'UniqueConstraintViolation':\n      return 'P2002'\n    case 'ForeignKeyConstraintViolation':\n    case 'RestrictViolation':\n      return 'P2003'\n    case 'InvalidInputValue':\n      return 'P2007'\n    case 'UnsupportedNativeDataType':\n      return 'P2010'\n    case 'NullConstraintViolation':\n      return 'P2011'\n    case 'ValueOutOfRange':\n      return 'P2020'\n    case 'TableDoesNotExist':\n      return 'P2021'\n    case 'ColumnNotFound':\n      return 'P2022'\n    case 'InvalidIsolationLevel':\n    case 'InconsistentColumnData':\n      return 'P2023'\n    case 'MissingFullTextSearchIndex':\n      return 'P2030'\n    case 'TransactionWriteConflict':\n      return 'P2034'\n    case 'GenericJs':\n      return 'P2036'\n    case 'TooManyConnections':\n      return 'P2037'\n    case 'postgres':\n    case 'sqlite':\n    case 'mysql':\n    case 'mssql':\n      return\n    default:\n      assertNever(err.cause, `Unknown error: ${safeJsonStringify(err.cause)}`)\n  }\n}\n\nfunction renderErrorMessage(err: DriverAdapterError): string | undefined {\n  switch (err.cause.kind) {\n    case 'AuthenticationFailed': {\n      const user = err.cause.user ?? '(not available)'\n      return `Authentication failed against the database server, the provided database credentials for \\`${user}\\` are not valid`\n    }\n    case 'DatabaseNotReachable': {\n      const address = err.cause.host && err.cause.port ? `${err.cause.host}:${err.cause.port}` : err.cause.host\n      return `Can't reach database server${address ? ` at ${address}` : ''}`\n    }\n    case 'DatabaseDoesNotExist': {\n      const db = err.cause.db ?? '(not available)'\n      return `Database \\`${db}\\` does not exist on the database server`\n    }\n    case 'SocketTimeout':\n      return `Operation has timed out`\n    case 'DatabaseAlreadyExists': {\n      const db = err.cause.db ?? '(not available)'\n      return `Database \\`${db}\\` already exists on the database server`\n    }\n    case 'DatabaseAccessDenied': {\n      const db = err.cause.db ?? '(not available)'\n      return `User was denied access on the database \\`${db}\\``\n    }\n    case 'TlsConnectionError': {\n      return `Error opening a TLS connection: ${err.cause.reason}`\n    }\n    case 'ConnectionClosed': {\n      return 'Server has closed the connection.'\n    }\n    case 'TransactionAlreadyClosed':\n      return err.cause.cause\n    case 'LengthMismatch': {\n      const column = err.cause.column ?? '(not available)'\n      return `The provided value for the column is too long for the column's type. Column: ${column}`\n    }\n    case 'UniqueConstraintViolation':\n      return `Unique constraint failed on the ${renderConstraint(err.cause.constraint)}`\n    case 'ForeignKeyConstraintViolation':\n    case 'RestrictViolation':\n      return `Foreign key constraint violated on the ${renderConstraint(err.cause.constraint)}`\n    case 'UnsupportedNativeDataType':\n      return `Failed to deserialize column of type '${err.cause.type}'. If you're using $queryRaw and this column is explicitly marked as \\`Unsupported\\` in your Prisma schema, try casting this column to any supported Prisma type such as \\`String\\`.`\n    case 'NullConstraintViolation':\n      return `Null constraint violation on the ${renderConstraint(err.cause.constraint)}`\n    case 'ValueOutOfRange':\n      return `Value out of range for the type: ${err.cause.cause}`\n    case 'TableDoesNotExist': {\n      const table = err.cause.table ?? '(not available)'\n      return `The table \\`${table}\\` does not exist in the current database.`\n    }\n    case 'ColumnNotFound': {\n      const column = err.cause.column ?? '(not available)'\n      return `The column \\`${column}\\` does not exist in the current database.`\n    }\n    case 'InvalidIsolationLevel':\n      return `Error in connector: Conversion error: ${err.cause.level}`\n    case 'InconsistentColumnData':\n      return `Inconsistent column data: ${err.cause.cause}`\n    case 'MissingFullTextSearchIndex':\n      return 'Cannot find a fulltext index to use for the native search, try adding a @@fulltext([Fields...]) to your schema'\n    case 'TransactionWriteConflict':\n      return `Transaction failed due to a write conflict or a deadlock. Please retry your transaction`\n    case 'GenericJs':\n      return `Error in external connector (id ${err.cause.id})`\n    case 'TooManyConnections':\n      return `Too many database connections opened: ${err.cause.cause}`\n    case 'InvalidInputValue':\n      return `Invalid input value: ${err.cause.message}`\n    case 'sqlite':\n    case 'postgres':\n    case 'mysql':\n    case 'mssql':\n      return\n    default:\n      assertNever(err.cause, `Unknown error: ${safeJsonStringify(err.cause)}`)\n  }\n}\n\nfunction renderConstraint(constraint?: { fields: string[] } | { index: string } | { foreignKey: {} }): string {\n  if (constraint && 'fields' in constraint) {\n    return `fields: (${constraint.fields.map((field) => `\\`${field}\\``).join(', ')})`\n  } else if (constraint && 'index' in constraint) {\n    return `constraint: \\`${constraint.index}\\``\n  } else if (constraint && 'foreignKey' in constraint) {\n    return `foreign key`\n  }\n  return '(not available)'\n}\n", "export { bindAdapter, bindMigrationAwareSqlAdapterFactory, bindSqlAdapterFactory } from './binder'\nexport { ColumnTypeEnum } from './const'\nexport { Debug } from './debug'\nexport { DriverAdapterError, isDriverAdapterError } from './error'\nexport * from './mock'\nexport { err, ok, type Result } from './result'\nexport type {\n  ArgScalarType,\n  ArgType,\n  Arity,\n  ColumnType,\n  ConnectionInfo,\n  DriverAdapterFactory,\n  Error,\n  ErrorCapturingSqlDriverAdapter,\n  ErrorCapturingSqlDriverAdapterFactory,\n  ErrorCapturingSqlMigrationAwareDriverAdapterFactory,\n  ErrorCapturingSqlQueryable,\n  ErrorCapturingTransaction,\n  ErrorRecord,\n  ErrorRegistry,\n  IsolationLevel,\n  MappedError,\n  OfficialDriverAdapterName,\n  Provider,\n  Queryable,\n  ResultValue,\n  SqlDriverAdapter,\n  SqlDriverAdapterFactory,\n  SqlMigrationAwareDriverAdapterFactory,\n  SqlQuery,\n  SqlQueryable,\n  SqlResultSet,\n  Transaction,\n  TransactionOptions,\n} from './types'\n", "import { Error as ErrorObject } from './types'\n\nexport class DriverAdapterError extends Error {\n  name = 'DriverAdapterError'\n  cause: ErrorObject\n\n  constructor(payload: ErrorObject) {\n    super(typeof payload['message'] === 'string' ? payload['message'] : payload.kind)\n    this.cause = payload\n  }\n}\n\nexport function isDriverAdapterError(error: any): error is DriverAdapterError {\n  return error['name'] === 'DriverAdapterError' && typeof error['cause'] === 'object'\n}\n", "// Same order as in rust driver-adapters' `ColumnType`.\n// Note: exporting const enums causes lots of problems with bundlers, so we emulate\n// them via regular dictionaries.\n// See: https://hackmd.io/@dzearing/Sk3xV0cLs\nexport const ColumnTypeEnum = {\n  // Scalars\n  Int32: 0,\n  Int64: 1,\n  Float: 2,\n  Double: 3,\n  Numeric: 4,\n  Boolean: 5,\n  Character: 6,\n  Text: 7,\n  Date: 8,\n  Time: 9,\n  DateTime: 10,\n  Json: 11,\n  Enum: 12,\n  Bytes: 13,\n  Set: 14,\n  Uuid: 15,\n\n  // Arrays\n  Int32Array: 64,\n  Int64Array: 65,\n  FloatArray: 66,\n  DoubleArray: 67,\n  NumericArray: 68,\n  BooleanArray: 69,\n  CharacterArray: 70,\n  TextArray: 71,\n  DateArray: 72,\n  TimeArray: 73,\n  DateTimeArray: 74,\n  JsonArray: 75,\n  EnumArray: 76,\n  BytesArray: 77,\n  UuidArray: 78,\n\n  // Custom\n  UnknownNumber: 128,\n} as const\n", "import { Decimal } from '@prisma/client-runtime-utils'\n\nimport { FieldScalarType, FieldType, ResultNode } from '../query-plan'\nimport { UserFacingError } from '../user-facing-error'\nimport { assertNever, isDate, isUint8Array, safeJsonStringify } from '../utils'\nimport { PrismaObject, Value } from './scope'\n\nexport class DataMapperError extends UserFacingError {\n  name = 'DataMapperError'\n\n  constructor(message: string, options?: { cause?: unknown }) {\n    super(message, 'P2023', options)\n  }\n}\n\n// Optimization: Cache field entries to avoid repeated Object.entries() allocations per row\nconst fieldEntriesCache = new WeakMap<Record<string, ResultNode>, [string, ResultNode][]>()\n\nfunction getFieldEntries(fields: Record<string, ResultNode>): [string, ResultNode][] {\n  let entries = fieldEntriesCache.get(fields)\n  if (!entries) {\n    entries = Object.entries(fields)\n    fieldEntriesCache.set(fields, entries)\n  }\n  return entries\n}\n\nexport function applyDataMap(data: Value, structure: ResultNode, enums: Record<string, Record<string, string>>): Value {\n  switch (structure.type) {\n    case 'affectedRows':\n      if (typeof data !== 'number') {\n        throw new DataMapperError(`Expected an affected rows count, got: ${typeof data} (${data})`)\n      }\n      return { count: data }\n\n    case 'object':\n      return mapArrayOrObject(data, structure.fields, enums, structure.skipNulls)\n\n    case 'field':\n      return mapValue(data, '<result>', structure.fieldType, enums)\n\n    default:\n      assertNever(structure, `Invalid data mapping type: '${(structure as ResultNode).type}'`)\n  }\n}\n\nfunction mapArrayOrObject(\n  data: Value,\n  fields: Record<string, ResultNode>,\n  enums: Record<string, Record<string, string>>,\n  skipNulls?: boolean,\n): PrismaObject | PrismaObject[] | null {\n  if (data === null) return null\n\n  if (Array.isArray(data)) {\n    let rows = data as PrismaObject[]\n    if (skipNulls) {\n      rows = rows.filter((row) => row !== null)\n    }\n    return rows.map((row) => mapObject(row, fields, enums))\n  }\n\n  if (typeof data === 'object') {\n    const row = data as PrismaObject\n    return mapObject(row, fields, enums)\n  }\n\n  if (typeof data === 'string') {\n    let decodedData: Value\n    try {\n      decodedData = JSON.parse(data)\n    } catch (error) {\n      throw new DataMapperError(`Expected an array or object, got a string that is not valid JSON`, {\n        cause: error,\n      })\n    }\n    return mapArrayOrObject(decodedData, fields, enums, skipNulls)\n  }\n\n  throw new DataMapperError(`Expected an array or an object, got: ${typeof data}`)\n}\n\n// Recursive\nfunction mapObject(\n  data: PrismaObject,\n  fields: Record<string, ResultNode>,\n  enums: Record<string, Record<string, string>>,\n): PrismaObject {\n  if (typeof data !== 'object') {\n    throw new DataMapperError(`Expected an object, but got '${typeof data}'`)\n  }\n\n  const result = {}\n  for (const [name, node] of getFieldEntries(fields)) {\n    switch (node.type) {\n      case 'affectedRows': {\n        throw new DataMapperError(`Unexpected 'AffectedRows' node in data mapping for field '${name}'`)\n      }\n\n      case 'object': {\n        const { serializedName, fields: nodeFields, skipNulls } = node\n        if (serializedName !== null && !Object.hasOwn(data, serializedName)) {\n          throw new DataMapperError(\n            `Missing data field (Object): '${name}'; ` + `node: ${JSON.stringify(node)}; data: ${JSON.stringify(data)}`,\n          )\n        }\n\n        const target = serializedName !== null ? data[serializedName] : data\n        result[name] = mapArrayOrObject(target, nodeFields, enums, skipNulls)\n        break\n      }\n\n      case 'field':\n        {\n          const dbName = node.dbName\n          if (Object.hasOwn(data, dbName)) {\n            result[name] = mapField(data[dbName], dbName, node.fieldType, enums)\n          } else {\n            throw new DataMapperError(\n              `Missing data field (Value): '${dbName}'; ` +\n                `node: ${JSON.stringify(node)}; data: ${JSON.stringify(data)}`,\n            )\n          }\n        }\n        break\n\n      default:\n        assertNever(node, `DataMapper: Invalid data mapping node type: '${(node as ResultNode).type}'`)\n    }\n  }\n  return result\n}\n\nfunction mapField(\n  value: unknown,\n  columnName: string,\n  fieldType: FieldType,\n  enums: Record<string, Record<string, string>>,\n): unknown {\n  if (value === null) {\n    return fieldType.arity === 'list' ? [] : null\n  }\n\n  if (fieldType.arity === 'list') {\n    const values = value as unknown[]\n    return values.map((v, i) => mapValue(v, `${columnName}[${i}]`, fieldType, enums))\n  }\n\n  return mapValue(value, columnName, fieldType, enums)\n}\n\nfunction mapValue(\n  value: unknown,\n  columnName: string,\n  scalarType: FieldScalarType,\n  enums: Record<string, Record<string, string>>,\n): unknown {\n  switch (scalarType.type) {\n    case 'unsupported':\n      return value\n\n    case 'string': {\n      if (typeof value !== 'string') {\n        throw new DataMapperError(`Expected a string in column '${columnName}', got ${typeof value}: ${value}`)\n      }\n      return value\n    }\n\n    case 'int': {\n      switch (typeof value) {\n        case 'number': {\n          return Math.trunc(value)\n        }\n\n        case 'string': {\n          const numberValue = Math.trunc(Number(value))\n          if (Number.isNaN(numberValue) || !Number.isFinite(numberValue)) {\n            throw new DataMapperError(`Expected an integer in column '${columnName}', got string: ${value}`)\n          }\n          if (!Number.isSafeInteger(numberValue)) {\n            throw new DataMapperError(\n              `Integer value in column '${columnName}' is too large to represent as a JavaScript number without loss of precision, got: ${value}. Consider using BigInt type.`,\n            )\n          }\n          return numberValue\n        }\n\n        default:\n          throw new DataMapperError(`Expected an integer in column '${columnName}', got ${typeof value}: ${value}`)\n      }\n    }\n\n    case 'bigint': {\n      if (typeof value !== 'number' && typeof value !== 'string') {\n        throw new DataMapperError(`Expected a bigint in column '${columnName}', got ${typeof value}: ${value}`)\n      }\n      return { $type: 'BigInt', value }\n    }\n\n    case 'float': {\n      if (typeof value === 'number') return value\n      if (typeof value === 'string') {\n        const parsedValue = Number(value)\n        if (Number.isNaN(parsedValue) && !/^[-+]?nan$/.test(value.toLowerCase())) {\n          throw new DataMapperError(`Expected a float in column '${columnName}', got string: ${value}`)\n        }\n        return parsedValue\n      }\n      throw new DataMapperError(`Expected a float in column '${columnName}', got ${typeof value}: ${value}`)\n    }\n\n    case 'boolean': {\n      if (typeof value === 'boolean') return value\n      if (typeof value === 'number') return value === 1\n      if (typeof value === 'string') {\n        if (value === 'true' || value === 'TRUE' || value === '1') {\n          return true\n        } else if (value === 'false' || value === 'FALSE' || value === '0') {\n          return false\n        } else {\n          throw new DataMapperError(`Expected a boolean in column '${columnName}', got ${typeof value}: ${value}`)\n        }\n      }\n      if (Array.isArray(value) || isUint8Array(value)) {\n        for (const byte of value) {\n          if (byte !== 0) return true\n        }\n        return false\n      }\n      throw new DataMapperError(`Expected a boolean in column '${columnName}', got ${typeof value}: ${value}`)\n    }\n\n    case 'decimal':\n      if (typeof value !== 'number' && typeof value !== 'string' && !Decimal.isDecimal(value)) {\n        throw new DataMapperError(`Expected a decimal in column '${columnName}', got ${typeof value}: ${value}`)\n      }\n      return { $type: 'Decimal', value }\n\n    case 'datetime': {\n      if (typeof value === 'string') {\n        return { $type: 'DateTime', value: normalizeDateTime(value) }\n      }\n      if (typeof value === 'number' || isDate(value)) {\n        return { $type: 'DateTime', value }\n      }\n      throw new DataMapperError(`Expected a date in column '${columnName}', got ${typeof value}: ${value}`)\n    }\n\n    case 'object': {\n      return { $type: 'Json', value: safeJsonStringify(value) }\n    }\n\n    case 'json': {\n      // The value received here should normally be a string, but we cannot guarantee that,\n      // because of SQLite databases like D1, which can return JSON scalars directly. We therefore\n      // convert the value we receive to a string.\n      return { $type: 'Json', value: `${value}` }\n    }\n\n    case 'bytes': {\n      switch (scalarType.encoding) {\n        case 'base64':\n          if (typeof value !== 'string') {\n            throw new DataMapperError(\n              `Expected a base64-encoded byte array in column '${columnName}', got ${typeof value}: ${value}`,\n            )\n          }\n          return { $type: 'Bytes', value }\n\n        case 'hex':\n          if (typeof value !== 'string' || !value.startsWith('\\\\x')) {\n            throw new DataMapperError(\n              `Expected a hex-encoded byte array in column '${columnName}', got ${typeof value}: ${value}`,\n            )\n          }\n          return { $type: 'Bytes', value: Buffer.from(value.slice(2), 'hex').toString('base64') }\n\n        case 'array':\n          if (Array.isArray(value)) {\n            return { $type: 'Bytes', value: Buffer.from(value).toString('base64') }\n          }\n          if (isUint8Array(value)) {\n            return { $type: 'Bytes', value: Buffer.from(value).toString('base64') }\n          }\n          throw new DataMapperError(`Expected a byte array in column '${columnName}', got ${typeof value}: ${value}`)\n\n        default:\n          assertNever(scalarType.encoding, `DataMapper: Unknown bytes encoding: ${scalarType.encoding}`)\n      }\n      break\n    }\n\n    case 'enum': {\n      const enumDef = enums[scalarType.name]\n      if (enumDef === undefined) {\n        throw new DataMapperError(`Unknown enum '${scalarType.name}'`)\n      }\n      const enumValue = enumDef[`${value}`]\n      if (enumValue === undefined) {\n        throw new DataMapperError(`Value '${value}' not found in enum '${scalarType.name}'`)\n      }\n      return enumValue\n    }\n\n    default:\n      assertNever(scalarType, `DataMapper: Unknown result type: ${scalarType['type']}`)\n  }\n}\n\n/**\n * A regular expression that matches a time string with an optional timezone.\n * It matches formats like:\n * - `12:34:56`\n * - `12:34:56.789`\n * - `12:34:56Z`\n * - `12:34:56+02`\n * - `12:34:56-02:30`\n */\nconst TIME_TZ_PATTERN = /\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(Z|[+-]\\d{2}(:?\\d{2})?)?$/\n\n/**\n * Normalizes date time strings received from driver adapters. The returned string is always a\n * valid input for the Javascript `Date` constructor. This function will add a UTC timezone suffix\n * if there's no timezone specified, to prevent it from being interpreted as local time.\n */\nfunction normalizeDateTime(dt: string): string {\n  const timeTzMatches = TIME_TZ_PATTERN.exec(dt)\n  if (timeTzMatches === null) {\n    // We found no time part, so we return it as a plain zulu date,\n    // e.g. '2023-10-01T00:00Z'.\n    // We append the time because the JS Date constructor can't parse\n    // pre-1000 dates with a timezone, for example '0032-01-01Z' parses\n    // as '2032-01-01T00:00:00.000Z'.\n    return `${dt}T00:00:00Z`\n  }\n\n  let dtWithTz = dt\n  const [timeTz, tz, tzMinuteOffset] = timeTzMatches\n  if (tz !== undefined && tz !== 'Z' && tzMinuteOffset === undefined) {\n    // If the timezone is specified as +HH or -HH (without minutes),\n    // we need to suffix it with ':00' to make it a valid Date input.\n    dtWithTz = `${dt}:00`\n  } else if (tz === undefined) {\n    // If the timezone is not specified at all, we suffix it with 'Z'.\n    dtWithTz = `${dt}Z`\n  }\n\n  if (timeTz.length === dt.length) {\n    // If the entire datetime was just the time, we prepend the unix epoch date.\n    return `1970-01-01T${dtWithTz}`\n  }\n\n  const timeSeparatorIndex = timeTzMatches.index - 1\n  // If the time part is preceded by a space, we replace it with 'T'.\n  if (dtWithTz[timeSeparatorIndex] === ' ') {\n    dtWithTz = `${dtWithTz.slice(0, timeSeparatorIndex)}T${dtWithTz.slice(timeSeparatorIndex + 1)}`\n  }\n\n  return dtWithTz\n}\n", "import { Debug } from '@prisma/debug'\nimport { ConnectionInfo, SqlQuery, SqlQueryable, SqlResultSet } from '@prisma/driver-adapter-utils'\nimport type { SqlCommenterPlugin, SqlCommenterQueryInfo } from '@prisma/sqlcommenter'\nimport { klona } from 'klona'\n\nimport { QueryEvent } from '../events'\nimport {\n  FieldInitializer,\n  FieldOperation,\n  ImpureQueryPlanNode,\n  InMemoryOps,\n  JoinExpression,\n  PrismaValue,\n  PureQueryPlanNode,\n  QueryPlanNode,\n} from '../query-plan'\nimport { type SchemaProvider } from '../schema'\nimport { appendSqlComment, buildSqlComment } from '../sql-commenter'\nimport { type TracingHelper, withQuerySpanAndEvent } from '../tracing'\nimport { type TransactionManager } from '../transaction-manager/transaction-manager'\nimport { rethrowAsUserFacing, rethrowAsUserFacingRawError } from '../user-facing-error'\nimport { appendToArray, assertNever, DeepReadonly, DeepUnreadonly } from '../utils'\nimport { applyDataMap } from './data-mapper'\nimport { GeneratorRegistry, GeneratorRegistrySnapshot } from './generators'\nimport { getRecordKey, processRecords } from './in-memory-processing'\nimport { evaluateArg, renderQuery } from './render-query'\nimport { PrismaObject, ScopeBindings, Value } from './scope'\nimport { serializeRawSql, serializeSql } from './serialize-sql'\nimport { doesSatisfyRule, performValidation } from './validation'\n\nconst debug = Debug('prisma:client:queryInterpreter')\n\nexport type QueryInterpreterTransactionManager = { enabled: true; manager: TransactionManager } | { enabled: false }\n\nexport type QueryInterpreterOptions = {\n  onQuery?: (event: QueryEvent) => void\n  tracingHelper: TracingHelper\n  serializer: (results: SqlResultSet) => Value\n  rawSerializer?: (results: SqlResultSet) => Value\n  provider?: SchemaProvider\n  connectionInfo?: ConnectionInfo\n}\n\nexport type QueryRuntimeOptions = {\n  queryable: SqlQueryable\n  transactionManager: QueryInterpreterTransactionManager\n  scope: Record<string, unknown>\n  sqlCommenter?: QueryInterpreterSqlCommenter\n}\n\ntype QueryRuntimeContext = {\n  queryable: SqlQueryable\n  transactionManager: QueryInterpreterTransactionManager\n  scope: Record<string, unknown>\n  generators: GeneratorRegistrySnapshot\n  sqlCommenter?: QueryInterpreterSqlCommenter\n}\n\nexport type QueryInterpreterSqlCommenter = {\n  plugins: SqlCommenterPlugin[]\n  queryInfo: SqlCommenterQueryInfo\n}\n\nexport class QueryInterpreter {\n  readonly #onQuery?: (event: QueryEvent) => void\n  readonly #generators: GeneratorRegistry = new GeneratorRegistry()\n  readonly #tracingHelper: TracingHelper\n  readonly #serializer: (results: SqlResultSet) => Value\n  readonly #rawSerializer: (results: SqlResultSet) => Value\n  readonly #provider?: SchemaProvider\n  readonly #connectionInfo?: ConnectionInfo\n\n  constructor({\n    onQuery,\n    tracingHelper,\n    serializer,\n    rawSerializer,\n    provider,\n    connectionInfo,\n  }: QueryInterpreterOptions) {\n    this.#onQuery = onQuery\n    this.#tracingHelper = tracingHelper\n    this.#serializer = serializer\n    this.#rawSerializer = rawSerializer ?? serializer\n    this.#provider = provider\n    this.#connectionInfo = connectionInfo\n  }\n\n  static forSql(options: {\n    onQuery?: (event: QueryEvent) => void\n    tracingHelper: TracingHelper\n    provider?: SchemaProvider\n    connectionInfo?: ConnectionInfo\n  }): QueryInterpreter {\n    return new QueryInterpreter({\n      onQuery: options.onQuery,\n      tracingHelper: options.tracingHelper,\n      serializer: serializeSql,\n      rawSerializer: serializeRawSql,\n      provider: options.provider,\n      connectionInfo: options.connectionInfo,\n    })\n  }\n\n  async run(queryPlan: DeepReadonly<QueryPlanNode>, options: QueryRuntimeOptions): Promise<unknown> {\n    const generators = this.#generators.snapshot()\n    const context: QueryRuntimeContext = { ...options, generators }\n\n    const purified = purifyQueryPlan(queryPlan, (node) => this.interpretNode(node, context))?.catch((e) =>\n      rethrowAsUserFacing(e),\n    )\n\n    if (purified) {\n      try {\n        return this.#interpretPureNode(await purified, context.scope, generators).value\n      } catch (e) {\n        rethrowAsUserFacing(e)\n      }\n    }\n\n    const { value } = await this.interpretNode(queryPlan, context).catch((e) => rethrowAsUserFacing(e))\n\n    return value\n  }\n\n  private async interpretNode(\n    node: DeepReadonly<QueryPlanNode>,\n    context: QueryRuntimeContext,\n  ): Promise<IntermediateValue> {\n    switch (node.type) {\n      case 'value': {\n        return {\n          value: evaluateArg(node.args, context.scope, context.generators),\n          lastInsertId: node.lastInsertId,\n        }\n      }\n\n      case 'seq': {\n        let result: IntermediateValue | undefined\n        for (const arg of node.args) {\n          result = await this.interpretNode(arg, context)\n        }\n        return result ?? { value: undefined }\n      }\n\n      case 'let': {\n        const nestedScope: ScopeBindings = Object.create(context.scope)\n        for (const binding of node.args.bindings) {\n          const { value } = await this.interpretNode(binding.expr, { ...context, scope: nestedScope })\n          nestedScope[binding.name] = value\n        }\n        return this.interpretNode(node.args.expr, { ...context, scope: nestedScope })\n      }\n\n      case 'concat': {\n        const parts = await Promise.all(\n          node.args.map((arg) => this.interpretNode(arg, context).then((res) => res.value)),\n        )\n        return {\n          value: parts.length > 0 ? parts.reduce<Value[]>((acc, part) => acc.concat(asList(part)), []) : [],\n        }\n      }\n\n      case 'sum': {\n        const parts = await Promise.all(\n          node.args.map((arg) => this.interpretNode(arg, context).then((res) => res.value)),\n        )\n        return {\n          value: parts.length > 0 ? parts.reduce((acc, part) => asNumber(acc) + asNumber(part)) : 0,\n        }\n      }\n\n      case 'execute': {\n        const queries = renderQuery(node.args, context.scope, context.generators, this.#maxChunkSize())\n\n        return this.#withChunkTransaction(queries.length, context, async (context) => {\n          let sum = 0\n          for (const query of queries) {\n            const commentedQuery = applyComments(query, context.sqlCommenter)\n            sum += await this.#withQuerySpanAndEvent(commentedQuery, context.queryable, () =>\n              context.queryable\n                .executeRaw(cloneObject(commentedQuery))\n                .catch((err) =>\n                  node.args.type === 'rawSql' ? rethrowAsUserFacingRawError(err) : rethrowAsUserFacing(err),\n                ),\n            )\n          }\n\n          return { value: sum }\n        })\n      }\n\n      case 'query': {\n        const queries = renderQuery(node.args, context.scope, context.generators, this.#maxChunkSize())\n\n        return this.#withChunkTransaction(queries.length, context, async (context) => {\n          let results: SqlResultSet | undefined\n          for (const query of queries) {\n            const commentedQuery = applyComments(query, context.sqlCommenter)\n            const result = await this.#withQuerySpanAndEvent(commentedQuery, context.queryable, () =>\n              context.queryable\n                .queryRaw(cloneObject(commentedQuery))\n                .catch((err) =>\n                  node.args.type === 'rawSql' ? rethrowAsUserFacingRawError(err) : rethrowAsUserFacing(err),\n                ),\n            )\n            if (results === undefined) {\n              results = result\n            } else {\n              appendToArray(results.rows, result.rows)\n              results.lastInsertId = result.lastInsertId\n            }\n          }\n\n          return {\n            value: node.args.type === 'rawSql' ? this.#rawSerializer(results!) : this.#serializer(results!),\n            lastInsertId: results?.lastInsertId,\n          }\n        })\n      }\n\n      case 'reverse': {\n        const { value, lastInsertId } = await this.interpretNode(node.args, context)\n        return { value: Array.isArray(value) ? value.reverse() : value, lastInsertId }\n      }\n\n      case 'unique': {\n        const { value, lastInsertId } = await this.interpretNode(node.args, context)\n        if (!Array.isArray(value)) {\n          return { value, lastInsertId }\n        }\n        if (value.length > 1) {\n          throw new Error(`Expected zero or one element, got ${value.length}`)\n        }\n        return { value: value[0] ?? null, lastInsertId }\n      }\n\n      case 'required': {\n        const { value, lastInsertId } = await this.interpretNode(node.args, context)\n        if (isEmpty(value)) {\n          throw new Error('Required value is empty')\n        }\n        return { value, lastInsertId }\n      }\n\n      case 'mapField': {\n        const { value, lastInsertId } = await this.interpretNode(node.args.records, context)\n        return { value: mapField(value, node.args.field), lastInsertId }\n      }\n\n      case 'join': {\n        const { value: parent, lastInsertId } = await this.interpretNode(node.args.parent, context)\n\n        if (parent === null) {\n          return { value: null, lastInsertId }\n        }\n\n        const children = await Promise.all(\n          node.args.children.map(async (joinExpr) => ({\n            joinExpr,\n            childRecords: (await this.interpretNode(joinExpr.child, context)).value,\n          })),\n        )\n\n        return { value: attachChildrenToParents(parent, children, node.args.canAssumeStrictEquality), lastInsertId }\n      }\n\n      case 'transaction': {\n        return this.#withInternalTransaction(context, (context) => this.interpretNode(node.args, context))\n      }\n\n      case 'dataMap': {\n        const { value, lastInsertId } = await this.interpretNode(node.args.expr, context)\n        return { value: applyDataMap(value, node.args.structure, node.args.enums), lastInsertId }\n      }\n\n      case 'validate': {\n        const { value, lastInsertId } = await this.interpretNode(node.args.expr, context)\n        performValidation(value, node.args.rules, node.args)\n\n        return { value, lastInsertId }\n      }\n\n      case 'if': {\n        const { value } = await this.interpretNode(node.args.value, context)\n        if (doesSatisfyRule(value, node.args.rule)) {\n          return await this.interpretNode(node.args.then, context)\n        } else {\n          return await this.interpretNode(node.args.else, context)\n        }\n      }\n\n      case 'diff': {\n        const { value: from } = await this.interpretNode(node.args.from, context)\n        const { value: to } = await this.interpretNode(node.args.to, context)\n\n        const keyGetter = (item: Value) => (item !== null ? getRecordKey(asRecord(item), node.args.fields) : null)\n\n        const toSet = new Set(asList(to).map(keyGetter))\n        return { value: asList(from).filter((item) => !toSet.has(keyGetter(item))) }\n      }\n\n      case 'process': {\n        const { value, lastInsertId } = await this.interpretNode(node.args.expr, context)\n        const ops = cloneObject(node.args.operations)\n        evaluateProcessingParameters(ops, context.scope, context.generators)\n        return { value: processRecords(value, ops), lastInsertId }\n      }\n\n      case 'initializeRecord': {\n        const { lastInsertId } = await this.interpretNode(node.args.expr, context)\n\n        const record = {}\n        for (const [key, initializer] of Object.entries(node.args.fields)) {\n          record[key] = evalFieldInitializer(initializer, lastInsertId, context.scope, context.generators)\n        }\n        return { value: record, lastInsertId }\n      }\n\n      case 'mapRecord': {\n        const { value, lastInsertId } = await this.interpretNode(node.args.expr, context)\n\n        const record = value === null ? {} : asRecord(value)\n        for (const [key, entry] of Object.entries(node.args.fields)) {\n          record[key] = evalFieldOperation(entry, record[key], context.scope, context.generators)\n        }\n        return { value: record, lastInsertId }\n      }\n\n      default:\n        return this.#interpretPureNode(node, context.scope, context.generators)\n    }\n  }\n\n  #interpretPureNode(\n    node: DeepReadonly<PureQueryPlanNode>,\n    scope: ScopeBindings,\n    generators: GeneratorRegistrySnapshot,\n  ): IntermediateValue {\n    switch (node.type) {\n      case 'value': {\n        return { value: evaluateArg(node.args, scope, generators), lastInsertId: node.lastInsertId }\n      }\n\n      case 'seq': {\n        let result: IntermediateValue | undefined\n        for (const arg of node.args) {\n          result = this.#interpretPureNode(arg, scope, generators)\n        }\n        return result ?? { value: undefined }\n      }\n\n      case 'get': {\n        return { value: scope[node.args.name] }\n      }\n\n      case 'let': {\n        const nestedScope: ScopeBindings = Object.create(scope)\n        for (const binding of node.args.bindings) {\n          const { value } = this.#interpretPureNode(binding.expr, nestedScope, generators)\n          nestedScope[binding.name] = value\n        }\n        return this.#interpretPureNode(node.args.expr, nestedScope, generators)\n      }\n\n      case 'getFirstNonEmpty': {\n        for (const name of node.args.names) {\n          const value = scope[name]\n          if (!isEmpty(value)) {\n            return { value }\n          }\n        }\n        return { value: [] }\n      }\n\n      case 'concat': {\n        const parts = node.args.map((arg) => this.#interpretPureNode(arg, scope, generators).value)\n\n        return {\n          value: parts.length > 0 ? parts.reduce<Value[]>((acc, part) => acc.concat(asList(part)), []) : [],\n        }\n      }\n\n      case 'sum': {\n        const parts = node.args.map((arg) => this.#interpretPureNode(arg, scope, generators).value)\n\n        return {\n          value: parts.length > 0 ? parts.reduce((acc, part) => asNumber(acc) + asNumber(part)) : 0,\n        }\n      }\n\n      case 'reverse': {\n        const { value, lastInsertId } = this.#interpretPureNode(node.args, scope, generators)\n        return { value: Array.isArray(value) ? value.reverse() : value, lastInsertId }\n      }\n\n      case 'unique': {\n        const { value, lastInsertId } = this.#interpretPureNode(node.args, scope, generators)\n        if (!Array.isArray(value)) {\n          return { value, lastInsertId }\n        }\n        if (value.length > 1) {\n          throw new Error(`Expected zero or one element, got ${value.length}`)\n        }\n        return { value: value[0] ?? null, lastInsertId }\n      }\n\n      case 'required': {\n        const { value, lastInsertId } = this.#interpretPureNode(node.args, scope, generators)\n        if (isEmpty(value)) {\n          throw new Error('Required value is empty')\n        }\n        return { value, lastInsertId }\n      }\n\n      case 'mapField': {\n        const { value, lastInsertId } = this.#interpretPureNode(node.args.records, scope, generators)\n        return { value: mapField(value, node.args.field), lastInsertId }\n      }\n\n      case 'join': {\n        const { value: parent, lastInsertId } = this.#interpretPureNode(node.args.parent, scope, generators)\n\n        if (parent === null) {\n          return { value: null, lastInsertId }\n        }\n\n        const children = node.args.children.map((joinExpr) => ({\n          joinExpr,\n          childRecords: this.#interpretPureNode(joinExpr.child, scope, generators).value,\n        }))\n\n        return { value: attachChildrenToParents(parent, children, node.args.canAssumeStrictEquality), lastInsertId }\n      }\n\n      case 'dataMap': {\n        const { value, lastInsertId } = this.#interpretPureNode(node.args.expr, scope, generators)\n        return { value: applyDataMap(value, node.args.structure, node.args.enums), lastInsertId }\n      }\n\n      case 'validate': {\n        const { value, lastInsertId } = this.#interpretPureNode(node.args.expr, scope, generators)\n        performValidation(value, node.args.rules, node.args)\n\n        return { value, lastInsertId }\n      }\n\n      case 'if': {\n        const { value } = this.#interpretPureNode(node.args.value, scope, generators)\n        if (doesSatisfyRule(value, node.args.rule)) {\n          return this.#interpretPureNode(node.args.then, scope, generators)\n        } else {\n          return this.#interpretPureNode(node.args.else, scope, generators)\n        }\n      }\n\n      case 'unit': {\n        return { value: undefined }\n      }\n\n      case 'diff': {\n        const { value: from } = this.#interpretPureNode(node.args.from, scope, generators)\n        const { value: to } = this.#interpretPureNode(node.args.to, scope, generators)\n\n        const keyGetter = (item: Value) => (item !== null ? getRecordKey(asRecord(item), node.args.fields) : null)\n\n        const toSet = new Set(asList(to).map(keyGetter))\n        return { value: asList(from).filter((item) => !toSet.has(keyGetter(item))) }\n      }\n\n      case 'process': {\n        const { value, lastInsertId } = this.#interpretPureNode(node.args.expr, scope, generators)\n        const ops = cloneObject(node.args.operations)\n        evaluateProcessingParameters(ops, scope, generators)\n        return { value: processRecords(value, ops), lastInsertId }\n      }\n\n      case 'initializeRecord': {\n        const { lastInsertId } = this.#interpretPureNode(node.args.expr, scope, generators)\n\n        const record = {}\n        for (const [key, initializer] of Object.entries(node.args.fields)) {\n          record[key] = evalFieldInitializer(initializer, lastInsertId, scope, generators)\n        }\n        return { value: record, lastInsertId }\n      }\n\n      case 'mapRecord': {\n        const { value, lastInsertId } = this.#interpretPureNode(node.args.expr, scope, generators)\n\n        const record = value === null ? {} : asRecord(value)\n        for (const [key, entry] of Object.entries(node.args.fields)) {\n          record[key] = evalFieldOperation(entry, record[key], scope, generators)\n        }\n        return { value: record, lastInsertId }\n      }\n\n      default:\n        assertNever(node, `Unexpected node type: ${(node as { type: unknown }).type}`)\n    }\n  }\n\n  /**\n   * Runs the statements of a `query` or `execute` node via `fn`, wrapping them in a\n   * transaction when a chunkable statement was split into multiple queries at render time,\n   * so that a partially applied write cannot be observed or left behind if a later chunk\n   * fails. A single statement is atomic on its own, so it runs on the current context.\n   */\n  #withChunkTransaction<T>(\n    statementCount: number,\n    context: QueryRuntimeContext,\n    fn: (context: QueryRuntimeContext) => Promise<T>,\n  ): Promise<T> {\n    if (statementCount <= 1) {\n      return fn(context)\n    }\n    return this.#withInternalTransaction(context, fn)\n  }\n\n  /**\n   * Runs `fn` with a context whose queryable is guaranteed to be a transaction, starting a\n   * new internal transaction and committing or rolling it back around the call.\n   *\n   * A disabled transaction manager means the queryable already is a transaction: executors\n   * pass `{ enabled: false }` when the plan runs inside an interactive transaction, and the\n   * context handed to `fn` carries it for the duration of an internal transaction. In that\n   * case `fn` runs on the current context, since the statements it issues are already\n   * covered by the surrounding transaction.\n   */\n  async #withInternalTransaction<T>(\n    context: QueryRuntimeContext,\n    fn: (context: QueryRuntimeContext) => Promise<T>,\n  ): Promise<T> {\n    if (!context.transactionManager.enabled) {\n      return fn(context)\n    }\n\n    const transactionManager = context.transactionManager.manager\n    const transactionInfo = await transactionManager.startInternalTransaction()\n    const transaction = await transactionManager.getTransaction(transactionInfo, 'query')\n\n    try {\n      const result = await fn({ ...context, queryable: transaction, transactionManager: { enabled: false } })\n      await transactionManager.commitTransaction(transactionInfo.id)\n      return result\n    } catch (e) {\n      try {\n        await transactionManager.rollbackTransaction(transactionInfo.id)\n      } catch (rollbackError) {\n        // Rethrow the error that caused the rollback rather than the rollback failure itself.\n        debug('failed to roll back an internal transaction', rollbackError)\n      }\n      throw e\n    }\n  }\n\n  #maxChunkSize(): number | undefined {\n    if (this.#connectionInfo?.maxBindValues !== undefined) {\n      return this.#connectionInfo.maxBindValues\n    }\n    return this.#providerMaxChunkSize()\n  }\n\n  #providerMaxChunkSize(): number | undefined {\n    if (this.#provider === undefined) {\n      return undefined\n    }\n    switch (this.#provider) {\n      case 'cockroachdb':\n      case 'postgres':\n      case 'postgresql':\n      case 'prisma+postgres':\n        return 32766\n      case 'mysql':\n        return 65535\n      case 'sqlite':\n        return 999\n      case 'sqlserver':\n        return 2098\n      case 'mongodb':\n        return undefined\n      default:\n        assertNever(this.#provider, `Unexpected provider: ${this.#provider}`)\n    }\n  }\n\n  #withQuerySpanAndEvent<T>(\n    query: DeepReadonly<SqlQuery>,\n    queryable: SqlQueryable,\n    execute: () => Promise<T>,\n  ): Promise<T> {\n    return withQuerySpanAndEvent({\n      query,\n      execute,\n      provider: this.#provider ?? queryable.provider,\n      tracingHelper: this.#tracingHelper,\n      onQuery: this.#onQuery,\n    })\n  }\n}\n\ntype IntermediateValue = { value: Value; lastInsertId?: string }\n\nfunction isEmpty(value: Value): boolean {\n  if (Array.isArray(value)) {\n    return value.length === 0\n  }\n  return value == null\n}\n\nfunction asList(value: Value): Value[] {\n  return Array.isArray(value) ? value : [value]\n}\n\nfunction asNumber(value: Value): number {\n  if (typeof value === 'number') {\n    return value\n  }\n\n  if (typeof value === 'string') {\n    return Number(value)\n  }\n\n  throw new Error(`Expected number, got ${typeof value}`)\n}\n\nfunction asRecord(value: Value): PrismaObject {\n  if (typeof value === 'object' && value !== null) {\n    return value as PrismaObject\n  }\n  throw new Error(`Expected object, got ${typeof value}`)\n}\n\nfunction mapField(value: Value, field: string): Value {\n  if (Array.isArray(value)) {\n    return value.map((element) => mapField(element, field))\n  }\n\n  if (typeof value === 'object' && value !== null) {\n    return value[field] ?? null\n  }\n\n  return value\n}\n\ntype JoinExpressionWithRecords = {\n  joinExpr: JoinExpression\n  childRecords: Value\n}\n\ntype KeyCast = (value: Value) => Value\n\nfunction attachChildrenToParents(\n  parentRecords: unknown,\n  children: DeepReadonly<JoinExpressionWithRecords[]>,\n  canAssumeStrictEquality: boolean,\n) {\n  for (const { joinExpr, childRecords } of children) {\n    const parentKeys = joinExpr.on.map(([k]) => k)\n    const childKeys = joinExpr.on.map(([, k]) => k)\n    const parentMap = {}\n\n    const parentArray = Array.isArray(parentRecords) ? parentRecords : [parentRecords]\n    for (const parent of parentArray) {\n      const parentRecord = asRecord(parent)\n      const key = getRecordKey(parentRecord, parentKeys)\n      if (!parentMap[key]) {\n        parentMap[key] = []\n      }\n      parentMap[key].push(parentRecord)\n\n      if (joinExpr.isRelationUnique) {\n        parentRecord[joinExpr.parentField] = null\n      } else {\n        parentRecord[joinExpr.parentField] = []\n      }\n    }\n\n    const mappers = canAssumeStrictEquality ? undefined : inferKeyCasts(parentArray, parentKeys)\n    for (const childRecord of Array.isArray(childRecords) ? childRecords : [childRecords]) {\n      if (childRecord === null) {\n        continue\n      }\n\n      const key = getRecordKey(asRecord(childRecord), childKeys, mappers)\n      for (const parentRecord of parentMap[key] ?? []) {\n        if (joinExpr.isRelationUnique) {\n          parentRecord[joinExpr.parentField] = childRecord\n        } else {\n          parentRecord[joinExpr.parentField].push(childRecord)\n        }\n      }\n    }\n  }\n\n  return parentRecords\n}\n\nfunction inferKeyCasts(rows: unknown[], keys: string[]): KeyCast[] {\n  function getKeyCast(type: string): KeyCast | undefined {\n    switch (type) {\n      case 'number':\n        return Number\n      case 'string':\n        return String\n      case 'boolean':\n        return Boolean\n      case 'bigint':\n        return BigInt as KeyCast\n      default:\n        return\n    }\n  }\n\n  const keyCasts: KeyCast[] = Array.from({ length: keys.length })\n  let keysFound = 0\n  for (const parent of rows) {\n    const parentRecord = asRecord(parent)\n    for (const [i, key] of keys.entries()) {\n      if (parentRecord[key] !== null && keyCasts[i] === undefined) {\n        const keyCast = getKeyCast(typeof parentRecord[key])\n        if (keyCast !== undefined) {\n          keyCasts[i] = keyCast\n        }\n        keysFound++\n      }\n    }\n    if (keysFound === keys.length) {\n      break\n    }\n  }\n\n  return keyCasts\n}\n\nfunction evalFieldInitializer(\n  initializer: DeepReadonly<FieldInitializer>,\n  lastInsertId: string | undefined,\n  scope: ScopeBindings,\n  generators: GeneratorRegistrySnapshot,\n): Value {\n  switch (initializer.type) {\n    case 'value':\n      return evaluateArg(initializer.value, scope, generators)\n    case 'lastInsertId':\n      return lastInsertId\n    default:\n      assertNever(initializer, `Unexpected field initializer type: ${initializer['type']}`)\n  }\n}\n\nfunction evalFieldOperation(\n  op: DeepReadonly<FieldOperation>,\n  value: Value,\n  scope: ScopeBindings,\n  generators: GeneratorRegistrySnapshot,\n): Value {\n  switch (op.type) {\n    case 'set':\n      return evaluateArg(op.value, scope, generators)\n    case 'add':\n      return asNumber(value) + asNumber(evaluateArg(op.value, scope, generators))\n    case 'subtract':\n      return asNumber(value) - asNumber(evaluateArg(op.value, scope, generators))\n    case 'multiply':\n      return asNumber(value) * asNumber(evaluateArg(op.value, scope, generators))\n    case 'divide': {\n      const lhs = asNumber(value)\n      const rhs = asNumber(evaluateArg(op.value, scope, generators))\n      // SQLite and older versions of MySQL return NULL for division by zero, so we emulate\n      // that behavior here.\n      // If the database does not permit division by zero, a database error should be raised,\n      // preventing this case from being executed.\n      if (rhs === 0) {\n        return null\n      }\n      return lhs / rhs\n    }\n    default:\n      assertNever(op, `Unexpected field operation type: ${op['type']}`)\n  }\n}\n\n/**\n * Attempts to convert a query plan into a pure one by finding the single impure node\n * that is unconditionally evaluated exactly once, evaluating it eagerly via `evalNode`,\n * and substituting its result into the plan as a constant. The remaining plan can then\n * be interpreted synchronously.\n *\n * Returns `undefined` if the plan cannot be purified this way (it contains no impure\n * nodes, more than one of them, or unsupported constructs).\n *\n * Query plans are cached and shared between requests, so the input plan is never\n * modified; the returned plan shares all unaffected subtrees with the input and only\n * copies the nodes on the path to the substituted one.\n */\nexport function purifyQueryPlan(\n  node: DeepReadonly<QueryPlanNode>,\n  evalNode: (node: DeepReadonly<ImpureQueryPlanNode>) => Promise<IntermediateValue>,\n): Promise<DeepReadonly<PureQueryPlanNode>> | undefined {\n  const impureNode = findUniqueUnconditionalImpureNode(node)\n  if (!impureNode) {\n    return undefined\n  }\n  return evalNode(impureNode).then((result) => {\n    const evaluated: DeepReadonly<QueryPlanNode> = {\n      type: 'value',\n      args: result.value as PrismaValue,\n      lastInsertId: result.lastInsertId,\n    }\n    const purified = replaceImpureNode(node, impureNode, evaluated)\n    if (!purified) {\n      throw new Error('Could not substitute the evaluated impure node into the query plan')\n    }\n    // The replaced node was the only impure node in the plan, so the result is pure.\n    return purified as DeepReadonly<PureQueryPlanNode>\n  })\n}\n\n/**\n * Returns a copy of the plan with `target` (identified by reference) replaced by\n * `replacement`, sharing all subtrees that do not contain `target` with the input,\n * or `undefined` if `target` does not occur in the plan. Only traverses the node\n * kinds that `findUniqueUnconditionalImpureNode` can find the target through.\n */\nfunction replaceImpureNode(\n  node: DeepReadonly<QueryPlanNode>,\n  target: DeepReadonly<ImpureQueryPlanNode>,\n  replacement: DeepReadonly<QueryPlanNode>,\n): DeepReadonly<QueryPlanNode> | undefined {\n  if (node === target) {\n    return replacement\n  }\n  switch (node.type) {\n    case 'seq':\n    case 'sum':\n    case 'concat': {\n      for (let i = 0; i < node.args.length; i++) {\n        const child = replaceImpureNode(node.args[i], target, replacement)\n        if (child) {\n          return { ...node, args: node.args.map((arg, j) => (j === i ? child : arg)) }\n        }\n      }\n      return undefined\n    }\n    case 'dataMap':\n    case 'validate':\n    case 'initializeRecord':\n    case 'mapRecord':\n    case 'process': {\n      const expr = replaceImpureNode(node.args.expr, target, replacement)\n      // The cast is needed because TypeScript does not narrow the type of the\n      // spread result down to the matching union member.\n      return expr && ({ ...node, args: { ...node.args, expr } } as DeepReadonly<QueryPlanNode>)\n    }\n    case 'mapField': {\n      const records = replaceImpureNode(node.args.records, target, replacement)\n      return records && { ...node, args: { ...node.args, records } }\n    }\n    case 'reverse':\n    case 'unique':\n    case 'required': {\n      const args = replaceImpureNode(node.args, target, replacement)\n      return args && { ...node, args }\n    }\n    default:\n      return undefined\n  }\n}\n\nfunction findUniqueUnconditionalImpureNode(\n  node: DeepReadonly<QueryPlanNode>,\n): DeepReadonly<ImpureQueryPlanNode> | null | undefined {\n  switch (node.type) {\n    case 'query':\n    case 'execute':\n      return node\n    case 'seq':\n    case 'sum':\n    case 'concat': {\n      let found: DeepReadonly<ImpureQueryPlanNode> | undefined = undefined\n      for (const child of node.args) {\n        const childFound = findUniqueUnconditionalImpureNode(child)\n        if (childFound === null) {\n          // unsupported node found in child\n          return null\n        }\n        if (childFound) {\n          if (found) {\n            // more than one node found\n            return null\n          }\n          found = childFound\n        }\n      }\n      return found\n    }\n    case 'dataMap':\n    case 'validate':\n    case 'initializeRecord':\n    case 'mapRecord':\n    case 'process':\n      return findUniqueUnconditionalImpureNode(node.args.expr)\n    case 'mapField':\n      return findUniqueUnconditionalImpureNode(node.args.records)\n    case 'reverse':\n    case 'unique':\n    case 'required':\n      return findUniqueUnconditionalImpureNode(node.args)\n    case 'let':\n    case 'join':\n    case 'diff':\n    case 'if':\n    case 'transaction':\n      // unsupported nodes: plans containing these are never purified\n      return null\n    case 'value':\n    case 'get':\n    case 'getFirstNonEmpty':\n    case 'unit':\n      // leaf nodes that cannot contain impure descendants\n      return undefined\n    default:\n      assertNever(node, `Unexpected node type: ${(node as { type: unknown }).type}`)\n  }\n}\n\nfunction applyComments(\n  query: DeepReadonly<SqlQuery>,\n  sqlCommenter?: QueryInterpreterSqlCommenter,\n): DeepReadonly<SqlQuery> {\n  if (!sqlCommenter || sqlCommenter.plugins.length === 0) {\n    return query\n  }\n\n  const comment = buildSqlComment(sqlCommenter.plugins, {\n    query: sqlCommenter.queryInfo,\n    sql: query.sql,\n  })\n\n  if (!comment) {\n    return query\n  }\n\n  return {\n    ...query,\n    sql: appendSqlComment(query.sql, comment),\n  }\n}\n\nfunction evaluateProcessingParameters(\n  ops: InMemoryOps,\n  scope: ScopeBindings,\n  generators: GeneratorRegistrySnapshot,\n): void {\n  const cursor = ops.pagination?.cursor\n  if (cursor) {\n    for (const [key, value] of Object.entries(cursor)) {\n      cursor[key] = evaluateArg(value, scope, generators)\n    }\n  }\n  for (const nested of Object.values(ops.nested)) {\n    evaluateProcessingParameters(nested, scope, generators)\n  }\n}\n\nfunction cloneObject<T>(value: T): DeepUnreadonly<T> {\n  return klona(value) as DeepUnreadonly<T>\n}\n", "export function klona(x) {\n\tif (typeof x !== 'object') return x;\n\n\tvar k, tmp, str=Object.prototype.toString.call(x);\n\n\tif (str === '[object Object]') {\n\t\tif (x.constructor !== Object && typeof x.constructor === 'function') {\n\t\t\ttmp = new x.constructor();\n\t\t\tfor (k in x) {\n\t\t\t\tif (x.hasOwnProperty(k) && tmp[k] !== x[k]) {\n\t\t\t\t\ttmp[k] = klona(x[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\ttmp = {}; // null\n\t\t\tfor (k in x) {\n\t\t\t\tif (k === '__proto__') {\n\t\t\t\t\tObject.defineProperty(tmp, k, {\n\t\t\t\t\t\tvalue: klona(x[k]),\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttmp[k] = klona(x[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object Array]') {\n\t\tk = x.length;\n\t\tfor (tmp=Array(k); k--;) {\n\t\t\ttmp[k] = klona(x[k]);\n\t\t}\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object Set]') {\n\t\ttmp = new Set;\n\t\tx.forEach(function (val) {\n\t\t\ttmp.add(klona(val));\n\t\t});\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object Map]') {\n\t\ttmp = new Map;\n\t\tx.forEach(function (val, key) {\n\t\t\ttmp.set(klona(key), klona(val));\n\t\t});\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object Date]') {\n\t\treturn new Date(+x);\n\t}\n\n\tif (str === '[object RegExp]') {\n\t\ttmp = new RegExp(x.source, x.flags);\n\t\ttmp.lastIndex = x.lastIndex;\n\t\treturn tmp;\n\t}\n\n\tif (str === '[object DataView]') {\n\t\treturn new x.constructor( klona(x.buffer) );\n\t}\n\n\tif (str === '[object ArrayBuffer]') {\n\t\treturn x.slice(0);\n\t}\n\n\t// ArrayBuffer.isView(x)\n\t// ~> `new` bcuz `Buffer.slice` => ref\n\tif (str.slice(-6) === 'Array]') {\n\t\treturn new x.constructor(x);\n\t}\n\n\treturn x;\n}\n", "import type { SqlCommenterContext, SqlCommenterPlugin } from '@prisma/sqlcommenter'\nimport { klona } from 'klona'\n\n/**\n * Formats key-value pairs into a sqlcommenter-compatible comment string.\n *\n * Algorithm per https://google.github.io/sqlcommenter/spec/:\n * 1. If the map is empty, return empty string\n * 2. Sort keys lexicographically\n * 3. URL-encode keys\n * 4. URL-encode values\n * 5. Replace ' with \\' in values (after URL encoding)\n * 6. Wrap values in single quotes\n * 7. Join key='value' pairs with commas\n * 8. Wrap in a SQL comment\n */\nexport function formatSqlComment(tags: Record<string, string>): string {\n  const entries = Object.entries(tags)\n  if (entries.length === 0) {\n    return ''\n  }\n\n  // Sort by key lexicographically\n  entries.sort(([a], [b]) => a.localeCompare(b))\n\n  const parts = entries.map(([key, value]) => {\n    const encodedKey = encodeURIComponent(key)\n    const encodedValue = encodeURIComponent(value).replace(/'/g, \"\\\\'\")\n    return `${encodedKey}='${encodedValue}'`\n  })\n\n  return `/*${parts.join(',')}*/`\n}\n\n/**\n * Applies SQL commenter plugins and returns the merged key-value pairs.\n * Keys with undefined values are filtered out.\n *\n * Each plugin receives a deep clone of the context to prevent mutations\n * that could affect other plugins.\n */\nexport function applySqlCommenters(\n  plugins: SqlCommenterPlugin[],\n  context: SqlCommenterContext,\n): Record<string, string> {\n  const merged: Record<string, string> = {}\n\n  for (const plugin of plugins) {\n    const tags = plugin(klona(context))\n    for (const [key, value] of Object.entries(tags)) {\n      if (value !== undefined) {\n        merged[key] = value\n      }\n    }\n  }\n\n  return merged\n}\n\n/**\n * Applies SQL commenter plugins and returns the formatted comment.\n */\nexport function buildSqlComment(plugins: SqlCommenterPlugin[], context: SqlCommenterContext): string {\n  const tags = applySqlCommenters(plugins, context)\n  return formatSqlComment(tags)\n}\n\n/**\n * Appends a sqlcommenter comment to a SQL query.\n */\nexport function appendSqlComment(sql: string, comment: string): string {\n  if (!comment) {\n    return sql\n  }\n  return `${sql} ${comment}`\n}\n", "import { type Context, type Span, SpanKind, type SpanOptions } from '@opentelemetry/api'\nimport type { SqlQuery } from '@prisma/driver-adapter-utils'\n\nimport { QueryEvent } from './events'\nimport type { SchemaProvider } from './schema'\nimport { assertNever, DeepReadonly } from './utils'\n\nexport type SpanCallback<R> = (span?: Span, context?: Context) => R\n\nexport type ExtendedSpanOptions = SpanOptions & {\n  name: string\n}\n\n// A smaller version of the equivalent interface from `@prisma/internals`\nexport interface TracingHelper {\n  isEnabled(): boolean\n  runInChildSpan<R>(nameOrOptions: string | ExtendedSpanOptions, callback: SpanCallback<R>): R\n}\n\nexport const noopTracingHelper: TracingHelper = {\n  isEnabled() {\n    return false\n  },\n  runInChildSpan(_, callback) {\n    return callback()\n  },\n}\n\nexport function providerToOtelSystem(provider: SchemaProvider): string {\n  switch (provider) {\n    case 'postgresql':\n    case 'postgres':\n    case 'prisma+postgres':\n      return 'postgresql'\n    case 'sqlserver':\n      return 'mssql'\n    case 'mysql':\n    case 'sqlite':\n    case 'cockroachdb':\n    case 'mongodb':\n      return provider\n    default:\n      assertNever(provider, `Unknown provider: ${provider}`)\n  }\n}\n\nexport async function withQuerySpanAndEvent<T>({\n  query,\n  tracingHelper,\n  provider,\n  onQuery,\n  execute,\n}: {\n  query: DeepReadonly<SqlQuery>\n  tracingHelper: TracingHelper\n  provider: SchemaProvider\n  onQuery?: (event: QueryEvent) => void\n  execute: () => Promise<T>\n}): Promise<T> {\n  const callback =\n    onQuery === undefined\n      ? execute\n      : async () => {\n          const timestamp = new Date()\n          const startInstant = performance.now()\n          const result = await execute()\n          const endInstant = performance.now()\n\n          onQuery({\n            timestamp,\n            duration: endInstant - startInstant,\n            query: query.sql,\n            params: query.args,\n          })\n\n          return result\n        }\n\n  if (!tracingHelper.isEnabled()) {\n    return callback()\n  }\n\n  return await tracingHelper.runInChildSpan(\n    {\n      name: 'db_query',\n      kind: SpanKind.CLIENT,\n      attributes: {\n        'db.query.text': query.sql,\n        'db.system.name': providerToOtelSystem(provider),\n      },\n    },\n    callback,\n  )\n}\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport { BaggageEntry, BaggageEntryMetadata, Baggage } from './baggage/types';\nexport { baggageEntryMetadataFromString } from './baggage/utils';\nexport { Exception } from './common/Exception';\nexport { HrTime, TimeInput } from './common/Time';\nexport { Attributes, AttributeValue } from './common/Attributes';\n\n// Context APIs\nexport { createContextKey, ROOT_CONTEXT } from './context/context';\nexport { Context, ContextManager } from './context/types';\nexport type { ContextAPI } from './api/context';\n\n// Diag APIs\nexport { DiagConsoleLogger } from './diag/consoleLogger';\nexport {\n  DiagLogFunction,\n  DiagLogger,\n  DiagLogLevel,\n  ComponentLoggerOptions,\n  DiagLoggerOptions,\n} from './diag/types';\nexport type { DiagAPI } from './api/diag';\n\n// Metrics APIs\nexport { createNoopMeter } from './metrics/NoopMeter';\nexport { MeterOptions, Meter } from './metrics/Meter';\nexport { MeterProvider } from './metrics/MeterProvider';\nexport {\n  ValueType,\n  Counter,\n  Gauge,\n  Histogram,\n  MetricOptions,\n  Observable,\n  ObservableCounter,\n  ObservableGauge,\n  ObservableUpDownCounter,\n  UpDownCounter,\n  BatchObservableCallback,\n  MetricAdvice,\n  MetricAttributes,\n  MetricAttributeValue,\n  ObservableCallback,\n} from './metrics/Metric';\nexport {\n  BatchObservableResult,\n  ObservableResult,\n} from './metrics/ObservableResult';\nexport type { MetricsAPI } from './api/metrics';\n\n// Propagation APIs\nexport {\n  TextMapPropagator,\n  TextMapSetter,\n  TextMapGetter,\n  defaultTextMapGetter,\n  defaultTextMapSetter,\n} from './propagation/TextMapPropagator';\nexport type { PropagationAPI } from './api/propagation';\n\n// Trace APIs\nexport { SpanAttributes, SpanAttributeValue } from './trace/attributes';\nexport { Link } from './trace/link';\nexport { ProxyTracer, TracerDelegator } from './trace/ProxyTracer';\nexport { ProxyTracerProvider } from './trace/ProxyTracerProvider';\nexport { Sampler } from './trace/Sampler';\nexport { SamplingDecision, SamplingResult } from './trace/SamplingResult';\nexport { SpanContext } from './trace/span_context';\nexport { SpanKind } from './trace/span_kind';\nexport { Span } from './trace/span';\nexport { SpanOptions } from './trace/SpanOptions';\nexport { SpanStatus, SpanStatusCode } from './trace/status';\nexport { TraceFlags } from './trace/trace_flags';\nexport { TraceState } from './trace/trace_state';\nexport { createTraceState } from './trace/internal/utils';\nexport { TracerProvider } from './trace/tracer_provider';\nexport { Tracer } from './trace/tracer';\nexport { TracerOptions } from './trace/tracer_options';\nexport {\n  isSpanContextValid,\n  isValidTraceId,\n  isValidSpanId,\n} from './trace/spancontext-utils';\nexport {\n  INVALID_SPANID,\n  INVALID_TRACEID,\n  INVALID_SPAN_CONTEXT,\n} from './trace/invalid-span-constants';\nexport type { TraceAPI } from './api/trace';\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { context } from './context-api';\nimport { diag } from './diag-api';\nimport { metrics } from './metrics-api';\nimport { propagation } from './propagation-api';\nimport { trace } from './trace-api';\n\n// Named export.\nexport { context, diag, metrics, propagation, trace };\n// Default export.\nexport default {\n  context,\n  diag,\n  metrics,\n  propagation,\n  trace,\n};\n", "/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport enum SpanKind {\n  /** Default value. Indicates that the span is used internally. */\n  INTERNAL = 0,\n\n  /**\n   * Indicates that the span covers server-side handling of an RPC or other\n   * remote request.\n   */\n  SERVER = 1,\n\n  /**\n   * Indicates that the span covers the client-side wrapper around an RPC or\n   * other remote request.\n   */\n  CLIENT = 2,\n\n  /**\n   * Indicates that the span describes producer sending a message to a\n   * broker. Unlike client and server, there is no direct critical path latency\n   * relationship between producer and consumer spans.\n   */\n  PRODUCER = 3,\n\n  /**\n   * Indicates that the span describes consumer receiving a message from a\n   * broker. Unlike client and server, there is no direct critical path latency\n   * relationship between producer and consumer spans.\n   */\n  CONSUMER = 4,\n}\n", "import cuid1 from '@bugsnag/cuid'\nimport { createId as cuid2 } from '@paralleldrive/cuid2'\nimport { nanoid } from 'nanoid'\nimport { ulid } from 'ulid'\nimport { v4 as uuidv4, v7 as uuidv7 } from 'uuid'\n\nexport class GeneratorRegistry {\n  #generators: GeneratorRegistrySnapshot = {}\n\n  constructor() {\n    this.register('uuid', new UuidGenerator())\n    this.register('cuid', new CuidGenerator())\n    this.register('ulid', new UlidGenerator())\n    this.register('nanoid', new NanoIdGenerator())\n    this.register('product', new ProductGenerator())\n  }\n\n  /**\n   * Returns a snapshot of the generator registry. It's 'frozen' in time at the moment of this\n   * method being called, meaning that the built-in time-based generators will always return\n   * the same value on repeated calls as long as the same snapshot is used.\n   */\n  snapshot(): Readonly<GeneratorRegistrySnapshot> {\n    return Object.create(this.#generators, {\n      now: {\n        value: new NowGenerator(),\n      },\n    })\n  }\n\n  /**\n   * Registers a new generator with the given name.\n   */\n  register(name: string, generator: ValueGenerator): void {\n    this.#generators[name] = generator\n  }\n}\n\nexport interface GeneratorRegistrySnapshot {\n  [key: string]: ValueGenerator\n}\n\nexport interface ValueGenerator {\n  generate(...args: unknown[]): unknown\n}\n\nclass NowGenerator implements ValueGenerator {\n  #now: Date | undefined\n\n  generate(): string {\n    if (this.#now === undefined) {\n      this.#now = new Date()\n    }\n    return this.#now.toISOString()\n  }\n}\n\nclass UuidGenerator implements ValueGenerator {\n  generate(arg: unknown): string {\n    if (arg === 4) {\n      return uuidv4()\n    } else if (arg === 7) {\n      return uuidv7()\n    } else {\n      throw new Error('Invalid UUID generator arguments')\n    }\n  }\n}\n\nclass CuidGenerator implements ValueGenerator {\n  generate(arg: unknown): string {\n    if (arg === 1) {\n      return cuid1()\n    } else if (arg === 2) {\n      return cuid2()\n    } else {\n      throw new Error('Invalid CUID generator arguments')\n    }\n  }\n}\n\nclass UlidGenerator implements ValueGenerator {\n  generate(): string {\n    return ulid()\n  }\n}\n\nclass NanoIdGenerator implements ValueGenerator {\n  generate(arg: unknown): string {\n    if (typeof arg === 'number') {\n      return nanoid(arg)\n    } else if (arg === undefined) {\n      return nanoid()\n    } else {\n      throw new Error('Invalid Nanoid generator arguments')\n    }\n  }\n}\n\nclass ProductGenerator implements ValueGenerator {\n  generate(lhs: unknown, rhs: unknown): unknown[] {\n    if (lhs === undefined || rhs === undefined) {\n      throw new Error('Invalid Product generator arguments')\n    }\n\n    if (Array.isArray(lhs) && Array.isArray(rhs)) {\n      return lhs.flatMap((l) => rhs.map((r) => [l, r]))\n    } else if (Array.isArray(lhs)) {\n      return lhs.map((l) => [l, rhs])\n    } else if (Array.isArray(rhs)) {\n      return rhs.map((r) => [lhs, r])\n    } else {\n      return [[lhs, rhs]]\n    }\n  }\n}\n", "/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\nimport fingerprint from '#fingerprint';\nimport createCuid from './lib/cuid.mjs';\nimport isCuid from './lib/is-cuid.mjs';\n\nconst cuid = createCuid(fingerprint);\n\nexport { fingerprint, isCuid };\n\nexport default cuid;\n", "import pad from './pad.mjs';\nimport os from 'os';\n\nfunction getHostname () {\n  try {\n      return os.hostname();\n  } catch (e) {\n    /**\n     * This is most likely Windows 7 which is known to cause os.hostname() to break\n     * @see https://github.com/nodejs/node/issues/41297\n     * @see https://github.com/libuv/libuv/issues/3260\n     *\n     * Fallback to take hostname from environment variables\n     * @see https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/hostname#notes\n     */\n    // eslint-disable-next-line no-underscore-dangle\n    return process.env._CLUSTER_NETWORK_NAME_ || process.env.COMPUTERNAME || 'hostname';\n    }\n}\n\nvar padding = 2,\n    pid = pad(process.pid.toString(36), padding),\n    hostname = getHostname(),\n    length = hostname.length,\n    hostId = pad(hostname\n      .split('')\n      .reduce(function (prev, char) {\n        return +prev + char.charCodeAt(0);\n      }, +length + 36)\n      .toString(36),\n    padding);\n\nexport default function fingerprint () {\n  return pid + hostId;\n}\n", "export default function pad (num, size) {\n  var s = '000000000' + num;\n  return s.substr(s.length - size);\n}\n", "/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\nimport isCuid from './is-cuid.mjs';\nimport pad from './pad.mjs';\n\nexport default function createCuid (fingerprint) {\n    const blockSize = 4,\n    base = 36,\n    discreteValues = Math.pow(base, blockSize);\n\n    let c = 0;\n\n    function randomBlock () {\n        return pad((Math.random() *\n        discreteValues << 0)\n        .toString(base), blockSize);\n    }\n\n    function safeCounter () {\n        c = c < discreteValues ? c : 0;\n        c++; // this is not subliminal\n        return c - 1;\n    }\n\n    function cuid () {\n        // Starting with a lowercase letter makes\n        // it HTML element ID friendly.\n        var letter = 'c', // hard-coded allows for sequential access\n\n        // timestamp\n        // warning: this exposes the exact date and time\n        // that the uid was created.\n        timestamp = new Date().getTime().toString(base),\n\n        // Prevent same-machine collisions.\n        counter = pad(safeCounter().toString(base), blockSize),\n\n        // A few chars to generate distinct ids for different\n        // clients (so different computers are far less\n        // likely to generate the same id)\n        print = fingerprint(),\n\n        // Grab some more chars from Math.random()\n        random = randomBlock() + randomBlock();\n\n        return letter + timestamp + counter + print + random;\n    }\n\n    cuid.fingerprint = fingerprint;\n    cuid.isCuid = isCuid;\n\n    return cuid;\n}\n\n", "/**\n * Check the provided value is a valid device id\n * @param {unknown} value\n * @returns\n */\nexport default function isCuid (value) {\n    return typeof value === 'string' && (/^c[a-z0-9]{20,32}$/).test(value);\n}\n", "import { createId, init, getConstants, isCuid } from \"./src/index.js\";\n\nexport { createId };\nexport { init };\nexport { getConstants };\nexport { isCuid };\n", "/* global global, window */\nimport { sha3_512 as sha3 } from \"@noble/hashes/sha3.js\";\nimport BigNumber from \"bignumber.js\";\n\nconst defaultLength = 24;\nconst bigLength = 32;\n\n/**\n * A cryptographically secure random number generator that mimics Math.random()\n * Uses the Web Crypto API which is available in both modern browsers and Node.js\n * Returns a random float in the range [0, 1) just like Math.random()\n */\nconst createRandom = () => {\n  // Use globalThis.crypto which works in both Node.js and browsers\n  if (\n    typeof globalThis !== \"undefined\" &&\n    globalThis.crypto &&\n    typeof globalThis.crypto.getRandomValues === \"function\"\n  ) {\n    return () => {\n      // Generate a random 32-bit unsigned integer\n      const buffer = new Uint32Array(1);\n      globalThis.crypto.getRandomValues(buffer);\n      // Convert to a float in [0, 1) by dividing by 2^32\n      return buffer[0] / 0x100000000;\n    };\n  }\n  // Fallback to Math.random if crypto is not available\n  return Math.random;\n};\n\nconst random = createRandom();\n\nconst createEntropy = (length = 4, rand = random) => {\n  let entropy = \"\";\n\n  while (entropy.length < length) {\n    entropy = entropy + Math.floor(rand() * 36).toString(36);\n  }\n  return entropy;\n};\n\n/*\n * Adapted from https://github.com/juanelas/bigint-conversion\n * MIT License Copyright (c) 2018 Juan Hern\u00E1ndez Serrano\n */\nfunction bufToBigInt(buf) {\n  let value = new BigNumber(0);\n\n  for (const i of buf.values()) {\n    // Multiply by 256 (left shift by 8 bits) and add the current byte\n    value = value.multipliedBy(256).plus(i);\n  }\n  return value;\n}\n\nconst hash = (input = \"\") => {\n  // Drop the first character because it will bias the histogram\n  // to the left.\n  const encoder = new TextEncoder();\n  return bufToBigInt(sha3(encoder.encode(input)))\n    .toString(36)\n    .slice(1);\n};\n\nconst alphabet = Array.from({ length: 26 }, (x, i) =>\n  String.fromCharCode(i + 97),\n);\n\nconst randomLetter = (rand) => alphabet[Math.floor(rand() * alphabet.length)];\n\n/*\nThis is a fingerprint of the host environment. It is used to help\nprevent collisions when generating ids in a distributed system.\nIf no global object is available, you can pass in your own, or fall back\non a random string.\n*/\nconst createFingerprint = ({\n  globalObj = typeof global !== \"undefined\"\n    ? global\n    : typeof window !== \"undefined\"\n      ? window\n      : {},\n  random: rand = random,\n} = {}) => {\n  const globals = Object.keys(globalObj).toString();\n  const sourceString = globals.length\n    ? globals + createEntropy(bigLength, rand)\n    : createEntropy(bigLength, rand);\n\n  return hash(sourceString).substring(0, bigLength);\n};\n\nconst createCounter = (count) => () => {\n  return count++;\n};\n\n// ~22k hosts before 50% chance of initial counter collision\n// with a remaining counter range of 9.0e+15 in JavaScript.\nconst initialCountMax = 476782367;\n\nconst init = ({\n  // Fallback if the user does not pass in a CSPRNG. This should be OK\n  // because we don't rely solely on the random number generator for entropy.\n  // We also use the host fingerprint, current time, and a session counter.\n  random: rand = random,\n  counter = createCounter(Math.floor(rand() * initialCountMax)),\n  length = defaultLength,\n  fingerprint = createFingerprint({ random: rand }),\n} = {}) => {\n  if (length > bigLength) {\n    throw new Error(\n      `Length must be between 2 and ${bigLength}. Received: ${length}`,\n    );\n  }\n  return function cuid2() {\n    const firstLetter = randomLetter(rand);\n\n    // If we're lucky, the `.toString(36)` calls may reduce hashing rounds\n    // by shortening the input to the hash function a little.\n    const time = Date.now().toString(36);\n    const count = counter().toString(36);\n\n    // The salt should be long enough to be globally unique across the full\n    // length of the hash. For simplicity, we use the same length as the\n    // intended id output.\n    const salt = createEntropy(length, rand);\n    const hashInput = `${time + salt + count + fingerprint}`;\n\n    return `${firstLetter + hash(hashInput).substring(1, length)}`;\n  };\n};\n\nconst createId = lazy(init);\nfunction lazy(fn) {\n  let initialized;\n  return () => {\n    if (!initialized) {\n      initialized = fn();\n    }\n    return initialized();\n  };\n}\n\nconst isCuid = (\n  id,\n  { minLength = 2, maxLength = bigLength, length = id?.length } = {},\n) => {\n  const regex = /^[a-z][0-9a-z]+$/;\n\n  return (\n    typeof id === \"string\" &&\n    length >= minLength &&\n    length <= maxLength &&\n    regex.test(id)\n  );\n};\n\nexport const getConstants = () => ({ defaultLength, bigLength });\nexport { init };\nexport { createId };\nexport { bufToBigInt };\nexport { createCounter };\nexport { createFingerprint };\nexport { isCuid };\n", "/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out\n * {@link https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf | FIPS-202},\n * {@link https://keccak.team/keccak.html | Website}, and\n * {@link https://crypto.stackexchange.com/q/15727 | the differences between\n * SHA-3 and Keccak}.\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.ts';\n// prettier-ignore\nimport {\n  abytes, aexists, anumber, aoutput,\n  clean, createHasher,\n  oidNist,\n  swap32IfBE,\n  u32,\n  type CHash, type CHashXOF,\n  type Hash,\n  type HashInfo,\n  type HashXOF,\n  type TArg,\n  type TRet\n} from './utils.ts';\n\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\n// FIPS 202 Algorithm 5 rc(): when the outgoing bit is 1, the 8-bit LFSR xors\n// taps 0, 4, 5, and 6, which compresses to the feedback mask `0x71`.\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI: number[] = [];\nconst SHA3_ROTL: number[] = [];\nconst _SHA3_IOTA: bigint[] = []; // no pure annotation: var is always used\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\n// `split(..., true)` keeps the local little-endian lane-word layout used by\n// `state32`, so these `H` / `L` tables follow the file's first-word /\n// second-word lane slots rather than `_u64.ts`'s usual high/low naming.\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n/**\n * `keccakf1600` internal permutation, additionally allows adjusting the round count.\n * @param s - 5x5 Keccak state encoded as 25 lanes split into 50 uint32 words\n *   in this file's local little-endian lane-word order\n * @param rounds - number of rounds to execute\n * @throws If `rounds` is outside the supported `1..24` range. {@link Error}\n * @example\n * Permute a Keccak state with the default 24 rounds.\n * ```ts\n * keccakP(new Uint32Array(50));\n * ```\n */\nexport function keccakP(s: TArg<Uint32Array>, rounds: number = 24): void {\n  anumber(rounds, 'rounds');\n  // This implementation precomputes only the standard Keccak-f[1600] 24-round Iota table.\n  if (rounds < 1 || rounds > 24) throw new Error('\"rounds\" expected integer 1..24');\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta \u03B8\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (\u03C1) and Pi (\u03C0)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (\u03C7)\n    // Same as:\n    // for (let x = 0; x < 10; x++) B[x] = s[y + x];\n    // for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    for (let y = 0; y < 50; y += 10) {\n      const b0 = s[y],\n        b1 = s[y + 1],\n        b2 = s[y + 2],\n        b3 = s[y + 3];\n      s[y] ^= ~s[y + 2] & s[y + 4];\n      s[y + 1] ^= ~s[y + 3] & s[y + 5];\n      s[y + 2] ^= ~s[y + 4] & s[y + 6];\n      s[y + 3] ^= ~s[y + 5] & s[y + 7];\n      s[y + 4] ^= ~s[y + 6] & s[y + 8];\n      s[y + 5] ^= ~s[y + 7] & s[y + 9];\n      s[y + 6] ^= ~s[y + 8] & b0;\n      s[y + 7] ^= ~s[y + 9] & b1;\n      s[y + 8] ^= ~b0 & b2;\n      s[y + 9] ^= ~b1 & b3;\n    }\n    // Iota (\u03B9)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  clean(B);\n}\n\n/**\n * Keccak sponge function.\n * @param blockLen - absorb/squeeze rate in bytes\n * @param suffix - domain separation suffix byte\n * @param outputLen - default digest length in bytes. This base sponge only\n *   requires a non-negative integer; wrappers that need positive output\n *   lengths must enforce that themselves.\n * @param enableXOF - whether XOF output is allowed\n * @param rounds - number of Keccak-f rounds\n * @example\n * Build a sponge state, absorb bytes, then finalize a digest.\n * ```ts\n * const hash = new Keccak(136, 0x06, 32);\n * hash.update(new Uint8Array([1, 2, 3]));\n * hash.digest();\n * ```\n */\nexport class Keccak implements Hash<Keccak>, HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n\n  public blockLen: number;\n  public suffix: number;\n  public outputLen: number;\n  public canXOF: boolean;\n  protected enableXOF = false;\n  protected rounds: number;\n\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    blockLen: number,\n    suffix: number,\n    outputLen: number,\n    enableXOF = false,\n    rounds: number = 24\n  ) {\n    this.blockLen = blockLen;\n    this.suffix = suffix;\n    this.outputLen = outputLen;\n    this.enableXOF = enableXOF;\n    this.canXOF = enableXOF;\n    this.rounds = rounds;\n    // Can be passed from user as dkLen\n    anumber(outputLen, 'outputLen');\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    // 0 < blockLen < 200\n    if (!(0 < blockLen && blockLen < 200))\n      throw new Error('only keccak-f1600 function is supported');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  clone(): Keccak {\n    return this._cloneInto();\n  }\n  protected keccak(): void {\n    swap32IfBE(this.state32);\n    keccakP(this.state32, this.rounds);\n    swap32IfBE(this.state32);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: TArg<Uint8Array>): this {\n    aexists(this);\n    abytes(data);\n    const { blockLen, state } = this;\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish(): void {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // FIPS 202 appends the SHA3/SHAKE domain-separation suffix before pad10*1.\n    // These byte values already include the first padding bit, while the\n    // final `0x80` below supplies the closing `1` bit in the last rate byte.\n    state[pos] ^= suffix;\n    // If that combined suffix lands in the last rate byte and already sets\n    // bit 7, absorb it first so the final pad10*1 bit can be xored into a\n    // fresh block.\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: TArg<Uint8Array>): TRet<Uint8Array> {\n    aexists(this, false);\n    abytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out as TRet<Uint8Array>;\n  }\n  xofInto(out: TArg<Uint8Array>): TRet<Uint8Array> {\n    // Plain SHA3/Keccak usage with XOF is probably a mistake, but this base\n    // class is also reused by SHAKE/cSHAKE/KMAC/TupleHash/ParallelHash/\n    // TurboSHAKE/KangarooTwelve wrappers that intentionally enable XOF.\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): TRet<Uint8Array> {\n    anumber(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: TArg<Uint8Array>): void {\n    aoutput(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    // `aoutput(...)` allows oversized buffers; digestInto() must fill only the advertised digest.\n    this.writeInto(out.subarray(0, this.outputLen));\n    this.destroy();\n  }\n  digest(): TRet<Uint8Array> {\n    const out = new Uint8Array(this.outputLen);\n    this.digestInto(out);\n    return out as TRet<Uint8Array>;\n  }\n  destroy(): void {\n    this.destroyed = true;\n    clean(this.state);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    // Reused destinations can come from a different rate/capacity variant, so clone must rewrite\n    // the sponge geometry as well as the state words.\n    to.blockLen = blockLen;\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    // Clones must preserve the public capability bit too; `_KMAC` reuses this path and deep clone\n    // tests compare instance fields directly, so leaving `canXOF` behind makes the clone lie.\n    to.canXOF = this.canXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst genKeccak = (\n  suffix: number,\n  blockLen: number,\n  outputLen: number,\n  info: TArg<HashInfo> = {}\n) => createHasher(() => new Keccak(blockLen, suffix, outputLen), info);\n\n/**\n * SHA3-224 hash function.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA3-224.\n * ```ts\n * sha3_224(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha3_224: TRet<CHash> = /* @__PURE__ */ genKeccak(\n  0x06,\n  144,\n  28,\n  /* @__PURE__ */ oidNist(0x07)\n);\n/**\n * SHA3-256 hash function. Different from keccak-256.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA3-256.\n * ```ts\n * sha3_256(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha3_256: TRet<CHash> = /* @__PURE__ */ genKeccak(\n  0x06,\n  136,\n  32,\n  /* @__PURE__ */ oidNist(0x08)\n);\n/**\n * SHA3-384 hash function.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA3-384.\n * ```ts\n * sha3_384(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha3_384: TRet<CHash> = /* @__PURE__ */ genKeccak(\n  0x06,\n  104,\n  48,\n  /* @__PURE__ */ oidNist(0x09)\n);\n/**\n * SHA3-512 hash function.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with SHA3-512.\n * ```ts\n * sha3_512(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const sha3_512: TRet<CHash> = /* @__PURE__ */ genKeccak(\n  0x06,\n  72,\n  64,\n  /* @__PURE__ */ oidNist(0x0a)\n);\n\n/**\n * Keccak-224 hash function.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with Keccak-224.\n * ```ts\n * keccak_224(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const keccak_224: TRet<CHash> = /* @__PURE__ */ genKeccak(0x01, 144, 28);\n/**\n * Keccak-256 hash function. Different from SHA3-256.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with Keccak-256.\n * ```ts\n * keccak_256(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const keccak_256: TRet<CHash> = /* @__PURE__ */ genKeccak(0x01, 136, 32);\n/**\n * Keccak-384 hash function.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with Keccak-384.\n * ```ts\n * keccak_384(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const keccak_384: TRet<CHash> = /* @__PURE__ */ genKeccak(0x01, 104, 48);\n/**\n * Keccak-512 hash function.\n * @param msg - message bytes to hash\n * @returns Digest bytes.\n * @example\n * Hash a message with Keccak-512.\n * ```ts\n * keccak_512(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport const keccak_512: TRet<CHash> = /* @__PURE__ */ genKeccak(0x01, 72, 64);\n\n/** Options for SHAKE XOF. */\nexport type ShakeOpts = {\n  /** Desired number of output bytes. */\n  dkLen?: number;\n};\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number, info: TArg<HashInfo> = {}) =>\n  createHasher<Keccak, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true),\n    info\n  );\n\n/**\n * SHAKE128 XOF with 128-bit security and a 16-byte default output.\n * @param msg - message bytes to hash\n * @param opts - Optional output-length override. See {@link ShakeOpts}.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHAKE128.\n * ```ts\n * shake128(new Uint8Array([97, 98, 99]), { dkLen: 32 });\n * ```\n */\nexport const shake128: TRet<CHashXOF<Keccak, ShakeOpts>> =\n  /* @__PURE__ */\n  genShake(0x1f, 168, 16, /* @__PURE__ */ oidNist(0x0b));\n/**\n * SHAKE256 XOF with 256-bit security and a 32-byte default output.\n * @param msg - message bytes to hash\n * @param opts - Optional output-length override. See {@link ShakeOpts}.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHAKE256.\n * ```ts\n * shake256(new Uint8Array([97, 98, 99]), { dkLen: 64 });\n * ```\n */\nexport const shake256: TRet<CHashXOF<Keccak, ShakeOpts>> =\n  /* @__PURE__ */\n  genShake(0x1f, 136, 32, /* @__PURE__ */ oidNist(0x0c));\n\n/**\n * SHAKE128 XOF with 256-bit output (NIST version).\n * @param msg - message bytes to hash\n * @param opts - Optional output-length override. See {@link ShakeOpts}.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHAKE128 using a 32-byte default output.\n * ```ts\n * shake128_32(new Uint8Array([97, 98, 99]), { dkLen: 32 });\n * ```\n */\nexport const shake128_32: TRet<CHashXOF<Keccak, ShakeOpts>> =\n  /* @__PURE__ */\n  genShake(0x1f, 168, 32, /* @__PURE__ */ oidNist(0x0b));\n/**\n * SHAKE256 XOF with 512-bit output (NIST version).\n * @param msg - message bytes to hash\n * @param opts - Optional output-length override. See {@link ShakeOpts}.\n * @returns Digest bytes.\n * @example\n * Hash a message with SHAKE256 using a 64-byte default output.\n * ```ts\n * shake256_64(new Uint8Array([97, 98, 99]), { dkLen: 64 });\n * ```\n */\nexport const shake256_64: TRet<CHashXOF<Keccak, ShakeOpts>> =\n  /* @__PURE__ */\n  genShake(0x1f, 136, 64, /* @__PURE__ */ oidNist(0x0c));\n", "/**\n * Internal helpers for u64.\n * BigUint64Array is too slow as per 2026, so we implement it using\n * Uint32Array.\n * @privateRemarks TODO: re-check {@link https://issues.chromium.org/issues/42212588}\n * @module\n */\nimport type { TRet } from './utils.ts';\n\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// Split bigint into two 32-bit halves. With `le=true`, returned fields become `{ h: low, l: high\n// }` to match little-endian word order rather than the property names.\nfunction fromBig(\n  n: bigint,\n  le = false\n): {\n  h: number;\n  l: number;\n} {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\n// Split bigint list into `[highWords, lowWords]` when `le=false`; with `le=true`, the first array\n// holds the low halves because `fromBig(...)` swaps the semantic meaning of `h` and `l`.\nfunction split(lst: bigint[], le = false): TRet<Uint32Array[]> {\n  const len = lst.length;\n  let Ah = new Uint32Array(len);\n  let Al = new Uint32Array(len);\n  for (let i = 0; i < len; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al] as TRet<Uint32Array[]>;\n}\n\n// Combine explicit `(high, low)` 32-bit halves into a bigint; `>>> 0` normalizes signed JS\n// bitwise results back to uint32 first, and little-endian callers must swap.\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// High 32-bit half of a 64-bit logical right shift for `s` in `0..31`.\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\n// Low 32-bit half of a 64-bit logical right shift, valid for `s` in `1..31`.\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `1..31`.\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// High 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\n// Low 32-bit half of a 64-bit right rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// High 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped low half.\nconst rotr32H = (_h: number, l: number): number => l;\n// Low 32-bit half of a 64-bit right rotate for `s === 32`; this is just the swapped high half.\nconst rotr32L = (h: number, _l: number): number => h;\n// High 32-bit half of a 64-bit left rotate, valid for `s` in `1..31`.\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\n// Low 32-bit half of a 64-bit left rotate, valid for `s` in `1..31`.\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// High 32-bit half of a 64-bit left rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\n// Low 32-bit half of a 64-bit left rotate, valid for `s` in `33..63`; `32` uses `rotr32*`.\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// Add two split 64-bit words and return the split `{ h, l }` sum.\n// JS uses 32-bit signed integers for bitwise operations, so we cannot simply shift the carry out\n// of the low sum and instead use division.\nfunction add(\n  Ah: number,\n  Al: number,\n  Bh: number,\n  Bl: number\n): {\n  h: number;\n  l: number;\n} {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\n// Unmasked low-word accumulator for 3-way addition; pass the raw result into `add3H(...)`.\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\n// High-word finalize step for 3-way addition; `low` must be the untruncated output of `add3L(...)`.\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 4-way addition; pass the raw result into `add4H(...)`.\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\n// High-word finalize step for 4-way addition; `low` must be the untruncated output of `add4L(...)`.\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\n// Unmasked low-word accumulator for 5-way addition; pass the raw result into `add5H(...)`.\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\n// High-word finalize step for 5-way addition; `low` must be the untruncated output of `add5L(...)`.\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// Canonical grouped namespace for callers that prefer one object.\n// Named exports stay for direct imports.\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// Default export mirrors named `u64` for compatibility with object-style imports.\nexport default u64;\n", "/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/**\n * Bytes API type helpers for old + new TypeScript.\n *\n * TS 5.6 has `Uint8Array`, while TS 5.9+ made it generic `Uint8Array<ArrayBuffer>`.\n * We can't use specific return type, because TS 5.6 will error.\n * We can't use generic return type, because most TS 5.9 software will expect specific type.\n *\n * Maps typed-array input leaves to broad forms.\n * These are compatibility adapters, not ownership guarantees.\n *\n * - `TArg` keeps byte inputs broad.\n * - `TRet` marks byte outputs for TS 5.6 and TS 5.9+ compatibility.\n */\nexport type TypedArg<T> = T extends BigInt64Array\n  ? BigInt64Array\n  : T extends BigUint64Array\n    ? BigUint64Array\n    : T extends Float32Array\n      ? Float32Array\n      : T extends Float64Array\n        ? Float64Array\n        : T extends Int16Array\n          ? Int16Array\n          : T extends Int32Array\n            ? Int32Array\n            : T extends Int8Array\n              ? Int8Array\n              : T extends Uint16Array\n                ? Uint16Array\n                : T extends Uint32Array\n                  ? Uint32Array\n                  : T extends Uint8ClampedArray\n                    ? Uint8ClampedArray\n                    : T extends Uint8Array\n                      ? Uint8Array\n                      : never;\n/** Maps typed-array output leaves to narrow TS-compatible forms. */\nexport type TypedRet<T> = T extends BigInt64Array\n  ? ReturnType<typeof BigInt64Array.of>\n  : T extends BigUint64Array\n    ? ReturnType<typeof BigUint64Array.of>\n    : T extends Float32Array\n      ? ReturnType<typeof Float32Array.of>\n      : T extends Float64Array\n        ? ReturnType<typeof Float64Array.of>\n        : T extends Int16Array\n          ? ReturnType<typeof Int16Array.of>\n          : T extends Int32Array\n            ? ReturnType<typeof Int32Array.of>\n            : T extends Int8Array\n              ? ReturnType<typeof Int8Array.of>\n              : T extends Uint16Array\n                ? ReturnType<typeof Uint16Array.of>\n                : T extends Uint32Array\n                  ? ReturnType<typeof Uint32Array.of>\n                  : T extends Uint8ClampedArray\n                    ? ReturnType<typeof Uint8ClampedArray.of>\n                    : T extends Uint8Array\n                      ? ReturnType<typeof Uint8Array.of>\n                      : never;\n/** Recursively adapts byte-carrying API input types. See {@link TypedArg}. */\nexport type TArg<T> =\n  | T\n  | ([TypedArg<T>] extends [never]\n      ? T extends (...args: infer A) => infer R\n        ? ((...args: { [K in keyof A]: TRet<A[K]> }) => TArg<R>) & {\n            [K in keyof T]: T[K] extends (...args: any) => any ? T[K] : TArg<T[K]>;\n          }\n        : T extends [infer A, ...infer R]\n          ? [TArg<A>, ...{ [K in keyof R]: TArg<R[K]> }]\n          : T extends readonly [infer A, ...infer R]\n            ? readonly [TArg<A>, ...{ [K in keyof R]: TArg<R[K]> }]\n            : T extends (infer A)[]\n              ? TArg<A>[]\n              : T extends readonly (infer A)[]\n                ? readonly TArg<A>[]\n                : T extends Promise<infer A>\n                  ? Promise<TArg<A>>\n                  : T extends object\n                    ? { [K in keyof T]: TArg<T[K]> }\n                    : T\n      : TypedArg<T>);\n/** Recursively adapts byte-carrying API output types. See {@link TypedArg}. */\nexport type TRet<T> = T extends unknown\n  ? T &\n      ([TypedRet<T>] extends [never]\n        ? T extends (...args: infer A) => infer R\n          ? ((...args: { [K in keyof A]: TArg<A[K]> }) => TRet<R>) & {\n              [K in keyof T]: T[K] extends (...args: any) => any ? T[K] : TRet<T[K]>;\n            }\n          : T extends [infer A, ...infer R]\n            ? [TRet<A>, ...{ [K in keyof R]: TRet<R[K]> }]\n            : T extends readonly [infer A, ...infer R]\n              ? readonly [TRet<A>, ...{ [K in keyof R]: TRet<R[K]> }]\n              : T extends (infer A)[]\n                ? TRet<A>[]\n                : T extends readonly (infer A)[]\n                  ? readonly TRet<A>[]\n                  : T extends Promise<infer A>\n                    ? Promise<TRet<A>>\n                    : T extends object\n                      ? { [K in keyof T]: TRet<T[K]> }\n                      : T\n        : TypedRet<T>)\n  : never;\n/**\n * Checks if something is Uint8Array. Be careful: nodejs Buffer will return true.\n * @param a - value to test\n * @returns `true` when the value is a Uint8Array-compatible view.\n * @example\n * Check whether a value is a Uint8Array-compatible view.\n * ```ts\n * isBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function isBytes(a: unknown): a is Uint8Array {\n  // Plain `instanceof Uint8Array` is too strict for some Buffer / proxy / cross-realm cases.\n  // The fallback still requires a real ArrayBuffer view, so plain\n  // JSON-deserialized `{ constructor: ... }` spoofing is rejected, and\n  // `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\n  return (\n    a instanceof Uint8Array ||\n    (ArrayBuffer.isView(a) &&\n      a.constructor.name === 'Uint8Array' &&\n      'BYTES_PER_ELEMENT' in a &&\n      a.BYTES_PER_ELEMENT === 1)\n  );\n}\n\n/**\n * Asserts something is a non-negative integer.\n * @param n - number to validate\n * @param title - label included in thrown errors\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a non-negative integer option.\n * ```ts\n * anumber(32, 'length');\n * ```\n */\nexport function anumber(n: number, title: string = ''): void {\n  if (typeof n !== 'number') {\n    const prefix = title && `\"${title}\" `;\n    throw new TypeError(`${prefix}expected number, got ${typeof n}`);\n  }\n  if (!Number.isSafeInteger(n) || n < 0) {\n    const prefix = title && `\"${title}\" `;\n    throw new RangeError(`${prefix}expected integer >= 0, got ${n}`);\n  }\n}\n\n/**\n * Asserts something is Uint8Array.\n * @param value - value to validate\n * @param length - optional exact length constraint\n * @param title - label included in thrown errors\n * @returns The validated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate that a value is a byte array.\n * ```ts\n * abytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function abytes(\n  value: TArg<Uint8Array>,\n  length?: number,\n  title: string = ''\n): TRet<Uint8Array> {\n  const bytes = isBytes(value);\n  const len = value?.length;\n  const needsLen = length !== undefined;\n  if (!bytes || (needsLen && len !== length)) {\n    const prefix = title && `\"${title}\" `;\n    const ofLen = needsLen ? ` of length ${length}` : '';\n    const got = bytes ? `length=${len}` : `type=${typeof value}`;\n    const message = prefix + 'expected Uint8Array' + ofLen + ', got ' + got;\n    if (!bytes) throw new TypeError(message);\n    throw new RangeError(message);\n  }\n  return value as TRet<Uint8Array>;\n}\n\n/**\n * Copies bytes into a fresh Uint8Array.\n * Buffer-style slices can alias the same backing store, so callers that need ownership should copy.\n * @param bytes - source bytes to clone\n * @returns Freshly allocated copy of `bytes`.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Clone a byte array before mutating it.\n * ```ts\n * const copy = copyBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function copyBytes(bytes: TArg<Uint8Array>): TRet<Uint8Array> {\n  // `Uint8Array.from(...)` would also accept arrays / other typed arrays. Keep this helper strict\n  // because callers use it at byte-validation boundaries before mutating the detached copy.\n  return Uint8Array.from(abytes(bytes)) as TRet<Uint8Array>;\n}\n\n/**\n * Asserts something is a wrapped hash constructor.\n * @param h - hash constructor to validate\n * @throws On wrong argument types or invalid hash wrapper shape. {@link TypeError}\n * @throws On invalid hash metadata ranges or values. {@link RangeError}\n * @throws If the hash metadata allows empty outputs or block sizes. {@link Error}\n * @example\n * Validate a callable hash wrapper.\n * ```ts\n * import { ahash } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * ahash(sha256);\n * ```\n */\nexport function ahash(h: TArg<CHash>): void {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new TypeError('Hash must wrapped by utils.createHasher');\n  anumber(h.outputLen);\n  anumber(h.blockLen);\n  // HMAC and KDF callers treat these as real byte lengths; allowing zero lets fake wrappers pass\n  // validation and can produce empty outputs instead of failing fast.\n  if (h.outputLen < 1) throw new Error('\"outputLen\" must be >= 1');\n  if (h.blockLen < 1) throw new Error('\"blockLen\" must be >= 1');\n}\n\n/**\n * Asserts a hash instance has not been destroyed or finished.\n * @param instance - hash instance to validate\n * @param checkFinished - whether to reject finalized instances\n * @throws If the hash instance has already been destroyed or finalized. {@link Error}\n * @example\n * Validate that a hash instance is still usable.\n * ```ts\n * import { aexists } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aexists(hash);\n * ```\n */\nexport function aexists(instance: any, checkFinished = true): void {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/**\n * Asserts output is a sufficiently-sized byte array.\n * @param out - destination buffer\n * @param instance - hash instance providing output length\n * Oversized buffers are allowed; downstream code only promises to fill the first `outputLen` bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Validate a caller-provided digest buffer.\n * ```ts\n * import { aoutput } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const hash = sha256.create();\n * aoutput(new Uint8Array(hash.outputLen), hash);\n * ```\n */\nexport function aoutput(out: any, instance: any): void {\n  abytes(out, undefined, 'digestInto() output');\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new RangeError('\"digestInto() output\" expected to be of length >=' + min);\n  }\n}\n\n/** Generic type encompassing 8/16/32-byte array views, but not 64-bit variants. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/**\n * Casts a typed array view to Uint8Array.\n * @param arr - source typed array\n * @returns Uint8Array view over the same buffer.\n * @example\n * Reinterpret a typed array as bytes.\n * ```ts\n * u8(new Uint32Array([1, 2]));\n * ```\n */\nexport function u8(arr: TArg<TypedArray>): TRet<Uint8Array> {\n  return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength) as TRet<Uint8Array>;\n}\n\n/**\n * Casts a typed array view to Uint32Array.\n * `arr.byteOffset` must already be 4-byte aligned or the platform\n * Uint32Array constructor will throw.\n * @param arr - source typed array\n * @returns Uint32Array view over the same buffer.\n * @example\n * Reinterpret a byte array as 32-bit words.\n * ```ts\n * u32(new Uint8Array(8));\n * ```\n */\nexport function u32(arr: TArg<TypedArray>): TRet<Uint32Array> {\n  return new Uint32Array(\n    arr.buffer,\n    arr.byteOffset,\n    Math.floor(arr.byteLength / 4)\n  ) as TRet<Uint32Array>;\n}\n\n/**\n * Zeroizes typed arrays in place. Warning: JS provides no guarantees.\n * @param arrays - arrays to overwrite with zeros\n * @example\n * Zeroize sensitive buffers in place.\n * ```ts\n * clean(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function clean(...arrays: TArg<TypedArray[]>): void {\n  for (let i = 0; i < arrays.length; i++) {\n    arrays[i].fill(0);\n  }\n}\n\n/**\n * Creates a DataView for byte-level manipulation.\n * @param arr - source typed array\n * @returns DataView over the same buffer region.\n * @example\n * Create a DataView over an existing buffer.\n * ```ts\n * createView(new Uint8Array(4));\n * ```\n */\nexport function createView(arr: TArg<TypedArray>): DataView {\n  return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/**\n * Rotate-right operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the right.\n * ```ts\n * rotr(0x12345678, 8);\n * ```\n */\nexport function rotr(word: number, shift: number): number {\n  return (word << (32 - shift)) | (word >>> shift);\n}\n\n/**\n * Rotate-left operation for uint32 values.\n * @param word - source word\n * @param shift - shift amount in bits\n * @returns Rotated word.\n * @example\n * Rotate a 32-bit word to the left.\n * ```ts\n * rotl(0x12345678, 8);\n * ```\n */\nexport function rotl(word: number, shift: number): number {\n  return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Whether the current platform is little-endian. */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n  new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/**\n * Byte-swap operation for uint32 values.\n * @param word - source word\n * @returns Word with reversed byte order.\n * @example\n * Reverse the byte order of a 32-bit word.\n * ```ts\n * byteSwap(0x11223344);\n * ```\n */\nexport function byteSwap(word: number): number {\n  return (\n    ((word << 24) & 0xff000000) |\n    ((word << 8) & 0xff0000) |\n    ((word >>> 8) & 0xff00) |\n    ((word >>> 24) & 0xff)\n  );\n}\n/**\n * Conditionally byte-swaps one 32-bit word on big-endian platforms.\n * @param n - source word\n * @returns Original or byte-swapped word depending on platform endianness.\n * @example\n * Normalize a 32-bit word for host endianness.\n * ```ts\n * swap8IfBE(0x11223344);\n * ```\n */\nexport const swap8IfBE: (n: number) => number = isLE\n  ? (n: number) => n\n  : (n: number) => byteSwap(n) >>> 0;\n\n/**\n * Byte-swaps every word of a Uint32Array in place.\n * @param arr - array to mutate\n * @returns The same array after mutation; callers pass live state arrays here.\n * @example\n * Reverse the byte order of every word in place.\n * ```ts\n * byteSwap32(new Uint32Array([0x11223344]));\n * ```\n */\nexport function byteSwap32(arr: TArg<Uint32Array>): TRet<Uint32Array> {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n  return arr as TRet<Uint32Array>;\n}\n\n/**\n * Conditionally byte-swaps a Uint32Array on big-endian platforms.\n * @param u - array to normalize for host endianness\n * @returns Original or byte-swapped array depending on platform endianness.\n *   On big-endian runtimes this mutates `u` in place via `byteSwap32(...)`.\n * @example\n * Normalize a word array for host endianness.\n * ```ts\n * swap32IfBE(new Uint32Array([0x11223344]));\n * ```\n */\nexport const swap32IfBE: (u: TArg<Uint32Array>) => TRet<Uint32Array> = isLE\n  ? (u: TArg<Uint32Array>) => u as TRet<Uint32Array>\n  : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n  // @ts-ignore\n  typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string.\n * Uses the built-in function when available and assumes it matches the tested\n * fallback semantics.\n * @param bytes - bytes to encode\n * @returns Lowercase hexadecimal string.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Convert bytes to lowercase hexadecimal.\n * ```ts\n * bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])); // 'cafe0123'\n * ```\n */\nexport function bytesToHex(bytes: TArg<Uint8Array>): string {\n  abytes(bytes);\n  // @ts-ignore\n  if (hasHexBuiltin) return bytes.toHex();\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n  if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n  if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n  if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n  return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @param hex - hexadecimal string to decode\n * @returns Decoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * Decode lowercase hexadecimal into bytes.\n * ```ts\n * hexToBytes('cafe0123'); // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n * ```\n */\nexport function hexToBytes(hex: string): TRet<Uint8Array> {\n  if (typeof hex !== 'string') throw new TypeError('hex string expected, got ' + typeof hex);\n  if (hasHexBuiltin) {\n    try {\n      return (Uint8Array as any).fromHex(hex);\n    } catch (error) {\n      if (error instanceof SyntaxError) throw new RangeError(error.message);\n      throw error;\n    }\n  }\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new RangeError('hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new RangeError(\n        'hex string expected, got non-hex character \"' + char + '\" at index ' + hi\n      );\n    }\n    array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n  }\n  return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * This yields to the Promise/microtask scheduler queue, not to timers or the\n * full macrotask event loop.\n * @example\n * Yield to the next scheduler tick.\n * ```ts\n * await nextTick();\n * ```\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/**\n * Returns control to the Promise/microtask scheduler every `tick`\n * milliseconds to avoid blocking long loops.\n * @param iters - number of loop iterations to run\n * @param tick - maximum time slice in milliseconds\n * @param cb - callback executed on each iteration\n * @example\n * Run a loop that periodically yields back to the event loop.\n * ```ts\n * await asyncLoop(2, 0, () => {});\n * ```\n */\nexport async function asyncLoop(\n  iters: number,\n  tick: number,\n  cb: (i: number) => void\n): Promise<void> {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * Non-ASCII details are delegated to the platform `TextEncoder`.\n * @param str - string to encode\n * @returns UTF-8 encoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Encode a string as UTF-8 bytes.\n * ```ts\n * utf8ToBytes('abc'); // Uint8Array.from([97, 98, 99])\n * ```\n */\nexport function utf8ToBytes(str: string): TRet<Uint8Array> {\n  if (typeof str !== 'string') throw new TypeError('string expected');\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes Uint8Array or string.\n * String inputs are UTF-8 encoded; byte-array inputs stay aliased to the caller buffer.\n * @param data - user-provided KDF input\n * @param errorTitle - label included in thrown errors\n * @returns Byte representation of the input.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Normalize KDF input to bytes.\n * ```ts\n * kdfInputToBytes('password');\n * ```\n */\nexport function kdfInputToBytes(data: TArg<KDFInput>, errorTitle = ''): TRet<Uint8Array> {\n  if (typeof data === 'string') return utf8ToBytes(data);\n  return abytes(data, undefined, errorTitle);\n}\n\n/**\n * Copies several Uint8Arrays into one.\n * @param arrays - arrays to concatenate\n * @returns Concatenated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Concatenate multiple byte arrays.\n * ```ts\n * concatBytes(new Uint8Array([1]), new Uint8Array([2]));\n * ```\n */\nexport function concatBytes(...arrays: TArg<Uint8Array[]>): TRet<Uint8Array> {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\ntype EmptyObj = {};\n/**\n * Merges default options and passed options.\n * @param defaults - base option object\n * @param opts - user overrides\n * @returns Merged option object. The merge mutates `defaults` in place.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * Merge user overrides onto default options.\n * ```ts\n * checkOpts({ dkLen: 32 }, { asyncTick: 10 });\n * ```\n */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n    throw new TypeError('options must be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\n/** Common interface for all hash instances. */\nexport interface Hash<T> {\n  /** Bytes processed per compression block. */\n  blockLen: number;\n  /** Bytes produced by `digest()`. */\n  outputLen: number;\n  /** Whether the instance supports XOF-style variable-length output via `xof()` / `xofInto()`. */\n  canXOF: boolean;\n  /**\n   * Absorbs more message bytes into the running hash state.\n   * @param buf - message chunk to absorb\n   * @returns The same hash instance for chaining.\n   */\n  update(buf: TArg<Uint8Array>): this;\n  /**\n   * Finalizes the hash into a caller-provided buffer.\n   * @param buf - destination buffer\n   * @returns Nothing. Implementations write into `buf` in place.\n   */\n  digestInto(buf: TArg<Uint8Array>): void;\n  /**\n   * Finalizes the hash and returns a freshly allocated digest.\n   * @returns Digest bytes.\n   */\n  digest(): TRet<Uint8Array>;\n  /** Wipes internal state and makes the instance unusable. */\n  destroy(): void;\n  /**\n   * Copies the current hash state into an existing or new instance.\n   * @param to - Optional destination instance to reuse.\n   * @returns Cloned hash state.\n   */\n  _cloneInto(to?: T): T;\n  /**\n   * Creates an independent copy of the current hash state.\n   * @returns Cloned hash instance.\n   */\n  clone(): T;\n}\n\n/** Pseudorandom generator interface. */\nexport interface PRG {\n  /**\n   * Mixes more entropy into the generator state.\n   * @param seed - fresh entropy bytes\n   * @returns Nothing. Implementations update internal state in place.\n   */\n  addEntropy(seed: TArg<Uint8Array>): void;\n  /**\n   * Generates pseudorandom output bytes.\n   * @param length - number of bytes to generate\n   * @returns Generated pseudorandom bytes.\n   */\n  randomBytes(length: number): TRet<Uint8Array>;\n  /** Wipes generator state and makes the instance unusable. */\n  clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  /**\n   * Reads more bytes from the XOF stream.\n   * @param bytes - number of bytes to read\n   * @returns Requested digest bytes.\n   */\n  xof(bytes: number): TRet<Uint8Array>;\n  /**\n   * Reads more bytes from the XOF stream into a caller-provided buffer.\n   * @param buf - destination buffer\n   * @returns Filled output buffer.\n   */\n  xofInto(buf: TArg<Uint8Array>): TRet<Uint8Array>;\n};\n\n/** Hash constructor or factory type. */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash metadata. */\nexport type HashInfo = {\n  /** DER-encoded object identifier bytes for the hash algorithm. */\n  oid?: TRet<Uint8Array>;\n};\n/** Callable hash function type. */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n  /** Digest size in bytes. */\n  outputLen: number;\n  /** Input block size in bytes. */\n  blockLen: number;\n  /** Whether `.create()` returns a hash instance that can be used as an XOF stream. */\n  canXOF: boolean;\n} & HashInfo &\n  (Opts extends undefined\n    ? {\n        (msg: TArg<Uint8Array>): TRet<Uint8Array>;\n        create(): T;\n      }\n    : {\n        (msg: TArg<Uint8Array>, opts?: TArg<Opts>): TRet<Uint8Array>;\n        create(opts?: Opts): T;\n      });\n/** Callable extendable-output hash function type. */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/**\n * Creates a callable hash function from a stateful class constructor.\n * @param hashCons - hash constructor or factory\n * @param info - optional metadata such as DER OID\n * @returns Frozen callable hash wrapper with `.create()`.\n *   Wrapper construction eagerly calls `hashCons(undefined)` once to read\n *   `outputLen` / `blockLen`, so constructor side effects happen at module\n *   init time.\n * @example\n * Wrap a stateful hash constructor into a callable helper.\n * ```ts\n * import { createHasher } from '@noble/hashes/utils.js';\n * import { sha256 } from '@noble/hashes/sha2.js';\n * const wrapped = createHasher(sha256.create, { oid: sha256.oid });\n * wrapped(new Uint8Array([1]));\n * ```\n */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n  hashCons: HasherCons<T, Opts>,\n  info: TArg<HashInfo> = {}\n): TRet<CHash<T, Opts>> {\n  const hashC: any = (msg: TArg<Uint8Array>, opts?: TArg<Opts>) =>\n    hashCons(opts as Opts)\n      .update(msg)\n      .digest();\n  const tmp = hashCons(undefined);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.canXOF = tmp.canXOF;\n  hashC.create = (opts?: Opts) => hashCons(opts);\n  Object.assign(hashC, info);\n  return Object.freeze(hashC) as TRet<CHash<T, Opts>>;\n}\n\n/**\n * Cryptographically secure PRNG backed by `crypto.getRandomValues`.\n * @param bytesLength - number of random bytes to generate\n * @returns Random bytes.\n * The platform `getRandomValues()` implementation still defines any\n * single-call length cap, and this helper rejects oversize requests\n * with a stable library `RangeError` instead of host-specific errors.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @throws If the current runtime does not provide `crypto.getRandomValues`. {@link Error}\n * @example\n * Generate a fresh random key or nonce.\n * ```ts\n * const key = randomBytes(16);\n * ```\n */\nexport function randomBytes(bytesLength = 32): TRet<Uint8Array> {\n  // Match the repo's other length-taking helpers instead of relying on Uint8Array coercion.\n  anumber(bytesLength, 'bytesLength');\n  const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n  if (typeof cr?.getRandomValues !== 'function')\n    throw new Error('crypto.getRandomValues must be defined');\n  // Web Cryptography API Level 2 \u00A710.1.1:\n  // if `byteLength > 65536`, throw `QuotaExceededError`.\n  // Keep the guard explicit so callers can see the quota in code\n  // instead of discovering it by reading the spec or host errors.\n  // This wrapper surfaces the same quota as a stable library RangeError.\n  if (bytesLength > 65536)\n    throw new RangeError(`\"bytesLength\" expected <= 65536, got ${bytesLength}`);\n  return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/**\n * Creates OID metadata for NIST hashes with prefix `06 09 60 86 48 01 65 03 04 02`.\n * @param suffix - final OID byte for the selected hash.\n *   The helper accepts any byte even though only the documented NIST hash\n *   suffixes are meaningful downstream.\n * @returns Object containing the DER-encoded OID.\n * @example\n * Build OID metadata for a NIST hash.\n * ```ts\n * oidNist(0x01);\n * ```\n */\nexport const oidNist = (suffix: number): TRet<Required<HashInfo>> => ({\n  // Current NIST hashAlgs suffixes used here fit in one DER subidentifier octet.\n  // Larger suffix values would need base-128 OID encoding and a different length byte.\n  oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n", "/*\r\n *      bignumber.js v9.3.1\r\n *      A JavaScript library for arbitrary-precision arithmetic.\r\n *      https://github.com/MikeMcl/bignumber.js\r\n *      Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *      MIT Licensed.\r\n *\r\n *      BigNumber.prototype methods     |  BigNumber methods\r\n *                                      |\r\n *      absoluteValue            abs    |  clone\r\n *      comparedTo                      |  config               set\r\n *      decimalPlaces            dp     |      DECIMAL_PLACES\r\n *      dividedBy                div    |      ROUNDING_MODE\r\n *      dividedToIntegerBy       idiv   |      EXPONENTIAL_AT\r\n *      exponentiatedBy          pow    |      RANGE\r\n *      integerValue                    |      CRYPTO\r\n *      isEqualTo                eq     |      MODULO_MODE\r\n *      isFinite                        |      POW_PRECISION\r\n *      isGreaterThan            gt     |      FORMAT\r\n *      isGreaterThanOrEqualTo   gte    |      ALPHABET\r\n *      isInteger                       |  isBigNumber\r\n *      isLessThan               lt     |  maximum              max\r\n *      isLessThanOrEqualTo      lte    |  minimum              min\r\n *      isNaN                           |  random\r\n *      isNegative                      |  sum\r\n *      isPositive                      |\r\n *      isZero                          |\r\n *      minus                           |\r\n *      modulo                   mod    |\r\n *      multipliedBy             times  |\r\n *      negated                         |\r\n *      plus                            |\r\n *      precision                sd     |\r\n *      shiftedBy                       |\r\n *      squareRoot               sqrt   |\r\n *      toExponential                   |\r\n *      toFixed                         |\r\n *      toFormat                        |\r\n *      toFraction                      |\r\n *      toJSON                          |\r\n *      toNumber                        |\r\n *      toPrecision                     |\r\n *      toString                        |\r\n *      valueOf                         |\r\n *\r\n */\r\n\r\n\r\nvar\r\n  isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n  mathceil = Math.ceil,\r\n  mathfloor = Math.floor,\r\n\r\n  bignumberError = '[BigNumber Error] ',\r\n  tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n  BASE = 1e14,\r\n  LOG_BASE = 14,\r\n  MAX_SAFE_INTEGER = 0x1fffffffffffff,         // 2^53 - 1\r\n  // MAX_INT32 = 0x7fffffff,                   // 2^31 - 1\r\n  POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n  SQRT_BASE = 1e7,\r\n\r\n  // EDITABLE\r\n  // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n  // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n  MAX = 1E9;                                   // 0 to MAX_INT32\r\n\r\n\r\n/*\r\n * Create and return a BigNumber constructor.\r\n */\r\nfunction clone(configObject) {\r\n  var div, convertBase, parseNumeric,\r\n    P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n    ONE = new BigNumber(1),\r\n\r\n\r\n    //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n    // The default values below must be integers within the inclusive ranges stated.\r\n    // The values can also be changed at run-time using BigNumber.set.\r\n\r\n    // The maximum number of decimal places for operations involving division.\r\n    DECIMAL_PLACES = 20,                     // 0 to MAX\r\n\r\n    // The rounding mode used when rounding to the above decimal places, and when using\r\n    // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n    // UP         0 Away from zero.\r\n    // DOWN       1 Towards zero.\r\n    // CEIL       2 Towards +Infinity.\r\n    // FLOOR      3 Towards -Infinity.\r\n    // HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n    // HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n    // HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n    // HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n    // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n    ROUNDING_MODE = 4,                       // 0 to 8\r\n\r\n    // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n    // The exponent value at and beneath which toString returns exponential notation.\r\n    // Number type: -7\r\n    TO_EXP_NEG = -7,                         // 0 to -MAX\r\n\r\n    // The exponent value at and above which toString returns exponential notation.\r\n    // Number type: 21\r\n    TO_EXP_POS = 21,                         // 0 to MAX\r\n\r\n    // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n    // The minimum exponent value, beneath which underflow to zero occurs.\r\n    // Number type: -324  (5e-324)\r\n    MIN_EXP = -1e7,                          // -1 to -MAX\r\n\r\n    // The maximum exponent value, above which overflow to Infinity occurs.\r\n    // Number type:  308  (1.7976931348623157e+308)\r\n    // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n    MAX_EXP = 1e7,                           // 1 to MAX\r\n\r\n    // Whether to use cryptographically-secure random number generation, if available.\r\n    CRYPTO = false,                          // true or false\r\n\r\n    // The modulo mode used when calculating the modulus: a mod n.\r\n    // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n    // The remainder (r) is calculated as: r = a - n * q.\r\n    //\r\n    // UP        0 The remainder is positive if the dividend is negative, else is negative.\r\n    // DOWN      1 The remainder has the same sign as the dividend.\r\n    //             This modulo mode is commonly known as 'truncated division' and is\r\n    //             equivalent to (a % n) in JavaScript.\r\n    // FLOOR     3 The remainder has the same sign as the divisor (Python %).\r\n    // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n    // EUCLID    9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n    //             The remainder is always positive.\r\n    //\r\n    // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n    // modes are commonly used for the modulus operation.\r\n    // Although the other rounding modes can also be used, they may not give useful results.\r\n    MODULO_MODE = 1,                         // 0 to 9\r\n\r\n    // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n    // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n    POW_PRECISION = 0,                       // 0 to MAX\r\n\r\n    // The format specification used by the BigNumber.prototype.toFormat method.\r\n    FORMAT = {\r\n      prefix: '',\r\n      groupSize: 3,\r\n      secondaryGroupSize: 0,\r\n      groupSeparator: ',',\r\n      decimalSeparator: '.',\r\n      fractionGroupSize: 0,\r\n      fractionGroupSeparator: '\\xA0',        // non-breaking space\r\n      suffix: ''\r\n    },\r\n\r\n    // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n    // '-', '.', whitespace, or repeated character.\r\n    // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n    ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n    alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n  //------------------------------------------------------------------------------------------\r\n\r\n\r\n  // CONSTRUCTOR\r\n\r\n\r\n  /*\r\n   * The BigNumber constructor and exported function.\r\n   * Create and return a new instance of a BigNumber object.\r\n   *\r\n   * v {number|string|BigNumber} A numeric value.\r\n   * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n   */\r\n  function BigNumber(v, b) {\r\n    var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n      x = this;\r\n\r\n    // Enable constructor call without `new`.\r\n    if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n    if (b == null) {\r\n\r\n      if (v && v._isBigNumber === true) {\r\n        x.s = v.s;\r\n\r\n        if (!v.c || v.e > MAX_EXP) {\r\n          x.c = x.e = null;\r\n        } else if (v.e < MIN_EXP) {\r\n          x.c = [x.e = 0];\r\n        } else {\r\n          x.e = v.e;\r\n          x.c = v.c.slice();\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n        // Use `1 / n` to handle minus zero also.\r\n        x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n        // Fast path for integers, where n < 2147483648 (2**31).\r\n        if (v === ~~v) {\r\n          for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n          if (e > MAX_EXP) {\r\n            x.c = x.e = null;\r\n          } else {\r\n            x.e = e;\r\n            x.c = [v];\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        str = String(v);\r\n      } else {\r\n\r\n        if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n        x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n      }\r\n\r\n      // Decimal point?\r\n      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n      // Exponential form?\r\n      if ((i = str.search(/e/i)) > 0) {\r\n\r\n        // Determine exponent.\r\n        if (e < 0) e = i;\r\n        e += +str.slice(i + 1);\r\n        str = str.substring(0, i);\r\n      } else if (e < 0) {\r\n\r\n        // Integer.\r\n        e = str.length;\r\n      }\r\n\r\n    } else {\r\n\r\n      // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n      intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n      // Allow exponential notation to be used with base 10 argument, while\r\n      // also rounding to DECIMAL_PLACES as with other bases.\r\n      if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n        x = new BigNumber(v);\r\n        return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n      }\r\n\r\n      str = String(v);\r\n\r\n      if (isNum = typeof v == 'number') {\r\n\r\n        // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n        if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n        x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n        // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n        if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n          throw Error\r\n           (tooManyDigits + v);\r\n        }\r\n      } else {\r\n        x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n      }\r\n\r\n      alphabet = ALPHABET.slice(0, b);\r\n      e = i = 0;\r\n\r\n      // Check that str is a valid base b number.\r\n      // Don't use RegExp, so alphabet can contain special characters.\r\n      for (len = str.length; i < len; i++) {\r\n        if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n          if (c == '.') {\r\n\r\n            // If '.' is not the first character and it has not be found before.\r\n            if (i > e) {\r\n              e = len;\r\n              continue;\r\n            }\r\n          } else if (!caseChanged) {\r\n\r\n            // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n            if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n                str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n              caseChanged = true;\r\n              i = -1;\r\n              e = 0;\r\n              continue;\r\n            }\r\n          }\r\n\r\n          return parseNumeric(x, String(v), isNum, b);\r\n        }\r\n      }\r\n\r\n      // Prevent later check for length on converted number.\r\n      isNum = false;\r\n      str = convertBase(str, b, 10, x.s);\r\n\r\n      // Decimal point?\r\n      if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n      else e = str.length;\r\n    }\r\n\r\n    // Determine leading zeros.\r\n    for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n    // Determine trailing zeros.\r\n    for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n    if (str = str.slice(i, ++len)) {\r\n      len -= i;\r\n\r\n      // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n      if (isNum && BigNumber.DEBUG &&\r\n        len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n          throw Error\r\n           (tooManyDigits + (x.s * v));\r\n      }\r\n\r\n       // Overflow?\r\n      if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n        // Infinity.\r\n        x.c = x.e = null;\r\n\r\n      // Underflow?\r\n      } else if (e < MIN_EXP) {\r\n\r\n        // Zero.\r\n        x.c = [x.e = 0];\r\n      } else {\r\n        x.e = e;\r\n        x.c = [];\r\n\r\n        // Transform base\r\n\r\n        // e is the base 10 exponent.\r\n        // i is where to slice str to get the first element of the coefficient array.\r\n        i = (e + 1) % LOG_BASE;\r\n        if (e < 0) i += LOG_BASE;  // i < 1\r\n\r\n        if (i < len) {\r\n          if (i) x.c.push(+str.slice(0, i));\r\n\r\n          for (len -= LOG_BASE; i < len;) {\r\n            x.c.push(+str.slice(i, i += LOG_BASE));\r\n          }\r\n\r\n          i = LOG_BASE - (str = str.slice(i)).length;\r\n        } else {\r\n          i -= len;\r\n        }\r\n\r\n        for (; i--; str += '0');\r\n        x.c.push(+str);\r\n      }\r\n    } else {\r\n\r\n      // Zero.\r\n      x.c = [x.e = 0];\r\n    }\r\n  }\r\n\r\n\r\n  // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n  BigNumber.clone = clone;\r\n\r\n  BigNumber.ROUND_UP = 0;\r\n  BigNumber.ROUND_DOWN = 1;\r\n  BigNumber.ROUND_CEIL = 2;\r\n  BigNumber.ROUND_FLOOR = 3;\r\n  BigNumber.ROUND_HALF_UP = 4;\r\n  BigNumber.ROUND_HALF_DOWN = 5;\r\n  BigNumber.ROUND_HALF_EVEN = 6;\r\n  BigNumber.ROUND_HALF_CEIL = 7;\r\n  BigNumber.ROUND_HALF_FLOOR = 8;\r\n  BigNumber.EUCLID = 9;\r\n\r\n\r\n  /*\r\n   * Configure infrequently-changing library-wide settings.\r\n   *\r\n   * Accept an object with the following optional properties (if the value of a property is\r\n   * a number, it must be an integer within the inclusive range stated):\r\n   *\r\n   *   DECIMAL_PLACES   {number}           0 to MAX\r\n   *   ROUNDING_MODE    {number}           0 to 8\r\n   *   EXPONENTIAL_AT   {number|number[]}  -MAX to MAX  or  [-MAX to 0, 0 to MAX]\r\n   *   RANGE            {number|number[]}  -MAX to MAX (not zero)  or  [-MAX to -1, 1 to MAX]\r\n   *   CRYPTO           {boolean}          true or false\r\n   *   MODULO_MODE      {number}           0 to 9\r\n   *   POW_PRECISION       {number}           0 to MAX\r\n   *   ALPHABET         {string}           A string of two or more unique characters which does\r\n   *                                       not contain '.'.\r\n   *   FORMAT           {object}           An object with some of the following properties:\r\n   *     prefix                 {string}\r\n   *     groupSize              {number}\r\n   *     secondaryGroupSize     {number}\r\n   *     groupSeparator         {string}\r\n   *     decimalSeparator       {string}\r\n   *     fractionGroupSize      {number}\r\n   *     fractionGroupSeparator {string}\r\n   *     suffix                 {string}\r\n   *\r\n   * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n   *\r\n   * E.g.\r\n   * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n   *\r\n   * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n   *\r\n   * Return an object with the properties current values.\r\n   */\r\n  BigNumber.config = BigNumber.set = function (obj) {\r\n    var p, v;\r\n\r\n    if (obj != null) {\r\n\r\n      if (typeof obj == 'object') {\r\n\r\n        // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n        // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, MAX, p);\r\n          DECIMAL_PLACES = v;\r\n        }\r\n\r\n        // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n        // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, 8, p);\r\n          ROUNDING_MODE = v;\r\n        }\r\n\r\n        // EXPONENTIAL_AT {number|number[]}\r\n        // Integer, -MAX to MAX inclusive or\r\n        // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n        // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n          v = obj[p];\r\n          if (v && v.pop) {\r\n            intCheck(v[0], -MAX, 0, p);\r\n            intCheck(v[1], 0, MAX, p);\r\n            TO_EXP_NEG = v[0];\r\n            TO_EXP_POS = v[1];\r\n          } else {\r\n            intCheck(v, -MAX, MAX, p);\r\n            TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n          }\r\n        }\r\n\r\n        // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n        // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n        // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n        if (obj.hasOwnProperty(p = 'RANGE')) {\r\n          v = obj[p];\r\n          if (v && v.pop) {\r\n            intCheck(v[0], -MAX, -1, p);\r\n            intCheck(v[1], 1, MAX, p);\r\n            MIN_EXP = v[0];\r\n            MAX_EXP = v[1];\r\n          } else {\r\n            intCheck(v, -MAX, MAX, p);\r\n            if (v) {\r\n              MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n            } else {\r\n              throw Error\r\n               (bignumberError + p + ' cannot be zero: ' + v);\r\n            }\r\n          }\r\n        }\r\n\r\n        // CRYPTO {boolean} true or false.\r\n        // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n        // '[BigNumber Error] crypto unavailable'\r\n        if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n          v = obj[p];\r\n          if (v === !!v) {\r\n            if (v) {\r\n              if (typeof crypto != 'undefined' && crypto &&\r\n               (crypto.getRandomValues || crypto.randomBytes)) {\r\n                CRYPTO = v;\r\n              } else {\r\n                CRYPTO = !v;\r\n                throw Error\r\n                 (bignumberError + 'crypto unavailable');\r\n              }\r\n            } else {\r\n              CRYPTO = v;\r\n            }\r\n          } else {\r\n            throw Error\r\n             (bignumberError + p + ' not true or false: ' + v);\r\n          }\r\n        }\r\n\r\n        // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n        // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, 9, p);\r\n          MODULO_MODE = v;\r\n        }\r\n\r\n        // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n        // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n        if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n          v = obj[p];\r\n          intCheck(v, 0, MAX, p);\r\n          POW_PRECISION = v;\r\n        }\r\n\r\n        // FORMAT {object}\r\n        // '[BigNumber Error] FORMAT not an object: {v}'\r\n        if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n          v = obj[p];\r\n          if (typeof v == 'object') FORMAT = v;\r\n          else throw Error\r\n           (bignumberError + p + ' not an object: ' + v);\r\n        }\r\n\r\n        // ALPHABET {string}\r\n        // '[BigNumber Error] ALPHABET invalid: {v}'\r\n        if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n          v = obj[p];\r\n\r\n          // Disallow if less than two characters,\r\n          // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n          if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n            alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n            ALPHABET = v;\r\n          } else {\r\n            throw Error\r\n             (bignumberError + p + ' invalid: ' + v);\r\n          }\r\n        }\r\n\r\n      } else {\r\n\r\n        // '[BigNumber Error] Object expected: {v}'\r\n        throw Error\r\n         (bignumberError + 'Object expected: ' + obj);\r\n      }\r\n    }\r\n\r\n    return {\r\n      DECIMAL_PLACES: DECIMAL_PLACES,\r\n      ROUNDING_MODE: ROUNDING_MODE,\r\n      EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n      RANGE: [MIN_EXP, MAX_EXP],\r\n      CRYPTO: CRYPTO,\r\n      MODULO_MODE: MODULO_MODE,\r\n      POW_PRECISION: POW_PRECISION,\r\n      FORMAT: FORMAT,\r\n      ALPHABET: ALPHABET\r\n    };\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if v is a BigNumber instance, otherwise return false.\r\n   *\r\n   * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n   *\r\n   * v {any}\r\n   *\r\n   * '[BigNumber Error] Invalid BigNumber: {v}'\r\n   */\r\n  BigNumber.isBigNumber = function (v) {\r\n    if (!v || v._isBigNumber !== true) return false;\r\n    if (!BigNumber.DEBUG) return true;\r\n\r\n    var i, n,\r\n      c = v.c,\r\n      e = v.e,\r\n      s = v.s;\r\n\r\n    out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n      if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n        // If the first element is zero, the BigNumber value must be zero.\r\n        if (c[0] === 0) {\r\n          if (e === 0 && c.length === 1) return true;\r\n          break out;\r\n        }\r\n\r\n        // Calculate number of digits that c[0] should have, based on the exponent.\r\n        i = (e + 1) % LOG_BASE;\r\n        if (i < 1) i += LOG_BASE;\r\n\r\n        // Calculate number of digits of c[0].\r\n        //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n        if (String(c[0]).length == i) {\r\n\r\n          for (i = 0; i < c.length; i++) {\r\n            n = c[i];\r\n            if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n          }\r\n\r\n          // Last element cannot be zero, unless it is the only element.\r\n          if (n !== 0) return true;\r\n        }\r\n      }\r\n\r\n    // Infinity/NaN\r\n    } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n      return true;\r\n    }\r\n\r\n    throw Error\r\n      (bignumberError + 'Invalid BigNumber: ' + v);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the maximum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.maximum = BigNumber.max = function () {\r\n    return maxOrMin(arguments, -1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the minimum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.minimum = BigNumber.min = function () {\r\n    return maxOrMin(arguments, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n   * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n   * zeros are produced).\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n   * '[BigNumber Error] crypto unavailable'\r\n   */\r\n  BigNumber.random = (function () {\r\n    var pow2_53 = 0x20000000000000;\r\n\r\n    // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n    // Check if Math.random() produces more than 32 bits of randomness.\r\n    // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n    // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n    var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n     ? function () { return mathfloor(Math.random() * pow2_53); }\r\n     : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n       (Math.random() * 0x800000 | 0); };\r\n\r\n    return function (dp) {\r\n      var a, b, e, k, v,\r\n        i = 0,\r\n        c = [],\r\n        rand = new BigNumber(ONE);\r\n\r\n      if (dp == null) dp = DECIMAL_PLACES;\r\n      else intCheck(dp, 0, MAX);\r\n\r\n      k = mathceil(dp / LOG_BASE);\r\n\r\n      if (CRYPTO) {\r\n\r\n        // Browsers supporting crypto.getRandomValues.\r\n        if (crypto.getRandomValues) {\r\n\r\n          a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n          for (; i < k;) {\r\n\r\n            // 53 bits:\r\n            // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n            // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n            // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n            //                                     11111 11111111 11111111\r\n            // 0x20000 is 2^21.\r\n            v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n            // Rejection sampling:\r\n            // 0 <= v < 9007199254740992\r\n            // Probability that v >= 9e15, is\r\n            // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n            if (v >= 9e15) {\r\n              b = crypto.getRandomValues(new Uint32Array(2));\r\n              a[i] = b[0];\r\n              a[i + 1] = b[1];\r\n            } else {\r\n\r\n              // 0 <= v <= 8999999999999999\r\n              // 0 <= (v % 1e14) <= 99999999999999\r\n              c.push(v % 1e14);\r\n              i += 2;\r\n            }\r\n          }\r\n          i = k / 2;\r\n\r\n        // Node.js supporting crypto.randomBytes.\r\n        } else if (crypto.randomBytes) {\r\n\r\n          // buffer\r\n          a = crypto.randomBytes(k *= 7);\r\n\r\n          for (; i < k;) {\r\n\r\n            // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n            // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n            // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n            // 0 <= v < 9007199254740992\r\n            v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n               (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n               (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n            if (v >= 9e15) {\r\n              crypto.randomBytes(7).copy(a, i);\r\n            } else {\r\n\r\n              // 0 <= (v % 1e14) <= 99999999999999\r\n              c.push(v % 1e14);\r\n              i += 7;\r\n            }\r\n          }\r\n          i = k / 7;\r\n        } else {\r\n          CRYPTO = false;\r\n          throw Error\r\n           (bignumberError + 'crypto unavailable');\r\n        }\r\n      }\r\n\r\n      // Use Math.random.\r\n      if (!CRYPTO) {\r\n\r\n        for (; i < k;) {\r\n          v = random53bitInt();\r\n          if (v < 9e15) c[i++] = v % 1e14;\r\n        }\r\n      }\r\n\r\n      k = c[--i];\r\n      dp %= LOG_BASE;\r\n\r\n      // Convert trailing digits to zeros according to dp.\r\n      if (k && dp) {\r\n        v = POWS_TEN[LOG_BASE - dp];\r\n        c[i] = mathfloor(k / v) * v;\r\n      }\r\n\r\n      // Remove trailing elements which are zero.\r\n      for (; c[i] === 0; c.pop(), i--);\r\n\r\n      // Zero?\r\n      if (i < 0) {\r\n        c = [e = 0];\r\n      } else {\r\n\r\n        // Remove leading elements which are zero and adjust exponent accordingly.\r\n        for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n        // Count the digits of the first element of c to determine leading zeros, and...\r\n        for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n        // adjust the exponent accordingly.\r\n        if (i < LOG_BASE) e -= LOG_BASE - i;\r\n      }\r\n\r\n      rand.e = e;\r\n      rand.c = c;\r\n      return rand;\r\n    };\r\n  })();\r\n\r\n\r\n   /*\r\n   * Return a BigNumber whose value is the sum of the arguments.\r\n   *\r\n   * arguments {number|string|BigNumber}\r\n   */\r\n  BigNumber.sum = function () {\r\n    var i = 1,\r\n      args = arguments,\r\n      sum = new BigNumber(args[0]);\r\n    for (; i < args.length;) sum = sum.plus(args[i++]);\r\n    return sum;\r\n  };\r\n\r\n\r\n  // PRIVATE FUNCTIONS\r\n\r\n\r\n  // Called by BigNumber and BigNumber.prototype.toString.\r\n  convertBase = (function () {\r\n    var decimal = '0123456789';\r\n\r\n    /*\r\n     * Convert string of baseIn to an array of numbers of baseOut.\r\n     * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n     * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n     */\r\n    function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n      var j,\r\n        arr = [0],\r\n        arrL,\r\n        i = 0,\r\n        len = str.length;\r\n\r\n      for (; i < len;) {\r\n        for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n        arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n        for (j = 0; j < arr.length; j++) {\r\n\r\n          if (arr[j] > baseOut - 1) {\r\n            if (arr[j + 1] == null) arr[j + 1] = 0;\r\n            arr[j + 1] += arr[j] / baseOut | 0;\r\n            arr[j] %= baseOut;\r\n          }\r\n        }\r\n      }\r\n\r\n      return arr.reverse();\r\n    }\r\n\r\n    // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n    // If the caller is toString, we are converting from base 10 to baseOut.\r\n    // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n    return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n      var alphabet, d, e, k, r, x, xc, y,\r\n        i = str.indexOf('.'),\r\n        dp = DECIMAL_PLACES,\r\n        rm = ROUNDING_MODE;\r\n\r\n      // Non-integer.\r\n      if (i >= 0) {\r\n        k = POW_PRECISION;\r\n\r\n        // Unlimited precision.\r\n        POW_PRECISION = 0;\r\n        str = str.replace('.', '');\r\n        y = new BigNumber(baseIn);\r\n        x = y.pow(str.length - i);\r\n        POW_PRECISION = k;\r\n\r\n        // Convert str as if an integer, then restore the fraction part by dividing the\r\n        // result by its base raised to a power.\r\n\r\n        y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n         10, baseOut, decimal);\r\n        y.e = y.c.length;\r\n      }\r\n\r\n      // Convert the number as integer.\r\n\r\n      xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n       ? (alphabet = ALPHABET, decimal)\r\n       : (alphabet = decimal, ALPHABET));\r\n\r\n      // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n      e = k = xc.length;\r\n\r\n      // Remove trailing zeros.\r\n      for (; xc[--k] == 0; xc.pop());\r\n\r\n      // Zero?\r\n      if (!xc[0]) return alphabet.charAt(0);\r\n\r\n      // Does str represent an integer? If so, no need for the division.\r\n      if (i < 0) {\r\n        --e;\r\n      } else {\r\n        x.c = xc;\r\n        x.e = e;\r\n\r\n        // The sign is needed for correct rounding.\r\n        x.s = sign;\r\n        x = div(x, y, dp, rm, baseOut);\r\n        xc = x.c;\r\n        r = x.r;\r\n        e = x.e;\r\n      }\r\n\r\n      // xc now represents str converted to baseOut.\r\n\r\n      // The index of the rounding digit.\r\n      d = e + dp + 1;\r\n\r\n      // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n      i = xc[d];\r\n\r\n      // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n      k = baseOut / 2;\r\n      r = r || d < 0 || xc[d + 1] != null;\r\n\r\n      r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n            : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n             rm == (x.s < 0 ? 8 : 7));\r\n\r\n      // If the index of the rounding digit is not greater than zero, or xc represents\r\n      // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n      // such as 0.00001.\r\n      if (d < 1 || !xc[0]) {\r\n\r\n        // 1^-dp or 0\r\n        str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n      } else {\r\n\r\n        // Truncate xc to the required number of decimal places.\r\n        xc.length = d;\r\n\r\n        // Round up?\r\n        if (r) {\r\n\r\n          // Rounding up may mean the previous digit has to be rounded up and so on.\r\n          for (--baseOut; ++xc[--d] > baseOut;) {\r\n            xc[d] = 0;\r\n\r\n            if (!d) {\r\n              ++e;\r\n              xc = [1].concat(xc);\r\n            }\r\n          }\r\n        }\r\n\r\n        // Determine trailing zeros.\r\n        for (k = xc.length; !xc[--k];);\r\n\r\n        // E.g. [4, 11, 15] becomes 4bf.\r\n        for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n        // Add leading zeros, decimal point and trailing zeros as required.\r\n        str = toFixedPoint(str, e, alphabet.charAt(0));\r\n      }\r\n\r\n      // The caller will add the sign.\r\n      return str;\r\n    };\r\n  })();\r\n\r\n\r\n  // Perform division in the specified base. Called by div and convertBase.\r\n  div = (function () {\r\n\r\n    // Assume non-zero x and k.\r\n    function multiply(x, k, base) {\r\n      var m, temp, xlo, xhi,\r\n        carry = 0,\r\n        i = x.length,\r\n        klo = k % SQRT_BASE,\r\n        khi = k / SQRT_BASE | 0;\r\n\r\n      for (x = x.slice(); i--;) {\r\n        xlo = x[i] % SQRT_BASE;\r\n        xhi = x[i] / SQRT_BASE | 0;\r\n        m = khi * xlo + xhi * klo;\r\n        temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n        carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n        x[i] = temp % base;\r\n      }\r\n\r\n      if (carry) x = [carry].concat(x);\r\n\r\n      return x;\r\n    }\r\n\r\n    function compare(a, b, aL, bL) {\r\n      var i, cmp;\r\n\r\n      if (aL != bL) {\r\n        cmp = aL > bL ? 1 : -1;\r\n      } else {\r\n\r\n        for (i = cmp = 0; i < aL; i++) {\r\n\r\n          if (a[i] != b[i]) {\r\n            cmp = a[i] > b[i] ? 1 : -1;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      return cmp;\r\n    }\r\n\r\n    function subtract(a, b, aL, base) {\r\n      var i = 0;\r\n\r\n      // Subtract b from a.\r\n      for (; aL--;) {\r\n        a[aL] -= i;\r\n        i = a[aL] < b[aL] ? 1 : 0;\r\n        a[aL] = i * base + a[aL] - b[aL];\r\n      }\r\n\r\n      // Remove leading zeros.\r\n      for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n    }\r\n\r\n    // x: dividend, y: divisor.\r\n    return function (x, y, dp, rm, base) {\r\n      var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n        yL, yz,\r\n        s = x.s == y.s ? 1 : -1,\r\n        xc = x.c,\r\n        yc = y.c;\r\n\r\n      // Either NaN, Infinity or 0?\r\n      if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n        return new BigNumber(\r\n\r\n         // Return NaN if either NaN, or both Infinity or 0.\r\n         !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n          // Return \u00B10 if x is \u00B10 or y is \u00B1Infinity, or return \u00B1Infinity as y is \u00B10.\r\n          xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n       );\r\n      }\r\n\r\n      q = new BigNumber(s);\r\n      qc = q.c = [];\r\n      e = x.e - y.e;\r\n      s = dp + e + 1;\r\n\r\n      if (!base) {\r\n        base = BASE;\r\n        e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n        s = s / LOG_BASE | 0;\r\n      }\r\n\r\n      // Result exponent may be one less then the current value of e.\r\n      // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n      for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n      if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n      if (s < 0) {\r\n        qc.push(1);\r\n        more = true;\r\n      } else {\r\n        xL = xc.length;\r\n        yL = yc.length;\r\n        i = 0;\r\n        s += 2;\r\n\r\n        // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n        n = mathfloor(base / (yc[0] + 1));\r\n\r\n        // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n        // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n        if (n > 1) {\r\n          yc = multiply(yc, n, base);\r\n          xc = multiply(xc, n, base);\r\n          yL = yc.length;\r\n          xL = xc.length;\r\n        }\r\n\r\n        xi = yL;\r\n        rem = xc.slice(0, yL);\r\n        remL = rem.length;\r\n\r\n        // Add zeros to make remainder as long as divisor.\r\n        for (; remL < yL; rem[remL++] = 0);\r\n        yz = yc.slice();\r\n        yz = [0].concat(yz);\r\n        yc0 = yc[0];\r\n        if (yc[1] >= base / 2) yc0++;\r\n        // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n        // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n        do {\r\n          n = 0;\r\n\r\n          // Compare divisor and remainder.\r\n          cmp = compare(yc, rem, yL, remL);\r\n\r\n          // If divisor < remainder.\r\n          if (cmp < 0) {\r\n\r\n            // Calculate trial digit, n.\r\n\r\n            rem0 = rem[0];\r\n            if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n            // n is how many times the divisor goes into the current remainder.\r\n            n = mathfloor(rem0 / yc0);\r\n\r\n            //  Algorithm:\r\n            //  product = divisor multiplied by trial digit (n).\r\n            //  Compare product and remainder.\r\n            //  If product is greater than remainder:\r\n            //    Subtract divisor from product, decrement trial digit.\r\n            //  Subtract product from remainder.\r\n            //  If product was less than remainder at the last compare:\r\n            //    Compare new remainder and divisor.\r\n            //    If remainder is greater than divisor:\r\n            //      Subtract divisor from remainder, increment trial digit.\r\n\r\n            if (n > 1) {\r\n\r\n              // n may be > base only when base is 3.\r\n              if (n >= base) n = base - 1;\r\n\r\n              // product = divisor * trial digit.\r\n              prod = multiply(yc, n, base);\r\n              prodL = prod.length;\r\n              remL = rem.length;\r\n\r\n              // Compare product and remainder.\r\n              // If product > remainder then trial digit n too high.\r\n              // n is 1 too high about 5% of the time, and is not known to have\r\n              // ever been more than 1 too high.\r\n              while (compare(prod, rem, prodL, remL) == 1) {\r\n                n--;\r\n\r\n                // Subtract divisor from product.\r\n                subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n                prodL = prod.length;\r\n                cmp = 1;\r\n              }\r\n            } else {\r\n\r\n              // n is 0 or 1, cmp is -1.\r\n              // If n is 0, there is no need to compare yc and rem again below,\r\n              // so change cmp to 1 to avoid it.\r\n              // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n              if (n == 0) {\r\n\r\n                // divisor < remainder, so n must be at least 1.\r\n                cmp = n = 1;\r\n              }\r\n\r\n              // product = divisor\r\n              prod = yc.slice();\r\n              prodL = prod.length;\r\n            }\r\n\r\n            if (prodL < remL) prod = [0].concat(prod);\r\n\r\n            // Subtract product from remainder.\r\n            subtract(rem, prod, remL, base);\r\n            remL = rem.length;\r\n\r\n             // If product was < remainder.\r\n            if (cmp == -1) {\r\n\r\n              // Compare divisor and new remainder.\r\n              // If divisor < new remainder, subtract divisor from remainder.\r\n              // Trial digit n too low.\r\n              // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n              while (compare(yc, rem, yL, remL) < 1) {\r\n                n++;\r\n\r\n                // Subtract divisor from remainder.\r\n                subtract(rem, yL < remL ? yz : yc, remL, base);\r\n                remL = rem.length;\r\n              }\r\n            }\r\n          } else if (cmp === 0) {\r\n            n++;\r\n            rem = [0];\r\n          } // else cmp === 1 and n will be 0\r\n\r\n          // Add the next digit, n, to the result array.\r\n          qc[i++] = n;\r\n\r\n          // Update the remainder.\r\n          if (rem[0]) {\r\n            rem[remL++] = xc[xi] || 0;\r\n          } else {\r\n            rem = [xc[xi]];\r\n            remL = 1;\r\n          }\r\n        } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n        more = rem[0] != null;\r\n\r\n        // Leading zero?\r\n        if (!qc[0]) qc.splice(0, 1);\r\n      }\r\n\r\n      if (base == BASE) {\r\n\r\n        // To calculate q.e, first get the number of digits of qc[0].\r\n        for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n        round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n      // Caller is convertBase.\r\n      } else {\r\n        q.e = e;\r\n        q.r = +more;\r\n      }\r\n\r\n      return q;\r\n    };\r\n  })();\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n   * notation rounded to the specified decimal places or significant digits.\r\n   *\r\n   * n: a BigNumber.\r\n   * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n   * rm: the rounding mode.\r\n   * id: 1 (toExponential) or 2 (toPrecision).\r\n   */\r\n  function format(n, i, rm, id) {\r\n    var c0, e, ne, len, str;\r\n\r\n    if (rm == null) rm = ROUNDING_MODE;\r\n    else intCheck(rm, 0, 8);\r\n\r\n    if (!n.c) return n.toString();\r\n\r\n    c0 = n.c[0];\r\n    ne = n.e;\r\n\r\n    if (i == null) {\r\n      str = coeffToString(n.c);\r\n      str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n       ? toExponential(str, ne)\r\n       : toFixedPoint(str, ne, '0');\r\n    } else {\r\n      n = round(new BigNumber(n), i, rm);\r\n\r\n      // n.e may have changed if the value was rounded up.\r\n      e = n.e;\r\n\r\n      str = coeffToString(n.c);\r\n      len = str.length;\r\n\r\n      // toPrecision returns exponential notation if the number of significant digits\r\n      // specified is less than the number of digits necessary to represent the integer\r\n      // part of the value in fixed-point notation.\r\n\r\n      // Exponential notation.\r\n      if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n        // Append zeros?\r\n        for (; len < i; str += '0', len++);\r\n        str = toExponential(str, e);\r\n\r\n      // Fixed-point notation.\r\n      } else {\r\n        i -= ne + (id === 2 && e > ne);\r\n        str = toFixedPoint(str, e, '0');\r\n\r\n        // Append zeros?\r\n        if (e + 1 > len) {\r\n          if (--i > 0) for (str += '.'; i--; str += '0');\r\n        } else {\r\n          i += e - len;\r\n          if (i > 0) {\r\n            if (e + 1 == len) str += '.';\r\n            for (; i--; str += '0');\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return n.s < 0 && c0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // Handle BigNumber.max and BigNumber.min.\r\n  // If any number is NaN, return NaN.\r\n  function maxOrMin(args, n) {\r\n    var k, y,\r\n      i = 1,\r\n      x = new BigNumber(args[0]);\r\n\r\n    for (; i < args.length; i++) {\r\n      y = new BigNumber(args[i]);\r\n      if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) {\r\n        x = y;\r\n      }\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  /*\r\n   * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n   * Called by minus, plus and times.\r\n   */\r\n  function normalise(n, c, e) {\r\n    var i = 1,\r\n      j = c.length;\r\n\r\n     // Remove trailing zeros.\r\n    for (; !c[--j]; c.pop());\r\n\r\n    // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n    for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n    // Overflow?\r\n    if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n      // Infinity.\r\n      n.c = n.e = null;\r\n\r\n    // Underflow?\r\n    } else if (e < MIN_EXP) {\r\n\r\n      // Zero.\r\n      n.c = [n.e = 0];\r\n    } else {\r\n      n.e = e;\r\n      n.c = c;\r\n    }\r\n\r\n    return n;\r\n  }\r\n\r\n\r\n  // Handle values that fail the validity test in BigNumber.\r\n  parseNumeric = (function () {\r\n    var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n      dotAfter = /^([^.]+)\\.$/,\r\n      dotBefore = /^\\.([^.]+)$/,\r\n      isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n      whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n    return function (x, str, isNum, b) {\r\n      var base,\r\n        s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n      // No exception on \u00B1Infinity or NaN.\r\n      if (isInfinityOrNaN.test(s)) {\r\n        x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n      } else {\r\n        if (!isNum) {\r\n\r\n          // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n          s = s.replace(basePrefix, function (m, p1, p2) {\r\n            base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n            return !b || b == base ? p1 : m;\r\n          });\r\n\r\n          if (b) {\r\n            base = b;\r\n\r\n            // E.g. '1.' to '1', '.1' to '0.1'\r\n            s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n          }\r\n\r\n          if (str != s) return new BigNumber(s, base);\r\n        }\r\n\r\n        // '[BigNumber Error] Not a number: {n}'\r\n        // '[BigNumber Error] Not a base {b} number: {n}'\r\n        if (BigNumber.DEBUG) {\r\n          throw Error\r\n            (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n        }\r\n\r\n        // NaN\r\n        x.s = null;\r\n      }\r\n\r\n      x.c = x.e = null;\r\n    }\r\n  })();\r\n\r\n\r\n  /*\r\n   * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n   * If r is truthy, it is known that there are more digits after the rounding digit.\r\n   */\r\n  function round(x, sd, rm, r) {\r\n    var d, i, j, k, n, ni, rd,\r\n      xc = x.c,\r\n      pows10 = POWS_TEN;\r\n\r\n    // if x is not Infinity or NaN...\r\n    if (xc) {\r\n\r\n      // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n      // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n      // ni is the index of n within x.c.\r\n      // d is the number of digits of n.\r\n      // i is the index of rd within n including leading zeros.\r\n      // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n      out: {\r\n\r\n        // Get the number of digits of the first element of xc.\r\n        for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n        i = sd - d;\r\n\r\n        // If the rounding digit is in the first element of xc...\r\n        if (i < 0) {\r\n          i += LOG_BASE;\r\n          j = sd;\r\n          n = xc[ni = 0];\r\n\r\n          // Get the rounding digit at index j of n.\r\n          rd = mathfloor(n / pows10[d - j - 1] % 10);\r\n        } else {\r\n          ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n          if (ni >= xc.length) {\r\n\r\n            if (r) {\r\n\r\n              // Needed by sqrt.\r\n              for (; xc.length <= ni; xc.push(0));\r\n              n = rd = 0;\r\n              d = 1;\r\n              i %= LOG_BASE;\r\n              j = i - LOG_BASE + 1;\r\n            } else {\r\n              break out;\r\n            }\r\n          } else {\r\n            n = k = xc[ni];\r\n\r\n            // Get the number of digits of n.\r\n            for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n            // Get the index of rd within n.\r\n            i %= LOG_BASE;\r\n\r\n            // Get the index of rd within n, adjusted for leading zeros.\r\n            // The number of leading zeros of n is given by LOG_BASE - d.\r\n            j = i - LOG_BASE + d;\r\n\r\n            // Get the rounding digit at index j of n.\r\n            rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10);\r\n          }\r\n        }\r\n\r\n        r = r || sd < 0 ||\r\n\r\n        // Are there any non-zero digits after the rounding digit?\r\n        // The expression  n % pows10[d - j - 1]  returns all digits of n to the right\r\n        // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n         xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n        r = rm < 4\r\n         ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n         : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n          // Check whether the digit to the left of the rounding digit is odd.\r\n          ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n           rm == (x.s < 0 ? 8 : 7));\r\n\r\n        if (sd < 1 || !xc[0]) {\r\n          xc.length = 0;\r\n\r\n          if (r) {\r\n\r\n            // Convert sd to decimal places.\r\n            sd -= x.e + 1;\r\n\r\n            // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n            xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n            x.e = -sd || 0;\r\n          } else {\r\n\r\n            // Zero.\r\n            xc[0] = x.e = 0;\r\n          }\r\n\r\n          return x;\r\n        }\r\n\r\n        // Remove excess digits.\r\n        if (i == 0) {\r\n          xc.length = ni;\r\n          k = 1;\r\n          ni--;\r\n        } else {\r\n          xc.length = ni + 1;\r\n          k = pows10[LOG_BASE - i];\r\n\r\n          // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n          // j > 0 means i > number of leading zeros of n.\r\n          xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n        }\r\n\r\n        // Round up?\r\n        if (r) {\r\n\r\n          for (; ;) {\r\n\r\n            // If the digit to be rounded up is in the first element of xc...\r\n            if (ni == 0) {\r\n\r\n              // i will be the length of xc[0] before k is added.\r\n              for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n              j = xc[0] += k;\r\n              for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n              // if i != k the length has increased.\r\n              if (i != k) {\r\n                x.e++;\r\n                if (xc[0] == BASE) xc[0] = 1;\r\n              }\r\n\r\n              break;\r\n            } else {\r\n              xc[ni] += k;\r\n              if (xc[ni] != BASE) break;\r\n              xc[ni--] = 0;\r\n              k = 1;\r\n            }\r\n          }\r\n        }\r\n\r\n        // Remove trailing zeros.\r\n        for (i = xc.length; xc[--i] === 0; xc.pop());\r\n      }\r\n\r\n      // Overflow? Infinity.\r\n      if (x.e > MAX_EXP) {\r\n        x.c = x.e = null;\r\n\r\n      // Underflow? Zero.\r\n      } else if (x.e < MIN_EXP) {\r\n        x.c = [x.e = 0];\r\n      }\r\n    }\r\n\r\n    return x;\r\n  }\r\n\r\n\r\n  function valueOf(n) {\r\n    var str,\r\n      e = n.e;\r\n\r\n    if (e === null) return n.toString();\r\n\r\n    str = coeffToString(n.c);\r\n\r\n    str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n      ? toExponential(str, e)\r\n      : toFixedPoint(str, e, '0');\r\n\r\n    return n.s < 0 ? '-' + str : str;\r\n  }\r\n\r\n\r\n  // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n   */\r\n  P.absoluteValue = P.abs = function () {\r\n    var x = new BigNumber(this);\r\n    if (x.s < 0) x.s = 1;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return\r\n   *   1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n   *   -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n   *   0 if they have the same value,\r\n   *   or null if the value of either is NaN.\r\n   */\r\n  P.comparedTo = function (y, b) {\r\n    return compare(this, new BigNumber(y, b));\r\n  };\r\n\r\n\r\n  /*\r\n   * If dp is undefined or null or true or false, return the number of decimal places of the\r\n   * value of this BigNumber, or null if the value of this BigNumber is \u00B1Infinity or NaN.\r\n   *\r\n   * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n   * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n   * ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.decimalPlaces = P.dp = function (dp, rm) {\r\n    var c, n, v,\r\n      x = this;\r\n\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      return round(new BigNumber(x), dp + x.e + 1, rm);\r\n    }\r\n\r\n    if (!(c = x.c)) return null;\r\n    n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n    // Subtract the number of trailing zeros of the last number.\r\n    if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n    if (n < 0) n = 0;\r\n\r\n    return n;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n / 0 = I\r\n   *  n / N = N\r\n   *  n / I = 0\r\n   *  0 / n = 0\r\n   *  0 / 0 = N\r\n   *  0 / N = N\r\n   *  0 / I = 0\r\n   *  N / n = N\r\n   *  N / 0 = N\r\n   *  N / N = N\r\n   *  N / I = N\r\n   *  I / n = I\r\n   *  I / 0 = I\r\n   *  I / N = N\r\n   *  I / I = N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n   * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   */\r\n  P.dividedBy = P.div = function (y, b) {\r\n    return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n   * BigNumber by the value of BigNumber(y, b).\r\n   */\r\n  P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n    return div(this, new BigNumber(y, b), 0, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n   *\r\n   * If m is present, return the result modulo m.\r\n   * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n   *\r\n   * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n   * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n   *\r\n   * n {number|string|BigNumber} The exponent. An integer.\r\n   * [m] {number|string|BigNumber} The modulus.\r\n   *\r\n   * '[BigNumber Error] Exponent not an integer: {n}'\r\n   */\r\n  P.exponentiatedBy = P.pow = function (n, m) {\r\n    var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n      x = this;\r\n\r\n    n = new BigNumber(n);\r\n\r\n    // Allow NaN and \u00B1Infinity, but not other non-integers.\r\n    if (n.c && !n.isInteger()) {\r\n      throw Error\r\n        (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n    }\r\n\r\n    if (m != null) m = new BigNumber(m);\r\n\r\n    // Exponent of MAX_SAFE_INTEGER is 15.\r\n    nIsBig = n.e > 14;\r\n\r\n    // If x is NaN, \u00B1Infinity, \u00B10 or \u00B11, or n is \u00B1Infinity, NaN or \u00B10.\r\n    if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n      // The sign of the result of pow when x is negative depends on the evenness of n.\r\n      // If +n overflows to \u00B1Infinity, the evenness of n would be not be known.\r\n      y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));\r\n      return m ? y.mod(m) : y;\r\n    }\r\n\r\n    nIsNeg = n.s < 0;\r\n\r\n    if (m) {\r\n\r\n      // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n      if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n      isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n      if (isModExp) x = x.mod(m);\r\n\r\n    // Overflow to \u00B1Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n    // Underflow to \u00B10: <=0.79**1e10 or <=0.9999975**1e15.\r\n    } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n      // [1, 240000000]\r\n      ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n      // [80000000000000]  [99999750000000]\r\n      : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n      // If x is negative and n is odd, k = -0, else k = 0.\r\n      k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n      // If x >= 1, k = \u00B1Infinity.\r\n      if (x.e > -1) k = 1 / k;\r\n\r\n      // If n is negative return \u00B10, else return \u00B1Infinity.\r\n      return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n    } else if (POW_PRECISION) {\r\n\r\n      // Truncating each coefficient array to a length of k after each multiplication\r\n      // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n      // i.e. there will be a minimum of 28 guard digits retained.\r\n      k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n    }\r\n\r\n    if (nIsBig) {\r\n      half = new BigNumber(0.5);\r\n      if (nIsNeg) n.s = 1;\r\n      nIsOdd = isOdd(n);\r\n    } else {\r\n      i = Math.abs(+valueOf(n));\r\n      nIsOdd = i % 2;\r\n    }\r\n\r\n    y = new BigNumber(ONE);\r\n\r\n    // Performs 54 loop iterations for n of 9007199254740991.\r\n    for (; ;) {\r\n\r\n      if (nIsOdd) {\r\n        y = y.times(x);\r\n        if (!y.c) break;\r\n\r\n        if (k) {\r\n          if (y.c.length > k) y.c.length = k;\r\n        } else if (isModExp) {\r\n          y = y.mod(m);    //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n        }\r\n      }\r\n\r\n      if (i) {\r\n        i = mathfloor(i / 2);\r\n        if (i === 0) break;\r\n        nIsOdd = i % 2;\r\n      } else {\r\n        n = n.times(half);\r\n        round(n, n.e + 1, 1);\r\n\r\n        if (n.e > 14) {\r\n          nIsOdd = isOdd(n);\r\n        } else {\r\n          i = +valueOf(n);\r\n          if (i === 0) break;\r\n          nIsOdd = i % 2;\r\n        }\r\n      }\r\n\r\n      x = x.times(x);\r\n\r\n      if (k) {\r\n        if (x.c && x.c.length > k) x.c.length = k;\r\n      } else if (isModExp) {\r\n        x = x.mod(m);    //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n      }\r\n    }\r\n\r\n    if (isModExp) return y;\r\n    if (nIsNeg) y = ONE.div(y);\r\n\r\n    return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n   * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n   */\r\n  P.integerValue = function (rm) {\r\n    var n = new BigNumber(this);\r\n    if (rm == null) rm = ROUNDING_MODE;\r\n    else intCheck(rm, 0, 8);\r\n    return round(n, n.e + 1, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isEqualTo = P.eq = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n   */\r\n  P.isFinite = function () {\r\n    return !!this.c;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isGreaterThan = P.gt = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is greater than or equal to the value of\r\n   * BigNumber(y, b), otherwise return false.\r\n   */\r\n  P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n    return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n   */\r\n  P.isInteger = function () {\r\n    return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n   * otherwise return false.\r\n   */\r\n  P.isLessThan = P.lt = function (y, b) {\r\n    return compare(this, new BigNumber(y, b)) < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is less than or equal to the value of\r\n   * BigNumber(y, b), otherwise return false.\r\n   */\r\n  P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n    return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n   */\r\n  P.isNaN = function () {\r\n    return !this.s;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is negative, otherwise return false.\r\n   */\r\n  P.isNegative = function () {\r\n    return this.s < 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is positive, otherwise return false.\r\n   */\r\n  P.isPositive = function () {\r\n    return this.s > 0;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n   */\r\n  P.isZero = function () {\r\n    return !!this.c && this.c[0] == 0;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n - 0 = n\r\n   *  n - N = N\r\n   *  n - I = -I\r\n   *  0 - n = -n\r\n   *  0 - 0 = 0\r\n   *  0 - N = N\r\n   *  0 - I = -I\r\n   *  N - n = N\r\n   *  N - 0 = N\r\n   *  N - N = N\r\n   *  N - I = N\r\n   *  I - n = I\r\n   *  I - 0 = I\r\n   *  I - N = N\r\n   *  I - I = N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n   * BigNumber(y, b).\r\n   */\r\n  P.minus = function (y, b) {\r\n    var i, j, t, xLTy,\r\n      x = this,\r\n      a = x.s;\r\n\r\n    y = new BigNumber(y, b);\r\n    b = y.s;\r\n\r\n    // Either NaN?\r\n    if (!a || !b) return new BigNumber(NaN);\r\n\r\n    // Signs differ?\r\n    if (a != b) {\r\n      y.s = -b;\r\n      return x.plus(y);\r\n    }\r\n\r\n    var xe = x.e / LOG_BASE,\r\n      ye = y.e / LOG_BASE,\r\n      xc = x.c,\r\n      yc = y.c;\r\n\r\n    if (!xe || !ye) {\r\n\r\n      // Either Infinity?\r\n      if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n      // Either zero?\r\n      if (!xc[0] || !yc[0]) {\r\n\r\n        // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n        return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n         // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n         ROUNDING_MODE == 3 ? -0 : 0);\r\n      }\r\n    }\r\n\r\n    xe = bitFloor(xe);\r\n    ye = bitFloor(ye);\r\n    xc = xc.slice();\r\n\r\n    // Determine which is the bigger number.\r\n    if (a = xe - ye) {\r\n\r\n      if (xLTy = a < 0) {\r\n        a = -a;\r\n        t = xc;\r\n      } else {\r\n        ye = xe;\r\n        t = yc;\r\n      }\r\n\r\n      t.reverse();\r\n\r\n      // Prepend zeros to equalise exponents.\r\n      for (b = a; b--; t.push(0));\r\n      t.reverse();\r\n    } else {\r\n\r\n      // Exponents equal. Check digit by digit.\r\n      j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n      for (a = b = 0; b < j; b++) {\r\n\r\n        if (xc[b] != yc[b]) {\r\n          xLTy = xc[b] < yc[b];\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    // x < y? Point xc to the array of the bigger number.\r\n    if (xLTy) {\r\n      t = xc;\r\n      xc = yc;\r\n      yc = t;\r\n      y.s = -y.s;\r\n    }\r\n\r\n    b = (j = yc.length) - (i = xc.length);\r\n\r\n    // Append zeros to xc if shorter.\r\n    // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n    if (b > 0) for (; b--; xc[i++] = 0);\r\n    b = BASE - 1;\r\n\r\n    // Subtract yc from xc.\r\n    for (; j > a;) {\r\n\r\n      if (xc[--j] < yc[j]) {\r\n        for (i = j; i && !xc[--i]; xc[i] = b);\r\n        --xc[i];\r\n        xc[j] += BASE;\r\n      }\r\n\r\n      xc[j] -= yc[j];\r\n    }\r\n\r\n    // Remove leading zeros and adjust exponent accordingly.\r\n    for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n    // Zero?\r\n    if (!xc[0]) {\r\n\r\n      // Following IEEE 754 (2008) 6.3,\r\n      // n - n = +0  but  n - n = -0  when rounding towards -Infinity.\r\n      y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n      y.c = [y.e = 0];\r\n      return y;\r\n    }\r\n\r\n    // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n    // for finite x and y.\r\n    return normalise(y, xc, ye);\r\n  };\r\n\r\n\r\n  /*\r\n   *   n % 0 =  N\r\n   *   n % N =  N\r\n   *   n % I =  n\r\n   *   0 % n =  0\r\n   *  -0 % n = -0\r\n   *   0 % 0 =  N\r\n   *   0 % N =  N\r\n   *   0 % I =  0\r\n   *   N % n =  N\r\n   *   N % 0 =  N\r\n   *   N % N =  N\r\n   *   N % I =  N\r\n   *   I % n =  N\r\n   *   I % 0 =  N\r\n   *   I % N =  N\r\n   *   I % I =  N\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n   * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n   */\r\n  P.modulo = P.mod = function (y, b) {\r\n    var q, s,\r\n      x = this;\r\n\r\n    y = new BigNumber(y, b);\r\n\r\n    // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n    if (!x.c || !y.s || y.c && !y.c[0]) {\r\n      return new BigNumber(NaN);\r\n\r\n    // Return x if y is Infinity or x is zero.\r\n    } else if (!y.c || x.c && !x.c[0]) {\r\n      return new BigNumber(x);\r\n    }\r\n\r\n    if (MODULO_MODE == 9) {\r\n\r\n      // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n      // r = x - qy    where  0 <= r < abs(y)\r\n      s = y.s;\r\n      y.s = 1;\r\n      q = div(x, y, 0, 3);\r\n      y.s = s;\r\n      q.s *= s;\r\n    } else {\r\n      q = div(x, y, 0, MODULO_MODE);\r\n    }\r\n\r\n    y = x.minus(q.times(y));\r\n\r\n    // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n    if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n    return y;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n * 0 = 0\r\n   *  n * N = N\r\n   *  n * I = I\r\n   *  0 * n = 0\r\n   *  0 * 0 = 0\r\n   *  0 * N = N\r\n   *  0 * I = N\r\n   *  N * n = N\r\n   *  N * 0 = N\r\n   *  N * N = N\r\n   *  N * I = N\r\n   *  I * n = I\r\n   *  I * 0 = N\r\n   *  I * N = N\r\n   *  I * I = I\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n   * of BigNumber(y, b).\r\n   */\r\n  P.multipliedBy = P.times = function (y, b) {\r\n    var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n      base, sqrtBase,\r\n      x = this,\r\n      xc = x.c,\r\n      yc = (y = new BigNumber(y, b)).c;\r\n\r\n    // Either NaN, \u00B1Infinity or \u00B10?\r\n    if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n      // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n      if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n        y.c = y.e = y.s = null;\r\n      } else {\r\n        y.s *= x.s;\r\n\r\n        // Return \u00B1Infinity if either is \u00B1Infinity.\r\n        if (!xc || !yc) {\r\n          y.c = y.e = null;\r\n\r\n        // Return \u00B10 if either is \u00B10.\r\n        } else {\r\n          y.c = [0];\r\n          y.e = 0;\r\n        }\r\n      }\r\n\r\n      return y;\r\n    }\r\n\r\n    e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n    y.s *= x.s;\r\n    xcL = xc.length;\r\n    ycL = yc.length;\r\n\r\n    // Ensure xc points to longer array and xcL to its length.\r\n    if (xcL < ycL) {\r\n      zc = xc;\r\n      xc = yc;\r\n      yc = zc;\r\n      i = xcL;\r\n      xcL = ycL;\r\n      ycL = i;\r\n    }\r\n\r\n    // Initialise the result array with zeros.\r\n    for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n    base = BASE;\r\n    sqrtBase = SQRT_BASE;\r\n\r\n    for (i = ycL; --i >= 0;) {\r\n      c = 0;\r\n      ylo = yc[i] % sqrtBase;\r\n      yhi = yc[i] / sqrtBase | 0;\r\n\r\n      for (k = xcL, j = i + k; j > i;) {\r\n        xlo = xc[--k] % sqrtBase;\r\n        xhi = xc[k] / sqrtBase | 0;\r\n        m = yhi * xlo + xhi * ylo;\r\n        xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n        c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n        zc[j--] = xlo % base;\r\n      }\r\n\r\n      zc[j] = c;\r\n    }\r\n\r\n    if (c) {\r\n      ++e;\r\n    } else {\r\n      zc.splice(0, 1);\r\n    }\r\n\r\n    return normalise(y, zc, e);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n   * i.e. multiplied by -1.\r\n   */\r\n  P.negated = function () {\r\n    var x = new BigNumber(this);\r\n    x.s = -x.s || null;\r\n    return x;\r\n  };\r\n\r\n\r\n  /*\r\n   *  n + 0 = n\r\n   *  n + N = N\r\n   *  n + I = I\r\n   *  0 + n = n\r\n   *  0 + 0 = 0\r\n   *  0 + N = N\r\n   *  0 + I = I\r\n   *  N + n = N\r\n   *  N + 0 = N\r\n   *  N + N = N\r\n   *  N + I = N\r\n   *  I + n = I\r\n   *  I + 0 = I\r\n   *  I + N = N\r\n   *  I + I = I\r\n   *\r\n   * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n   * BigNumber(y, b).\r\n   */\r\n  P.plus = function (y, b) {\r\n    var t,\r\n      x = this,\r\n      a = x.s;\r\n\r\n    y = new BigNumber(y, b);\r\n    b = y.s;\r\n\r\n    // Either NaN?\r\n    if (!a || !b) return new BigNumber(NaN);\r\n\r\n    // Signs differ?\r\n     if (a != b) {\r\n      y.s = -b;\r\n      return x.minus(y);\r\n    }\r\n\r\n    var xe = x.e / LOG_BASE,\r\n      ye = y.e / LOG_BASE,\r\n      xc = x.c,\r\n      yc = y.c;\r\n\r\n    if (!xe || !ye) {\r\n\r\n      // Return \u00B1Infinity if either \u00B1Infinity.\r\n      if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n      // Either zero?\r\n      // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n      if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n    }\r\n\r\n    xe = bitFloor(xe);\r\n    ye = bitFloor(ye);\r\n    xc = xc.slice();\r\n\r\n    // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n    if (a = xe - ye) {\r\n      if (a > 0) {\r\n        ye = xe;\r\n        t = yc;\r\n      } else {\r\n        a = -a;\r\n        t = xc;\r\n      }\r\n\r\n      t.reverse();\r\n      for (; a--; t.push(0));\r\n      t.reverse();\r\n    }\r\n\r\n    a = xc.length;\r\n    b = yc.length;\r\n\r\n    // Point xc to the longer array, and b to the shorter length.\r\n    if (a - b < 0) {\r\n      t = yc;\r\n      yc = xc;\r\n      xc = t;\r\n      b = a;\r\n    }\r\n\r\n    // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n    for (a = 0; b;) {\r\n      a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n      xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n    }\r\n\r\n    if (a) {\r\n      xc = [a].concat(xc);\r\n      ++ye;\r\n    }\r\n\r\n    // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n    // ye = MAX_EXP + 1 possible\r\n    return normalise(y, xc, ye);\r\n  };\r\n\r\n\r\n  /*\r\n   * If sd is undefined or null or true or false, return the number of significant digits of\r\n   * the value of this BigNumber, or null if the value of this BigNumber is \u00B1Infinity or NaN.\r\n   * If sd is true include integer-part trailing zeros in the count.\r\n   *\r\n   * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n   * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n   * ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n   *                     boolean: whether to count integer-part trailing zeros: true or false.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n   */\r\n  P.precision = P.sd = function (sd, rm) {\r\n    var c, n, v,\r\n      x = this;\r\n\r\n    if (sd != null && sd !== !!sd) {\r\n      intCheck(sd, 1, MAX);\r\n      if (rm == null) rm = ROUNDING_MODE;\r\n      else intCheck(rm, 0, 8);\r\n\r\n      return round(new BigNumber(x), sd, rm);\r\n    }\r\n\r\n    if (!(c = x.c)) return null;\r\n    v = c.length - 1;\r\n    n = v * LOG_BASE + 1;\r\n\r\n    if (v = c[v]) {\r\n\r\n      // Subtract the number of trailing zeros of the last element.\r\n      for (; v % 10 == 0; v /= 10, n--);\r\n\r\n      // Add the number of digits of the first element.\r\n      for (v = c[0]; v >= 10; v /= 10, n++);\r\n    }\r\n\r\n    if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n    return n;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n   * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n   *\r\n   * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n   */\r\n  P.shiftedBy = function (k) {\r\n    intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n    return this.times('1e' + k);\r\n  };\r\n\r\n\r\n  /*\r\n   *  sqrt(-n) =  N\r\n   *  sqrt(N) =  N\r\n   *  sqrt(-I) =  N\r\n   *  sqrt(I) =  I\r\n   *  sqrt(0) =  0\r\n   *  sqrt(-0) = -0\r\n   *\r\n   * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n   * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n   */\r\n  P.squareRoot = P.sqrt = function () {\r\n    var m, n, r, rep, t,\r\n      x = this,\r\n      c = x.c,\r\n      s = x.s,\r\n      e = x.e,\r\n      dp = DECIMAL_PLACES + 4,\r\n      half = new BigNumber('0.5');\r\n\r\n    // Negative/NaN/Infinity/zero?\r\n    if (s !== 1 || !c || !c[0]) {\r\n      return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n    }\r\n\r\n    // Initial estimate.\r\n    s = Math.sqrt(+valueOf(x));\r\n\r\n    // Math.sqrt underflow/overflow?\r\n    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n    if (s == 0 || s == 1 / 0) {\r\n      n = coeffToString(c);\r\n      if ((n.length + e) % 2 == 0) n += '0';\r\n      s = Math.sqrt(+n);\r\n      e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n      if (s == 1 / 0) {\r\n        n = '5e' + e;\r\n      } else {\r\n        n = s.toExponential();\r\n        n = n.slice(0, n.indexOf('e') + 1) + e;\r\n      }\r\n\r\n      r = new BigNumber(n);\r\n    } else {\r\n      r = new BigNumber(s + '');\r\n    }\r\n\r\n    // Check for zero.\r\n    // r could be zero if MIN_EXP is changed after the this value was created.\r\n    // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n    // coeffToString to throw.\r\n    if (r.c[0]) {\r\n      e = r.e;\r\n      s = e + dp;\r\n      if (s < 3) s = 0;\r\n\r\n      // Newton-Raphson iteration.\r\n      for (; ;) {\r\n        t = r;\r\n        r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n        if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n          // The exponent of r may here be one less than the final result exponent,\r\n          // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n          // are indexed correctly.\r\n          if (r.e < e) --s;\r\n          n = n.slice(s - 3, s + 1);\r\n\r\n          // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n          // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n          // iteration.\r\n          if (n == '9999' || !rep && n == '4999') {\r\n\r\n            // On the first iteration only, check to see if rounding up gives the\r\n            // exact result as the nines may infinitely repeat.\r\n            if (!rep) {\r\n              round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n              if (t.times(t).eq(x)) {\r\n                r = t;\r\n                break;\r\n              }\r\n            }\r\n\r\n            dp += 4;\r\n            s += 4;\r\n            rep = 1;\r\n          } else {\r\n\r\n            // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n            // result. If not, then there are further digits and m will be truthy.\r\n            if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n              // Truncate to the first rounding digit.\r\n              round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n              m = !r.times(r).eq(x);\r\n            }\r\n\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in exponential notation and\r\n   * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.toExponential = function (dp, rm) {\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      dp++;\r\n    }\r\n    return format(this, dp, rm, 1);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n   * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n   *\r\n   * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n   * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   */\r\n  P.toFixed = function (dp, rm) {\r\n    if (dp != null) {\r\n      intCheck(dp, 0, MAX);\r\n      dp = dp + this.e + 1;\r\n    }\r\n    return format(this, dp, rm);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n   * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n   * of the format or FORMAT object (see BigNumber.set).\r\n   *\r\n   * The formatting object may contain some or all of the properties shown below.\r\n   *\r\n   * FORMAT = {\r\n   *   prefix: '',\r\n   *   groupSize: 3,\r\n   *   secondaryGroupSize: 0,\r\n   *   groupSeparator: ',',\r\n   *   decimalSeparator: '.',\r\n   *   fractionGroupSize: 0,\r\n   *   fractionGroupSeparator: '\\xA0',      // non-breaking space\r\n   *   suffix: ''\r\n   * };\r\n   *\r\n   * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   * [format] {object} Formatting options. See FORMAT pbject above.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n   * '[BigNumber Error] Argument not an object: {format}'\r\n   */\r\n  P.toFormat = function (dp, rm, format) {\r\n    var str,\r\n      x = this;\r\n\r\n    if (format == null) {\r\n      if (dp != null && rm && typeof rm == 'object') {\r\n        format = rm;\r\n        rm = null;\r\n      } else if (dp && typeof dp == 'object') {\r\n        format = dp;\r\n        dp = rm = null;\r\n      } else {\r\n        format = FORMAT;\r\n      }\r\n    } else if (typeof format != 'object') {\r\n      throw Error\r\n        (bignumberError + 'Argument not an object: ' + format);\r\n    }\r\n\r\n    str = x.toFixed(dp, rm);\r\n\r\n    if (x.c) {\r\n      var i,\r\n        arr = str.split('.'),\r\n        g1 = +format.groupSize,\r\n        g2 = +format.secondaryGroupSize,\r\n        groupSeparator = format.groupSeparator || '',\r\n        intPart = arr[0],\r\n        fractionPart = arr[1],\r\n        isNeg = x.s < 0,\r\n        intDigits = isNeg ? intPart.slice(1) : intPart,\r\n        len = intDigits.length;\r\n\r\n      if (g2) {\r\n        i = g1;\r\n        g1 = g2;\r\n        g2 = i;\r\n        len -= i;\r\n      }\r\n\r\n      if (g1 > 0 && len > 0) {\r\n        i = len % g1 || g1;\r\n        intPart = intDigits.substr(0, i);\r\n        for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n        if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n        if (isNeg) intPart = '-' + intPart;\r\n      }\r\n\r\n      str = fractionPart\r\n       ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n        ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n         '$&' + (format.fractionGroupSeparator || ''))\r\n        : fractionPart)\r\n       : intPart;\r\n    }\r\n\r\n    return (format.prefix || '') + str + (format.suffix || '');\r\n  };\r\n\r\n\r\n  /*\r\n   * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n   * fraction with an integer numerator and an integer denominator.\r\n   * The denominator will be a positive non-zero value less than or equal to the specified\r\n   * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n   * the lowest value necessary to represent the number exactly.\r\n   *\r\n   * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n   *\r\n   * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n   */\r\n  P.toFraction = function (md) {\r\n    var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n      x = this,\r\n      xc = x.c;\r\n\r\n    if (md != null) {\r\n      n = new BigNumber(md);\r\n\r\n      // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n      if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n        throw Error\r\n          (bignumberError + 'Argument ' +\r\n            (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n      }\r\n    }\r\n\r\n    if (!xc) return new BigNumber(x);\r\n\r\n    d = new BigNumber(ONE);\r\n    n1 = d0 = new BigNumber(ONE);\r\n    d1 = n0 = new BigNumber(ONE);\r\n    s = coeffToString(xc);\r\n\r\n    // Determine initial denominator.\r\n    // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n    e = d.e = s.length - x.e - 1;\r\n    d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n    md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n    exp = MAX_EXP;\r\n    MAX_EXP = 1 / 0;\r\n    n = new BigNumber(s);\r\n\r\n    // n0 = d1 = 0\r\n    n0.c[0] = 0;\r\n\r\n    for (; ;)  {\r\n      q = div(n, d, 0, 1);\r\n      d2 = d0.plus(q.times(d1));\r\n      if (d2.comparedTo(md) == 1) break;\r\n      d0 = d1;\r\n      d1 = d2;\r\n      n1 = n0.plus(q.times(d2 = n1));\r\n      n0 = d2;\r\n      d = n.minus(q.times(d2 = d));\r\n      n = d2;\r\n    }\r\n\r\n    d2 = div(md.minus(d0), d1, 0, 1);\r\n    n0 = n0.plus(d2.times(n1));\r\n    d0 = d0.plus(d2.times(d1));\r\n    n0.s = n1.s = x.s;\r\n    e = e * 2;\r\n\r\n    // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n    r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n        div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n    MAX_EXP = exp;\r\n\r\n    return r;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return the value of this BigNumber converted to a number primitive.\r\n   */\r\n  P.toNumber = function () {\r\n    return +valueOf(this);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n   * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n   * necessary to represent the integer part of the value in fixed-point notation, then use\r\n   * exponential notation.\r\n   *\r\n   * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n   *\r\n   * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n   */\r\n  P.toPrecision = function (sd, rm) {\r\n    if (sd != null) intCheck(sd, 1, MAX);\r\n    return format(this, sd, rm, 2);\r\n  };\r\n\r\n\r\n  /*\r\n   * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n   * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n   * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n   * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n   * TO_EXP_NEG, return exponential notation.\r\n   *\r\n   * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n   *\r\n   * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n   */\r\n  P.toString = function (b) {\r\n    var str,\r\n      n = this,\r\n      s = n.s,\r\n      e = n.e;\r\n\r\n    // Infinity or NaN?\r\n    if (e === null) {\r\n      if (s) {\r\n        str = 'Infinity';\r\n        if (s < 0) str = '-' + str;\r\n      } else {\r\n        str = 'NaN';\r\n      }\r\n    } else {\r\n      if (b == null) {\r\n        str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n         ? toExponential(coeffToString(n.c), e)\r\n         : toFixedPoint(coeffToString(n.c), e, '0');\r\n      } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n        n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n        str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n      } else {\r\n        intCheck(b, 2, ALPHABET.length, 'Base');\r\n        str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n      }\r\n\r\n      if (s < 0 && n.c[0]) str = '-' + str;\r\n    }\r\n\r\n    return str;\r\n  };\r\n\r\n\r\n  /*\r\n   * Return as toString, but do not accept a base argument, and include the minus sign for\r\n   * negative zero.\r\n   */\r\n  P.valueOf = P.toJSON = function () {\r\n    return valueOf(this);\r\n  };\r\n\r\n\r\n  P._isBigNumber = true;\r\n\r\n  P[Symbol.toStringTag] = 'BigNumber';\r\n\r\n  // Node.js v10.12.0+\r\n  P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf;\r\n\r\n  if (configObject != null) BigNumber.set(configObject);\r\n\r\n  return BigNumber;\r\n}\r\n\r\n\r\n// PRIVATE HELPER FUNCTIONS\r\n\r\n// These functions don't need access to variables,\r\n// e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\nfunction bitFloor(n) {\r\n  var i = n | 0;\r\n  return n > 0 || n === i ? i : i - 1;\r\n}\r\n\r\n\r\n// Return a coefficient array as a string of base 10 digits.\r\nfunction coeffToString(a) {\r\n  var s, z,\r\n    i = 1,\r\n    j = a.length,\r\n    r = a[0] + '';\r\n\r\n  for (; i < j;) {\r\n    s = a[i++] + '';\r\n    z = LOG_BASE - s.length;\r\n    for (; z--; s = '0' + s);\r\n    r += s;\r\n  }\r\n\r\n  // Determine trailing zeros.\r\n  for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n  return r.slice(0, j + 1 || 1);\r\n}\r\n\r\n\r\n// Compare the value of BigNumbers x and y.\r\nfunction compare(x, y) {\r\n  var a, b,\r\n    xc = x.c,\r\n    yc = y.c,\r\n    i = x.s,\r\n    j = y.s,\r\n    k = x.e,\r\n    l = y.e;\r\n\r\n  // Either NaN?\r\n  if (!i || !j) return null;\r\n\r\n  a = xc && !xc[0];\r\n  b = yc && !yc[0];\r\n\r\n  // Either zero?\r\n  if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n  // Signs differ?\r\n  if (i != j) return i;\r\n\r\n  a = i < 0;\r\n  b = k == l;\r\n\r\n  // Either Infinity?\r\n  if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n  // Compare exponents.\r\n  if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n  j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n  // Compare digit by digit.\r\n  for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n  // Compare lengths.\r\n  return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n}\r\n\r\n\r\n/*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\nfunction intCheck(n, min, max, name) {\r\n  if (n < min || n > max || n !== mathfloor(n)) {\r\n    throw Error\r\n     (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n       ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n       : ' not a primitive number: ') + String(n));\r\n  }\r\n}\r\n\r\n\r\n// Assumes finite n.\r\nfunction isOdd(n) {\r\n  var k = n.c.length - 1;\r\n  return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n}\r\n\r\n\r\nfunction toExponential(str, e) {\r\n  return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n   (e < 0 ? 'e' : 'e+') + e;\r\n}\r\n\r\n\r\nfunction toFixedPoint(str, e, z) {\r\n  var len, zs;\r\n\r\n  // Negative exponent?\r\n  if (e < 0) {\r\n\r\n    // Prepend zeros.\r\n    for (zs = z + '.'; ++e; zs += z);\r\n    str = zs + str;\r\n\r\n  // Positive exponent\r\n  } else {\r\n    len = str.length;\r\n\r\n    // Append zeros.\r\n    if (++e > len) {\r\n      for (zs = z, e -= len; --e; zs += z);\r\n      str += zs;\r\n    } else if (e < len) {\r\n      str = str.slice(0, e) + '.' + str.slice(e);\r\n    }\r\n  }\r\n\r\n  return str;\r\n}\r\n\r\n\r\n// EXPORT\r\n\r\n\r\nexport var BigNumber = clone();\r\n\r\nexport default BigNumber;\r\n", "import { webcrypto as crypto } from 'node:crypto'\n\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\n\nexport { urlAlphabet } from './url-alphabet/index.js'\n\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\n\nfunction fillPool(bytes) {\n  if (bytes < 0) throw new RangeError('Wrong ID size')\n  try {\n    if (!pool || pool.length < bytes) {\n      pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n      crypto.getRandomValues(pool)\n      poolOffset = 0\n    } else if (poolOffset + bytes > pool.length) {\n      crypto.getRandomValues(pool)\n      poolOffset = 0\n    }\n  } catch (e) {\n    pool = undefined\n    throw e\n  }\n  poolOffset += bytes\n}\n\nexport function random(bytes) {\n  fillPool((bytes |= 0))\n  return pool.subarray(poolOffset - bytes, poolOffset)\n}\n\nexport function customRandom(alphabet, defaultSize, getRandom) {\n  let safeByteCutoff = 256 - (256 % alphabet.length)\n\n  if (safeByteCutoff === 256) {\n    let mask = alphabet.length - 1\n\n    return (size = defaultSize) => {\n      if (!size) return ''\n      let id = ''\n      while (true) {\n        let bytes = getRandom(size)\n        let i = size\n        while (i--) {\n          id += alphabet[bytes[i] & mask]\n          if (id.length >= size) return id\n        }\n      }\n    }\n  }\n\n  let step = Math.ceil((1.6 * 256 * defaultSize) / safeByteCutoff)\n\n  return (size = defaultSize) => {\n    if (!size) return ''\n    let id = ''\n    while (true) {\n      let bytes = getRandom(step)\n      let i = step\n      while (i--) {\n        if (bytes[i] < safeByteCutoff) {\n          id += alphabet[bytes[i] % alphabet.length]\n          if (id.length >= size) return id\n        }\n      }\n    }\n  }\n}\n\nexport function customAlphabet(alphabet, size = 21) {\n  return customRandom(alphabet, size, random)\n}\n\nexport function nanoid(size = 21) {\n  fillPool((size |= 0))\n\n  let id = ''\n  for (let i = poolOffset - size; i < poolOffset; i++) {\n    id += scopedUrlAlphabet[pool[i] & 63]\n  }\n  return id\n}\n", "export let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n", "import crypto from 'node:crypto';\n\n// These values should NEVER change. The values are precisely for\n// generating ULIDs.\nconst B32_CHARACTERS = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nconst ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\"; // Crockford's Base32\nconst ENCODING_LEN = 32; // from ENCODING.length;\nconst MAX_ULID = \"7ZZZZZZZZZZZZZZZZZZZZZZZZZ\";\nconst MIN_ULID = \"00000000000000000000000000\";\nconst RANDOM_LEN = 16;\nconst TIME_LEN = 10;\nconst TIME_MAX = 281474976710655; // from Math.pow(2, 48) - 1;\nconst ULID_REGEX = /^[0-7][0-9a-hjkmnp-tv-zA-HJKMNP-TV-Z]{25}$/;\nconst UUID_REGEX = /^[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$/;\n\nvar ULIDErrorCode;\n(function (ULIDErrorCode) {\n    ULIDErrorCode[\"Base32IncorrectEncoding\"] = \"B32_ENC_INVALID\";\n    ULIDErrorCode[\"DecodeTimeInvalidCharacter\"] = \"DEC_TIME_CHAR\";\n    ULIDErrorCode[\"DecodeTimeValueMalformed\"] = \"DEC_TIME_MALFORMED\";\n    ULIDErrorCode[\"EncodeTimeNegative\"] = \"ENC_TIME_NEG\";\n    ULIDErrorCode[\"EncodeTimeSizeExceeded\"] = \"ENC_TIME_SIZE_EXCEED\";\n    ULIDErrorCode[\"EncodeTimeValueMalformed\"] = \"ENC_TIME_MALFORMED\";\n    ULIDErrorCode[\"PRNGDetectFailure\"] = \"PRNG_DETECT\";\n    ULIDErrorCode[\"ULIDInvalid\"] = \"ULID_INVALID\";\n    ULIDErrorCode[\"Unexpected\"] = \"UNEXPECTED\";\n    ULIDErrorCode[\"UUIDInvalid\"] = \"UUID_INVALID\";\n})(ULIDErrorCode || (ULIDErrorCode = {}));\nclass ULIDError extends Error {\n    constructor(errorCode, message) {\n        super(`${message} (${errorCode})`);\n        this.name = \"ULIDError\";\n        this.code = errorCode;\n    }\n}\n\nfunction randomChar(prng) {\n    let rand = Math.floor(prng() * ENCODING_LEN);\n    if (rand === ENCODING_LEN) {\n        rand = ENCODING_LEN - 1;\n    }\n    return ENCODING.charAt(rand);\n}\nfunction replaceCharAt(str, index, char) {\n    if (index > str.length - 1) {\n        return str;\n    }\n    return str.substr(0, index) + char + str.substr(index + 1);\n}\n\n// Code from https://github.com/devbanana/crockford-base32/blob/develop/src/index.ts\nfunction crockfordEncode(input) {\n    const output = [];\n    let bitsRead = 0;\n    let buffer = 0;\n    const reversedInput = new Uint8Array(input.slice().reverse());\n    for (const byte of reversedInput) {\n        buffer |= byte << bitsRead;\n        bitsRead += 8;\n        while (bitsRead >= 5) {\n            output.unshift(buffer & 0x1f);\n            buffer >>>= 5;\n            bitsRead -= 5;\n        }\n    }\n    if (bitsRead > 0) {\n        output.unshift(buffer & 0x1f);\n    }\n    return output.map(byte => B32_CHARACTERS.charAt(byte)).join(\"\");\n}\nfunction crockfordDecode(input) {\n    const sanitizedInput = input.toUpperCase().split(\"\").reverse().join(\"\");\n    const output = [];\n    let bitsRead = 0;\n    let buffer = 0;\n    for (const character of sanitizedInput) {\n        const byte = B32_CHARACTERS.indexOf(character);\n        if (byte === -1) {\n            throw new Error(`Invalid base 32 character found in string: ${character}`);\n        }\n        buffer |= byte << bitsRead;\n        bitsRead += 5;\n        while (bitsRead >= 8) {\n            output.unshift(buffer & 0xff);\n            buffer >>>= 8;\n            bitsRead -= 8;\n        }\n    }\n    if (bitsRead >= 5 || buffer > 0) {\n        output.unshift(buffer & 0xff);\n    }\n    return new Uint8Array(output);\n}\n/**\n * Fix a ULID's Base32 encoding -\n * i and l (case-insensitive) will be treated as 1 and o (case-insensitive) will be treated as 0.\n * hyphens are ignored during decoding.\n * @param id The ULID\n * @returns The cleaned up ULID\n */\nfunction fixULIDBase32(id) {\n    return id.replace(/i/gi, \"1\").replace(/l/gi, \"1\").replace(/o/gi, \"0\").replace(/-/g, \"\");\n}\nfunction incrementBase32(str) {\n    let done = undefined, index = str.length, char, charIndex, output = str;\n    const maxCharIndex = ENCODING_LEN - 1;\n    while (!done && index-- >= 0) {\n        char = output[index];\n        charIndex = ENCODING.indexOf(char);\n        if (charIndex === -1) {\n            throw new ULIDError(ULIDErrorCode.Base32IncorrectEncoding, \"Incorrectly encoded string\");\n        }\n        if (charIndex === maxCharIndex) {\n            output = replaceCharAt(output, index, ENCODING[0]);\n            continue;\n        }\n        done = replaceCharAt(output, index, ENCODING[charIndex + 1]);\n    }\n    if (typeof done === \"string\") {\n        return done;\n    }\n    throw new ULIDError(ULIDErrorCode.Base32IncorrectEncoding, \"Failed incrementing string\");\n}\n\n/**\n * Decode time from a ULID\n * @param id The ULID\n * @returns The decoded timestamp\n */\nfunction decodeTime(id) {\n    if (id.length !== TIME_LEN + RANDOM_LEN) {\n        throw new ULIDError(ULIDErrorCode.DecodeTimeValueMalformed, \"Malformed ULID\");\n    }\n    const time = id\n        .substr(0, TIME_LEN)\n        .toUpperCase()\n        .split(\"\")\n        .reverse()\n        .reduce((carry, char, index) => {\n        const encodingIndex = ENCODING.indexOf(char);\n        if (encodingIndex === -1) {\n            throw new ULIDError(ULIDErrorCode.DecodeTimeInvalidCharacter, `Time decode error: Invalid character: ${char}`);\n        }\n        return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));\n    }, 0);\n    if (time > TIME_MAX) {\n        throw new ULIDError(ULIDErrorCode.DecodeTimeValueMalformed, `Malformed ULID: timestamp too large: ${time}`);\n    }\n    return time;\n}\n/**\n * Detect the best PRNG (pseudo-random number generator)\n * @param root The root to check from (global/window)\n * @returns The PRNG function\n */\nfunction detectPRNG(root) {\n    const rootLookup = detectRoot();\n    const globalCrypto = (rootLookup && (rootLookup.crypto || rootLookup.msCrypto)) ||\n        (typeof crypto !== \"undefined\" ? crypto : null);\n    if (typeof globalCrypto?.getRandomValues === \"function\") {\n        return () => {\n            const buffer = new Uint8Array(1);\n            globalCrypto.getRandomValues(buffer);\n            return buffer[0] / 0xff;\n        };\n    }\n    else if (typeof globalCrypto?.randomBytes === \"function\") {\n        return () => globalCrypto.randomBytes(1).readUInt8() / 0xff;\n    }\n    else if (crypto?.randomBytes) {\n        return () => crypto.randomBytes(1).readUInt8() / 0xff;\n    }\n    throw new ULIDError(ULIDErrorCode.PRNGDetectFailure, \"Failed to find a reliable PRNG\");\n}\nfunction detectRoot() {\n    if (inWebWorker())\n        return self;\n    if (typeof window !== \"undefined\") {\n        return window;\n    }\n    if (typeof global !== \"undefined\") {\n        return global;\n    }\n    if (typeof globalThis !== \"undefined\") {\n        return globalThis;\n    }\n    return null;\n}\nfunction encodeRandom(len, prng) {\n    let str = \"\";\n    for (; len > 0; len--) {\n        str = randomChar(prng) + str;\n    }\n    return str;\n}\n/**\n * Encode the time portion of a ULID\n * @param now The current timestamp\n * @param len Length to generate\n * @returns The encoded time\n */\nfunction encodeTime(now, len = TIME_LEN) {\n    if (isNaN(now)) {\n        throw new ULIDError(ULIDErrorCode.EncodeTimeValueMalformed, `Time must be a number: ${now}`);\n    }\n    else if (now > TIME_MAX) {\n        throw new ULIDError(ULIDErrorCode.EncodeTimeSizeExceeded, `Cannot encode a time larger than ${TIME_MAX}: ${now}`);\n    }\n    else if (now < 0) {\n        throw new ULIDError(ULIDErrorCode.EncodeTimeNegative, `Time must be positive: ${now}`);\n    }\n    else if (Number.isInteger(now) === false) {\n        throw new ULIDError(ULIDErrorCode.EncodeTimeValueMalformed, `Time must be an integer: ${now}`);\n    }\n    let mod, str = \"\";\n    for (let currentLen = len; currentLen > 0; currentLen--) {\n        mod = now % ENCODING_LEN;\n        str = ENCODING.charAt(mod) + str;\n        now = (now - mod) / ENCODING_LEN;\n    }\n    return str;\n}\nfunction inWebWorker() {\n    // @ts-ignore\n    return typeof WorkerGlobalScope !== \"undefined\" && self instanceof WorkerGlobalScope;\n}\n/**\n * Check if a ULID is valid\n * @param id The ULID to test\n * @returns True if valid, false otherwise\n * @example\n *   isValid(\"01HNZX8JGFACFA36RBXDHEQN6E\"); // true\n *   isValid(\"\"); // false\n */\nfunction isValid(id) {\n    return (typeof id === \"string\" &&\n        id.length === TIME_LEN + RANDOM_LEN &&\n        id\n            .toUpperCase()\n            .split(\"\")\n            .every(char => ENCODING.indexOf(char) !== -1));\n}\n/**\n * Create a ULID factory to generate monotonically-increasing\n *  ULIDs\n * @param prng The PRNG to use\n * @returns A ulid factory\n * @example\n *  const ulid = monotonicFactory();\n *  ulid(); // \"01HNZXD07M5CEN5XA66EMZSRZW\"\n */\nfunction monotonicFactory(prng) {\n    const currentPRNG = prng || detectPRNG();\n    let lastTime = 0, lastRandom;\n    return function _ulid(seedTime) {\n        const seed = !seedTime || isNaN(seedTime) ? Date.now() : seedTime;\n        if (seed <= lastTime) {\n            const incrementedRandom = (lastRandom = incrementBase32(lastRandom));\n            return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n        }\n        lastTime = seed;\n        const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, currentPRNG));\n        return encodeTime(seed, TIME_LEN) + newRandom;\n    };\n}\n/**\n * Generate a ULID\n * @param seedTime Optional time seed\n * @param prng Optional PRNG function\n * @returns A ULID string\n * @example\n *  ulid(); // \"01HNZXD07M5CEN5XA66EMZSRZW\"\n */\nfunction ulid(seedTime, prng) {\n    const currentPRNG = prng || detectPRNG();\n    const seed = !seedTime || isNaN(seedTime) ? Date.now() : seedTime;\n    return encodeTime(seed, TIME_LEN) + encodeRandom(RANDOM_LEN, currentPRNG);\n}\n\n/**\n * Convert a ULID to a UUID\n * @param ulid The ULID to convert\n * @returns A UUID string\n */\nfunction ulidToUUID(ulid) {\n    const isValid = ULID_REGEX.test(ulid);\n    if (!isValid) {\n        throw new ULIDError(ULIDErrorCode.ULIDInvalid, `Invalid ULID: ${ulid}`);\n    }\n    const uint8Array = crockfordDecode(ulid);\n    let uuid = Array.from(uint8Array)\n        .map(byte => byte.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n    uuid =\n        uuid.substring(0, 8) +\n            \"-\" +\n            uuid.substring(8, 12) +\n            \"-\" +\n            uuid.substring(12, 16) +\n            \"-\" +\n            uuid.substring(16, 20) +\n            \"-\" +\n            uuid.substring(20);\n    return uuid.toUpperCase();\n}\n/**\n * Convert a UUID to a ULID\n * @param uuid The UUID to convert\n * @returns A ULID string\n */\nfunction uuidToULID(uuid) {\n    const isValid = UUID_REGEX.test(uuid);\n    if (!isValid) {\n        throw new ULIDError(ULIDErrorCode.UUIDInvalid, `Invalid UUID: ${uuid}`);\n    }\n    const bytes = uuid.replace(/-/g, \"\").match(/.{1,2}/g);\n    if (!bytes) {\n        throw new ULIDError(ULIDErrorCode.Unexpected, `Failed parsing UUID bytes: ${uuid}`);\n    }\n    const uint8Array = new Uint8Array(bytes.map(byte => parseInt(byte, 16)));\n    return crockfordEncode(uint8Array);\n}\n\nexport { MAX_ULID, MIN_ULID, TIME_LEN, TIME_MAX, ULIDError, ULIDErrorCode, decodeTime, encodeTime, fixULIDBase32, incrementBase32, isValid, monotonicFactory, ulid, ulidToUUID, uuidToULID };\n", "export { default as MAX } from './max.js';\nexport { default as NIL } from './nil.js';\nexport { default as parse } from './parse.js';\nexport { default as stringify } from './stringify.js';\nexport { default as v1 } from './v1.js';\nexport { default as v1ToV6 } from './v1ToV6.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as v6 } from './v6.js';\nexport { default as v6ToV1 } from './v6ToV1.js';\nexport { default as v7 } from './v7.js';\nexport { default as validate } from './validate.js';\nexport { default as version } from './version.js';\n", "import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!validate(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexport default stringify;\n", "const rnds8 = new Uint8Array(16);\nexport default function rng() {\n    return crypto.getRandomValues(rnds8);\n}\n", "import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n    if (!buf && !options && crypto.randomUUID) {\n        return crypto.randomUUID();\n    }\n    return _v4(options, buf, offset);\n}\nfunction _v4(options, buf, offset) {\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? rng();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = rnds[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(rnds);\n}\nexport default v4;\n", "import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nconst _state = {};\nfunction v7(options, buf, offset) {\n    let bytes;\n    if (options) {\n        bytes = v7Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.seq, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = rng();\n        updateV7State(_state, now, rnds);\n        bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n    }\n    return buf ?? unsafeStringify(bytes);\n}\nexport function updateV7State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.seq ??= 0;\n    if (now > state.msecs) {\n        state.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n        state.msecs = now;\n    }\n    else {\n        state.seq = (state.seq + 1) | 0;\n        if (state.seq === 0) {\n            state.msecs++;\n        }\n    }\n    return state;\n}\nfunction v7Bytes(rnds, msecs, seq, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    seq ??= ((rnds[6] * 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n    buf[offset++] = (msecs / 0x10000000000) & 0xff;\n    buf[offset++] = (msecs / 0x100000000) & 0xff;\n    buf[offset++] = (msecs / 0x1000000) & 0xff;\n    buf[offset++] = (msecs / 0x10000) & 0xff;\n    buf[offset++] = (msecs / 0x100) & 0xff;\n    buf[offset++] = msecs & 0xff;\n    buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n    buf[offset++] = (seq >>> 20) & 0xff;\n    buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n    buf[offset++] = (seq >>> 6) & 0xff;\n    buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03);\n    buf[offset++] = rnds[11];\n    buf[offset++] = rnds[12];\n    buf[offset++] = rnds[13];\n    buf[offset++] = rnds[14];\n    buf[offset++] = rnds[15];\n    return buf;\n}\nexport default v7;\n", "import { InMemoryOps, Pagination } from '../query-plan'\nimport { doKeysMatch } from '../utils'\n\nexport function processRecords(value: unknown, ops: InMemoryOps): unknown {\n  if (value == null) {\n    return value\n  }\n\n  if (typeof value === 'string') {\n    return processRecords(JSON.parse(value), ops)\n  }\n\n  if (Array.isArray(value)) {\n    return processManyRecords(value as Record<string, unknown>[], ops)\n  }\n\n  return processOneRecord(value as Record<string, unknown>, ops)\n}\n\nfunction processOneRecord(record: Record<string, unknown>, ops: InMemoryOps): Record<string, unknown> | null {\n  if (ops.pagination) {\n    const { skip, take, cursor } = ops.pagination\n    if (skip !== null && skip > 0) {\n      return null\n    }\n    if (take === 0) {\n      return null\n    }\n    if (cursor !== null && !doKeysMatch(record, cursor)) {\n      return null\n    }\n  }\n  return processNestedRecords(record, ops.nested)\n}\n\nfunction processNestedRecords(\n  record: Record<string, unknown>,\n  opsMap: Record<string, InMemoryOps>,\n): Record<string, unknown> {\n  for (const [key, ops] of Object.entries(opsMap)) {\n    record[key] = processRecords(record[key], ops)\n  }\n  return record\n}\n\nfunction processManyRecords(records: Record<string, unknown>[], ops: InMemoryOps): Record<string, unknown>[] {\n  if (ops.distinct !== null) {\n    const fields = ops.linkingFields !== null ? [...ops.distinct, ...ops.linkingFields] : ops.distinct\n    records = distinctBy(records, fields)\n  }\n\n  if (ops.pagination) {\n    records = paginate(records, ops.pagination, ops.linkingFields)\n  }\n\n  if (ops.reverse) {\n    records.reverse()\n  }\n\n  if (Object.keys(ops.nested).length === 0) {\n    return records\n  }\n\n  return records.map((record) => processNestedRecords(record, ops.nested))\n}\n\nfunction distinctBy(records: Record<string, unknown>[], fields: string[]): Record<string, unknown>[] {\n  const seen = new Set()\n  const result: Record<string, unknown>[] = []\n  for (const record of records) {\n    const key = getRecordKey(record, fields)\n    if (!seen.has(key)) {\n      seen.add(key)\n      result.push(record)\n    }\n  }\n  return result\n}\n\nfunction paginate(records: {}[], pagination: Pagination, linkingFields: string[] | null): {}[] {\n  if (linkingFields === null) {\n    return paginateSingleList(records, pagination)\n  }\n\n  const groupedByParent = new Map<string, {}[]>()\n  for (const record of records) {\n    const parentKey = getRecordKey(record, linkingFields)\n    if (!groupedByParent.has(parentKey)) {\n      groupedByParent.set(parentKey, [])\n    }\n    groupedByParent.get(parentKey)!.push(record)\n  }\n\n  const groupList = Array.from(groupedByParent.entries())\n  groupList.sort(([aId], [bId]) => (aId < bId ? -1 : aId > bId ? 1 : 0))\n\n  return groupList.flatMap(([, elems]) => paginateSingleList(elems, pagination))\n}\n\nfunction paginateSingleList(list: {}[], { cursor, skip, take }: Pagination): {}[] {\n  const cursorIndex = cursor !== null ? list.findIndex((item) => doKeysMatch(item, cursor)) : 0\n  if (cursorIndex === -1) {\n    return []\n  }\n  const start = cursorIndex + (skip ?? 0)\n  const end = take !== null ? start + take : list.length\n\n  return list.slice(start, end)\n}\n\n/*\n * Generate a key string for a record based on the values of the specified fields.\n */\nexport function getRecordKey(record: {}, fields: readonly string[], mappers?: ((value: unknown) => unknown)[]): string {\n  const array = fields.map((field, index) =>\n    mappers?.[index] ? (record[field] !== null ? mappers[index](record[field]) : null) : record[field],\n  )\n  return JSON.stringify(array)\n}\n", "import { ArgType, SqlQuery } from '@prisma/driver-adapter-utils'\n\nimport {\n  DynamicArgType,\n  type Fragment,\n  isPrismaValueGenerator,\n  isPrismaValuePlaceholder,\n  type PlaceholderFormat,\n  type PrismaValueGenerator,\n  type PrismaValuePlaceholder,\n  type QueryPlanDbQuery,\n} from '../query-plan'\nimport { UserFacingError } from '../user-facing-error'\nimport { appendToArray, assertNever, DeepReadonly } from '../utils'\nimport { GeneratorRegistrySnapshot } from './generators'\nimport { ScopeBindings } from './scope'\n\nexport function renderQuery(\n  dbQuery: DeepReadonly<QueryPlanDbQuery>,\n  scope: ScopeBindings,\n  generators: GeneratorRegistrySnapshot,\n  maxChunkSize?: number,\n): DeepReadonly<SqlQuery>[] {\n  const args = dbQuery.args.map((arg) => evaluateArg(arg, scope, generators))\n\n  switch (dbQuery.type) {\n    case 'rawSql':\n      return [renderRawSql(dbQuery.sql, args, dbQuery.argTypes)]\n    case 'templateSql': {\n      const chunks = dbQuery.chunkable ? chunkParams(dbQuery.fragments, args, maxChunkSize) : [args]\n      return chunks.map((params) => {\n        const rendered = renderTemplateSql(dbQuery.fragments, dbQuery.placeholderFormat, params, dbQuery.argTypes)\n        if (maxChunkSize !== undefined && rendered.args.length > maxChunkSize) {\n          throw new UserFacingError('The query parameter limit supported by your database is exceeded.', 'P2029')\n        }\n        return rendered\n      })\n    }\n    default:\n      assertNever(dbQuery['type'], `Invalid query type`)\n  }\n}\n\nexport function evaluateArg(arg: unknown, scope: ScopeBindings, generators: GeneratorRegistrySnapshot): unknown {\n  while (doesRequireEvaluation(arg)) {\n    if (isPrismaValuePlaceholder(arg)) {\n      const found = scope[arg.prisma__value.name]\n      if (found === undefined) {\n        throw new Error(`Missing value for query variable ${arg.prisma__value.name}`)\n      }\n      if (arg.prisma__value.type === 'DateTime' && typeof found === 'string') {\n        // Convert input datetime strings to Date objects. This is done to prevent issues that\n        // arise when query input values end up being directly compared to values retrieved from\n        // the database. One example of this is a query containing a DateTime cursor value being\n        // used against a DATE MySQL column. The pagination logic doesn't have parameter type\n        // information, therefore it ends up comparing the two datetimes as strings and would yield\n        // false even if the two date datetime strings represent the same Date.\n        arg = new Date(found)\n      } else {\n        arg = found\n      }\n    } else if (isPrismaValueGenerator(arg)) {\n      const { name, args } = arg.prisma__value\n      const generator = generators[name]\n      if (!generator) {\n        throw new Error(`Encountered an unknown generator '${name}'`)\n      }\n      arg = generator.generate(...args.map((arg) => evaluateArg(arg, scope, generators)))\n    } else {\n      assertNever(arg, `Unexpected unevaluated value type: ${arg}`)\n    }\n  }\n\n  if (Array.isArray(arg)) {\n    arg = arg.map((el) => evaluateArg(el, scope, generators))\n  }\n\n  return arg\n}\n\nfunction renderTemplateSql(\n  fragments: DeepReadonly<Fragment[]>,\n  placeholderFormat: PlaceholderFormat,\n  params: unknown[],\n  argTypes: DeepReadonly<DynamicArgType[]>,\n): SqlQuery {\n  let sql = ''\n  const ctx = { placeholderNumber: 1 }\n  const flattenedParams: unknown[] = []\n  const flattenedArgTypes: ArgType[] = []\n\n  for (const fragment of pairFragmentsWithParams(fragments, params, argTypes)) {\n    sql += renderFragment(fragment, placeholderFormat, ctx)\n    if (fragment.type === 'stringChunk') {\n      continue\n    }\n    const fragmentParams = Array.from(flattenedFragmentParams(fragment))\n    const added = fragmentParams.length\n    appendToArray(flattenedParams, fragmentParams)\n\n    if (fragment.argType.arity === 'tuple') {\n      if (added % fragment.argType.elements.length !== 0) {\n        throw new Error(\n          `Malformed query template. Expected the number of parameters to match the tuple arity, but got ${added} parameters for a tuple of arity ${fragment.argType.elements.length}.`,\n        )\n      }\n      // If we have a tuple, we just expand its elements repeatedly.\n      for (let i = 0; i < added / fragment.argType.elements.length; i++) {\n        flattenedArgTypes.push(...fragment.argType.elements)\n      }\n    } else {\n      // If we have a non-tuple, we just expand the single type repeatedly.\n      for (let i = 0; i < added; i++) {\n        flattenedArgTypes.push(fragment.argType)\n      }\n    }\n  }\n\n  return {\n    sql,\n    args: flattenedParams,\n    argTypes: flattenedArgTypes,\n  }\n}\n\nfunction renderFragment<Type extends DeepReadonly<DynamicArgType> | undefined>(\n  fragment: FragmentWithParams<Type>,\n  placeholderFormat: PlaceholderFormat,\n  ctx: { placeholderNumber: number },\n): string {\n  const fragmentType = fragment.type\n  switch (fragmentType) {\n    case 'parameter':\n      return formatPlaceholder(placeholderFormat, ctx.placeholderNumber++)\n\n    case 'stringChunk':\n      return fragment.chunk\n\n    case 'parameterTuple': {\n      const placeholders =\n        fragment.value.length == 0\n          ? 'NULL'\n          : fragment.value\n              .map(() => {\n                const item = formatPlaceholder(placeholderFormat, ctx.placeholderNumber++)\n                return `${fragment.itemPrefix}${item}${fragment.itemSuffix}`\n              })\n              .join(fragment.itemSeparator)\n      return `(${placeholders})`\n    }\n\n    case 'parameterTupleList': {\n      return fragment.value\n        .map((tuple) => {\n          const elements = tuple\n            .map(() => formatPlaceholder(placeholderFormat, ctx.placeholderNumber++))\n            .join(fragment.itemSeparator)\n          return `${fragment.itemPrefix}${elements}${fragment.itemSuffix}`\n        })\n        .join(fragment.groupSeparator)\n    }\n\n    default:\n      assertNever(fragmentType, 'Invalid fragment type')\n  }\n}\n\nfunction formatPlaceholder(placeholderFormat: PlaceholderFormat, placeholderNumber: number): string {\n  return placeholderFormat.hasNumbering ? `${placeholderFormat.prefix}${placeholderNumber}` : placeholderFormat.prefix\n}\n\nfunction renderRawSql(\n  sql: string,\n  args: readonly unknown[],\n  argTypes: DeepReadonly<ArgType[]>,\n): DeepReadonly<SqlQuery> {\n  return {\n    sql,\n    args,\n    argTypes,\n  }\n}\n\nfunction doesRequireEvaluation(param: unknown): param is PrismaValuePlaceholder | PrismaValueGenerator {\n  return isPrismaValuePlaceholder(param) || isPrismaValueGenerator(param)\n}\n\ntype FragmentWithParams<Type extends DeepReadonly<DynamicArgType> | undefined = undefined> = Fragment &\n  (\n    | { type: 'stringChunk' }\n    | { type: 'parameter'; value: unknown; argType: Type }\n    | { type: 'parameterTuple'; value: unknown[]; argType: Type }\n    | { type: 'parameterTupleList'; value: unknown[][]; argType: Type }\n  )\n\nfunction* pairFragmentsWithParams<Types>(\n  fragments: DeepReadonly<Fragment[]>,\n  params: unknown[],\n  argTypes: Types,\n): Generator<\n  FragmentWithParams<Types extends DeepReadonly<DynamicArgType[]> ? DeepReadonly<DynamicArgType> : undefined>\n> {\n  let index = 0\n\n  for (const fragment of fragments) {\n    switch (fragment.type) {\n      case 'parameter': {\n        if (index >= params.length) {\n          throw new Error(`Malformed query template. Fragments attempt to read over ${params.length} parameters.`)\n        }\n\n        yield { ...fragment, value: params[index], argType: argTypes?.[index] }\n        index++\n        break\n      }\n\n      case 'stringChunk': {\n        yield fragment\n        break\n      }\n\n      case 'parameterTuple': {\n        if (index >= params.length) {\n          throw new Error(`Malformed query template. Fragments attempt to read over ${params.length} parameters.`)\n        }\n\n        const value = params[index]\n        yield { ...fragment, value: Array.isArray(value) ? value : [value], argType: argTypes?.[index] }\n        index++\n        break\n      }\n\n      case 'parameterTupleList': {\n        if (index >= params.length) {\n          throw new Error(`Malformed query template. Fragments attempt to read over ${params.length} parameters.`)\n        }\n\n        const value = params[index]\n        if (!Array.isArray(value)) {\n          throw new Error(`Malformed query template. Tuple list expected.`)\n        }\n        if (value.length === 0) {\n          throw new Error(`Malformed query template. Tuple list cannot be empty.`)\n        }\n        for (const tuple of value) {\n          if (!Array.isArray(tuple)) {\n            throw new Error(`Malformed query template. Tuple expected.`)\n          }\n        }\n\n        yield { ...fragment, value, argType: argTypes?.[index] }\n        index++\n        break\n      }\n    }\n  }\n}\n\nfunction* flattenedFragmentParams<Type extends DeepReadonly<DynamicArgType> | undefined>(\n  fragment: FragmentWithParams<Type>,\n): Generator<unknown, undefined, undefined> {\n  switch (fragment.type) {\n    case 'parameter':\n      yield fragment.value\n      break\n    case 'stringChunk':\n      break\n    case 'parameterTuple':\n      yield* fragment.value\n      break\n    case 'parameterTupleList':\n      for (const tuple of fragment.value) {\n        yield* tuple\n      }\n      break\n  }\n}\n\nfunction chunkParams(fragments: DeepReadonly<Fragment[]>, params: unknown[], maxChunkSize?: number): unknown[][] {\n  // Find out the total number of parameters once flattened and what the maximum number of\n  // parameters in a single fragment is.\n  let totalParamCount = 0\n  let maxParamsPerFragment = 0\n  for (const fragment of pairFragmentsWithParams(fragments, params, undefined)) {\n    let paramSize = 0\n    for (const _ of flattenedFragmentParams(fragment)) {\n      void _\n      paramSize++\n    }\n    maxParamsPerFragment = Math.max(maxParamsPerFragment, paramSize)\n    totalParamCount += paramSize\n  }\n\n  let chunkedParams: unknown[][] = [[]]\n  for (const fragment of pairFragmentsWithParams(fragments, params, undefined)) {\n    switch (fragment.type) {\n      case 'parameter': {\n        for (const params of chunkedParams) {\n          params.push(fragment.value)\n        }\n        break\n      }\n\n      case 'stringChunk': {\n        break\n      }\n\n      case 'parameterTuple': {\n        const thisParamCount = fragment.value.length\n        let chunks: unknown[][] = []\n\n        if (\n          maxChunkSize &&\n          // Have we split the parameters into chunks already?\n          chunkedParams.length === 1 &&\n          // Is this the fragment that has the most parameters?\n          thisParamCount === maxParamsPerFragment &&\n          // Do we need chunking to fit the parameters?\n          totalParamCount > maxChunkSize &&\n          // Would chunking enable us to fit the parameters?\n          totalParamCount - thisParamCount < maxChunkSize\n        ) {\n          const availableSize = maxChunkSize - (totalParamCount - thisParamCount)\n          chunks = chunkArray(fragment.value, availableSize)\n        } else {\n          chunks = [fragment.value]\n        }\n\n        chunkedParams = chunkedParams.flatMap((params) => chunks.map((chunk) => [...params, chunk]))\n        break\n      }\n\n      case 'parameterTupleList': {\n        const thisParamCount = fragment.value.reduce((acc, tuple) => acc + tuple.length, 0)\n\n        const completeChunks: unknown[][][] = []\n        let currentChunk: unknown[][] = []\n        let currentChunkParamCount = 0\n\n        for (const tuple of fragment.value) {\n          if (\n            maxChunkSize &&\n            // Have we split the parameters into chunks already?\n            chunkedParams.length === 1 &&\n            // Is this the fragment that has the most parameters?\n            thisParamCount === maxParamsPerFragment &&\n            // Is there anything in the current chunk?\n            currentChunk.length > 0 &&\n            // Will adding this tuple exceed the max chunk size?\n            totalParamCount - thisParamCount + currentChunkParamCount + tuple.length > maxChunkSize\n          ) {\n            completeChunks.push(currentChunk)\n            currentChunk = []\n            currentChunkParamCount = 0\n          }\n          currentChunk.push(tuple)\n          currentChunkParamCount += tuple.length\n        }\n\n        if (currentChunk.length > 0) {\n          completeChunks.push(currentChunk)\n        }\n\n        chunkedParams = chunkedParams.flatMap((params) => completeChunks.map((chunk) => [...params, chunk]))\n        break\n      }\n    }\n  }\n\n  return chunkedParams\n}\n\nfunction chunkArray<T>(array: T[], chunkSize: number): T[][] {\n  const result: T[][] = []\n  for (let i = 0; i < array.length; i += chunkSize) {\n    result.push(array.slice(i, i + chunkSize))\n  }\n  return result\n}\n", "import { ArgType, Arity } from '@prisma/driver-adapter-utils'\n\nexport type PrismaValuePlaceholder = { prisma__type: 'param'; prisma__value: { name: string; type: string } }\n\nexport function isPrismaValuePlaceholder(value: unknown): value is PrismaValuePlaceholder {\n  return typeof value === 'object' && value !== null && value['prisma__type'] === 'param'\n}\n\nexport type PrismaValueGenerator = {\n  prisma__type: 'generatorCall'\n  prisma__value: { name: string; args: PrismaValue[] }\n}\n\nexport function isPrismaValueGenerator(value: unknown): value is PrismaValueGenerator {\n  return typeof value === 'object' && value !== null && value['prisma__type'] === 'generatorCall'\n}\n\nexport type PrismaValue =\n  | string\n  | boolean\n  | number\n  | PrismaValue[]\n  | null\n  | Record<string, unknown>\n  | PrismaValuePlaceholder\n  | PrismaValueGenerator\n\nexport type ResultNode =\n  | {\n      type: 'affectedRows'\n    }\n  | {\n      type: 'object'\n      fields: Record<string, ResultNode>\n      serializedName: string | null\n      skipNulls: boolean\n    }\n  | {\n      type: 'field'\n      dbName: string\n      fieldType: FieldType\n    }\n\nexport type QueryPlanBinding = {\n  name: string\n  expr: QueryPlanNode\n}\n\nexport type QueryPlanDbQuery =\n  | {\n      type: 'rawSql'\n      sql: string\n      args: PrismaValue[]\n      argTypes: ArgType[]\n    }\n  | {\n      type: 'templateSql'\n      fragments: Fragment[]\n      placeholderFormat: PlaceholderFormat\n      args: PrismaValue[]\n      argTypes: DynamicArgType[]\n      chunkable: boolean\n    }\n\nexport type DynamicArgType = ArgType | { arity: 'tuple'; elements: ArgType[] }\n\nexport type Fragment =\n  | { type: 'stringChunk'; chunk: string }\n  | { type: 'parameter' }\n  | {\n      type: 'parameterTuple'\n      itemPrefix: string\n      itemSeparator: string\n      itemSuffix: string\n    }\n  | {\n      type: 'parameterTupleList'\n      itemPrefix: string\n      itemSeparator: string\n      itemSuffix: string\n      groupSeparator: string\n    }\n\nexport interface PlaceholderFormat {\n  prefix: string\n  hasNumbering: boolean\n}\n\nexport type JoinExpression = {\n  child: QueryPlanNode\n  on: [left: string, right: string][]\n  parentField: string\n  isRelationUnique: boolean\n}\n\n/**\n * Query plan nodes that are free of side effects and can be interpreted synchronously\n * without touching the database. The `Rest` parameter controls what other nodes may\n * appear in child positions: with the default `never` the tree is fully pure, while\n * `PureQueryPlanNode<ImpureQueryPlanNode>` describes a tree of pure nodes that may\n * contain impure nodes anywhere inside.\n */\nexport type PureQueryPlanNode<Rest = never> =\n  | {\n      type: 'value'\n      args: PrismaValue\n      /**\n       * Present when this node is the result of evaluating an impure node during\n       * query plan purification. Never produced by the query compiler.\n       */\n      lastInsertId?: string\n    }\n  | {\n      type: 'seq'\n      args: (PureQueryPlanNode<Rest> | Rest)[]\n    }\n  | {\n      type: 'get'\n      args: {\n        name: string\n      }\n    }\n  | {\n      type: 'let'\n      args: {\n        bindings: {\n          name: string\n          expr: PureQueryPlanNode<Rest> | Rest\n        }[]\n        expr: PureQueryPlanNode<Rest> | Rest\n      }\n    }\n  | {\n      type: 'getFirstNonEmpty'\n      args: {\n        names: string[]\n      }\n    }\n  | {\n      type: 'reverse'\n      args: PureQueryPlanNode<Rest> | Rest\n    }\n  | {\n      type: 'sum'\n      args: (PureQueryPlanNode<Rest> | Rest)[]\n    }\n  | {\n      type: 'concat'\n      args: (PureQueryPlanNode<Rest> | Rest)[]\n    }\n  | {\n      type: 'unique'\n      args: PureQueryPlanNode<Rest> | Rest\n    }\n  | {\n      type: 'required'\n      args: PureQueryPlanNode<Rest> | Rest\n    }\n  | {\n      type: 'join'\n      args: {\n        parent: PureQueryPlanNode<Rest> | Rest\n        children: {\n          child: PureQueryPlanNode<Rest> | Rest\n          on: [left: string, right: string][]\n          parentField: string\n          isRelationUnique: boolean\n        }[]\n        canAssumeStrictEquality: boolean\n      }\n    }\n  | {\n      type: 'mapField'\n      args: {\n        field: string\n        records: PureQueryPlanNode<Rest> | Rest\n      }\n    }\n  | {\n      type: 'dataMap'\n      args: {\n        expr: PureQueryPlanNode<Rest> | Rest\n        structure: ResultNode\n        enums: Record<string, Record<string, string>>\n      }\n    }\n  | {\n      type: 'validate'\n      args: {\n        expr: PureQueryPlanNode<Rest> | Rest\n        rules: DataRule[]\n      } & ValidationError\n    }\n  | {\n      type: 'if'\n      args: {\n        value: PureQueryPlanNode<Rest> | Rest\n        rule: DataRule\n        then: PureQueryPlanNode<Rest> | Rest\n        else: PureQueryPlanNode<Rest> | Rest\n      }\n    }\n  | {\n      type: 'unit'\n    }\n  | {\n      type: 'diff'\n      args: {\n        from: PureQueryPlanNode<Rest> | Rest\n        to: PureQueryPlanNode<Rest> | Rest\n        fields: string[]\n      }\n    }\n  | {\n      type: 'initializeRecord'\n      args: {\n        expr: PureQueryPlanNode<Rest> | Rest\n        fields: Record<string, FieldInitializer>\n      }\n    }\n  | {\n      type: 'mapRecord'\n      args: {\n        expr: PureQueryPlanNode<Rest> | Rest\n        fields: Record<string, FieldOperation>\n      }\n    }\n  | {\n      type: 'process'\n      args: {\n        expr: PureQueryPlanNode<Rest> | Rest\n        operations: InMemoryOps\n      }\n    }\n\n/**\n * Query plan nodes that perform database I/O: individual queries and statements,\n * and subtrees executed within a transaction.\n */\nexport type ImpureQueryPlanNode =\n  | {\n      type: 'query'\n      args: QueryPlanDbQuery\n    }\n  | {\n      type: 'execute'\n      args: QueryPlanDbQuery\n    }\n  | {\n      type: 'transaction'\n      args: QueryPlanNode\n    }\n\n/**\n * A query plan as emitted by the query compiler: a tree of pure nodes that may\n * contain impure nodes anywhere inside.\n */\nexport type QueryPlanNode = ImpureQueryPlanNode | PureQueryPlanNode<ImpureQueryPlanNode>\n\nexport type FieldInitializer = { type: 'value'; value: PrismaValue } | { type: 'lastInsertId' }\n\nexport type FieldOperation =\n  | { type: 'set'; value: PrismaValue }\n  | { type: 'add'; value: PrismaValue }\n  | { type: 'subtract'; value: PrismaValue }\n  | { type: 'multiply'; value: PrismaValue }\n  | { type: 'divide'; value: PrismaValue }\n\nexport type Pagination = {\n  cursor: Record<string, unknown> | null\n  take: number | null\n  skip: number | null\n}\n\nexport type InMemoryOps = {\n  pagination: Pagination | null\n  distinct: string[] | null\n  reverse: boolean\n  linkingFields: string[] | null\n  nested: Record<string, InMemoryOps>\n}\n\nexport type DataRule =\n  | {\n      type: 'rowCountEq'\n      args: number\n    }\n  | {\n      type: 'rowCountNeq'\n      args: number\n    }\n  | {\n      type: 'affectedRowCountEq'\n      args: number\n    }\n  | {\n      type: 'never'\n    }\n\nexport type ValidationError =\n  | {\n      errorIdentifier: 'RELATION_VIOLATION'\n      context: {\n        relation: string\n        modelA: string\n        modelB: string\n      }\n    }\n  | {\n      errorIdentifier: 'MISSING_RELATED_RECORD'\n      context: {\n        model: string\n        relation: string\n        relationType: string\n        operation: string\n        neededFor?: string\n      }\n    }\n  | {\n      errorIdentifier: 'MISSING_RECORD'\n      context: {\n        operation: string\n      }\n    }\n  | {\n      errorIdentifier: 'INCOMPLETE_CONNECT_INPUT'\n      context: {\n        expectedRows: number\n      }\n    }\n  | {\n      errorIdentifier: 'INCOMPLETE_CONNECT_OUTPUT'\n      context: {\n        expectedRows: number\n        relation: string\n        relationType: string\n      }\n    }\n  | {\n      errorIdentifier: 'RECORDS_NOT_CONNECTED'\n      context: {\n        relation: string\n        parent: string\n        child: string\n      }\n    }\n\nexport type FieldType = { arity: Arity } & FieldScalarType\n\nexport type FieldScalarType =\n  | {\n      type:\n        | 'string'\n        | 'int'\n        | 'bigint'\n        | 'float'\n        | 'boolean'\n        | 'json'\n        | 'object'\n        | 'datetime'\n        | 'decimal'\n        | 'unsupported'\n    }\n  | { type: 'enum'; name: string }\n  | { type: 'bytes'; encoding: 'array' | 'base64' | 'hex' }\n", "import { type ColumnType, ColumnTypeEnum, type SqlResultSet } from '@prisma/driver-adapter-utils'\n\nimport { assertNever } from '../utils'\n\nexport function serializeSql(resultSet: SqlResultSet): Record<string, unknown>[] {\n  return resultSet.rows.map((row) =>\n    row.reduce<Record<string, unknown>>((acc, value, index) => {\n      acc[resultSet.columnNames[index]] = value\n      return acc\n    }, {}),\n  )\n}\n\nexport function serializeRawSql(resultSet: SqlResultSet): Record<string, unknown> {\n  return {\n    columns: resultSet.columnNames,\n    types: resultSet.columnTypes.map((type) => serializeColumnType(type)),\n    rows: resultSet.rows.map((row) =>\n      row.map((value, index) => serializeRawValue(value, resultSet.columnTypes[index])),\n    ),\n  }\n}\n\nfunction serializeRawValue(value: unknown, type: ColumnType): unknown {\n  if (value === null) {\n    return null\n  }\n\n  switch (type) {\n    case ColumnTypeEnum.Int32:\n      switch (typeof value) {\n        case 'number':\n          return Math.trunc(value)\n        case 'string':\n          return Math.trunc(Number(value))\n        default:\n          throw new Error(`Cannot serialize value of type ${typeof value} as Int32`)\n      }\n\n    case ColumnTypeEnum.Int32Array:\n      if (!Array.isArray(value)) {\n        throw new Error(`Cannot serialize value of type ${typeof value} as Int32Array`)\n      }\n      return value.map((v) => serializeRawValue(v, ColumnTypeEnum.Int32))\n\n    case ColumnTypeEnum.Int64:\n      switch (typeof value) {\n        case 'number':\n          return BigInt(Math.trunc(value))\n        case 'string':\n          return value\n        default:\n          throw new Error(`Cannot serialize value of type ${typeof value} as Int64`)\n      }\n\n    case ColumnTypeEnum.Int64Array:\n      if (!Array.isArray(value)) {\n        throw new Error(`Cannot serialize value of type ${typeof value} as Int64Array`)\n      }\n      return value.map((v) => serializeRawValue(v, ColumnTypeEnum.Int64))\n\n    case ColumnTypeEnum.Json:\n      switch (typeof value) {\n        case 'string':\n          return JSON.parse(value)\n        default:\n          throw new Error(`Cannot serialize value of type ${typeof value} as Json`)\n      }\n\n    case ColumnTypeEnum.JsonArray:\n      if (!Array.isArray(value)) {\n        throw new Error(`Cannot serialize value of type ${typeof value} as JsonArray`)\n      }\n      return value.map((v) => serializeRawValue(v, ColumnTypeEnum.Json))\n\n    case ColumnTypeEnum.Boolean:\n      switch (typeof value) {\n        case 'boolean':\n          return value\n        case 'string':\n          return value === 'true' || value === '1'\n        case 'number':\n          return value === 1\n        default:\n          throw new Error(`Cannot serialize value of type ${typeof value} as Boolean`)\n      }\n\n    case ColumnTypeEnum.BooleanArray:\n      if (!Array.isArray(value)) {\n        throw new Error(`Cannot serialize value of type ${typeof value} as BooleanArray`)\n      }\n      return value.map((v) => serializeRawValue(v, ColumnTypeEnum.Boolean))\n\n    default:\n      return value // For all other types, return the value as is\n  }\n}\n\n// maps JS column types to their Rust equivalents\nfunction serializeColumnType(columnType: ColumnType): string {\n  switch (columnType) {\n    case ColumnTypeEnum.Int32:\n      return 'int'\n    case ColumnTypeEnum.Int64:\n      return 'bigint'\n    case ColumnTypeEnum.Float:\n      return 'float'\n    case ColumnTypeEnum.Double:\n      return 'double'\n    case ColumnTypeEnum.Text:\n      return 'string'\n    case ColumnTypeEnum.Enum:\n      return 'enum'\n    case ColumnTypeEnum.Bytes:\n      return 'bytes'\n    case ColumnTypeEnum.Boolean:\n      return 'bool'\n    case ColumnTypeEnum.Character:\n      return 'char'\n    case ColumnTypeEnum.Numeric:\n      return 'decimal'\n    case ColumnTypeEnum.Json:\n      return 'json'\n    case ColumnTypeEnum.Uuid:\n      return 'uuid'\n    case ColumnTypeEnum.DateTime:\n      return 'datetime'\n    case ColumnTypeEnum.Date:\n      return 'date'\n    case ColumnTypeEnum.Time:\n      return 'time'\n    case ColumnTypeEnum.Int32Array:\n      return 'int-array'\n    case ColumnTypeEnum.Int64Array:\n      return 'bigint-array'\n    case ColumnTypeEnum.FloatArray:\n      return 'float-array'\n    case ColumnTypeEnum.DoubleArray:\n      return 'double-array'\n    case ColumnTypeEnum.TextArray:\n      return 'string-array'\n    case ColumnTypeEnum.EnumArray:\n      return 'string-array'\n    case ColumnTypeEnum.BytesArray:\n      return 'bytes-array'\n    case ColumnTypeEnum.BooleanArray:\n      return 'bool-array'\n    case ColumnTypeEnum.CharacterArray:\n      return 'char-array'\n    case ColumnTypeEnum.NumericArray:\n      return 'decimal-array'\n    case ColumnTypeEnum.JsonArray:\n      return 'json-array'\n    case ColumnTypeEnum.UuidArray:\n      return 'uuid-array'\n    case ColumnTypeEnum.DateTimeArray:\n      return 'datetime-array'\n    case ColumnTypeEnum.DateArray:\n      return 'date-array'\n    case ColumnTypeEnum.TimeArray:\n      return 'time-array'\n    case ColumnTypeEnum.UnknownNumber:\n      return 'unknown'\n    /// The following PlanetScale type IDs are mapped into Set:\n    /// - SET (SET) -> e.g. `\"foo,bar\"` (String-encoded, comma-separated)\n    case ColumnTypeEnum.Set:\n      return 'string'\n    default:\n      assertNever(columnType, `Unexpected column type: ${columnType}`)\n  }\n}\n", "import { DataRule, ValidationError } from '../query-plan'\nimport { UserFacingError } from '../user-facing-error'\nimport { assertNever, DeepReadonly } from '../utils'\n\nexport function performValidation(data: unknown, rules: DeepReadonly<DataRule[]>, error: ValidationError) {\n  if (!rules.every((rule) => doesSatisfyRule(data, rule))) {\n    const message = renderMessage(data, error)\n    const code = getErrorCode(error)\n    throw new UserFacingError(message, code, error.context)\n  }\n}\n\nexport function doesSatisfyRule(data: unknown, rule: DataRule): boolean {\n  switch (rule.type) {\n    case 'rowCountEq':\n      if (Array.isArray(data)) {\n        return data.length === rule.args\n      }\n      if (data === null) {\n        return rule.args === 0\n      }\n      return rule.args === 1\n\n    case 'rowCountNeq':\n      if (Array.isArray(data)) {\n        return data.length !== rule.args\n      }\n      if (data === null) {\n        return rule.args !== 0\n      }\n      return rule.args !== 1\n\n    case 'affectedRowCountEq':\n      return data === rule.args\n\n    case 'never':\n      return false\n\n    default:\n      assertNever(rule, `Unknown rule type: ${(rule as DataRule).type}`)\n  }\n}\n\nfunction renderMessage(data: unknown, error: ValidationError): string {\n  switch (error.errorIdentifier) {\n    case 'RELATION_VIOLATION':\n      return `The change you are trying to make would violate the required relation '${error.context.relation}' between the \\`${error.context.modelA}\\` and \\`${error.context.modelB}\\` models.`\n    case 'MISSING_RECORD':\n      return `An operation failed because it depends on one or more records that were required but not found. No record was found for ${error.context.operation}.`\n    case 'MISSING_RELATED_RECORD': {\n      const hint = error.context.neededFor ? ` (needed to ${error.context.neededFor})` : ''\n      return `An operation failed because it depends on one or more records that were required but not found. No '${error.context.model}' record${hint} was found for ${error.context.operation} on ${error.context.relationType} relation '${error.context.relation}'.`\n    }\n    case 'INCOMPLETE_CONNECT_INPUT':\n      return `An operation failed because it depends on one or more records that were required but not found. Expected ${\n        error.context.expectedRows\n      } records to be connected, found only ${Array.isArray(data) ? data.length : data}.`\n    case 'INCOMPLETE_CONNECT_OUTPUT':\n      return `The required connected records were not found. Expected ${\n        error.context.expectedRows\n      } records to be connected after connect operation on ${error.context.relationType} relation '${\n        error.context.relation\n      }', found ${Array.isArray(data) ? data.length : data}.`\n    case 'RECORDS_NOT_CONNECTED':\n      return `The records for relation \\`${error.context.relation}\\` between the \\`${error.context.parent}\\` and \\`${error.context.child}\\` models are not connected.`\n\n    default:\n      assertNever(error, `Unknown error identifier: ${error}`)\n  }\n}\n\nfunction getErrorCode(error: ValidationError): string {\n  switch (error.errorIdentifier) {\n    case 'RELATION_VIOLATION':\n      return 'P2014'\n    case 'RECORDS_NOT_CONNECTED':\n      return 'P2017'\n    case 'INCOMPLETE_CONNECT_OUTPUT':\n      return 'P2018'\n    case 'MISSING_RECORD':\n    case 'MISSING_RELATED_RECORD':\n    case 'INCOMPLETE_CONNECT_INPUT':\n      return 'P2025'\n\n    default:\n      assertNever(error, `Unknown error identifier: ${error}`)\n  }\n}\n", "/**\n * Schema-aware traversal algorithm for parameterization.\n *\n * This module implements the core parameterization logic that walks the\n * JsonQuery tree guided by ParamGraph. It only parameterizes values when\n * both schema rules and runtime value types agree.\n */\n\nimport type {\n  JsonArgumentValue,\n  JsonBatchQuery,\n  JsonFieldSelection,\n  JsonInputTaggedValue,\n  JsonQuery,\n  JsonSelectionSet,\n  PlaceholderTaggedValue,\n} from '@prisma/json-protocol'\nimport { PlaceholderType } from '@prisma/json-protocol'\nimport type { InputEdge, InputNode } from '@prisma/param-graph'\nimport { EdgeFlag, getScalarMask, hasFlag, ParamGraph, ScalarMask } from '@prisma/param-graph'\n\nimport { deserializeJsonObject } from '../json-protocol'\nimport { safeJsonStringify } from '../utils'\nimport { classifyValue, isPlainObject, isTaggedValue, ValueClass } from './classify'\n\n/**\n * Result of parameterizing a single query.\n */\nexport interface ParameterizeResult {\n  /** The query with user data values replaced by placeholders */\n  parameterizedQuery: JsonQuery\n  /** Map of placeholder names to their actual values */\n  placeholderValues: Record<string, unknown>\n}\n\n/**\n * Result of parameterizing a batch of queries.\n */\nexport interface ParameterizeBatchResult {\n  /** The batch with user data values replaced by placeholders */\n  parameterizedBatch: JsonBatchQuery\n  /** Combined map of placeholder names to their actual values */\n  placeholderValues: Record<string, unknown>\n}\n\n/**\n * Parameterizes a single query using the schema-aware approach.\n *\n * @param query - The query to parameterize\n * @param view - The ParamGraph for schema lookups\n * @returns The parameterized query with extracted placeholder values\n */\nexport function parameterizeQuery(query: JsonQuery, view: ParamGraph): ParameterizeResult {\n  const parameterizer = new Parameterizer(view)\n\n  const rootKey = query.modelName ? `${query.modelName}.${query.action}` : query.action\n  const root = view.root(rootKey)\n\n  const parameterizedQuery: JsonQuery = {\n    ...query,\n    query: parameterizer.parameterizeFieldSelection(query.query, root?.argsNodeId, root?.outputNodeId),\n  }\n\n  return {\n    parameterizedQuery,\n    placeholderValues: parameterizer.getPlaceholderValues(),\n  }\n}\n\n/**\n * Parameterizes a batch of queries using the schema-aware approach.\n *\n * @param batch - The batch to parameterize\n * @param view - The ParamGraph for schema lookups\n * @returns The parameterized batch with extracted placeholder values\n */\nexport function parameterizeBatch(batch: JsonBatchQuery, view: ParamGraph): ParameterizeBatchResult {\n  const parameterizer = new Parameterizer(view)\n  const parameterizedQueries: JsonQuery[] = []\n\n  for (let i = 0; i < batch.batch.length; i++) {\n    const query = batch.batch[i]\n\n    const rootKey = query.modelName ? `${query.modelName}.${query.action}` : query.action\n    const root = view.root(rootKey)\n\n    parameterizedQueries.push({\n      ...query,\n      query: parameterizer.parameterizeFieldSelection(query.query, root?.argsNodeId, root?.outputNodeId),\n    })\n  }\n\n  return {\n    parameterizedBatch: { ...batch, batch: parameterizedQueries },\n    placeholderValues: parameterizer.getPlaceholderValues(),\n  }\n}\n\n/**\n * Encapsulates the state and logic for parameterizing queries.\n */\nclass Parameterizer {\n  readonly #view: ParamGraph\n  readonly #placeholders = new Map<string, unknown>()\n  readonly #valueToPlaceholder = new Map<string, string>()\n  #nextPlaceholderId = 1\n\n  constructor(view: ParamGraph) {\n    this.#view = view\n  }\n\n  /**\n   * Returns the collected placeholder values as a plain object.\n   */\n  getPlaceholderValues(): Record<string, unknown> {\n    return Object.fromEntries(this.#placeholders)\n  }\n\n  /**\n   * Gets or creates a placeholder for the given value.\n   * If a placeholder already exists for this value, returns a reference to the existing name.\n   * Otherwise, registers a new placeholder with a sequential name.\n   * We reuse the placeholders for equal values because the query compiler needs to be able\n   * to compare the values for equality for certain optimizations (at the time of writing,\n   * only for deciding whether to use native or emulated upserts).\n   */\n  #getOrCreatePlaceholder(value: unknown, type: PlaceholderType): PlaceholderTaggedValue {\n    const valueKey = createValueKey(value, type)\n    const existingName = this.#valueToPlaceholder.get(valueKey)\n\n    if (existingName !== undefined) {\n      return createPlaceholder(existingName, type)\n    }\n\n    const name = `%${this.#nextPlaceholderId++}`\n    this.#valueToPlaceholder.set(valueKey, name)\n    this.#placeholders.set(name, value)\n    return createPlaceholder(name, type)\n  }\n\n  /**\n   * Parameterizes a field selection (arguments + selection).\n   */\n  parameterizeFieldSelection(\n    sel: JsonFieldSelection,\n    argsNodeId: number | undefined,\n    outNodeId: number | undefined,\n  ): JsonFieldSelection {\n    const argsNode = this.#view.inputNode(argsNodeId)\n    const outNode = this.#view.outputNode(outNodeId)\n\n    const result: JsonFieldSelection = { ...sel }\n\n    if (sel.arguments && sel.arguments.$type !== 'Raw') {\n      result.arguments = this.#parameterizeObject(sel.arguments as Record<string, unknown>, argsNode)\n    }\n\n    if (sel.selection) {\n      result.selection = this.#parameterizeSelection(sel.selection, outNode)\n    }\n\n    return result\n  }\n\n  /**\n   * Parameterizes an object by traversing its fields with the input node.\n   */\n  #parameterizeObject(obj: Record<string, unknown>, node: InputNode | undefined): Record<string, JsonArgumentValue> {\n    if (!node) {\n      // No parameterizable fields in this subtree - return as-is\n      return obj as Record<string, JsonArgumentValue>\n    }\n\n    const result: Record<string, JsonArgumentValue> = {}\n\n    for (const [key, value] of Object.entries(obj)) {\n      const edge = this.#view.inputEdge(node, key)\n\n      if (edge) {\n        result[key] = this.#parameterizeValue(value, edge) as JsonArgumentValue\n      } else {\n        result[key] = value as JsonArgumentValue\n      }\n    }\n\n    return result\n  }\n\n  /**\n   * Core parameterization logic for a single value.\n   */\n  #parameterizeValue(value: unknown, edge: InputEdge): unknown {\n    const classified = classifyValue(value)\n\n    switch (classified.kind) {\n      case 'null':\n        // Null values are never parameterized - they affect query semantics\n        return value\n\n      case 'structural':\n        return value\n\n      case 'primitive':\n        return this.#handlePrimitive(classified.value, edge)\n\n      case 'taggedScalar':\n        return this.#handleTaggedScalar(value as JsonInputTaggedValue, classified.tag, edge)\n\n      case 'array':\n        return this.#handleArray(classified.items, value, edge)\n\n      case 'object':\n        return this.#handleObject(classified.entries, edge)\n\n      default:\n        throw new Error(`Unknown value kind ${(classified satisfies never as ValueClass).kind}`)\n    }\n  }\n\n  /**\n   * Handles parameterization of primitive values (string, number, boolean).\n   */\n  #handlePrimitive(value: string | number | boolean, edge: InputEdge): JsonArgumentValue {\n    if (hasFlag(edge, EdgeFlag.ParamEnum) && edge.enumNameIndex !== undefined && typeof value === 'string') {\n      const enumValues = this.#view.enumValues(edge)\n      if (enumValues && Object.hasOwn(enumValues, value)) {\n        const type: PlaceholderType = { type: 'Enum' }\n        return this.#getOrCreatePlaceholder(enumValues[value], type)\n      }\n    }\n\n    if (!hasFlag(edge, EdgeFlag.ParamScalar)) {\n      return value\n    }\n\n    const mask = getScalarMask(edge)\n    if (mask === 0) {\n      return value\n    }\n\n    const type = getPrimitivePlaceholderType(value)\n    if (!matchesPrimitiveMask(type, mask)) {\n      return value\n    }\n\n    if (mask & ScalarMask.Json) {\n      value = JSON.stringify(value)\n    }\n\n    return this.#getOrCreatePlaceholder(value, type)\n  }\n\n  /**\n   * Handles parameterization of tagged scalar values (DateTime, Decimal, etc.).\n   */\n  #handleTaggedScalar(tagged: JsonInputTaggedValue, tag: JsonInputTaggedValue['$type'], edge: InputEdge): unknown {\n    if (!hasFlag(edge, EdgeFlag.ParamScalar)) {\n      return tagged\n    }\n\n    const mask = getScalarMask(edge)\n    if (mask === 0 || !matchesTaggedMask(tag, mask)) {\n      return tagged\n    }\n\n    const type = getTaggedPlaceholderType(tagged.$type)!\n    const decoded = decodeTaggedValue(tagged)\n\n    return this.#getOrCreatePlaceholder(decoded, type)\n  }\n\n  /**\n   * Handles parameterization of array values.\n   */\n  #handleArray(items: unknown[], originalValue: unknown, edge: InputEdge): unknown {\n    if (hasFlag(edge, EdgeFlag.ParamScalar) && getScalarMask(edge) & ScalarMask.Json) {\n      const jsonValue = safeJsonStringify(deserializeJsonObject(items))\n      const type: PlaceholderType = { type: 'Json' }\n      return this.#getOrCreatePlaceholder(jsonValue, type)\n    }\n\n    if (hasFlag(edge, EdgeFlag.ParamEnum)) {\n      const enumValues = this.#view.enumValues(edge)\n      if (enumValues && items.every((item) => typeof item === 'string' && Object.hasOwn(enumValues, item))) {\n        const type: PlaceholderType = { type: 'List', inner: { type: 'Enum' } }\n        return this.#getOrCreatePlaceholder(items, type)\n      }\n    }\n\n    if (hasFlag(edge, EdgeFlag.ParamListScalar)) {\n      const allValid = items.every((item) => validateListElement(item, edge))\n      if (allValid && items.length > 0) {\n        const decodedItems = items.map((item) => decodeIfTagged(item))\n        const innerType = inferListElementType(items)\n        const type: PlaceholderType = { type: 'List', inner: innerType }\n        return this.#getOrCreatePlaceholder(decodedItems, type)\n      }\n    }\n\n    if (hasFlag(edge, EdgeFlag.ListObject)) {\n      const childNode = this.#view.inputNode(edge.childNodeId)\n      if (childNode) {\n        return items.map((item) => {\n          if (isPlainObject(item)) {\n            return this.#parameterizeObject(item, childNode)\n          }\n          return item\n        })\n      }\n    }\n\n    return originalValue\n  }\n\n  /**\n   * Handles parameterization of object values.\n   */\n  #handleObject(obj: Record<string, unknown>, edge: InputEdge): unknown {\n    if (hasFlag(edge, EdgeFlag.Object)) {\n      const childNode = this.#view.inputNode(edge.childNodeId)\n      if (childNode) {\n        return this.#parameterizeObject(obj, childNode)\n      }\n    }\n\n    const mask = getScalarMask(edge)\n    if (mask & ScalarMask.Json) {\n      const jsonValue = safeJsonStringify(deserializeJsonObject(obj))\n      const type: PlaceholderType = { type: 'Json' }\n      return this.#getOrCreatePlaceholder(jsonValue, type)\n    }\n\n    return obj\n  }\n\n  /**\n   * Parameterizes a selection set using output nodes.\n   */\n  #parameterizeSelection(selection: JsonSelectionSet, node: ReturnType<ParamGraph['outputNode']>): JsonSelectionSet {\n    if (!selection || !node) {\n      return selection\n    }\n\n    const result: JsonSelectionSet = {}\n\n    for (const [key, value] of Object.entries(selection)) {\n      if (key === '$scalars' || key === '$composites' || typeof value === 'boolean') {\n        result[key] = value\n        continue\n      }\n\n      const edge = this.#view.outputEdge(node, key)\n\n      if (edge) {\n        // Nested selection with possible args\n        const nested = value as { arguments?: Record<string, unknown>; selection?: JsonSelectionSet }\n\n        const argsNode = this.#view.inputNode(edge.argsNodeId)\n        const childOutNode = this.#view.outputNode(edge.outputNodeId)\n\n        const processedValue: JsonFieldSelection = {\n          selection: nested.selection ? this.#parameterizeSelection(nested.selection, childOutNode) : {},\n        }\n\n        if (nested.arguments) {\n          processedValue.arguments = this.#parameterizeObject(nested.arguments, argsNode)\n        }\n\n        result[key] = processedValue\n      } else {\n        result[key] = value\n      }\n    }\n\n    return result\n  }\n}\n\n/**\n * Creates a placeholder object with the given name.\n */\nfunction createPlaceholder(name: string, type: PlaceholderType): PlaceholderTaggedValue {\n  return { $type: 'Param', value: { name, ...type } }\n}\n\n/**\n * Serializes a PlaceholderType to a string for use as part of a value key.\n */\nfunction serializePlaceholderType(type: PlaceholderType): string {\n  if (type.type === 'List') {\n    return `List<${serializePlaceholderType(type.inner)}>`\n  }\n  return type.type\n}\n\n/**\n * Serializes a value to a string for use as part of a value key.\n */\nfunction serializeValue(value: unknown): string {\n  if (ArrayBuffer.isView(value)) {\n    const bufView = Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n    return bufView.toString('base64')\n  }\n  return JSON.stringify(value)\n}\n\n/**\n * Creates a unique key for a (value, type) pair.\n * Used to detect when the same value appears multiple times.\n */\nfunction createValueKey(value: unknown, type: PlaceholderType): string {\n  const typeKey = serializePlaceholderType(type)\n  const valueKey = serializeValue(value)\n  return `${typeKey}:${valueKey}`\n}\n\nconst MAX_INT = 2 ** 31 - 1\nconst MIN_INT = -(2 ** 31)\n\nfunction getPrimitivePlaceholderType(value: string | number | boolean): PlaceholderType {\n  switch (typeof value) {\n    case 'boolean':\n      return { type: 'Boolean' }\n\n    case 'number':\n      if (!Number.isInteger(value)) {\n        return { type: 'Float' }\n      }\n      if (MIN_INT <= value && value <= MAX_INT) {\n        return { type: 'Int' }\n      }\n      return { type: 'BigInt' }\n\n    case 'string':\n      return { type: 'String' }\n\n    default:\n      throw new Error('unreachable')\n  }\n}\n\n/**\n * Checks if a primitive value matches the scalar mask.\n */\nfunction matchesPrimitiveMask({ type }: PlaceholderType, mask: number): boolean {\n  switch (type) {\n    case 'Boolean':\n      return (mask & ScalarMask.Boolean) !== 0\n    case 'Int':\n      return (mask & (ScalarMask.Int | ScalarMask.BigInt | ScalarMask.Float)) !== 0\n    case 'BigInt':\n      return (mask & ScalarMask.BigInt) !== 0\n    case 'Float':\n      return (mask & ScalarMask.Float) !== 0\n    case 'String':\n      return (mask & ScalarMask.String) !== 0\n    default:\n      return false\n  }\n}\n\nfunction getTaggedPlaceholderType(tag: JsonInputTaggedValue['$type']): PlaceholderType | undefined {\n  switch (tag) {\n    case 'BigInt':\n    case 'Bytes':\n    case 'DateTime':\n    case 'Json':\n      return { type: tag }\n    case 'Decimal':\n      // PrismaValueType doesn't have a Decimal variant and treats both Floats\n      // and Decimal as decimals\n      return { type: 'Float' }\n    default:\n      return undefined\n  }\n}\n\n/**\n * Infers the widest placeholder type that accommodates all elements in a list.\n * For example, a list containing both Int and Float values infers Float.\n */\nfunction inferListElementType(items: unknown[]): PlaceholderType {\n  let widest: PlaceholderType = { type: 'Any' }\n\n  for (const item of items) {\n    const classified = classifyValue(item)\n    let itemType: PlaceholderType\n\n    switch (classified.kind) {\n      case 'primitive':\n        itemType = getPrimitivePlaceholderType(classified.value)\n        break\n      case 'taggedScalar':\n        itemType = getTaggedPlaceholderType(classified.tag) ?? { type: 'Any' }\n        break\n      default:\n        return { type: 'Any' }\n    }\n\n    widest = widenType(widest, itemType)\n  }\n\n  return widest\n}\n\n/**\n * Returns the wider of two placeholder types, following numeric promotion rules:\n * Int -> BigInt -> Float. Non-numeric types must match exactly or produce Any.\n */\nfunction widenType(a: PlaceholderType, b: PlaceholderType): PlaceholderType {\n  if (a.type === 'Any') return b\n  if (b.type === 'Any') return a\n  if (a.type === b.type) return a\n\n  const NUMERIC_WIDTH: Partial<Record<PlaceholderType['type'], number>> = { Int: 0, BigInt: 1, Float: 2 }\n  const aWidth = NUMERIC_WIDTH[a.type]\n  const bWidth = NUMERIC_WIDTH[b.type]\n\n  if (aWidth !== undefined && bWidth !== undefined) {\n    return aWidth >= bWidth ? a : b\n  }\n\n  return { type: 'Any' }\n}\n\n/**\n * Checks if a tagged scalar tag matches the scalar mask.\n */\nfunction matchesTaggedMask(tag: JsonInputTaggedValue['$type'], mask: number): boolean {\n  switch (tag) {\n    case 'DateTime':\n      return (mask & ScalarMask.DateTime) !== 0\n    case 'Decimal':\n      return (mask & ScalarMask.Decimal) !== 0\n    case 'BigInt':\n      return (mask & ScalarMask.BigInt) !== 0\n    case 'Bytes':\n      return (mask & ScalarMask.Bytes) !== 0\n    case 'Json':\n      return (mask & ScalarMask.Json) !== 0\n    default:\n      return false\n  }\n}\n\n/**\n * Validates that a list element can be parameterized.\n */\nfunction validateListElement(item: unknown, edge: InputEdge): boolean {\n  const classified = classifyValue(item)\n\n  switch (classified.kind) {\n    case 'structural':\n      return false\n\n    case 'null':\n      return false\n\n    case 'primitive': {\n      const type = getPrimitivePlaceholderType(classified.value)\n      const mask = getScalarMask(edge)\n      return mask !== 0 && matchesPrimitiveMask(type, mask)\n    }\n\n    case 'taggedScalar': {\n      const mask = getScalarMask(edge)\n      return mask !== 0 && matchesTaggedMask(classified.tag, mask)\n    }\n\n    default:\n      return false\n  }\n}\n\n/**\n * Decodes a value if it's a tagged scalar, otherwise returns as-is.\n */\nfunction decodeIfTagged(value: unknown): unknown {\n  if (isTaggedValue(value)) {\n    return decodeTaggedValue(value)\n  }\n  return value\n}\n\n/**\n * Decodes a tagged scalar value to its raw form.\n */\nfunction decodeTaggedValue(tagged: { $type: string; value: unknown }): unknown {\n  return tagged.value\n}\n", "export type { EnumLookup, InputEdge, InputNode, OutputEdge, OutputNode, RootEntry } from './param-graph'\nexport type {\n  InputEdgeData,\n  InputNodeData,\n  OutputEdgeData,\n  OutputNodeData,\n  ParamGraphData,\n  RootEntryData,\n} from './param-graph'\nexport type { EdgeFlagValue, ScalarMaskValue } from './param-graph'\nexport { ParamGraph } from './param-graph'\nexport { EdgeFlag, getScalarMask, hasFlag, ScalarMask, scalarTypeToMask } from './param-graph'\nexport type { SerializedParamGraph } from './serialization'\nexport { deserializeParamGraph, serializeParamGraph } from './serialization'\n", "/**\n * ParamGraph: Runtime class for schema-aware parameterization.\n *\n * This class provides a readable API for navigating the param graph structure\n * at runtime. It's created once per PrismaClient instance from the serialized\n * format embedded in the generated client.\n */\n\nimport type { SerializedParamGraph } from './serialization'\nimport { deserializeParamGraph } from './serialization'\nimport type {\n  InputEdgeData,\n  InputNodeData,\n  OutputEdgeData,\n  OutputNodeData,\n  ParamGraphData,\n  RootEntryData,\n} from './types'\n\n/**\n * Map of enum names to their respective values.\n */\nexport type EnumNameToValueMap = Record<string, string>\n\n/**\n * Function type for looking up enum values by name.\n * This allows ParamGraph to remain decoupled from RuntimeDataModel.\n */\nexport type EnumLookup = (enumName: string) => Readonly<EnumNameToValueMap> | undefined\n\n/**\n * Readable view of root entry.\n */\nexport interface RootEntry {\n  readonly argsNodeId: number | undefined\n  readonly outputNodeId: number | undefined\n}\n\n/**\n * Readable view of input node.\n */\nexport interface InputNode {\n  readonly id: number\n}\n\n/**\n * Readable view of output node.\n */\nexport interface OutputNode {\n  readonly id: number\n}\n\n/**\n * Readable view of input edge.\n */\nexport interface InputEdge {\n  readonly flags: number\n  readonly childNodeId: number | undefined\n  readonly scalarMask: number\n  readonly enumNameIndex: number | undefined\n}\n\n/**\n * Readable view of output edge.\n */\nexport interface OutputEdge {\n  readonly argsNodeId: number | undefined\n  readonly outputNodeId: number | undefined\n}\n\n/**\n * ParamGraph provides runtime access to the schema information\n * needed for parameterization decisions.\n */\nexport class ParamGraph {\n  readonly #data: ParamGraphData\n  readonly #stringIndex: Map<string, number>\n  readonly #enumLookup: EnumLookup\n\n  private constructor(data: ParamGraphData, enumLookup: EnumLookup) {\n    this.#data = data\n    this.#enumLookup = enumLookup\n\n    // Build string-to-index map for O(1) lookups\n    this.#stringIndex = new Map<string, number>()\n    for (let i = 0; i < data.strings.length; i++) {\n      this.#stringIndex.set(data.strings[i], i)\n    }\n  }\n\n  /**\n   * Creates a ParamGraph from serialized format.\n   * This is the primary factory method for runtime use.\n   */\n  static deserialize(serialized: SerializedParamGraph, enumLookup: EnumLookup): ParamGraph {\n    const data = deserializeParamGraph(serialized)\n    return new ParamGraph(data, enumLookup)\n  }\n\n  /**\n   * Creates a ParamGraph from builder data.\n   * Used by the builder for testing and direct construction.\n   */\n  static fromData(data: ParamGraphData, enumLookup: EnumLookup): ParamGraph {\n    return new ParamGraph(data, enumLookup)\n  }\n\n  /**\n   * Look up a root entry by \"Model.action\" or \"action\".\n   */\n  root(key: string): RootEntry | undefined {\n    const entry = this.#data.roots[key]\n    if (!entry) {\n      return undefined\n    }\n    return {\n      argsNodeId: entry.argsNodeId,\n      outputNodeId: entry.outputNodeId,\n    }\n  }\n\n  /**\n   * Get an input node by ID.\n   */\n  inputNode(id: number | undefined): InputNode | undefined {\n    if (id === undefined || id < 0 || id >= this.#data.inputNodes.length) {\n      return undefined\n    }\n    return { id }\n  }\n\n  /**\n   * Get an output node by ID.\n   */\n  outputNode(id: number | undefined): OutputNode | undefined {\n    if (id === undefined || id < 0 || id >= this.#data.outputNodes.length) {\n      return undefined\n    }\n    return { id }\n  }\n\n  /**\n   * Get an input edge for a field name within a node.\n   */\n  inputEdge(node: InputNode | undefined, fieldName: string): InputEdge | undefined {\n    if (!node) {\n      return undefined\n    }\n\n    const nodeData = this.#data.inputNodes[node.id]\n    if (!nodeData) {\n      return undefined\n    }\n\n    const fieldIndex = this.#stringIndex.get(fieldName)\n    if (fieldIndex === undefined) {\n      return undefined\n    }\n\n    const edge = nodeData.edges[fieldIndex]\n    if (!edge) {\n      return undefined\n    }\n\n    return {\n      flags: edge.flags,\n      childNodeId: edge.childNodeId,\n      scalarMask: edge.scalarMask ?? 0,\n      enumNameIndex: edge.enumNameIndex,\n    }\n  }\n\n  /**\n   * Get an output edge for a field name within a node.\n   */\n  outputEdge(node: OutputNode | undefined, fieldName: string): OutputEdge | undefined {\n    if (!node) {\n      return undefined\n    }\n\n    const nodeData = this.#data.outputNodes[node.id]\n    if (!nodeData) {\n      return undefined\n    }\n\n    const fieldIndex = this.#stringIndex.get(fieldName)\n    if (fieldIndex === undefined) {\n      return undefined\n    }\n\n    const edge = nodeData.edges[fieldIndex]\n    if (!edge) {\n      return undefined\n    }\n\n    return {\n      argsNodeId: edge.argsNodeId,\n      outputNodeId: edge.outputNodeId,\n    }\n  }\n\n  /**\n   * Get enum values for an edge that references a user enum.\n   * Returns undefined if the edge doesn't reference an enum.\n   */\n  enumValues(edge: InputEdge | undefined): Readonly<EnumNameToValueMap> | undefined {\n    if (edge?.enumNameIndex === undefined) {\n      return undefined\n    }\n\n    const enumName = this.#data.strings[edge.enumNameIndex]\n    if (!enumName) {\n      return undefined\n    }\n\n    return this.#enumLookup(enumName)\n  }\n\n  /**\n   * Get a string from the string table by index.\n   */\n  getString(index: number): string | undefined {\n    return this.#data.strings[index]\n  }\n}\n\n/**\n * Bit flags for InputEdge.flags describing what the field accepts.\n */\nexport const EdgeFlag = {\n  /**\n   * Field may be parameterized as a scalar value.\n   * Check ScalarMask to validate the value type.\n   */\n  ParamScalar: 1,\n\n  /**\n   * Field may be parameterized as an enum.\n   * Check enum ID to validate the value type.\n   */\n  ParamEnum: 2,\n\n  /**\n   * Field accepts list-of-scalar values.\n   * Parameterize the whole list if all elements match ScalarMask.\n   */\n  ParamListScalar: 4,\n\n  /**\n   * Field accepts list-of-enum values.\n   * Parameterize the whole list if all elements match enum ID.\n   */\n  ParamListEnum: 8,\n\n  /**\n   * Field accepts list-of-object values.\n   * Recurse into each element using the child node.\n   */\n  ListObject: 16,\n\n  /**\n   * Field accepts object values.\n   * Recurse into child input node.\n   */\n  Object: 32,\n} as const\n\nexport type EdgeFlagValue = (typeof EdgeFlag)[keyof typeof EdgeFlag]\n\n/**\n * Bit mask for scalar type categories.\n * Used in InputEdge.scalarMask to validate runtime value types.\n */\nexport const ScalarMask = {\n  String: 1,\n  Int: 2,\n  BigInt: 4,\n  Float: 8,\n  Decimal: 16,\n  Boolean: 32,\n  DateTime: 64,\n  Json: 128,\n  Bytes: 256,\n} as const\n\nexport type ScalarMaskValue = (typeof ScalarMask)[keyof typeof ScalarMask]\n\n/**\n * Helper function to check if an edge has a specific flag.\n */\nexport function hasFlag(edge: InputEdge, flag: number): boolean {\n  return (edge.flags & flag) !== 0\n}\n\n/**\n * Helper function to get the scalar mask from an edge.\n */\nexport function getScalarMask(edge: InputEdge): number {\n  return edge.scalarMask\n}\n\n/**\n * Maps DMMF scalar type names to ScalarMask values.\n */\nexport function scalarTypeToMask(typeName: string): number {\n  switch (typeName) {\n    case 'String':\n    case 'UUID':\n      return ScalarMask.String\n    case 'Int':\n      return ScalarMask.Int\n    case 'BigInt':\n      return ScalarMask.BigInt\n    case 'Float':\n      return ScalarMask.Float\n    case 'Decimal':\n      return ScalarMask.Decimal\n    case 'Boolean':\n      return ScalarMask.Boolean\n    case 'DateTime':\n      return ScalarMask.DateTime\n    case 'Json':\n      return ScalarMask.Json\n    case 'Bytes':\n      return ScalarMask.Bytes\n    default:\n      return 0\n  }\n}\n\n// Re-export data types for builder use\nexport type { InputEdgeData, InputNodeData, OutputEdgeData, OutputNodeData, ParamGraphData, RootEntryData }\n", "/**\n * Binary serialization for ParamGraph.\n *\n * This module handles compact binary encoding/decoding of the param graph structure.\n * The format uses a hybrid approach: JSON string array for field names + binary blob\n * for structural data (nodes, edges, roots).\n *\n * ## Serialized Representation\n *\n * ```\n * SerializedParamGraph {\n *   strings: string[]   // String table (field names, enum names, root keys)\n *   graph: string       // Base64url-encoded binary blob\n * }\n * ```\n *\n * ## Why Hybrid?\n *\n * - **Strings stay as JSON**: V8's JSON.parse is highly optimized for string arrays\n * - **Structure goes binary**: Indices, flags, masks benefit from compact encoding\n * - **Best of both**: Fast parsing + compact size where it matters\n *\n * ## Variable-Length Encoding\n *\n * All integer values (except fixed-size fields like `scalarMask` and `flags`) use\n * unsigned LEB128 (Little Endian Base 128) variable-length encoding:\n *\n * - Values 0-127: 1 byte\n * - Values 128-16383: 2 bytes\n * - Values 16384-2097151: 3 bytes\n * - And so on...\n *\n * Optional values use value+1 encoding: 0 means \"none/undefined\", N+1 means actual value N.\n *\n * ## Binary Blob Layout\n *\n * ```\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 HEADER                                                            \u2502\n * \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n * \u2502 inputNodeCount: varuint                                           \u2502\n * \u2502 outputNodeCount: varuint                                          \u2502\n * \u2502 rootCount: varuint                                                \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 INPUT NODES (repeated inputNodeCount times)                       \u2502\n * \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n * \u2502 edgeCount: varuint                                                \u2502\n * \u2502 edges[]                                                           \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 INPUT EDGE                                                        \u2502\n * \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n * \u2502 fieldIndex: varuint                                               \u2502\n * \u2502 scalarMask: u16                                                   \u2502\n * \u2502 childNodeId: varuint (0=none, N+1=actual)                         \u2502\n * \u2502 enumNameIndex: varuint (0=none, N+1=actual)                       \u2502\n * \u2502 flags: u8                                                         \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 OUTPUT NODES (repeated outputNodeCount times)                     \u2502\n * \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n * \u2502 edgeCount: varuint                                                \u2502\n * \u2502 edges[]                                                           \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 OUTPUT EDGE                                                       \u2502\n * \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n * \u2502 fieldIndex: varuint                                               \u2502\n * \u2502 argsNodeId: varuint (0=none, N+1=actual)                          \u2502\n * \u2502 outputNodeId: varuint (0=none, N+1=actual)                        \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n *\n * \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n * \u2502 ROOTS (repeated rootCount times)                                  \u2502\n * \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n * \u2502 keyIndex: varuint                                                 \u2502\n * \u2502 argsNodeId: varuint (0=none, N+1=actual)                          \u2502\n * \u2502 outputNodeId: varuint (0=none, N+1=actual)                        \u2502\n * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n * ```\n *\n * ## Embedding in Generated Client\n *\n * ```js\n * config.parameterizationSchema = {\n *   strings: JSON.parse('[\"where\",\"id\",\"email\",...]'),\n *   graph: \"base64url_encoded_binary_blob...\"\n * }\n * ```\n */\n\nimport type {\n  InputEdgeData,\n  InputNodeData,\n  OutputEdgeData,\n  OutputNodeData,\n  ParamGraphData,\n  RootEntryData,\n} from './types'\n\n/**\n * Serialized format stored in the generated client.\n */\nexport interface SerializedParamGraph {\n  /** String table (field names, enum names, root keys) */\n  strings: string[]\n  /** Base64url-encoded binary blob for structural data */\n  graph: string\n}\n\n/**\n * Serializes a ParamGraphData to the compact binary format.\n */\nexport function serializeParamGraph(data: ParamGraphData): SerializedParamGraph {\n  return new Serializer(data).serialize()\n}\n\n/**\n * Deserializes a binary-encoded ParamGraph.\n */\nexport function deserializeParamGraph(serialized: SerializedParamGraph): ParamGraphData {\n  return new Deserializer(serialized).deserialize()\n}\n\nfunction encodeBase64url(bytes: Uint8Array): string {\n  return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64url')\n}\n\nfunction decodeBase64url(str: string): Uint8Array {\n  return Buffer.from(str, 'base64url')\n}\n\n/**\n * Calculates the number of bytes needed to encode a value as an unsigned LEB128 varint.\n */\nfunction varuintSize(value: number): number {\n  let size = 1\n  while (value >= 0x80) {\n    size++\n    value >>>= 7\n  }\n  return size\n}\n\nclass Serializer {\n  #data: ParamGraphData\n  #buffer: ArrayBuffer\n  #view: DataView\n  #offset: number = 0\n  #rootKeys: string[]\n\n  constructor(data: ParamGraphData) {\n    this.#data = data\n    this.#rootKeys = Object.keys(data.roots)\n\n    const size = this.#calculateBufferSize()\n    this.#buffer = new ArrayBuffer(size)\n    this.#view = new DataView(this.#buffer)\n  }\n\n  serialize(): SerializedParamGraph {\n    this.#writeHeader()\n    this.#writeInputNodes()\n    this.#writeOutputNodes()\n    this.#writeRoots()\n\n    return {\n      strings: this.#data.strings,\n      graph: encodeBase64url(new Uint8Array(this.#buffer, 0, this.#offset)),\n    }\n  }\n\n  #writeVaruint(value: number): void {\n    while (value >= 0x80) {\n      this.#view.setUint8(this.#offset++, (value & 0x7f) | 0x80)\n      value >>>= 7\n    }\n    this.#view.setUint8(this.#offset++, value)\n  }\n\n  #writeOptionalVaruint(value: number | undefined): void {\n    this.#writeVaruint(value === undefined ? 0 : value + 1)\n  }\n\n  #writeByte(value: number): void {\n    this.#view.setUint8(this.#offset, value)\n    this.#offset += 1\n  }\n\n  #writeU16(value: number): void {\n    this.#view.setUint16(this.#offset, value, true)\n    this.#offset += 2\n  }\n\n  #calculateBufferSize(): number {\n    let size = 0\n\n    // Header: 3 varints\n    size += varuintSize(this.#data.inputNodes.length)\n    size += varuintSize(this.#data.outputNodes.length)\n    size += varuintSize(this.#rootKeys.length)\n\n    for (const node of this.#data.inputNodes) {\n      const fieldIndices = Object.keys(node.edges).map(Number)\n      size += varuintSize(fieldIndices.length)\n\n      for (const fieldIndex of fieldIndices) {\n        const edge = node.edges[fieldIndex]\n        size += varuintSize(fieldIndex)\n        size += 2 // scalarMask: u16\n        size += varuintSize(edge.childNodeId === undefined ? 0 : edge.childNodeId + 1)\n        size += varuintSize(edge.enumNameIndex === undefined ? 0 : edge.enumNameIndex + 1)\n        size += 1 // flags: u8\n      }\n    }\n\n    for (const node of this.#data.outputNodes) {\n      const fieldIndices = Object.keys(node.edges).map(Number)\n      size += varuintSize(fieldIndices.length)\n\n      for (const fieldIndex of fieldIndices) {\n        const edge = node.edges[fieldIndex]\n        size += varuintSize(fieldIndex)\n        size += varuintSize(edge.argsNodeId === undefined ? 0 : edge.argsNodeId + 1)\n        size += varuintSize(edge.outputNodeId === undefined ? 0 : edge.outputNodeId + 1)\n      }\n    }\n\n    for (const key of this.#rootKeys) {\n      const root = this.#data.roots[key]\n      const keyIndex = this.#data.strings.indexOf(key)\n      size += varuintSize(keyIndex)\n      size += varuintSize(root.argsNodeId === undefined ? 0 : root.argsNodeId + 1)\n      size += varuintSize(root.outputNodeId === undefined ? 0 : root.outputNodeId + 1)\n    }\n\n    return size\n  }\n\n  #writeHeader(): void {\n    this.#writeVaruint(this.#data.inputNodes.length)\n    this.#writeVaruint(this.#data.outputNodes.length)\n    this.#writeVaruint(this.#rootKeys.length)\n  }\n\n  #writeInputNodes(): void {\n    for (const node of this.#data.inputNodes) {\n      const fieldIndices = Object.keys(node.edges).map(Number)\n      this.#writeVaruint(fieldIndices.length)\n\n      for (const fieldIndex of fieldIndices) {\n        const edge = node.edges[fieldIndex]\n\n        this.#writeVaruint(fieldIndex)\n        this.#writeU16(edge.scalarMask ?? 0)\n        this.#writeOptionalVaruint(edge.childNodeId)\n        this.#writeOptionalVaruint(edge.enumNameIndex)\n        this.#writeByte(edge.flags)\n      }\n    }\n  }\n\n  #writeOutputNodes(): void {\n    for (const node of this.#data.outputNodes) {\n      const fieldIndices = Object.keys(node.edges).map(Number)\n      this.#writeVaruint(fieldIndices.length)\n\n      for (const fieldIndex of fieldIndices) {\n        const edge = node.edges[fieldIndex]\n\n        this.#writeVaruint(fieldIndex)\n        this.#writeOptionalVaruint(edge.argsNodeId)\n        this.#writeOptionalVaruint(edge.outputNodeId)\n      }\n    }\n  }\n\n  #writeRoots(): void {\n    for (const key of this.#rootKeys) {\n      const root = this.#data.roots[key]\n      const keyIndex = this.#data.strings.indexOf(key)\n      if (keyIndex === -1) {\n        throw new Error(`Root key \"${key}\" not found in strings table`)\n      }\n\n      this.#writeVaruint(keyIndex)\n      this.#writeOptionalVaruint(root.argsNodeId)\n      this.#writeOptionalVaruint(root.outputNodeId)\n    }\n  }\n}\n\nclass Deserializer {\n  #serialized: SerializedParamGraph\n  #view: DataView\n  #offset: number = 0\n\n  constructor(serialized: SerializedParamGraph) {\n    this.#serialized = serialized\n    const bytes = decodeBase64url(serialized.graph)\n    this.#view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n  }\n\n  deserialize(): ParamGraphData {\n    const { inputNodeCount, outputNodeCount, rootCount } = this.#readHeader()\n    const inputNodes = this.#readInputNodes(inputNodeCount)\n    const outputNodes = this.#readOutputNodes(outputNodeCount)\n    const roots = this.#readRoots(rootCount)\n\n    return {\n      strings: this.#serialized.strings,\n      inputNodes,\n      outputNodes,\n      roots,\n    }\n  }\n\n  #readVaruint(): number {\n    let value = 0\n    let shift = 0\n    let byte: number\n    do {\n      byte = this.#view.getUint8(this.#offset++)\n      value |= (byte & 0x7f) << shift\n      shift += 7\n    } while (byte >= 0x80)\n    return value\n  }\n\n  #readOptionalVaruint(): number | undefined {\n    const value = this.#readVaruint()\n    return value === 0 ? undefined : value - 1\n  }\n\n  #readByte(): number {\n    const value = this.#view.getUint8(this.#offset)\n    this.#offset += 1\n    return value\n  }\n\n  #readU16(): number {\n    const value = this.#view.getUint16(this.#offset, true)\n    this.#offset += 2\n    return value\n  }\n\n  #readHeader(): { inputNodeCount: number; outputNodeCount: number; rootCount: number } {\n    const inputNodeCount = this.#readVaruint()\n    const outputNodeCount = this.#readVaruint()\n    const rootCount = this.#readVaruint()\n\n    return { inputNodeCount, outputNodeCount, rootCount }\n  }\n\n  #readInputNodes(count: number): InputNodeData[] {\n    const inputNodes: InputNodeData[] = []\n\n    for (let i = 0; i < count; i++) {\n      const edgeCount = this.#readVaruint()\n      const edges: Record<number, InputEdgeData> = {}\n\n      for (let j = 0; j < edgeCount; j++) {\n        const fieldIndex = this.#readVaruint()\n        const scalarMask = this.#readU16()\n        const childNodeId = this.#readOptionalVaruint()\n        const enumNameIndex = this.#readOptionalVaruint()\n        const flags = this.#readByte()\n\n        const edge: InputEdgeData = { flags }\n        if (scalarMask !== 0) edge.scalarMask = scalarMask\n        if (childNodeId !== undefined) edge.childNodeId = childNodeId\n        if (enumNameIndex !== undefined) edge.enumNameIndex = enumNameIndex\n\n        edges[fieldIndex] = edge\n      }\n\n      inputNodes.push({ edges })\n    }\n\n    return inputNodes\n  }\n\n  #readOutputNodes(count: number): OutputNodeData[] {\n    const outputNodes: OutputNodeData[] = []\n\n    for (let i = 0; i < count; i++) {\n      const edgeCount = this.#readVaruint()\n      const edges: Record<number, OutputEdgeData> = {}\n\n      for (let j = 0; j < edgeCount; j++) {\n        const fieldIndex = this.#readVaruint()\n        const argsNodeId = this.#readOptionalVaruint()\n        const outputNodeId = this.#readOptionalVaruint()\n\n        const edge: OutputEdgeData = {}\n        if (argsNodeId !== undefined) edge.argsNodeId = argsNodeId\n        if (outputNodeId !== undefined) edge.outputNodeId = outputNodeId\n\n        edges[fieldIndex] = edge\n      }\n\n      outputNodes.push({ edges })\n    }\n\n    return outputNodes\n  }\n\n  #readRoots(count: number): Record<string, RootEntryData> {\n    const roots: Record<string, RootEntryData> = {}\n\n    for (let i = 0; i < count; i++) {\n      const keyIndex = this.#readVaruint()\n      const argsNodeId = this.#readOptionalVaruint()\n      const outputNodeId = this.#readOptionalVaruint()\n\n      const key = this.#serialized.strings[keyIndex]\n      const root: RootEntryData = {}\n      if (argsNodeId !== undefined) root.argsNodeId = argsNodeId\n      if (outputNodeId !== undefined) root.outputNodeId = outputNodeId\n\n      roots[key] = root\n    }\n\n    return roots\n  }\n}\n", "/**\n * Value classification for parameterization.\n *\n * This module classifies runtime values into categories before applying\n * schema rules during parameterization.\n */\n\nimport { JsonInputTaggedValue } from '@prisma/json-protocol'\n\n/**\n * Tagged value types that represent scalar values.\n * These can be parameterized when the schema allows.\n */\nconst SCALAR_TAGS = new Set(['DateTime', 'Decimal', 'BigInt', 'Bytes', 'Json', 'Raw'])\n\n/**\n * Classification result for a runtime value.\n * Used to determine how to handle the value during parameterization.\n */\nexport type ValueClass =\n  | { kind: 'null' }\n  | { kind: 'primitive'; value: string | number | boolean }\n  | { kind: 'taggedScalar'; tag: JsonInputTaggedValue['$type']; value: unknown }\n  | { kind: 'structural'; value: unknown }\n  | { kind: 'array'; items: unknown[] }\n  | { kind: 'object'; entries: Record<string, unknown> }\n\n/**\n * Classifies a runtime value for parameterization purposes.\n *\n * @param value - The value to classify\n * @returns The classification result indicating how to handle the value\n */\nexport function classifyValue(value: unknown): ValueClass {\n  if (value === null || value === undefined) {\n    return { kind: 'null' }\n  }\n\n  if (typeof value === 'string') {\n    return { kind: 'primitive', value }\n  }\n  if (typeof value === 'number') {\n    return { kind: 'primitive', value }\n  }\n  if (typeof value === 'boolean') {\n    return { kind: 'primitive', value }\n  }\n\n  if (Array.isArray(value)) {\n    return { kind: 'array', items: value }\n  }\n\n  if (typeof value === 'object') {\n    const obj = value as Record<string, unknown>\n\n    if ('$type' in obj && typeof obj.$type === 'string') {\n      const tag = obj.$type as JsonInputTaggedValue['$type']\n\n      if (SCALAR_TAGS.has(tag)) {\n        return { kind: 'taggedScalar', tag, value: obj.value }\n      }\n\n      // Known structural tags and any unknown $type tags are treated as structural\n      // to avoid parameterizing tagged payloads that we don't understand.\n      return { kind: 'structural', value: obj.value }\n    }\n\n    return { kind: 'object', entries: obj }\n  }\n\n  return { kind: 'structural', value }\n}\n\n/**\n * Checks if a value is a plain object (not a tagged value or array).\n */\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    !Array.isArray(value) &&\n    !('$type' in (value as Record<string, unknown>))\n  )\n}\n\n/**\n * Checks if a value is a tagged value with a $type property.\n */\nexport function isTaggedValue(value: unknown): value is { $type: string; value: unknown } {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    '$type' in value &&\n    typeof (value as { $type: unknown }).$type === 'string'\n  )\n}\n", "import { Debug } from '@prisma/debug'\nimport { SqlDriverAdapter, SqlQuery, SqlQueryable, Transaction } from '@prisma/driver-adapter-utils'\n\nimport { randomUUID } from '../crypto'\nimport { QueryEvent } from '../events'\nimport type { SchemaProvider } from '../schema'\nimport { TracingHelper, withQuerySpanAndEvent } from '../tracing'\nimport { rethrowAsUserFacing } from '../user-facing-error'\nimport { assertNever } from '../utils'\nimport { once } from '../web-platform'\nimport { Options, TransactionInfo } from './transaction'\nimport {\n  InvalidTransactionIsolationLevelError,\n  TransactionClosedError,\n  TransactionExecutionTimeoutError,\n  TransactionInternalConsistencyError,\n  TransactionManagerError,\n  TransactionNotFoundError,\n  TransactionRolledBackError,\n  TransactionStartTimeoutError,\n} from './transaction-manager-error'\n\nconst MAX_CLOSED_TRANSACTIONS = 100\n\n/**\n * How long {@link TransactionManager.cancelAllTransactions} waits for an aborted start to roll\n * back before letting the caller carry on and dispose the driver adapter.\n *\n * The rollback cannot happen until the driver settles the `startTransaction` promise it is\n * still holding, and a driver stuck on a dead connection may never do so. Waiting is worth a\n * moment \u2014 it is what lets the transaction be closed cleanly \u2014 but not at the cost of hanging\n * disconnect forever. This is deliberately not derived from `maxWait`: that is the caller's\n * patience for opening a transaction, not a bound on how long shutdown may stall.\n */\nconst CANCEL_ROLLBACK_GRACE_MS = 2_000\n\ntype TransactionWrapper = {\n  id: string\n  timer?: NodeJS.Timeout\n  timeout: number | undefined\n  startedAt: number\n  transaction?: Transaction\n  operationQueue: Promise<void>\n  depth: number\n  savepoints: string[]\n  savepointCounter: number\n} & TransactionState\n\ntype TransactionState =\n  | { status: 'waiting' | 'running' | 'committed' | 'rolled_back' | 'timed_out' }\n  | { status: 'closing'; closing: Promise<void>; reason: 'committed' | 'rolled_back' | 'timed_out' }\n\n/**\n * A transaction whose `startTransaction` call has not returned yet. Such a transaction is not\n * in {@link TransactionManager.transactions} until the driver hands it over, so it is only\n * reachable through here.\n */\ntype StartingTransaction = {\n  abortController: AbortController\n  /**\n   * Resolves once the start has been dealt with: either adopted as a running transaction, or\n   * discarded with its transaction rolled back and its connection released.\n   */\n  settled: Promise<void>\n  markSettled: () => void\n}\n\nfunction trackStartingTransaction(): StartingTransaction {\n  let markSettled!: () => void\n  const settled = new Promise<void>((resolve) => {\n    markSettled = resolve\n  })\n  return { abortController: new AbortController(), settled, markSettled }\n}\n\nconst debug = Debug('prisma:client:transactionManager')\n\nconst COMMIT_QUERY = (): SqlQuery => ({ sql: 'COMMIT', args: [], argTypes: [] })\nconst ROLLBACK_QUERY = (): SqlQuery => ({ sql: 'ROLLBACK', args: [], argTypes: [] })\n\nconst PHANTOM_COMMIT_QUERY = (): SqlQuery => ({\n  sql: '-- Implicit \"COMMIT\" query via underlying driver',\n  args: [],\n  argTypes: [],\n})\nconst PHANTOM_ROLLBACK_QUERY = (): SqlQuery => ({\n  sql: '-- Implicit \"ROLLBACK\" query via underlying driver',\n  args: [],\n  argTypes: [],\n})\n\nexport class TransactionManager {\n  // The map of active transactions.\n  private transactions: Map<string, TransactionWrapper> = new Map()\n  // List of last closed transactions. Max MAX_CLOSED_TRANSACTIONS entries.\n  // Used to provide better error messages than a generic \"transaction not found\".\n  private closedTransactions: TransactionWrapper[] = []\n  // Transactions that are still being started. Tracked separately so that\n  // `cancelAllTransactions` can reach them: they are not in `transactions` yet.\n  readonly #startingTransactions: Set<StartingTransaction> = new Set()\n  private readonly driverAdapter: SqlDriverAdapter\n  private readonly transactionOptions: Options\n  private readonly tracingHelper: TracingHelper\n  readonly #onQuery?: (event: QueryEvent) => void\n  readonly #provider?: SchemaProvider\n\n  constructor({\n    driverAdapter,\n    transactionOptions,\n    tracingHelper,\n    onQuery,\n    provider,\n  }: {\n    driverAdapter: SqlDriverAdapter\n    transactionOptions: Options\n    tracingHelper: TracingHelper\n    onQuery?: (event: QueryEvent) => void\n    provider?: SchemaProvider\n  }) {\n    this.driverAdapter = driverAdapter\n    this.transactionOptions = transactionOptions\n    this.tracingHelper = tracingHelper\n    this.#onQuery = onQuery\n    this.#provider = provider\n  }\n\n  /**\n   * Starts an internal transaction. The difference to `startTransaction` is that it does not\n   * use the default transaction options from the `TransactionManager`, which in practice means\n   * that it does not apply the default timeouts.\n   */\n  async startInternalTransaction(options?: Options): Promise<TransactionInfo> {\n    const validatedOptions = options !== undefined ? this.#validateOptions(options) : {}\n    return await this.tracingHelper.runInChildSpan('start_transaction', () =>\n      this.#startTransactionImpl(validatedOptions),\n    )\n  }\n\n  async startTransaction(options?: Options): Promise<TransactionInfo> {\n    const validatedOptions = options !== undefined ? this.#validateOptions(options) : this.transactionOptions\n    return await this.tracingHelper.runInChildSpan('start_transaction', () =>\n      this.#startTransactionImpl(validatedOptions),\n    )\n  }\n\n  async #startTransactionImpl(options: Options): Promise<TransactionInfo> {\n    if (options.newTxId) {\n      return await this.#withActiveTransactionLock(options.newTxId, 'start', async (existing) => {\n        if (existing.status !== 'running') {\n          throw new TransactionInternalConsistencyError(\n            `Transaction in invalid state ${existing.status} when starting a nested transaction.`,\n          )\n        }\n        if (!existing.transaction) {\n          throw new TransactionInternalConsistencyError(\n            `Transaction missing underlying driver transaction when starting a nested transaction.`,\n          )\n        }\n\n        existing.depth += 1\n\n        const savepointName = this.#nextSavepointName(existing)\n        existing.savepoints.push(savepointName)\n        try {\n          await this.#requiredCreateSavepoint(existing.transaction)(savepointName)\n        } catch (e) {\n          // Keep state consistent if creating the savepoint fails.\n          existing.depth -= 1\n          existing.savepoints.pop()\n          throw e\n        }\n\n        return { id: existing.id }\n      })\n    }\n\n    // Track the start before awaiting anything, so that a `cancelAllTransactions` arriving in\n    // the meantime can still see it. Until the driver hands the transaction over, this is the\n    // only place it is reachable from.\n    const starting = trackStartingTransaction()\n    const { abortController } = starting\n    this.#startingTransactions.add(starting)\n\n    // Set once the start is abandoned, so that `settled` waits for the rollback rather than\n    // resolving as soon as this method returns.\n    let discarding: Promise<void> | undefined\n\n    try {\n      const transaction: TransactionWrapper = {\n        id: await randomUUID(),\n        status: 'waiting',\n        timer: undefined,\n        timeout: options.timeout,\n        startedAt: Date.now(),\n        transaction: undefined,\n        operationQueue: Promise.resolve(),\n        depth: 1,\n        savepoints: [],\n        savepointCounter: 0,\n      }\n\n      // An abort that arrived while the id was being generated would be missed by the listener\n      // registered below, since the event has already fired. Nothing has been opened yet, so\n      // there is nothing to roll back.\n      if (abortController.signal.aborted) {\n        throw new TransactionStartTimeoutError()\n      }\n\n      // Start timeout to wait for transaction to be started.\n      const startTimer = createTimeoutIfDefined(() => abortController.abort(), options.maxWait)\n      startTimer?.unref?.()\n\n      // Keep a reference to the startTransaction promise so we can clean up\n      // if the timeout fires before it completes.\n      const startTransactionPromise = this.driverAdapter\n        .startTransaction(options.isolationLevel)\n        .catch(rethrowAsUserFacing)\n\n      transaction.transaction = await Promise.race([\n        startTransactionPromise.finally(() => clearTimeout(startTimer)),\n        once(abortController.signal, 'abort').then(() => undefined),\n      ])\n\n      this.transactions.set(transaction.id, transaction)\n\n      // Transaction status might have timed out while waiting for transaction to start. => Check for it!\n      switch (transaction.status) {\n        case 'waiting':\n          if (abortController.signal.aborted) {\n            // The driver may have won the race and only then been aborted, leaving a\n            // transaction here. Ownership of it passes to `#discardStartedTransaction`, which\n            // holds its own reference, so drop this one: otherwise `#closeTransaction` below\n            // rolls back and releases the same transaction a second time.\n            transaction.transaction = undefined\n\n            discarding = this.#discardStartedTransaction(startTransactionPromise)\n\n            // Call `#closeTransaction` to update internal state. It won't actually attempt\n            // to rollback the tx itself because `transaction.transaction` is undefined.\n            await this.#closeTransaction(transaction, 'timed_out')\n\n            throw new TransactionStartTimeoutError()\n          }\n\n          transaction.status = 'running'\n          // Startup is over, so the execution timeout below and the `timeTaken` diagnostic\n          // measure the transaction itself rather than the wait to open it.\n          transaction.startedAt = Date.now()\n          // Start timeout to wait for transaction to be finished.\n          transaction.timer = this.#startTransactionTimeout(transaction.id, options.timeout)\n          return { id: transaction.id }\n        case 'timed_out':\n        case 'running':\n        case 'committed':\n        case 'rolled_back':\n          throw new TransactionInternalConsistencyError(\n            `Transaction in invalid state ${transaction.status} although it just finished startup.`,\n          )\n        default:\n          return assertNever(transaction['status'], 'Unknown transaction status.')\n      }\n    } finally {\n      this.#startingTransactions.delete(starting)\n\n      if (discarding) {\n        void discarding.finally(starting.markSettled)\n      } else {\n        starting.markSettled()\n      }\n    }\n  }\n\n  /**\n   * Rolls back a transaction whose start was abandoned, and releases its connection.\n   *\n   * The `startTransaction` promise may still be running in the background. If it eventually\n   * succeeds, we need to roll back and release the connection to avoid leaking it and\n   * exhausting the connection pool. For adapters that don't use phantom queries (e.g. pg/neon),\n   * `rollback()` only releases the connection without sending SQL, so we send an explicit\n   * ROLLBACK first; otherwise the connection returns to the pool mid-transaction because\n   * `BEGIN` already ran on the wire during startup.\n   *\n   * Errors are only logged: the caller has already reported the failure that led here.\n   */\n  async #discardStartedTransaction(startTransactionPromise: Promise<Transaction>): Promise<void> {\n    try {\n      const tx = await startTransactionPromise\n      if (tx.options.usePhantomQuery) {\n        await tx.rollback()\n      } else {\n        try {\n          await tx.executeRaw(ROLLBACK_QUERY())\n        } finally {\n          await tx.rollback()\n        }\n      }\n    } catch (e) {\n      debug('error in discarded transaction:', e)\n    }\n  }\n\n  async commitTransaction(transactionId: string): Promise<void> {\n    return await this.tracingHelper.runInChildSpan('commit_transaction', async () => {\n      await this.#withActiveTransactionLock(transactionId, 'commit', async (txw) => {\n        if (txw.depth > 1) {\n          if (!txw.transaction) throw new TransactionNotFoundError()\n          const savepointName = txw.savepoints.at(-1)\n          if (!savepointName) {\n            throw new TransactionInternalConsistencyError(\n              `Missing savepoint for nested commit. Depth: ${txw.depth}, transactionId: ${txw.id}`,\n            )\n          }\n          try {\n            await this.#releaseSavepoint(txw.transaction, savepointName)\n          } finally {\n            // Keep internal state consistent even if releasing the savepoint fails.\n            txw.savepoints.pop()\n            txw.depth -= 1\n          }\n          return\n        }\n        await this.#closeTransaction(txw, 'committed')\n      })\n    })\n  }\n\n  async rollbackTransaction(transactionId: string): Promise<void> {\n    return await this.tracingHelper.runInChildSpan('rollback_transaction', async () => {\n      await this.#withActiveTransactionLock(transactionId, 'rollback', async (txw) => {\n        if (txw.depth > 1) {\n          if (!txw.transaction) throw new TransactionNotFoundError()\n          const savepointName = txw.savepoints.at(-1)\n          if (!savepointName) {\n            throw new TransactionInternalConsistencyError(\n              `Missing savepoint for nested rollback. Depth: ${txw.depth}, transactionId: ${txw.id}`,\n            )\n          }\n\n          try {\n            await this.#requiredRollbackToSavepoint(txw.transaction)(savepointName)\n            await this.#releaseSavepoint(txw.transaction, savepointName)\n          } finally {\n            // Keep internal state consistent even if rollback/release fails.\n            txw.savepoints.pop()\n            txw.depth -= 1\n          }\n          return\n        }\n        await this.#closeTransaction(txw, 'rolled_back')\n      })\n    })\n  }\n\n  async getTransaction(txInfo: TransactionInfo, operation: string): Promise<Transaction> {\n    let tx = this.#getActiveOrClosingTransaction(txInfo.id, operation)\n    if (tx.status === 'closing') {\n      await tx.closing\n      // Fetch again to ensure proper error propagation after it's been closed.\n      tx = this.#getActiveOrClosingTransaction(txInfo.id, operation)\n    }\n    if (!tx.transaction) throw new TransactionNotFoundError()\n    return tx.transaction\n  }\n\n  #getActiveOrClosingTransaction(transactionId: string, operation: string): TransactionWrapper {\n    const transaction = this.transactions.get(transactionId)\n\n    if (!transaction) {\n      const closedTransaction = this.closedTransactions.find((tx) => tx.id === transactionId)\n      if (closedTransaction) {\n        debug('Transaction already closed.', { transactionId, status: closedTransaction.status })\n        switch (closedTransaction.status) {\n          case 'closing':\n          case 'waiting':\n          case 'running':\n            throw new TransactionInternalConsistencyError('Active transaction found in closed transactions list.')\n          case 'committed':\n            throw new TransactionClosedError(operation)\n          case 'rolled_back':\n            throw new TransactionRolledBackError(operation)\n          case 'timed_out':\n            throw new TransactionExecutionTimeoutError(operation, {\n              timeout: closedTransaction.timeout!,\n              timeTaken: Date.now() - closedTransaction.startedAt,\n            })\n        }\n      } else {\n        debug(`Transaction not found.`, transactionId)\n        throw new TransactionNotFoundError()\n      }\n    }\n\n    if (['committed', 'rolled_back', 'timed_out'].includes(transaction.status)) {\n      throw new TransactionInternalConsistencyError('Closed transaction found in active transactions map.')\n    }\n\n    return transaction\n  }\n\n  async cancelAllTransactions(): Promise<void> {\n    // Transactions that are still starting are not in `transactions` yet. Abort them so they\n    // discard whatever the driver hands over, and wait below, so that callers can dispose the\n    // driver adapter without cutting an in-progress rollback short.\n    const starting = [...this.#startingTransactions]\n    for (const { abortController } of starting) {\n      abortController.abort()\n    }\n\n    // TODO: call `map` on the iterator directly without collecting it into an array first\n    // once we drop support for Node.js 18 and 20.\n    await Promise.allSettled([\n      ...[...this.transactions.values()].map((tx) =>\n        this.#runSerialized(tx, async () => {\n          const current = this.transactions.get(tx.id)\n          if (current) {\n            await this.#closeTransaction(current, 'rolled_back')\n          }\n        }),\n      ),\n      ...starting.map(({ settled }) => settleWithin(settled, CANCEL_ROLLBACK_GRACE_MS)),\n    ])\n  }\n\n  #nextSavepointName(transaction: TransactionWrapper): string {\n    return `prisma_sp_${transaction.savepointCounter++}`\n  }\n\n  #requiredCreateSavepoint(transaction: Transaction): (name: string) => Promise<void> {\n    if (transaction.createSavepoint) {\n      return transaction.createSavepoint.bind(transaction)\n    }\n\n    throw new TransactionManagerError(\n      `Nested transactions are not supported by adapter \"${transaction.adapterName}\" (${transaction.provider}): createSavepoint is not implemented.`,\n    )\n  }\n\n  #requiredRollbackToSavepoint(transaction: Transaction): (name: string) => Promise<void> {\n    if (transaction.rollbackToSavepoint) {\n      return transaction.rollbackToSavepoint.bind(transaction)\n    }\n\n    throw new TransactionManagerError(\n      `Nested transactions are not supported by adapter \"${transaction.adapterName}\" (${transaction.provider}): rollbackToSavepoint is not implemented.`,\n    )\n  }\n\n  async #releaseSavepoint(transaction: Transaction, name: string): Promise<void> {\n    if (transaction.releaseSavepoint) {\n      await transaction.releaseSavepoint(name)\n    }\n  }\n\n  #debugTransactionAlreadyClosedOnTimeout(transactionId: string): void {\n    // Transaction was already committed or rolled back when timeout happened.\n    // Should normally not happen as timeout is cancelled when transaction is committed or rolled back.\n    // No further action needed though.\n    debug('Transaction already committed or rolled back when timeout happened.', transactionId)\n  }\n\n  #startTransactionTimeout(transactionId: string, timeout: number | undefined): NodeJS.Timeout | undefined {\n    const timeoutStartedAt = Date.now()\n    const timer = createTimeoutIfDefined(async () => {\n      // The timer callback's returned promise is not awaited by anyone, so any rejection from\n      // the rollback chain below (e.g. the adapter failing to send ROLLBACK on a connection the\n      // database already killed) would otherwise surface as an unhandled rejection and crash the\n      // process \u2014 outside the user's try/catch around $transaction. By the time the timeout fires\n      // the transaction is over by definition and the user can no longer act on it, so we swallow\n      // the failure here after logging it. Subsequent queries on the same transaction handle still\n      // reject cleanly via the expired-transaction path.\n      try {\n        debug('Transaction timed out.', { transactionId, timeoutStartedAt, timeout })\n\n        const tx = this.transactions.get(transactionId)\n        if (!tx) {\n          this.#debugTransactionAlreadyClosedOnTimeout(transactionId)\n          return\n        }\n\n        await this.#runSerialized(tx, async () => {\n          const current = this.transactions.get(transactionId)\n          if (current && ['running', 'waiting'].includes(current.status)) {\n            await this.#closeTransaction(current, 'timed_out')\n          } else {\n            this.#debugTransactionAlreadyClosedOnTimeout(transactionId)\n          }\n        })\n      } catch (error) {\n        debug('Error while closing timed-out transaction.', { transactionId, error })\n      }\n    }, timeout)\n\n    timer?.unref?.()\n    return timer\n  }\n\n  // Any operation that mutates or closes a transaction must run through this lock so\n  // status/savepoint/depth checks and updates happen against a stable view of state.\n  async #withActiveTransactionLock<T>(\n    transactionId: string,\n    operation: string,\n    callback: (tx: TransactionWrapper) => Promise<T>,\n  ): Promise<T> {\n    const tx = this.#getActiveOrClosingTransaction(transactionId, operation)\n    return await this.#runSerialized(tx, async () => {\n      const current = this.#getActiveOrClosingTransaction(transactionId, operation)\n      return await callback(current)\n    })\n  }\n\n  // Serializes operations per transaction id to prevent interleaving across awaits.\n  // This avoids races where one operation mutates savepoint/depth state while another\n  // operation is suspended, which could otherwise corrupt cleanup logic.\n  async #runSerialized<T>(tx: TransactionWrapper, callback: () => Promise<T>): Promise<T> {\n    const previousOperation = tx.operationQueue\n    let releaseOperationLock!: () => void\n    tx.operationQueue = new Promise<void>((resolve) => {\n      releaseOperationLock = resolve\n    })\n\n    await previousOperation\n    try {\n      return await callback()\n    } finally {\n      releaseOperationLock()\n    }\n  }\n\n  async #closeTransaction(tx: TransactionWrapper, status: 'committed' | 'rolled_back' | 'timed_out'): Promise<void> {\n    const createClosingPromise = async () => {\n      debug('Closing transaction.', { transactionId: tx.id, status })\n      try {\n        if (tx.transaction && status === 'committed') {\n          if (tx.transaction.options.usePhantomQuery) {\n            await this.#withQuerySpanAndEvent(PHANTOM_COMMIT_QUERY(), tx.transaction, () => tx.transaction!.commit())\n          } else {\n            const query = COMMIT_QUERY()\n            await this.#withQuerySpanAndEvent(query, tx.transaction, () => tx.transaction!.executeRaw(query)).then(\n              () => tx.transaction!.commit(),\n              (err) => {\n                const fail = () => Promise.reject(err)\n                return tx.transaction!.rollback().then(fail, fail)\n              },\n            )\n          }\n        } else if (tx.transaction) {\n          if (tx.transaction.options.usePhantomQuery) {\n            await this.#withQuerySpanAndEvent(PHANTOM_ROLLBACK_QUERY(), tx.transaction, () =>\n              tx.transaction!.rollback(),\n            )\n          } else {\n            const query = ROLLBACK_QUERY()\n            try {\n              await this.#withQuerySpanAndEvent(query, tx.transaction, () => tx.transaction!.executeRaw(query))\n            } finally {\n              await tx.transaction.rollback()\n            }\n          }\n        }\n      } finally {\n        tx.status = status\n        clearTimeout(tx.timer)\n        tx.timer = undefined\n\n        this.transactions.delete(tx.id)\n\n        this.closedTransactions.push(tx)\n        if (this.closedTransactions.length > MAX_CLOSED_TRANSACTIONS) {\n          this.closedTransactions.shift()\n        }\n      }\n    }\n\n    if (tx.status === 'closing') {\n      await tx.closing\n      // Fetch again to ensure proper error propagation after it's been closed.\n      this.#getActiveOrClosingTransaction(tx.id, status === 'committed' ? 'commit' : 'rollback')\n    } else {\n      await Object.assign(tx, {\n        status: 'closing',\n        reason: status,\n        closing: createClosingPromise(),\n      }).closing\n    }\n  }\n\n  #validateOptions(options: Options) {\n    // Supplying timeout default values is cared for upstream already.\n    if (!options.timeout) throw new TransactionManagerError('timeout is required')\n    if (!options.maxWait) throw new TransactionManagerError('maxWait is required')\n\n    // Snapshot level only supported for MS SQL Server, which is not supported via driver adapters so far.\n    if (options.isolationLevel === 'SNAPSHOT') throw new InvalidTransactionIsolationLevelError(options.isolationLevel)\n\n    return {\n      ...options,\n      timeout: options.timeout,\n      maxWait: options.maxWait,\n    }\n  }\n\n  #withQuerySpanAndEvent<T>(query: SqlQuery, queryable: SqlQueryable, execute: () => Promise<T>): Promise<T> {\n    return withQuerySpanAndEvent({\n      query,\n      execute,\n      provider: this.#provider ?? queryable.provider,\n      tracingHelper: this.tracingHelper,\n      onQuery: this.#onQuery,\n    })\n  }\n}\n\nfunction createTimeoutIfDefined(cb: () => void, ms: number | undefined): NodeJS.Timeout | undefined {\n  return ms !== undefined ? setTimeout(cb, ms) : undefined\n}\n\n/**\n * Settles when `promise` does, or resolves after `timeout` milliseconds, whichever happens\n * first. A rejection is passed on rather than absorbed.\n */\nfunction settleWithin(promise: Promise<void>, timeout: number): Promise<void> {\n  let timer: NodeJS.Timeout | undefined\n\n  const deadline = new Promise<void>((resolve) => {\n    timer = setTimeout(resolve, timeout)\n    timer?.unref?.()\n  })\n\n  return Promise.race([promise, deadline]).finally(() => clearTimeout(timer))\n}\n", "type Crypto = {\n  randomUUID: () => string\n}\n\nasync function getCrypto(): Promise<Crypto> {\n  // TODO: always use `globalThis.crypto` when we drop Node.js 18 support\n  return globalThis.crypto ?? (await import('node:crypto'))\n}\n\nexport async function randomUUID(): Promise<string> {\n  const crypto = await getCrypto()\n  return crypto.randomUUID()\n}\n", "/**\n * Equivalent to `once` from `node:events` for DOM {@link EventTarget}.\n *\n * It is useful, e.g., to wait for an `abort` event on {@link AbortSignal}.\n * While in Node.js `AbortSignal` does implement `EventEmitter` interface\n * and is compatible with the `once` utility in `node:events`, it is not\n * necessarily the case in other JS runtimes.\n */\nexport async function once(target: EventTarget, event: string): Promise<Event> {\n  return new Promise((resolve) => {\n    target.addEventListener(event, resolve, { once: true })\n  })\n}\n", "import { UserFacingError } from '../user-facing-error'\n\nexport class TransactionManagerError extends UserFacingError {\n  name = 'TransactionManagerError'\n\n  constructor(message: string, meta?: Record<string, unknown>) {\n    super('Transaction API error: ' + message, 'P2028', meta)\n  }\n}\n\nexport class TransactionNotFoundError extends TransactionManagerError {\n  constructor() {\n    super(\n      \"Transaction not found. Transaction ID is invalid, refers to an old closed transaction Prisma doesn't have information about anymore, or was obtained before disconnecting.\",\n    )\n  }\n}\n\nexport class TransactionClosedError extends TransactionManagerError {\n  constructor(operation: string) {\n    super(`Transaction already closed: A ${operation} cannot be executed on a committed transaction.`)\n  }\n}\n\nexport class TransactionRolledBackError extends TransactionManagerError {\n  constructor(operation: string) {\n    super(`Transaction already closed: A ${operation} cannot be executed on a transaction that was rolled back.`)\n  }\n}\n\nexport class TransactionStartTimeoutError extends TransactionManagerError {\n  constructor() {\n    super('Unable to start a transaction in the given time.')\n  }\n}\n\nexport class TransactionExecutionTimeoutError extends TransactionManagerError {\n  constructor(operation: string, { timeout, timeTaken }: { timeout: number; timeTaken: number }) {\n    super(\n      `A ${operation} cannot be executed on an expired transaction. \\\nThe timeout for this transaction was ${timeout} ms, however ${timeTaken} ms passed since the start \\\nof the transaction. Consider increasing the interactive transaction timeout \\\nor doing less work in the transaction.`,\n      { operation, timeout, timeTaken },\n    )\n  }\n}\n\nexport class TransactionInternalConsistencyError extends TransactionManagerError {\n  constructor(message: string) {\n    super(`Internal Consistency Error: ${message}`)\n  }\n}\n\nexport class InvalidTransactionIsolationLevelError extends TransactionManagerError {\n  constructor(isolationLevel: string) {\n    super(`Invalid isolation level: ${isolationLevel}`, { isolationLevel })\n  }\n}\n", "{\n  \"name\": \"@prisma/client\",\n  \"version\": \"7.10.0\",\n  \"description\": \"Prisma Client is an auto-generated, type-safe and modern JavaScript/TypeScript ORM for Node.js that's tailored to your data. Supports PostgreSQL, CockroachDB, MySQL, MariaDB, SQL Server, SQLite & MongoDB databases.\",\n  \"keywords\": [\n    \"ORM\",\n    \"Prisma\",\n    \"prisma2\",\n    \"Prisma Client\",\n    \"client\",\n    \"query\",\n    \"query-builder\",\n    \"database\",\n    \"db\",\n    \"JavaScript\",\n    \"JS\",\n    \"TypeScript\",\n    \"TS\",\n    \"SQL\",\n    \"SQLite\",\n    \"pg\",\n    \"Postgres\",\n    \"PostgreSQL\",\n    \"CockroachDB\",\n    \"MySQL\",\n    \"MariaDB\",\n    \"MSSQL\",\n    \"SQL Server\",\n    \"SQLServer\",\n    \"MongoDB\"\n  ],\n  \"main\": \"default.js\",\n  \"types\": \"default.d.ts\",\n  \"browser\": \"index-browser.js\",\n  \"exports\": {\n    \"./package.json\": \"./package.json\",\n    \".\": {\n      \"require\": {\n        \"types\": \"./default.d.ts\",\n        \"node\": \"./default.js\",\n        \"edge-light\": \"./default.js\",\n        \"workerd\": \"./default.js\",\n        \"worker\": \"./default.js\",\n        \"browser\": \"./index-browser.js\"\n      },\n      \"import\": {\n        \"types\": \"./default.d.ts\",\n        \"node\": \"./default.js\",\n        \"edge-light\": \"./default.js\",\n        \"workerd\": \"./default.js\",\n        \"worker\": \"./default.js\",\n        \"browser\": \"./index-browser.js\"\n      },\n      \"default\": \"./default.js\"\n    },\n    \"./extension\": {\n      \"types\": \"./extension.d.ts\",\n      \"require\": \"./extension.js\",\n      \"import\": \"./extension.js\",\n      \"default\": \"./extension.js\"\n    },\n    \"./index-browser\": {\n      \"types\": \"./index.d.ts\",\n      \"require\": \"./index-browser.js\",\n      \"import\": \"./index-browser.js\",\n      \"default\": \"./index-browser.js\"\n    },\n    \"./index\": {\n      \"types\": \"./index.d.ts\",\n      \"require\": \"./index.js\",\n      \"import\": \"./index.js\",\n      \"default\": \"./index.js\"\n    },\n    \"./edge\": {\n      \"types\": \"./edge.d.ts\",\n      \"require\": \"./edge.js\",\n      \"import\": \"./edge.js\",\n      \"default\": \"./edge.js\"\n    },\n    \"./runtime/client\": {\n      \"types\": \"./runtime/client.d.ts\",\n      \"node\": {\n        \"require\": \"./runtime/client.js\",\n        \"default\": \"./runtime/client.js\"\n      },\n      \"require\": \"./runtime/client.js\",\n      \"import\": \"./runtime/client.mjs\",\n      \"default\": \"./runtime/client.mjs\"\n    },\n    \"./runtime/wasm-compiler-edge\": {\n      \"types\": \"./runtime/wasm-compiler-edge.d.ts\",\n      \"require\": \"./runtime/wasm-compiler-edge.js\",\n      \"import\": \"./runtime/wasm-compiler-edge.mjs\",\n      \"default\": \"./runtime/wasm-compiler-edge.mjs\"\n    },\n    \"./runtime/index-browser\": {\n      \"types\": \"./runtime/index-browser.d.ts\",\n      \"require\": \"./runtime/index-browser.js\",\n      \"import\": \"./runtime/index-browser.mjs\",\n      \"default\": \"./runtime/index-browser.mjs\"\n    },\n    \"./sql\": {\n      \"require\": {\n        \"types\": \"./sql.d.ts\",\n        \"node\": \"./sql.js\",\n        \"default\": \"./sql.js\"\n      },\n      \"import\": {\n        \"types\": \"./sql.d.ts\",\n        \"node\": \"./sql.mjs\",\n        \"default\": \"./sql.mjs\"\n      },\n      \"default\": \"./sql.js\"\n    },\n    \"./*\": \"./*\"\n  },\n  \"license\": \"Apache-2.0\",\n  \"engines\": {\n    \"node\": \"^20.19 || ^22.12 || >=24.0\"\n  },\n  \"homepage\": \"https://www.prisma.io\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/prisma/prisma.git\",\n    \"directory\": \"packages/client\"\n  },\n  \"author\": \"Tim Suchanek <suchanek@prisma.io>\",\n  \"bugs\": \"https://github.com/prisma/prisma/issues\",\n  \"scripts\": {\n    \"dev\": \"DEV=true tsx helpers/build.ts\",\n    \"build\": \"tsx helpers/build.ts\",\n    \"test\": \"dotenv -e ../../.db.env -- jest --silent\",\n    \"test:e2e\": \"dotenv -e ../../.db.env -- tsx tests/e2e/_utils/run.ts\",\n    \"test:functional\": \"dotenv -e ../../.db.env -- tsx helpers/functional-test/run-tests.ts\",\n    \"test:functional:client\": \"pnpm run test:functional --client-runtime client\",\n    \"test:functional:code\": \"dotenv -e ../../.db.env -- tsx helpers/functional-test/run-tests.ts --no-types\",\n    \"test:functional:types\": \"dotenv -e ../../.db.env -- tsx helpers/functional-test/run-tests.ts --types-only\",\n    \"test-notypes\": \"dotenv -e ../../.db.env -- jest --testPathIgnorePatterns src/__tests__/types/types.test.ts\",\n    \"prepublishOnly\": \"pnpm run build\",\n    \"new-test\": \"tsx ./helpers/new-test/new-test.ts\"\n  },\n  \"files\": [\n    \"README.md\",\n    \"runtime\",\n    \"scripts\",\n    \"edge.js\",\n    \"edge.d.ts\",\n    \"index.js\",\n    \"index.d.ts\",\n    \"default.js\",\n    \"default.d.ts\",\n    \"index-browser.js\",\n    \"extension.js\",\n    \"extension.d.ts\",\n    \"sql.d.ts\",\n    \"sql.js\",\n    \"sql.mjs\"\n  ],\n  \"devDependencies\": {\n    \"@cloudflare/workers-types\": \"^4.20251014.0\",\n    \"@codspeed/benchmark.js-plugin\": \"4.0.0\",\n    \"@faker-js/faker\": \"9.6.0\",\n    \"@fast-check/jest\": \"2.0.3\",\n    \"@hono/node-server\": \"^1.19.14\",\n    \"@inquirer/prompts\": \"7.3.3\",\n    \"@jest/create-cache-key-function\": \"29.7.0\",\n    \"@jest/globals\": \"29.7.0\",\n    \"@jest/test-sequencer\": \"29.7.0\",\n    \"@libsql/client\": \"0.8.1\",\n    \"@neondatabase/serverless\": \"0.10.2\",\n    \"@opentelemetry/api\": \"1.9.0\",\n    \"@opentelemetry/context-async-hooks\": \"2.1.0\",\n    \"@opentelemetry/instrumentation\": \"0.206.0\",\n    \"@opentelemetry/resources\": \"2.1.0\",\n    \"@opentelemetry/sdk-trace-base\": \"2.1.0\",\n    \"@opentelemetry/semantic-conventions\": \"1.37.0\",\n    \"@planetscale/database\": \"1.19.0\",\n    \"@prisma/adapter-better-sqlite3\": \"workspace:*\",\n    \"@prisma/adapter-d1\": \"workspace:*\",\n    \"@prisma/adapter-libsql\": \"workspace:*\",\n    \"@prisma/adapter-mariadb\": \"workspace:*\",\n    \"@prisma/adapter-mssql\": \"workspace:*\",\n    \"@prisma/adapter-neon\": \"workspace:*\",\n    \"@prisma/adapter-pg\": \"workspace:*\",\n    \"@prisma/adapter-planetscale\": \"workspace:*\",\n    \"@prisma/client-common\": \"workspace:*\",\n    \"@prisma/client-engine-runtime\": \"workspace:*\",\n    \"@prisma/client-generator-js\": \"workspace:*\",\n    \"@prisma/client-generator-ts\": \"workspace:*\",\n    \"@prisma/config\": \"workspace:*\",\n    \"@prisma/debug\": \"workspace:*\",\n    \"@prisma/dmmf\": \"workspace:*\",\n    \"@prisma/driver-adapter-utils\": \"workspace:*\",\n    \"@prisma/engines\": \"workspace:*\",\n    \"@prisma/engines-version\": \"7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3\",\n    \"@prisma/fetch-engine\": \"workspace:*\",\n    \"@prisma/generator\": \"workspace:*\",\n    \"@prisma/generator-helper\": \"workspace:*\",\n    \"@prisma/get-platform\": \"workspace:*\",\n    \"@prisma/instrumentation\": \"workspace:*\",\n    \"@prisma/instrumentation-contract\": \"workspace:*\",\n    \"@prisma/internals\": \"workspace:*\",\n    \"@prisma/json-protocol\": \"workspace:*\",\n    \"@prisma/migrate\": \"workspace:*\",\n    \"@prisma/param-graph\": \"workspace:*\",\n    \"@prisma/param-graph-builder\": \"workspace:*\",\n    \"@prisma/query-compiler-wasm\": \"7.10.0-4.0edf323efd1d98336f3f0a68684b56f689b900d3\",\n    \"@prisma/query-plan-executor\": \"workspace:*\",\n    \"@prisma/sqlcommenter\": \"workspace:*\",\n    \"@prisma/sqlcommenter-trace-context\": \"workspace:*\",\n    \"@prisma/ts-builders\": \"workspace:*\",\n    \"@snaplet/copycat\": \"6.0.0\",\n    \"@swc-node/register\": \"1.10.9\",\n    \"@swc/core\": \"1.11.5\",\n    \"@swc/jest\": \"0.2.37\",\n    \"@timsuchanek/copy\": \"1.4.5\",\n    \"@types/debug\": \"4.1.12\",\n    \"@types/fs-extra\": \"11.0.4\",\n    \"@types/jest\": \"29.5.14\",\n    \"@types/js-levenshtein\": \"1.1.3\",\n    \"@types/mssql\": \"9.1.8\",\n    \"@types/node\": \"~20.19.24\",\n    \"@types/pg\": \"8.11.11\",\n    \"arg\": \"5.0.2\",\n    \"benchmark\": \"2.1.4\",\n    \"cookie-es\": \"2.0.0\",\n    \"execa\": \"8.0.1\",\n    \"expect-type\": \"1.2.2\",\n    \"fs-extra\": \"11.3.0\",\n    \"get-stream\": \"6.0.1\",\n    \"globby\": \"11.1.0\",\n    \"indent-string\": \"4.0.0\",\n    \"jest\": \"29.7.0\",\n    \"jest-extended\": \"4.0.2\",\n    \"jest-junit\": \"17.0.0\",\n    \"jest-serializer-ansi-escapes\": \"4.0.0\",\n    \"jest-snapshot\": \"29.7.0\",\n    \"js-levenshtein\": \"1.1.6\",\n    \"kleur\": \"4.1.5\",\n    \"klona\": \"2.0.6\",\n    \"mariadb\": \"3.4.5\",\n    \"memfs\": \"4.17.2\",\n    \"mssql\": \"11.0.1\",\n    \"new-github-issue-url\": \"0.2.1\",\n    \"p-retry\": \"4.6.2\",\n    \"pg\": \"8.14.1\",\n    \"resolve\": \"1.22.10\",\n    \"simple-statistics\": \"7.8.8\",\n    \"sort-keys\": \"5.1.0\",\n    \"source-map-support\": \"0.5.21\",\n    \"stacktrace-parser\": \"0.1.11\",\n    \"strip-ansi\": \"7.1.0\",\n    \"strip-indent\": \"4.0.0\",\n    \"tempy\": \"3.0.0\",\n    \"ts-pattern\": \"5.9.0\",\n    \"tsd\": \"0.31.2\",\n    \"typescript\": \"5.4.5\",\n    \"undici\": \"7.4.0\",\n    \"zx\": \"8.4.1\"\n  },\n  \"dependencies\": {\n    \"@prisma/client-runtime-utils\": \"workspace:*\"\n  },\n  \"peerDependencies\": {\n    \"prisma\": \"*\",\n    \"typescript\": \">=5.4.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"prisma\": {\n      \"optional\": true\n    },\n    \"typescript\": {\n      \"optional\": true\n    }\n  },\n  \"sideEffects\": false\n}", "import type { PrismaValue } from '@prisma/client-engine-runtime'\nimport type { ArgScalarType, ArgType } from '@prisma/driver-adapter-utils'\n\ntype RawParameters = {\n  args: PrismaValue[]\n  argTypes: ArgType[]\n}\n\nconst tagToArgScalarType: Record<string, ArgScalarType> = {\n  bigint: 'bigint',\n  date: 'datetime',\n  decimal: 'decimal',\n  bytes: 'bytes',\n}\n\nexport function deserializeRawParameters(serializedParameters: string): RawParameters {\n  let parsed: unknown\n  try {\n    parsed = JSON.parse(serializedParameters)\n  } catch (err) {\n    throw new Error(`Received invalid serialized parameters: ${err.message}`)\n  }\n  if (!Array.isArray(parsed)) {\n    throw new Error('Received invalid serialized parameters: expected an array')\n  }\n  const args = parsed.map((parameter: unknown) => decodeParameter(parameter))\n  const argTypes = parsed.map((parameter: unknown) => getArgType(parameter))\n  return { args, argTypes }\n}\n\nfunction decodeParameter(parameter: unknown): PrismaValue {\n  if (Array.isArray(parameter)) {\n    return parameter.map((item) => decodeParameter(item))\n  }\n\n  if (typeof parameter === 'object' && parameter !== null && 'prisma__value' in parameter) {\n    if (!('prisma__type' in parameter)) {\n      throw new Error('Invalid serialized parameter, prisma__type should be present when prisma__value is present')\n    }\n    return `${parameter.prisma__value}`\n  }\n\n  if (typeof parameter === 'object' && parameter !== null) {\n    return JSON.stringify(parameter)\n  }\n\n  return parameter as PrismaValue\n}\n\nfunction getArgType(parameter: unknown): ArgType {\n  if (Array.isArray(parameter)) {\n    return { scalarType: parameter.length > 0 ? getScalarType(parameter[0]) : 'unknown', arity: 'list' }\n  }\n\n  return { scalarType: getScalarType(parameter), arity: 'scalar' }\n}\n\nfunction getScalarType(parameter: unknown): ArgScalarType {\n  if (\n    typeof parameter === 'object' &&\n    parameter !== null &&\n    'prisma__type' in parameter &&\n    typeof parameter.prisma__type === 'string' &&\n    parameter.prisma__type in tagToArgScalarType\n  ) {\n    return tagToArgScalarType[parameter.prisma__type]\n  }\n\n  if (typeof parameter === 'number') {\n    return 'decimal'\n  }\n\n  if (typeof parameter === 'string') {\n    return 'string'\n  }\n\n  return 'unknown'\n}\n", "import type { JsonBatchQuery, JsonQuery } from '@prisma/json-protocol'\n\nimport { TransactionOptions } from '../Engine'\n\nexport function getBatchRequestPayload(batch: JsonQuery[], transaction?: TransactionOptions<unknown>): JsonBatchQuery {\n  return {\n    batch,\n    transaction: transaction?.kind === 'batch' ? { isolationLevel: transaction.options.isolationLevel } : undefined,\n  }\n}\n", "import { getLogs } from '@prisma/debug'\nimport { underline } from 'kleur/colors'\nimport stripAnsi from 'strip-ansi'\n\nimport type { ErrorWithLinkInput } from '../types/ErrorWithLinkInput'\nimport { maskQuery } from './maskQuery'\nimport { normalizeLogs } from './normalizeLogs'\nimport { getGitHubIssueUrl } from './util'\n\nexport function getErrorMessageWithLink({\n  version,\n  binaryTarget,\n  title,\n  description,\n  engineVersion,\n  database,\n  query,\n}: ErrorWithLinkInput) {\n  const gotLogs = getLogs(6000 - (query?.length ?? 0))\n  const logs = normalizeLogs(stripAnsi(gotLogs))\n  const moreInfo = description ? `# Description\\n\\`\\`\\`\\n${description}\\n\\`\\`\\`` : ''\n  const body = stripAnsi(\n    `Hi Prisma Team! My Prisma Client just crashed. This is the report:\n## Versions\n\n| Name            | Version            |\n|-----------------|--------------------|\n| Node            | ${process.version?.padEnd(19)}| \n| OS              | ${binaryTarget?.padEnd(19)}|\n| Prisma Client   | ${version?.padEnd(19)}|\n| Query Engine    | ${engineVersion?.padEnd(19)}|\n| Database        | ${database?.padEnd(19)}|\n\n${moreInfo}\n\n## Logs\n\\`\\`\\`\n${logs}\n\\`\\`\\`\n\n## Client Snippet\n\\`\\`\\`ts\n// PLEASE FILL YOUR CODE SNIPPET HERE\n\\`\\`\\`\n\n## Schema\n\\`\\`\\`prisma\n// PLEASE ADD YOUR SCHEMA HERE IF POSSIBLE\n\\`\\`\\`\n\n## Prisma Engine Query\n\\`\\`\\`\n${query ? maskQuery(query) : ''}\n\\`\\`\\`\n`,\n  )\n\n  const url = getGitHubIssueUrl({ title, body })\n  return `${title}\n\nThis is a non-recoverable error which probably happens when the Prisma Query Engine has a panic.\n\n${underline(url)}\n\nIf you want the Prisma team to look into it, please open the link above \uD83D\uDE4F\nTo increase the chance of success, please post your schema and a snippet of\nhow you used Prisma Client in the issue. \n`\n}\n", "export function maskQuery(query?: string): string {\n  if (!query) {\n    return ''\n  }\n  return (\n    query\n      // replace all strings with X\n      .replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, '\"X\"')\n      // replace all numbers with 5\n      .replace(/[\\s:\\[]([+-]?([0-9]*[.])?[0-9]+)/g, (substr) => {\n        return `${substr[0]}5`\n      })\n  )\n}\n", "/**\n * Removes the leading timestamps (from docker) and trailing ms (from debug)\n * @param logs logs to normalize\n */\nexport function normalizeLogs(logs: string): string {\n  return logs\n    .split('\\n')\n    .map((l) => {\n      return l\n        .replace(/^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z)\\s*/, '')\n        .replace(/\\+\\d+\\s*ms$/, '')\n    })\n    .join('\\n')\n}\n", "import newGitHubIssueUrl from 'new-github-issue-url'\n\nexport function getGitHubIssueUrl({\n  title,\n  user = 'prisma',\n  repo = 'prisma',\n  template = 'bug_report.yml',\n  body,\n}: {\n  title: string\n  user?: string\n  repo?: string\n  template?: string\n  body?: string\n}): string {\n  return newGitHubIssueUrl({\n    user,\n    repo,\n    template,\n    title,\n    body,\n  })\n}\n", "import {\n  type QueryEvent,\n  QueryInterpreter,\n  type SchemaProvider,\n  type TracingHelper,\n  TransactionManager,\n  type TransactionOptions,\n} from '@prisma/client-engine-runtime'\nimport type { ConnectionInfo, SqlDriverAdapter, SqlDriverAdapterFactory } from '@prisma/driver-adapter-utils'\nimport type { SqlCommenterPlugin } from '@prisma/sqlcommenter'\n\nimport type { InteractiveTransactionInfo } from '../common/types/Transaction'\nimport type { ExecutePlanParams, Executor, ProviderAndConnectionInfo } from './Executor'\n\nexport interface LocalExecutorOptions {\n  driverAdapterFactory: SqlDriverAdapterFactory\n  transactionOptions: TransactionOptions\n  tracingHelper: TracingHelper\n  onQuery?: (event: QueryEvent) => void\n  provider?: SchemaProvider\n  sqlCommenters?: SqlCommenterPlugin[]\n}\n\nexport class LocalExecutor implements Executor {\n  readonly #options: LocalExecutorOptions\n  readonly #driverAdapter: SqlDriverAdapter\n  readonly #transactionManager: TransactionManager\n  readonly #connectionInfo?: ConnectionInfo\n  readonly #interpreter: QueryInterpreter\n\n  constructor(options: LocalExecutorOptions, driverAdapter: SqlDriverAdapter, transactionManager: TransactionManager) {\n    this.#options = options\n    this.#driverAdapter = driverAdapter\n    this.#transactionManager = transactionManager\n    this.#connectionInfo = driverAdapter.getConnectionInfo?.()\n    this.#interpreter = QueryInterpreter.forSql({\n      onQuery: this.#options.onQuery,\n      tracingHelper: this.#options.tracingHelper,\n      provider: this.#options.provider,\n      connectionInfo: this.#connectionInfo,\n    })\n  }\n\n  static async connect(options: LocalExecutorOptions): Promise<LocalExecutor> {\n    let driverAdapter: SqlDriverAdapter | undefined = undefined\n    let transactionManager: TransactionManager | undefined = undefined\n\n    try {\n      driverAdapter = await options.driverAdapterFactory.connect()\n      transactionManager = new TransactionManager({\n        driverAdapter,\n        transactionOptions: options.transactionOptions,\n        tracingHelper: options.tracingHelper,\n        onQuery: options.onQuery,\n        provider: options.provider,\n      })\n    } catch (error) {\n      await driverAdapter?.dispose()\n      throw error\n    }\n\n    return new LocalExecutor(options, driverAdapter, transactionManager)\n  }\n\n  getConnectionInfo(): Promise<ProviderAndConnectionInfo> {\n    const connectionInfo = this.#connectionInfo ?? { supportsRelationJoins: false }\n    return Promise.resolve({ provider: this.#driverAdapter.provider, connectionInfo })\n  }\n\n  async execute({\n    plan,\n    placeholderValues: scope,\n    transaction,\n    batchIndex,\n    queryInfo,\n  }: ExecutePlanParams): Promise<unknown> {\n    const queryable = transaction\n      ? await this.#transactionManager.getTransaction(transaction, batchIndex !== undefined ? 'batch query' : 'query')\n      : this.#driverAdapter\n\n    return await this.#interpreter.run(plan, {\n      queryable,\n      transactionManager: transaction ? { enabled: false } : { enabled: true, manager: this.#transactionManager },\n      scope,\n      sqlCommenter: this.#options.sqlCommenters && {\n        plugins: this.#options.sqlCommenters,\n        queryInfo,\n      },\n    })\n  }\n\n  async startTransaction(options: TransactionOptions): Promise<InteractiveTransactionInfo> {\n    return { ...(await this.#transactionManager.startTransaction(options)), payload: undefined }\n  }\n\n  async commitTransaction(transaction: InteractiveTransactionInfo): Promise<void> {\n    await this.#transactionManager.commitTransaction(transaction.id)\n  }\n\n  async rollbackTransaction(transaction: InteractiveTransactionInfo): Promise<void> {\n    await this.#transactionManager.rollbackTransaction(transaction.id)\n  }\n\n  async disconnect(): Promise<void> {\n    try {\n      await this.#transactionManager.cancelAllTransactions()\n    } finally {\n      await this.#driverAdapter.dispose()\n    }\n  }\n\n  apiKey(): string | null {\n    return null\n  }\n}\n", "import type { BatchResponse, QueryPlanNode } from '@prisma/client-engine-runtime'\n\n// todo: store the query plan for the individual queries in a non-compacted batch\n// in the `#singleCache` so that it's possible to reuse them for compatible queries\n// outside of the batch in the future and avoid compiling them individually.\nexport class QueryPlanCache {\n  readonly #singleCache: Map<string, QueryPlanNode>\n  readonly #batchCache: Map<string, BatchResponse>\n  readonly #maxSize: number\n\n  constructor(maxSize = 1000) {\n    this.#singleCache = new Map()\n    this.#batchCache = new Map()\n    this.#maxSize = maxSize\n  }\n\n  getSingle(key: string): QueryPlanNode | undefined {\n    const entry = this.#singleCache.get(key)\n    if (entry) {\n      // Move to end for LRU behavior\n      this.#singleCache.delete(key)\n      this.#singleCache.set(key, entry)\n    }\n    return entry\n  }\n\n  setSingle(key: string, plan: QueryPlanNode): void {\n    if (this.#singleCache.has(key)) {\n      // Update existing entry (also moves to end for LRU)\n      this.#singleCache.delete(key)\n      this.#singleCache.set(key, plan)\n      return\n    }\n\n    // Evict oldest if at capacity\n    if (this.#singleCache.size >= this.#maxSize) {\n      const firstKey = this.#singleCache.keys().next().value\n      if (firstKey !== undefined) {\n        this.#singleCache.delete(firstKey)\n      }\n    }\n\n    this.#singleCache.set(key, plan)\n  }\n\n  getBatch(key: string): BatchResponse | undefined {\n    const entry = this.#batchCache.get(key)\n    if (entry) {\n      // Move to end for LRU behavior\n      this.#batchCache.delete(key)\n      this.#batchCache.set(key, entry)\n    }\n    return entry\n  }\n\n  setBatch(key: string, response: BatchResponse): void {\n    if (this.#batchCache.has(key)) {\n      // Update existing entry (also moves to end for LRU)\n      this.#batchCache.delete(key)\n      this.#batchCache.set(key, response)\n      return\n    }\n\n    // Evict oldest if at capacity\n    if (this.#batchCache.size >= this.#maxSize) {\n      const firstKey = this.#batchCache.keys().next().value\n      if (firstKey !== undefined) {\n        this.#batchCache.delete(firstKey)\n      }\n    }\n\n    this.#batchCache.set(key, response)\n  }\n\n  clear(): void {\n    this.#singleCache.clear()\n    this.#batchCache.clear()\n  }\n\n  get size(): number {\n    return this.#singleCache.size + this.#batchCache.size\n  }\n\n  get singleCacheSize(): number {\n    return this.#singleCache.size\n  }\n\n  get batchCacheSize(): number {\n    return this.#batchCache.size\n  }\n}\n", "import type { QueryEngineLogLevel } from '@prisma/client-common'\nimport { applySqlCommenters, type TransactionOptions } from '@prisma/client-engine-runtime'\nimport { PrismaClientKnownRequestError } from '@prisma/client-runtime-utils'\nimport { Debug } from '@prisma/debug'\nimport type { EngineTraceEvent, TracingHelper } from '@prisma/instrumentation-contract'\nimport type { SqlCommenterPlugin } from '@prisma/sqlcommenter'\nimport { parseSetCookie, serialize as serializeCookie } from 'cookie-es'\n\nimport { getUrlAndApiKey } from '../accelerate/getUrlAndApiKey'\nimport { type AccelerateHeaders, HeaderBuilder } from '../accelerate/HeaderBuilder'\nimport type { AccelerateExtensionFetch } from '../common/Engine'\nimport type { LogEmitter } from '../common/types/Events'\nimport type { QueryEngineResultExtensions } from '../common/types/QueryEngine'\nimport type { InteractiveTransactionInfo } from '../common/types/Transaction'\nimport type { ExecutePlanParams, Executor, ProviderAndConnectionInfo } from './Executor'\nimport { dateFromEngineTimestamp } from './utils/engine-timestamp'\n\nconst debug = Debug('prisma:client:clientEngine:remoteExecutor')\n\nexport interface RemoteExecutorOptions {\n  clientVersion: string\n  logEmitter: LogEmitter\n  logLevel: QueryEngineLogLevel\n  logQueries: boolean\n  tracingHelper: TracingHelper\n  accelerateUrl: string\n  sqlCommenters?: SqlCommenterPlugin[]\n}\n\nexport class RemoteExecutor implements Executor {\n  readonly #clientVersion: string\n  readonly #headerBuilder: HeaderBuilder\n  readonly #httpClient: HttpClient\n  readonly #logEmitter: LogEmitter\n  readonly #tracingHelper: TracingHelper\n  readonly #sqlCommenters?: SqlCommenterPlugin[]\n\n  constructor(options: RemoteExecutorOptions) {\n    this.#clientVersion = options.clientVersion\n    this.#logEmitter = options.logEmitter\n    this.#tracingHelper = options.tracingHelper\n    this.#sqlCommenters = options.sqlCommenters\n\n    const { url, apiKey } = getUrlAndApiKey({\n      clientVersion: options.clientVersion,\n      accelerateUrl: options.accelerateUrl,\n    })\n\n    this.#httpClient = new HttpClient(url)\n\n    this.#headerBuilder = new HeaderBuilder({\n      apiKey,\n      engineHash: options.clientVersion,\n      logLevel: options.logLevel,\n      logQueries: options.logQueries,\n      tracingHelper: options.tracingHelper,\n    })\n  }\n\n  async getConnectionInfo(): Promise<ProviderAndConnectionInfo> {\n    const connInfo = await this.#request({\n      path: '/connection-info',\n      method: 'GET',\n    })\n    return connInfo as ProviderAndConnectionInfo\n  }\n\n  async execute({\n    plan,\n    placeholderValues,\n    batchIndex,\n    model,\n    operation,\n    transaction,\n    customFetch,\n    queryInfo,\n  }: ExecutePlanParams): Promise<unknown> {\n    // Pre-compute comments from plugins\n    const comments =\n      queryInfo && this.#sqlCommenters?.length\n        ? applySqlCommenters(this.#sqlCommenters, { query: queryInfo })\n        : undefined\n\n    const response = await this.#request({\n      path: transaction ? `/transaction/${transaction.id}/query` : '/query',\n      method: 'POST',\n      body: {\n        model,\n        operation,\n        plan,\n        params: placeholderValues,\n        // Send pre-computed comments to Query Plan Executor\n        comments: comments && Object.keys(comments).length > 0 ? comments : undefined,\n      },\n      batchRequestIdx: batchIndex,\n      fetch: customFetch,\n    })\n\n    return (response as Record<string, unknown>).data\n  }\n\n  async startTransaction(options: TransactionOptions): Promise<InteractiveTransactionInfo> {\n    const txInfo = (await this.#request({\n      path: '/transaction/start',\n      method: 'POST',\n      body: options,\n    })) as { id: string }\n\n    return { ...txInfo, payload: undefined }\n  }\n\n  async commitTransaction(transaction: InteractiveTransactionInfo): Promise<void> {\n    await this.#request({\n      path: `/transaction/${transaction.id}/commit`,\n      method: 'POST',\n    })\n  }\n\n  async rollbackTransaction(transaction: InteractiveTransactionInfo): Promise<void> {\n    await this.#request({\n      path: `/transaction/${transaction.id}/rollback`,\n      method: 'POST',\n    })\n  }\n\n  disconnect(): Promise<void> {\n    return Promise.resolve()\n  }\n\n  apiKey(): string | null {\n    return this.#headerBuilder.apiKey\n  }\n\n  async #request({\n    path,\n    method,\n    body,\n    fetch = globalThis.fetch,\n    batchRequestIdx,\n  }: {\n    path: string\n    method: string\n    body?: unknown\n    fetch?: AccelerateExtensionFetch\n    batchRequestIdx?: number\n  }): Promise<unknown> {\n    const response = await this.#httpClient.request({\n      method,\n      path,\n      headers: this.#headerBuilder.build(),\n      body,\n      fetch,\n    })\n\n    if (!response.ok) {\n      await this.#throwErrorFromResponse(response, batchRequestIdx)\n    }\n\n    const responseJson = await response.json()\n\n    if (typeof responseJson.extensions === 'object' && responseJson.extensions !== null) {\n      this.#processExtensions(responseJson.extensions as QueryEngineResultExtensions)\n    }\n\n    return responseJson\n  }\n\n  async #throwErrorFromResponse(response: Response, batchRequestIdx?: number): Promise<never> {\n    let errorCode = response.headers.get('Prisma-Error-Code')\n\n    const responseText = await response.text()\n    let errorJson: Record<string, unknown>\n    let errorMessage = responseText\n\n    try {\n      errorJson = JSON.parse(responseText)\n    } catch {\n      errorJson = {}\n    }\n\n    if (typeof errorJson.code === 'string') {\n      errorCode = errorJson.code\n    }\n\n    if (typeof errorJson.error === 'string') {\n      // Query Plan Executor errors\n      errorMessage = errorJson.error\n    } else if (typeof errorJson.message === 'string') {\n      // Accelerate errors\n      errorMessage = errorJson.message\n    } else if (\n      // Certain specific Accelerate errors that mimic the shape of legacy Data Proxy errors\n      // for backward compatibility with DataProxyEngine in the Client.\n      typeof errorJson.InvalidRequestError === 'object' &&\n      errorJson.InvalidRequestError !== null &&\n      typeof (errorJson.InvalidRequestError as Record<string, unknown>).reason === 'string'\n    ) {\n      errorMessage = (errorJson.InvalidRequestError as Record<string, unknown>).reason as string\n    }\n\n    errorMessage = errorMessage || `HTTP ${response.status}: ${response.statusText}`\n\n    const errorMeta =\n      typeof errorJson.meta === 'object' && errorJson.meta !== null\n        ? (errorJson.meta as Record<string, unknown>)\n        : errorJson\n\n    throw new PrismaClientKnownRequestError(errorMessage, {\n      clientVersion: this.#clientVersion,\n      code: errorCode ?? 'P6000',\n      batchRequestIdx,\n      meta: errorMeta,\n    })\n  }\n\n  #processExtensions(extensions: QueryEngineResultExtensions): void {\n    const logEvents = extensions.logs ?? []\n    if (extensions.spans) {\n      this.#tracingHelper.dispatchEngineSpans(extensions.spans, logEvents, (event) => this.#emitLogEvent(event))\n    } else {\n      for (const log of logEvents) {\n        this.#emitLogEvent(log)\n      }\n    }\n  }\n\n  #emitLogEvent(event: EngineTraceEvent): void {\n    switch (event.level) {\n      case 'debug':\n      case 'trace':\n        debug(event)\n        break\n\n      case 'error':\n      case 'warn':\n      case 'info': {\n        this.#logEmitter.emit(event.level, {\n          timestamp: dateFromEngineTimestamp(event.timestamp),\n          message: event.attributes.message ?? '',\n          target: event.target ?? 'RemoteExecutor',\n        })\n        break\n      }\n\n      case 'query': {\n        this.#logEmitter.emit('query', {\n          query: event.attributes.query ?? '',\n          timestamp: dateFromEngineTimestamp(event.timestamp),\n          duration: event.attributes.duration_ms ?? 0,\n          params: event.attributes.params ?? '',\n          target: event.target ?? 'RemoteExecutor',\n        })\n\n        break\n      }\n\n      default:\n        throw new Error(`Unexpected log level: ${event.level satisfies never}`)\n    }\n  }\n}\n\n/**\n * HTTP client with support for cookies and machine hint headers.\n *\n * Accelerate uses cookies to route requests inside interactive transactions to\n * the correct instance.\n */\nclass HttpClient {\n  readonly #baseUrl: URL\n  readonly #cookieJar: Map<string, { name: string; value: string; domain: string; path: string; expires?: Date }>\n  #machineHint: string | undefined\n\n  constructor(baseUrl: URL) {\n    this.#baseUrl = baseUrl\n    this.#cookieJar = new Map()\n  }\n\n  async request({\n    method,\n    path,\n    headers,\n    body,\n    fetch,\n  }: {\n    method: string\n    path: string\n    headers: AccelerateHeaders\n    body: unknown\n    fetch: AccelerateExtensionFetch\n  }): Promise<Response> {\n    const requestUrl = new URL(path, this.#baseUrl)\n\n    const cookieHeader = this.#getCookieHeader(requestUrl)\n    if (cookieHeader) {\n      headers['Cookie'] = cookieHeader\n    }\n\n    if (this.#machineHint) {\n      headers['Accelerate-Query-Engine-Jwt'] = this.#machineHint\n    }\n\n    const response = (await fetch(requestUrl.href, {\n      method,\n      body: body !== undefined ? JSON.stringify(body) : undefined,\n      headers,\n    })) as Response\n\n    debug(method, requestUrl, response.status, response.statusText)\n\n    this.#machineHint = response.headers.get('Accelerate-Query-Engine-Jwt') ?? undefined\n    this.#storeCookiesFromResponse(requestUrl, response)\n\n    return response\n  }\n\n  #getCookieHeader(url: URL): string | undefined {\n    const validCookies: string[] = []\n    const now = new Date()\n\n    for (const [key, cookie] of this.#cookieJar) {\n      if (cookie.expires && cookie.expires < now) {\n        this.#cookieJar.delete(key)\n        continue\n      }\n\n      const domain = cookie.domain ?? url.hostname\n      const path = cookie.path ?? '/'\n\n      if (url.hostname.endsWith(domain) && url.pathname.startsWith(path)) {\n        validCookies.push(serializeCookie(cookie.name, cookie.value))\n      }\n    }\n\n    return validCookies.length > 0 ? validCookies.join('; ') : undefined\n  }\n\n  #storeCookiesFromResponse(url: URL, response: Response): void {\n    // Try to get Set-Cookie headers using the modern API first\n    const setCookieHeaders = response.headers.getSetCookie?.() || []\n\n    // Fallback to the traditional method if getSetCookie is not available\n    if (setCookieHeaders.length === 0) {\n      const setCookieHeader = response.headers.get('Set-Cookie')\n      if (setCookieHeader) {\n        setCookieHeaders.push(setCookieHeader)\n      }\n    }\n\n    for (const cookieString of setCookieHeaders) {\n      const cookie = parseSetCookie(cookieString)\n\n      const domain = cookie.domain ?? url.hostname\n      const path = cookie.path ?? '/'\n      const key = `${domain}:${path}:${cookie.name}`\n\n      this.#cookieJar.set(key, {\n        name: cookie.name,\n        value: cookie.value,\n        domain,\n        path,\n        expires: cookie.expires,\n      })\n    }\n  }\n}\n", "function parse(str, options) {\n  if (typeof str !== \"string\") {\n    throw new TypeError(\"argument str must be a string\");\n  }\n  const obj = {};\n  const opt = options || {};\n  const dec = opt.decode || decode;\n  let index = 0;\n  while (index < str.length) {\n    const eqIdx = str.indexOf(\"=\", index);\n    if (eqIdx === -1) {\n      break;\n    }\n    let endIdx = str.indexOf(\";\", index);\n    if (endIdx === -1) {\n      endIdx = str.length;\n    } else if (endIdx < eqIdx) {\n      index = str.lastIndexOf(\";\", eqIdx - 1) + 1;\n      continue;\n    }\n    const key = str.slice(index, eqIdx).trim();\n    if (opt?.filter && !opt?.filter(key)) {\n      index = endIdx + 1;\n      continue;\n    }\n    if (void 0 === obj[key]) {\n      let val = str.slice(eqIdx + 1, endIdx).trim();\n      if (val.codePointAt(0) === 34) {\n        val = val.slice(1, -1);\n      }\n      obj[key] = tryDecode(val, dec);\n    }\n    index = endIdx + 1;\n  }\n  return obj;\n}\nfunction decode(str) {\n  return str.includes(\"%\") ? decodeURIComponent(str) : str;\n}\nfunction tryDecode(str, decode2) {\n  try {\n    return decode2(str);\n  } catch {\n    return str;\n  }\n}\n\nconst fieldContentRegExp = /^[\\u0009\\u0020-\\u007E\\u0080-\\u00FF]+$/;\nfunction serialize(name, value, options) {\n  const opt = options || {};\n  const enc = opt.encode || encodeURIComponent;\n  if (typeof enc !== \"function\") {\n    throw new TypeError(\"option encode is invalid\");\n  }\n  if (!fieldContentRegExp.test(name)) {\n    throw new TypeError(\"argument name is invalid\");\n  }\n  const encodedValue = enc(value);\n  if (encodedValue && !fieldContentRegExp.test(encodedValue)) {\n    throw new TypeError(\"argument val is invalid\");\n  }\n  let str = name + \"=\" + encodedValue;\n  if (void 0 !== opt.maxAge && opt.maxAge !== null) {\n    const maxAge = opt.maxAge - 0;\n    if (Number.isNaN(maxAge) || !Number.isFinite(maxAge)) {\n      throw new TypeError(\"option maxAge is invalid\");\n    }\n    str += \"; Max-Age=\" + Math.floor(maxAge);\n  }\n  if (opt.domain) {\n    if (!fieldContentRegExp.test(opt.domain)) {\n      throw new TypeError(\"option domain is invalid\");\n    }\n    str += \"; Domain=\" + opt.domain;\n  }\n  if (opt.path) {\n    if (!fieldContentRegExp.test(opt.path)) {\n      throw new TypeError(\"option path is invalid\");\n    }\n    str += \"; Path=\" + opt.path;\n  }\n  if (opt.expires) {\n    if (!isDate(opt.expires) || Number.isNaN(opt.expires.valueOf())) {\n      throw new TypeError(\"option expires is invalid\");\n    }\n    str += \"; Expires=\" + opt.expires.toUTCString();\n  }\n  if (opt.httpOnly) {\n    str += \"; HttpOnly\";\n  }\n  if (opt.secure) {\n    str += \"; Secure\";\n  }\n  if (opt.priority) {\n    const priority = typeof opt.priority === \"string\" ? opt.priority.toLowerCase() : opt.priority;\n    switch (priority) {\n      case \"low\": {\n        str += \"; Priority=Low\";\n        break;\n      }\n      case \"medium\": {\n        str += \"; Priority=Medium\";\n        break;\n      }\n      case \"high\": {\n        str += \"; Priority=High\";\n        break;\n      }\n      default: {\n        throw new TypeError(\"option priority is invalid\");\n      }\n    }\n  }\n  if (opt.sameSite) {\n    const sameSite = typeof opt.sameSite === \"string\" ? opt.sameSite.toLowerCase() : opt.sameSite;\n    switch (sameSite) {\n      case true: {\n        str += \"; SameSite=Strict\";\n        break;\n      }\n      case \"lax\": {\n        str += \"; SameSite=Lax\";\n        break;\n      }\n      case \"strict\": {\n        str += \"; SameSite=Strict\";\n        break;\n      }\n      case \"none\": {\n        str += \"; SameSite=None\";\n        break;\n      }\n      default: {\n        throw new TypeError(\"option sameSite is invalid\");\n      }\n    }\n  }\n  if (opt.partitioned) {\n    str += \"; Partitioned\";\n  }\n  return str;\n}\nfunction isDate(val) {\n  return Object.prototype.toString.call(val) === \"[object Date]\" || val instanceof Date;\n}\n\nfunction parseSetCookie(setCookieValue, options) {\n  const parts = (setCookieValue || \"\").split(\";\").filter((str) => typeof str === \"string\" && !!str.trim());\n  const nameValuePairStr = parts.shift() || \"\";\n  const parsed = _parseNameValuePair(nameValuePairStr);\n  const name = parsed.name;\n  let value = parsed.value;\n  try {\n    value = options?.decode === false ? value : (options?.decode || decodeURIComponent)(value);\n  } catch {\n  }\n  const cookie = {\n    name,\n    value\n  };\n  for (const part of parts) {\n    const sides = part.split(\"=\");\n    const partKey = (sides.shift() || \"\").trimStart().toLowerCase();\n    const partValue = sides.join(\"=\");\n    switch (partKey) {\n      case \"expires\": {\n        cookie.expires = new Date(partValue);\n        break;\n      }\n      case \"max-age\": {\n        cookie.maxAge = Number.parseInt(partValue, 10);\n        break;\n      }\n      case \"secure\": {\n        cookie.secure = true;\n        break;\n      }\n      case \"httponly\": {\n        cookie.httpOnly = true;\n        break;\n      }\n      case \"samesite\": {\n        cookie.sameSite = partValue;\n        break;\n      }\n      default: {\n        cookie[partKey] = partValue;\n      }\n    }\n  }\n  return cookie;\n}\nfunction _parseNameValuePair(nameValuePairStr) {\n  let name = \"\";\n  let value = \"\";\n  const nameValueArr = nameValuePairStr.split(\"=\");\n  if (nameValueArr.length > 1) {\n    name = nameValueArr.shift();\n    value = nameValueArr.join(\"=\");\n  } else {\n    value = nameValuePairStr;\n  }\n  return { name, value };\n}\n\nfunction splitSetCookieString(cookiesString) {\n  if (Array.isArray(cookiesString)) {\n    return cookiesString.flatMap((c) => splitSetCookieString(c));\n  }\n  if (typeof cookiesString !== \"string\") {\n    return [];\n  }\n  const cookiesStrings = [];\n  let pos = 0;\n  let start;\n  let ch;\n  let lastComma;\n  let nextStart;\n  let cookiesSeparatorFound;\n  const skipWhitespace = () => {\n    while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n      pos += 1;\n    }\n    return pos < cookiesString.length;\n  };\n  const notSpecialChar = () => {\n    ch = cookiesString.charAt(pos);\n    return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n  };\n  while (pos < cookiesString.length) {\n    start = pos;\n    cookiesSeparatorFound = false;\n    while (skipWhitespace()) {\n      ch = cookiesString.charAt(pos);\n      if (ch === \",\") {\n        lastComma = pos;\n        pos += 1;\n        skipWhitespace();\n        nextStart = pos;\n        while (pos < cookiesString.length && notSpecialChar()) {\n          pos += 1;\n        }\n        if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n          cookiesSeparatorFound = true;\n          pos = nextStart;\n          cookiesStrings.push(cookiesString.slice(start, lastComma));\n          start = pos;\n        } else {\n          pos = lastComma + 1;\n        }\n      } else {\n        pos += 1;\n      }\n    }\n    if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n      cookiesStrings.push(cookiesString.slice(start));\n    }\n  }\n  return cookiesStrings;\n}\n\nexport { parse, parseSetCookie, serialize, splitSetCookieString };\n", "import { isPrismaPostgresDev, PRISMA_POSTGRES_PROTOCOL } from '@prisma/internals'\n\nimport { InvalidDatasourceError } from './errors/invalid-datasource-error'\n\nexport interface GetUrlAndApiKeyOptions {\n  clientVersion: string\n  accelerateUrl: string\n}\n\nexport interface UrlAndApiKey {\n  url: HttpUrl\n  apiKey: string\n}\n\nexport type HttpUrl = URL & { protocol: 'http' | 'https' }\n\nexport function getUrlAndApiKey(options: GetUrlAndApiKeyOptions): UrlAndApiKey {\n  const errorInfo = { clientVersion: options.clientVersion }\n\n  let url: URL\n  try {\n    url = new URL(options.accelerateUrl)\n  } catch (err) {\n    const message = (err as TypeError).message\n    throw new InvalidDatasourceError(\n      `Error validating \\`accelerateUrl\\`, the URL cannot be parsed, reason: ${message}`,\n      errorInfo,\n    )\n  }\n\n  const { protocol, searchParams } = url\n\n  if (protocol !== 'prisma:' && protocol !== PRISMA_POSTGRES_PROTOCOL) {\n    throw new InvalidDatasourceError(\n      `Error validating \\`accelerateUrl\\`: the URL must start with the protocol \\`prisma://\\` or \\`prisma+postgres://\\``,\n      errorInfo,\n    )\n  }\n\n  const apiKey = searchParams.get('api_key')\n  if (apiKey === null || apiKey.length < 1) {\n    throw new InvalidDatasourceError(\n      `Error validating \\`accelerateUrl\\`: the URL must contain a valid API key`,\n      errorInfo,\n    )\n  }\n\n  // To simplify things, `prisma dev`, for now, will not support HTTPS.\n  // In the future, if HTTPS for `prisma dev` becomes a thing, we'll need this line to be dynamic.\n  let httpScheme = isPrismaPostgresDev(url) ? 'http:' : 'https:'\n\n  if (process.env.TEST_CLIENT_ENGINE_REMOTE_EXECUTOR && url.searchParams.has('use_http')) {\n    httpScheme = 'http:'\n  }\n\n  // Switching from `prisma:` or `prisma+postgres:` to `http:` or `https:` by\n  // assigning to the `protocol` property is not allowed by the WHATWG URL API,\n  // it would be silently ignored without throwing an error. We have to manually\n  // update the protocol via string replacement.\n  const httpUrl = new URL(url.href.replace(protocol, httpScheme)) as HttpUrl\n\n  return { apiKey, url: httpUrl }\n}\n", "import { setClassName } from '@prisma/internals'\n\nimport type { AccelerateErrorInfo } from './accelerate-error'\nimport { AccelerateError } from './accelerate-error'\nimport { setRetryable } from './utils/set-retryable'\n\nexport interface InvalidDatasourceErrorInfo extends AccelerateErrorInfo {}\nexport class InvalidDatasourceError extends AccelerateError {\n  public name = 'InvalidDatasourceError'\n  public code = 'P6001'\n\n  constructor(message: string, info: InvalidDatasourceErrorInfo) {\n    super(message, setRetryable(info, false))\n  }\n}\nsetClassName(InvalidDatasourceError, 'InvalidDatasourceError')\n", "import { PrismaClientError, type PrismaClientErrorInfo } from '../../../errors/PrismaClientError'\n\nexport interface AccelerateErrorInfo extends PrismaClientErrorInfo {\n  isRetryable?: boolean\n}\n\nexport abstract class AccelerateError extends PrismaClientError {\n  isRetryable: boolean\n\n  constructor(message: string, info: AccelerateErrorInfo) {\n    super(message, info)\n\n    this.isRetryable = info.isRetryable ?? true\n  }\n}\n", "export interface PrismaClientErrorInfo {\n  clientVersion: string\n  cause?: Error\n}\n\nexport abstract class PrismaClientError extends Error {\n  public abstract name: string\n  public abstract code: string\n  public clientVersion: string\n  public cause?: Error // like https://github.com/es-shims/error-cause\n\n  constructor(message: string, info: PrismaClientErrorInfo) {\n    super(message)\n\n    this.clientVersion = info.clientVersion\n    this.cause = info.cause\n  }\n\n  get [Symbol.toStringTag]() {\n    return this.name\n  }\n}\n", "export function setRetryable<T>(info: T, retryable: boolean) {\n  return {\n    ...info,\n    isRetryable: retryable,\n  }\n}\n", "import type { QueryEngineLogLevel } from '@prisma/client-common'\nimport { enginesVersion } from '@prisma/engines-version'\nimport type { TracingHelper } from '@prisma/instrumentation-contract'\n\nexport type AccelerateHeaders = {\n  'Content-Type': string\n  'Prisma-Engine-Hash': string\n  'Prisma-Engine-Version': string\n  'X-Capture-Telemetry'?: string\n  'X-Transaction-Id'?: string\n  Accept: string\n  Authorization: string\n  traceparent?: string\n}\n\ntype HeaderBuilderOptions = {\n  traceparent?: string\n  transactionId?: string\n}\n\nexport class HeaderBuilder {\n  readonly apiKey: string\n  readonly tracingHelper: TracingHelper\n  readonly logLevel: QueryEngineLogLevel\n  readonly logQueries: boolean | undefined\n  readonly engineHash: string\n\n  constructor({\n    apiKey,\n    tracingHelper,\n    logLevel,\n    logQueries,\n    engineHash,\n  }: {\n    apiKey: string\n    tracingHelper: TracingHelper\n    logLevel: QueryEngineLogLevel\n    logQueries: boolean | undefined\n    engineHash: string\n  }) {\n    this.apiKey = apiKey\n    this.tracingHelper = tracingHelper\n    this.logLevel = logLevel\n    this.logQueries = logQueries\n    this.engineHash = engineHash\n  }\n\n  build({ traceparent, transactionId }: HeaderBuilderOptions = {}): AccelerateHeaders {\n    const headers: AccelerateHeaders = {\n      Accept: 'application/json',\n      Authorization: `Bearer ${this.apiKey}`,\n      'Content-Type': 'application/json',\n      'Prisma-Engine-Hash': this.engineHash,\n      'Prisma-Engine-Version': enginesVersion,\n    }\n\n    if (this.tracingHelper.isEnabled()) {\n      headers.traceparent = traceparent ?? this.tracingHelper.getTraceParent()\n    }\n\n    if (transactionId) {\n      headers['X-Transaction-Id'] = transactionId\n    }\n\n    const captureTelemetry = this.#buildCaptureSettings()\n\n    if (captureTelemetry.length > 0) {\n      headers['X-Capture-Telemetry'] = captureTelemetry.join(', ')\n    }\n\n    return headers\n  }\n\n  #buildCaptureSettings(): string[] {\n    const captureTelemetry: string[] = []\n\n    if (this.tracingHelper.isEnabled()) {\n      captureTelemetry.push('tracing')\n    }\n\n    if (this.logLevel) {\n      captureTelemetry.push(this.logLevel)\n    }\n\n    if (this.logQueries) {\n      captureTelemetry.push('query')\n    }\n\n    return captureTelemetry\n  }\n}\n", "export type EngineTimestamp = [seconds: number, nanoseconds: number]\n\n/**\n * Converts engine timestamp to JS timestamp, as accepted by `Date` constructor\n */\nexport function convertEngineTimestamp(timestamp: EngineTimestamp): number {\n  return timestamp[0] * 1e3 + timestamp[1] / 1e6\n}\n\n/**\n * Parses a `Date` from engine timestamp\n */\nexport function dateFromEngineTimestamp(timestamp: EngineTimestamp): Date {\n  return new Date(convertEngineTimestamp(timestamp))\n}\n", "import { QueryCompilerConstructor } from '@prisma/client-common'\nimport { PrismaClientInitializationError } from '@prisma/client-runtime-utils'\n\nimport { QueryCompilerLoader } from './types/QueryCompiler'\n\n// cache loaded wasm instances by provider\nconst loadedWasmInstances: Record<string, Promise<QueryCompilerConstructor>> = {}\n\nexport const wasmQueryCompilerLoader: QueryCompilerLoader = {\n  async loadQueryCompiler(config) {\n    const { clientVersion, compilerWasm } = config\n\n    if (compilerWasm === undefined) {\n      throw new PrismaClientInitializationError('WASM query compiler was unexpectedly `undefined`', clientVersion)\n    }\n\n    let loading: Promise<QueryCompilerConstructor>\n\n    // we only create the instance once for efficiency and also because wasm\n    // bindgen keeps an internal cache of its instance already, when the wasm\n    // compiler is loaded more than once it crashes with `unwrap_throw failed`.\n    if (config.activeProvider === undefined || loadedWasmInstances[config.activeProvider] === undefined) {\n      loading = (async () => {\n        const runtime = await compilerWasm.getRuntime()\n        const wasmModule = await compilerWasm.getQueryCompilerWasmModule()\n\n        if (wasmModule === undefined || wasmModule === null) {\n          throw new PrismaClientInitializationError(\n            'The loaded wasm module was unexpectedly `undefined` or `null` once loaded',\n            clientVersion,\n          )\n        }\n\n        // from https://developers.cloudflare.com/workers/runtime-apis/webassembly/rust/#javascript-plumbing-wasm-bindgen\n        const options = { [compilerWasm.importName]: runtime }\n        const instance = new WebAssembly.Instance(wasmModule, options)\n        const wbindgen_start = instance.exports.__wbindgen_start as () => void\n        runtime.__wbg_set_wasm(instance.exports)\n        wbindgen_start()\n        return runtime.QueryCompiler\n      })()\n\n      // only cache if we have an active provider\n      if (config.activeProvider !== undefined) {\n        loadedWasmInstances[config.activeProvider] = loading\n      }\n    } else {\n      loading = loadedWasmInstances[config.activeProvider]\n    }\n\n    return await loading\n  },\n}\n", "export const rawCommandArgsMapper = (command: object) => ({\n  command,\n})\n", "import { Sql } from '@prisma/client-runtime-utils'\nimport { Debug } from '@prisma/debug'\n\nimport { MiddlewareArgsMapper } from '../../getPrismaClient'\nimport { mssqlPreparedStatement } from '../../utils/mssqlPreparedStatement'\nimport { serializeRawParameters } from '../../utils/serializeRawParameters'\nimport { isTypedSql } from '../types/exported'\nimport { RawQueryArgs } from '../types/exported/RawQueryArgs'\n\nconst ALTER_RE = /^(\\s*alter\\s)/i\n\nconst debug = Debug('prisma:client')\n\n// TODO also check/disallow for CREATE, DROP\nexport function checkAlter(activeProvider: string, query: string, values: unknown[], invalidCall: string) {\n  if (activeProvider !== 'postgresql' && activeProvider !== 'cockroachdb') {\n    return\n  }\n  if (values.length > 0 && ALTER_RE.exec(query)) {\n    // See https://github.com/prisma/prisma-client-js/issues/940 for more info\n    throw new Error(`Running ALTER using ${invalidCall} is not supported\nUsing the example below you can still execute your query with Prisma, but please note that it is vulnerable to SQL injection attacks and requires you to take care of input sanitization.\n\nExample:\n  await prisma.$executeRawUnsafe(\\`ALTER USER prisma WITH PASSWORD '\\${password}'\\`)\n\nMore Information: https://pris.ly/d/execute-raw\n`)\n  }\n}\n\ntype RawQueryArgsMapperInput = {\n  clientMethod: string\n  activeProvider: string\n  clientVersion: string\n}\n\nexport const rawQueryArgsMapper =\n  ({ clientMethod, activeProvider, clientVersion }: RawQueryArgsMapperInput) =>\n  (args: RawQueryArgs) => {\n    // TODO Clean up types\n    let queryString = ''\n    let parameters: { values: string; __prismaRawParameters__: true } | undefined\n    if (isTypedSql(args)) {\n      queryString = args.sql\n      parameters = {\n        values: serializeRawParameters(args.values, clientVersion),\n        __prismaRawParameters__: true,\n      }\n    } else if (Array.isArray(args)) {\n      // If this was called as prisma.$executeRaw(<SQL>, [...values]), assume it is a pre-prepared SQL statement, and forward it without any changes\n      const [query, ...values] = args\n      queryString = query\n      parameters = {\n        values: serializeRawParameters(values || [], clientVersion),\n        __prismaRawParameters__: true,\n      }\n    } else {\n      // If this was called as prisma.$executeRaw`<SQL>` try to generate a SQL prepared statement\n      switch (activeProvider) {\n        case 'sqlite':\n        case 'mysql': {\n          queryString = args.sql\n          parameters = {\n            values: serializeRawParameters(args.values, clientVersion),\n            __prismaRawParameters__: true,\n          }\n          break\n        }\n\n        case 'cockroachdb':\n        case 'postgresql':\n        case 'postgres': {\n          queryString = args.text\n\n          parameters = {\n            values: serializeRawParameters(args.values, clientVersion),\n            __prismaRawParameters__: true,\n          }\n          break\n        }\n\n        case 'sqlserver': {\n          queryString = mssqlPreparedStatement(args)\n          parameters = {\n            values: serializeRawParameters(args.values, clientVersion),\n            __prismaRawParameters__: true,\n          }\n          break\n        }\n        default: {\n          throw new Error(`The ${activeProvider} provider does not support ${clientMethod}`)\n        }\n      }\n    }\n\n    if (parameters?.values) {\n      debug(`prisma.${clientMethod}(${queryString}, ${parameters.values})`)\n    } else {\n      debug(`prisma.${clientMethod}(${queryString})`)\n    }\n\n    return { query: queryString, parameters }\n  }\n\ntype MiddlewareRawArgsTemplateString = [string[], ...unknown[]]\ntype MiddlewareRawArgsSql = [Sql]\n\nexport const templateStringMiddlewareArgsMapper: MiddlewareArgsMapper<Sql, MiddlewareRawArgsTemplateString> = {\n  requestArgsToMiddlewareArgs(sql) {\n    return [sql.strings, ...sql.values]\n  },\n\n  middlewareArgsToRequestArgs(requestArgs) {\n    const [strings, ...values] = requestArgs\n    return new Sql(strings, values)\n  },\n}\n\nexport const sqlMiddlewareArgsMapper: MiddlewareArgsMapper<Sql, MiddlewareRawArgsSql> = {\n  requestArgsToMiddlewareArgs(sql) {\n    return [sql]\n  },\n\n  middlewareArgsToRequestArgs(requestArgs) {\n    return requestArgs[0]\n  },\n}\n", "import type { Sql } from '@prisma/client-runtime-utils'\n\n// Generate something like: SELECT * FROM User WHERE name = @P1 AND email = @P2 ...\nexport const mssqlPreparedStatement = (sql: Sql) => {\n  return sql.strings.reduce((acc, str, idx) => `${acc}@P${idx}${str}`)\n}\n", "import { Decimal, PrismaClientValidationError } from '@prisma/client-runtime-utils'\n\nimport { isDate, isValidDate } from './date'\n\nexport function serializeRawParameters(parameters: any[], clientVersion: string): string {\n  try {\n    return serializeRawParametersInternal(parameters, 'fast', clientVersion)\n  } catch (error) {\n    // Got TypeError (e.g., BigInt which JSON.stringify rejects), try replacing\n    // values unsupported by JSON with strings inside arrays and objects.\n    if (error instanceof TypeError) {\n      return serializeRawParametersInternal(parameters, 'slow', clientVersion)\n    }\n    throw error\n  }\n}\n\nfunction serializeRawParametersInternal(\n  parameters: any[],\n  objectSerialization: 'fast' | 'slow',\n  clientVersion: string,\n): string {\n  return JSON.stringify(parameters.map((parameter) => encodeParameter(parameter, objectSerialization, clientVersion)))\n}\n\nfunction encodeParameter(parameter: any, objectSerialization: 'fast' | 'slow', clientVersion: string): unknown {\n  if (Array.isArray(parameter)) {\n    return parameter.map((item) => encodeParameter(item, objectSerialization, clientVersion))\n  }\n  if (typeof parameter === 'bigint') {\n    return {\n      prisma__type: 'bigint',\n      prisma__value: parameter.toString(),\n    }\n  }\n\n  if (isDate(parameter)) {\n    if (!isValidDate(parameter)) {\n      throw new PrismaClientValidationError('Provided Date object is invalid', { clientVersion })\n    }\n    return {\n      prisma__type: 'date',\n      prisma__value: parameter.toJSON(),\n    }\n  }\n\n  if (Decimal.isDecimal(parameter)) {\n    return {\n      prisma__type: 'decimal',\n      prisma__value: parameter.toJSON(),\n    }\n  }\n\n  if (Buffer.isBuffer(parameter)) {\n    return {\n      prisma__type: 'bytes',\n      prisma__value: parameter.toString('base64'),\n    }\n  }\n\n  if (isArrayBufferLike(parameter)) {\n    return {\n      prisma__type: 'bytes',\n      prisma__value: Buffer.from(parameter).toString('base64'),\n    }\n  }\n\n  if (ArrayBuffer.isView(parameter)) {\n    const { buffer, byteOffset, byteLength } = parameter\n    return {\n      prisma__type: 'bytes',\n      prisma__value: Buffer.from(buffer, byteOffset, byteLength).toString('base64'),\n    }\n  }\n\n  if (typeof parameter === 'object' && objectSerialization === 'slow') {\n    return preprocessObject(parameter)\n  }\n\n  return parameter\n}\n\nfunction isArrayBufferLike(value: any): value is ArrayBufferLike {\n  if (value instanceof ArrayBuffer || value instanceof SharedArrayBuffer) {\n    return true\n  }\n\n  if (typeof value === 'object' && value !== null) {\n    return value[Symbol.toStringTag] === 'ArrayBuffer' || value[Symbol.toStringTag] === 'SharedArrayBuffer'\n  }\n\n  return false\n}\n\nfunction preprocessObject(obj: any): unknown {\n  if (typeof obj !== 'object' || obj === null) {\n    return obj\n  }\n\n  if (typeof obj.toJSON === 'function') {\n    return obj.toJSON()\n  }\n\n  // TODO: map from blaze would've been convenient here to map arrays and objects uniformly,\n  // but importing it in this file causes compilation errors in tsd tests.\n\n  if (Array.isArray(obj)) {\n    return obj.map(preprocessValueInObject)\n  }\n\n  const result = {} as any\n\n  for (const key of Object.keys(obj as object)) {\n    result[key] = preprocessValueInObject(obj[key])\n  }\n\n  return result\n}\n\nfunction preprocessValueInObject(value: any): unknown {\n  if (typeof value === 'bigint') {\n    return value.toString()\n  }\n\n  return preprocessObject(value)\n}\n", "import type { PrismaOperationSpec, PrismaPromise, PrismaPromiseTransaction } from './PrismaPromise'\n\nexport type PrismaPromiseCallback = (transaction?: PrismaPromiseTransaction) => Promise<unknown>\n\n/**\n * Creates a [[PrismaPromise]]. It is Prisma's implementation of `Promise` which\n * is essentially a proxy for `Promise`. All the transaction-compatible client\n * methods return one, this allows for pre-preparing queries without executing\n * them until `.then` is called. It's the foundation of Prisma's query batching.\n * @param callback that will be wrapped within our promise implementation\n * @see [[PrismaPromise]]\n * @returns\n */\nexport type PrismaPromiseFactory = <T extends PrismaOperationSpec<unknown>>(\n  callback: PrismaPromiseCallback,\n  op?: T,\n) => PrismaPromise<unknown>\n\n/**\n * Creates a factory, that allows creating PrismaPromises, bound to a specific transactions\n * @param transaction\n * @returns\n */\nexport function createPrismaPromiseFactory(transaction?: PrismaPromiseTransaction): PrismaPromiseFactory {\n  return function createPrismaPromise<TSpec extends PrismaOperationSpec<unknown>>(\n    callback: PrismaPromiseCallback,\n    op?: TSpec,\n  ): PrismaPromise<unknown, TSpec> {\n    let promise: PrismaPromise<unknown> | undefined\n    const _callback = (callbackTransaction = transaction): PrismaPromise<unknown> => {\n      try {\n        // promises cannot be triggered twice after resolving\n        if (callbackTransaction === undefined || callbackTransaction?.kind === 'itx') {\n          return (promise ??= valueToPromise(callback(callbackTransaction)))\n        }\n\n        // but for batch tx we can trigger them again & again\n        return valueToPromise(callback(callbackTransaction))\n      } catch (error) {\n        // if the callback throws, then we reject the promise\n        // and that is because exceptions are not always async\n        return Promise.reject(error) as PrismaPromise<unknown>\n      }\n    }\n\n    return {\n      get spec() {\n        return op!\n      },\n\n      then(onFulfilled, onRejected) {\n        return _callback().then(onFulfilled, onRejected)\n      },\n      catch(onRejected) {\n        return _callback().catch(onRejected)\n      },\n      finally(onFinally) {\n        return _callback().finally(onFinally)\n      },\n\n      requestTransaction(batchTransaction) {\n        const promise = _callback(batchTransaction)\n\n        if (promise.requestTransaction) {\n          // we want to have support for nested promises\n          return promise.requestTransaction(batchTransaction)\n        }\n\n        return promise\n      },\n      [Symbol.toStringTag]: 'PrismaPromise',\n    }\n  }\n}\n\nfunction valueToPromise<T>(thing: T): PrismaPromise<T> {\n  if (typeof thing['then'] === 'function') {\n    return thing as PrismaPromise<T>\n  }\n\n  return Promise.resolve(thing) as PrismaPromise<T>\n}\n", "import type { Context } from '@opentelemetry/api'\nimport {\n  type EngineSpan,\n  type EngineTraceEvent,\n  type ExtendedSpanOptions,\n  getGlobalTracingHelper,\n  type SpanCallback,\n  type TracingHelper,\n} from '@prisma/instrumentation-contract'\n\nexport const disabledTracingHelper: TracingHelper = {\n  isEnabled() {\n    return false\n  },\n  getTraceParent() {\n    // https://www.w3.org/TR/trace-context/#examples-of-http-traceparent-headers\n    // If traceparent ends with -00 this trace will not be sampled\n    // the query engine needs the `10` for the span and trace id otherwise it does not parse this\n    return `00-10-10-00`\n  },\n\n  // Without tracing there are no spans to emit the events in the context of,\n  // but the events themselves must still reach the log emitter: logging is\n  // configured independently of tracing, and tracing can be disabled in the\n  // middle of a request that already asked the server for spans.\n  dispatchEngineSpans(\n    _spans: EngineSpan[],\n    events: EngineTraceEvent[],\n    emitLogEvent: (event: EngineTraceEvent) => void,\n  ) {\n    for (const event of events) {\n      emitLogEvent(event)\n    }\n  },\n\n  getActiveContext() {\n    return undefined\n  },\n\n  runInChildSpan<R>(options: string | ExtendedSpanOptions, callback: SpanCallback<R>): R {\n    return callback()\n  },\n}\n\n/**\n * Tracing helper that can dynamically switch between enabled/disabled states\n * Needed because tracing can be disabled and enabled with the calls to\n * PrismaInstrumentation::disable/enable at any point\n */\nclass DynamicTracingHelper implements TracingHelper {\n  isEnabled(): boolean {\n    return this.getTracingHelper().isEnabled()\n  }\n  getTraceParent(context: Context) {\n    return this.getTracingHelper().getTraceParent(context)\n  }\n\n  dispatchEngineSpans(\n    spans: EngineSpan[],\n    events: EngineTraceEvent[],\n    emitLogEvent: (event: EngineTraceEvent) => void,\n  ) {\n    return this.getTracingHelper().dispatchEngineSpans(spans, events, emitLogEvent)\n  }\n\n  getActiveContext() {\n    return this.getTracingHelper().getActiveContext()\n  }\n  runInChildSpan<R>(options: string | ExtendedSpanOptions, callback: SpanCallback<R>): R {\n    return this.getTracingHelper().runInChildSpan(options, callback)\n  }\n\n  private getTracingHelper(): TracingHelper {\n    return getGlobalTracingHelper() ?? disabledTracingHelper\n  }\n}\n\nexport function getTracingHelper(): TracingHelper {\n  return new DynamicTracingHelper()\n}\n", "export * from './global'\nexport * from './types'\n", "import packageJson from '../package.json'\nimport type { PrismaInstrumentationGlobalValue, TracingHelper } from './types'\n\nconst majorVersion = packageJson.version.split('.')[0]\n\nconst GLOBAL_INSTRUMENTATION_KEY = 'PRISMA_INSTRUMENTATION'\nconst GLOBAL_VERSIONED_INSTRUMENTATION_KEY = `V${majorVersion}_PRISMA_INSTRUMENTATION` as const\n\ntype GlobalThisWithPrismaInstrumentation = typeof globalThis & {\n  [GLOBAL_INSTRUMENTATION_KEY]?: PrismaInstrumentationGlobalValue\n} & {\n  [K in typeof GLOBAL_VERSIONED_INSTRUMENTATION_KEY]?: PrismaInstrumentationGlobalValue\n}\n\nconst globalThisWithPrismaInstrumentation = globalThis as GlobalThisWithPrismaInstrumentation\n\n/**\n * Returns the TracingHelper from the global instrumentation if available,\n * preferring the versioned global over the fallback global for compatibility.\n */\nexport function getGlobalTracingHelper(): TracingHelper | undefined {\n  // Try versioned global first for major version isolation\n  const versionedGlobal = globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY]\n\n  if (versionedGlobal?.helper) {\n    return versionedGlobal.helper\n  }\n\n  // Fall back to unversioned global for backwards compatibility\n  // TODO(v8): Consider removing the fallback in future major versions\n  const fallbackGlobal = globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY]\n\n  return fallbackGlobal?.helper\n}\n\n/**\n * Sets the global tracing helper. This is called by @prisma/instrumentation\n * when instrumentation is enabled.\n */\nexport function setGlobalTracingHelper(helper: TracingHelper): void {\n  const globalValue: PrismaInstrumentationGlobalValue = { helper }\n\n  // Set both versioned and unversioned globals for compatibility\n  // TODO(v8): Consider only writing to the versioned global in future major versions\n  globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY] = globalValue\n  globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY] = globalValue\n}\n\n/**\n * Clears the global tracing helper. This is called by @prisma/instrumentation\n * when instrumentation is disabled.\n */\nexport function clearGlobalTracingHelper(): void {\n  delete globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY]\n  delete globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY]\n}\n", "{\n  \"name\": \"@prisma/instrumentation-contract\",\n  \"version\": \"7.10.0\",\n  \"description\": \"Shared types and utilities for Prisma instrumentation\",\n  \"main\": \"dist/index.js\",\n  \"module\": \"dist/index.mjs\",\n  \"types\": \"dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"require\": {\n        \"types\": \"./dist/index.d.ts\",\n        \"default\": \"./dist/index.js\"\n      },\n      \"import\": {\n        \"types\": \"./dist/index.d.mts\",\n        \"default\": \"./dist/index.mjs\"\n      }\n    }\n  },\n  \"license\": \"Apache-2.0\",\n  \"homepage\": \"https://www.prisma.io\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/prisma/prisma.git\",\n    \"directory\": \"packages/instrumentation-contract\"\n  },\n  \"bugs\": \"https://github.com/prisma/prisma/issues\",\n  \"scripts\": {\n    \"dev\": \"DEV=true tsx helpers/build.ts\",\n    \"build\": \"tsx helpers/build.ts\",\n    \"prepublishOnly\": \"pnpm run build\",\n    \"test\": \"vitest run\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"sideEffects\": false,\n  \"devDependencies\": {\n    \"@opentelemetry/api\": \"1.9.0\"\n  },\n  \"peerDependencies\": {\n    \"@opentelemetry/api\": \"^1.8\"\n  }\n}", "/**\n * Creates an exotic promise that opens after x `await`s.\n * @remarks\n * This is currently used for locking regular transactions.\n * This ensures that all queries are executed at once/batched.\n * Even if middlewares are in use, they'll all execute at once.\n * @param knock the amount of awaits to open the promise\n * @param cb the callback to execute and value to return\n * @returns\n */\nexport function getLockCountPromise<V = void>(knock: number, cb: () => V | void = () => {}) {\n  let resolve: (v: V | void) => void\n  const lock = new Promise<V | void>((res) => (resolve = res))\n\n  return {\n    then(onFulfilled) {\n      if (--knock === 0) resolve(cb())\n\n      return onFulfilled?.(lock as unknown as V | void)\n    },\n  } as PromiseLike<V | void>\n}\n", "type LogLevel = 'info' | 'query' | 'warn' | 'error'\ntype LogDefinition = {\n  level: LogLevel\n  emit: 'stdout' | 'event'\n}\n\nexport function getLogLevel(log: LogLevel | Array<LogLevel | LogDefinition>): LogLevel | undefined {\n  if (typeof log === 'string') {\n    return log\n  }\n  return log.reduce<LogLevel | undefined>((acc, curr) => {\n    const currentLevel = typeof curr === 'string' ? curr : curr.level\n    if (currentLevel === 'query') {\n      return acc\n    }\n    if (!acc) {\n      return currentLevel\n    }\n    if (curr === 'info' || acc === 'info') {\n      // info has precedence\n      return 'info'\n    }\n    return currentLevel\n  }, undefined)\n}\n", "import { Context } from '@opentelemetry/api'\nimport { deserializeJsonObject } from '@prisma/client-engine-runtime'\nimport { hasBatchIndex } from '@prisma/client-runtime-utils'\nimport { Debug } from '@prisma/debug'\nimport { assertNever } from '@prisma/internals'\nimport stripAnsi from 'strip-ansi'\n\nimport {\n  EngineValidationError,\n  InteractiveTransactionOptions,\n  JsonQuery,\n  LogEmitter,\n  TransactionOptions,\n} from '../runtime/core/engines'\nimport {\n  PrismaClientInitializationError,\n  PrismaClientKnownRequestError,\n  PrismaClientRustPanicError,\n  PrismaClientUnknownRequestError,\n} from '.'\nimport { AccelerateExtensionFetchDecorator } from './core/engines/common/Engine'\nimport { QueryEngineResultData } from './core/engines/common/types/QueryEngine'\nimport { throwValidationException } from './core/errorRendering/throwValidationException'\nimport { createApplyBatchExtensionsFunction } from './core/extensions/applyQueryExtensions'\nimport { MergedExtensionsList } from './core/extensions/MergedExtensionsList'\nimport { getBatchId } from './core/jsonProtocol/getBatchId'\nimport { isWrite } from './core/jsonProtocol/isWrite'\nimport { GlobalOmitOptions } from './core/jsonProtocol/serializeJsonQuery'\nimport { PrismaPromiseInteractiveTransaction, PrismaPromiseTransaction } from './core/request/PrismaPromise'\nimport { Action, JsArgs } from './core/types/exported/JsApi'\nimport { DataLoader } from './DataLoader'\nimport type { Client, Unpacker } from './getPrismaClient'\nimport { CallSite } from './utils/CallSite'\nimport { createErrorMessageWithContext } from './utils/createErrorMessageWithContext'\nimport { deepGet } from './utils/deep-set'\nimport { deserializeRawResult, RawResponse } from './utils/deserializeRawResults'\nimport { modelNameForTable } from './utils/modelNameForTable'\n\nconst debug = Debug('prisma:client:request_handler')\n\nexport type RequestParams = {\n  modelName?: string\n  action: Action\n  protocolQuery: JsonQuery\n  dataPath: string[]\n  clientMethod: string\n  callsite?: CallSite\n  transaction?: PrismaPromiseTransaction\n  extensions: MergedExtensionsList\n  args?: any\n  headers?: Record<string, string>\n  unpacker?: Unpacker\n  otelParentCtx?: Context\n  otelChildCtx?: Context\n  globalOmit?: GlobalOmitOptions\n  customDataProxyFetch?: AccelerateExtensionFetchDecorator\n}\n\nexport type HandleErrorParams = {\n  args: JsArgs\n  error: any\n  clientMethod: string\n  callsite?: CallSite\n  transaction?: PrismaPromiseTransaction\n  modelName?: string\n  globalOmit?: GlobalOmitOptions\n}\n\nexport class RequestHandler {\n  client: Client\n  dataloader: DataLoader<RequestParams>\n  private logEmitter?: LogEmitter\n\n  constructor(client: Client, logEmitter?: LogEmitter) {\n    this.logEmitter = logEmitter\n    this.client = client\n\n    this.dataloader = new DataLoader({\n      batchLoader: createApplyBatchExtensionsFunction(async ({ requests, customDataProxyFetch }) => {\n        const { transaction, otelParentCtx } = requests[0]\n        const queries = requests.map((r) => r.protocolQuery)\n        const traceparent = this.client._tracingHelper.getTraceParent(otelParentCtx)\n\n        // TODO: pass the child information to QE for it to issue links to queries\n        // const links = requests.map((r) => trace.getSpanContext(r.otelChildCtx!))\n\n        const containsWrite = requests.some((r) => isWrite(r.protocolQuery.action))\n\n        const results = await this.client._engine.requestBatch(queries, {\n          traceparent,\n          transaction: getTransactionOptions(transaction),\n          containsWrite,\n          customDataProxyFetch,\n        })\n\n        return results.map((result, i) => {\n          if (result instanceof Error) {\n            return result\n          }\n\n          try {\n            return this.mapQueryEngineResult(requests[i], result)\n          } catch (error) {\n            return error\n          }\n        })\n      }),\n\n      singleLoader: async (request) => {\n        const interactiveTransaction =\n          request.transaction?.kind === 'itx' ? getItxTransactionOptions(request.transaction) : undefined\n\n        const response = await this.client._engine.request(request.protocolQuery, {\n          traceparent: this.client._tracingHelper.getTraceParent(),\n          interactiveTransaction,\n          isWrite: isWrite(request.protocolQuery.action),\n          customDataProxyFetch: request.customDataProxyFetch,\n        })\n        return this.mapQueryEngineResult(request, response)\n      },\n\n      batchBy: (request) => {\n        // If the request is part of an interactive transaction, we want to group all requests with the same\n        // protocolQuery together to take advantage of automatic batching in the engine.\n        // Note that we only do this for interactive transactions, not for batch transactions, as it can lead to queries\n        // being executed out of order in batch transactions.\n        if (request.transaction?.kind === 'itx') {\n          const batchId = getBatchId(request.protocolQuery)\n          return `itx-${request.transaction.id}${batchId ? `-${batchId}` : ''}`\n        }\n\n        if (request.transaction?.id) {\n          return `transaction-${request.transaction.id}`\n        }\n\n        return getBatchId(request.protocolQuery)\n      },\n\n      batchOrder(requestA, requestB) {\n        if (requestA.transaction?.kind === 'batch' && requestB.transaction?.kind === 'batch') {\n          return requestA.transaction.index - requestB.transaction.index\n        }\n        return 0\n      },\n    })\n  }\n\n  async request(params: RequestParams) {\n    try {\n      return await this.dataloader.request(params)\n    } catch (error) {\n      const { clientMethod, callsite, transaction, args, modelName } = params\n      this.handleAndLogRequestError({\n        error,\n        clientMethod,\n        callsite,\n        transaction,\n        args,\n        modelName,\n        globalOmit: params.globalOmit,\n      })\n    }\n  }\n\n  mapQueryEngineResult({ dataPath, unpacker }: RequestParams, response: QueryEngineResultData<any>) {\n    const data = response?.data\n\n    /**\n     * Unpack\n     */\n    const result = this.unpack(data, dataPath, unpacker)\n    if (process.env.PRISMA_CLIENT_GET_TIME) {\n      return { data: result }\n    }\n    return result\n  }\n\n  /**\n   * Handles the error and logs it, logging the error is done synchronously waiting for the event\n   * handlers to finish.\n   */\n  handleAndLogRequestError(params: HandleErrorParams): never {\n    try {\n      this.handleRequestError(params)\n    } catch (err) {\n      if (this.logEmitter) {\n        this.logEmitter.emit('error', { message: err.message, target: params.clientMethod, timestamp: new Date() })\n      }\n      throw err\n    }\n  }\n\n  handleRequestError({\n    error,\n    clientMethod,\n    callsite,\n    transaction,\n    args,\n    modelName,\n    globalOmit,\n  }: HandleErrorParams): never {\n    debug(error)\n\n    if (isMismatchingBatchIndex(error, transaction)) {\n      // if this is batch error and current request was not it's cause, we don't add\n      // context information to the error: this wasn't a request that caused batch to fail\n      throw error\n    }\n\n    if (error instanceof PrismaClientKnownRequestError && isValidationError(error)) {\n      const validationError = convertValidationError(error.meta as EngineValidationError)\n      throwValidationException({\n        args,\n        errors: [validationError],\n        callsite,\n        errorFormat: this.client._errorFormat,\n        originalMethod: clientMethod,\n        clientVersion: this.client._clientVersion,\n        globalOmit,\n      })\n    }\n\n    let message = error.message\n    if (callsite) {\n      message = createErrorMessageWithContext({\n        callsite,\n        originalMethod: clientMethod,\n        isPanic: error.isPanic,\n        showColors: this.client._errorFormat === 'pretty',\n        message,\n      })\n    }\n\n    message = this.sanitizeMessage(message)\n    // TODO: Do request with callsite instead, so we don't need to rethrow\n    if (error.code) {\n      const meta = this.resolveErrorMeta(error.meta, error.code, modelName)\n      throw new PrismaClientKnownRequestError(message, {\n        code: error.code,\n        clientVersion: this.client._clientVersion,\n        meta,\n        batchRequestIdx: error.batchRequestIdx,\n      })\n    } else if (error.isPanic) {\n      throw new PrismaClientRustPanicError(message, this.client._clientVersion)\n    } else if (error instanceof PrismaClientUnknownRequestError) {\n      throw new PrismaClientUnknownRequestError(message, {\n        clientVersion: this.client._clientVersion,\n        batchRequestIdx: error.batchRequestIdx,\n      })\n    } else if (error instanceof PrismaClientInitializationError) {\n      throw new PrismaClientInitializationError(message, this.client._clientVersion)\n    } else if (error instanceof PrismaClientRustPanicError) {\n      throw new PrismaClientRustPanicError(message, this.client._clientVersion)\n    }\n\n    error.clientVersion = this.client._clientVersion\n\n    throw error\n  }\n\n  /**\n   * Builds the `meta` object for a `PrismaClientKnownRequestError`.\n   *\n   * P2002 errors carry the physical name of the table the violated constraint\n   * belongs to (`meta.table`, extracted by the driver adapters). It is mapped\n   * back to the Prisma model name so that `meta.modelName` points at the model\n   * where the violation actually occurred \u2014 which for nested writes is not\n   * necessarily the model of the top-level operation \u2014 and the internal\n   * `table` key is dropped from the user-facing meta.\n   */\n  private resolveErrorMeta(\n    errorMeta: Record<string, unknown> | undefined,\n    errorCode: string,\n    topLevelModelName: string | undefined,\n  ): Record<string, unknown> | undefined {\n    if (errorCode !== 'P2002' || typeof errorMeta?.table !== 'string') {\n      return topLevelModelName ? { modelName: topLevelModelName, ...errorMeta } : errorMeta\n    }\n\n    const meta: Record<string, unknown> = { ...errorMeta }\n    delete meta.table\n\n    const modelName =\n      modelNameForTable(this.client._runtimeDataModel, errorMeta.table) ??\n      (typeof meta.modelName === 'string' ? meta.modelName : topLevelModelName)\n\n    return modelName !== undefined ? { ...meta, modelName } : meta\n  }\n\n  sanitizeMessage(message) {\n    if (this.client._errorFormat && this.client._errorFormat !== 'pretty') {\n      return stripAnsi(message)\n    }\n    return message\n  }\n\n  unpack(data: unknown, dataPath: string[], unpacker?: Unpacker) {\n    if (!data) {\n      return data\n    }\n    if (data['data']) {\n      data = data['data']\n    }\n\n    if (!data) {\n      return data\n    }\n    const operation = Object.keys(data)[0]\n    const response = Object.values(data)[0]\n    const pathForGet = dataPathToGetPath(dataPath)\n    const extractedResponse = deepGet(response, pathForGet)\n    const deserializedResponse =\n      operation === 'queryRaw'\n        ? deserializeRawResult(extractedResponse as RawResponse)\n        : (deserializeJsonObject(extractedResponse) as unknown)\n\n    return unpacker ? unpacker(deserializedResponse) : deserializedResponse\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'RequestHandler'\n  }\n}\n\nfunction getTransactionOptions<PayloadType>(\n  transaction?: PrismaPromiseTransaction<PayloadType>,\n): TransactionOptions<PayloadType> | undefined {\n  if (!transaction) {\n    return undefined\n  }\n\n  if (transaction.kind === 'batch') {\n    return {\n      kind: 'batch',\n      options: {\n        isolationLevel: transaction.isolationLevel,\n        maxWait: transaction.maxWait,\n        timeout: transaction.timeout,\n      },\n    }\n  }\n\n  if (transaction.kind === 'itx') {\n    return {\n      kind: 'itx',\n      options: getItxTransactionOptions(transaction),\n    }\n  }\n\n  assertNever(transaction, 'Unknown transaction kind')\n}\n\nfunction getItxTransactionOptions<PayloadType>(\n  transaction: PrismaPromiseInteractiveTransaction<PayloadType>,\n): InteractiveTransactionOptions<PayloadType> {\n  return {\n    id: transaction.id,\n    payload: transaction.payload,\n  }\n}\n\nfunction isMismatchingBatchIndex(error: any, transaction: PrismaPromiseTransaction | undefined) {\n  return hasBatchIndex(error) && transaction?.kind === 'batch' && error.batchRequestIdx !== transaction.index\n}\n\nfunction isValidationError(error: PrismaClientKnownRequestError) {\n  return (\n    error.code === 'P2009' || // validation error\n    error.code === 'P2012' // required argument missing\n  )\n}\n\n/**\n * Engine validation errors include extra segment for selectionPath - root query field.\n * This function removes it (since it does not exist on js arguments). In case of `Union`\n * error type, removes heading element from selectionPath of nested errors as well.\n * @param error\n * @returns\n */\nfunction convertValidationError(error: EngineValidationError): EngineValidationError {\n  if (error.kind === 'Union') {\n    return {\n      kind: 'Union',\n      errors: error.errors.map(convertValidationError),\n    }\n  }\n\n  if (Array.isArray(error['selectionPath'])) {\n    const [, ...selectionPath] = error['selectionPath']\n\n    return {\n      ...error,\n      selectionPath,\n    } as EngineValidationError\n  }\n\n  return error\n}\n\n/**\n * Converts a fluent-API dataPath into the path used to read the result out of\n * the response. dataPath is a sequence of [selector, relationField] pairs where\n * the selector is always 'select' or 'include'. The relation field names (the\n * odd positions) form the path. Filtering by the literal values 'select' or\n * 'include' would also drop a relation field that happens to be named that way,\n * so the path is derived positionally instead.\n */\nexport function dataPathToGetPath(dataPath: string[]): string[] {\n  const getPath: string[] = []\n  for (let index = 1; index < dataPath.length; index += 2) {\n    getPath.push(dataPath[index])\n  }\n  return getPath\n}\n", "import { JsonQuery } from '../engines'\n\nexport function getBatchId(query: JsonQuery): string | undefined {\n  if (query.action !== 'findUnique' && query.action !== 'findUniqueOrThrow') {\n    return undefined\n  }\n  const parts: string[] = []\n  if (query.modelName) {\n    parts.push(query.modelName)\n  }\n\n  if (query.query.arguments) {\n    parts.push(buildKeysString(query.query.arguments))\n  }\n  parts.push(buildKeysString(query.query.selection))\n\n  return parts.join('')\n}\n\nfunction buildKeysString(obj: object): string {\n  const keysArray = Object.keys(obj)\n    .sort()\n    .map((key) => {\n      const value = obj[key]\n      if (typeof value === 'object' && value !== null) {\n        return `(${key} ${buildKeysString(value)})`\n      }\n      return key\n    })\n\n  return `(${keysArray.join(' ')})`\n}\n", "import { JsonQueryAction } from '../engines'\n\nconst writeMap: Record<JsonQueryAction, boolean> = {\n  aggregate: false,\n  aggregateRaw: false,\n  createMany: true,\n  createManyAndReturn: true,\n  createOne: true,\n  deleteMany: true,\n  deleteOne: true,\n  executeRaw: true,\n  findFirst: false,\n  findFirstOrThrow: false,\n  findMany: false,\n  findRaw: false,\n  findUnique: false,\n  findUniqueOrThrow: false,\n  groupBy: false,\n  queryRaw: false,\n  runCommandRaw: true,\n  updateMany: true,\n  updateManyAndReturn: true,\n  updateOne: true,\n  upsertOne: true,\n}\n\nexport function isWrite(action: JsonQueryAction): boolean {\n  return writeMap[action]\n}\n", "interface Job {\n  resolve: (data: any) => void\n  reject: (data: any) => void\n  request: any\n}\n\nexport type DataLoaderOptions<T> = {\n  singleLoader: (request: T) => Promise<any>\n  batchLoader: (request: T[]) => Promise<any[]>\n  batchBy: (request: T) => string | undefined\n  // Specifies the order in which requests in a batch would\n  // be sorted. See Array.prototype.sort callback\n  batchOrder: (requestA: T, requestB: T) => number\n}\n\nexport class DataLoader<T = unknown> {\n  batches: { [key: string]: Job[] }\n  private tickActive = false\n  constructor(private options: DataLoaderOptions<T>) {\n    this.batches = {}\n  }\n\n  request(request: T): Promise<any> {\n    const hash = this.options.batchBy(request)\n    if (!hash) {\n      return this.options.singleLoader(request)\n    }\n    if (!this.batches[hash]) {\n      this.batches[hash] = []\n\n      // make sure, that we only tick once at a time\n      if (!this.tickActive) {\n        this.tickActive = true\n        process.nextTick(() => {\n          this.dispatchBatches()\n          this.tickActive = false\n        })\n      }\n    }\n\n    return new Promise((resolve, reject) => {\n      this.batches[hash].push({\n        request,\n        resolve,\n        reject,\n      })\n    })\n  }\n\n  private dispatchBatches() {\n    for (const key in this.batches) {\n      const batch = this.batches[key]\n      delete this.batches[key]\n\n      // only batch if necessary\n      // this might occur, if there's e.g. only 1 findUnique in the batch\n      if (batch.length === 1) {\n        this.options\n          .singleLoader(batch[0].request)\n          .then((result) => {\n            if (result instanceof Error) {\n              batch[0].reject(result)\n            } else {\n              batch[0].resolve(result)\n            }\n          })\n          .catch((e) => {\n            batch[0].reject(e)\n          })\n      } else {\n        batch.sort((a, b) => this.options.batchOrder(a.request, b.request))\n        this.options\n          .batchLoader(batch.map((j) => j.request))\n          .then((results) => {\n            if (results instanceof Error) {\n              for (let i = 0; i < batch.length; i++) {\n                batch[i].reject(results)\n              }\n            } else {\n              for (let i = 0; i < batch.length; i++) {\n                const value = results[i]\n                if (value instanceof Error) {\n                  batch[i].reject(value)\n                } else {\n                  batch[i].resolve(value)\n                }\n              }\n            }\n          })\n          .catch((e) => {\n            for (let i = 0; i < batch.length; i++) {\n              batch[i].reject(e)\n            }\n          })\n      }\n    }\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'DataLoader'\n  }\n}\n", "import { Decimal } from '@prisma/client-runtime-utils'\nimport type { QueryIntrospectionBuiltinType } from '@prisma/generator'\n\nexport type RawResponse = {\n  columns: string[]\n  types: QueryIntrospectionBuiltinType[]\n  rows: unknown[][]\n}\n\nfunction deserializeValue(type: QueryIntrospectionBuiltinType, value: unknown): unknown {\n  if (value === null) {\n    return value\n  }\n\n  switch (type) {\n    case 'bigint':\n      return BigInt(value as string)\n\n    case 'bytes':\n      // copy instead of returning a view into Node's shared Buffer pool\n      return new Uint8Array(Buffer.from(value as string, 'base64'))\n\n    case 'decimal':\n      return new Decimal(value as string)\n\n    case 'datetime':\n    case 'date':\n      return new Date(value as string)\n\n    case 'time':\n      return new Date(`1970-01-01T${value}Z`)\n\n    case 'bigint-array':\n      return (value as unknown[]).map((v: unknown) => deserializeValue('bigint', v))\n    case 'bytes-array':\n      return (value as unknown[]).map((v: unknown) => deserializeValue('bytes', v))\n    case 'decimal-array':\n      return (value as unknown[]).map((v: unknown) => deserializeValue('decimal', v))\n    case 'datetime-array':\n      return (value as unknown[]).map((v: unknown) => deserializeValue('datetime', v))\n    case 'date-array':\n      return (value as unknown[]).map((v: unknown) => deserializeValue('date', v))\n    case 'time-array':\n      return (value as unknown[]).map((v: unknown) => deserializeValue('time', v))\n\n    default:\n      return value\n  }\n}\n\ntype DeserializedResponse = Array<Record<string, unknown>>\n\nexport function deserializeRawResult(response: RawResponse): DeserializedResponse {\n  const deserializedResponse: DeserializedResponse = []\n  // Performance optimization. See https://github.com/brianc/node-postgres/issues/3042\n  const prebuiltEmptyObject = createPrebuiltEmptyResultObject(response)\n\n  for (let i = 0; i < response.rows.length; i++) {\n    const row = response.rows[i]\n    const mappedRow = { ...prebuiltEmptyObject } as Record<string, unknown>\n\n    for (let j = 0; j < row.length; j++) {\n      mappedRow[response.columns[j]] = deserializeValue(response.types[j], row[j])\n    }\n\n    deserializedResponse.push(mappedRow)\n  }\n\n  return deserializedResponse\n}\n\nfunction createPrebuiltEmptyResultObject(response: RawResponse): Record<string, null> {\n  const row = {}\n\n  for (let i = 0; i < response.columns.length; i++) {\n    row[response.columns[i]] = null\n  }\n\n  return row\n}\n", "import type { RuntimeDataModel } from '@prisma/client-common'\n\n/**\n * Maps a physical table name reported by a driver adapter back to the name of\n * the Prisma model backed by that table, taking `@@map` and `@@schema` into\n * account.\n *\n * The reported table may be schema-qualified (`<schema>.<table>`). When a table\n * name is shared by more than one model in different database schemas, the\n * models are disambiguated by the reported schema, provided the runtime data\n * model carries per-model schema information (older generated clients and the\n * pruned edge data model may not).\n *\n * Returns `undefined` when no model matches or when the match stays ambiguous\n * (several models map to the reported table and the schema is not available to\n * tell them apart), so that the caller can fall back to the top-level\n * operation's model name instead of guessing.\n */\nexport function modelNameForTable(runtimeDataModel: RuntimeDataModel, table: string): string | undefined {\n  const { schema, name } = parseTableName(table)\n\n  const candidates = Object.entries(runtimeDataModel.models).filter(\n    ([modelName, model]) => (model.dbName ?? modelName) === name,\n  )\n\n  if (candidates.length <= 1) {\n    return candidates[0]?.[0]\n  }\n\n  if (schema !== undefined) {\n    const schemaMatches = candidates.filter(([, model]) => model.schema === schema)\n    if (schemaMatches.length === 1) {\n      return schemaMatches[0][0]\n    }\n  }\n\n  return undefined\n}\n\nfunction parseTableName(table: string): { schema: string | undefined; name: string } {\n  const separatorIndex = table.lastIndexOf('.')\n  if (separatorIndex === -1) {\n    return { schema: undefined, name: table }\n  }\n  return { schema: table.slice(0, separatorIndex), name: table.slice(separatorIndex + 1) }\n}\n", "import { version } from '../../../package.json'\n\nexport const clientVersion = version as string\n", "import { GetPrismaClientConfig, RuntimeDataModel, RuntimeModel, uncapitalize } from '@prisma/client-common'\nimport leven from 'js-levenshtein'\n\nimport { buildArgumentsRenderingTree, renderArgsTree } from '../core/errorRendering/ArgumentsRenderingTree'\nimport { PrismaClientConstructorValidationError } from '../core/errors/PrismaClientConstructorValidationError'\nimport type { ErrorFormat, LogLevel, PrismaClientOptions } from '../getPrismaClient'\n\nconst knownProperties = [\n  'errorFormat',\n  'adapter',\n  'accelerateUrl',\n  'log',\n  'transactionOptions',\n  'omit',\n  'comments',\n  'queryPlanCacheMaxSize',\n  '__internal',\n]\nconst errorFormats: ErrorFormat[] = ['pretty', 'colorless', 'minimal']\nconst logLevels: LogLevel[] = ['info', 'query', 'warn', 'error']\n\ntype OmitValidationError =\n  | { kind: 'UnknownModel'; modelKey: string }\n  | { kind: 'UnknownField'; modelKey: string; fieldName: string }\n  | { kind: 'RelationInOmit'; modelKey: string; fieldName: string }\n  | { kind: 'InvalidFieldValue'; modelKey: string; fieldName: string }\n\n/**\n * Subset of `GetPrismaClientConfig` which is used during validation.\n * Feel free to allow more properties when necessary but don't forget to add\n * them in the mock config in `validatePrismaClientOptions.test.ts`.\n */\nexport type ClientConfig = Pick<GetPrismaClientConfig, 'previewFeatures' | 'runtimeDataModel'>\n\nconst validators: {\n  [K in keyof PrismaClientOptions]-?: (option: PrismaClientOptions[K], config: ClientConfig) => void\n} = {\n  adapter: () => {},\n  accelerateUrl: (accelerateUrl) => {\n    if (accelerateUrl === undefined) {\n      return\n    }\n\n    if (typeof accelerateUrl !== 'string') {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${JSON.stringify(accelerateUrl)} for \"accelerateUrl\" provided to PrismaClient constructor.`,\n      )\n    }\n\n    if (accelerateUrl.trim().length === 0) {\n      throw new PrismaClientConstructorValidationError(\n        `\"accelerateUrl\" provided to PrismaClient constructor must be a non-empty string.`,\n      )\n    }\n  },\n  errorFormat: (options) => {\n    if (!options) {\n      return\n    }\n    if (typeof options !== 'string') {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${JSON.stringify(options)} for \"errorFormat\" provided to PrismaClient constructor.`,\n      )\n    }\n    if (!errorFormats.includes(options as ErrorFormat)) {\n      const didYouMean = getDidYouMean(options, errorFormats)\n      throw new PrismaClientConstructorValidationError(\n        `Invalid errorFormat ${options} provided to PrismaClient constructor.${didYouMean}`,\n      )\n    }\n  },\n  log: (options) => {\n    if (!options) {\n      return\n    }\n    if (!Array.isArray(options)) {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${JSON.stringify(options)} for \"log\" provided to PrismaClient constructor.`,\n      )\n    }\n\n    function validateLogLevel(level: any) {\n      if (typeof level === 'string') {\n        if (!logLevels.includes(level as LogLevel)) {\n          const didYouMean = getDidYouMean(level, logLevels)\n          throw new PrismaClientConstructorValidationError(\n            `Invalid log level \"${level}\" provided to PrismaClient constructor.${didYouMean}`,\n          )\n        }\n      }\n    }\n\n    for (const option of options) {\n      validateLogLevel(option)\n\n      const logValidators = {\n        level: validateLogLevel,\n        emit: (value) => {\n          const emits = ['stdout', 'event']\n          if (!emits.includes(value)) {\n            const didYouMean = getDidYouMean(value, emits)\n            throw new PrismaClientConstructorValidationError(\n              `Invalid value ${JSON.stringify(\n                value,\n              )} for \"emit\" in logLevel provided to PrismaClient constructor.${didYouMean}`,\n            )\n          }\n        },\n      }\n\n      if (option && typeof option === 'object') {\n        for (const [key, value] of Object.entries(option)) {\n          if (logValidators[key]) {\n            logValidators[key](value)\n          } else {\n            throw new PrismaClientConstructorValidationError(\n              `Invalid property ${key} for \"log\" provided to PrismaClient constructor`,\n            )\n          }\n        }\n      }\n    }\n  },\n  transactionOptions: (options: any) => {\n    if (!options) {\n      return\n    }\n\n    const maxWait = options.maxWait\n    if (maxWait != null && maxWait <= 0) {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${maxWait} for maxWait in \"transactionOptions\" provided to PrismaClient constructor. maxWait needs to be greater than 0`,\n      )\n    }\n\n    const timeout = options.timeout\n    if (timeout != null && timeout <= 0) {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${timeout} for timeout in \"transactionOptions\" provided to PrismaClient constructor. timeout needs to be greater than 0`,\n      )\n    }\n  },\n  omit: (options: unknown, config) => {\n    if (typeof options !== 'object') {\n      throw new PrismaClientConstructorValidationError(`\"omit\" option is expected to be an object.`)\n    }\n    if (options === null) {\n      throw new PrismaClientConstructorValidationError(`\"omit\" option can not be \\`null\\``)\n    }\n\n    const validationErrors: OmitValidationError[] = []\n    for (const [modelKey, modelConfig] of Object.entries(options)) {\n      const modelOrType = getModelOrTypeByKey(modelKey, config.runtimeDataModel)\n      if (!modelOrType) {\n        validationErrors.push({ kind: 'UnknownModel', modelKey: modelKey })\n        continue\n      }\n      for (const [fieldName, value] of Object.entries(modelConfig)) {\n        const field = modelOrType.fields.find((field) => field.name === fieldName)\n        if (!field) {\n          validationErrors.push({ kind: 'UnknownField', modelKey, fieldName })\n          continue\n        }\n        if (field.relationName) {\n          validationErrors.push({ kind: 'RelationInOmit', modelKey, fieldName })\n          continue\n        }\n        if (typeof value !== 'boolean') {\n          validationErrors.push({ kind: 'InvalidFieldValue', modelKey, fieldName })\n        }\n      }\n    }\n    if (validationErrors.length > 0) {\n      throw new PrismaClientConstructorValidationError(\n        renderOmitValidationErrors(options as Record<string, unknown>, validationErrors),\n      )\n    }\n  },\n  queryPlanCacheMaxSize: (options) => {\n    if (options === undefined) {\n      return\n    }\n    if (typeof options !== 'number') {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${JSON.stringify(options)} for \"queryPlanCacheMaxSize\" provided to PrismaClient constructor. Expected a number.`,\n      )\n    }\n    if (!Number.isInteger(options)) {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${options} for \"queryPlanCacheMaxSize\" provided to PrismaClient constructor. Expected an integer.`,\n      )\n    }\n    if (options < 0) {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${options} for \"queryPlanCacheMaxSize\" provided to PrismaClient constructor. Cache size needs to be greater or equal to 0.`,\n      )\n    }\n  },\n  comments: (options) => {\n    if (options === undefined) {\n      return\n    }\n    if (!Array.isArray(options)) {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${JSON.stringify(options)} for \"comments\" provided to PrismaClient constructor. Expected an array of SQL commenter plugins.`,\n      )\n    }\n    for (let i = 0; i < options.length; i++) {\n      if (typeof options[i] !== 'function') {\n        throw new PrismaClientConstructorValidationError(\n          `Invalid value at index ${i} for \"comments\" provided to PrismaClient constructor. Each plugin must be a function.`,\n        )\n      }\n    }\n  },\n  __internal: (value) => {\n    if (!value) {\n      return\n    }\n    const knownKeys = ['debug', 'engine', 'configOverride']\n    if (typeof value !== 'object') {\n      throw new PrismaClientConstructorValidationError(\n        `Invalid value ${JSON.stringify(value)} for \"__internal\" to PrismaClient constructor`,\n      )\n    }\n    for (const [key] of Object.entries(value)) {\n      if (!knownKeys.includes(key)) {\n        const didYouMean = getDidYouMean(key, knownKeys)\n        throw new PrismaClientConstructorValidationError(\n          `Invalid property ${JSON.stringify(key)} for \"__internal\" provided to PrismaClient constructor.${didYouMean}`,\n        )\n      }\n    }\n    // TODO: Add more validation here\n    // but as this is an internal, non user-facing api, it's not urgent\n  },\n}\n\nfunction validateDependentOptions(options: PrismaClientOptions) {\n  const adapterProvided = options.adapter !== undefined\n  const accelerateUrlProvided = options.accelerateUrl !== undefined\n\n  if (adapterProvided && accelerateUrlProvided) {\n    throw new PrismaClientConstructorValidationError(\n      `The \"adapter\" and \"accelerateUrl\" options are mutually exclusive. Please provide only one of them.`,\n    )\n  }\n\n  if (!adapterProvided && !accelerateUrlProvided) {\n    throw new PrismaClientConstructorValidationError(\n      `PrismaClient requires a driver adapter to connect to your database, but none was provided.\n\nPass a driver adapter to the PrismaClient constructor, for example:\n\n  import { PrismaPg } from '@prisma/adapter-pg'\n  import { PrismaClient } from './generated/prisma/client'\n\n  const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })\n  const prisma = new PrismaClient({ adapter })\n\nLearn more about driver adapters: https://pris.ly/d/driver-adapters\n\nIf you use Prisma Accelerate instead of connecting to your database directly, pass \\`accelerateUrl\\` to the PrismaClient constructor instead of \\`adapter\\`.`,\n    )\n  }\n}\n\nexport function validatePrismaClientOptions(options: PrismaClientOptions, config: ClientConfig) {\n  for (const [key, value] of Object.entries(options)) {\n    if (!knownProperties.includes(key)) {\n      const didYouMean = getDidYouMean(key, knownProperties)\n      throw new PrismaClientConstructorValidationError(\n        `Unknown property ${key} provided to PrismaClient constructor.${didYouMean}`,\n      )\n    }\n    validators[key](value, config)\n  }\n\n  validateDependentOptions(options)\n}\n\nfunction getDidYouMean(str: string, options: string[]): string {\n  if (options.length === 0) {\n    return ''\n  }\n\n  if (typeof str !== 'string') {\n    return ''\n  }\n\n  const alternative = getAlternative(str, options)\n  if (!alternative) {\n    return ''\n  }\n\n  return ` Did you mean \"${alternative}\"?`\n}\n\nfunction getAlternative(str: string, options: string[]): null | string {\n  if (options.length === 0) {\n    return null\n  }\n\n  const optionsWithDistances = options.map((value) => ({\n    value,\n    distance: leven(str, value),\n  }))\n\n  optionsWithDistances.sort((a, b) => {\n    return a.distance < b.distance ? -1 : 1\n  })\n\n  const bestAlternative = optionsWithDistances[0]\n  if (bestAlternative.distance < 3) {\n    return bestAlternative.value\n  }\n\n  return null\n}\n\nfunction getModelOrTypeByKey(modelKey: string, runtimeDataModel: RuntimeDataModel): RuntimeModel | undefined {\n  return findByKey(runtimeDataModel.models, modelKey) ?? findByKey(runtimeDataModel.types, modelKey)\n}\n\nfunction findByKey<T>(map: Record<string, T>, key: string): T | undefined {\n  const foundKey = Object.keys(map).find((mapKey) => uncapitalize(mapKey) === key)\n  if (foundKey) {\n    return map[foundKey]\n  }\n  return undefined\n}\n\nfunction renderOmitValidationErrors(\n  omitConfig: Record<PropertyKey, unknown>,\n  validationErrors: OmitValidationError[],\n): string {\n  const argsTree = buildArgumentsRenderingTree(omitConfig)\n  for (const error of validationErrors) {\n    switch (error.kind) {\n      case 'UnknownModel':\n        argsTree.arguments.getField(error.modelKey)?.markAsError()\n        argsTree.addErrorMessage(() => `Unknown model name: ${error.modelKey}.`)\n        break\n      case 'UnknownField':\n        argsTree.arguments.getDeepField([error.modelKey, error.fieldName])?.markAsError()\n        argsTree.addErrorMessage(() => `Model \"${error.modelKey}\" does not have a field named \"${error.fieldName}\".`)\n        break\n      case 'RelationInOmit':\n        argsTree.arguments.getDeepField([error.modelKey, error.fieldName])?.markAsError()\n        argsTree.addErrorMessage(() => `Relations are already excluded by default and can not be specified in \"omit\".`)\n        break\n      case 'InvalidFieldValue':\n        argsTree.arguments.getDeepFieldValue([error.modelKey, error.fieldName])?.markAsError()\n        argsTree.addErrorMessage(() => `Omit field option value must be a boolean.`)\n        break\n    }\n  }\n  const { message, args } = renderArgsTree(argsTree, 'colorless')\n  return `Error validating \"omit\" option:\\n\\n${args}\\n\\n${message}`\n}\n", "import { setClassName } from '@prisma/internals'\n\nexport class PrismaClientConstructorValidationError extends Error {\n  constructor(message: string) {\n    super(message + `\\nRead more at https://pris.ly/d/client-constructor`)\n    this.name = 'PrismaClientConstructorValidationError'\n  }\n  get [Symbol.toStringTag]() {\n    return 'PrismaClientConstructorValidationError'\n  }\n}\nsetClassName(PrismaClientConstructorValidationError, 'PrismaClientConstructorValidationError')\n", "import { hasBatchIndex } from '@prisma/client-runtime-utils'\n\n/**\n * Waits for result of batch $transaction and picks the best possible error to report if any\n * of the request fails. Best error is determined as follows:\n *\n * - if engine have reported an error without batch request index, then the batch is immediately rejected\n * with this error without waiting for other promises\n * - if engine have reported and index of failed request in the batch and that index matches the position of the\n * particular request in the batch, batch is rejected with that error\n * - if batch request index is reported and it does not match current request position, wait for other requests. If no indices\n * match request positions, reject with the earliest error in the batch\n *\n * @param promises\n * @returns\n */\nexport function waitForBatch<T extends PromiseLike<unknown>[]>(\n  promises: T,\n): Promise<{ [K in keyof T]: Awaited<T[K]> }> {\n  if (promises.length === 0) {\n    return Promise.resolve([] as { [K in keyof T]: Awaited<T[K]> })\n  }\n  return new Promise((resolve, reject) => {\n    const successfulResults = new Array(promises.length) as { [K in keyof T]: Awaited<T[K]> }\n    let bestError: unknown = null\n    let done = false\n    let settledPromisesCount = 0\n\n    const settleOnePromise = () => {\n      if (done) {\n        return\n      }\n      settledPromisesCount++\n      if (settledPromisesCount === promises.length) {\n        done = true\n        if (bestError) {\n          reject(bestError)\n        } else {\n          resolve(successfulResults)\n        }\n      }\n    }\n\n    const immediatelyReject = (error: unknown) => {\n      if (!done) {\n        done = true\n        reject(error)\n      }\n    }\n\n    for (let i = 0; i < promises.length; i++) {\n      promises[i].then(\n        (result) => {\n          successfulResults[i] = result\n          settleOnePromise()\n        },\n        (error) => {\n          if (!hasBatchIndex(error)) {\n            immediatelyReject(error)\n            return\n          }\n\n          if (error.batchRequestIdx === i) {\n            immediatelyReject(error)\n          } else {\n            if (!bestError) {\n              bestError = error\n            }\n            settleOnePromise()\n          }\n        },\n      )\n    }\n  })\n}\n", "/**\n * List of properties that won't throw exception on access and return undefined instead\n */\nconst allowList = new Set([\n  'toJSON', // used by JSON.stringify\n  '$$typeof', // used by old React tooling\n  'asymmetricMatch', // used by Jest\n  Symbol.iterator, // used by various JS constructs/methods\n  Symbol.toStringTag, // Used by .toString()\n  Symbol.isConcatSpreadable, // Used by Array#concat,\n  Symbol.toPrimitive, // Used when getting converted to primitive values\n])\n/**\n * Generates more strict variant of an enum which, unlike regular enum,\n * throws on non-existing property access. This can be useful in following situations:\n * - we have an API, that accepts both `undefined` and `SomeEnumType` as an input\n * - enum values are generated dynamically from DMMF.\n *\n * In that case, if using normal enums and no compile-time typechecking, using non-existing property\n * will result in `undefined` value being used, which will be accepted. Using strict enum\n * in this case will help to have a runtime exception, telling you that you are probably doing something wrong.\n *\n * Note: if you need to check for existence of a value in the enum you can still use either\n * `in` operator or `hasOwnProperty` function.\n *\n * @param definition\n * @returns\n */\nexport function makeStrictEnum<T extends Record<PropertyKey, string | number>>(definition: T): T {\n  return new Proxy(definition, {\n    get(target, property) {\n      if (property in target) {\n        return target[property]\n      }\n      if (allowList.has(property)) {\n        return undefined\n      }\n      throw new TypeError(`Invalid enum value: ${String(property)}`)\n    },\n  })\n}\n", "// https://runtime-keys.proposal.wintercg.org/\nexport type RuntimeName = 'workerd' | 'deno' | 'netlify' | 'node' | 'bun' | 'edge-light' | '' /* unknown */\n\n/**\n * Indicates if running in Node.js or a Node.js compatible runtime.\n *\n * **Note:** When running code in Bun and Deno with Node.js compatibility mode, `isNode` flag will be also `true`, indicating running in a Node.js compatible runtime.\n */\nconst isNode = () => globalThis.process?.release?.name === 'node'\n\n/**\n * Indicates if running in Bun runtime.\n */\nconst isBun = () => !!globalThis.Bun || !!globalThis.process?.versions?.bun\n\n/**\n * Indicates if running in Deno runtime.\n */\nconst isDeno = () => !!globalThis.Deno\n\n/**\n * Indicates if running in Netlify runtime.\n */\nconst isNetlify = () => typeof globalThis.Netlify === 'object'\n\n/**\n * Indicates if running in EdgeLight (Vercel Edge) runtime.\n */\nconst isEdgeLight = () => typeof globalThis.EdgeRuntime === 'object'\n\n/**\n * Indicates if running in Cloudflare Workers runtime.\n * See: https://developers.cloudflare.com/workers/runtime-apis/web-standards/#navigatoruseragent\n */\nconst isWorkerd = () => globalThis.navigator?.userAgent === 'Cloudflare-Workers'\n\nfunction detectRuntime(): RuntimeName {\n  // Note: we're currently not taking 'fastly' into account. Why?\n  const runtimeChecks = [\n    [isNetlify, 'netlify'],\n    [isEdgeLight, 'edge-light'],\n    [isWorkerd, 'workerd'],\n    [isDeno, 'deno'],\n    [isBun, 'bun'],\n    [isNode, 'node'],\n  ] as const\n\n  const detectedRuntime =\n    runtimeChecks\n      // TODO: Transforming destructuring to the configured target environment ('chrome58', 'edge16', 'firefox57', 'safari11') is not supported yet,\n      // so we can't write the following code yet:\n      // ```\n      // .flatMap(([isCurrentRuntime, runtime]) => isCurrentRuntime() ? [runtime] : [])\n      // ```\n      .flatMap((check) => (check[0]() ? [check[1]] : []))\n      .at(0) ?? ''\n\n  return detectedRuntime\n}\n\nconst runtimesPrettyNames = {\n  node: 'Node.js',\n  workerd: 'Cloudflare Workers',\n  deno: 'Deno and Deno Deploy',\n  netlify: 'Netlify Edge Functions',\n  'edge-light':\n    'Edge Runtime (Vercel Edge Functions, Vercel Edge Middleware, Next.js (Pages Router) Edge API Routes, Next.js (App Router) Edge Route Handlers or Next.js Middleware)',\n} as const\n\ntype GetRuntimeOutput = {\n  id: RuntimeName\n  prettyName: string\n  isEdge: boolean\n}\n\nexport function getRuntime(): GetRuntimeOutput {\n  const runtimeId = detectRuntime()\n\n  return {\n    id: runtimeId,\n    // Fallback to the runtimeId if the runtime is not in the list\n    prettyName: runtimesPrettyNames[runtimeId] || runtimeId,\n    isEdge: ['workerd', 'deno', 'netlify', 'edge-light'].includes(runtimeId),\n  }\n}\n"],
  "mappings": "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",
  "names": ["stringToBuffer", "value", "encoding", "BufferClass", "encoder", "v", "buffer", "view", "bytes", "byteIndex", "bufferPolyfillDoesNotImplement", "initReadMethods", "prototype", "dataViewMethods", "m", "bufferBaseMethods", "genericReadMethod", "i", "littleEndian", "offset", "assertNumber", "assertInteger", "assertUnsigned", "genericWriteMethod", "boundKey", "bound", "bounds", "assertBounds", "createAlias", "methods", "method", "message", "assertUint8Array", "argName", "maxValue", "MAX_UNSIGNED_32_BIT", "e", "min", "max", "assertString", "$Buffer", "decoder", "Encodings", "Buffer", "c2s", "init_buffer_small", "__esmMin", "_BufferClass", "size", "fill", "arg", "string", "buff1", "buff2", "byteOffset", "byteLength", "list", "totalLength", "concat", "item", "result", "start", "end", "val", "target", "targetStart", "targetEnd", "sourceStart", "sourceEnd", "otherBuffer", "copiedBytes", "offsetEnc", "lengthEnc", "length", "endEnc", "byteOffsetOrEncoding", "lastIndexOf", "toSearch", "_", "j", "s", "prop", "process", "cwd", "init_process", "__esmMin", "fn", "args", "performance", "init_perf_hooks", "__esmMin", "origin", "fn", "init_function", "__esmMin", "add", "x", "y", "carry", "d", "e", "i", "k", "len", "xd", "yd", "Ctor", "pr", "external", "round", "LOG_BASE", "BASE", "checkInt32", "min", "max", "invalidArgument", "digitsToString", "ws", "indexOfLastWord", "str", "w", "getZeroString", "exp", "sd", "denominator", "guard", "pow", "sum", "t", "wpr", "getBase10Exponent", "exponentOutOfRange", "ONE", "mathpow", "divide", "getLn10", "decimalError", "zs", "ln", "c", "c0", "numerator", "x2", "n", "parseDecimal", "mathfloor", "MAX_E", "rm", "j", "rd", "doRound", "xdi", "subtract", "xe", "xLTy", "toString", "isExp", "truncate", "arr", "clone", "obj", "p", "ps", "Decimal", "value", "isDecimal", "P", "config", "v", "MAX_DIGITS", "defaults", "MAX_SAFE_INTEGER", "init_decimal", "__esmMin", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "xdL", "ydL", "dp", "base", "r", "q", "z", "s", "rL", "sign", "yIsInt", "yn", "multiplyInteger", "temp", "compare", "a", "b", "aL", "bL", "cmp", "prod", "prodL", "qd", "rem", "remL", "rem0", "xi", "xL", "yd0", "yL", "yz", "init_decimal_small", "__esmMin", "init_decimal", "crypto_exports", "__export", "Hash", "createHash", "crypto_default", "randomFillSync", "randomUUID", "webcrypto", "buffer", "offset", "length", "algorithm", "init_crypto", "__esmMin", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "#chunks", "#algorithm", "data", "acc", "chunk", "arrayBuffer", "require_os", "__commonJSMin", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "require_package", "__commonJSMin", "exports", "module", "require_engines_version", "__commonJSMin", "exports", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "require_indent_string", "__commonJSMin", "exports", "module", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "string", "count", "options", "regex", "require_new_github_issue_url", "__commonJSMin", "exports", "module", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "options", "repoUrl", "url", "types", "type", "value", "require_js_levenshtein", "__commonJSMin", "exports", "module", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "_min", "d0", "d1", "d2", "bx", "ay", "a", "b", "tmp", "la", "lb", "offset", "x", "y", "d3", "dd", "dy", "bx0", "bx1", "bx2", "bx3", "vector", "len", "init_TypeBuilder", "__esmMin", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_KeyType", "__esmMin", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "EventEmitter", "init_events", "__esmMin", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "event", "listener", "args", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "extensions_exports", "__export", "defineExtension", "getExtensionContext", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "defineExtension", "ext", "client", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "getExtensionContext", "that", "public_exports", "__export", "validator", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "validator", "_args", "args", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Cache", "key", "value", "create", "cached", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "uncapitalize", "self", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "keyBy", "collection", "prop", "acc", "obj", "key", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "lazyProperty", "compute", "resultContainer", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "dmmfToRuntimeDataModel", "dmmfDataModel", "buildMapForRuntime", "buildMapForRuntime", "list", "result", "name", "rest", "isObjectEnumValue", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "FORCE_COLOR", "NODE_DISABLE_COLORS", "NO_COLOR", "TERM", "isTTY", "process", "$", "init", "x", "y", "rgx", "open", "close", "txt", "reset", "bold", "dim", "italic", "underline", "inverse", "hidden", "strikethrough", "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white", "gray", "grey", "bgBlack", "bgRed", "bgGreen", "bgYellow", "bgBlue", "bgMagenta", "bgCyan", "bgWhite", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "MAX_ARGS_HISTORY", "COLORS", "argsHistory", "lastTimestamp", "lastColor", "processEnv", "process", "topProps", "namespace", "prev", "listenedNamespaces", "s", "isListened", "listenedNamespace", "isExcluded", "args", "format", "rest", "debugCreate", "instanceProps", "debugCall", "enabled", "color", "log", "stringArgs", "arg", "safeStringify", "ms", "_", "prop", "value", "Debug", "indent", "cache", "key", "getLogs", "numChars", "logs", "clearLogs", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "assertNever", "arg", "errorMessage", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "PRISMA_POSTGRES_PROVIDER", "PRISMA_POSTGRES_PROTOCOL", "isPrismaPostgres", "connectionString", "isPrismaPostgresDev", "host", "logger_exports", "__export", "error", "info", "log", "query", "should", "tags", "warn", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "tags", "red", "yellow", "cyan", "blue", "should", "process", "log", "data", "warn", "message", "optionalParams", "info", "error", "query", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "ansiRegex", "onlyFirst", "pattern", "regex", "ansiRegex", "stripAnsi", "string", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "hasOwnProperty", "object", "key", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "mapObjectValues", "object", "mapper", "result", "key", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "maxWithComparator", "items", "comparator", "result", "i", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "setClassName", "classObject", "name", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "alreadyWarned", "warnOnce", "key", "message", "args", "warn", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "isDate", "value", "isValidDate", "date", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Decimal", "isDecimalJsLike", "value", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "PrismaClientValidationError", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "src_exports", "__export", "ModelAction", "datamodelEnumToSchemaEnum", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "datamodelEnumToSchemaEnum", "datamodelEnum", "v", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "ModelAction", "import_indent_string", "colorsEnabled", "red", "gray", "dim", "bold", "underline", "source", "colorsDisabled", "str", "getRawTemplateParameters", "message", "originalMethod", "isPanic", "callArguments", "stringifyErrorMessage", "functionName", "location", "message", "isPanic", "contextLines", "callArguments", "colors", "lines", "introSuffix", "stringifyLocationInFile", "contextLineParts", "parts", "createErrorMessageWithContext", "args", "colorsEnabled", "colorsDisabled", "templateParameters", "getRawTemplateParameters", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "import_js_levenshtein", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "applyUnionError", "error", "args", "globalOmit", "allErrors", "flattenUnionError", "merged", "mergeInvalidArgumentTypeErrors", "bestError", "getBestScoringError", "applyValidationError", "errorList", "invalidArgsError", "result", "key", "prevError", "uniqueConcat", "head", "tail", "errors", "maxWithComparator", "errorA", "errorB", "aPathLength", "getCombinedPathLength", "bPathLength", "getErrorTypeScore", "score", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "ObjectFieldSuggestion", "name", "value", "writer", "green", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_KeyType", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Writer", "startingIndent", "context", "value", "separator", "values", "writeItem", "item", "w", "last", "i", "line", "afterNextNewLineCallback", "callback", "symbol", "init_TypeBuilder", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "ArrayField", "value", "writer", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "noop", "str", "inactiveColors", "activeColors", "bold", "red", "green", "dim", "fieldsSeparator", "writer", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "FormattedString", "contents", "str", "color", "writer", "paddingSize", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Value", "ArrayValue", "Value", "item", "ArrayField", "index", "writer", "output", "FormattedString", "colors", "fieldsSeparator", "ObjectValue", "_ObjectValue", "Value", "field", "suggestion", "key", "path", "head", "tail", "firstField", "segment", "nextField", "ArrayValue", "selection", "next", "thisParent", "parent", "nextParent", "select", "include", "fields", "f", "writer", "output", "FormattedString", "fieldsSeparator", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "ScalarValue", "Value", "text", "writer", "string", "FormattedString", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "SuggestionObjectValue", "name", "value", "writer", "green", "dim", "fieldsSeparator", "applyValidationError", "error", "args", "globalOmit", "applyMutuallyExclusiveFieldsError", "applyIncludeOnScalarError", "applyEmptySelectionError", "applyUnknownSelectionFieldError", "applyInvalidSelectionValueError", "applyUnknownArgumentError", "applyUnknownInputFieldError", "applyRequiredArgumentMissingError", "applyInvalidArgumentTypeError", "applyInvalidArgumentValueError", "applyValueTooLargeError", "applySomeFieldsMissingError", "applyTooManyFieldsGivenError", "applyUnionError", "argsTree", "object", "colors", "selectionPath", "field", "splitPath", "outputType", "ObjectFieldSuggestion", "msg", "availableOptionsMessage", "subSelection", "omit", "applyEmptySelectionErrorOmit", "applyEmptySelectionErrorSelect", "uncapitalize", "applyEmptySelectionErrorGlobalOmit", "omitValue", "selection", "isEmpty", "addSelectionSuggestions", "suggestedOmitConfig", "SuggestionObjectValue", "omitSuggestion", "parentPath", "fieldName", "fieldValue", "ObjectValue", "locateResult", "locateSelectionField", "parent", "addInclusionSuggestions", "addOmissionSuggestions", "parts", "argName", "addArgumentsSuggestions", "unknownArgumentMessage", "arg", "argParentPath", "argParent", "addInputSuggestions", "f", "options", "suggestion", "getSuggestion", "existingField", "ScalarValue", "argumentName", "objectSuggestion", "typeName", "getInputTypeName", "dependentArgumentName", "description", "expected", "joinWithPreposition", "type", "printedValue", "value", "argument", "providedArguments", "argumentsParent", "select", "include", "inputType", "path", "green", "enabled", "preposition", "items", "itemsCopy", "lastItem", "MAX_EDIT_DISTANCE", "str", "minDistance", "result", "option", "editDistance", "levenshtein", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "isObjectEnumValue", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "FieldRefImpl", "modelName", "name", "fieldType", "isList", "isEnum", "listPrefix", "enumPrefix", "isFieldRef", "value", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "separator", "ObjectField", "name", "value", "writer", "FormattedString", "ArgumentsRenderingTree", "args", "writer", "renderer", "colors", "messageRenderer", "buildArgumentsRenderingTree", "buildInputObject", "inputObject", "object", "ObjectValue", "key", "value", "field", "ObjectField", "buildInputValue", "ScalarValue", "isDecimalJsLike", "Buffer", "dateStr", "isValidDate", "isObjectEnumValue", "isFieldRef", "uncapitalize", "buildInputArray", "array", "result", "ArrayValue", "item", "renderArgsTree", "argsTree", "errorFormat", "activeColors", "inactiveColors", "message", "Writer", "throwValidationException", "args", "errors", "errorFormat", "callsite", "originalMethod", "clientVersion", "globalOmit", "argsTree", "buildArgumentsRenderingTree", "error", "applyValidationError", "message", "renderedArgs", "renderArgsTree", "messageWithContext", "createErrorMessageWithContext", "PrismaClientValidationError", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "dmmfToJSModelName", "name", "str", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "getComputedFields", "previousComputedFields", "extension", "dmmfModelName", "jsName", "dmmfToJSModelName", "resolveDependencies", "getComputedFieldsFromModel", "computedFields", "cache", "Cache", "resolveNeeds", "fieldName", "visitedFields", "fieldDep", "mapObjectValues", "field", "name", "modelResult", "needs", "compute", "key", "composeCompute", "nextCompute", "previousCompute", "model", "modelName", "computeEngineSideSelection", "selection", "result", "dependency", "computeEngineSideOmissions", "omission", "MergedExtensionsListNode", "extension", "previous", "Cache", "lazyProperty", "newCb", "dmmfModelName", "getComputedFields", "jsModelName", "dmmfToJSModelName", "operation", "prevCbs", "newCbs", "query", "MergedExtensionsList", "_MergedExtensionsList", "head", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "ParamImpl", "name", "isParam", "value", "createParam", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "secret", "Skip", "param", "value", "skip", "isSkip", "jsActionToProtocolAction", "STRICT_UNDEFINED_ERROR_MESSAGE", "serializeJsonQuery", "modelName", "action", "args", "runtimeDataModel", "extensions", "MergedExtensionsList", "callsite", "clientMethod", "errorFormat", "clientVersion", "previewFeatures", "globalOmit", "wrapRawValues", "context", "SerializeContext", "serializeFieldSelection", "select", "include", "omit", "serializeArgumentsObject", "serializeSelectionSet", "createExplicitSelection", "createImplicitSelection", "selectionSet", "addIncludedRelations", "omitFields", "key", "value", "isSkip", "nestedContext", "validateSelectionForUndefined", "field", "localOmit", "computedFields", "combinedOmits", "omitWithComputedFields", "computeEngineSideOmissions", "selectWithComputedFields", "computeEngineSideSelection", "serializeArgumentsValue", "jsValue", "isDate", "isValidDate", "isParam", "isFieldRef", "serializeArgumentsArray", "buffer", "byteOffset", "byteLength", "Buffer", "isRawParameters", "isDecimalJsLike", "isObjectEnumValue", "name", "isJSONConvertible", "object", "result", "array", "i", "itemContext", "valueName", "_SerializeContext", "params", "error", "throwValidationException", "previewFeature", "fieldName", "uncapitalize", "assertNever", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "defineDmmfProperty", "target", "runtimeDataModel", "dmmfLazy", "lazyProperty", "runtimeDataModelToBaseDmmf", "buildDMMFList", "map", "name", "props", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "internals", "TypedSqlMarker", "TypedSql", "sql", "values", "makeTypedQueryFactory", "isTypedSql", "value", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Sql", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_events", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "addObjectProperties", "object", "key", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "addProperty", "key", "factory", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "cacheProperties", "baseLayer", "cache", "Cache", "key", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "defaultPropertyDescriptor", "defaultProxyHandlers", "ownKeys", "_ownKeys", "target", "prop", "value", "customInspect", "createCompositeProxy", "target", "layers", "keysToLayerMap", "mapKeysToLayers", "overwrittenKeys", "proxy", "prop", "layer", "targetKeys", "getExistingKeys", "layerKeys", "value", "original", "defaultPropertyDescriptor", "property", "attributes", "toLog", "keys", "key", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "removeProperties", "keys", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "prettyPrintArguments", "args", "tree", "buildArgumentsRenderingTree", "Writer", "inactiveColors", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "DisabledCallSite", "getCallSite", "errorFormat", "DisabledCallSite", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "aggregateMap", "desugarUserArgs", "args", "_args", "desugarCountInUserArgs", "aggregateArgs", "key", "value", "aggregateMap", "createUnpacker", "data", "aggregate", "modelAction", "aggregateUnpacker", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "desugarUserArgs", "args", "select", "_args", "createUnpacker", "data", "count", "modelAction", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "desugarUserArgs", "args", "_args", "key", "createUnpacker", "data", "row", "groupBy", "modelAction", "applyAggregates", "client", "action", "modelAction", "userArgs", "aggregate", "count", "groupBy", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "applyFieldsProxy", "modelName", "model", "scalarFieldsList", "field", "scalarFields", "keyBy", "target", "prop", "dmmfField", "FieldRefImpl", "defaultProxyHandlers", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "keys", "ks", "deepGet", "o", "kp", "k", "deepSet", "v", "i", "getNextDataPath", "fluentPropName", "prevDataPath", "getNextUserArgs", "callArgs", "prevArgs", "nextDataPath", "deepSet", "applyFluent", "client", "dmmfModelName", "modelAction", "prevUserArgs", "dmmfModel", "dmmfModelFieldMap", "userArgs", "callsite", "getCallSite", "nextUserArgs", "prismaPromise", "ownKeys", "getOwnKeys", "target", "prop", "field", "modelArgs", "dataArgs", "defaultProxyHandlers", "fluentProps", "aggregateProps", "applyModel", "client", "dmmfModelName", "modelExtensions", "layers", "modelActionsLayer", "fieldsPropertyLayer", "addObjectProperties", "addProperty", "createCompositeProxy", "jsModelName", "dmmfToJSModelName", "ownKeys", "ModelAction", "key", "dmmfActionName", "action", "paramOverrides", "userArgs", "callSite", "getCallSite", "transaction", "params", "applyFluent", "isValidAggregateName", "applyAggregates", "cacheProperties", "model", "applyFieldsProxy", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "jsToDMMFModelName", "name", "str", "rawClient", "applyModelsAndClientExtensions", "client", "layers", "rootLayer", "modelsLayer", "addProperty", "clientExtensions", "addObjectProperties", "createCompositeProxy", "prototype", "allKeys", "prop", "dmmfModelKeys", "jsModelKeys", "dmmfToJSModelName", "cacheProperties", "dmmfModelName", "jsToDMMFModelName", "applyModel", "key", "unApplyModelsAndClientExtensions", "$extends", "extension", "newClient", "applyModelsAndClientExtensions", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "applyResultExtensions", "result", "modelName", "select", "omit", "extensions", "computedFields", "computedPropertiesLayers", "maskingLayers", "field", "toMask", "prop", "removeProperties", "areNeedsMet", "computedPropertyLayer", "createCompositeProxy", "neededProperties", "property", "hasOwnProperty", "cacheProperties", "addProperty", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "visitQueryResult", "visitor", "result", "args", "runtimeDataModel", "modelName", "i", "visitResult", "visitNested", "includeOrSelect", "parentModelName", "fieldName", "subConfig", "isSkip", "field", "applyAllResultExtensions", "result", "modelName", "args", "extensions", "runtimeDataModel", "globalOmit", "visitQueryResult", "value", "dmmfModelName", "jsName", "dmmfToJSModelName", "applyResultExtensions", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Decimal", "isObjectEnumValue", "Sql", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "denylist", "itxClientDenyList", "deepCloneArgs", "args", "Sql", "cloneSql", "isTypedSql", "cloneTypedSql", "clone", "i", "deepCloneValue", "k", "rawParam", "TypedSql", "x", "isObjectEnumValue", "isFieldRef", "isSkip", "isDecimalJsLike", "Decimal", "isDate", "copy", "assertNever", "iterateAndCallQueryCallbacks", "client", "params", "queryCbs", "i", "transaction", "prevCustomFetch", "deepCloneArgs", "args", "__internalParams", "currCustomFetch", "composeCustomDataProxyFetch", "applyQueryExtensions", "jsModelName", "action", "clientMethod", "operation", "cbs", "createApplyBatchExtensionsFunction", "executeBatch", "requests", "callbacks", "iterateAndCallBatchCallbacks", "prevFetch", "request", "_args", "nextFetch", "noopFetch", "f", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "resolveResultExtensionContext", "dataPath", "modelName", "args", "runtimeDataModel", "rootContext", "relationPath", "relationPathFromDataPath", "currentModelName", "currentArgs", "relationFieldName", "currentModel", "relationField", "field", "resolveNextArgs", "index", "selector", "select", "isNestedArgs", "include", "value", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Decimal", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Decimal", "isUint8Array", "value", "isDate", "assertNever", "_", "message", "isDeepStrictEqual", "a", "b", "key", "doKeysMatch", "lhs", "rhs", "lhsKeys", "rhsKeys", "lhsDecimal", "asDecimal", "rhsDecimal", "lhsBuffer", "asBuffer", "rhsBuffer", "asDate", "asBigInt", "asNumber", "Buffer", "safeJsonStringify", "obj", "_key", "val", "MAX_PUSH_SPREAD_ARGS", "appendToArray", "target", "source", "i", "isTaggedValue", "value", "mapObjectValues", "object", "mapper", "result", "key", "deserializeJsonObject", "isTaggedValue", "deserializeTaggedValue", "$type", "value", "Buffer", "Decimal", "assertNever", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "isDriverAdapterError", "error", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "ColumnTypeEnum", "UserFacingError", "message", "code", "meta", "rethrowAsUserFacing", "error", "isDriverAdapterError", "getErrorCode", "renderErrorMessage", "isGenericDatabaseErrorKind", "buildUnmappedDatabaseUserFacingError", "rethrowAsUserFacingRawError", "buildRawQueryUserFacingError", "pickErrorMessage", "kind", "err", "assertNever", "safeJsonStringify", "address", "renderConstraint", "constraint", "field", "isPlaceholder", "value", "obj", "getPlaceholderName", "resolveArgPlaceholders", "args", "placeholderValues", "resolved", "key", "placeholderName", "convertCompactedRows", "rows", "compiledBatch", "keysPerRow", "item", "acc", "deserializeJsonObject", "selection", "resolvedArgs", "rowIndex", "rowKeys", "doKeysMatch", "UserFacingError", "selected", "k", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Decimal", "DataMapperError", "UserFacingError", "message", "options", "fieldEntriesCache", "getFieldEntries", "fields", "entries", "applyDataMap", "data", "structure", "enums", "mapArrayOrObject", "mapValue", "assertNever", "skipNulls", "rows", "row", "mapObject", "decodedData", "error", "result", "name", "node", "serializedName", "nodeFields", "target", "dbName", "mapField", "value", "columnName", "fieldType", "v", "i", "scalarType", "numberValue", "parsedValue", "isUint8Array", "byte", "Decimal", "normalizeDateTime", "isDate", "safeJsonStringify", "Buffer", "enumDef", "enumValue", "TIME_TZ_PATTERN", "dt", "timeTzMatches", "dtWithTz", "timeTz", "tz", "tzMinuteOffset", "timeSeparatorIndex", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "klona", "x", "k", "tmp", "str", "val", "key", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "formatSqlComment", "tags", "entries", "a", "b", "key", "value", "encodedKey", "encodedValue", "applySqlCommenters", "plugins", "context", "merged", "plugin", "klona", "buildSqlComment", "appendSqlComment", "sql", "comment", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "SpanKind", "providerToOtelSystem", "provider", "assertNever", "withQuerySpanAndEvent", "query", "tracingHelper", "onQuery", "execute", "callback", "timestamp", "startInstant", "performance", "result", "endInstant", "SpanKind", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "pad", "num", "size", "s", "import_os", "getHostname", "os", "process", "padding", "pid", "pad", "hostname", "length", "hostId", "prev", "char", "fingerprint", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "isCuid", "value", "createCuid", "fingerprint", "discreteValues", "c", "randomBlock", "pad", "safeCounter", "cuid", "letter", "timestamp", "counter", "print", "random", "isCuid", "cuid", "createCuid", "fingerprint", "index_esm_default", "cuid", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "U32_MASK64", "_32n", "fromBig", "n", "le", "split", "lst", "len", "Ah", "Al", "i", "h", "l", "rotlSH", "h", "l", "s", "rotlSL", "rotlBH", "rotlBL", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "isBytes", "a", "anumber", "n", "title", "prefix", "abytes", "value", "length", "bytes", "len", "needsLen", "ofLen", "got", "message", "aexists", "instance", "checkFinished", "aoutput", "out", "abytes", "min", "u32", "arr", "clean", "arrays", "i", "isLE", "byteSwap", "word", "byteSwap32", "arr", "i", "byteSwap", "swap32IfBE", "isLE", "u", "createHasher", "hashCons", "info", "hashC", "msg", "opts", "tmp", "oidNist", "suffix", "_0n", "_1n", "_2n", "_7n", "_256n", "_0x71n", "SHA3_PI", "SHA3_ROTL", "_SHA3_IOTA", "round", "R", "x", "y", "t", "j", "IOTAS", "split", "SHA3_IOTA_H", "SHA3_IOTA_L", "rotlH", "h", "l", "s", "rotlBH", "rotlSH", "rotlL", "rotlBL", "rotlSL", "keccakP", "rounds", "anumber", "B", "idx1", "idx0", "B0", "B1", "Th", "Tl", "curH", "curL", "shift", "PI", "b0", "b1", "b2", "b3", "clean", "Keccak", "_Keccak", "blockLen", "suffix", "outputLen", "enableXOF", "u32", "swap32IfBE", "data", "aexists", "abytes", "state", "len", "pos", "take", "i", "out", "bufferOut", "bytes", "aoutput", "to", "genKeccak", "info", "createHasher", "sha3_512", "genKeccak", "oidNist", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "isNumeric", "mathceil", "mathfloor", "bignumberError", "tooManyDigits", "BASE", "LOG_BASE", "MAX_SAFE_INTEGER", "POWS_TEN", "SQRT_BASE", "MAX", "clone", "configObject", "div", "convertBase", "parseNumeric", "P", "BigNumber", "ONE", "DECIMAL_PLACES", "ROUNDING_MODE", "TO_EXP_NEG", "TO_EXP_POS", "MIN_EXP", "MAX_EXP", "CRYPTO", "MODULO_MODE", "POW_PRECISION", "FORMAT", "ALPHABET", "alphabetHasNormalDecimalDigits", "v", "b", "alphabet", "c", "caseChanged", "e", "i", "isNum", "len", "str", "x", "intCheck", "round", "obj", "p", "n", "s", "out", "maxOrMin", "pow2_53", "random53bitInt", "dp", "a", "k", "rand", "args", "sum", "decimal", "toBaseOut", "baseIn", "baseOut", "j", "arr", "arrL", "sign", "callerIsToString", "d", "r", "xc", "y", "rm", "toFixedPoint", "coeffToString", "multiply", "base", "m", "temp", "xlo", "xhi", "carry", "klo", "khi", "compare", "aL", "bL", "cmp", "subtract", "more", "prod", "prodL", "q", "qc", "rem", "remL", "rem0", "xi", "xL", "yc0", "yL", "yz", "yc", "bitFloor", "format", "id", "c0", "ne", "toExponential", "normalise", "basePrefix", "dotAfter", "dotBefore", "isInfinityOrNaN", "whitespaceOrPlus", "p1", "p2", "sd", "ni", "rd", "pows10", "valueOf", "half", "isModExp", "nIsBig", "nIsNeg", "nIsOdd", "isOdd", "t", "xLTy", "xe", "ye", "xcL", "ycL", "ylo", "yhi", "zc", "sqrtBase", "rep", "g1", "g2", "groupSeparator", "intPart", "fractionPart", "isNeg", "intDigits", "md", "d0", "d1", "d2", "exp", "n0", "n1", "z", "l", "min", "max", "name", "zs", "bignumber_default", "defaultLength", "bigLength", "createRandom", "buffer", "random", "createEntropy", "length", "rand", "entropy", "bufToBigInt", "buf", "value", "bignumber_default", "i", "hash", "input", "encoder", "sha3_512", "alphabet", "x", "randomLetter", "createFingerprint", "globalObj", "globals", "sourceString", "createCounter", "count", "initialCountMax", "init", "counter", "fingerprint", "firstLetter", "time", "salt", "hashInput", "createId", "lazy", "fn", "initialized", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_crypto", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "urlAlphabet", "POOL_SIZE_MULTIPLIER", "pool", "poolOffset", "fillPool", "bytes", "Buffer", "webcrypto", "nanoid", "size", "fillPool", "id", "i", "poolOffset", "urlAlphabet", "pool", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_crypto", "ENCODING", "ENCODING_LEN", "RANDOM_LEN", "TIME_LEN", "TIME_MAX", "ULIDErrorCode", "ULIDError", "errorCode", "message", "randomChar", "prng", "rand", "ENCODING_LEN", "ENCODING", "detectPRNG", "root", "rootLookup", "detectRoot", "globalCrypto", "crypto_default", "buffer", "ULIDError", "ULIDErrorCode", "inWebWorker", "encodeRandom", "len", "prng", "str", "randomChar", "encodeTime", "now", "TIME_LEN", "TIME_MAX", "mod", "currentLen", "ENCODING_LEN", "ENCODING", "ulid", "seedTime", "prng", "currentPRNG", "detectPRNG", "seed", "encodeTime", "TIME_LEN", "encodeRandom", "RANDOM_LEN", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "byteToHex", "i", "unsafeStringify", "arr", "offset", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "rnds8", "rng", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "v4", "options", "buf", "offset", "_v4", "rnds", "rng", "unsafeStringify", "v4_default", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "_state", "v7", "options", "buf", "offset", "bytes", "v7Bytes", "rng", "now", "rnds", "updateV7State", "unsafeStringify", "state", "msecs", "seq", "v7_default", "GeneratorRegistry", "#generators", "UuidGenerator", "CuidGenerator", "UlidGenerator", "NanoIdGenerator", "ProductGenerator", "NowGenerator", "name", "generator", "#now", "arg", "v4_default", "v7_default", "index_esm_default", "createId", "ulid", "nanoid", "lhs", "rhs", "l", "r", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "processRecords", "value", "ops", "processManyRecords", "processOneRecord", "record", "skip", "take", "cursor", "doKeysMatch", "processNestedRecords", "opsMap", "key", "records", "fields", "distinctBy", "paginate", "seen", "result", "getRecordKey", "pagination", "linkingFields", "paginateSingleList", "groupedByParent", "parentKey", "groupList", "aId", "bId", "elems", "list", "cursorIndex", "item", "start", "end", "mappers", "array", "field", "index", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "isPrismaValuePlaceholder", "value", "isPrismaValueGenerator", "renderQuery", "dbQuery", "scope", "generators", "maxChunkSize", "args", "arg", "evaluateArg", "renderRawSql", "chunkParams", "params", "rendered", "renderTemplateSql", "UserFacingError", "assertNever", "doesRequireEvaluation", "isPrismaValuePlaceholder", "found", "isPrismaValueGenerator", "name", "generator", "el", "fragments", "placeholderFormat", "argTypes", "sql", "ctx", "flattenedParams", "flattenedArgTypes", "fragment", "pairFragmentsWithParams", "renderFragment", "fragmentParams", "flattenedFragmentParams", "added", "appendToArray", "i", "fragmentType", "formatPlaceholder", "item", "tuple", "elements", "placeholderNumber", "param", "index", "value", "totalParamCount", "maxParamsPerFragment", "paramSize", "_", "chunkedParams", "thisParamCount", "chunks", "availableSize", "chunkArray", "chunk", "acc", "completeChunks", "currentChunk", "currentChunkParamCount", "array", "chunkSize", "result", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "serializeSql", "resultSet", "row", "acc", "value", "index", "serializeRawSql", "type", "serializeColumnType", "serializeRawValue", "ColumnTypeEnum", "v", "columnType", "assertNever", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "performValidation", "data", "rules", "error", "rule", "doesSatisfyRule", "message", "renderMessage", "code", "getErrorCode", "UserFacingError", "assertNever", "hint", "debug", "Debug", "QueryInterpreter", "_QueryInterpreter", "#onQuery", "#generators", "GeneratorRegistry", "#tracingHelper", "#serializer", "#rawSerializer", "#provider", "#connectionInfo", "onQuery", "tracingHelper", "serializer", "rawSerializer", "provider", "connectionInfo", "options", "serializeSql", "serializeRawSql", "queryPlan", "generators", "context", "purified", "purifyQueryPlan", "node", "e", "rethrowAsUserFacing", "#interpretPureNode", "value", "evaluateArg", "result", "arg", "nestedScope", "binding", "parts", "res", "acc", "part", "asList", "asNumber", "queries", "renderQuery", "#maxChunkSize", "#withChunkTransaction", "sum", "query", "commentedQuery", "applyComments", "#withQuerySpanAndEvent", "cloneObject", "err", "rethrowAsUserFacingRawError", "results", "appendToArray", "lastInsertId", "isEmpty", "mapField", "parent", "children", "joinExpr", "attachChildrenToParents", "#withInternalTransaction", "applyDataMap", "performValidation", "doesSatisfyRule", "from", "to", "keyGetter", "item", "getRecordKey", "asRecord", "toSet", "ops", "evaluateProcessingParameters", "processRecords", "record", "key", "initializer", "evalFieldInitializer", "entry", "evalFieldOperation", "scope", "name", "assertNever", "statementCount", "fn", "transactionManager", "transactionInfo", "transaction", "rollbackError", "#providerMaxChunkSize", "queryable", "execute", "withQuerySpanAndEvent", "field", "element", "parentRecords", "canAssumeStrictEquality", "childRecords", "parentKeys", "k", "childKeys", "parentMap", "parentArray", "parentRecord", "mappers", "inferKeyCasts", "childRecord", "rows", "keys", "getKeyCast", "type", "keyCasts", "keysFound", "i", "keyCast", "op", "lhs", "rhs", "evalNode", "impureNode", "findUniqueUnconditionalImpureNode", "evaluated", "replaceImpureNode", "target", "replacement", "child", "j", "expr", "records", "args", "found", "childFound", "sqlCommenter", "comment", "buildSqlComment", "appendSqlComment", "cursor", "nested", "klona", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "deserializeParamGraph", "serialized", "Deserializer", "decodeBase64url", "str", "Buffer", "Deserializer", "#serialized", "#view", "#offset", "serialized", "bytes", "decodeBase64url", "inputNodeCount", "outputNodeCount", "rootCount", "#readHeader", "inputNodes", "#readInputNodes", "outputNodes", "#readOutputNodes", "roots", "#readRoots", "#readVaruint", "value", "shift", "byte", "#readOptionalVaruint", "#readByte", "#readU16", "count", "i", "edgeCount", "edges", "j", "fieldIndex", "scalarMask", "childNodeId", "enumNameIndex", "edge", "argsNodeId", "outputNodeId", "keyIndex", "key", "root", "ParamGraph", "_ParamGraph", "#data", "#stringIndex", "#enumLookup", "data", "enumLookup", "i", "serialized", "deserializeParamGraph", "key", "entry", "id", "node", "fieldName", "nodeData", "fieldIndex", "edge", "enumName", "index", "EdgeFlag", "ScalarMask", "hasFlag", "flag", "getScalarMask", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "SCALAR_TAGS", "classifyValue", "value", "obj", "tag", "isPlainObject", "isTaggedValue", "parameterizeQuery", "query", "view", "parameterizer", "Parameterizer", "rootKey", "root", "parameterizeBatch", "batch", "parameterizedQueries", "#view", "#placeholders", "#valueToPlaceholder", "#nextPlaceholderId", "#getOrCreatePlaceholder", "value", "type", "valueKey", "createValueKey", "existingName", "createPlaceholder", "name", "sel", "argsNodeId", "outNodeId", "argsNode", "outNode", "result", "#parameterizeObject", "#parameterizeSelection", "obj", "node", "key", "edge", "#parameterizeValue", "classified", "classifyValue", "#handlePrimitive", "#handleTaggedScalar", "#handleArray", "#handleObject", "hasFlag", "EdgeFlag", "enumValues", "mask", "getScalarMask", "getPrimitivePlaceholderType", "matchesPrimitiveMask", "ScalarMask", "tagged", "tag", "matchesTaggedMask", "getTaggedPlaceholderType", "decoded", "decodeTaggedValue", "items", "originalValue", "jsonValue", "safeJsonStringify", "deserializeJsonObject", "item", "validateListElement", "decodedItems", "decodeIfTagged", "inferListElementType", "childNode", "isPlainObject", "selection", "nested", "childOutNode", "processedValue", "serializePlaceholderType", "serializeValue", "Buffer", "typeKey", "MAX_INT", "MIN_INT", "widest", "itemType", "widenType", "a", "b", "NUMERIC_WIDTH", "aWidth", "bWidth", "isTaggedValue", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "getCrypto", "randomUUID", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "once", "target", "event", "resolve", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "TransactionManagerError", "UserFacingError", "message", "meta", "TransactionNotFoundError", "TransactionClosedError", "operation", "TransactionRolledBackError", "TransactionStartTimeoutError", "TransactionExecutionTimeoutError", "timeout", "timeTaken", "TransactionInternalConsistencyError", "InvalidTransactionIsolationLevelError", "isolationLevel", "MAX_CLOSED_TRANSACTIONS", "CANCEL_ROLLBACK_GRACE_MS", "trackStartingTransaction", "markSettled", "settled", "resolve", "debug", "Debug", "COMMIT_QUERY", "ROLLBACK_QUERY", "PHANTOM_COMMIT_QUERY", "PHANTOM_ROLLBACK_QUERY", "TransactionManager", "#startingTransactions", "#onQuery", "#provider", "driverAdapter", "transactionOptions", "tracingHelper", "onQuery", "provider", "options", "validatedOptions", "#validateOptions", "#startTransactionImpl", "#withActiveTransactionLock", "existing", "TransactionInternalConsistencyError", "savepointName", "#nextSavepointName", "#requiredCreateSavepoint", "e", "starting", "abortController", "discarding", "transaction", "randomUUID", "TransactionStartTimeoutError", "startTimer", "createTimeoutIfDefined", "startTransactionPromise", "rethrowAsUserFacing", "once", "#discardStartedTransaction", "#closeTransaction", "#startTransactionTimeout", "assertNever", "tx", "transactionId", "txw", "TransactionNotFoundError", "#releaseSavepoint", "#requiredRollbackToSavepoint", "txInfo", "operation", "#getActiveOrClosingTransaction", "closedTransaction", "TransactionClosedError", "TransactionRolledBackError", "TransactionExecutionTimeoutError", "#runSerialized", "current", "settleWithin", "TransactionManagerError", "name", "#debugTransactionAlreadyClosedOnTimeout", "timeout", "timeoutStartedAt", "timer", "error", "callback", "previousOperation", "releaseOperationLock", "status", "createClosingPromise", "#withQuerySpanAndEvent", "query", "err", "fail", "InvalidTransactionIsolationLevelError", "queryable", "execute", "withQuerySpanAndEvent", "cb", "ms", "promise", "deadline", "PrismaClientInitializationError", "PrismaClientKnownRequestError", "PrismaClientRustPanicError", "PrismaClientUnknownRequestError", "version", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "tagToArgScalarType", "deserializeRawParameters", "serializedParameters", "parsed", "err", "args", "parameter", "decodeParameter", "argTypes", "getArgType", "item", "getScalarType", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "getBatchRequestPayload", "batch", "transaction", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "maskQuery", "query", "substr", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "normalizeLogs", "logs", "l", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "import_new_github_issue_url", "getGitHubIssueUrl", "title", "user", "repo", "template", "body", "newGitHubIssueUrl", "getErrorMessageWithLink", "version", "binaryTarget", "title", "description", "engineVersion", "database", "query", "gotLogs", "getLogs", "logs", "normalizeLogs", "stripAnsi", "moreInfo", "body", "process", "maskQuery", "url", "getGitHubIssueUrl", "underline", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "LocalExecutor", "_LocalExecutor", "#options", "#driverAdapter", "#transactionManager", "#connectionInfo", "#interpreter", "options", "driverAdapter", "transactionManager", "QueryInterpreter", "TransactionManager", "error", "connectionInfo", "plan", "scope", "transaction", "batchIndex", "queryInfo", "queryable", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "QueryPlanCache", "#singleCache", "#batchCache", "#maxSize", "maxSize", "key", "entry", "plan", "firstKey", "response", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "PrismaClientKnownRequestError", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "fieldContentRegExp", "serialize", "name", "value", "options", "opt", "enc", "encodedValue", "str", "maxAge", "isDate", "val", "parseSetCookie", "setCookieValue", "parts", "nameValuePairStr", "parsed", "_parseNameValuePair", "cookie", "part", "sides", "partKey", "partValue", "nameValueArr", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "PrismaClientError", "message", "info", "AccelerateError", "PrismaClientError", "message", "info", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "setRetryable", "info", "retryable", "InvalidDatasourceError", "AccelerateError", "message", "info", "setRetryable", "setClassName", "getUrlAndApiKey", "options", "errorInfo", "url", "err", "message", "InvalidDatasourceError", "protocol", "searchParams", "PRISMA_POSTGRES_PROTOCOL", "apiKey", "httpScheme", "isPrismaPostgresDev", "process", "httpUrl", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "import_engines_version", "HeaderBuilder", "apiKey", "tracingHelper", "logLevel", "logQueries", "engineHash", "traceparent", "transactionId", "headers", "captureTelemetry", "#buildCaptureSettings", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "convertEngineTimestamp", "timestamp", "dateFromEngineTimestamp", "debug", "Debug", "RemoteExecutor", "#clientVersion", "#headerBuilder", "#httpClient", "#logEmitter", "#tracingHelper", "#sqlCommenters", "options", "url", "apiKey", "getUrlAndApiKey", "HttpClient", "HeaderBuilder", "#request", "plan", "placeholderValues", "batchIndex", "model", "operation", "transaction", "customFetch", "queryInfo", "comments", "applySqlCommenters", "path", "method", "body", "fetch", "batchRequestIdx", "response", "#throwErrorFromResponse", "responseJson", "#processExtensions", "errorCode", "responseText", "errorJson", "errorMessage", "errorMeta", "PrismaClientKnownRequestError", "extensions", "logEvents", "event", "#emitLogEvent", "log", "dateFromEngineTimestamp", "#baseUrl", "#cookieJar", "#machineHint", "baseUrl", "headers", "requestUrl", "cookieHeader", "#getCookieHeader", "#storeCookiesFromResponse", "validCookies", "now", "key", "cookie", "domain", "serialize", "setCookieHeaders", "setCookieHeader", "cookieString", "parseSetCookie", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "PrismaClientInitializationError", "loadedWasmInstances", "wasmQueryCompilerLoader", "config", "clientVersion", "compilerWasm", "loading", "runtime", "wasmModule", "options", "instance", "wbindgen_start", "CLIENT_ENGINE_ERROR", "debug", "Debug", "globalWithPanicHandler", "message", "PrismaClientRustPanicError", "version", "ClientEngine", "#QueryCompilerConstructor", "#state", "#queryCompilerLoader", "#executorKind", "#queryPlanCache", "#paramGraph", "#emitQueryEvent", "config", "queryCompilerLoader", "PrismaClientInitializationError", "wasmQueryCompilerLoader", "QueryPlanCache", "ParamGraph", "enumName", "mapping", "value", "event", "safeJsonStringify", "#ensureStarted", "connecting", "executor", "queryCompiler", "#connectExecutor", "#instantiateQueryCompiler", "error", "engine", "RemoteExecutor", "LocalExecutor", "#convertIsolationLevel", "QueryCompilerConstructor", "provider", "connectionInfo", "#withLocalPanicHandler", "e", "#transformInitError", "err", "#transformRequestError", "query", "getErrorMessageWithLink", "UserFacingError", "PrismaClientKnownRequestError", "PrismaClientUnknownRequestError", "#transformCompileError", "fn", "disconnectOnPanic", "previousHandler", "panic", "disconnecting", "action", "_headers", "arg", "result", "options", "txInfo", "assertNever", "interactiveTransaction", "customDataProxyFetch", "plan", "placeholderValues", "queryInfoQuery", "isRawQuery", "compileRawQuery", "parameterizedQuery", "extractedValues", "parameterizeQuery", "cacheKey", "isCacheable", "cached", "#compileQuery", "queries", "transaction", "firstAction", "firstModelName", "batchPayload", "getBatchRequestPayload", "request", "hasRawQueries", "batchResponse", "queryInfoQueries", "#compileBatch", "parameterizedBatch", "parameterizeBatch", "cacheKeyStr", "batchOptions", "txOptions", "results", "rollback", "canContinueOnError", "batchIndex", "rows", "q", "actions", "modelNames", "convertCompactedRows", "compiler", "#withCompileSpan", "clientIsolationLevel", "execute", "m", "title", "sql", "args", "argTypes", "deserializeRawParameters", "getEngineInstance", "engineConfig", "ClientEngine", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "rawCommandArgsMapper", "command", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Sql", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "mssqlPreparedStatement", "sql", "acc", "str", "idx", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Decimal", "PrismaClientValidationError", "serializeRawParameters", "parameters", "clientVersion", "serializeRawParametersInternal", "error", "objectSerialization", "parameter", "encodeParameter", "item", "isDate", "isValidDate", "PrismaClientValidationError", "Decimal", "Buffer", "isArrayBufferLike", "buffer", "byteOffset", "byteLength", "preprocessObject", "value", "obj", "preprocessValueInObject", "result", "key", "ALTER_RE", "debug", "Debug", "checkAlter", "activeProvider", "query", "values", "invalidCall", "rawQueryArgsMapper", "clientMethod", "clientVersion", "args", "queryString", "parameters", "isTypedSql", "serializeRawParameters", "mssqlPreparedStatement", "templateStringMiddlewareArgsMapper", "sql", "requestArgs", "strings", "Sql", "sqlMiddlewareArgsMapper", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "createPrismaPromiseFactory", "transaction", "callback", "op", "promise", "_callback", "callbackTransaction", "valueToPromise", "error", "onFulfilled", "onRejected", "onFinally", "batchTransaction", "thing", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "package_default", "majorVersion", "package_default", "GLOBAL_INSTRUMENTATION_KEY", "GLOBAL_VERSIONED_INSTRUMENTATION_KEY", "globalThisWithPrismaInstrumentation", "getGlobalTracingHelper", "versionedGlobal", "disabledTracingHelper", "_spans", "events", "emitLogEvent", "event", "options", "callback", "DynamicTracingHelper", "context", "spans", "getGlobalTracingHelper", "getTracingHelper", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "getLockCountPromise", "knock", "cb", "resolve", "lock", "res", "onFulfilled", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "getLogLevel", "log", "acc", "curr", "currentLevel", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "hasBatchIndex", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "getBatchId", "query", "parts", "buildKeysString", "obj", "key", "value", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "writeMap", "isWrite", "action", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "DataLoader", "options", "request", "hash", "process", "resolve", "reject", "key", "batch", "result", "e", "a", "b", "j", "results", "value", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "Decimal", "deserializeValue", "type", "value", "Buffer", "v", "deserializeRawResult", "response", "deserializedResponse", "prebuiltEmptyObject", "createPrebuiltEmptyResultObject", "i", "row", "mappedRow", "j", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "modelNameForTable", "runtimeDataModel", "table", "schema", "name", "parseTableName", "candidates", "modelName", "model", "schemaMatches", "separatorIndex", "debug", "Debug", "RequestHandler", "client", "logEmitter", "DataLoader", "createApplyBatchExtensionsFunction", "requests", "customDataProxyFetch", "transaction", "otelParentCtx", "queries", "r", "traceparent", "containsWrite", "isWrite", "getTransactionOptions", "result", "i", "error", "request", "interactiveTransaction", "getItxTransactionOptions", "response", "batchId", "getBatchId", "requestA", "requestB", "params", "clientMethod", "callsite", "args", "modelName", "dataPath", "unpacker", "data", "process", "err", "globalOmit", "isMismatchingBatchIndex", "PrismaClientKnownRequestError", "isValidationError", "validationError", "convertValidationError", "throwValidationException", "message", "createErrorMessageWithContext", "meta", "PrismaClientRustPanicError", "PrismaClientUnknownRequestError", "PrismaClientInitializationError", "errorMeta", "errorCode", "topLevelModelName", "modelNameForTable", "stripAnsi", "operation", "pathForGet", "dataPathToGetPath", "extractedResponse", "deepGet", "deserializedResponse", "deserializeRawResult", "deserializeJsonObject", "assertNever", "hasBatchIndex", "selectionPath", "getPath", "index", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "clientVersion", "version", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "import_js_levenshtein", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "PrismaClientConstructorValidationError", "message", "setClassName", "knownProperties", "errorFormats", "logLevels", "validators", "accelerateUrl", "PrismaClientConstructorValidationError", "options", "didYouMean", "getDidYouMean", "validateLogLevel", "level", "option", "logValidators", "value", "emits", "key", "maxWait", "timeout", "config", "validationErrors", "modelKey", "modelConfig", "modelOrType", "getModelOrTypeByKey", "fieldName", "field", "renderOmitValidationErrors", "i", "knownKeys", "validateDependentOptions", "adapterProvided", "accelerateUrlProvided", "validatePrismaClientOptions", "str", "alternative", "getAlternative", "optionsWithDistances", "leven", "a", "b", "bestAlternative", "runtimeDataModel", "findByKey", "map", "foundKey", "mapKey", "uncapitalize", "omitConfig", "argsTree", "buildArgumentsRenderingTree", "error", "message", "args", "renderArgsTree", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "hasBatchIndex", "waitForBatch", "promises", "resolve", "reject", "successfulResults", "bestError", "done", "settledPromisesCount", "settleOnePromise", "immediatelyReject", "error", "i", "result", "debug", "Debug", "noopMiddlewareArgsMapper", "param", "TX_SCOPE_CONTEXT", "getItxScopeContext", "client", "context", "isNestedItxScopeContext", "value", "objectValue", "isItxScopeState", "createItxScopeId", "BatchTxIdCounter", "getPrismaClient", "config", "PrismaClient", "createPrismaPromiseFactory", "optionsArg", "PrismaClientInitializationError", "clientVersion", "validatePrismaClientOptions", "logEmitter", "EventEmitter", "MergedExtensionsList", "getTracingHelper", "adapter", "expectedDriverAdapterProvider", "options", "useDebug", "process", "getLogLevel", "o", "getEngineInstance", "RequestHandler", "log", "level", "event", "logger_exports", "e", "applyModelsAndClientExtensions", "eventType", "callback", "clearLogs", "transaction", "clientMethod", "args", "middlewareArgsMapper", "activeProvider", "rawQueryArgsMapper", "getCallSite", "query", "values", "sql", "argsMapper", "toSql", "checkAlter", "PrismaClientValidationError", "command", "rawCommandArgsMapper", "typedSql", "promises", "id", "lock", "getLockCountPromise", "requests", "request", "index", "isolationLevel", "waitForBatch", "itxContext", "isNested", "scopeState", "scopeStack", "scopeId", "headers", "optionsWithDefaults", "info", "result", "rollbackScopeCount", "i", "rollbackError", "itxScopeContext", "createCompositeProxy", "unApplyModelsAndClientExtensions", "addProperty", "removeProperties", "itxClientDenyList", "input", "spanOptions", "internalParams", "params", "consumer", "changedMiddlewareParams", "runInTransaction", "changedRequestParams", "requestParams", "applyQueryExtensions", "extensionContext", "resolveResultExtensionContext", "applyAllResultExtensions", "dataPath", "callsite", "action", "model", "unpacker", "otelParentCtx", "customDataProxyFetch", "message", "serializeJsonQuery", "prettyPrintArguments", "feature", "$extends", "isTemplateStringArray", "Sql", "templateStringMiddlewareArgsMapper", "sqlMiddlewareArgsMapper", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "allowList", "makeStrictEnum", "definition", "target", "property", "init_buffer_small", "init_process", "init_perf_hooks", "init_function", "init_decimal_small", "isNode", "isBun", "isDeno", "isNetlify", "isEdgeLight", "isWorkerd", "detectRuntime", "check", "runtimesPrettyNames", "getRuntime", "runtimeId", "PrismaClientInitializationError", "PrismaClientKnownRequestError", "PrismaClientRustPanicError", "PrismaClientUnknownRequestError", "PrismaClientValidationError", "empty", "join", "raw", "Sql", "sql", "AnyNull", "DbNull", "isAnyNull", "isDbNull", "isJsonNull", "isObjectEnumValue", "JsonNull", "NullTypes", "ObjectEnumValue", "Decimal"]
}
