{"version":3,"file":"execution.mjs","names":["_exhaustive"],"sources":["../../src/aggregation-expressions.ts","../../src/commands.ts","../../src/raw-commands.ts","../../src/result-shape.ts","../../src/stages.ts"],"sourcesContent":["import { MongoAstNode } from './ast-node';\nimport type { MongoAggExprRewriter, MongoAggExprVisitor } from './visitors';\n\nexport type AggRecordArgs = Readonly<Record<string, MongoAggExpr | ReadonlyArray<MongoAggExpr>>>;\n\nexport function isExprArray(\n  args: MongoAggExpr | ReadonlyArray<MongoAggExpr> | AggRecordArgs,\n): args is ReadonlyArray<MongoAggExpr> {\n  return Array.isArray(args);\n}\n\nexport function isRecordArgs(\n  args: MongoAggExpr | ReadonlyArray<MongoAggExpr> | AggRecordArgs,\n): args is AggRecordArgs {\n  return !Array.isArray(args) && typeof args === 'object' && !('accept' in args);\n}\n\nfunction freezeRecordArgs(record: AggRecordArgs): AggRecordArgs {\n  const frozen: Record<string, MongoAggExpr | ReadonlyArray<MongoAggExpr>> = {};\n  for (const [key, val] of Object.entries(record)) {\n    frozen[key] = Array.isArray(val) ? Object.freeze([...val]) : val;\n  }\n  return Object.freeze(frozen);\n}\n\nfunction rewriteRecordArgs(record: AggRecordArgs, rewriter: MongoAggExprRewriter): AggRecordArgs {\n  const result: Record<string, MongoAggExpr | ReadonlyArray<MongoAggExpr>> = {};\n  for (const [key, val] of Object.entries(record)) {\n    if (Array.isArray(val)) {\n      result[key] = val.map((v: MongoAggExpr) => v.rewrite(rewriter));\n    } else {\n      result[key] = (val as MongoAggExpr).rewrite(rewriter);\n    }\n  }\n  return result;\n}\n\nabstract class MongoAggExprNode extends MongoAstNode {\n  abstract accept<R>(visitor: MongoAggExprVisitor<R>): R;\n  abstract rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr;\n}\n\nexport class MongoAggFieldRef extends MongoAggExprNode {\n  readonly kind = 'fieldRef' as const;\n  readonly path: string;\n\n  constructor(path: string) {\n    super();\n    if (!path) {\n      throw new Error('Field path must not be empty');\n    }\n    this.path = path;\n    this.freeze();\n  }\n\n  static of(path: string): MongoAggFieldRef {\n    return new MongoAggFieldRef(path);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.fieldRef(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    return rewriter.fieldRef ? rewriter.fieldRef(this) : this;\n  }\n}\n\nexport class MongoAggLiteral extends MongoAggExprNode {\n  readonly kind = 'literal' as const;\n  readonly value: unknown;\n\n  constructor(value: unknown) {\n    super();\n    this.value = value;\n    this.freeze();\n  }\n\n  static of(value: unknown): MongoAggLiteral {\n    return new MongoAggLiteral(value);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.literal(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    return rewriter.literal ? rewriter.literal(this) : this;\n  }\n}\n\nexport class MongoAggOperator extends MongoAggExprNode {\n  readonly kind = 'operator' as const;\n  readonly op: string;\n  readonly args: MongoAggExpr | ReadonlyArray<MongoAggExpr> | AggRecordArgs;\n\n  constructor(op: string, args: MongoAggExpr | ReadonlyArray<MongoAggExpr> | AggRecordArgs) {\n    super();\n    this.op = op;\n    if (Array.isArray(args)) {\n      this.args = Object.freeze([...args]);\n    } else if (isRecordArgs(args)) {\n      this.args = freezeRecordArgs(args);\n    } else {\n      this.args = args;\n    }\n    this.freeze();\n  }\n\n  static of(\n    op: string,\n    args: MongoAggExpr | ReadonlyArray<MongoAggExpr> | AggRecordArgs,\n  ): MongoAggOperator {\n    return new MongoAggOperator(op, args);\n  }\n\n  static add(...args: ReadonlyArray<MongoAggExpr>): MongoAggOperator {\n    return new MongoAggOperator('$add', args);\n  }\n\n  static subtract(left: MongoAggExpr, right: MongoAggExpr): MongoAggOperator {\n    return new MongoAggOperator('$subtract', [left, right]);\n  }\n\n  static multiply(...args: ReadonlyArray<MongoAggExpr>): MongoAggOperator {\n    return new MongoAggOperator('$multiply', args);\n  }\n\n  static divide(dividend: MongoAggExpr, divisor: MongoAggExpr): MongoAggOperator {\n    return new MongoAggOperator('$divide', [dividend, divisor]);\n  }\n\n  static concat(...args: ReadonlyArray<MongoAggExpr>): MongoAggOperator {\n    return new MongoAggOperator('$concat', args);\n  }\n\n  static toLower(expr: MongoAggExpr): MongoAggOperator {\n    return new MongoAggOperator('$toLower', expr);\n  }\n\n  static toUpper(expr: MongoAggExpr): MongoAggOperator {\n    return new MongoAggOperator('$toUpper', expr);\n  }\n\n  static size(expr: MongoAggExpr): MongoAggOperator {\n    return new MongoAggOperator('$size', expr);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.operator(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    const { args } = this;\n    let rewrittenArgs: MongoAggExpr | ReadonlyArray<MongoAggExpr> | AggRecordArgs;\n    if (isExprArray(args)) {\n      rewrittenArgs = args.map((a) => a.rewrite(rewriter));\n    } else if (isRecordArgs(args)) {\n      rewrittenArgs = rewriteRecordArgs(args, rewriter);\n    } else {\n      rewrittenArgs = args.rewrite(rewriter);\n    }\n    const rebuilt = new MongoAggOperator(this.op, rewrittenArgs);\n    return rewriter.operator ? rewriter.operator(rebuilt) : rebuilt;\n  }\n}\n\nexport class MongoAggAccumulator extends MongoAggExprNode {\n  readonly kind = 'accumulator' as const;\n  readonly op: string;\n  readonly arg: MongoAggExpr | AggRecordArgs | null;\n\n  constructor(op: string, arg: MongoAggExpr | AggRecordArgs | null) {\n    super();\n    this.op = op;\n    if (arg !== null && isRecordArgs(arg)) {\n      this.arg = freezeRecordArgs(arg);\n    } else {\n      this.arg = arg;\n    }\n    this.freeze();\n  }\n\n  static of(op: string, arg: MongoAggExpr | AggRecordArgs | null): MongoAggAccumulator {\n    return new MongoAggAccumulator(op, arg);\n  }\n\n  static sum(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$sum', expr);\n  }\n\n  static avg(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$avg', expr);\n  }\n\n  static min(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$min', expr);\n  }\n\n  static max(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$max', expr);\n  }\n\n  static first(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$first', expr);\n  }\n\n  static last(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$last', expr);\n  }\n\n  static push(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$push', expr);\n  }\n\n  static addToSet(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$addToSet', expr);\n  }\n\n  static count(): MongoAggAccumulator {\n    return new MongoAggAccumulator('$count', null);\n  }\n\n  static stdDevPop(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$stdDevPop', expr);\n  }\n\n  static stdDevSamp(expr: MongoAggExpr): MongoAggAccumulator {\n    return new MongoAggAccumulator('$stdDevSamp', expr);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.accumulator(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    let rewrittenArg: MongoAggExpr | AggRecordArgs | null;\n    if (this.arg === null) {\n      rewrittenArg = null;\n    } else if (isRecordArgs(this.arg)) {\n      rewrittenArg = rewriteRecordArgs(this.arg, rewriter);\n    } else {\n      rewrittenArg = this.arg.rewrite(rewriter);\n    }\n    const rebuilt = new MongoAggAccumulator(this.op, rewrittenArg);\n    return rewriter.accumulator ? rewriter.accumulator(rebuilt) : rebuilt;\n  }\n}\n\nexport class MongoAggCond extends MongoAggExprNode {\n  readonly kind = 'cond' as const;\n  readonly condition: MongoAggExpr;\n  readonly then_: MongoAggExpr;\n  readonly else_: MongoAggExpr;\n\n  constructor(condition: MongoAggExpr, then_: MongoAggExpr, else_: MongoAggExpr) {\n    super();\n    this.condition = condition;\n    this.then_ = then_;\n    this.else_ = else_;\n    this.freeze();\n  }\n\n  static of(condition: MongoAggExpr, then_: MongoAggExpr, else_: MongoAggExpr): MongoAggCond {\n    return new MongoAggCond(condition, then_, else_);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.cond(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    const rebuilt = new MongoAggCond(\n      this.condition.rewrite(rewriter),\n      this.then_.rewrite(rewriter),\n      this.else_.rewrite(rewriter),\n    );\n    return rewriter.cond ? rewriter.cond(rebuilt) : rebuilt;\n  }\n}\n\nexport interface MongoAggSwitchBranch {\n  readonly case_: MongoAggExpr;\n  readonly then_: MongoAggExpr;\n}\n\nexport class MongoAggSwitch extends MongoAggExprNode {\n  readonly kind = 'switch' as const;\n  readonly branches: ReadonlyArray<MongoAggSwitchBranch>;\n  readonly default_: MongoAggExpr;\n\n  constructor(branches: ReadonlyArray<MongoAggSwitchBranch>, default_: MongoAggExpr) {\n    super();\n    this.branches = Object.freeze(\n      branches.map((b) => Object.freeze({ case_: b.case_, then_: b.then_ })),\n    );\n    this.default_ = default_;\n    this.freeze();\n  }\n\n  static of(branches: ReadonlyArray<MongoAggSwitchBranch>, default_: MongoAggExpr): MongoAggSwitch {\n    return new MongoAggSwitch(branches, default_);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.switch_(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    const rebuilt = new MongoAggSwitch(\n      this.branches.map((b) => ({\n        case_: b.case_.rewrite(rewriter),\n        then_: b.then_.rewrite(rewriter),\n      })),\n      this.default_.rewrite(rewriter),\n    );\n    return rewriter.switch_ ? rewriter.switch_(rebuilt) : rebuilt;\n  }\n}\n\nexport class MongoAggArrayFilter extends MongoAggExprNode {\n  readonly kind = 'filter' as const;\n  readonly input: MongoAggExpr;\n  readonly cond: MongoAggExpr;\n  readonly as: string;\n\n  constructor(input: MongoAggExpr, cond: MongoAggExpr, as: string) {\n    super();\n    this.input = input;\n    this.cond = cond;\n    this.as = as;\n    this.freeze();\n  }\n\n  static of(input: MongoAggExpr, cond: MongoAggExpr, as: string): MongoAggArrayFilter {\n    return new MongoAggArrayFilter(input, cond, as);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.filter(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    const rebuilt = new MongoAggArrayFilter(\n      this.input.rewrite(rewriter),\n      this.cond.rewrite(rewriter),\n      this.as,\n    );\n    return rewriter.filter ? rewriter.filter(rebuilt) : rebuilt;\n  }\n}\n\nexport class MongoAggMap extends MongoAggExprNode {\n  readonly kind = 'map' as const;\n  readonly input: MongoAggExpr;\n  readonly in_: MongoAggExpr;\n  readonly as: string;\n\n  constructor(input: MongoAggExpr, in_: MongoAggExpr, as: string) {\n    super();\n    this.input = input;\n    this.in_ = in_;\n    this.as = as;\n    this.freeze();\n  }\n\n  static of(input: MongoAggExpr, in_: MongoAggExpr, as: string): MongoAggMap {\n    return new MongoAggMap(input, in_, as);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.map(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    const rebuilt = new MongoAggMap(\n      this.input.rewrite(rewriter),\n      this.in_.rewrite(rewriter),\n      this.as,\n    );\n    return rewriter.map ? rewriter.map(rebuilt) : rebuilt;\n  }\n}\n\nexport class MongoAggReduce extends MongoAggExprNode {\n  readonly kind = 'reduce' as const;\n  readonly input: MongoAggExpr;\n  readonly initialValue: MongoAggExpr;\n  readonly in_: MongoAggExpr;\n\n  constructor(input: MongoAggExpr, initialValue: MongoAggExpr, in_: MongoAggExpr) {\n    super();\n    this.input = input;\n    this.initialValue = initialValue;\n    this.in_ = in_;\n    this.freeze();\n  }\n\n  static of(input: MongoAggExpr, initialValue: MongoAggExpr, in_: MongoAggExpr): MongoAggReduce {\n    return new MongoAggReduce(input, initialValue, in_);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.reduce(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    const rebuilt = new MongoAggReduce(\n      this.input.rewrite(rewriter),\n      this.initialValue.rewrite(rewriter),\n      this.in_.rewrite(rewriter),\n    );\n    return rewriter.reduce ? rewriter.reduce(rebuilt) : rebuilt;\n  }\n}\n\nexport class MongoAggLet extends MongoAggExprNode {\n  readonly kind = 'let' as const;\n  readonly vars: Readonly<Record<string, MongoAggExpr>>;\n  readonly in_: MongoAggExpr;\n\n  constructor(vars: Record<string, MongoAggExpr>, in_: MongoAggExpr) {\n    super();\n    this.vars = Object.freeze({ ...vars });\n    this.in_ = in_;\n    this.freeze();\n  }\n\n  static of(vars: Record<string, MongoAggExpr>, in_: MongoAggExpr): MongoAggLet {\n    return new MongoAggLet(vars, in_);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.let_(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    const rewrittenVars: Record<string, MongoAggExpr> = {};\n    for (const [key, val] of Object.entries(this.vars)) {\n      rewrittenVars[key] = val.rewrite(rewriter);\n    }\n    const rebuilt = new MongoAggLet(rewrittenVars, this.in_.rewrite(rewriter));\n    return rewriter.let_ ? rewriter.let_(rebuilt) : rebuilt;\n  }\n}\n\nexport class MongoAggMergeObjects extends MongoAggExprNode {\n  readonly kind = 'mergeObjects' as const;\n  readonly exprs: ReadonlyArray<MongoAggExpr>;\n\n  constructor(exprs: ReadonlyArray<MongoAggExpr>) {\n    super();\n    this.exprs = Object.freeze([...exprs]);\n    this.freeze();\n  }\n\n  static of(exprs: ReadonlyArray<MongoAggExpr>): MongoAggMergeObjects {\n    return new MongoAggMergeObjects(exprs);\n  }\n\n  accept<R>(visitor: MongoAggExprVisitor<R>): R {\n    return visitor.mergeObjects(this);\n  }\n\n  rewrite(rewriter: MongoAggExprRewriter): MongoAggExpr {\n    const rebuilt = new MongoAggMergeObjects(this.exprs.map((e) => e.rewrite(rewriter)));\n    return rewriter.mergeObjects ? rewriter.mergeObjects(rebuilt) : rebuilt;\n  }\n}\n\nexport type MongoAggExpr =\n  | MongoAggFieldRef\n  | MongoAggLiteral\n  | MongoAggOperator\n  | MongoAggAccumulator\n  | MongoAggCond\n  | MongoAggSwitch\n  | MongoAggArrayFilter\n  | MongoAggMap\n  | MongoAggReduce\n  | MongoAggLet\n  | MongoAggMergeObjects;\n","import type { MongoValue } from '@prisma-next/mongo-value';\nimport { MongoAstNode } from './ast-node';\nimport type { MongoFilterExpr } from './filter-expressions';\nimport type { RawMongoCommand } from './raw-commands';\nimport type { MongoPipelineStage, MongoUpdatePipelineStage } from './stages';\nexport type MongoUpdateSpec = Record<string, MongoValue> | ReadonlyArray<MongoUpdatePipelineStage>;\n\nexport class InsertOneCommand extends MongoAstNode {\n  readonly kind = 'insertOne' as const;\n  readonly collection: string;\n  readonly document: Record<string, MongoValue>;\n\n  constructor(collection: string, document: Record<string, MongoValue>) {\n    super();\n    this.collection = collection;\n    this.document = document;\n    this.freeze();\n  }\n}\n\nexport class UpdateOneCommand extends MongoAstNode {\n  readonly kind = 'updateOne' as const;\n  readonly collection: string;\n  readonly filter: MongoFilterExpr;\n  readonly update: MongoUpdateSpec;\n  /**\n   * When true, the wire command becomes an upsert: if no document matches\n   * `filter`, a new document is inserted, derived from the filter's\n   * equality fields plus the update spec. Defaults to false.\n   */\n  readonly upsert: boolean;\n\n  constructor(\n    collection: string,\n    filter: MongoFilterExpr,\n    update: MongoUpdateSpec,\n    upsert = false,\n  ) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.update = update;\n    this.upsert = upsert;\n    this.freeze();\n  }\n}\n\nexport class DeleteOneCommand extends MongoAstNode {\n  readonly kind = 'deleteOne' as const;\n  readonly collection: string;\n  readonly filter: MongoFilterExpr;\n\n  constructor(collection: string, filter: MongoFilterExpr) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.freeze();\n  }\n}\n\nexport class InsertManyCommand extends MongoAstNode {\n  readonly kind = 'insertMany' as const;\n  readonly collection: string;\n  readonly documents: ReadonlyArray<Record<string, MongoValue>>;\n\n  constructor(collection: string, documents: ReadonlyArray<Record<string, MongoValue>>) {\n    super();\n    this.collection = collection;\n    this.documents = documents;\n    this.freeze();\n  }\n}\n\nexport class UpdateManyCommand extends MongoAstNode {\n  readonly kind = 'updateMany' as const;\n  readonly collection: string;\n  readonly filter: MongoFilterExpr;\n  readonly update: MongoUpdateSpec;\n  /**\n   * Upsert flag — see `UpdateOneCommand.upsert`. For `updateMany`, Mongo\n   * inserts at most one document when no match exists (driver-side\n   * constraint).\n   */\n  readonly upsert: boolean;\n\n  constructor(\n    collection: string,\n    filter: MongoFilterExpr,\n    update: MongoUpdateSpec,\n    upsert = false,\n  ) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.update = update;\n    this.upsert = upsert;\n    this.freeze();\n  }\n}\n\nexport class DeleteManyCommand extends MongoAstNode {\n  readonly kind = 'deleteMany' as const;\n  readonly collection: string;\n  readonly filter: MongoFilterExpr;\n\n  constructor(collection: string, filter: MongoFilterExpr) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.freeze();\n  }\n}\n\nexport class FindOneAndUpdateCommand extends MongoAstNode {\n  readonly kind = 'findOneAndUpdate' as const;\n  readonly collection: string;\n  readonly filter: MongoFilterExpr;\n  readonly update: MongoUpdateSpec;\n  readonly upsert: boolean;\n  readonly sort: Record<string, 1 | -1> | undefined;\n  readonly returnDocument: 'before' | 'after';\n\n  constructor(\n    collection: string,\n    filter: MongoFilterExpr,\n    update: MongoUpdateSpec,\n    upsert = false,\n    sort?: Record<string, 1 | -1>,\n    returnDocument: 'before' | 'after' = 'after',\n  ) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.update = update;\n    this.upsert = upsert;\n    this.sort = sort;\n    this.returnDocument = returnDocument;\n    this.freeze();\n  }\n}\n\nexport class FindOneAndDeleteCommand extends MongoAstNode {\n  readonly kind = 'findOneAndDelete' as const;\n  readonly collection: string;\n  readonly filter: MongoFilterExpr;\n  readonly sort: Record<string, 1 | -1> | undefined;\n\n  constructor(collection: string, filter: MongoFilterExpr, sort?: Record<string, 1 | -1>) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.sort = sort;\n    this.freeze();\n  }\n}\n\nexport class AggregateCommand extends MongoAstNode {\n  readonly kind = 'aggregate' as const;\n  readonly collection: string;\n  readonly pipeline: ReadonlyArray<MongoPipelineStage>;\n\n  constructor(collection: string, pipeline: ReadonlyArray<MongoPipelineStage>) {\n    super();\n    this.collection = collection;\n    this.pipeline = pipeline;\n    this.freeze();\n  }\n}\n\nexport type AnyMongoCommand =\n  | InsertOneCommand\n  | InsertManyCommand\n  | UpdateOneCommand\n  | UpdateManyCommand\n  | DeleteOneCommand\n  | DeleteManyCommand\n  | FindOneAndUpdateCommand\n  | FindOneAndDeleteCommand\n  | AggregateCommand\n  | RawMongoCommand;\n","import type { Document } from '@prisma-next/mongo-value';\nimport { MongoAstNode } from './ast-node';\n\nexport class RawAggregateCommand extends MongoAstNode {\n  readonly kind = 'rawAggregate' as const;\n  readonly collection: string;\n  readonly pipeline: ReadonlyArray<Document>;\n\n  constructor(collection: string, pipeline: ReadonlyArray<Document>) {\n    super();\n    this.collection = collection;\n    this.pipeline = pipeline;\n    this.freeze();\n  }\n}\n\nexport class RawInsertOneCommand extends MongoAstNode {\n  readonly kind = 'rawInsertOne' as const;\n  readonly collection: string;\n  readonly document: Document;\n\n  constructor(collection: string, document: Document) {\n    super();\n    this.collection = collection;\n    this.document = document;\n    this.freeze();\n  }\n}\n\nexport class RawInsertManyCommand extends MongoAstNode {\n  readonly kind = 'rawInsertMany' as const;\n  readonly collection: string;\n  readonly documents: ReadonlyArray<Document>;\n\n  constructor(collection: string, documents: ReadonlyArray<Document>) {\n    super();\n    this.collection = collection;\n    this.documents = documents;\n    this.freeze();\n  }\n}\n\nexport class RawUpdateOneCommand extends MongoAstNode {\n  readonly kind = 'rawUpdateOne' as const;\n  readonly collection: string;\n  readonly filter: Document;\n  readonly update: Document | ReadonlyArray<Document>;\n\n  constructor(collection: string, filter: Document, update: Document | ReadonlyArray<Document>) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.update = update;\n    this.freeze();\n  }\n}\n\nexport class RawUpdateManyCommand extends MongoAstNode {\n  readonly kind = 'rawUpdateMany' as const;\n  readonly collection: string;\n  readonly filter: Document;\n  readonly update: Document | ReadonlyArray<Document>;\n\n  constructor(collection: string, filter: Document, update: Document | ReadonlyArray<Document>) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.update = update;\n    this.freeze();\n  }\n}\n\nexport class RawDeleteOneCommand extends MongoAstNode {\n  readonly kind = 'rawDeleteOne' as const;\n  readonly collection: string;\n  readonly filter: Document;\n\n  constructor(collection: string, filter: Document) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.freeze();\n  }\n}\n\nexport class RawDeleteManyCommand extends MongoAstNode {\n  readonly kind = 'rawDeleteMany' as const;\n  readonly collection: string;\n  readonly filter: Document;\n\n  constructor(collection: string, filter: Document) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.freeze();\n  }\n}\n\nexport class RawFindOneAndUpdateCommand extends MongoAstNode {\n  readonly kind = 'rawFindOneAndUpdate' as const;\n  readonly collection: string;\n  readonly filter: Document;\n  readonly update: Document | ReadonlyArray<Document>;\n  readonly upsert: boolean;\n  readonly sort: Record<string, 1 | -1> | undefined;\n  /**\n   * When `undefined`, the option is omitted from the wire command and the\n   * MongoDB driver applies its documented default (return the pre-image\n   * document). Set explicitly to `'before'` or `'after'` to override.\n   */\n  readonly returnDocument: 'before' | 'after' | undefined;\n\n  constructor(\n    collection: string,\n    filter: Document,\n    update: Document | ReadonlyArray<Document>,\n    upsert = false,\n    sort?: Record<string, 1 | -1>,\n    returnDocument?: 'before' | 'after',\n  ) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.update = update;\n    this.upsert = upsert;\n    this.sort = sort;\n    this.returnDocument = returnDocument;\n    this.freeze();\n  }\n}\n\nexport class RawFindOneAndDeleteCommand extends MongoAstNode {\n  readonly kind = 'rawFindOneAndDelete' as const;\n  readonly collection: string;\n  readonly filter: Document;\n  readonly sort: Record<string, 1 | -1> | undefined;\n\n  constructor(collection: string, filter: Document, sort?: Record<string, 1 | -1>) {\n    super();\n    this.collection = collection;\n    this.filter = filter;\n    this.sort = sort;\n    this.freeze();\n  }\n}\n\nexport type RawMongoCommand =\n  | RawAggregateCommand\n  | RawInsertOneCommand\n  | RawInsertManyCommand\n  | RawUpdateOneCommand\n  | RawUpdateManyCommand\n  | RawDeleteOneCommand\n  | RawDeleteManyCommand\n  | RawFindOneAndUpdateCommand\n  | RawFindOneAndDeleteCommand;\n","export type MongoResultShape =\n  | { readonly kind: 'document'; readonly fields: Readonly<Record<string, MongoFieldShape>> }\n  | { readonly kind: 'unknown' };\n\nexport type MongoFieldShape =\n  | { readonly kind: 'leaf'; readonly codecId: string; readonly nullable: boolean }\n  | {\n      readonly kind: 'document';\n      readonly nullable: boolean;\n      readonly fields: Readonly<Record<string, MongoFieldShape>>;\n    }\n  | { readonly kind: 'array'; readonly nullable: boolean; readonly element: MongoFieldShape }\n  | { readonly kind: 'unknown' };\n\nexport function freezeMongoFieldShape(shape: MongoFieldShape): MongoFieldShape {\n  switch (shape.kind) {\n    case 'unknown':\n      return Object.freeze({ kind: 'unknown' as const });\n    case 'leaf':\n      return Object.freeze({\n        kind: 'leaf' as const,\n        codecId: shape.codecId,\n        nullable: shape.nullable,\n      });\n    case 'document': {\n      const fields: Record<string, MongoFieldShape> = {};\n      for (const [k, v] of Object.entries(shape.fields)) {\n        fields[k] = freezeMongoFieldShape(v);\n      }\n      return Object.freeze({\n        kind: 'document' as const,\n        nullable: shape.nullable,\n        fields: Object.freeze(fields),\n      });\n    }\n    case 'array':\n      return Object.freeze({\n        kind: 'array' as const,\n        nullable: shape.nullable,\n        element: freezeMongoFieldShape(shape.element),\n      });\n    default: {\n      const _exhaustive: never = shape;\n      return _exhaustive;\n    }\n  }\n}\n\nexport function freezeMongoResultShape(shape: MongoResultShape): MongoResultShape {\n  if (shape.kind === 'unknown') {\n    return Object.freeze({ kind: 'unknown' as const });\n  }\n  const fields: Record<string, MongoFieldShape> = {};\n  for (const [k, v] of Object.entries(shape.fields)) {\n    fields[k] = freezeMongoFieldShape(v);\n  }\n  return Object.freeze({\n    kind: 'document' as const,\n    fields: Object.freeze(fields),\n  });\n}\n","import type { MongoAggAccumulator, MongoAggExpr } from './aggregation-expressions';\nimport { MongoAstNode } from './ast-node';\nimport type { MongoFilterExpr } from './filter-expressions';\nimport type {\n  MongoAggExprRewriter,\n  MongoStageRewriterContext,\n  MongoStageVisitor,\n} from './visitors';\n\nexport type MongoGroupId = null | MongoAggExpr | Readonly<Record<string, MongoAggExpr>>;\nexport type MongoProjectionValue = 0 | 1 | MongoAggExpr;\n\n// Structural guard: MongoAggExpr nodes always carry a `kind` string discriminant,\n// while scalar projection values (0 | 1) are numbers. This convention holds for all\n// current AST node types. If non-node objects with `kind` are introduced in the future,\n// consider a shared branded isAggExprNode() guard.\nfunction isAggExpr(value: MongoProjectionValue): value is MongoAggExpr {\n  return typeof value === 'object' && value !== null && 'kind' in value;\n}\n\n// Discriminate MongoAggExpr from Record<string, MongoAggExpr> via the accept() method\n// that all AST nodes inherit from MongoAstNode. A plain record won't have accept(),\n// so this is robust even if a compound _id contains a key named \"kind\".\nfunction isAggExprNode(value: object): value is MongoAggExpr {\n  return 'accept' in value && typeof value.accept === 'function';\n}\n\nfunction rewriteGroupId(groupId: MongoGroupId, rewriter: MongoAggExprRewriter): MongoGroupId {\n  if (groupId === null) return null;\n  if (isAggExprNode(groupId)) return groupId.rewrite(rewriter);\n  const result: Record<string, MongoAggExpr> = {};\n  for (const [key, val] of Object.entries(groupId)) {\n    result[key] = val.rewrite(rewriter);\n  }\n  return result;\n}\n\nfunction rewriteExprRecord(\n  fields: Readonly<Record<string, MongoAggExpr>>,\n  rewriter: MongoAggExprRewriter,\n): Record<string, MongoAggExpr> {\n  const result: Record<string, MongoAggExpr> = {};\n  for (const [key, val] of Object.entries(fields)) {\n    result[key] = val.rewrite(rewriter);\n  }\n  return result;\n}\n\nfunction rewriteAccumulatorRecord(\n  accumulators: Readonly<Record<string, MongoAggAccumulator>>,\n  rewriter: MongoAggExprRewriter,\n): Record<string, MongoAggAccumulator> {\n  const result: Record<string, MongoAggAccumulator> = {};\n  for (const [key, acc] of Object.entries(accumulators)) {\n    result[key] = acc.rewrite(rewriter) as MongoAggAccumulator;\n  }\n  return result;\n}\n\nabstract class MongoStageNode extends MongoAstNode {\n  abstract accept<R>(visitor: MongoStageVisitor<R>): R;\n  abstract rewrite(context: MongoStageRewriterContext): MongoPipelineStage;\n}\n\nexport class MongoMatchStage extends MongoStageNode {\n  readonly kind = 'match' as const;\n  readonly filter: MongoFilterExpr;\n\n  constructor(filter: MongoFilterExpr) {\n    super();\n    this.filter = filter;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.match(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    return new MongoMatchStage(this.filter.rewrite(context.filter ?? {}));\n  }\n}\n\nexport class MongoProjectStage extends MongoStageNode {\n  readonly kind = 'project' as const;\n  readonly projection: Readonly<Record<string, MongoProjectionValue>>;\n\n  constructor(projection: Record<string, MongoProjectionValue>) {\n    super();\n    this.projection = Object.freeze({ ...projection });\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.project(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    let hasExpr = false;\n    for (const val of Object.values(this.projection)) {\n      if (isAggExpr(val)) {\n        hasExpr = true;\n        break;\n      }\n    }\n    if (!hasExpr) return this;\n    const newProjection: Record<string, MongoProjectionValue> = {};\n    for (const [key, val] of Object.entries(this.projection)) {\n      newProjection[key] = isAggExpr(val) ? val.rewrite(rewriter) : val;\n    }\n    return new MongoProjectStage(newProjection);\n  }\n}\n\nexport class MongoSortStage extends MongoStageNode {\n  readonly kind = 'sort' as const;\n  readonly sort: Readonly<Record<string, 1 | -1>>;\n\n  constructor(sort: Record<string, 1 | -1>) {\n    super();\n    this.sort = Object.freeze({ ...sort });\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.sort(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport class MongoLimitStage extends MongoStageNode {\n  readonly kind = 'limit' as const;\n  readonly limit: number;\n\n  constructor(limit: number) {\n    super();\n    if (!Number.isInteger(limit) || limit < 0) {\n      throw new RangeError('limit must be a non-negative integer');\n    }\n    this.limit = limit;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.limit(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport class MongoSkipStage extends MongoStageNode {\n  readonly kind = 'skip' as const;\n  readonly skip: number;\n\n  constructor(skip: number) {\n    super();\n    if (!Number.isInteger(skip) || skip < 0) {\n      throw new RangeError('skip must be a non-negative integer');\n    }\n    this.skip = skip;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.skip(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport class MongoLookupStage extends MongoStageNode {\n  readonly kind = 'lookup' as const;\n  readonly from: string;\n  readonly localField: string | undefined;\n  readonly foreignField: string | undefined;\n  readonly as: string;\n  readonly pipeline: ReadonlyArray<MongoPipelineStage> | undefined;\n  readonly let_: Readonly<Record<string, MongoAggExpr>> | undefined;\n\n  constructor(options: {\n    from: string;\n    localField?: string;\n    foreignField?: string;\n    as: string;\n    pipeline?: ReadonlyArray<MongoPipelineStage>;\n    let_?: Record<string, MongoAggExpr>;\n  }) {\n    super();\n    const hasLocalField = options.localField !== undefined;\n    const hasForeignField = options.foreignField !== undefined;\n    const hasPipeline = !!options.pipeline;\n    if (hasLocalField !== hasForeignField) {\n      throw new Error('MongoLookupStage requires both localField and foreignField together');\n    }\n    if (!hasLocalField && !hasPipeline) {\n      throw new Error(\n        'MongoLookupStage requires either equality fields (localField/foreignField) or a pipeline',\n      );\n    }\n    if (options.let_ && !hasPipeline) {\n      throw new Error('MongoLookupStage let_ requires a pipeline');\n    }\n    this.from = options.from;\n    this.localField = options.localField;\n    this.foreignField = options.foreignField;\n    this.as = options.as;\n    this.pipeline = options.pipeline ? Object.freeze([...options.pipeline]) : undefined;\n    this.let_ = options.let_ ? Object.freeze({ ...options.let_ }) : undefined;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.lookup(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    if (!this.pipeline && !this.let_) return this;\n    const rewrittenLet =\n      this.let_ && context.aggExpr ? rewriteExprRecord(this.let_, context.aggExpr) : this.let_;\n    const options: {\n      from: string;\n      localField?: string;\n      foreignField?: string;\n      as: string;\n      pipeline?: ReadonlyArray<MongoPipelineStage>;\n      let_?: Record<string, MongoAggExpr>;\n    } = { from: this.from, as: this.as };\n    if (this.localField !== undefined) options.localField = this.localField;\n    if (this.foreignField !== undefined) options.foreignField = this.foreignField;\n    if (this.pipeline) options.pipeline = this.pipeline.map((stage) => stage.rewrite(context));\n    if (rewrittenLet) options.let_ = { ...rewrittenLet };\n    return new MongoLookupStage(options);\n  }\n}\n\nexport class MongoUnwindStage extends MongoStageNode {\n  readonly kind = 'unwind' as const;\n  readonly path: string;\n  readonly preserveNullAndEmptyArrays: boolean;\n  readonly includeArrayIndex: string | undefined;\n\n  constructor(path: string, preserveNullAndEmptyArrays: boolean, includeArrayIndex?: string) {\n    super();\n    this.path = path;\n    this.preserveNullAndEmptyArrays = preserveNullAndEmptyArrays;\n    this.includeArrayIndex = includeArrayIndex;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.unwind(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport class MongoGroupStage extends MongoStageNode {\n  readonly kind = 'group' as const;\n  readonly groupId: MongoGroupId;\n  readonly accumulators: Readonly<Record<string, MongoAggAccumulator>>;\n\n  constructor(groupId: MongoGroupId, accumulators: Record<string, MongoAggAccumulator>) {\n    super();\n    this.groupId = groupId;\n    this.accumulators = Object.freeze({ ...accumulators });\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.group(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    const newAccumulators: Record<string, MongoAggAccumulator> = {};\n    for (const [key, acc] of Object.entries(this.accumulators)) {\n      // MongoAggAccumulator.rewrite() returns MongoAggExpr (the base union). The cast is safe\n      // because the default rewriter rebuilds an accumulator from its rewritten arg. A custom\n      // accumulator() hook could technically return a non-accumulator — narrowing the return type\n      // on MongoAggAccumulator.rewrite() is tracked as a follow-up for the agg expression AST.\n      newAccumulators[key] = acc.rewrite(rewriter) as MongoAggAccumulator;\n    }\n    return new MongoGroupStage(rewriteGroupId(this.groupId, rewriter), newAccumulators);\n  }\n}\n\nexport class MongoAddFieldsStage extends MongoStageNode {\n  readonly kind = 'addFields' as const;\n  readonly fields: Readonly<Record<string, MongoAggExpr>>;\n\n  constructor(fields: Record<string, MongoAggExpr>) {\n    super();\n    this.fields = Object.freeze({ ...fields });\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.addFields(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    return new MongoAddFieldsStage(rewriteExprRecord(this.fields, rewriter));\n  }\n}\n\nexport class MongoReplaceRootStage extends MongoStageNode {\n  readonly kind = 'replaceRoot' as const;\n  readonly newRoot: MongoAggExpr;\n\n  constructor(newRoot: MongoAggExpr) {\n    super();\n    this.newRoot = newRoot;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.replaceRoot(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    return new MongoReplaceRootStage(this.newRoot.rewrite(rewriter));\n  }\n}\n\nexport class MongoCountStage extends MongoStageNode {\n  readonly kind = 'count' as const;\n  readonly field: string;\n\n  constructor(field: string) {\n    super();\n    this.field = field;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.count(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport class MongoSortByCountStage extends MongoStageNode {\n  readonly kind = 'sortByCount' as const;\n  readonly expr: MongoAggExpr;\n\n  constructor(expr: MongoAggExpr) {\n    super();\n    this.expr = expr;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.sortByCount(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    return new MongoSortByCountStage(this.expr.rewrite(rewriter));\n  }\n}\n\nexport class MongoSampleStage extends MongoStageNode {\n  readonly kind = 'sample' as const;\n  readonly size: number;\n\n  constructor(size: number) {\n    super();\n    if (!Number.isInteger(size) || size < 0) {\n      throw new RangeError('size must be a non-negative integer');\n    }\n    this.size = size;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.sample(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport class MongoRedactStage extends MongoStageNode {\n  readonly kind = 'redact' as const;\n  readonly expr: MongoAggExpr;\n\n  constructor(expr: MongoAggExpr) {\n    super();\n    this.expr = expr;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.redact(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    return new MongoRedactStage(this.expr.rewrite(rewriter));\n  }\n}\n\nexport class MongoOutStage extends MongoStageNode {\n  readonly kind = 'out' as const;\n  readonly collection: string;\n  readonly db: string | undefined;\n\n  constructor(collection: string, db?: string) {\n    super();\n    this.collection = collection;\n    this.db = db;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.out(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport class MongoUnionWithStage extends MongoStageNode {\n  readonly kind = 'unionWith' as const;\n  readonly collection: string;\n  readonly pipeline: ReadonlyArray<MongoPipelineStage> | undefined;\n\n  constructor(collection: string, pipeline?: ReadonlyArray<MongoPipelineStage>) {\n    super();\n    this.collection = collection;\n    this.pipeline = pipeline ? Object.freeze([...pipeline]) : undefined;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.unionWith(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    if (!this.pipeline) return this;\n    return new MongoUnionWithStage(\n      this.collection,\n      this.pipeline.map((stage) => stage.rewrite(context)),\n    );\n  }\n}\n\nexport class MongoBucketStage extends MongoStageNode {\n  readonly kind = 'bucket' as const;\n  readonly groupBy: MongoAggExpr;\n  readonly boundaries: ReadonlyArray<unknown>;\n  readonly default_: unknown;\n  readonly output: Readonly<Record<string, MongoAggAccumulator>> | undefined;\n\n  constructor(options: {\n    groupBy: MongoAggExpr;\n    boundaries: ReadonlyArray<unknown>;\n    default_?: unknown;\n    output?: Record<string, MongoAggAccumulator>;\n  }) {\n    super();\n    if (options.boundaries.length < 2) {\n      throw new RangeError('boundaries must contain at least 2 values');\n    }\n    this.groupBy = options.groupBy;\n    this.boundaries = Object.freeze([...options.boundaries]);\n    this.default_ = options.default_;\n    this.output = options.output ? Object.freeze({ ...options.output }) : undefined;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.bucket(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    const opts: {\n      groupBy: MongoAggExpr;\n      boundaries: ReadonlyArray<unknown>;\n      default_?: unknown;\n      output?: Record<string, MongoAggAccumulator>;\n    } = { groupBy: this.groupBy.rewrite(rewriter), boundaries: this.boundaries };\n    if (this.default_ !== undefined) opts.default_ = this.default_;\n    if (this.output) opts.output = rewriteAccumulatorRecord(this.output, rewriter);\n    return new MongoBucketStage(opts);\n  }\n}\n\nexport class MongoBucketAutoStage extends MongoStageNode {\n  readonly kind = 'bucketAuto' as const;\n  readonly groupBy: MongoAggExpr;\n  readonly buckets: number;\n  readonly output: Readonly<Record<string, MongoAggAccumulator>> | undefined;\n  readonly granularity: string | undefined;\n\n  constructor(options: {\n    groupBy: MongoAggExpr;\n    buckets: number;\n    output?: Record<string, MongoAggAccumulator>;\n    granularity?: string;\n  }) {\n    super();\n    if (!Number.isInteger(options.buckets) || options.buckets < 1) {\n      throw new RangeError('buckets must be a positive integer');\n    }\n    this.groupBy = options.groupBy;\n    this.buckets = options.buckets;\n    this.output = options.output ? Object.freeze({ ...options.output }) : undefined;\n    this.granularity = options.granularity;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.bucketAuto(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    const opts: {\n      groupBy: MongoAggExpr;\n      buckets: number;\n      output?: Record<string, MongoAggAccumulator>;\n      granularity?: string;\n    } = { groupBy: this.groupBy.rewrite(rewriter), buckets: this.buckets };\n    if (this.output) opts.output = rewriteAccumulatorRecord(this.output, rewriter);\n    if (this.granularity !== undefined) opts.granularity = this.granularity;\n    return new MongoBucketAutoStage(opts);\n  }\n}\n\nexport class MongoGeoNearStage extends MongoStageNode {\n  readonly kind = 'geoNear' as const;\n  readonly near: unknown;\n  readonly distanceField: string;\n  readonly spherical: boolean | undefined;\n  readonly maxDistance: number | undefined;\n  readonly minDistance: number | undefined;\n  readonly query: MongoFilterExpr | undefined;\n  readonly key: string | undefined;\n  readonly distanceMultiplier: number | undefined;\n  readonly includeLocs: string | undefined;\n\n  constructor(options: {\n    near: unknown;\n    distanceField: string;\n    spherical?: boolean;\n    maxDistance?: number;\n    minDistance?: number;\n    query?: MongoFilterExpr;\n    key?: string;\n    distanceMultiplier?: number;\n    includeLocs?: string;\n  }) {\n    super();\n    this.near = options.near;\n    this.distanceField = options.distanceField;\n    this.spherical = options.spherical;\n    this.maxDistance = options.maxDistance;\n    this.minDistance = options.minDistance;\n    this.query = options.query;\n    this.key = options.key;\n    this.distanceMultiplier = options.distanceMultiplier;\n    this.includeLocs = options.includeLocs;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.geoNear(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    if (!this.query || !context.filter) return this;\n    const opts: {\n      near: unknown;\n      distanceField: string;\n      spherical?: boolean;\n      maxDistance?: number;\n      minDistance?: number;\n      query?: MongoFilterExpr;\n      key?: string;\n      distanceMultiplier?: number;\n      includeLocs?: string;\n    } = { near: this.near, distanceField: this.distanceField };\n    if (this.spherical !== undefined) opts.spherical = this.spherical;\n    if (this.maxDistance !== undefined) opts.maxDistance = this.maxDistance;\n    if (this.minDistance !== undefined) opts.minDistance = this.minDistance;\n    opts.query = this.query.rewrite(context.filter);\n    if (this.key !== undefined) opts.key = this.key;\n    if (this.distanceMultiplier !== undefined) opts.distanceMultiplier = this.distanceMultiplier;\n    if (this.includeLocs !== undefined) opts.includeLocs = this.includeLocs;\n    return new MongoGeoNearStage(opts);\n  }\n}\n\nexport class MongoFacetStage extends MongoStageNode {\n  readonly kind = 'facet' as const;\n  readonly facets: Readonly<Record<string, ReadonlyArray<MongoPipelineStage>>>;\n\n  constructor(facets: Record<string, ReadonlyArray<MongoPipelineStage>>) {\n    super();\n    const frozen: Record<string, ReadonlyArray<MongoPipelineStage>> = {};\n    for (const [key, pipeline] of Object.entries(facets)) {\n      frozen[key] = Object.freeze([...pipeline]);\n    }\n    this.facets = Object.freeze(frozen);\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.facet(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const newFacets: Record<string, ReadonlyArray<MongoPipelineStage>> = {};\n    for (const [key, pipeline] of Object.entries(this.facets)) {\n      newFacets[key] = pipeline.map((stage) => stage.rewrite(context));\n    }\n    return new MongoFacetStage(newFacets);\n  }\n}\n\nexport class MongoGraphLookupStage extends MongoStageNode {\n  readonly kind = 'graphLookup' as const;\n  readonly from: string;\n  readonly startWith: MongoAggExpr;\n  readonly connectFromField: string;\n  readonly connectToField: string;\n  readonly as: string;\n  readonly maxDepth: number | undefined;\n  readonly depthField: string | undefined;\n  readonly restrictSearchWithMatch: MongoFilterExpr | undefined;\n\n  constructor(options: {\n    from: string;\n    startWith: MongoAggExpr;\n    connectFromField: string;\n    connectToField: string;\n    as: string;\n    maxDepth?: number;\n    depthField?: string;\n    restrictSearchWithMatch?: MongoFilterExpr;\n  }) {\n    super();\n    this.from = options.from;\n    this.startWith = options.startWith;\n    this.connectFromField = options.connectFromField;\n    this.connectToField = options.connectToField;\n    this.as = options.as;\n    this.maxDepth = options.maxDepth;\n    this.depthField = options.depthField;\n    this.restrictSearchWithMatch = options.restrictSearchWithMatch;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.graphLookup(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewrittenStartWith = context.aggExpr\n      ? this.startWith.rewrite(context.aggExpr)\n      : this.startWith;\n    const rewrittenMatch =\n      this.restrictSearchWithMatch && context.filter\n        ? this.restrictSearchWithMatch.rewrite(context.filter)\n        : this.restrictSearchWithMatch;\n    if (rewrittenStartWith === this.startWith && rewrittenMatch === this.restrictSearchWithMatch) {\n      return this;\n    }\n    const opts: {\n      from: string;\n      startWith: MongoAggExpr;\n      connectFromField: string;\n      connectToField: string;\n      as: string;\n      maxDepth?: number;\n      depthField?: string;\n      restrictSearchWithMatch?: MongoFilterExpr;\n    } = {\n      from: this.from,\n      startWith: rewrittenStartWith,\n      connectFromField: this.connectFromField,\n      connectToField: this.connectToField,\n      as: this.as,\n    };\n    if (this.maxDepth !== undefined) opts.maxDepth = this.maxDepth;\n    if (this.depthField !== undefined) opts.depthField = this.depthField;\n    if (rewrittenMatch) opts.restrictSearchWithMatch = rewrittenMatch;\n    return new MongoGraphLookupStage(opts);\n  }\n}\n\nexport class MongoMergeStage extends MongoStageNode {\n  readonly kind = 'merge' as const;\n  readonly into: string | { readonly db: string; readonly coll: string };\n  readonly on: string | ReadonlyArray<string> | undefined;\n  readonly whenMatched: string | ReadonlyArray<MongoUpdatePipelineStage> | undefined;\n  readonly whenNotMatched: string | undefined;\n\n  constructor(options: {\n    into: string | { db: string; coll: string };\n    on?: string | ReadonlyArray<string>;\n    whenMatched?: string | ReadonlyArray<MongoUpdatePipelineStage>;\n    whenNotMatched?: string;\n  }) {\n    super();\n    this.into =\n      typeof options.into === 'string' ? options.into : Object.freeze({ ...options.into });\n    this.on =\n      options.on === undefined\n        ? undefined\n        : typeof options.on === 'string'\n          ? options.on\n          : Object.freeze([...options.on]);\n    this.whenMatched =\n      options.whenMatched === undefined\n        ? undefined\n        : typeof options.whenMatched === 'string'\n          ? options.whenMatched\n          : Object.freeze([...options.whenMatched]);\n    this.whenNotMatched = options.whenNotMatched;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.merge(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    if (!Array.isArray(this.whenMatched)) return this;\n    const opts: {\n      into: string | { db: string; coll: string };\n      on?: string | ReadonlyArray<string>;\n      whenMatched?: string | ReadonlyArray<MongoUpdatePipelineStage>;\n      whenNotMatched?: string;\n    } = { into: this.into };\n    if (this.on !== undefined) opts.on = this.on;\n    // rewrite() preserves the concrete stage type at runtime\n    opts.whenMatched = this.whenMatched.map(\n      (stage) => stage.rewrite(context) as MongoUpdatePipelineStage,\n    );\n    if (this.whenNotMatched !== undefined) opts.whenNotMatched = this.whenNotMatched;\n    return new MongoMergeStage(opts);\n  }\n}\n\nexport interface MongoWindowField {\n  readonly operator: MongoAggExpr;\n  readonly window?: {\n    readonly documents?: readonly [number, number];\n    readonly range?: { readonly start: unknown; readonly end: unknown; readonly unit?: string };\n  };\n}\n\nexport class MongoSetWindowFieldsStage extends MongoStageNode {\n  readonly kind = 'setWindowFields' as const;\n  readonly partitionBy: MongoAggExpr | undefined;\n  readonly sortBy: Readonly<Record<string, 1 | -1>> | undefined;\n  readonly output: Readonly<Record<string, MongoWindowField>>;\n\n  constructor(options: {\n    partitionBy?: MongoAggExpr;\n    sortBy?: Record<string, 1 | -1>;\n    output: Record<string, MongoWindowField>;\n  }) {\n    super();\n    this.partitionBy = options.partitionBy;\n    this.sortBy = options.sortBy ? Object.freeze({ ...options.sortBy }) : undefined;\n    this.output = Object.freeze({ ...options.output });\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.setWindowFields(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    const newOutput: Record<string, MongoWindowField> = {};\n    for (const [key, wf] of Object.entries(this.output)) {\n      newOutput[key] = { ...wf, operator: wf.operator.rewrite(rewriter) };\n    }\n    const opts: {\n      partitionBy?: MongoAggExpr;\n      sortBy?: Record<string, 1 | -1>;\n      output: Record<string, MongoWindowField>;\n    } = { output: newOutput };\n    if (this.partitionBy) opts.partitionBy = this.partitionBy.rewrite(rewriter);\n    if (this.sortBy) opts.sortBy = { ...this.sortBy };\n    return new MongoSetWindowFieldsStage(opts);\n  }\n}\n\nexport interface MongoDensifyRange {\n  readonly step: number;\n  readonly unit?: string;\n  readonly bounds: 'full' | 'partition' | readonly [unknown, unknown];\n}\n\nexport class MongoDensifyStage extends MongoStageNode {\n  readonly kind = 'densify' as const;\n  readonly field: string;\n  readonly partitionByFields: ReadonlyArray<string> | undefined;\n  readonly range: MongoDensifyRange;\n\n  constructor(options: {\n    field: string;\n    partitionByFields?: ReadonlyArray<string>;\n    range: MongoDensifyRange;\n  }) {\n    super();\n    this.field = options.field;\n    this.partitionByFields = options.partitionByFields\n      ? Object.freeze([...options.partitionByFields])\n      : undefined;\n    this.range = Object.freeze({ ...options.range });\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.densify(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport interface MongoFillOutput {\n  readonly method?: string;\n  readonly value?: MongoAggExpr;\n}\n\nexport class MongoFillStage extends MongoStageNode {\n  readonly kind = 'fill' as const;\n  readonly partitionBy: MongoAggExpr | undefined;\n  readonly partitionByFields: ReadonlyArray<string> | undefined;\n  readonly sortBy: Readonly<Record<string, 1 | -1>> | undefined;\n  readonly output: Readonly<Record<string, MongoFillOutput>>;\n\n  constructor(options: {\n    partitionBy?: MongoAggExpr;\n    partitionByFields?: ReadonlyArray<string>;\n    sortBy?: Record<string, 1 | -1>;\n    output: Record<string, MongoFillOutput>;\n  }) {\n    super();\n    this.partitionBy = options.partitionBy;\n    this.partitionByFields = options.partitionByFields\n      ? Object.freeze([...options.partitionByFields])\n      : undefined;\n    this.sortBy = options.sortBy ? Object.freeze({ ...options.sortBy }) : undefined;\n    this.output = Object.freeze({ ...options.output });\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.fill(this);\n  }\n\n  rewrite(context: MongoStageRewriterContext): MongoPipelineStage {\n    const rewriter = context.aggExpr;\n    if (!rewriter) return this;\n    const newOutput: Record<string, MongoFillOutput> = {};\n    for (const [key, fo] of Object.entries(this.output)) {\n      newOutput[key] = fo.value ? { ...fo, value: fo.value.rewrite(rewriter) } : fo;\n    }\n    const opts: {\n      partitionBy?: MongoAggExpr;\n      partitionByFields?: ReadonlyArray<string>;\n      sortBy?: Record<string, 1 | -1>;\n      output: Record<string, MongoFillOutput>;\n    } = { output: newOutput };\n    if (this.partitionBy) opts.partitionBy = this.partitionBy.rewrite(rewriter);\n    if (this.partitionByFields) opts.partitionByFields = [...this.partitionByFields];\n    if (this.sortBy) opts.sortBy = { ...this.sortBy };\n    return new MongoFillStage(opts);\n  }\n}\n\nexport class MongoSearchStage extends MongoStageNode {\n  readonly kind = 'search' as const;\n  readonly index: string | undefined;\n  readonly config: Readonly<Record<string, unknown>>;\n\n  constructor(config: Record<string, unknown>, index?: string) {\n    super();\n    this.config = Object.freeze({ ...config });\n    this.index = index;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.search(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport class MongoSearchMetaStage extends MongoStageNode {\n  readonly kind = 'searchMeta' as const;\n  readonly index: string | undefined;\n  readonly config: Readonly<Record<string, unknown>>;\n\n  constructor(config: Record<string, unknown>, index?: string) {\n    super();\n    this.config = Object.freeze({ ...config });\n    this.index = index;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.searchMeta(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport class MongoVectorSearchStage extends MongoStageNode {\n  readonly kind = 'vectorSearch' as const;\n  readonly index: string;\n  readonly path: string;\n  readonly queryVector: ReadonlyArray<number>;\n  readonly numCandidates: number;\n  readonly limit: number;\n  readonly filter: Readonly<Record<string, unknown>> | undefined;\n\n  constructor(options: {\n    index: string;\n    path: string;\n    queryVector: ReadonlyArray<number>;\n    numCandidates: number;\n    limit: number;\n    filter?: Record<string, unknown>;\n  }) {\n    super();\n    if (!Number.isInteger(options.limit) || options.limit < 1) {\n      throw new RangeError('limit must be a positive integer');\n    }\n    if (!Number.isInteger(options.numCandidates) || options.numCandidates < options.limit) {\n      throw new RangeError('numCandidates must be an integer >= limit');\n    }\n    this.index = options.index;\n    this.path = options.path;\n    this.queryVector = Object.freeze([...options.queryVector]);\n    this.numCandidates = options.numCandidates;\n    this.limit = options.limit;\n    this.filter = options.filter ? Object.freeze({ ...options.filter }) : undefined;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoStageVisitor<R>): R {\n    return visitor.vectorSearch(this);\n  }\n\n  rewrite(_context: MongoStageRewriterContext): MongoPipelineStage {\n    return this;\n  }\n}\n\nexport type MongoUpdatePipelineStage =\n  | MongoAddFieldsStage\n  | MongoProjectStage\n  | MongoReplaceRootStage;\n\nexport type MongoPipelineStage =\n  | MongoMatchStage\n  | MongoProjectStage\n  | MongoSortStage\n  | MongoLimitStage\n  | MongoSkipStage\n  | MongoLookupStage\n  | MongoUnwindStage\n  | MongoGroupStage\n  | MongoAddFieldsStage\n  | MongoReplaceRootStage\n  | MongoCountStage\n  | MongoSortByCountStage\n  | MongoSampleStage\n  | MongoRedactStage\n  | MongoOutStage\n  | MongoUnionWithStage\n  | MongoBucketStage\n  | MongoBucketAutoStage\n  | MongoGeoNearStage\n  | MongoFacetStage\n  | MongoGraphLookupStage\n  | MongoMergeStage\n  | MongoSetWindowFieldsStage\n  | MongoDensifyStage\n  | MongoFillStage\n  | MongoSearchStage\n  | MongoSearchMetaStage\n  | MongoVectorSearchStage;\n"],"mappings":"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"}