{"version":3,"sources":["../../../../src/drivers/database/index.ts","../../../../../../node_modules/.pnpm/@lukeed+ms@2.0.2/node_modules/@lukeed/ms/dist/index.mjs","../../../../src/helpers.ts","../../../../src/drivers/base-driver.ts","../../../../src/drivers/database/database.ts","../../../../src/drivers/database/adapters/knex.ts","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/util/object-utils.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/identifier-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/schemable-identifier-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/alias-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/table-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/operation-node-source.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/expression/expression.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/select-modifier-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/and-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/or-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/on-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/join-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/binary-operation-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/operator-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/column-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/select-all-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/reference-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/dynamic/dynamic-reference-builder.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/order-by-item-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/raw-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/order-by-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/json-reference-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/json-operator-chain-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/json-path-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/reference-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/primitive-value-list-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/value-list-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/value-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/value-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/parens-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/binary-operation-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/order-by-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/partition-by-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/over-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/from-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/group-by-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/having-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/select-query-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/util/prevent-await.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-builder/join-builder.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/partition-by-item-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/partition-by-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-builder/over-builder.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/selection-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/select-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/insert-query-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/update-query-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/using-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/delete-query-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/where-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/returning-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/explain-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/when-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/merge-query-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/output-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/query-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-builder/no-result-error.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/top-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/top-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/limit-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/util/random-string.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/util/query-id.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/util/require-all-props.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/operation-node-transformer.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-transformer.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/plugin/with-schema/with-schema-plugin.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/util/deferred.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/util/log-once.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-executor/query-executor-base.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-executor/noop-query-executor.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/parse-utils.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/join-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/offset-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/group-by-item-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/group-by-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/set-operation-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/set-operation-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/expression/expression-wrapper.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/fetch-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/fetch-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-builder/select-query-builder.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/aggregate-function-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/function-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-builder/aggregate-function-builder.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-builder/function-module.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/unary-operation-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/unary-operation-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/case-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-builder/case-builder.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/json-path-leg-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/query-builder/json-path-builder.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/tuple-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/data-type-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/data-type-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/operation-node/cast-node.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/expression/expression-builder.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/expression-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/parser/table-parser.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/raw-builder/raw-builder.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/raw-builder/sql.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/dialect/dialect-adapter-base.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-adapter.js","../../../../../../node_modules/.pnpm/kysely@0.27.4/node_modules/kysely/dist/esm/dialect/mysql/mysql-adapter.js","../../../../src/drivers/database/adapters/kysely.ts","../../../../src/drivers/database/adapters/orchid.ts"],"sourcesContent":["export * from './adapters';\nexport * from './database';","var RGX = /^(-?(?:\\d+)?\\.?\\d+) *(m(?:illiseconds?|s(?:ecs?)?))?(s(?:ec(?:onds?|s)?)?)?(m(?:in(?:utes?|s)?)?)?(h(?:ours?|rs?)?)?(d(?:ays?)?)?(w(?:eeks?|ks?)?)?(y(?:ears?|rs?)?)?$/,\n\tSEC = 1e3,\n\tMIN = SEC * 60,\n\tHOUR = MIN * 60,\n\tDAY = HOUR * 24,\n\tYEAR = DAY * 365.25;\n\nexport function parse(val) {\n\tvar num, arr = val.toLowerCase().match(RGX);\n\tif (arr != null && (num = parseFloat(arr[1]))) {\n\t\tif (arr[3] != null) return num * SEC;\n\t\tif (arr[4] != null) return num * MIN;\n\t\tif (arr[5] != null) return num * HOUR;\n\t\tif (arr[6] != null) return num * DAY;\n\t\tif (arr[7] != null) return num * DAY * 7;\n\t\tif (arr[8] != null) return num * YEAR;\n\t\treturn num;\n\t}\n}\n\nfunction fmt(val, pfx, str, long) {\n\tvar num = (val | 0) === val ? val : ~~(val + 0.5);\n\treturn pfx + num + (long ? (' ' + str + (num != 1 ? 's' : '')) : str[0]);\n}\n\nexport function format(num, long) {\n\tvar pfx = num < 0  ? '-' : '', abs = num < 0 ? -num : num;\n\tif (abs < SEC) return num + (long ? ' ms' : 'ms');\n\tif (abs < MIN) return fmt(abs / SEC, pfx, 'second', long);\n\tif (abs < HOUR) return fmt(abs / MIN, pfx, 'minute', long);\n\tif (abs < DAY) return fmt(abs / HOUR, pfx, 'hour', long);\n\tif (abs < YEAR) return fmt(abs / DAY, pfx, 'day', long);\n\treturn fmt(abs / YEAR, pfx, 'year', long);\n}\n","import { parse } from '@lukeed/ms';\n\nimport type { Duration } from './types/main';\n\n/**\n * Resolve a TTL value to a number in milliseconds\n */\nexport function resolveTtl(ttl?: Duration, defaultTtl: Duration = 30_000) {\n  if (typeof ttl === 'number') return ttl;\n\n  /**\n   * If the TTL is null, it means the value should never expire\n   */\n  if (ttl === null) {\n    return undefined;\n  }\n\n  if (ttl === undefined) {\n    if (typeof defaultTtl === 'number') return defaultTtl;\n    if (typeof defaultTtl === 'string') return parse(defaultTtl);\n\n    return undefined;\n  }\n\n  return parse(ttl);\n}\n\n/**\n * Useful for creating a return value that can be destructured\n * or iterated over.\n *\n * See : https://antfu.me/posts/destructuring-with-object-or-array\n */\nexport function createIsomorphicDestructurable<\n  T extends Record<string, unknown>,\n  A extends readonly any[],\n>(obj: T, arr: A): T & A {\n  const clone = { ...obj };\n\n  Object.defineProperty(clone, Symbol.iterator, {\n    enumerable: false,\n    value() {\n      let index = 0;\n      return {\n        next: () => ({\n          value: arr[index++],\n          done: index > arr.length,\n        }),\n      };\n    },\n  });\n\n  return clone as T & A;\n}\n","import type { DriverCommonOptions } from '../types/main';\n\nexport abstract class BaseDriver {\n  /**\n   * Current cache prefix\n   */\n  protected prefix: string;\n\n  constructor(protected config: DriverCommonOptions) {\n    this.prefix = this.#sanitizePrefix(config.prefix);\n  }\n\n  /**\n   * Sanitizes the cache prefix by removing any trailing colons\n   */\n  #sanitizePrefix(prefix?: string) {\n    if (!prefix) return '';\n    return prefix.replace(/:+$/, '');\n  }\n\n  /**\n   * Creates a namespace prefix by concatenating the cache prefix with the given namespace\n   * If the cache prefix is not defined, the namespace is returned as is\n   */\n  protected createNamespacePrefix(namespace: string) {\n    const sanitizedPrefix = this.#sanitizePrefix(this.prefix);\n    return sanitizedPrefix ? `${sanitizedPrefix}:${namespace}` : namespace;\n  }\n\n  /**\n   * Returns the cache key with the prefix added to it, if a prefix is defined\n   */\n  protected getItemKey(key: string) {\n    return this.prefix ? `${this.prefix}:${key}` : key;\n  }\n}\n","import { resolveTtl } from '../../helpers';\nimport { BaseDriver } from '../base-driver';\nimport type { DatabaseConfig, CacheDriver, DatabaseAdapter } from '../../types/main';\n\n/**\n * A store that use a database to store cache entries\n *\n * You should provide an adapter that will handle the database interactions\n */\nexport class DatabaseDriver extends BaseDriver implements CacheDriver<true> {\n  type = 'l2' as const;\n\n  /**\n   * The underlying adapter\n   */\n  #adapter: DatabaseAdapter;\n\n  /**\n   * A promise that resolves when the table is created\n   */\n  #initialized: Promise<void>;\n\n  /**\n   * Pruning interval\n   */\n  #pruneInterval?: NodeJS.Timeout;\n\n  constructor(adapter: DatabaseAdapter, config: DatabaseConfig, isNamespace = false) {\n    super(config);\n    this.#adapter = adapter;\n\n    if (isNamespace) {\n      this.#initialized = Promise.resolve();\n      return;\n    }\n\n    this.#adapter.setTableName(config.tableName || 'mastercache');\n\n    if (config.autoCreateTable !== false) {\n      this.#initialized = this.#adapter.createTableIfNotExists();\n    } else {\n      this.#initialized = Promise.resolve();\n    }\n\n    if (config.pruneInterval === false) return;\n    this.#startPruneInterval(resolveTtl(config.pruneInterval)!);\n  }\n\n  /**\n   * Start the interval that will prune expired entries\n   * Maybe rework this using a node Worker ?\n   */\n  #startPruneInterval(interval: number) {\n    this.#pruneInterval = setInterval(async () => {\n      await this.#initialized;\n      await this.#adapter\n        .pruneExpiredEntries()\n        .catch((err) => console.error('[mastercache] failed to prune expired entries', err));\n    }, interval);\n  }\n\n  /**\n   * Check if the given timestamp is expired\n   */\n  #isExpired(expiration: number | null) {\n    return expiration !== null && expiration < Date.now();\n  }\n\n  /**\n   * Returns a new instance of the driver namespaced\n   */\n  namespace(namespace: string) {\n    const store = new (this.constructor as any)(\n      this.#adapter,\n      { ...this.config, prefix: this.createNamespacePrefix(namespace) },\n      true,\n    );\n\n    return store;\n  }\n\n  /**\n   * Get a value from the cache\n   */\n  async get(key: string) {\n    await this.#initialized;\n\n    const result = await this.#adapter.get(this.getItemKey(key));\n    if (!result) return;\n\n    if (this.#isExpired(result.expiresAt)) {\n      await this.#adapter.delete(key);\n      return;\n    }\n\n    return result.value;\n  }\n\n  /**\n   * Get the value of a key and delete it\n   *\n   * Returns the value if the key exists, undefined otherwise\n   */\n  async pull(key: string): Promise<string | undefined> {\n    const value = await this.get(key);\n    if (value) await this.delete(key);\n\n    return value;\n  }\n\n  /**\n   * Set a value in the cache\n   * Returns true if the value was set, false otherwise\n   */\n  async set(key: string, value: any, ttl?: number) {\n    await this.#initialized;\n    await this.#adapter.set({\n      key: this.getItemKey(key),\n      value,\n      expiresAt: ttl ? new Date(Date.now() + ttl) : null,\n    });\n\n    return true;\n  }\n\n  /**\n   * Check if a key exists in the cache\n   */\n  async has(key: string) {\n    await this.#initialized;\n    const result = await this.get(key);\n\n    if (!result) return false;\n    return true;\n  }\n\n  /**\n   * Remove all items from the cache\n   */\n  async clear() {\n    await this.#initialized;\n\n    await this.#adapter.clear(this.prefix);\n  }\n\n  /**\n   * Delete a key from the cache\n   * Returns true if the key was deleted, false otherwise\n   */\n  async delete(key: string) {\n    await this.#initialized;\n    return this.#adapter.delete(this.getItemKey(key));\n  }\n\n  /**\n   * Delete multiple keys from the cache\n   */\n  async deleteMany(keys: string[]) {\n    await this.#initialized;\n\n    keys = keys.map((key) => this.getItemKey(key));\n    const result = await this.#adapter.deleteMany(keys);\n\n    return result > 0;\n  }\n\n  /**\n   * Disconnect from the database\n   */\n  async disconnect() {\n    if (this.#pruneInterval) {\n      clearInterval(this.#pruneInterval);\n    }\n\n    await this.#adapter.disconnect();\n  }\n}\n","import type { Knex } from 'knex';\n\nimport { DatabaseDriver } from '../database';\nimport type { CreateDriverResult, DatabaseAdapter, KnexConfig } from '../../../types/main';\n\n\n/**\n * Knex adapter for the DatabaseDriver\n */\nexport class KnexAdapter implements DatabaseAdapter {\n  #connection: Knex;\n  #tableName!: string;\n\n  constructor(config: KnexConfig) {\n    this.#connection = config.connection;\n  }\n\n  setTableName(tableName: string): void {\n    this.#tableName = tableName;\n  }\n\n  async get(key: string): Promise<{ value: string; expiresAt: number | null } | undefined> {\n    const result = await this.#connection\n      .from(this.#tableName)\n      .select(['value', 'expires_at'])\n      .where('key', key)\n      .first();\n\n    if (!result) return;\n\n    return { value: result.value, expiresAt: result.expires_at };\n  }\n\n  async delete(key: string): Promise<boolean> {\n    const result = await this.#connection.from(this.#tableName).where('key', key).delete();\n    return result > 0;\n  }\n\n  async deleteMany(keys: string[]): Promise<number> {\n    return await this.#connection.from(this.#tableName).whereIn('key', keys).delete();\n  }\n\n  async disconnect(): Promise<void> {\n    await this.#connection.destroy();\n  }\n\n  async createTableIfNotExists(): Promise<void> {\n    const hasTable = await this.#connection.schema.hasTable(this.#tableName);\n    if (hasTable) return;\n\n    await this.#connection.schema.createTable(this.#tableName, (table) => {\n      table.string('key', 255).notNullable().primary();\n      table.text('value', 'longtext');\n      table.timestamp('expires_at').nullable();\n    });\n  }\n\n  async pruneExpiredEntries(): Promise<void> {\n    await this.#connection.from(this.#tableName).where('expires_at', '<', new Date()).delete();\n  }\n\n  async clear(prefix: string): Promise<void> {\n    await this.#connection.from(this.#tableName).where('key', 'like', `${prefix}%`).delete();\n  }\n\n  async set(row: { key: string; value: any; expiresAt: Date | null }): Promise<void> {\n    await this.#connection\n      .from(this.#tableName)\n      .insert({ key: row.key, value: row.value, expires_at: row.expiresAt })\n      .onConflict('key')\n      .merge(['value', 'expires_at']);\n  }\n}\n\n/**\n * Create a knex driver\n * You will need to install the underlying database package (mysql2, pg, sqlite3, etc)\n */\nexport function knexDriver(options: KnexConfig): CreateDriverResult<DatabaseDriver> {\n  return {\n    options,\n    factory: (config: KnexConfig) => {\n      const adapter = new KnexAdapter(config);\n      return new DatabaseDriver(adapter, config);\n    },\n  };\n}\n","/// <reference types=\"./object-utils.d.ts\" />\nexport function isEmpty(obj) {\n    if (Array.isArray(obj) || isString(obj) || isBuffer(obj)) {\n        return obj.length === 0;\n    }\n    else if (obj) {\n        return Object.keys(obj).length === 0;\n    }\n    return false;\n}\nexport function isUndefined(obj) {\n    return typeof obj === 'undefined' || obj === undefined;\n}\nexport function isString(obj) {\n    return typeof obj === 'string';\n}\nexport function isNumber(obj) {\n    return typeof obj === 'number';\n}\nexport function isBoolean(obj) {\n    return typeof obj === 'boolean';\n}\nexport function isNull(obj) {\n    return obj === null;\n}\nexport function isDate(obj) {\n    return obj instanceof Date;\n}\nexport function isBigInt(obj) {\n    return typeof obj === 'bigint';\n}\n// Don't change the returnd type to `obj is Buffer` to not create a\n// hard dependency to node.\nexport function isBuffer(obj) {\n    return typeof Buffer !== 'undefined' && Buffer.isBuffer(obj);\n}\nexport function isFunction(obj) {\n    return typeof obj === 'function';\n}\nexport function isObject(obj) {\n    return typeof obj === 'object' && obj !== null;\n}\nexport function isArrayBufferOrView(obj) {\n    return obj instanceof ArrayBuffer || ArrayBuffer.isView(obj);\n}\nexport function isPlainObject(obj) {\n    if (!isObject(obj) || getTag(obj) !== '[object Object]') {\n        return false;\n    }\n    if (Object.getPrototypeOf(obj) === null) {\n        return true;\n    }\n    let proto = obj;\n    while (Object.getPrototypeOf(proto) !== null) {\n        proto = Object.getPrototypeOf(proto);\n    }\n    return Object.getPrototypeOf(obj) === proto;\n}\nexport function getLast(arr) {\n    return arr[arr.length - 1];\n}\nexport function freeze(obj) {\n    return Object.freeze(obj);\n}\nexport function asArray(arg) {\n    if (isReadonlyArray(arg)) {\n        return arg;\n    }\n    else {\n        return [arg];\n    }\n}\nexport function asReadonlyArray(arg) {\n    if (isReadonlyArray(arg)) {\n        return arg;\n    }\n    else {\n        return freeze([arg]);\n    }\n}\nexport function isReadonlyArray(arg) {\n    return Array.isArray(arg);\n}\nexport function noop(obj) {\n    return obj;\n}\nexport function compare(obj1, obj2) {\n    if (isReadonlyArray(obj1) && isReadonlyArray(obj2)) {\n        return compareArrays(obj1, obj2);\n    }\n    else if (isObject(obj1) && isObject(obj2)) {\n        return compareObjects(obj1, obj2);\n    }\n    return obj1 === obj2;\n}\nfunction compareArrays(arr1, arr2) {\n    if (arr1.length !== arr2.length) {\n        return false;\n    }\n    for (let i = 0; i < arr1.length; ++i) {\n        if (!compare(arr1[i], arr2[i])) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction compareObjects(obj1, obj2) {\n    if (isBuffer(obj1) && isBuffer(obj2)) {\n        return compareBuffers(obj1, obj2);\n    }\n    else if (isDate(obj1) && isDate(obj2)) {\n        return compareDates(obj1, obj2);\n    }\n    return compareGenericObjects(obj1, obj2);\n}\nfunction compareBuffers(buf1, buf2) {\n    return Buffer.compare(buf1, buf2) === 0;\n}\nfunction compareDates(date1, date2) {\n    return date1.getTime() === date2.getTime();\n}\nfunction compareGenericObjects(obj1, obj2) {\n    const keys1 = Object.keys(obj1);\n    const keys2 = Object.keys(obj2);\n    if (keys1.length !== keys2.length) {\n        return false;\n    }\n    for (const key of keys1) {\n        if (!compare(obj1[key], obj2[key])) {\n            return false;\n        }\n    }\n    return true;\n}\nconst toString = Object.prototype.toString;\nfunction getTag(value) {\n    if (value == null) {\n        return value === undefined ? '[object Undefined]' : '[object Null]';\n    }\n    return toString.call(value);\n}\n","/// <reference types=\"./identifier-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const IdentifierNode = freeze({\n    is(node) {\n        return node.kind === 'IdentifierNode';\n    },\n    create(name) {\n        return freeze({\n            kind: 'IdentifierNode',\n            name,\n        });\n    },\n});\n","/// <reference types=\"./schemable-identifier-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { IdentifierNode } from './identifier-node.js';\n/**\n * @internal\n */\nexport const SchemableIdentifierNode = freeze({\n    is(node) {\n        return node.kind === 'SchemableIdentifierNode';\n    },\n    create(identifier) {\n        return freeze({\n            kind: 'SchemableIdentifierNode',\n            identifier: IdentifierNode.create(identifier),\n        });\n    },\n    createWithSchema(schema, identifier) {\n        return freeze({\n            kind: 'SchemableIdentifierNode',\n            schema: IdentifierNode.create(schema),\n            identifier: IdentifierNode.create(identifier),\n        });\n    },\n});\n","/// <reference types=\"./alias-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const AliasNode = freeze({\n    is(node) {\n        return node.kind === 'AliasNode';\n    },\n    create(node, alias) {\n        return freeze({\n            kind: 'AliasNode',\n            node,\n            alias,\n        });\n    },\n});\n","/// <reference types=\"./table-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { SchemableIdentifierNode } from './schemable-identifier-node.js';\n/**\n * @internal\n */\nexport const TableNode = freeze({\n    is(node) {\n        return node.kind === 'TableNode';\n    },\n    create(table) {\n        return freeze({\n            kind: 'TableNode',\n            table: SchemableIdentifierNode.create(table),\n        });\n    },\n    createWithSchema(schema, table) {\n        return freeze({\n            kind: 'TableNode',\n            table: SchemableIdentifierNode.createWithSchema(schema, table),\n        });\n    },\n});\n","/// <reference types=\"./operation-node-source.d.ts\" />\nimport { isFunction, isObject } from '../util/object-utils.js';\nexport function isOperationNodeSource(obj) {\n    return isObject(obj) && isFunction(obj.toOperationNode);\n}\n","/// <reference types=\"./expression.d.ts\" />\nimport { isOperationNodeSource, } from '../operation-node/operation-node-source.js';\nimport { isObject, isString } from '../util/object-utils.js';\nexport function isExpression(obj) {\n    return isObject(obj) && 'expressionType' in obj && isOperationNodeSource(obj);\n}\nexport function isAliasedExpression(obj) {\n    return (isObject(obj) &&\n        'expression' in obj &&\n        isString(obj.alias) &&\n        isOperationNodeSource(obj));\n}\n","/// <reference types=\"./select-modifier-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const SelectModifierNode = freeze({\n    is(node) {\n        return node.kind === 'SelectModifierNode';\n    },\n    create(modifier, of) {\n        return freeze({\n            kind: 'SelectModifierNode',\n            modifier,\n            of,\n        });\n    },\n    createWithExpression(modifier) {\n        return freeze({\n            kind: 'SelectModifierNode',\n            rawModifier: modifier,\n        });\n    },\n});\n","/// <reference types=\"./and-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const AndNode = freeze({\n    is(node) {\n        return node.kind === 'AndNode';\n    },\n    create(left, right) {\n        return freeze({\n            kind: 'AndNode',\n            left,\n            right,\n        });\n    },\n});\n","/// <reference types=\"./or-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const OrNode = freeze({\n    is(node) {\n        return node.kind === 'OrNode';\n    },\n    create(left, right) {\n        return freeze({\n            kind: 'OrNode',\n            left,\n            right,\n        });\n    },\n});\n","/// <reference types=\"./on-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { AndNode } from './and-node.js';\nimport { OrNode } from './or-node.js';\n/**\n * @internal\n */\nexport const OnNode = freeze({\n    is(node) {\n        return node.kind === 'OnNode';\n    },\n    create(filter) {\n        return freeze({\n            kind: 'OnNode',\n            on: filter,\n        });\n    },\n    cloneWithOperation(onNode, operator, operation) {\n        return freeze({\n            ...onNode,\n            on: operator === 'And'\n                ? AndNode.create(onNode.on, operation)\n                : OrNode.create(onNode.on, operation),\n        });\n    },\n});\n","/// <reference types=\"./join-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { OnNode } from './on-node.js';\n/**\n * @internal\n */\nexport const JoinNode = freeze({\n    is(node) {\n        return node.kind === 'JoinNode';\n    },\n    create(joinType, table) {\n        return freeze({\n            kind: 'JoinNode',\n            joinType,\n            table,\n            on: undefined,\n        });\n    },\n    createWithOn(joinType, table, on) {\n        return freeze({\n            kind: 'JoinNode',\n            joinType,\n            table,\n            on: OnNode.create(on),\n        });\n    },\n    cloneWithOn(joinNode, operation) {\n        return freeze({\n            ...joinNode,\n            on: joinNode.on\n                ? OnNode.cloneWithOperation(joinNode.on, 'And', operation)\n                : OnNode.create(operation),\n        });\n    },\n});\n","/// <reference types=\"./binary-operation-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const BinaryOperationNode = freeze({\n    is(node) {\n        return node.kind === 'BinaryOperationNode';\n    },\n    create(leftOperand, operator, rightOperand) {\n        return freeze({\n            kind: 'BinaryOperationNode',\n            leftOperand,\n            operator,\n            rightOperand,\n        });\n    },\n});\n","/// <reference types=\"./operator-node.d.ts\" />\nimport { freeze, isString } from '../util/object-utils.js';\nexport const COMPARISON_OPERATORS = [\n    '=',\n    '==',\n    '!=',\n    '<>',\n    '>',\n    '>=',\n    '<',\n    '<=',\n    'in',\n    'not in',\n    'is',\n    'is not',\n    'like',\n    'not like',\n    'match',\n    'ilike',\n    'not ilike',\n    '@>',\n    '<@',\n    '^@',\n    '&&',\n    '?',\n    '?&',\n    '?|',\n    '!<',\n    '!>',\n    '<=>',\n    '!~',\n    '~',\n    '~*',\n    '!~*',\n    '@@',\n    '@@@',\n    '!!',\n    '<->',\n    'regexp',\n    'is distinct from',\n    'is not distinct from',\n];\nexport const ARITHMETIC_OPERATORS = [\n    '+',\n    '-',\n    '*',\n    '/',\n    '%',\n    '^',\n    '&',\n    '|',\n    '#',\n    '<<',\n    '>>',\n];\nexport const JSON_OPERATORS = ['->', '->>'];\nexport const BINARY_OPERATORS = [\n    ...COMPARISON_OPERATORS,\n    ...ARITHMETIC_OPERATORS,\n    '&&',\n    '||',\n];\nexport const UNARY_FILTER_OPERATORS = ['exists', 'not exists'];\nexport const UNARY_OPERATORS = ['not', '-', ...UNARY_FILTER_OPERATORS];\nexport const OPERATORS = [\n    ...BINARY_OPERATORS,\n    ...JSON_OPERATORS,\n    ...UNARY_OPERATORS,\n    'between',\n    'between symmetric',\n];\n/**\n * @internal\n */\nexport const OperatorNode = freeze({\n    is(node) {\n        return node.kind === 'OperatorNode';\n    },\n    create(operator) {\n        return freeze({\n            kind: 'OperatorNode',\n            operator,\n        });\n    },\n});\nexport function isOperator(op) {\n    return isString(op) && OPERATORS.includes(op);\n}\nexport function isBinaryOperator(op) {\n    return isString(op) && BINARY_OPERATORS.includes(op);\n}\nexport function isComparisonOperator(op) {\n    return isString(op) && COMPARISON_OPERATORS.includes(op);\n}\nexport function isArithmeticOperator(op) {\n    return isString(op) && ARITHMETIC_OPERATORS.includes(op);\n}\nexport function isJSONOperator(op) {\n    return isString(op) && JSON_OPERATORS.includes(op);\n}\n","/// <reference types=\"./column-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { IdentifierNode } from './identifier-node.js';\n/**\n * @internal\n */\nexport const ColumnNode = freeze({\n    is(node) {\n        return node.kind === 'ColumnNode';\n    },\n    create(column) {\n        return freeze({\n            kind: 'ColumnNode',\n            column: IdentifierNode.create(column),\n        });\n    },\n});\n","/// <reference types=\"./select-all-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const SelectAllNode = freeze({\n    is(node) {\n        return node.kind === 'SelectAllNode';\n    },\n    create() {\n        return freeze({\n            kind: 'SelectAllNode',\n        });\n    },\n});\n","/// <reference types=\"./reference-node.d.ts\" />\nimport { SelectAllNode } from './select-all-node.js';\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const ReferenceNode = freeze({\n    is(node) {\n        return node.kind === 'ReferenceNode';\n    },\n    create(column, table) {\n        return freeze({\n            kind: 'ReferenceNode',\n            table,\n            column,\n        });\n    },\n    createSelectAll(table) {\n        return freeze({\n            kind: 'ReferenceNode',\n            table,\n            column: SelectAllNode.create(),\n        });\n    },\n});\n","/// <reference types=\"./dynamic-reference-builder.d.ts\" />\nimport { isOperationNodeSource, } from '../operation-node/operation-node-source.js';\nimport { parseSimpleReferenceExpression } from '../parser/reference-parser.js';\nimport { isObject, isString } from '../util/object-utils.js';\nexport class DynamicReferenceBuilder {\n    #dynamicReference;\n    get dynamicReference() {\n        return this.#dynamicReference;\n    }\n    /**\n     * @private\n     *\n     * This needs to be here just so that the typings work. Without this\n     * the generated .d.ts file contains no reference to the type param R\n     * which causes this type to be equal to DynamicReferenceBuilder with\n     * any R.\n     */\n    get refType() {\n        return undefined;\n    }\n    constructor(reference) {\n        this.#dynamicReference = reference;\n    }\n    toOperationNode() {\n        return parseSimpleReferenceExpression(this.#dynamicReference);\n    }\n}\nexport function isDynamicReferenceBuilder(obj) {\n    return (isObject(obj) &&\n        isOperationNodeSource(obj) &&\n        isString(obj.dynamicReference));\n}\n","/// <reference types=\"./order-by-item-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const OrderByItemNode = freeze({\n    is(node) {\n        return node.kind === 'OrderByItemNode';\n    },\n    create(orderBy, direction) {\n        return freeze({\n            kind: 'OrderByItemNode',\n            orderBy,\n            direction,\n        });\n    },\n});\n","/// <reference types=\"./raw-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const RawNode = freeze({\n    is(node) {\n        return node.kind === 'RawNode';\n    },\n    create(sqlFragments, parameters) {\n        return freeze({\n            kind: 'RawNode',\n            sqlFragments: freeze(sqlFragments),\n            parameters: freeze(parameters),\n        });\n    },\n    createWithSql(sql) {\n        return RawNode.create([sql], []);\n    },\n    createWithChild(child) {\n        return RawNode.create(['', ''], [child]);\n    },\n    createWithChildren(children) {\n        return RawNode.create(new Array(children.length + 1).fill(''), children);\n    },\n});\n","/// <reference types=\"./order-by-parser.d.ts\" />\nimport { isDynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';\nimport { OrderByItemNode } from '../operation-node/order-by-item-node.js';\nimport { RawNode } from '../operation-node/raw-node.js';\nimport { isExpressionOrFactory, parseExpression } from './expression-parser.js';\nimport { parseStringReference } from './reference-parser.js';\nexport function isOrderByDirection(thing) {\n    return thing === 'asc' || thing === 'desc';\n}\nexport function parseOrderBy(args) {\n    if (args.length === 2) {\n        return [parseOrderByItem(args[0], args[1])];\n    }\n    if (args.length === 1) {\n        const [orderBy] = args;\n        if (Array.isArray(orderBy)) {\n            return orderBy.map((item) => parseOrderByItem(item));\n        }\n        return [parseOrderByItem(orderBy)];\n    }\n    throw new Error(`Invalid number of arguments at order by! expected 1-2, received ${args.length}`);\n}\nexport function parseOrderByItem(ref, direction) {\n    const parsedRef = parseOrderByExpression(ref);\n    if (OrderByItemNode.is(parsedRef)) {\n        if (direction) {\n            throw new Error('Cannot specify direction twice!');\n        }\n        return parsedRef;\n    }\n    return OrderByItemNode.create(parsedRef, parseOrderByDirectionExpression(direction));\n}\nfunction parseOrderByExpression(expr) {\n    if (isExpressionOrFactory(expr)) {\n        return parseExpression(expr);\n    }\n    if (isDynamicReferenceBuilder(expr)) {\n        return expr.toOperationNode();\n    }\n    const [ref, direction] = expr.split(' ');\n    if (direction) {\n        if (!isOrderByDirection(direction)) {\n            throw new Error(`Invalid order by direction: ${direction}`);\n        }\n        return OrderByItemNode.create(parseStringReference(ref), parseOrderByDirectionExpression(direction));\n    }\n    return parseStringReference(expr);\n}\nfunction parseOrderByDirectionExpression(expr) {\n    if (!expr) {\n        return undefined;\n    }\n    if (expr === 'asc' || expr === 'desc') {\n        return RawNode.createWithSql(expr);\n    }\n    return expr.toOperationNode();\n}\n","/// <reference types=\"./json-reference-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const JSONReferenceNode = freeze({\n    is(node) {\n        return node.kind === 'JSONReferenceNode';\n    },\n    create(reference, traversal) {\n        return freeze({\n            kind: 'JSONReferenceNode',\n            reference,\n            traversal,\n        });\n    },\n    cloneWithTraversal(node, traversal) {\n        return freeze({\n            ...node,\n            traversal,\n        });\n    },\n});\n","/// <reference types=\"./json-operator-chain-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const JSONOperatorChainNode = freeze({\n    is(node) {\n        return node.kind === 'JSONOperatorChainNode';\n    },\n    create(operator) {\n        return freeze({\n            kind: 'JSONOperatorChainNode',\n            operator,\n            values: freeze([]),\n        });\n    },\n    cloneWithValue(node, value) {\n        return freeze({\n            ...node,\n            values: freeze([...node.values, value]),\n        });\n    },\n});\n","/// <reference types=\"./json-path-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const JSONPathNode = freeze({\n    is(node) {\n        return node.kind === 'JSONPathNode';\n    },\n    create(inOperator) {\n        return freeze({\n            kind: 'JSONPathNode',\n            inOperator,\n            pathLegs: freeze([]),\n        });\n    },\n    cloneWithLeg(jsonPathNode, pathLeg) {\n        return freeze({\n            ...jsonPathNode,\n            pathLegs: freeze([...jsonPathNode.pathLegs, pathLeg]),\n        });\n    },\n});\n","/// <reference types=\"./reference-parser.d.ts\" />\nimport { AliasNode } from '../operation-node/alias-node.js';\nimport { ColumnNode } from '../operation-node/column-node.js';\nimport { ReferenceNode } from '../operation-node/reference-node.js';\nimport { TableNode } from '../operation-node/table-node.js';\nimport { isReadonlyArray, isString } from '../util/object-utils.js';\nimport { parseExpression, isExpressionOrFactory, } from './expression-parser.js';\nimport { IdentifierNode } from '../operation-node/identifier-node.js';\nimport { isOrderByDirection, parseOrderBy, } from './order-by-parser.js';\nimport { OperatorNode, isJSONOperator, } from '../operation-node/operator-node.js';\nimport { JSONReferenceNode } from '../operation-node/json-reference-node.js';\nimport { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js';\nimport { JSONPathNode } from '../operation-node/json-path-node.js';\nexport function parseSimpleReferenceExpression(exp) {\n    if (isString(exp)) {\n        return parseStringReference(exp);\n    }\n    return exp.toOperationNode();\n}\nexport function parseReferenceExpressionOrList(arg) {\n    if (isReadonlyArray(arg)) {\n        return arg.map((it) => parseReferenceExpression(it));\n    }\n    else {\n        return [parseReferenceExpression(arg)];\n    }\n}\nexport function parseReferenceExpression(exp) {\n    if (isExpressionOrFactory(exp)) {\n        return parseExpression(exp);\n    }\n    return parseSimpleReferenceExpression(exp);\n}\nexport function parseJSONReference(ref, op) {\n    const referenceNode = parseStringReference(ref);\n    if (isJSONOperator(op)) {\n        return JSONReferenceNode.create(referenceNode, JSONOperatorChainNode.create(OperatorNode.create(op)));\n    }\n    const opWithoutLastChar = op.slice(0, -1);\n    if (isJSONOperator(opWithoutLastChar)) {\n        return JSONReferenceNode.create(referenceNode, JSONPathNode.create(OperatorNode.create(opWithoutLastChar)));\n    }\n    throw new Error(`Invalid JSON operator: ${op}`);\n}\nexport function parseStringReference(ref) {\n    const COLUMN_SEPARATOR = '.';\n    if (!ref.includes(COLUMN_SEPARATOR)) {\n        return ReferenceNode.create(ColumnNode.create(ref));\n    }\n    const parts = ref.split(COLUMN_SEPARATOR).map(trim);\n    if (parts.length === 3) {\n        return parseStringReferenceWithTableAndSchema(parts);\n    }\n    if (parts.length === 2) {\n        return parseStringReferenceWithTable(parts);\n    }\n    throw new Error(`invalid column reference ${ref}`);\n}\nexport function parseAliasedStringReference(ref) {\n    const ALIAS_SEPARATOR = ' as ';\n    if (ref.includes(ALIAS_SEPARATOR)) {\n        const [columnRef, alias] = ref.split(ALIAS_SEPARATOR).map(trim);\n        return AliasNode.create(parseStringReference(columnRef), IdentifierNode.create(alias));\n    }\n    else {\n        return parseStringReference(ref);\n    }\n}\nexport function parseColumnName(column) {\n    return ColumnNode.create(column);\n}\nexport function parseOrderedColumnName(column) {\n    const ORDER_SEPARATOR = ' ';\n    if (column.includes(ORDER_SEPARATOR)) {\n        const [columnName, order] = column.split(ORDER_SEPARATOR).map(trim);\n        if (!isOrderByDirection(order)) {\n            throw new Error(`invalid order direction \"${order}\" next to \"${columnName}\"`);\n        }\n        return parseOrderBy([columnName, order])[0];\n    }\n    else {\n        return parseColumnName(column);\n    }\n}\nfunction parseStringReferenceWithTableAndSchema(parts) {\n    const [schema, table, column] = parts;\n    return ReferenceNode.create(ColumnNode.create(column), TableNode.createWithSchema(schema, table));\n}\nfunction parseStringReferenceWithTable(parts) {\n    const [table, column] = parts;\n    return ReferenceNode.create(ColumnNode.create(column), TableNode.create(table));\n}\nfunction trim(str) {\n    return str.trim();\n}\n","/// <reference types=\"./primitive-value-list-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const PrimitiveValueListNode = freeze({\n    is(node) {\n        return node.kind === 'PrimitiveValueListNode';\n    },\n    create(values) {\n        return freeze({\n            kind: 'PrimitiveValueListNode',\n            values: freeze([...values]),\n        });\n    },\n});\n","/// <reference types=\"./value-list-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const ValueListNode = freeze({\n    is(node) {\n        return node.kind === 'ValueListNode';\n    },\n    create(values) {\n        return freeze({\n            kind: 'ValueListNode',\n            values: freeze(values),\n        });\n    },\n});\n","/// <reference types=\"./value-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const ValueNode = freeze({\n    is(node) {\n        return node.kind === 'ValueNode';\n    },\n    create(value) {\n        return freeze({\n            kind: 'ValueNode',\n            value,\n        });\n    },\n    createImmediate(value) {\n        return freeze({\n            kind: 'ValueNode',\n            value,\n            immediate: true,\n        });\n    },\n});\n","/// <reference types=\"./value-parser.d.ts\" />\nimport { PrimitiveValueListNode } from '../operation-node/primitive-value-list-node.js';\nimport { ValueListNode } from '../operation-node/value-list-node.js';\nimport { ValueNode } from '../operation-node/value-node.js';\nimport { isBoolean, isNull, isNumber, isReadonlyArray, } from '../util/object-utils.js';\nimport { parseExpression, isExpressionOrFactory, } from './expression-parser.js';\nexport function parseValueExpressionOrList(arg) {\n    if (isReadonlyArray(arg)) {\n        return parseValueExpressionList(arg);\n    }\n    return parseValueExpression(arg);\n}\nexport function parseValueExpression(exp) {\n    if (isExpressionOrFactory(exp)) {\n        return parseExpression(exp);\n    }\n    return ValueNode.create(exp);\n}\nexport function isSafeImmediateValue(value) {\n    return isNumber(value) || isBoolean(value) || isNull(value);\n}\nexport function parseSafeImmediateValue(value) {\n    if (!isSafeImmediateValue(value)) {\n        throw new Error(`unsafe immediate value ${JSON.stringify(value)}`);\n    }\n    return ValueNode.createImmediate(value);\n}\nfunction parseValueExpressionList(arg) {\n    if (arg.some(isExpressionOrFactory)) {\n        return ValueListNode.create(arg.map((it) => parseValueExpression(it)));\n    }\n    return PrimitiveValueListNode.create(arg);\n}\n","/// <reference types=\"./parens-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const ParensNode = freeze({\n    is(node) {\n        return node.kind === 'ParensNode';\n    },\n    create(node) {\n        return freeze({\n            kind: 'ParensNode',\n            node,\n        });\n    },\n});\n","/// <reference types=\"./binary-operation-parser.d.ts\" />\nimport { BinaryOperationNode } from '../operation-node/binary-operation-node.js';\nimport { isBoolean, isNull, isString, isUndefined, } from '../util/object-utils.js';\nimport { isOperationNodeSource, } from '../operation-node/operation-node-source.js';\nimport { OperatorNode, OPERATORS, } from '../operation-node/operator-node.js';\nimport { parseReferenceExpression, } from './reference-parser.js';\nimport { parseValueExpression, parseValueExpressionOrList, } from './value-parser.js';\nimport { ValueNode } from '../operation-node/value-node.js';\nimport { AndNode } from '../operation-node/and-node.js';\nimport { ParensNode } from '../operation-node/parens-node.js';\nimport { OrNode } from '../operation-node/or-node.js';\nexport function parseValueBinaryOperationOrExpression(args) {\n    if (args.length === 3) {\n        return parseValueBinaryOperation(args[0], args[1], args[2]);\n    }\n    else if (args.length === 1) {\n        return parseValueExpression(args[0]);\n    }\n    throw new Error(`invalid arguments: ${JSON.stringify(args)}`);\n}\nexport function parseValueBinaryOperation(left, operator, right) {\n    if (isIsOperator(operator) && needsIsOperator(right)) {\n        return BinaryOperationNode.create(parseReferenceExpression(left), parseOperator(operator), ValueNode.createImmediate(right));\n    }\n    return BinaryOperationNode.create(parseReferenceExpression(left), parseOperator(operator), parseValueExpressionOrList(right));\n}\nexport function parseReferentialBinaryOperation(left, operator, right) {\n    return BinaryOperationNode.create(parseReferenceExpression(left), parseOperator(operator), parseReferenceExpression(right));\n}\nexport function parseFilterObject(obj, combinator) {\n    return parseFilterList(Object.entries(obj)\n        .filter(([, v]) => !isUndefined(v))\n        .map(([k, v]) => parseValueBinaryOperation(k, needsIsOperator(v) ? 'is' : '=', v)), combinator);\n}\nexport function parseFilterList(list, combinator, withParens = true) {\n    const combine = combinator === 'and' ? AndNode.create : OrNode.create;\n    if (list.length === 0) {\n        return BinaryOperationNode.create(ValueNode.createImmediate(1), OperatorNode.create('='), ValueNode.createImmediate(combinator === 'and' ? 1 : 0));\n    }\n    let node = toOperationNode(list[0]);\n    for (let i = 1; i < list.length; ++i) {\n        node = combine(node, toOperationNode(list[i]));\n    }\n    if (list.length > 1 && withParens) {\n        return ParensNode.create(node);\n    }\n    return node;\n}\nfunction isIsOperator(operator) {\n    return operator === 'is' || operator === 'is not';\n}\nfunction needsIsOperator(value) {\n    return isNull(value) || isBoolean(value);\n}\nfunction parseOperator(operator) {\n    if (isString(operator) && OPERATORS.includes(operator)) {\n        return OperatorNode.create(operator);\n    }\n    if (isOperationNodeSource(operator)) {\n        return operator.toOperationNode();\n    }\n    throw new Error(`invalid operator ${JSON.stringify(operator)}`);\n}\nfunction toOperationNode(nodeOrSource) {\n    return isOperationNodeSource(nodeOrSource)\n        ? nodeOrSource.toOperationNode()\n        : nodeOrSource;\n}\n","/// <reference types=\"./order-by-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const OrderByNode = freeze({\n    is(node) {\n        return node.kind === 'OrderByNode';\n    },\n    create(items) {\n        return freeze({\n            kind: 'OrderByNode',\n            items: freeze([...items]),\n        });\n    },\n    cloneWithItems(orderBy, items) {\n        return freeze({\n            ...orderBy,\n            items: freeze([...orderBy.items, ...items]),\n        });\n    },\n});\n","/// <reference types=\"./partition-by-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const PartitionByNode = freeze({\n    is(node) {\n        return node.kind === 'PartitionByNode';\n    },\n    create(items) {\n        return freeze({\n            kind: 'PartitionByNode',\n            items: freeze(items),\n        });\n    },\n    cloneWithItems(partitionBy, items) {\n        return freeze({\n            ...partitionBy,\n            items: freeze([...partitionBy.items, ...items]),\n        });\n    },\n});\n","/// <reference types=\"./over-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { OrderByNode } from './order-by-node.js';\nimport { PartitionByNode } from './partition-by-node.js';\n/**\n * @internal\n */\nexport const OverNode = freeze({\n    is(node) {\n        return node.kind === 'OverNode';\n    },\n    create() {\n        return freeze({\n            kind: 'OverNode',\n        });\n    },\n    cloneWithOrderByItems(overNode, items) {\n        return freeze({\n            ...overNode,\n            orderBy: overNode.orderBy\n                ? OrderByNode.cloneWithItems(overNode.orderBy, items)\n                : OrderByNode.create(items),\n        });\n    },\n    cloneWithPartitionByItems(overNode, items) {\n        return freeze({\n            ...overNode,\n            partitionBy: overNode.partitionBy\n                ? PartitionByNode.cloneWithItems(overNode.partitionBy, items)\n                : PartitionByNode.create(items),\n        });\n    },\n});\n","/// <reference types=\"./from-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const FromNode = freeze({\n    is(node) {\n        return node.kind === 'FromNode';\n    },\n    create(froms) {\n        return freeze({\n            kind: 'FromNode',\n            froms: freeze(froms),\n        });\n    },\n    cloneWithFroms(from, froms) {\n        return freeze({\n            ...from,\n            froms: freeze([...from.froms, ...froms]),\n        });\n    },\n});\n","/// <reference types=\"./group-by-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const GroupByNode = freeze({\n    is(node) {\n        return node.kind === 'GroupByNode';\n    },\n    create(items) {\n        return freeze({\n            kind: 'GroupByNode',\n            items: freeze(items),\n        });\n    },\n    cloneWithItems(groupBy, items) {\n        return freeze({\n            ...groupBy,\n            items: freeze([...groupBy.items, ...items]),\n        });\n    },\n});\n","/// <reference types=\"./having-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { AndNode } from './and-node.js';\nimport { OrNode } from './or-node.js';\n/**\n * @internal\n */\nexport const HavingNode = freeze({\n    is(node) {\n        return node.kind === 'HavingNode';\n    },\n    create(filter) {\n        return freeze({\n            kind: 'HavingNode',\n            having: filter,\n        });\n    },\n    cloneWithOperation(havingNode, operator, operation) {\n        return freeze({\n            ...havingNode,\n            having: operator === 'And'\n                ? AndNode.create(havingNode.having, operation)\n                : OrNode.create(havingNode.having, operation),\n        });\n    },\n});\n","/// <reference types=\"./select-query-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { FromNode } from './from-node.js';\nimport { GroupByNode } from './group-by-node.js';\nimport { HavingNode } from './having-node.js';\nimport { OrderByNode } from './order-by-node.js';\n/**\n * @internal\n */\nexport const SelectQueryNode = freeze({\n    is(node) {\n        return node.kind === 'SelectQueryNode';\n    },\n    create(withNode) {\n        return freeze({\n            kind: 'SelectQueryNode',\n            ...(withNode && { with: withNode }),\n        });\n    },\n    createFrom(fromItems, withNode) {\n        return freeze({\n            kind: 'SelectQueryNode',\n            from: FromNode.create(fromItems),\n            ...(withNode && { with: withNode }),\n        });\n    },\n    cloneWithSelections(select, selections) {\n        return freeze({\n            ...select,\n            selections: select.selections\n                ? freeze([...select.selections, ...selections])\n                : freeze(selections),\n        });\n    },\n    cloneWithDistinctOn(select, expressions) {\n        return freeze({\n            ...select,\n            distinctOn: select.distinctOn\n                ? freeze([...select.distinctOn, ...expressions])\n                : freeze(expressions),\n        });\n    },\n    cloneWithFrontModifier(select, modifier) {\n        return freeze({\n            ...select,\n            frontModifiers: select.frontModifiers\n                ? freeze([...select.frontModifiers, modifier])\n                : freeze([modifier]),\n        });\n    },\n    cloneWithEndModifier(select, modifier) {\n        return freeze({\n            ...select,\n            endModifiers: select.endModifiers\n                ? freeze([...select.endModifiers, modifier])\n                : freeze([modifier]),\n        });\n    },\n    cloneWithOrderByItems(selectNode, items) {\n        return freeze({\n            ...selectNode,\n            orderBy: selectNode.orderBy\n                ? OrderByNode.cloneWithItems(selectNode.orderBy, items)\n                : OrderByNode.create(items),\n        });\n    },\n    cloneWithGroupByItems(selectNode, items) {\n        return freeze({\n            ...selectNode,\n            groupBy: selectNode.groupBy\n                ? GroupByNode.cloneWithItems(selectNode.groupBy, items)\n                : GroupByNode.create(items),\n        });\n    },\n    cloneWithLimit(selectNode, limit) {\n        return freeze({\n            ...selectNode,\n            limit,\n        });\n    },\n    cloneWithOffset(selectNode, offset) {\n        return freeze({\n            ...selectNode,\n            offset,\n        });\n    },\n    cloneWithFetch(selectNode, fetch) {\n        return freeze({\n            ...selectNode,\n            fetch,\n        });\n    },\n    cloneWithHaving(selectNode, operation) {\n        return freeze({\n            ...selectNode,\n            having: selectNode.having\n                ? HavingNode.cloneWithOperation(selectNode.having, 'And', operation)\n                : HavingNode.create(operation),\n        });\n    },\n    cloneWithSetOperations(selectNode, setOperations) {\n        return freeze({\n            ...selectNode,\n            setOperations: selectNode.setOperations\n                ? freeze([...selectNode.setOperations, ...setOperations])\n                : freeze([...setOperations]),\n        });\n    },\n    cloneWithoutSelections(select) {\n        return freeze({\n            ...select,\n            selections: [],\n        });\n    },\n    cloneWithoutLimit(select) {\n        return freeze({\n            ...select,\n            limit: undefined,\n        });\n    },\n    cloneWithoutOffset(select) {\n        return freeze({\n            ...select,\n            offset: undefined,\n        });\n    },\n    cloneWithoutOrderBy(select) {\n        return freeze({\n            ...select,\n            orderBy: undefined,\n        });\n    },\n    cloneWithoutGroupBy(select) {\n        return freeze({\n            ...select,\n            groupBy: undefined,\n        });\n    },\n});\n","/// <reference types=\"./prevent-await.d.ts\" />\nexport function preventAwait(clazz, message) {\n    Object.defineProperties(clazz.prototype, {\n        then: {\n            enumerable: false,\n            value: () => {\n                throw new Error(message);\n            },\n        },\n    });\n}\n","/// <reference types=\"./join-builder.d.ts\" />\nimport { JoinNode } from '../operation-node/join-node.js';\nimport { RawNode } from '../operation-node/raw-node.js';\nimport { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';\nimport { freeze } from '../util/object-utils.js';\nimport { preventAwait } from '../util/prevent-await.js';\nexport class JoinBuilder {\n    #props;\n    constructor(props) {\n        this.#props = freeze(props);\n    }\n    on(...args) {\n        return new JoinBuilder({\n            ...this.#props,\n            joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseValueBinaryOperationOrExpression(args)),\n        });\n    }\n    /**\n     * Just like {@link WhereInterface.whereRef} but adds an item to the join's\n     * `on` clause instead.\n     *\n     * See {@link WhereInterface.whereRef} for documentation and examples.\n     */\n    onRef(lhs, op, rhs) {\n        return new JoinBuilder({\n            ...this.#props,\n            joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseReferentialBinaryOperation(lhs, op, rhs)),\n        });\n    }\n    /**\n     * Adds `on true`.\n     */\n    onTrue() {\n        return new JoinBuilder({\n            ...this.#props,\n            joinNode: JoinNode.cloneWithOn(this.#props.joinNode, RawNode.createWithSql('true')),\n        });\n    }\n    /**\n     * Simply calls the provided function passing `this` as the only argument. `$call` returns\n     * what the provided function returns.\n     */\n    $call(func) {\n        return func(this);\n    }\n    toOperationNode() {\n        return this.#props.joinNode;\n    }\n}\npreventAwait(JoinBuilder, \"don't await JoinBuilder instances. They are never executed directly and are always just a part of a query.\");\n","/// <reference types=\"./partition-by-item-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const PartitionByItemNode = freeze({\n    is(node) {\n        return node.kind === 'PartitionByItemNode';\n    },\n    create(partitionBy) {\n        return freeze({\n            kind: 'PartitionByItemNode',\n            partitionBy,\n        });\n    },\n});\n","/// <reference types=\"./partition-by-parser.d.ts\" />\nimport { PartitionByItemNode } from '../operation-node/partition-by-item-node.js';\nimport { parseReferenceExpressionOrList, } from './reference-parser.js';\nexport function parsePartitionBy(partitionBy) {\n    return parseReferenceExpressionOrList(partitionBy).map(PartitionByItemNode.create);\n}\n","/// <reference types=\"./over-builder.d.ts\" />\nimport { OverNode } from '../operation-node/over-node.js';\nimport { parseOrderBy, } from '../parser/order-by-parser.js';\nimport { parsePartitionBy, } from '../parser/partition-by-parser.js';\nimport { freeze } from '../util/object-utils.js';\nimport { preventAwait } from '../util/prevent-await.js';\nexport class OverBuilder {\n    #props;\n    constructor(props) {\n        this.#props = freeze(props);\n    }\n    /**\n     * Adds an order by clause item inside the over function.\n     *\n     * ```ts\n     * const result = await db\n     *   .selectFrom('person')\n     *   .select(\n     *     (eb) => eb.fn.avg<number>('age').over(\n     *       ob => ob.orderBy('first_name', 'asc').orderBy('last_name', 'asc')\n     *     ).as('average_age')\n     *   )\n     *   .execute()\n     * ```\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select avg(\"age\") over(order by \"first_name\" asc, \"last_name\" asc) as \"average_age\"\n     * from \"person\"\n     * ```\n     */\n    orderBy(orderBy, direction) {\n        return new OverBuilder({\n            overNode: OverNode.cloneWithOrderByItems(this.#props.overNode, parseOrderBy([orderBy, direction])),\n        });\n    }\n    partitionBy(partitionBy) {\n        return new OverBuilder({\n            overNode: OverNode.cloneWithPartitionByItems(this.#props.overNode, parsePartitionBy(partitionBy)),\n        });\n    }\n    /**\n     * Simply calls the provided function passing `this` as the only argument. `$call` returns\n     * what the provided function returns.\n     */\n    $call(func) {\n        return func(this);\n    }\n    toOperationNode() {\n        return this.#props.overNode;\n    }\n}\npreventAwait(OverBuilder, \"don't await OverBuilder instances. They are never executed directly and are always just a part of a query.\");\n","/// <reference types=\"./selection-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { ReferenceNode } from './reference-node.js';\nimport { SelectAllNode } from './select-all-node.js';\n/**\n * @internal\n */\nexport const SelectionNode = freeze({\n    is(node) {\n        return node.kind === 'SelectionNode';\n    },\n    create(selection) {\n        return freeze({\n            kind: 'SelectionNode',\n            selection: selection,\n        });\n    },\n    createSelectAll() {\n        return freeze({\n            kind: 'SelectionNode',\n            selection: SelectAllNode.create(),\n        });\n    },\n    createSelectAllFromTable(table) {\n        return freeze({\n            kind: 'SelectionNode',\n            selection: ReferenceNode.createSelectAll(table),\n        });\n    },\n});\n","/// <reference types=\"./select-parser.d.ts\" />\nimport { isFunction, isReadonlyArray, isString } from '../util/object-utils.js';\nimport { SelectionNode } from '../operation-node/selection-node.js';\nimport { parseAliasedStringReference } from './reference-parser.js';\nimport { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';\nimport { parseAliasedExpression, } from './expression-parser.js';\nimport { parseTable } from './table-parser.js';\nimport { expressionBuilder, } from '../expression/expression-builder.js';\nexport function parseSelectArg(selection) {\n    if (isFunction(selection)) {\n        return parseSelectArg(selection(expressionBuilder()));\n    }\n    else if (isReadonlyArray(selection)) {\n        return selection.map((it) => parseSelectExpression(it));\n    }\n    else {\n        return [parseSelectExpression(selection)];\n    }\n}\nfunction parseSelectExpression(selection) {\n    if (isString(selection)) {\n        return SelectionNode.create(parseAliasedStringReference(selection));\n    }\n    else if (isDynamicReferenceBuilder(selection)) {\n        return SelectionNode.create(selection.toOperationNode());\n    }\n    else {\n        return SelectionNode.create(parseAliasedExpression(selection));\n    }\n}\nexport function parseSelectAll(table) {\n    if (!table) {\n        return [SelectionNode.createSelectAll()];\n    }\n    else if (Array.isArray(table)) {\n        return table.map(parseSelectAllArg);\n    }\n    else {\n        return [parseSelectAllArg(table)];\n    }\n}\nfunction parseSelectAllArg(table) {\n    if (isString(table)) {\n        return SelectionNode.createSelectAllFromTable(parseTable(table));\n    }\n    throw new Error(`invalid value selectAll expression: ${JSON.stringify(table)}`);\n}\n","/// <reference types=\"./insert-query-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const InsertQueryNode = freeze({\n    is(node) {\n        return node.kind === 'InsertQueryNode';\n    },\n    create(into, withNode, replace) {\n        return freeze({\n            kind: 'InsertQueryNode',\n            into,\n            ...(withNode && { with: withNode }),\n            replace,\n        });\n    },\n    createWithoutInto() {\n        return freeze({\n            kind: 'InsertQueryNode',\n        });\n    },\n    cloneWith(insertQuery, props) {\n        return freeze({\n            ...insertQuery,\n            ...props,\n        });\n    },\n});\n","/// <reference types=\"./update-query-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { FromNode } from './from-node.js';\n/**\n * @internal\n */\nexport const UpdateQueryNode = freeze({\n    is(node) {\n        return node.kind === 'UpdateQueryNode';\n    },\n    create(table, withNode) {\n        return freeze({\n            kind: 'UpdateQueryNode',\n            table,\n            ...(withNode && { with: withNode }),\n        });\n    },\n    createWithoutTable() {\n        return freeze({\n            kind: 'UpdateQueryNode',\n        });\n    },\n    cloneWithFromItems(updateQuery, fromItems) {\n        return freeze({\n            ...updateQuery,\n            from: updateQuery.from\n                ? FromNode.cloneWithFroms(updateQuery.from, fromItems)\n                : FromNode.create(fromItems),\n        });\n    },\n    cloneWithUpdates(updateQuery, updates) {\n        return freeze({\n            ...updateQuery,\n            updates: updateQuery.updates\n                ? freeze([...updateQuery.updates, ...updates])\n                : updates,\n        });\n    },\n    cloneWithLimit(updateQuery, limit) {\n        return freeze({\n            ...updateQuery,\n            limit,\n        });\n    },\n});\n","/// <reference types=\"./using-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const UsingNode = freeze({\n    is(node) {\n        return node.kind === 'UsingNode';\n    },\n    create(tables) {\n        return freeze({\n            kind: 'UsingNode',\n            tables: freeze(tables),\n        });\n    },\n    cloneWithTables(using, tables) {\n        return freeze({\n            ...using,\n            tables: freeze([...using.tables, ...tables]),\n        });\n    },\n});\n","/// <reference types=\"./delete-query-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { FromNode } from './from-node.js';\nimport { OrderByNode } from './order-by-node.js';\nimport { UsingNode } from './using-node.js';\n/**\n * @internal\n */\nexport const DeleteQueryNode = freeze({\n    is(node) {\n        return node.kind === 'DeleteQueryNode';\n    },\n    create(fromItems, withNode) {\n        return freeze({\n            kind: 'DeleteQueryNode',\n            from: FromNode.create(fromItems),\n            ...(withNode && { with: withNode }),\n        });\n    },\n    cloneWithOrderByItems(deleteNode, items) {\n        return freeze({\n            ...deleteNode,\n            orderBy: deleteNode.orderBy\n                ? OrderByNode.cloneWithItems(deleteNode.orderBy, items)\n                : OrderByNode.create(items),\n        });\n    },\n    cloneWithoutOrderBy(deleteNode) {\n        return freeze({\n            ...deleteNode,\n            orderBy: undefined,\n        });\n    },\n    cloneWithLimit(deleteNode, limit) {\n        return freeze({\n            ...deleteNode,\n            limit,\n        });\n    },\n    cloneWithoutLimit(deleteNode) {\n        return freeze({\n            ...deleteNode,\n            limit: undefined,\n        });\n    },\n    cloneWithUsing(deleteNode, tables) {\n        return freeze({\n            ...deleteNode,\n            using: deleteNode.using !== undefined\n                ? UsingNode.cloneWithTables(deleteNode.using, tables)\n                : UsingNode.create(tables),\n        });\n    },\n});\n","/// <reference types=\"./where-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { AndNode } from './and-node.js';\nimport { OrNode } from './or-node.js';\n/**\n * @internal\n */\nexport const WhereNode = freeze({\n    is(node) {\n        return node.kind === 'WhereNode';\n    },\n    create(filter) {\n        return freeze({\n            kind: 'WhereNode',\n            where: filter,\n        });\n    },\n    cloneWithOperation(whereNode, operator, operation) {\n        return freeze({\n            ...whereNode,\n            where: operator === 'And'\n                ? AndNode.create(whereNode.where, operation)\n                : OrNode.create(whereNode.where, operation),\n        });\n    },\n});\n","/// <reference types=\"./returning-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const ReturningNode = freeze({\n    is(node) {\n        return node.kind === 'ReturningNode';\n    },\n    create(selections) {\n        return freeze({\n            kind: 'ReturningNode',\n            selections: freeze(selections),\n        });\n    },\n    cloneWithSelections(returning, selections) {\n        return freeze({\n            ...returning,\n            selections: returning.selections\n                ? freeze([...returning.selections, ...selections])\n                : freeze(selections),\n        });\n    },\n});\n","/// <reference types=\"./explain-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const ExplainNode = freeze({\n    is(node) {\n        return node.kind === 'ExplainNode';\n    },\n    create(format, options) {\n        return freeze({\n            kind: 'ExplainNode',\n            format,\n            options,\n        });\n    },\n});\n","/// <reference types=\"./when-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const WhenNode = freeze({\n    is(node) {\n        return node.kind === 'WhenNode';\n    },\n    create(condition) {\n        return freeze({\n            kind: 'WhenNode',\n            condition,\n        });\n    },\n    cloneWithResult(whenNode, result) {\n        return freeze({\n            ...whenNode,\n            result,\n        });\n    },\n});\n","/// <reference types=\"./merge-query-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { WhenNode } from './when-node.js';\n/**\n * @internal\n */\nexport const MergeQueryNode = freeze({\n    is(node) {\n        return node.kind === 'MergeQueryNode';\n    },\n    create(into, withNode) {\n        return freeze({\n            kind: 'MergeQueryNode',\n            into,\n            ...(withNode && { with: withNode }),\n        });\n    },\n    cloneWithUsing(mergeNode, using) {\n        return freeze({\n            ...mergeNode,\n            using,\n        });\n    },\n    cloneWithWhen(mergeNode, when) {\n        return freeze({\n            ...mergeNode,\n            whens: mergeNode.whens\n                ? freeze([...mergeNode.whens, when])\n                : freeze([when]),\n        });\n    },\n    cloneWithThen(mergeNode, then) {\n        return freeze({\n            ...mergeNode,\n            whens: mergeNode.whens\n                ? freeze([\n                    ...mergeNode.whens.slice(0, -1),\n                    WhenNode.cloneWithResult(mergeNode.whens[mergeNode.whens.length - 1], then),\n                ])\n                : undefined,\n        });\n    },\n});\n","/// <reference types=\"./output-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const OutputNode = freeze({\n    is(node) {\n        return node.kind === 'OutputNode';\n    },\n    create(selections) {\n        return freeze({\n            kind: 'OutputNode',\n            selections: freeze(selections),\n        });\n    },\n    cloneWithSelections(output, selections) {\n        return freeze({\n            ...output,\n            selections: output.selections\n                ? freeze([...output.selections, ...selections])\n                : freeze(selections),\n        });\n    },\n});\n","/// <reference types=\"./query-node.d.ts\" />\nimport { InsertQueryNode } from './insert-query-node.js';\nimport { SelectQueryNode } from './select-query-node.js';\nimport { UpdateQueryNode } from './update-query-node.js';\nimport { DeleteQueryNode } from './delete-query-node.js';\nimport { WhereNode } from './where-node.js';\nimport { freeze } from '../util/object-utils.js';\nimport { ReturningNode } from './returning-node.js';\nimport { ExplainNode } from './explain-node.js';\nimport { MergeQueryNode } from './merge-query-node.js';\nimport { OutputNode } from './output-node.js';\n/**\n * @internal\n */\nexport const QueryNode = freeze({\n    is(node) {\n        return (SelectQueryNode.is(node) ||\n            InsertQueryNode.is(node) ||\n            UpdateQueryNode.is(node) ||\n            DeleteQueryNode.is(node) ||\n            MergeQueryNode.is(node));\n    },\n    cloneWithWhere(node, operation) {\n        return freeze({\n            ...node,\n            where: node.where\n                ? WhereNode.cloneWithOperation(node.where, 'And', operation)\n                : WhereNode.create(operation),\n        });\n    },\n    cloneWithJoin(node, join) {\n        return freeze({\n            ...node,\n            joins: node.joins ? freeze([...node.joins, join]) : freeze([join]),\n        });\n    },\n    cloneWithReturning(node, selections) {\n        return freeze({\n            ...node,\n            returning: node.returning\n                ? ReturningNode.cloneWithSelections(node.returning, selections)\n                : ReturningNode.create(selections),\n        });\n    },\n    cloneWithoutReturning(node) {\n        return freeze({\n            ...node,\n            returning: undefined,\n        });\n    },\n    cloneWithoutWhere(node) {\n        return freeze({\n            ...node,\n            where: undefined,\n        });\n    },\n    cloneWithExplain(node, format, options) {\n        return freeze({\n            ...node,\n            explain: ExplainNode.create(format, options?.toOperationNode()),\n        });\n    },\n    cloneWithTop(node, top) {\n        return freeze({\n            ...node,\n            top,\n        });\n    },\n    cloneWithOutput(node, selections) {\n        return freeze({\n            ...node,\n            output: node.output\n                ? OutputNode.cloneWithSelections(node.output, selections)\n                : OutputNode.create(selections),\n        });\n    },\n});\n","/// <reference types=\"./no-result-error.d.ts\" />\nexport class NoResultError extends Error {\n    /**\n     * The operation node tree of the query that was executed.\n     */\n    node;\n    constructor(node) {\n        super('no result');\n        this.node = node;\n    }\n}\nexport function isNoResultErrorConstructor(fn) {\n    return Object.prototype.hasOwnProperty.call(fn, 'prototype');\n}\n","/// <reference types=\"./top-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const TopNode = freeze({\n    is(node) {\n        return node.kind === 'TopNode';\n    },\n    create(expression, modifiers) {\n        return freeze({\n            kind: 'TopNode',\n            expression,\n            modifiers,\n        });\n    },\n});\n","/// <reference types=\"./top-parser.d.ts\" />\nimport { TopNode } from '../operation-node/top-node.js';\nimport { isBigInt, isNumber, isUndefined } from '../util/object-utils.js';\nexport function parseTop(expression, modifiers) {\n    if (!isNumber(expression) && !isBigInt(expression)) {\n        throw new Error(`Invalid top expression: ${expression}`);\n    }\n    if (!isUndefined(modifiers) && !isTopModifiers(modifiers)) {\n        throw new Error(`Invalid top modifiers: ${modifiers}`);\n    }\n    return TopNode.create(expression, modifiers);\n}\nfunction isTopModifiers(modifiers) {\n    return (modifiers === 'percent' ||\n        modifiers === 'with ties' ||\n        modifiers === 'percent with ties');\n}\n","/// <reference types=\"./limit-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const LimitNode = freeze({\n    is(node) {\n        return node.kind === 'LimitNode';\n    },\n    create(limit) {\n        return freeze({\n            kind: 'LimitNode',\n            limit,\n        });\n    },\n});\n","/// <reference types=\"./random-string.d.ts\" />\nconst CHARS = [\n    'A',\n    'B',\n    'C',\n    'D',\n    'E',\n    'F',\n    'G',\n    'H',\n    'I',\n    'J',\n    'K',\n    'L',\n    'M',\n    'N',\n    'O',\n    'P',\n    'Q',\n    'R',\n    'S',\n    'T',\n    'U',\n    'V',\n    'W',\n    'X',\n    'Y',\n    'Z',\n    'a',\n    'b',\n    'c',\n    'd',\n    'e',\n    'f',\n    'g',\n    'h',\n    'i',\n    'j',\n    'k',\n    'l',\n    'm',\n    'n',\n    'o',\n    'p',\n    'q',\n    'r',\n    's',\n    't',\n    'u',\n    'v',\n    'w',\n    'x',\n    'y',\n    'z',\n    '0',\n    '1',\n    '2',\n    '3',\n    '4',\n    '5',\n    '6',\n    '7',\n    '8',\n    '9',\n];\nexport function randomString(length) {\n    let chars = '';\n    for (let i = 0; i < length; ++i) {\n        chars += randomChar();\n    }\n    return chars;\n}\nfunction randomChar() {\n    return CHARS[~~(Math.random() * CHARS.length)];\n}\n","/// <reference types=\"./query-id.d.ts\" />\nimport { randomString } from './random-string.js';\nexport function createQueryId() {\n    return new LazyQueryId();\n}\nclass LazyQueryId {\n    #queryId;\n    get queryId() {\n        if (this.#queryId === undefined) {\n            this.#queryId = randomString(8);\n        }\n        return this.#queryId;\n    }\n}\n","/// <reference types=\"./require-all-props.d.ts\" />\n/**\n * Helper function to check listed properties according to given type. Check if all properties has been used when object is initialised.\n *\n * Example use:\n *\n * ```ts\n * type SomeType = { propA: string; propB?: number; }\n *\n * // propB has to be mentioned even it is optional. It still should be initialized with undefined.\n * const a: SomeType = requireAllProps<SomeType>({ propA: \"value A\", propB: undefined });\n *\n * // checked type is implicit for variable.\n * const b = requireAllProps<SomeType>({ propA: \"value A\", propB: undefined });\n * ```\n *\n * Wrong use of this helper:\n *\n * 1. Omit checked type - all checked properties will be expect as of type never\n *\n * ```ts\n * const z: SomeType = requireAllProps({ propC: \"no type will work\" });\n * ```\n *\n * 2. Apply to spreaded object - there is no way how to check in compile time if spreaded object contains all properties\n *\n * ```ts\n * const y: SomeType = { propA: \"\" }; // valid object according to SomeType declaration\n * const x = requireAllProps<SomeType>( { ... y } );\n * ```\n *\n * @param obj object to check if all properties has been used\n * @returns untouched obj parameter is returned\n */\nexport function requireAllProps(obj) {\n    return obj;\n}\n","/// <reference types=\"./operation-node-transformer.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { requireAllProps } from '../util/require-all-props.js';\n/**\n * Transforms an operation node tree into another one.\n *\n * Kysely queries are expressed internally as a tree of objects (operation nodes).\n * `OperationNodeTransformer` takes such a tree as its input and returns a\n * transformed deep copy of it. By default the `OperationNodeTransformer`\n * does nothing. You need to override one or more methods to make it do\n * something.\n *\n * There's a method for each node type. For example if you'd like to convert\n * each identifier (table name, column name, alias etc.) from camelCase to\n * snake_case, you'd do something like this:\n *\n * ```ts\n * class CamelCaseTransformer extends OperationNodeTransformer {\n *   transformIdentifier(node: IdentifierNode): IdentifierNode {\n *     node = super.transformIdentifier(node),\n *\n *     return {\n *       ...node,\n *       name: snakeCase(node.name),\n *     }\n *   }\n * }\n *\n * const transformer = new CamelCaseTransformer()\n * const tree = transformer.transformNode(tree)\n * ```\n */\nexport class OperationNodeTransformer {\n    nodeStack = [];\n    #transformers = freeze({\n        AliasNode: this.transformAlias.bind(this),\n        ColumnNode: this.transformColumn.bind(this),\n        IdentifierNode: this.transformIdentifier.bind(this),\n        SchemableIdentifierNode: this.transformSchemableIdentifier.bind(this),\n        RawNode: this.transformRaw.bind(this),\n        ReferenceNode: this.transformReference.bind(this),\n        SelectQueryNode: this.transformSelectQuery.bind(this),\n        SelectionNode: this.transformSelection.bind(this),\n        TableNode: this.transformTable.bind(this),\n        FromNode: this.transformFrom.bind(this),\n        SelectAllNode: this.transformSelectAll.bind(this),\n        AndNode: this.transformAnd.bind(this),\n        OrNode: this.transformOr.bind(this),\n        ValueNode: this.transformValue.bind(this),\n        ValueListNode: this.transformValueList.bind(this),\n        PrimitiveValueListNode: this.transformPrimitiveValueList.bind(this),\n        ParensNode: this.transformParens.bind(this),\n        JoinNode: this.transformJoin.bind(this),\n        OperatorNode: this.transformOperator.bind(this),\n        WhereNode: this.transformWhere.bind(this),\n        InsertQueryNode: this.transformInsertQuery.bind(this),\n        DeleteQueryNode: this.transformDeleteQuery.bind(this),\n        ReturningNode: this.transformReturning.bind(this),\n        CreateTableNode: this.transformCreateTable.bind(this),\n        AddColumnNode: this.transformAddColumn.bind(this),\n        ColumnDefinitionNode: this.transformColumnDefinition.bind(this),\n        DropTableNode: this.transformDropTable.bind(this),\n        DataTypeNode: this.transformDataType.bind(this),\n        OrderByNode: this.transformOrderBy.bind(this),\n        OrderByItemNode: this.transformOrderByItem.bind(this),\n        GroupByNode: this.transformGroupBy.bind(this),\n        GroupByItemNode: this.transformGroupByItem.bind(this),\n        UpdateQueryNode: this.transformUpdateQuery.bind(this),\n        ColumnUpdateNode: this.transformColumnUpdate.bind(this),\n        LimitNode: this.transformLimit.bind(this),\n        OffsetNode: this.transformOffset.bind(this),\n        OnConflictNode: this.transformOnConflict.bind(this),\n        OnDuplicateKeyNode: this.transformOnDuplicateKey.bind(this),\n        CreateIndexNode: this.transformCreateIndex.bind(this),\n        DropIndexNode: this.transformDropIndex.bind(this),\n        ListNode: this.transformList.bind(this),\n        PrimaryKeyConstraintNode: this.transformPrimaryKeyConstraint.bind(this),\n        UniqueConstraintNode: this.transformUniqueConstraint.bind(this),\n        ReferencesNode: this.transformReferences.bind(this),\n        CheckConstraintNode: this.transformCheckConstraint.bind(this),\n        WithNode: this.transformWith.bind(this),\n        CommonTableExpressionNode: this.transformCommonTableExpression.bind(this),\n        CommonTableExpressionNameNode: this.transformCommonTableExpressionName.bind(this),\n        HavingNode: this.transformHaving.bind(this),\n        CreateSchemaNode: this.transformCreateSchema.bind(this),\n        DropSchemaNode: this.transformDropSchema.bind(this),\n        AlterTableNode: this.transformAlterTable.bind(this),\n        DropColumnNode: this.transformDropColumn.bind(this),\n        RenameColumnNode: this.transformRenameColumn.bind(this),\n        AlterColumnNode: this.transformAlterColumn.bind(this),\n        ModifyColumnNode: this.transformModifyColumn.bind(this),\n        AddConstraintNode: this.transformAddConstraint.bind(this),\n        DropConstraintNode: this.transformDropConstraint.bind(this),\n        ForeignKeyConstraintNode: this.transformForeignKeyConstraint.bind(this),\n        CreateViewNode: this.transformCreateView.bind(this),\n        DropViewNode: this.transformDropView.bind(this),\n        GeneratedNode: this.transformGenerated.bind(this),\n        DefaultValueNode: this.transformDefaultValue.bind(this),\n        OnNode: this.transformOn.bind(this),\n        ValuesNode: this.transformValues.bind(this),\n        SelectModifierNode: this.transformSelectModifier.bind(this),\n        CreateTypeNode: this.transformCreateType.bind(this),\n        DropTypeNode: this.transformDropType.bind(this),\n        ExplainNode: this.transformExplain.bind(this),\n        DefaultInsertValueNode: this.transformDefaultInsertValue.bind(this),\n        AggregateFunctionNode: this.transformAggregateFunction.bind(this),\n        OverNode: this.transformOver.bind(this),\n        PartitionByNode: this.transformPartitionBy.bind(this),\n        PartitionByItemNode: this.transformPartitionByItem.bind(this),\n        SetOperationNode: this.transformSetOperation.bind(this),\n        BinaryOperationNode: this.transformBinaryOperation.bind(this),\n        UnaryOperationNode: this.transformUnaryOperation.bind(this),\n        UsingNode: this.transformUsing.bind(this),\n        FunctionNode: this.transformFunction.bind(this),\n        CaseNode: this.transformCase.bind(this),\n        WhenNode: this.transformWhen.bind(this),\n        JSONReferenceNode: this.transformJSONReference.bind(this),\n        JSONPathNode: this.transformJSONPath.bind(this),\n        JSONPathLegNode: this.transformJSONPathLeg.bind(this),\n        JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),\n        TupleNode: this.transformTuple.bind(this),\n        MergeQueryNode: this.transformMergeQuery.bind(this),\n        MatchedNode: this.transformMatched.bind(this),\n        AddIndexNode: this.transformAddIndex.bind(this),\n        CastNode: this.transformCast.bind(this),\n        FetchNode: this.transformFetch.bind(this),\n        TopNode: this.transformTop.bind(this),\n        OutputNode: this.transformOutput.bind(this),\n    });\n    transformNode(node) {\n        if (!node) {\n            return node;\n        }\n        this.nodeStack.push(node);\n        const out = this.transformNodeImpl(node);\n        this.nodeStack.pop();\n        return freeze(out);\n    }\n    transformNodeImpl(node) {\n        return this.#transformers[node.kind](node);\n    }\n    transformNodeList(list) {\n        if (!list) {\n            return list;\n        }\n        return freeze(list.map((node) => this.transformNode(node)));\n    }\n    transformSelectQuery(node) {\n        return requireAllProps({\n            kind: 'SelectQueryNode',\n            from: this.transformNode(node.from),\n            selections: this.transformNodeList(node.selections),\n            distinctOn: this.transformNodeList(node.distinctOn),\n            joins: this.transformNodeList(node.joins),\n            groupBy: this.transformNode(node.groupBy),\n            orderBy: this.transformNode(node.orderBy),\n            where: this.transformNode(node.where),\n            frontModifiers: this.transformNodeList(node.frontModifiers),\n            endModifiers: this.transformNodeList(node.endModifiers),\n            limit: this.transformNode(node.limit),\n            offset: this.transformNode(node.offset),\n            with: this.transformNode(node.with),\n            having: this.transformNode(node.having),\n            explain: this.transformNode(node.explain),\n            setOperations: this.transformNodeList(node.setOperations),\n            fetch: this.transformNode(node.fetch),\n            top: this.transformNode(node.top),\n        });\n    }\n    transformSelection(node) {\n        return requireAllProps({\n            kind: 'SelectionNode',\n            selection: this.transformNode(node.selection),\n        });\n    }\n    transformColumn(node) {\n        return requireAllProps({\n            kind: 'ColumnNode',\n            column: this.transformNode(node.column),\n        });\n    }\n    transformAlias(node) {\n        return requireAllProps({\n            kind: 'AliasNode',\n            node: this.transformNode(node.node),\n            alias: this.transformNode(node.alias),\n        });\n    }\n    transformTable(node) {\n        return requireAllProps({\n            kind: 'TableNode',\n            table: this.transformNode(node.table),\n        });\n    }\n    transformFrom(node) {\n        return requireAllProps({\n            kind: 'FromNode',\n            froms: this.transformNodeList(node.froms),\n        });\n    }\n    transformReference(node) {\n        return requireAllProps({\n            kind: 'ReferenceNode',\n            column: this.transformNode(node.column),\n            table: this.transformNode(node.table),\n        });\n    }\n    transformAnd(node) {\n        return requireAllProps({\n            kind: 'AndNode',\n            left: this.transformNode(node.left),\n            right: this.transformNode(node.right),\n        });\n    }\n    transformOr(node) {\n        return requireAllProps({\n            kind: 'OrNode',\n            left: this.transformNode(node.left),\n            right: this.transformNode(node.right),\n        });\n    }\n    transformValueList(node) {\n        return requireAllProps({\n            kind: 'ValueListNode',\n            values: this.transformNodeList(node.values),\n        });\n    }\n    transformParens(node) {\n        return requireAllProps({\n            kind: 'ParensNode',\n            node: this.transformNode(node.node),\n        });\n    }\n    transformJoin(node) {\n        return requireAllProps({\n            kind: 'JoinNode',\n            joinType: node.joinType,\n            table: this.transformNode(node.table),\n            on: this.transformNode(node.on),\n        });\n    }\n    transformRaw(node) {\n        return requireAllProps({\n            kind: 'RawNode',\n            sqlFragments: freeze([...node.sqlFragments]),\n            parameters: this.transformNodeList(node.parameters),\n        });\n    }\n    transformWhere(node) {\n        return requireAllProps({\n            kind: 'WhereNode',\n            where: this.transformNode(node.where),\n        });\n    }\n    transformInsertQuery(node) {\n        return requireAllProps({\n            kind: 'InsertQueryNode',\n            into: this.transformNode(node.into),\n            columns: this.transformNodeList(node.columns),\n            values: this.transformNode(node.values),\n            returning: this.transformNode(node.returning),\n            onConflict: this.transformNode(node.onConflict),\n            onDuplicateKey: this.transformNode(node.onDuplicateKey),\n            with: this.transformNode(node.with),\n            ignore: node.ignore,\n            replace: node.replace,\n            explain: this.transformNode(node.explain),\n            defaultValues: node.defaultValues,\n            top: this.transformNode(node.top),\n            output: this.transformNode(node.output),\n        });\n    }\n    transformValues(node) {\n        return requireAllProps({\n            kind: 'ValuesNode',\n            values: this.transformNodeList(node.values),\n        });\n    }\n    transformDeleteQuery(node) {\n        return requireAllProps({\n            kind: 'DeleteQueryNode',\n            from: this.transformNode(node.from),\n            using: this.transformNode(node.using),\n            joins: this.transformNodeList(node.joins),\n            where: this.transformNode(node.where),\n            returning: this.transformNode(node.returning),\n            with: this.transformNode(node.with),\n            orderBy: this.transformNode(node.orderBy),\n            limit: this.transformNode(node.limit),\n            explain: this.transformNode(node.explain),\n            top: this.transformNode(node.top),\n            output: this.transformNode(node.output),\n        });\n    }\n    transformReturning(node) {\n        return requireAllProps({\n            kind: 'ReturningNode',\n            selections: this.transformNodeList(node.selections),\n        });\n    }\n    transformCreateTable(node) {\n        return requireAllProps({\n            kind: 'CreateTableNode',\n            table: this.transformNode(node.table),\n            columns: this.transformNodeList(node.columns),\n            constraints: this.transformNodeList(node.constraints),\n            temporary: node.temporary,\n            ifNotExists: node.ifNotExists,\n            onCommit: node.onCommit,\n            frontModifiers: this.transformNodeList(node.frontModifiers),\n            endModifiers: this.transformNodeList(node.endModifiers),\n            selectQuery: this.transformNode(node.selectQuery),\n        });\n    }\n    transformColumnDefinition(node) {\n        return requireAllProps({\n            kind: 'ColumnDefinitionNode',\n            column: this.transformNode(node.column),\n            dataType: this.transformNode(node.dataType),\n            references: this.transformNode(node.references),\n            primaryKey: node.primaryKey,\n            autoIncrement: node.autoIncrement,\n            unique: node.unique,\n            notNull: node.notNull,\n            unsigned: node.unsigned,\n            defaultTo: this.transformNode(node.defaultTo),\n            check: this.transformNode(node.check),\n            generated: this.transformNode(node.generated),\n            frontModifiers: this.transformNodeList(node.frontModifiers),\n            endModifiers: this.transformNodeList(node.endModifiers),\n            nullsNotDistinct: node.nullsNotDistinct,\n            identity: node.identity,\n            ifNotExists: node.ifNotExists,\n        });\n    }\n    transformAddColumn(node) {\n        return requireAllProps({\n            kind: 'AddColumnNode',\n            column: this.transformNode(node.column),\n        });\n    }\n    transformDropTable(node) {\n        return requireAllProps({\n            kind: 'DropTableNode',\n            table: this.transformNode(node.table),\n            ifExists: node.ifExists,\n            cascade: node.cascade,\n        });\n    }\n    transformOrderBy(node) {\n        return requireAllProps({\n            kind: 'OrderByNode',\n            items: this.transformNodeList(node.items),\n        });\n    }\n    transformOrderByItem(node) {\n        return requireAllProps({\n            kind: 'OrderByItemNode',\n            orderBy: this.transformNode(node.orderBy),\n            direction: this.transformNode(node.direction),\n        });\n    }\n    transformGroupBy(node) {\n        return requireAllProps({\n            kind: 'GroupByNode',\n            items: this.transformNodeList(node.items),\n        });\n    }\n    transformGroupByItem(node) {\n        return requireAllProps({\n            kind: 'GroupByItemNode',\n            groupBy: this.transformNode(node.groupBy),\n        });\n    }\n    transformUpdateQuery(node) {\n        return requireAllProps({\n            kind: 'UpdateQueryNode',\n            table: this.transformNode(node.table),\n            from: this.transformNode(node.from),\n            joins: this.transformNodeList(node.joins),\n            where: this.transformNode(node.where),\n            updates: this.transformNodeList(node.updates),\n            returning: this.transformNode(node.returning),\n            with: this.transformNode(node.with),\n            explain: this.transformNode(node.explain),\n            limit: this.transformNode(node.limit),\n            top: this.transformNode(node.top),\n            output: this.transformNode(node.output),\n        });\n    }\n    transformColumnUpdate(node) {\n        return requireAllProps({\n            kind: 'ColumnUpdateNode',\n            column: this.transformNode(node.column),\n            value: this.transformNode(node.value),\n        });\n    }\n    transformLimit(node) {\n        return requireAllProps({\n            kind: 'LimitNode',\n            limit: this.transformNode(node.limit),\n        });\n    }\n    transformOffset(node) {\n        return requireAllProps({\n            kind: 'OffsetNode',\n            offset: this.transformNode(node.offset),\n        });\n    }\n    transformOnConflict(node) {\n        return requireAllProps({\n            kind: 'OnConflictNode',\n            columns: this.transformNodeList(node.columns),\n            constraint: this.transformNode(node.constraint),\n            indexExpression: this.transformNode(node.indexExpression),\n            indexWhere: this.transformNode(node.indexWhere),\n            updates: this.transformNodeList(node.updates),\n            updateWhere: this.transformNode(node.updateWhere),\n            doNothing: node.doNothing,\n        });\n    }\n    transformOnDuplicateKey(node) {\n        return requireAllProps({\n            kind: 'OnDuplicateKeyNode',\n            updates: this.transformNodeList(node.updates),\n        });\n    }\n    transformCreateIndex(node) {\n        return requireAllProps({\n            kind: 'CreateIndexNode',\n            name: this.transformNode(node.name),\n            table: this.transformNode(node.table),\n            columns: this.transformNodeList(node.columns),\n            unique: node.unique,\n            using: this.transformNode(node.using),\n            ifNotExists: node.ifNotExists,\n            where: this.transformNode(node.where),\n            nullsNotDistinct: node.nullsNotDistinct,\n        });\n    }\n    transformList(node) {\n        return requireAllProps({\n            kind: 'ListNode',\n            items: this.transformNodeList(node.items),\n        });\n    }\n    transformDropIndex(node) {\n        return requireAllProps({\n            kind: 'DropIndexNode',\n            name: this.transformNode(node.name),\n            table: this.transformNode(node.table),\n            ifExists: node.ifExists,\n            cascade: node.cascade,\n        });\n    }\n    transformPrimaryKeyConstraint(node) {\n        return requireAllProps({\n            kind: 'PrimaryKeyConstraintNode',\n            columns: this.transformNodeList(node.columns),\n            name: this.transformNode(node.name),\n        });\n    }\n    transformUniqueConstraint(node) {\n        return requireAllProps({\n            kind: 'UniqueConstraintNode',\n            columns: this.transformNodeList(node.columns),\n            name: this.transformNode(node.name),\n            nullsNotDistinct: node.nullsNotDistinct,\n        });\n    }\n    transformForeignKeyConstraint(node) {\n        return requireAllProps({\n            kind: 'ForeignKeyConstraintNode',\n            columns: this.transformNodeList(node.columns),\n            references: this.transformNode(node.references),\n            name: this.transformNode(node.name),\n            onDelete: node.onDelete,\n            onUpdate: node.onUpdate,\n        });\n    }\n    transformSetOperation(node) {\n        return requireAllProps({\n            kind: 'SetOperationNode',\n            operator: node.operator,\n            expression: this.transformNode(node.expression),\n            all: node.all,\n        });\n    }\n    transformReferences(node) {\n        return requireAllProps({\n            kind: 'ReferencesNode',\n            table: this.transformNode(node.table),\n            columns: this.transformNodeList(node.columns),\n            onDelete: node.onDelete,\n            onUpdate: node.onUpdate,\n        });\n    }\n    transformCheckConstraint(node) {\n        return requireAllProps({\n            kind: 'CheckConstraintNode',\n            expression: this.transformNode(node.expression),\n            name: this.transformNode(node.name),\n        });\n    }\n    transformWith(node) {\n        return requireAllProps({\n            kind: 'WithNode',\n            expressions: this.transformNodeList(node.expressions),\n            recursive: node.recursive,\n        });\n    }\n    transformCommonTableExpression(node) {\n        return requireAllProps({\n            kind: 'CommonTableExpressionNode',\n            name: this.transformNode(node.name),\n            materialized: node.materialized,\n            expression: this.transformNode(node.expression),\n        });\n    }\n    transformCommonTableExpressionName(node) {\n        return requireAllProps({\n            kind: 'CommonTableExpressionNameNode',\n            table: this.transformNode(node.table),\n            columns: this.transformNodeList(node.columns),\n        });\n    }\n    transformHaving(node) {\n        return requireAllProps({\n            kind: 'HavingNode',\n            having: this.transformNode(node.having),\n        });\n    }\n    transformCreateSchema(node) {\n        return requireAllProps({\n            kind: 'CreateSchemaNode',\n            schema: this.transformNode(node.schema),\n            ifNotExists: node.ifNotExists,\n        });\n    }\n    transformDropSchema(node) {\n        return requireAllProps({\n            kind: 'DropSchemaNode',\n            schema: this.transformNode(node.schema),\n            ifExists: node.ifExists,\n            cascade: node.cascade,\n        });\n    }\n    transformAlterTable(node) {\n        return requireAllProps({\n            kind: 'AlterTableNode',\n            table: this.transformNode(node.table),\n            renameTo: this.transformNode(node.renameTo),\n            setSchema: this.transformNode(node.setSchema),\n            columnAlterations: this.transformNodeList(node.columnAlterations),\n            addConstraint: this.transformNode(node.addConstraint),\n            dropConstraint: this.transformNode(node.dropConstraint),\n            addIndex: this.transformNode(node.addIndex),\n            dropIndex: this.transformNode(node.dropIndex),\n        });\n    }\n    transformDropColumn(node) {\n        return requireAllProps({\n            kind: 'DropColumnNode',\n            column: this.transformNode(node.column),\n        });\n    }\n    transformRenameColumn(node) {\n        return requireAllProps({\n            kind: 'RenameColumnNode',\n            column: this.transformNode(node.column),\n            renameTo: this.transformNode(node.renameTo),\n        });\n    }\n    transformAlterColumn(node) {\n        return requireAllProps({\n            kind: 'AlterColumnNode',\n            column: this.transformNode(node.column),\n            dataType: this.transformNode(node.dataType),\n            dataTypeExpression: this.transformNode(node.dataTypeExpression),\n            setDefault: this.transformNode(node.setDefault),\n            dropDefault: node.dropDefault,\n            setNotNull: node.setNotNull,\n            dropNotNull: node.dropNotNull,\n        });\n    }\n    transformModifyColumn(node) {\n        return requireAllProps({\n            kind: 'ModifyColumnNode',\n            column: this.transformNode(node.column),\n        });\n    }\n    transformAddConstraint(node) {\n        return requireAllProps({\n            kind: 'AddConstraintNode',\n            constraint: this.transformNode(node.constraint),\n        });\n    }\n    transformDropConstraint(node) {\n        return requireAllProps({\n            kind: 'DropConstraintNode',\n            constraintName: this.transformNode(node.constraintName),\n            ifExists: node.ifExists,\n            modifier: node.modifier,\n        });\n    }\n    transformCreateView(node) {\n        return requireAllProps({\n            kind: 'CreateViewNode',\n            name: this.transformNode(node.name),\n            temporary: node.temporary,\n            orReplace: node.orReplace,\n            ifNotExists: node.ifNotExists,\n            materialized: node.materialized,\n            columns: this.transformNodeList(node.columns),\n            as: this.transformNode(node.as),\n        });\n    }\n    transformDropView(node) {\n        return requireAllProps({\n            kind: 'DropViewNode',\n            name: this.transformNode(node.name),\n            ifExists: node.ifExists,\n            materialized: node.materialized,\n            cascade: node.cascade,\n        });\n    }\n    transformGenerated(node) {\n        return requireAllProps({\n            kind: 'GeneratedNode',\n            byDefault: node.byDefault,\n            always: node.always,\n            identity: node.identity,\n            stored: node.stored,\n            expression: this.transformNode(node.expression),\n        });\n    }\n    transformDefaultValue(node) {\n        return requireAllProps({\n            kind: 'DefaultValueNode',\n            defaultValue: this.transformNode(node.defaultValue),\n        });\n    }\n    transformOn(node) {\n        return requireAllProps({\n            kind: 'OnNode',\n            on: this.transformNode(node.on),\n        });\n    }\n    transformSelectModifier(node) {\n        return requireAllProps({\n            kind: 'SelectModifierNode',\n            modifier: node.modifier,\n            rawModifier: this.transformNode(node.rawModifier),\n            of: this.transformNodeList(node.of),\n        });\n    }\n    transformCreateType(node) {\n        return requireAllProps({\n            kind: 'CreateTypeNode',\n            name: this.transformNode(node.name),\n            enum: this.transformNode(node.enum),\n        });\n    }\n    transformDropType(node) {\n        return requireAllProps({\n            kind: 'DropTypeNode',\n            name: this.transformNode(node.name),\n            ifExists: node.ifExists,\n        });\n    }\n    transformExplain(node) {\n        return requireAllProps({\n            kind: 'ExplainNode',\n            format: node.format,\n            options: this.transformNode(node.options),\n        });\n    }\n    transformSchemableIdentifier(node) {\n        return requireAllProps({\n            kind: 'SchemableIdentifierNode',\n            schema: this.transformNode(node.schema),\n            identifier: this.transformNode(node.identifier),\n        });\n    }\n    transformAggregateFunction(node) {\n        return requireAllProps({\n            kind: 'AggregateFunctionNode',\n            aggregated: this.transformNodeList(node.aggregated),\n            distinct: node.distinct,\n            filter: this.transformNode(node.filter),\n            func: node.func,\n            over: this.transformNode(node.over),\n        });\n    }\n    transformOver(node) {\n        return requireAllProps({\n            kind: 'OverNode',\n            orderBy: this.transformNode(node.orderBy),\n            partitionBy: this.transformNode(node.partitionBy),\n        });\n    }\n    transformPartitionBy(node) {\n        return requireAllProps({\n            kind: 'PartitionByNode',\n            items: this.transformNodeList(node.items),\n        });\n    }\n    transformPartitionByItem(node) {\n        return requireAllProps({\n            kind: 'PartitionByItemNode',\n            partitionBy: this.transformNode(node.partitionBy),\n        });\n    }\n    transformBinaryOperation(node) {\n        return requireAllProps({\n            kind: 'BinaryOperationNode',\n            leftOperand: this.transformNode(node.leftOperand),\n            operator: this.transformNode(node.operator),\n            rightOperand: this.transformNode(node.rightOperand),\n        });\n    }\n    transformUnaryOperation(node) {\n        return requireAllProps({\n            kind: 'UnaryOperationNode',\n            operator: this.transformNode(node.operator),\n            operand: this.transformNode(node.operand),\n        });\n    }\n    transformUsing(node) {\n        return requireAllProps({\n            kind: 'UsingNode',\n            tables: this.transformNodeList(node.tables),\n        });\n    }\n    transformFunction(node) {\n        return requireAllProps({\n            kind: 'FunctionNode',\n            func: node.func,\n            arguments: this.transformNodeList(node.arguments),\n        });\n    }\n    transformCase(node) {\n        return requireAllProps({\n            kind: 'CaseNode',\n            value: this.transformNode(node.value),\n            when: this.transformNodeList(node.when),\n            else: this.transformNode(node.else),\n            isStatement: node.isStatement,\n        });\n    }\n    transformWhen(node) {\n        return requireAllProps({\n            kind: 'WhenNode',\n            condition: this.transformNode(node.condition),\n            result: this.transformNode(node.result),\n        });\n    }\n    transformJSONReference(node) {\n        return requireAllProps({\n            kind: 'JSONReferenceNode',\n            reference: this.transformNode(node.reference),\n            traversal: this.transformNode(node.traversal),\n        });\n    }\n    transformJSONPath(node) {\n        return requireAllProps({\n            kind: 'JSONPathNode',\n            inOperator: this.transformNode(node.inOperator),\n            pathLegs: this.transformNodeList(node.pathLegs),\n        });\n    }\n    transformJSONPathLeg(node) {\n        return requireAllProps({\n            kind: 'JSONPathLegNode',\n            type: node.type,\n            value: node.value,\n        });\n    }\n    transformJSONOperatorChain(node) {\n        return requireAllProps({\n            kind: 'JSONOperatorChainNode',\n            operator: this.transformNode(node.operator),\n            values: this.transformNodeList(node.values),\n        });\n    }\n    transformTuple(node) {\n        return requireAllProps({\n            kind: 'TupleNode',\n            values: this.transformNodeList(node.values),\n        });\n    }\n    transformMergeQuery(node) {\n        return requireAllProps({\n            kind: 'MergeQueryNode',\n            into: this.transformNode(node.into),\n            using: this.transformNode(node.using),\n            whens: this.transformNodeList(node.whens),\n            with: this.transformNode(node.with),\n            top: this.transformNode(node.top),\n            output: this.transformNode(node.output),\n        });\n    }\n    transformMatched(node) {\n        return requireAllProps({\n            kind: 'MatchedNode',\n            not: node.not,\n            bySource: node.bySource,\n        });\n    }\n    transformAddIndex(node) {\n        return requireAllProps({\n            kind: 'AddIndexNode',\n            name: this.transformNode(node.name),\n            columns: this.transformNodeList(node.columns),\n            unique: node.unique,\n            using: this.transformNode(node.using),\n            ifNotExists: node.ifNotExists,\n        });\n    }\n    transformCast(node) {\n        return requireAllProps({\n            kind: 'CastNode',\n            expression: this.transformNode(node.expression),\n            dataType: this.transformNode(node.dataType),\n        });\n    }\n    transformFetch(node) {\n        return requireAllProps({\n            kind: 'FetchNode',\n            rowCount: this.transformNode(node.rowCount),\n            modifier: node.modifier,\n        });\n    }\n    transformTop(node) {\n        return requireAllProps({\n            kind: 'TopNode',\n            expression: node.expression,\n            modifiers: node.modifiers,\n        });\n    }\n    transformOutput(node) {\n        return requireAllProps({\n            kind: 'OutputNode',\n            selections: this.transformNodeList(node.selections),\n        });\n    }\n    transformDataType(node) {\n        // An Object.freezed leaf node. No need to clone.\n        return node;\n    }\n    transformSelectAll(node) {\n        // An Object.freezed leaf node. No need to clone.\n        return node;\n    }\n    transformIdentifier(node) {\n        // An Object.freezed leaf node. No need to clone.\n        return node;\n    }\n    transformValue(node) {\n        // An Object.freezed leaf node. No need to clone.\n        return node;\n    }\n    transformPrimitiveValueList(node) {\n        // An Object.freezed leaf node. No need to clone.\n        return node;\n    }\n    transformOperator(node) {\n        // An Object.freezed leaf node. No need to clone.\n        return node;\n    }\n    transformDefaultInsertValue(node) {\n        // An Object.freezed leaf node. No need to clone.\n        return node;\n    }\n}\n","/// <reference types=\"./with-schema-transformer.d.ts\" />\nimport { AliasNode } from '../../operation-node/alias-node.js';\nimport { IdentifierNode } from '../../operation-node/identifier-node.js';\nimport { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';\nimport { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';\nimport { TableNode } from '../../operation-node/table-node.js';\nimport { freeze } from '../../util/object-utils.js';\n// This object exist only so that we get a type error when a new RootOperationNode\n// is added. If you get a type error here, make sure to add the new root node and\n// handle it correctly in the transformer.\n//\n// DO NOT REFACTOR THIS EVEN IF IT SEEMS USELESS TO YOU!\nconst ROOT_OPERATION_NODES = freeze({\n    AlterTableNode: true,\n    CreateIndexNode: true,\n    CreateSchemaNode: true,\n    CreateTableNode: true,\n    CreateTypeNode: true,\n    CreateViewNode: true,\n    DeleteQueryNode: true,\n    DropIndexNode: true,\n    DropSchemaNode: true,\n    DropTableNode: true,\n    DropTypeNode: true,\n    DropViewNode: true,\n    InsertQueryNode: true,\n    RawNode: true,\n    SelectQueryNode: true,\n    UpdateQueryNode: true,\n    MergeQueryNode: true,\n});\nexport class WithSchemaTransformer extends OperationNodeTransformer {\n    #schema;\n    #schemableIds = new Set();\n    #ctes = new Set();\n    constructor(schema) {\n        super();\n        this.#schema = schema;\n    }\n    transformNodeImpl(node) {\n        if (!this.#isRootOperationNode(node)) {\n            return super.transformNodeImpl(node);\n        }\n        const ctes = this.#collectCTEs(node);\n        for (const cte of ctes) {\n            this.#ctes.add(cte);\n        }\n        const tables = this.#collectSchemableIds(node);\n        for (const table of tables) {\n            this.#schemableIds.add(table);\n        }\n        const transformed = super.transformNodeImpl(node);\n        for (const table of tables) {\n            this.#schemableIds.delete(table);\n        }\n        for (const cte of ctes) {\n            this.#ctes.delete(cte);\n        }\n        return transformed;\n    }\n    transformSchemableIdentifier(node) {\n        const transformed = super.transformSchemableIdentifier(node);\n        if (transformed.schema || !this.#schemableIds.has(node.identifier.name)) {\n            return transformed;\n        }\n        return {\n            ...transformed,\n            schema: IdentifierNode.create(this.#schema),\n        };\n    }\n    transformReferences(node) {\n        const transformed = super.transformReferences(node);\n        if (transformed.table.table.schema) {\n            return transformed;\n        }\n        return {\n            ...transformed,\n            table: TableNode.createWithSchema(this.#schema, transformed.table.table.identifier.name),\n        };\n    }\n    #isRootOperationNode(node) {\n        return node.kind in ROOT_OPERATION_NODES;\n    }\n    #collectSchemableIds(node) {\n        const schemableIds = new Set();\n        if ('name' in node && node.name && SchemableIdentifierNode.is(node.name)) {\n            this.#collectSchemableId(node.name, schemableIds);\n        }\n        if ('from' in node && node.from) {\n            for (const from of node.from.froms) {\n                this.#collectSchemableIdsFromTableExpr(from, schemableIds);\n            }\n        }\n        if ('into' in node && node.into) {\n            this.#collectSchemableIdsFromTableExpr(node.into, schemableIds);\n        }\n        if ('table' in node && node.table) {\n            this.#collectSchemableIdsFromTableExpr(node.table, schemableIds);\n        }\n        if ('joins' in node && node.joins) {\n            for (const join of node.joins) {\n                this.#collectSchemableIdsFromTableExpr(join.table, schemableIds);\n            }\n        }\n        if ('using' in node && node.using) {\n            this.#collectSchemableIdsFromTableExpr(node.using, schemableIds);\n        }\n        return schemableIds;\n    }\n    #collectCTEs(node) {\n        const ctes = new Set();\n        if ('with' in node && node.with) {\n            this.#collectCTEIds(node.with, ctes);\n        }\n        return ctes;\n    }\n    #collectSchemableIdsFromTableExpr(node, schemableIds) {\n        const table = TableNode.is(node)\n            ? node\n            : AliasNode.is(node) && TableNode.is(node.node)\n                ? node.node\n                : null;\n        if (table) {\n            this.#collectSchemableId(table.table, schemableIds);\n        }\n    }\n    #collectSchemableId(node, schemableIds) {\n        const id = node.identifier.name;\n        if (!this.#schemableIds.has(id) && !this.#ctes.has(id)) {\n            schemableIds.add(id);\n        }\n    }\n    #collectCTEIds(node, ctes) {\n        for (const expr of node.expressions) {\n            const cteId = expr.name.table.table.identifier.name;\n            if (!this.#ctes.has(cteId)) {\n                ctes.add(cteId);\n            }\n        }\n    }\n}\n","/// <reference types=\"./with-schema-plugin.d.ts\" />\nimport { WithSchemaTransformer } from './with-schema-transformer.js';\nexport class WithSchemaPlugin {\n    #transformer;\n    constructor(schema) {\n        this.#transformer = new WithSchemaTransformer(schema);\n    }\n    transformQuery(args) {\n        return this.#transformer.transformNode(args.node);\n    }\n    async transformResult(args) {\n        return args.result;\n    }\n}\n","/// <reference types=\"./deferred.d.ts\" />\nexport class Deferred {\n    #promise;\n    #resolve;\n    #reject;\n    constructor() {\n        this.#promise = new Promise((resolve, reject) => {\n            this.#reject = reject;\n            this.#resolve = resolve;\n        });\n    }\n    get promise() {\n        return this.#promise;\n    }\n    resolve = (value) => {\n        if (this.#resolve) {\n            this.#resolve(value);\n        }\n    };\n    reject = (reason) => {\n        if (this.#reject) {\n            this.#reject(reason);\n        }\n    };\n}\n","/// <reference types=\"./log-once.d.ts\" />\nconst LOGGED_MESSAGES = new Set();\n/**\n * Use for system-level logging, such as deprecation messages.\n * Logs a message and ensures it won't be logged again.\n */\nexport function logOnce(message) {\n    if (LOGGED_MESSAGES.has(message)) {\n        return;\n    }\n    LOGGED_MESSAGES.add(message);\n    console.log(message);\n}\n","/// <reference types=\"./query-executor-base.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { Deferred } from '../util/deferred.js';\nimport { logOnce } from '../util/log-once.js';\nconst NO_PLUGINS = freeze([]);\nexport class QueryExecutorBase {\n    #plugins;\n    constructor(plugins = NO_PLUGINS) {\n        this.#plugins = plugins;\n    }\n    get plugins() {\n        return this.#plugins;\n    }\n    transformQuery(node, queryId) {\n        for (const plugin of this.#plugins) {\n            const transformedNode = plugin.transformQuery({ node, queryId });\n            // We need to do a runtime check here. There is no good way\n            // to write types that enforce this constraint.\n            if (transformedNode.kind === node.kind) {\n                node = transformedNode;\n            }\n            else {\n                throw new Error([\n                    `KyselyPlugin.transformQuery must return a node`,\n                    `of the same kind that was given to it.`,\n                    `The plugin was given a ${node.kind}`,\n                    `but it returned a ${transformedNode.kind}`,\n                ].join(' '));\n            }\n        }\n        return node;\n    }\n    async executeQuery(compiledQuery, queryId) {\n        return await this.provideConnection(async (connection) => {\n            const result = await connection.executeQuery(compiledQuery);\n            const transformedResult = await this.#transformResult(result, queryId);\n            // TODO: remove.\n            warnOfOutdatedDriverOrPlugins(result, transformedResult);\n            return transformedResult;\n        });\n    }\n    async *stream(compiledQuery, chunkSize, queryId) {\n        const connectionDefer = new Deferred();\n        const connectionReleaseDefer = new Deferred();\n        this.provideConnection(async (connection) => {\n            connectionDefer.resolve(connection);\n            // Lets wait until we don't need connection before returning here (returning releases connection)\n            return await connectionReleaseDefer.promise;\n        }).catch((ex) => connectionDefer.reject(ex));\n        const connection = await connectionDefer.promise;\n        try {\n            for await (const result of connection.streamQuery(compiledQuery, chunkSize)) {\n                yield await this.#transformResult(result, queryId);\n            }\n        }\n        finally {\n            connectionReleaseDefer.resolve();\n        }\n    }\n    async #transformResult(result, queryId) {\n        for (const plugin of this.#plugins) {\n            result = await plugin.transformResult({ result, queryId });\n        }\n        return result;\n    }\n}\n// TODO: remove.\nfunction warnOfOutdatedDriverOrPlugins(result, transformedResult) {\n    const { numAffectedRows } = result;\n    if ((numAffectedRows === undefined &&\n        result.numUpdatedOrDeletedRows === undefined) ||\n        (numAffectedRows !== undefined &&\n            transformedResult.numAffectedRows !== undefined)) {\n        return;\n    }\n    logOnce('kysely:warning: outdated driver/plugin detected! QueryResult.numUpdatedOrDeletedRows is deprecated and will be removed in a future release.');\n}\n","/// <reference types=\"./noop-query-executor.d.ts\" />\nimport { QueryExecutorBase } from './query-executor-base.js';\n/**\n * A {@link QueryExecutor} subclass that can be used when you don't\n * have a {@link QueryCompiler}, {@link ConnectionProvider} or any\n * other needed things to actually execute queries.\n */\nexport class NoopQueryExecutor extends QueryExecutorBase {\n    get adapter() {\n        throw new Error('this query cannot be compiled to SQL');\n    }\n    compileQuery() {\n        throw new Error('this query cannot be compiled to SQL');\n    }\n    provideConnection() {\n        throw new Error('this query cannot be executed');\n    }\n    withConnectionProvider() {\n        throw new Error('this query cannot have a connection provider');\n    }\n    withPlugin(plugin) {\n        return new NoopQueryExecutor([...this.plugins, plugin]);\n    }\n    withPlugins(plugins) {\n        return new NoopQueryExecutor([...this.plugins, ...plugins]);\n    }\n    withPluginAtFront(plugin) {\n        return new NoopQueryExecutor([plugin, ...this.plugins]);\n    }\n    withoutPlugins() {\n        return new NoopQueryExecutor([]);\n    }\n}\nexport const NOOP_QUERY_EXECUTOR = new NoopQueryExecutor();\n","/// <reference types=\"./parse-utils.d.ts\" />\nimport { JoinNode } from '../operation-node/join-node.js';\nimport { OverNode } from '../operation-node/over-node.js';\nimport { SelectQueryNode } from '../operation-node/select-query-node.js';\nimport { JoinBuilder } from '../query-builder/join-builder.js';\nimport { OverBuilder } from '../query-builder/over-builder.js';\nimport { createSelectQueryBuilder as newSelectQueryBuilder, } from '../query-builder/select-query-builder.js';\nimport { QueryCreator } from '../query-creator.js';\nimport { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';\nimport { createQueryId } from '../util/query-id.js';\nimport { parseTableExpression, parseTableExpressionOrList, } from './table-parser.js';\nexport function createSelectQueryBuilder() {\n    return newSelectQueryBuilder({\n        queryId: createQueryId(),\n        executor: NOOP_QUERY_EXECUTOR,\n        queryNode: SelectQueryNode.createFrom(parseTableExpressionOrList([])),\n    });\n}\nexport function createQueryCreator() {\n    return new QueryCreator({\n        executor: NOOP_QUERY_EXECUTOR,\n    });\n}\nexport function createJoinBuilder(joinType, table) {\n    return new JoinBuilder({\n        joinNode: JoinNode.create(joinType, parseTableExpression(table)),\n    });\n}\nexport function createOverBuilder() {\n    return new OverBuilder({\n        overNode: OverNode.create(),\n    });\n}\n","/// <reference types=\"./join-parser.d.ts\" />\nimport { JoinNode } from '../operation-node/join-node.js';\nimport { parseTableExpression, } from './table-parser.js';\nimport { parseReferentialBinaryOperation } from './binary-operation-parser.js';\nimport { createJoinBuilder } from './parse-utils.js';\nexport function parseJoin(joinType, args) {\n    if (args.length === 3) {\n        return parseSingleOnJoin(joinType, args[0], args[1], args[2]);\n    }\n    else if (args.length === 2) {\n        return parseCallbackJoin(joinType, args[0], args[1]);\n    }\n    else {\n        throw new Error('not implemented');\n    }\n}\nfunction parseCallbackJoin(joinType, from, callback) {\n    return callback(createJoinBuilder(joinType, from)).toOperationNode();\n}\nfunction parseSingleOnJoin(joinType, from, lhsColumn, rhsColumn) {\n    return JoinNode.createWithOn(joinType, parseTableExpression(from), parseReferentialBinaryOperation(lhsColumn, '=', rhsColumn));\n}\n","/// <reference types=\"./offset-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const OffsetNode = freeze({\n    is(node) {\n        return node.kind === 'OffsetNode';\n    },\n    create(offset) {\n        return freeze({\n            kind: 'OffsetNode',\n            offset,\n        });\n    },\n});\n","/// <reference types=\"./group-by-item-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const GroupByItemNode = freeze({\n    is(node) {\n        return node.kind === 'GroupByItemNode';\n    },\n    create(groupBy) {\n        return freeze({\n            kind: 'GroupByItemNode',\n            groupBy,\n        });\n    },\n});\n","/// <reference types=\"./group-by-parser.d.ts\" />\nimport { GroupByItemNode } from '../operation-node/group-by-item-node.js';\nimport { expressionBuilder, } from '../expression/expression-builder.js';\nimport { isFunction } from '../util/object-utils.js';\nimport { parseReferenceExpressionOrList, } from './reference-parser.js';\nexport function parseGroupBy(groupBy) {\n    groupBy = isFunction(groupBy) ? groupBy(expressionBuilder()) : groupBy;\n    return parseReferenceExpressionOrList(groupBy).map(GroupByItemNode.create);\n}\n","/// <reference types=\"./set-operation-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const SetOperationNode = freeze({\n    is(node) {\n        return node.kind === 'SetOperationNode';\n    },\n    create(operator, expression, all) {\n        return freeze({\n            kind: 'SetOperationNode',\n            operator,\n            expression,\n            all,\n        });\n    },\n});\n","/// <reference types=\"./set-operation-parser.d.ts\" />\nimport { createExpressionBuilder, } from '../expression/expression-builder.js';\nimport { SetOperationNode, } from '../operation-node/set-operation-node.js';\nimport { isFunction, isReadonlyArray } from '../util/object-utils.js';\nimport { parseExpression } from './expression-parser.js';\nexport function parseSetOperations(operator, expression, all) {\n    if (isFunction(expression)) {\n        expression = expression(createExpressionBuilder());\n    }\n    if (!isReadonlyArray(expression)) {\n        expression = [expression];\n    }\n    return expression.map((expr) => SetOperationNode.create(operator, parseExpression(expr), all));\n}\n","/// <reference types=\"./expression-wrapper.d.ts\" />\nimport { AliasNode } from '../operation-node/alias-node.js';\nimport { AndNode } from '../operation-node/and-node.js';\nimport { IdentifierNode } from '../operation-node/identifier-node.js';\nimport { isOperationNodeSource } from '../operation-node/operation-node-source.js';\nimport { OrNode } from '../operation-node/or-node.js';\nimport { ParensNode } from '../operation-node/parens-node.js';\nimport { parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';\nexport class ExpressionWrapper {\n    #node;\n    constructor(node) {\n        this.#node = node;\n    }\n    /** @private */\n    get expressionType() {\n        return undefined;\n    }\n    as(alias) {\n        return new AliasedExpressionWrapper(this, alias);\n    }\n    or(...args) {\n        return new OrWrapper(OrNode.create(this.#node, parseValueBinaryOperationOrExpression(args)));\n    }\n    and(...args) {\n        return new AndWrapper(AndNode.create(this.#node, parseValueBinaryOperationOrExpression(args)));\n    }\n    /**\n     * Change the output type of the expression.\n     *\n     * This method call doesn't change the SQL in any way. This methods simply\n     * returns a copy of this `ExpressionWrapper` with a new output type.\n     */\n    $castTo() {\n        return new ExpressionWrapper(this.#node);\n    }\n    /**\n     * Omit null from the expression's type.\n     *\n     * This function can be useful in cases where you know an expression can't be\n     * null, but Kysely is unable to infer it.\n     *\n     * This method call doesn't change the SQL in any way. This methods simply\n     * returns a copy of `this` with a new output type.\n     */\n    $notNull() {\n        return new ExpressionWrapper(this.#node);\n    }\n    toOperationNode() {\n        return this.#node;\n    }\n}\nexport class AliasedExpressionWrapper {\n    #expr;\n    #alias;\n    constructor(expr, alias) {\n        this.#expr = expr;\n        this.#alias = alias;\n    }\n    /** @private */\n    get expression() {\n        return this.#expr;\n    }\n    /** @private */\n    get alias() {\n        return this.#alias;\n    }\n    toOperationNode() {\n        return AliasNode.create(this.#expr.toOperationNode(), isOperationNodeSource(this.#alias)\n            ? this.#alias.toOperationNode()\n            : IdentifierNode.create(this.#alias));\n    }\n}\nexport class OrWrapper {\n    #node;\n    constructor(node) {\n        this.#node = node;\n    }\n    /** @private */\n    get expressionType() {\n        return undefined;\n    }\n    as(alias) {\n        return new AliasedExpressionWrapper(this, alias);\n    }\n    or(...args) {\n        return new OrWrapper(OrNode.create(this.#node, parseValueBinaryOperationOrExpression(args)));\n    }\n    /**\n     * Change the output type of the expression.\n     *\n     * This method call doesn't change the SQL in any way. This methods simply\n     * returns a copy of this `OrWrapper` with a new output type.\n     */\n    $castTo() {\n        return new OrWrapper(this.#node);\n    }\n    toOperationNode() {\n        return ParensNode.create(this.#node);\n    }\n}\nexport class AndWrapper {\n    #node;\n    constructor(node) {\n        this.#node = node;\n    }\n    /** @private */\n    get expressionType() {\n        return undefined;\n    }\n    as(alias) {\n        return new AliasedExpressionWrapper(this, alias);\n    }\n    and(...args) {\n        return new AndWrapper(AndNode.create(this.#node, parseValueBinaryOperationOrExpression(args)));\n    }\n    /**\n     * Change the output type of the expression.\n     *\n     * This method call doesn't change the SQL in any way. This methods simply\n     * returns a copy of this `AndWrapper` with a new output type.\n     */\n    $castTo() {\n        return new AndWrapper(this.#node);\n    }\n    toOperationNode() {\n        return ParensNode.create(this.#node);\n    }\n}\n","/// <reference types=\"./fetch-node.d.ts\" />\nimport { ValueNode } from './value-node.js';\n/**\n * @internal\n */\nexport const FetchNode = {\n    is(node) {\n        return node.kind === 'FetchNode';\n    },\n    create(rowCount, modifier) {\n        return {\n            kind: 'FetchNode',\n            rowCount: ValueNode.create(rowCount),\n            modifier,\n        };\n    },\n};\n","/// <reference types=\"./fetch-parser.d.ts\" />\nimport { FetchNode } from '../operation-node/fetch-node.js';\nimport { isBigInt, isNumber } from '../util/object-utils.js';\nexport function parseFetch(rowCount, modifier) {\n    if (!isNumber(rowCount) && !isBigInt(rowCount)) {\n        throw new Error(`Invalid fetch row count: ${rowCount}`);\n    }\n    if (!isFetchModifier(modifier)) {\n        throw new Error(`Invalid fetch modifier: ${modifier}`);\n    }\n    return FetchNode.create(rowCount, modifier);\n}\nfunction isFetchModifier(value) {\n    return value === 'only' || value === 'with ties';\n}\n","/// <reference types=\"./select-query-builder.d.ts\" />\nimport { AliasNode } from '../operation-node/alias-node.js';\nimport { SelectModifierNode } from '../operation-node/select-modifier-node.js';\nimport { parseJoin, } from '../parser/join-parser.js';\nimport { parseTable } from '../parser/table-parser.js';\nimport { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js';\nimport { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';\nimport { SelectQueryNode } from '../operation-node/select-query-node.js';\nimport { QueryNode } from '../operation-node/query-node.js';\nimport { parseOrderBy, } from '../parser/order-by-parser.js';\nimport { preventAwait } from '../util/prevent-await.js';\nimport { LimitNode } from '../operation-node/limit-node.js';\nimport { OffsetNode } from '../operation-node/offset-node.js';\nimport { asArray, freeze } from '../util/object-utils.js';\nimport { parseGroupBy } from '../parser/group-by-parser.js';\nimport { isNoResultErrorConstructor, NoResultError, } from './no-result-error.js';\nimport { IdentifierNode } from '../operation-node/identifier-node.js';\nimport { parseSetOperations, } from '../parser/set-operation-parser.js';\nimport { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';\nimport { ExpressionWrapper } from '../expression/expression-wrapper.js';\nimport { parseValueExpression, } from '../parser/value-parser.js';\nimport { parseFetch } from '../parser/fetch-parser.js';\nimport { parseTop } from '../parser/top-parser.js';\nclass SelectQueryBuilderImpl {\n    #props;\n    constructor(props) {\n        this.#props = freeze(props);\n    }\n    get expressionType() {\n        return undefined;\n    }\n    get isSelectQueryBuilder() {\n        return true;\n    }\n    where(...args) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseValueBinaryOperationOrExpression(args)),\n        });\n    }\n    whereRef(lhs, op, rhs) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferentialBinaryOperation(lhs, op, rhs)),\n        });\n    }\n    having(...args) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseValueBinaryOperationOrExpression(args)),\n        });\n    }\n    havingRef(lhs, op, rhs) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferentialBinaryOperation(lhs, op, rhs)),\n        });\n    }\n    select(selection) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectArg(selection)),\n        });\n    }\n    distinctOn(selection) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithDistinctOn(this.#props.queryNode, parseReferenceExpressionOrList(selection)),\n        });\n    }\n    modifyFront(modifier) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithFrontModifier(this.#props.queryNode, SelectModifierNode.createWithExpression(modifier.toOperationNode())),\n        });\n    }\n    modifyEnd(modifier) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.createWithExpression(modifier.toOperationNode())),\n        });\n    }\n    distinct() {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithFrontModifier(this.#props.queryNode, SelectModifierNode.create('Distinct')),\n        });\n    }\n    forUpdate(of) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForUpdate', of ? asArray(of).map(parseTable) : undefined)),\n        });\n    }\n    forShare(of) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForShare', of ? asArray(of).map(parseTable) : undefined)),\n        });\n    }\n    forKeyShare(of) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForKeyShare', of ? asArray(of).map(parseTable) : undefined)),\n        });\n    }\n    forNoKeyUpdate(of) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForNoKeyUpdate', of ? asArray(of).map(parseTable) : undefined)),\n        });\n    }\n    skipLocked() {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('SkipLocked')),\n        });\n    }\n    noWait() {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('NoWait')),\n        });\n    }\n    selectAll(table) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectAll(table)),\n        });\n    }\n    innerJoin(...args) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),\n        });\n    }\n    leftJoin(...args) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),\n        });\n    }\n    rightJoin(...args) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),\n        });\n    }\n    fullJoin(...args) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),\n        });\n    }\n    innerJoinLateral(...args) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LateralInnerJoin', args)),\n        });\n    }\n    leftJoinLateral(...args) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LateralLeftJoin', args)),\n        });\n    }\n    orderBy(...args) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithOrderByItems(this.#props.queryNode, parseOrderBy(args)),\n        });\n    }\n    groupBy(groupBy) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseGroupBy(groupBy)),\n        });\n    }\n    limit(limit) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(parseValueExpression(limit))),\n        });\n    }\n    offset(offset) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithOffset(this.#props.queryNode, OffsetNode.create(parseValueExpression(offset))),\n        });\n    }\n    fetch(rowCount, modifier = 'only') {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithFetch(this.#props.queryNode, parseFetch(rowCount, modifier)),\n        });\n    }\n    top(expression, modifiers) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),\n        });\n    }\n    union(expression) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithSetOperations(this.#props.queryNode, parseSetOperations('union', expression, false)),\n        });\n    }\n    unionAll(expression) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithSetOperations(this.#props.queryNode, parseSetOperations('union', expression, true)),\n        });\n    }\n    intersect(expression) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithSetOperations(this.#props.queryNode, parseSetOperations('intersect', expression, false)),\n        });\n    }\n    intersectAll(expression) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithSetOperations(this.#props.queryNode, parseSetOperations('intersect', expression, true)),\n        });\n    }\n    except(expression) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithSetOperations(this.#props.queryNode, parseSetOperations('except', expression, false)),\n        });\n    }\n    exceptAll(expression) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithSetOperations(this.#props.queryNode, parseSetOperations('except', expression, true)),\n        });\n    }\n    as(alias) {\n        return new AliasedSelectQueryBuilderImpl(this, alias);\n    }\n    clearSelect() {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithoutSelections(this.#props.queryNode),\n        });\n    }\n    clearWhere() {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithoutWhere(this.#props.queryNode),\n        });\n    }\n    clearLimit() {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithoutLimit(this.#props.queryNode),\n        });\n    }\n    clearOffset() {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithoutOffset(this.#props.queryNode),\n        });\n    }\n    clearOrderBy() {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithoutOrderBy(this.#props.queryNode),\n        });\n    }\n    clearGroupBy() {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: SelectQueryNode.cloneWithoutGroupBy(this.#props.queryNode),\n        });\n    }\n    $call(func) {\n        return func(this);\n    }\n    $if(condition, func) {\n        if (condition) {\n            return func(this);\n        }\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n        });\n    }\n    $castTo() {\n        return new SelectQueryBuilderImpl(this.#props);\n    }\n    $narrowType() {\n        return new SelectQueryBuilderImpl(this.#props);\n    }\n    $assertType() {\n        return new SelectQueryBuilderImpl(this.#props);\n    }\n    $asTuple() {\n        return new ExpressionWrapper(this.toOperationNode());\n    }\n    withPlugin(plugin) {\n        return new SelectQueryBuilderImpl({\n            ...this.#props,\n            executor: this.#props.executor.withPlugin(plugin),\n        });\n    }\n    toOperationNode() {\n        return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);\n    }\n    compile() {\n        return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);\n    }\n    async execute() {\n        const compiledQuery = this.compile();\n        const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);\n        return result.rows;\n    }\n    async executeTakeFirst() {\n        const [result] = await this.execute();\n        return result;\n    }\n    async executeTakeFirstOrThrow(errorConstructor = NoResultError) {\n        const result = await this.executeTakeFirst();\n        if (result === undefined) {\n            const error = isNoResultErrorConstructor(errorConstructor)\n                ? new errorConstructor(this.toOperationNode())\n                : errorConstructor(this.toOperationNode());\n            throw error;\n        }\n        return result;\n    }\n    async *stream(chunkSize = 100) {\n        const compiledQuery = this.compile();\n        const stream = this.#props.executor.stream(compiledQuery, chunkSize, this.#props.queryId);\n        for await (const item of stream) {\n            yield* item.rows;\n        }\n    }\n    async explain(format, options) {\n        const builder = new SelectQueryBuilderImpl({\n            ...this.#props,\n            queryNode: QueryNode.cloneWithExplain(this.#props.queryNode, format, options),\n        });\n        return await builder.execute();\n    }\n}\npreventAwait(SelectQueryBuilderImpl, \"don't await SelectQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.\");\nexport function createSelectQueryBuilder(props) {\n    return new SelectQueryBuilderImpl(props);\n}\n/**\n * {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.\n */\nclass AliasedSelectQueryBuilderImpl {\n    #queryBuilder;\n    #alias;\n    constructor(queryBuilder, alias) {\n        this.#queryBuilder = queryBuilder;\n        this.#alias = alias;\n    }\n    get expression() {\n        return this.#queryBuilder;\n    }\n    get alias() {\n        return this.#alias;\n    }\n    get isAliasedSelectQueryBuilder() {\n        return true;\n    }\n    toOperationNode() {\n        return AliasNode.create(this.#queryBuilder.toOperationNode(), IdentifierNode.create(this.#alias));\n    }\n}\npreventAwait(AliasedSelectQueryBuilderImpl, \"don't await AliasedSelectQueryBuilder instances directly. AliasedSelectQueryBuilder should never be executed directly since it's always a part of another query.\");\n","/// <reference types=\"./aggregate-function-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { WhereNode } from './where-node.js';\n/**\n * @internal\n */\nexport const AggregateFunctionNode = freeze({\n    is(node) {\n        return node.kind === 'AggregateFunctionNode';\n    },\n    create(aggregateFunction, aggregated = []) {\n        return freeze({\n            kind: 'AggregateFunctionNode',\n            func: aggregateFunction,\n            aggregated,\n        });\n    },\n    cloneWithDistinct(aggregateFunctionNode) {\n        return freeze({\n            ...aggregateFunctionNode,\n            distinct: true,\n        });\n    },\n    cloneWithFilter(aggregateFunctionNode, filter) {\n        return freeze({\n            ...aggregateFunctionNode,\n            filter: aggregateFunctionNode.filter\n                ? WhereNode.cloneWithOperation(aggregateFunctionNode.filter, 'And', filter)\n                : WhereNode.create(filter),\n        });\n    },\n    cloneWithOrFilter(aggregateFunctionNode, filter) {\n        return freeze({\n            ...aggregateFunctionNode,\n            filter: aggregateFunctionNode.filter\n                ? WhereNode.cloneWithOperation(aggregateFunctionNode.filter, 'Or', filter)\n                : WhereNode.create(filter),\n        });\n    },\n    cloneWithOver(aggregateFunctionNode, over) {\n        return freeze({\n            ...aggregateFunctionNode,\n            over,\n        });\n    },\n});\n","/// <reference types=\"./function-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const FunctionNode = freeze({\n    is(node) {\n        return node.kind === 'FunctionNode';\n    },\n    create(func, args) {\n        return freeze({\n            kind: 'FunctionNode',\n            func,\n            arguments: args,\n        });\n    },\n});\n","/// <reference types=\"./aggregate-function-builder.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';\nimport { AliasNode } from '../operation-node/alias-node.js';\nimport { IdentifierNode } from '../operation-node/identifier-node.js';\nimport { preventAwait } from '../util/prevent-await.js';\nimport { createOverBuilder } from '../parser/parse-utils.js';\nimport { parseReferentialBinaryOperation, parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';\nexport class AggregateFunctionBuilder {\n    #props;\n    constructor(props) {\n        this.#props = freeze(props);\n    }\n    /** @private */\n    get expressionType() {\n        return undefined;\n    }\n    /**\n     * Returns an aliased version of the function.\n     *\n     * In addition to slapping `as \"the_alias\"` to the end of the SQL,\n     * this method also provides strict typing:\n     *\n     * ```ts\n     * const result = await db\n     *   .selectFrom('person')\n     *   .select(\n     *     (eb) => eb.fn.count<number>('id').as('person_count')\n     *   )\n     *   .executeTakeFirstOrThrow()\n     *\n     * // `person_count: number` field exists in the result type.\n     * console.log(result.person_count)\n     * ```\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select count(\"id\") as \"person_count\"\n     * from \"person\"\n     * ```\n     */\n    as(alias) {\n        return new AliasedAggregateFunctionBuilder(this, alias);\n    }\n    /**\n     * Adds a `distinct` clause inside the function.\n     *\n     * ### Examples\n     *\n     * ```ts\n     * const result = await db\n     *   .selectFrom('person')\n     *   .select((eb) =>\n     *     eb.fn.count<number>('first_name').distinct().as('first_name_count')\n     *   )\n     *   .executeTakeFirstOrThrow()\n     * ```\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select count(distinct \"first_name\") as \"first_name_count\"\n     * from \"person\"\n     * ```\n     */\n    distinct() {\n        return new AggregateFunctionBuilder({\n            ...this.#props,\n            aggregateFunctionNode: AggregateFunctionNode.cloneWithDistinct(this.#props.aggregateFunctionNode),\n        });\n    }\n    filterWhere(...args) {\n        return new AggregateFunctionBuilder({\n            ...this.#props,\n            aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseValueBinaryOperationOrExpression(args)),\n        });\n    }\n    /**\n     * Adds a `filter` clause with a nested `where` clause after the function, where\n     * both sides of the operator are references to columns.\n     *\n     * Similar to {@link WhereInterface}'s `whereRef` method.\n     *\n     * ### Examples\n     *\n     * Count people with same first and last names versus general public:\n     *\n     * ```ts\n     * const result = await db\n     *   .selectFrom('person')\n     *   .select((eb) => [\n     *     eb.fn\n     *       .count<number>('id')\n     *       .filterWhereRef('first_name', '=', 'last_name')\n     *       .as('repeat_name_count'),\n     *     eb.fn.count<number>('id').as('total_count'),\n     *   ])\n     *   .executeTakeFirstOrThrow()\n     * ```\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select\n     *   count(\"id\") filter(where \"first_name\" = \"last_name\") as \"repeat_name_count\",\n     *   count(\"id\") as \"total_count\"\n     * from \"person\"\n     * ```\n     */\n    filterWhereRef(lhs, op, rhs) {\n        return new AggregateFunctionBuilder({\n            ...this.#props,\n            aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseReferentialBinaryOperation(lhs, op, rhs)),\n        });\n    }\n    /**\n     * Adds an `over` clause (window functions) after the function.\n     *\n     * ### Examples\n     *\n     * ```ts\n     * const result = await db\n     *   .selectFrom('person')\n     *   .select(\n     *     (eb) => eb.fn.avg<number>('age').over().as('average_age')\n     *   )\n     *   .execute()\n     * ```\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select avg(\"age\") over() as \"average_age\"\n     * from \"person\"\n     * ```\n     *\n     * Also supports passing a callback that returns an over builder,\n     * allowing to add partition by and sort by clauses inside over.\n     *\n     * ```ts\n     * const result = await db\n     *   .selectFrom('person')\n     *   .select(\n     *     (eb) => eb.fn.avg<number>('age').over(\n     *       ob => ob.partitionBy('last_name').orderBy('first_name', 'asc')\n     *     ).as('average_age')\n     *   )\n     *   .execute()\n     * ```\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select avg(\"age\") over(partition by \"last_name\" order by \"first_name\" asc) as \"average_age\"\n     * from \"person\"\n     * ```\n     */\n    over(over) {\n        const builder = createOverBuilder();\n        return new AggregateFunctionBuilder({\n            ...this.#props,\n            aggregateFunctionNode: AggregateFunctionNode.cloneWithOver(this.#props.aggregateFunctionNode, (over ? over(builder) : builder).toOperationNode()),\n        });\n    }\n    /**\n     * Simply calls the provided function passing `this` as the only argument. `$call` returns\n     * what the provided function returns.\n     */\n    $call(func) {\n        return func(this);\n    }\n    /**\n     * Casts the expression to the given type.\n     *\n     * This method call doesn't change the SQL in any way. This methods simply\n     * returns a copy of this `AggregateFunctionBuilder` with a new output type.\n     */\n    $castTo() {\n        return new AggregateFunctionBuilder(this.#props);\n    }\n    /**\n     * Omit null from the expression's type.\n     *\n     * This function can be useful in cases where you know an expression can't be\n     * null, but Kysely is unable to infer it.\n     *\n     * This method call doesn't change the SQL in any way. This methods simply\n     * returns a copy of `this` with a new output type.\n     */\n    $notNull() {\n        return new AggregateFunctionBuilder(this.#props);\n    }\n    toOperationNode() {\n        return this.#props.aggregateFunctionNode;\n    }\n}\npreventAwait(AggregateFunctionBuilder, \"don't await AggregateFunctionBuilder instances. They are never executed directly and are always just a part of a query.\");\n/**\n * {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.\n */\nexport class AliasedAggregateFunctionBuilder {\n    #aggregateFunctionBuilder;\n    #alias;\n    constructor(aggregateFunctionBuilder, alias) {\n        this.#aggregateFunctionBuilder = aggregateFunctionBuilder;\n        this.#alias = alias;\n    }\n    /** @private */\n    get expression() {\n        return this.#aggregateFunctionBuilder;\n    }\n    /** @private */\n    get alias() {\n        return this.#alias;\n    }\n    toOperationNode() {\n        return AliasNode.create(this.#aggregateFunctionBuilder.toOperationNode(), IdentifierNode.create(this.#alias));\n    }\n}\n","/// <reference types=\"./function-module.d.ts\" />\nimport { ExpressionWrapper } from '../expression/expression-wrapper.js';\nimport { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';\nimport { FunctionNode } from '../operation-node/function-node.js';\nimport { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';\nimport { parseSelectAll } from '../parser/select-parser.js';\nimport { AggregateFunctionBuilder } from './aggregate-function-builder.js';\nimport { isString } from '../util/object-utils.js';\nimport { parseTable } from '../parser/table-parser.js';\nexport function createFunctionModule() {\n    const fn = (name, args) => {\n        return new ExpressionWrapper(FunctionNode.create(name, parseReferenceExpressionOrList(args ?? [])));\n    };\n    const agg = (name, args) => {\n        return new AggregateFunctionBuilder({\n            aggregateFunctionNode: AggregateFunctionNode.create(name, args ? parseReferenceExpressionOrList(args) : undefined),\n        });\n    };\n    return Object.assign(fn, {\n        agg,\n        avg(column) {\n            return agg('avg', [column]);\n        },\n        coalesce(...values) {\n            return fn('coalesce', values);\n        },\n        count(column) {\n            return agg('count', [column]);\n        },\n        countAll(table) {\n            return new AggregateFunctionBuilder({\n                aggregateFunctionNode: AggregateFunctionNode.create('count', parseSelectAll(table)),\n            });\n        },\n        max(column) {\n            return agg('max', [column]);\n        },\n        min(column) {\n            return agg('min', [column]);\n        },\n        sum(column) {\n            return agg('sum', [column]);\n        },\n        any(column) {\n            return fn('any', [column]);\n        },\n        jsonAgg(table) {\n            return new AggregateFunctionBuilder({\n                aggregateFunctionNode: AggregateFunctionNode.create('json_agg', [\n                    isString(table) ? parseTable(table) : table.toOperationNode(),\n                ]),\n            });\n        },\n        toJson(table) {\n            return new ExpressionWrapper(FunctionNode.create('to_json', [\n                isString(table) ? parseTable(table) : table.toOperationNode(),\n            ]));\n        },\n    });\n}\n","/// <reference types=\"./unary-operation-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const UnaryOperationNode = freeze({\n    is(node) {\n        return node.kind === 'UnaryOperationNode';\n    },\n    create(operator, operand) {\n        return freeze({\n            kind: 'UnaryOperationNode',\n            operator,\n            operand,\n        });\n    },\n});\n","/// <reference types=\"./unary-operation-parser.d.ts\" />\nimport { OperatorNode } from '../operation-node/operator-node.js';\nimport { UnaryOperationNode } from '../operation-node/unary-operation-node.js';\nimport { parseReferenceExpression, } from './reference-parser.js';\nexport function parseExists(operand) {\n    return parseUnaryOperation('exists', operand);\n}\nexport function parseNotExists(operand) {\n    return parseUnaryOperation('not exists', operand);\n}\nexport function parseUnaryOperation(operator, operand) {\n    return UnaryOperationNode.create(OperatorNode.create(operator), parseReferenceExpression(operand));\n}\n","/// <reference types=\"./case-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nimport { WhenNode } from './when-node.js';\n/**\n * @internal\n */\nexport const CaseNode = freeze({\n    is(node) {\n        return node.kind === 'CaseNode';\n    },\n    create(value) {\n        return freeze({\n            kind: 'CaseNode',\n            value,\n        });\n    },\n    cloneWithWhen(caseNode, when) {\n        return freeze({\n            ...caseNode,\n            when: freeze(caseNode.when ? [...caseNode.when, when] : [when]),\n        });\n    },\n    cloneWithThen(caseNode, then) {\n        return freeze({\n            ...caseNode,\n            when: caseNode.when\n                ? freeze([\n                    ...caseNode.when.slice(0, -1),\n                    WhenNode.cloneWithResult(caseNode.when[caseNode.when.length - 1], then),\n                ])\n                : undefined,\n        });\n    },\n    cloneWith(caseNode, props) {\n        return freeze({\n            ...caseNode,\n            ...props,\n        });\n    },\n});\n","/// <reference types=\"./case-builder.d.ts\" />\nimport { ExpressionWrapper } from '../expression/expression-wrapper.js';\nimport { freeze } from '../util/object-utils.js';\nimport { CaseNode } from '../operation-node/case-node.js';\nimport { WhenNode } from '../operation-node/when-node.js';\nimport { parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';\nimport { isSafeImmediateValue, parseSafeImmediateValue, parseValueExpression, } from '../parser/value-parser.js';\nexport class CaseBuilder {\n    #props;\n    constructor(props) {\n        this.#props = freeze(props);\n    }\n    when(...args) {\n        return new CaseThenBuilder({\n            ...this.#props,\n            node: CaseNode.cloneWithWhen(this.#props.node, WhenNode.create(parseValueBinaryOperationOrExpression(args))),\n        });\n    }\n}\nexport class CaseThenBuilder {\n    #props;\n    constructor(props) {\n        this.#props = freeze(props);\n    }\n    then(valueExpression) {\n        return new CaseWhenBuilder({\n            ...this.#props,\n            node: CaseNode.cloneWithThen(this.#props.node, isSafeImmediateValue(valueExpression)\n                ? parseSafeImmediateValue(valueExpression)\n                : parseValueExpression(valueExpression)),\n        });\n    }\n}\nexport class CaseWhenBuilder {\n    #props;\n    constructor(props) {\n        this.#props = freeze(props);\n    }\n    when(...args) {\n        return new CaseThenBuilder({\n            ...this.#props,\n            node: CaseNode.cloneWithWhen(this.#props.node, WhenNode.create(parseValueBinaryOperationOrExpression(args))),\n        });\n    }\n    else(valueExpression) {\n        return new CaseEndBuilder({\n            ...this.#props,\n            node: CaseNode.cloneWith(this.#props.node, {\n                else: isSafeImmediateValue(valueExpression)\n                    ? parseSafeImmediateValue(valueExpression)\n                    : parseValueExpression(valueExpression),\n            }),\n        });\n    }\n    end() {\n        return new ExpressionWrapper(CaseNode.cloneWith(this.#props.node, { isStatement: false }));\n    }\n    endCase() {\n        return new ExpressionWrapper(CaseNode.cloneWith(this.#props.node, { isStatement: true }));\n    }\n}\nexport class CaseEndBuilder {\n    #props;\n    constructor(props) {\n        this.#props = freeze(props);\n    }\n    end() {\n        return new ExpressionWrapper(CaseNode.cloneWith(this.#props.node, { isStatement: false }));\n    }\n    endCase() {\n        return new ExpressionWrapper(CaseNode.cloneWith(this.#props.node, { isStatement: true }));\n    }\n}\n","/// <reference types=\"./json-path-leg-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const JSONPathLegNode = freeze({\n    is(node) {\n        return node.kind === 'JSONPathLegNode';\n    },\n    create(type, value) {\n        return freeze({\n            kind: 'JSONPathLegNode',\n            type,\n            value,\n        });\n    },\n});\n","/// <reference types=\"./json-path-builder.d.ts\" />\nimport { AliasNode } from '../operation-node/alias-node.js';\nimport { IdentifierNode } from '../operation-node/identifier-node.js';\nimport { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js';\nimport { JSONPathLegNode, } from '../operation-node/json-path-leg-node.js';\nimport { JSONPathNode } from '../operation-node/json-path-node.js';\nimport { JSONReferenceNode } from '../operation-node/json-reference-node.js';\nimport { isOperationNodeSource } from '../operation-node/operation-node-source.js';\nimport { ValueNode } from '../operation-node/value-node.js';\nexport class JSONPathBuilder {\n    #node;\n    constructor(node) {\n        this.#node = node;\n    }\n    /**\n     * Access an element of a JSON array in a specific location.\n     *\n     * Since there's no guarantee an element exists in the given array location, the\n     * resulting type is always nullable. If you're sure the element exists, you\n     * should use {@link SelectQueryBuilder.$assertType} to narrow the type safely.\n     *\n     * See also {@link key} to access properties of JSON objects.\n     *\n     * ### Examples\n     *\n     * ```ts\n     * db.selectFrom('person').select(eb =>\n     *   eb.ref('nicknames', '->').at(0).as('primary_nickname')\n     * )\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select \"nicknames\"->0 as \"primary_nickname\" from \"person\"\n     *```\n     *\n     * Combined with {@link key}:\n     *\n     * ```ts\n     * db.selectFrom('person').select(eb =>\n     *   eb.ref('experience', '->').at(0).key('role').as('first_role')\n     * )\n     * ```\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select \"experience\"->0->'role' as \"first_role\" from \"person\"\n     * ```\n     *\n     * You can use `'last'` to access the last element of the array in MySQL:\n     *\n     * ```ts\n     * db.selectFrom('person').select(eb =>\n     *   eb.ref('nicknames', '->$').at('last').as('last_nickname')\n     * )\n     * ```\n     *\n     * The generated SQL (MySQL):\n     *\n     * ```sql\n     * select `nicknames`->'$[last]' as `last_nickname` from `person`\n     * ```\n     *\n     * Or `'#-1'` in SQLite:\n     *\n     * ```ts\n     * db.selectFrom('person').select(eb =>\n     *   eb.ref('nicknames', '->>$').at('#-1').as('last_nickname')\n     * )\n     * ```\n     *\n     * The generated SQL (SQLite):\n     *\n     * ```sql\n     * select \"nicknames\"->>'$[#-1]' as `last_nickname` from `person`\n     * ```\n     */\n    at(index) {\n        return this.#createBuilderWithPathLeg('ArrayLocation', index);\n    }\n    /**\n     * Access a property of a JSON object.\n     *\n     * If a field is optional, the resulting type will be nullable.\n     *\n     * See also {@link at} to access elements of JSON arrays.\n     *\n     * ### Examples\n     *\n     * ```ts\n     * db.selectFrom('person').select(eb =>\n     *   eb.ref('address', '->').key('city').as('city')\n     * )\n     * ```\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select \"address\"->'city' as \"city\" from \"person\"\n     * ```\n     *\n     * Going deeper:\n     *\n     * ```ts\n     * db.selectFrom('person').select(eb =>\n     *   eb.ref('profile', '->$').key('website').key('url').as('website_url')\n     * )\n     * ```\n     *\n     * The generated SQL (MySQL):\n     *\n     * ```sql\n     * select `profile`->'$.website.url' as `website_url` from `person`\n     * ```\n     *\n     * Combined with {@link at}:\n     *\n     * ```ts\n     * db.selectFrom('person').select(eb =>\n     *   eb.ref('profile', '->').key('addresses').at(0).key('city').as('city')\n     * )\n     * ```\n     *\n     * The generated SQL (PostgreSQL):\n     *\n     * ```sql\n     * select \"profile\"->'addresses'->0->'city' as \"city\" from \"person\"\n     * ```\n     */\n    key(key) {\n        return this.#createBuilderWithPathLeg('Member', key);\n    }\n    #createBuilderWithPathLeg(legType, value) {\n        if (JSONReferenceNode.is(this.#node)) {\n            return new TraversedJSONPathBuilder(JSONReferenceNode.cloneWithTraversal(this.#node, JSONPathNode.is(this.#node.traversal)\n                ? JSONPathNode.cloneWithLeg(this.#node.traversal, JSONPathLegNode.create(legType, value))\n                : JSONOperatorChainNode.cloneWithValue(this.#node.traversal, ValueNode.createImmediate(value))));\n        }\n        return new TraversedJSONPathBuilder(JSONPathNode.cloneWithLeg(this.#node, JSONPathLegNode.create(legType, value)));\n    }\n}\nexport class TraversedJSONPathBuilder extends JSONPathBuilder {\n    #node;\n    constructor(node) {\n        super(node);\n        this.#node = node;\n    }\n    /** @private */\n    get expressionType() {\n        return undefined;\n    }\n    as(alias) {\n        return new AliasedJSONPathBuilder(this, alias);\n    }\n    /**\n     * Change the output type of the json path.\n     *\n     * This method call doesn't change the SQL in any way. This methods simply\n     * returns a copy of this `JSONPathBuilder` with a new output type.\n     */\n    $castTo() {\n        return new JSONPathBuilder(this.#node);\n    }\n    $notNull() {\n        return new JSONPathBuilder(this.#node);\n    }\n    toOperationNode() {\n        return this.#node;\n    }\n}\nexport class AliasedJSONPathBuilder {\n    #jsonPath;\n    #alias;\n    constructor(jsonPath, alias) {\n        this.#jsonPath = jsonPath;\n        this.#alias = alias;\n    }\n    /** @private */\n    get expression() {\n        return this.#jsonPath;\n    }\n    /** @private */\n    get alias() {\n        return this.#alias;\n    }\n    toOperationNode() {\n        return AliasNode.create(this.#jsonPath.toOperationNode(), isOperationNodeSource(this.#alias)\n            ? this.#alias.toOperationNode()\n            : IdentifierNode.create(this.#alias));\n    }\n}\n","/// <reference types=\"./tuple-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const TupleNode = freeze({\n    is(node) {\n        return node.kind === 'TupleNode';\n    },\n    create(values) {\n        return freeze({\n            kind: 'TupleNode',\n            values: freeze(values),\n        });\n    },\n});\n","/// <reference types=\"./data-type-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\nconst SIMPLE_COLUMN_DATA_TYPES = [\n    'varchar',\n    'char',\n    'text',\n    'integer',\n    'int2',\n    'int4',\n    'int8',\n    'smallint',\n    'bigint',\n    'boolean',\n    'real',\n    'double precision',\n    'float4',\n    'float8',\n    'decimal',\n    'numeric',\n    'binary',\n    'bytea',\n    'date',\n    'datetime',\n    'time',\n    'timetz',\n    'timestamp',\n    'timestamptz',\n    'serial',\n    'bigserial',\n    'uuid',\n    'json',\n    'jsonb',\n    'blob',\n    'varbinary',\n];\nconst COLUMN_DATA_TYPE_REGEX = [\n    /^varchar\\(\\d+\\)$/,\n    /^char\\(\\d+\\)$/,\n    /^decimal\\(\\d+, \\d+\\)$/,\n    /^numeric\\(\\d+, \\d+\\)$/,\n    /^binary\\(\\d+\\)$/,\n    /^datetime\\(\\d+\\)$/,\n    /^time\\(\\d+\\)$/,\n    /^timetz\\(\\d+\\)$/,\n    /^timestamp\\(\\d+\\)$/,\n    /^timestamptz\\(\\d+\\)$/,\n    /^varbinary\\(\\d+\\)$/,\n];\n/**\n * @internal\n */\nexport const DataTypeNode = freeze({\n    is(node) {\n        return node.kind === 'DataTypeNode';\n    },\n    create(dataType) {\n        return freeze({\n            kind: 'DataTypeNode',\n            dataType,\n        });\n    },\n});\nexport function isColumnDataType(dataType) {\n    if (SIMPLE_COLUMN_DATA_TYPES.includes(dataType)) {\n        return true;\n    }\n    if (COLUMN_DATA_TYPE_REGEX.some((r) => r.test(dataType))) {\n        return true;\n    }\n    return false;\n}\n","/// <reference types=\"./data-type-parser.d.ts\" />\nimport { DataTypeNode, isColumnDataType, } from '../operation-node/data-type-node.js';\nimport { isOperationNodeSource } from '../operation-node/operation-node-source.js';\nexport function parseDataTypeExpression(dataType) {\n    if (isOperationNodeSource(dataType)) {\n        return dataType.toOperationNode();\n    }\n    if (isColumnDataType(dataType)) {\n        return DataTypeNode.create(dataType);\n    }\n    throw new Error(`invalid column data type ${JSON.stringify(dataType)}`);\n}\n","/// <reference types=\"./cast-node.d.ts\" />\nimport { freeze } from '../util/object-utils.js';\n/**\n * @internal\n */\nexport const CastNode = freeze({\n    is(node) {\n        return node.kind === 'CastNode';\n    },\n    create(expression, dataType) {\n        return freeze({\n            kind: 'CastNode',\n            expression,\n            dataType,\n        });\n    },\n});\n","/// <reference types=\"./expression-builder.d.ts\" />\nimport { createSelectQueryBuilder, } from '../query-builder/select-query-builder.js';\nimport { SelectQueryNode } from '../operation-node/select-query-node.js';\nimport { parseTableExpressionOrList, parseTable, } from '../parser/table-parser.js';\nimport { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';\nimport { createQueryId } from '../util/query-id.js';\nimport { createFunctionModule, } from '../query-builder/function-module.js';\nimport { parseJSONReference, parseReferenceExpression, parseStringReference, } from '../parser/reference-parser.js';\nimport { parseFilterList, parseFilterObject, parseValueBinaryOperation, parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';\nimport { ParensNode } from '../operation-node/parens-node.js';\nimport { ExpressionWrapper } from './expression-wrapper.js';\nimport { OperatorNode, } from '../operation-node/operator-node.js';\nimport { parseUnaryOperation } from '../parser/unary-operation-parser.js';\nimport { parseSafeImmediateValue, parseValueExpression, } from '../parser/value-parser.js';\nimport { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';\nimport { CaseBuilder } from '../query-builder/case-builder.js';\nimport { CaseNode } from '../operation-node/case-node.js';\nimport { isReadonlyArray, isUndefined } from '../util/object-utils.js';\nimport { JSONPathBuilder } from '../query-builder/json-path-builder.js';\nimport { BinaryOperationNode } from '../operation-node/binary-operation-node.js';\nimport { AndNode } from '../operation-node/and-node.js';\nimport { TupleNode } from '../operation-node/tuple-node.js';\nimport { JSONPathNode } from '../operation-node/json-path-node.js';\nimport { parseDataTypeExpression, } from '../parser/data-type-parser.js';\nimport { CastNode } from '../operation-node/cast-node.js';\nexport function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {\n    function binary(lhs, op, rhs) {\n        return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));\n    }\n    function unary(op, expr) {\n        return new ExpressionWrapper(parseUnaryOperation(op, expr));\n    }\n    const eb = Object.assign(binary, {\n        fn: undefined,\n        eb: undefined,\n        selectFrom(table) {\n            return createSelectQueryBuilder({\n                queryId: createQueryId(),\n                executor,\n                queryNode: SelectQueryNode.createFrom(parseTableExpressionOrList(table)),\n            });\n        },\n        case(reference) {\n            return new CaseBuilder({\n                node: CaseNode.create(isUndefined(reference)\n                    ? undefined\n                    : parseReferenceExpression(reference)),\n            });\n        },\n        ref(reference, op) {\n            if (isUndefined(op)) {\n                return new ExpressionWrapper(parseStringReference(reference));\n            }\n            return new JSONPathBuilder(parseJSONReference(reference, op));\n        },\n        jsonPath() {\n            return new JSONPathBuilder(JSONPathNode.create());\n        },\n        table(table) {\n            return new ExpressionWrapper(parseTable(table));\n        },\n        val(value) {\n            return new ExpressionWrapper(parseValueExpression(value));\n        },\n        refTuple(...values) {\n            return new ExpressionWrapper(TupleNode.create(values.map(parseReferenceExpression)));\n        },\n        tuple(...values) {\n            return new ExpressionWrapper(TupleNode.create(values.map(parseValueExpression)));\n        },\n        lit(value) {\n            return new ExpressionWrapper(parseSafeImmediateValue(value));\n        },\n        unary,\n        not(expr) {\n            return unary('not', expr);\n        },\n        exists(expr) {\n            return unary('exists', expr);\n        },\n        neg(expr) {\n            return unary('-', expr);\n        },\n        between(expr, start, end) {\n            return new ExpressionWrapper(BinaryOperationNode.create(parseReferenceExpression(expr), OperatorNode.create('between'), AndNode.create(parseValueExpression(start), parseValueExpression(end))));\n        },\n        betweenSymmetric(expr, start, end) {\n            return new ExpressionWrapper(BinaryOperationNode.create(parseReferenceExpression(expr), OperatorNode.create('between symmetric'), AndNode.create(parseValueExpression(start), parseValueExpression(end))));\n        },\n        and(exprs) {\n            if (isReadonlyArray(exprs)) {\n                return new ExpressionWrapper(parseFilterList(exprs, 'and'));\n            }\n            return new ExpressionWrapper(parseFilterObject(exprs, 'and'));\n        },\n        or(exprs) {\n            if (isReadonlyArray(exprs)) {\n                return new ExpressionWrapper(parseFilterList(exprs, 'or'));\n            }\n            return new ExpressionWrapper(parseFilterObject(exprs, 'or'));\n        },\n        parens(...args) {\n            const node = parseValueBinaryOperationOrExpression(args);\n            if (ParensNode.is(node)) {\n                // No double wrapping.\n                return new ExpressionWrapper(node);\n            }\n            else {\n                return new ExpressionWrapper(ParensNode.create(node));\n            }\n        },\n        cast(expr, dataType) {\n            return new ExpressionWrapper(CastNode.create(parseReferenceExpression(expr), parseDataTypeExpression(dataType)));\n        },\n        withSchema(schema) {\n            return createExpressionBuilder(executor.withPluginAtFront(new WithSchemaPlugin(schema)));\n        },\n    });\n    eb.fn = createFunctionModule();\n    eb.eb = eb;\n    return eb;\n}\nexport function expressionBuilder(_) {\n    return createExpressionBuilder();\n}\n","/// <reference types=\"./expression-parser.d.ts\" />\nimport { isAliasedExpression, isExpression, } from '../expression/expression.js';\nimport { isOperationNodeSource } from '../operation-node/operation-node-source.js';\nimport { expressionBuilder, } from '../expression/expression-builder.js';\nimport { isFunction } from '../util/object-utils.js';\nexport function parseExpression(exp) {\n    if (isOperationNodeSource(exp)) {\n        return exp.toOperationNode();\n    }\n    else if (isFunction(exp)) {\n        return exp(expressionBuilder()).toOperationNode();\n    }\n    throw new Error(`invalid expression: ${JSON.stringify(exp)}`);\n}\nexport function parseAliasedExpression(exp) {\n    if (isOperationNodeSource(exp)) {\n        return exp.toOperationNode();\n    }\n    else if (isFunction(exp)) {\n        return exp(expressionBuilder()).toOperationNode();\n    }\n    throw new Error(`invalid aliased expression: ${JSON.stringify(exp)}`);\n}\nexport function isExpressionOrFactory(obj) {\n    return isExpression(obj) || isAliasedExpression(obj) || isFunction(obj);\n}\n","/// <reference types=\"./table-parser.d.ts\" />\nimport { isReadonlyArray, isString } from '../util/object-utils.js';\nimport { AliasNode } from '../operation-node/alias-node.js';\nimport { TableNode } from '../operation-node/table-node.js';\nimport { parseAliasedExpression, } from './expression-parser.js';\nimport { IdentifierNode } from '../operation-node/identifier-node.js';\nexport function parseTableExpressionOrList(table) {\n    if (isReadonlyArray(table)) {\n        return table.map((it) => parseTableExpression(it));\n    }\n    else {\n        return [parseTableExpression(table)];\n    }\n}\nexport function parseTableExpression(table) {\n    if (isString(table)) {\n        return parseAliasedTable(table);\n    }\n    else {\n        return parseAliasedExpression(table);\n    }\n}\nexport function parseAliasedTable(from) {\n    const ALIAS_SEPARATOR = ' as ';\n    if (from.includes(ALIAS_SEPARATOR)) {\n        const [table, alias] = from.split(ALIAS_SEPARATOR).map(trim);\n        return AliasNode.create(parseTable(table), IdentifierNode.create(alias));\n    }\n    else {\n        return parseTable(from);\n    }\n}\nexport function parseTable(from) {\n    const SCHEMA_SEPARATOR = '.';\n    if (from.includes(SCHEMA_SEPARATOR)) {\n        const [schema, table] = from.split(SCHEMA_SEPARATOR).map(trim);\n        return TableNode.createWithSchema(schema, table);\n    }\n    else {\n        return TableNode.create(from);\n    }\n}\nfunction trim(str) {\n    return str.trim();\n}\n","/// <reference types=\"./raw-builder.d.ts\" />\nimport { AliasNode } from '../operation-node/alias-node.js';\nimport { preventAwait } from '../util/prevent-await.js';\nimport { freeze } from '../util/object-utils.js';\nimport { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';\nimport { IdentifierNode } from '../operation-node/identifier-node.js';\nimport { isOperationNodeSource } from '../operation-node/operation-node-source.js';\nclass RawBuilderImpl {\n    #props;\n    constructor(props) {\n        this.#props = freeze(props);\n    }\n    get expressionType() {\n        return undefined;\n    }\n    get isRawBuilder() {\n        return true;\n    }\n    as(alias) {\n        return new AliasedRawBuilderImpl(this, alias);\n    }\n    $castTo() {\n        return new RawBuilderImpl({ ...this.#props });\n    }\n    $notNull() {\n        return new RawBuilderImpl(this.#props);\n    }\n    withPlugin(plugin) {\n        return new RawBuilderImpl({\n            ...this.#props,\n            plugins: this.#props.plugins !== undefined\n                ? freeze([...this.#props.plugins, plugin])\n                : freeze([plugin]),\n        });\n    }\n    toOperationNode() {\n        return this.#toOperationNode(this.#getExecutor());\n    }\n    compile(executorProvider) {\n        return this.#compile(this.#getExecutor(executorProvider));\n    }\n    async execute(executorProvider) {\n        const executor = this.#getExecutor(executorProvider);\n        return executor.executeQuery(this.#compile(executor), this.#props.queryId);\n    }\n    #getExecutor(executorProvider) {\n        const executor = executorProvider !== undefined\n            ? executorProvider.getExecutor()\n            : NOOP_QUERY_EXECUTOR;\n        return this.#props.plugins !== undefined\n            ? executor.withPlugins(this.#props.plugins)\n            : executor;\n    }\n    #toOperationNode(executor) {\n        return executor.transformQuery(this.#props.rawNode, this.#props.queryId);\n    }\n    #compile(executor) {\n        return executor.compileQuery(this.#toOperationNode(executor), this.#props.queryId);\n    }\n}\nexport function createRawBuilder(props) {\n    return new RawBuilderImpl(props);\n}\npreventAwait(RawBuilderImpl, \"don't await RawBuilder instances directly. To execute the query you need to call `execute`\");\nclass AliasedRawBuilderImpl {\n    #rawBuilder;\n    #alias;\n    constructor(rawBuilder, alias) {\n        this.#rawBuilder = rawBuilder;\n        this.#alias = alias;\n    }\n    get expression() {\n        return this.#rawBuilder;\n    }\n    get alias() {\n        return this.#alias;\n    }\n    get rawBuilder() {\n        return this.#rawBuilder;\n    }\n    toOperationNode() {\n        return AliasNode.create(this.#rawBuilder.toOperationNode(), isOperationNodeSource(this.#alias)\n            ? this.#alias.toOperationNode()\n            : IdentifierNode.create(this.#alias));\n    }\n}\npreventAwait(AliasedRawBuilderImpl, \"don't await AliasedRawBuilder instances directly. AliasedRawBuilder should never be executed directly since it's always a part of another query.\");\n","/// <reference types=\"./sql.d.ts\" />\nimport { IdentifierNode } from '../operation-node/identifier-node.js';\nimport { isOperationNodeSource } from '../operation-node/operation-node-source.js';\nimport { RawNode } from '../operation-node/raw-node.js';\nimport { ValueNode } from '../operation-node/value-node.js';\nimport { parseStringReference } from '../parser/reference-parser.js';\nimport { parseTable } from '../parser/table-parser.js';\nimport { parseValueExpression } from '../parser/value-parser.js';\nimport { createQueryId } from '../util/query-id.js';\nimport { createRawBuilder } from './raw-builder.js';\nexport const sql = Object.assign((sqlFragments, ...parameters) => {\n    return createRawBuilder({\n        queryId: createQueryId(),\n        rawNode: RawNode.create(sqlFragments, parameters?.map(parseParameter) ?? []),\n    });\n}, {\n    ref(columnReference) {\n        return createRawBuilder({\n            queryId: createQueryId(),\n            rawNode: RawNode.createWithChild(parseStringReference(columnReference)),\n        });\n    },\n    val(value) {\n        return createRawBuilder({\n            queryId: createQueryId(),\n            rawNode: RawNode.createWithChild(parseValueExpression(value)),\n        });\n    },\n    value(value) {\n        return this.val(value);\n    },\n    table(tableReference) {\n        return createRawBuilder({\n            queryId: createQueryId(),\n            rawNode: RawNode.createWithChild(parseTable(tableReference)),\n        });\n    },\n    id(...ids) {\n        const fragments = new Array(ids.length + 1).fill('.');\n        fragments[0] = '';\n        fragments[fragments.length - 1] = '';\n        return createRawBuilder({\n            queryId: createQueryId(),\n            rawNode: RawNode.create(fragments, ids.map(IdentifierNode.create)),\n        });\n    },\n    lit(value) {\n        return createRawBuilder({\n            queryId: createQueryId(),\n            rawNode: RawNode.createWithChild(ValueNode.createImmediate(value)),\n        });\n    },\n    literal(value) {\n        return this.lit(value);\n    },\n    raw(sql) {\n        return createRawBuilder({\n            queryId: createQueryId(),\n            rawNode: RawNode.createWithSql(sql),\n        });\n    },\n    join(array, separator = sql `, `) {\n        const nodes = new Array(2 * array.length - 1);\n        const sep = separator.toOperationNode();\n        for (let i = 0; i < array.length; ++i) {\n            nodes[2 * i] = parseParameter(array[i]);\n            if (i !== array.length - 1) {\n                nodes[2 * i + 1] = sep;\n            }\n        }\n        return createRawBuilder({\n            queryId: createQueryId(),\n            rawNode: RawNode.createWithChildren(nodes),\n        });\n    },\n});\nfunction parseParameter(param) {\n    if (isOperationNodeSource(param)) {\n        return param.toOperationNode();\n    }\n    return parseValueExpression(param);\n}\n","/// <reference types=\"./dialect-adapter-base.d.ts\" />\n/**\n * A basic implementation of `DialectAdapter` with sensible default values.\n * Third-party dialects can extend this instead of implementing the `DialectAdapter`\n * interface from scratch. That way all new settings will get default values when\n * they are added and there will be less breaking changes.\n */\nexport class DialectAdapterBase {\n    get supportsCreateIfNotExists() {\n        return true;\n    }\n    get supportsTransactionalDdl() {\n        return false;\n    }\n    get supportsReturning() {\n        return false;\n    }\n    get supportsOutput() {\n        return false;\n    }\n}\n","/// <reference types=\"./sqlite-adapter.d.ts\" />\nimport { DialectAdapterBase } from '../dialect-adapter-base.js';\nexport class SqliteAdapter extends DialectAdapterBase {\n    get supportsTransactionalDdl() {\n        return false;\n    }\n    get supportsReturning() {\n        return true;\n    }\n    async acquireMigrationLock(_db, _opt) {\n        // SQLite only has one connection that's reserved by the migration system\n        // for the whole time between acquireMigrationLock and releaseMigrationLock.\n        // We don't need to do anything here.\n    }\n    async releaseMigrationLock(_db, _opt) {\n        // SQLite only has one connection that's reserved by the migration system\n        // for the whole time between acquireMigrationLock and releaseMigrationLock.\n        // We don't need to do anything here.\n    }\n}\n","/// <reference types=\"./mysql-adapter.d.ts\" />\nimport { sql } from '../../raw-builder/sql.js';\nimport { DialectAdapterBase } from '../dialect-adapter-base.js';\nconst LOCK_ID = 'ea586330-2c93-47c8-908d-981d9d270f9d';\nconst LOCK_TIMEOUT_SECONDS = 60 * 60;\nexport class MysqlAdapter extends DialectAdapterBase {\n    get supportsTransactionalDdl() {\n        return false;\n    }\n    get supportsReturning() {\n        return false;\n    }\n    async acquireMigrationLock(db, _opt) {\n        // Kysely uses a single connection to run the migrations. Because of that, we\n        // can take a lock using `get_lock`. Locks acquired using `get_lock` get\n        // released when the connection is destroyed (session ends) or when the lock\n        // is released using `release_lock`. This way we know that the lock is either\n        // released by us after successfull or failed migrations OR it's released by\n        // MySQL if the process gets killed for some reason.\n        await sql `select get_lock(${sql.lit(LOCK_ID)}, ${sql.lit(LOCK_TIMEOUT_SECONDS)})`.execute(db);\n    }\n    async releaseMigrationLock(db, _opt) {\n        await sql `select release_lock(${sql.lit(LOCK_ID)})`.execute(db);\n    }\n}\n","import { SqliteAdapter, type Kysely, MysqlAdapter } from 'kysely';\n\nimport { DatabaseDriver } from '../database';\nimport type { CreateDriverResult, DatabaseAdapter, KyselyConfig } from '../../../types/main';\n\n/**\n * Kysely adapter for the DatabaseDriver\n */\nexport class KyselyAdapter implements DatabaseAdapter {\n  #dialect: 'mysql' | 'pg' | 'sqlite';\n  #tableName!: string;\n  #connection: Kysely<any>;\n\n  constructor(config: KyselyConfig) {\n    this.#connection = config.connection;\n\n    const adapter = this.#connection.getExecutor().adapter;\n    if (adapter instanceof SqliteAdapter) {\n      this.#dialect = 'sqlite';\n    } else if (adapter instanceof MysqlAdapter) {\n      this.#dialect = 'mysql';\n    } else {\n      this.#dialect = 'pg';\n    }\n  }\n\n  setTableName(tableName: string): void {\n    this.#tableName = tableName;\n  }\n\n  async get(key: string): Promise<{ value: any; expiresAt: number | null } | undefined> {\n    const result = await this.#connection\n      .selectFrom(this.#tableName)\n      .select(['value', 'expires_at'])\n      .where('key', '=', key)\n      .executeTakeFirst();\n\n    if (!result) return;\n\n    return { value: result.value, expiresAt: result.expires_at };\n  }\n\n  async delete(key: string): Promise<boolean> {\n    const result = await this.#connection\n      .deleteFrom(this.#tableName)\n      .where('key', '=', key)\n      .executeTakeFirst();\n\n    return result.numDeletedRows > 0;\n  }\n\n  async deleteMany(keys: string[]): Promise<number> {\n    const result = await this.#connection\n      .deleteFrom(this.#tableName)\n      .where('key', 'in', keys)\n      .executeTakeFirst();\n\n    return +result.numDeletedRows.toString();\n  }\n\n  async disconnect(): Promise<void> {\n    await this.#connection.destroy();\n  }\n\n  async createTableIfNotExists(): Promise<void> {\n    await this.#connection.schema\n      .createTable(this.#tableName)\n      .addColumn('key', 'varchar(255)', (col) => col.primaryKey().notNull())\n      .addColumn('value', 'text')\n      .addColumn('expires_at', 'bigint')\n      .ifNotExists()\n      .execute();\n  }\n\n  async pruneExpiredEntries(): Promise<void> {\n    await this.#connection\n      .deleteFrom(this.#tableName)\n      .where('expires_at', '<', Date.now())\n      .execute();\n  }\n\n  async clear(prefix: string): Promise<void> {\n    await this.#connection.deleteFrom(this.#tableName).where('key', 'like', `${prefix}%`).execute();\n  }\n\n  async set(row: { value: any; key: string; expiresAt: Date | null }): Promise<void> {\n    const expiresAt = this.#dialect === 'sqlite' ? row.expiresAt?.getTime() : row.expiresAt;\n\n    await this.#connection\n      .insertInto(this.#tableName)\n      .values({ key: row.key, value: row.value, expires_at: expiresAt ?? null })\n      .$if(this.#dialect === 'mysql', (query) =>\n        query.onDuplicateKeyUpdate({ value: row.value, expires_at: expiresAt }),\n      )\n      .$if(this.#dialect !== 'mysql', (query) => {\n        return query.onConflict((conflict) => {\n          return conflict.columns(['key']).doUpdateSet({ value: row.value, expires_at: expiresAt });\n        });\n      })\n      .execute();\n  }\n}\n\n/**\n * Create a kysely driver\n * You will need to install the underlying database package (mysql2, pg, sqlite3, etc)\n */\nexport function kyselyDriver(options: KyselyConfig): CreateDriverResult<DatabaseDriver> {\n  return {\n    options,\n    factory: (config: KyselyConfig) => {\n      const adapter = new KyselyAdapter(config);\n      return new DatabaseDriver(adapter, config);\n    },\n  };\n}","import type { DbResult, DefaultColumnTypes, DefaultSchemaConfig } from 'orchid-orm';\n\nimport { DatabaseDriver } from '../database';\nimport type { CreateDriverResult, DatabaseAdapter, OrchidConfig } from '../../../types/main';\n\n\n\n/**\n * Orchid adapter for the DatabaseDriver\n */\nexport class OrchidAdapter implements DatabaseAdapter {\n  #connection: DbResult<DefaultColumnTypes<DefaultSchemaConfig>>;\n  #tableName!: string;\n\n  constructor(config: OrchidConfig) {\n    this.#connection = config.connection;\n  }\n\n  private getTable() {\n    return this.#connection(this.#tableName, (t) => ({\n      key: t.varchar().primaryKey(),\n      value: t.varchar(),\n      expires_at: t\n        .timestampNoTZ()\n        .encode((value: Date) => value)\n        .parse((v: any): number => (v ? new Date(v).valueOf() : v))\n        .nullable(),\n    }));\n  }\n\n  setTableName(tableName: string): void {\n    this.#tableName = tableName;\n  }\n\n  async get(key: string): Promise<{ value: string; expiresAt: number | null } | undefined> {\n    const result = await this.getTable().findByOptional({ key }).select('value', 'expires_at');\n\n    if (!result) return;\n\n    return { value: result.value, expiresAt: result.expires_at };\n  }\n\n  async delete(key: string): Promise<boolean> {\n    const count = await this.getTable().where({ key }).delete();\n    return count > 0;\n  }\n\n  async deleteMany(keys: string[]): Promise<number> {\n    return await this.getTable().whereIn('key', keys).delete();\n  }\n\n  async disconnect(): Promise<void> {\n    await this.#connection.close();\n  }\n\n  async createTableIfNotExists(): Promise<void> {\n    await this.#connection.adapter.pool.query(`\n      CREATE TABLE IF NOT EXISTS \"public\".\"${this.#tableName}\" (\n        \"key\" varchar NOT NULL,\n        \"value\" text NOT NULL,\n        \"expires_at\" timestamp,\n        PRIMARY KEY (\"key\")\n      );\n    `);\n  }\n\n  async pruneExpiredEntries(): Promise<void> {\n    await this.getTable()\n      .where({ expires_at: { lt: new Date() } })\n      .delete();\n  }\n\n  async clear(prefix: string): Promise<void> {\n    await this.getTable()\n      .where({ key: { startsWith: prefix } })\n      .delete();\n  }\n\n  async set(row: { key: string; value: any; expiresAt: Date | null }): Promise<void> {\n    await this.getTable()\n      .findBy({ key: row.key })\n      .upsert({\n        create: {\n          key: row.key,\n          value: row.value,\n          expires_at: row.expiresAt,\n        },\n        update: {\n          value: row.value,\n          expires_at: row.expiresAt,\n        },\n      });\n  }\n}\n\n\n/**\n * Create a orchid driver\n */\nexport function orchidDriver(options: OrchidConfig): CreateDriverResult<DatabaseDriver> {\n  return {\n    options,\n    factory: (config: OrchidConfig) => {\n      const adapter = new OrchidAdapter(config);\n      return new DatabaseDriver(adapter, config);\n    },\n  };\n}"],"mappings":"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","names":["sql","connection","trim","sql"]}