{"version":3,"file":"control.mjs","names":[],"sources":["../../src/ddl-commands.ts","../../src/inspection-commands.ts","../../src/migration-helpers.ts"],"sourcesContent":["import type { MongoIndexKey } from '@prisma-next/mongo-contract';\nimport type {\n  CollationOptions,\n  CreateIndexesOptions,\n  CreateCollectionOptions as MongoCreateCollectionOptions,\n} from '@prisma-next/mongo-value/mongodb-types';\nimport { MongoAstNode } from './ast-node';\nimport type { MongoDdlCommandVisitor } from './ddl-visitors';\n\nexport interface CreateIndexOptions {\n  readonly unique?: boolean;\n  readonly sparse?: boolean;\n  readonly expireAfterSeconds?: number;\n  readonly partialFilterExpression?: Record<string, unknown>;\n  readonly name?: string;\n  readonly wildcardProjection?: Record<string, 0 | 1>;\n  readonly collation?: CollationOptions;\n  readonly weights?: Record<string, number>;\n  readonly default_language?: string;\n  readonly language_override?: string;\n}\n\nexport class CreateIndexCommand extends MongoAstNode implements CreateIndexesOptions {\n  readonly kind = 'createIndex' as const;\n  readonly collection: string;\n  readonly keys: ReadonlyArray<MongoIndexKey>;\n  declare readonly unique?: boolean;\n  declare readonly sparse?: boolean;\n  declare readonly expireAfterSeconds?: number;\n  declare readonly partialFilterExpression?: Record<string, unknown>;\n  declare readonly name?: string;\n  declare readonly wildcardProjection?: Record<string, 0 | 1>;\n  declare readonly collation?: CollationOptions;\n  declare readonly weights?: Record<string, number>;\n  declare readonly default_language?: string;\n  declare readonly language_override?: string;\n\n  constructor(\n    collection: string,\n    keys: ReadonlyArray<MongoIndexKey>,\n    options?: CreateIndexOptions,\n  ) {\n    super();\n    this.collection = collection;\n    this.keys = keys;\n    if (options?.unique !== undefined) this.unique = options.unique;\n    if (options?.sparse !== undefined) this.sparse = options.sparse;\n    if (options?.expireAfterSeconds !== undefined)\n      this.expireAfterSeconds = options.expireAfterSeconds;\n    if (options?.partialFilterExpression !== undefined)\n      this.partialFilterExpression = options.partialFilterExpression;\n    if (options?.name !== undefined) this.name = options.name;\n    if (options?.wildcardProjection !== undefined)\n      this.wildcardProjection = options.wildcardProjection;\n    if (options?.collation !== undefined) this.collation = options.collation;\n    if (options?.weights !== undefined) this.weights = options.weights;\n    if (options?.default_language !== undefined) this.default_language = options.default_language;\n    if (options?.language_override !== undefined)\n      this.language_override = options.language_override;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoDdlCommandVisitor<R>): R {\n    return visitor.createIndex(this);\n  }\n}\n\nexport class DropIndexCommand extends MongoAstNode {\n  readonly kind = 'dropIndex' as const;\n  readonly collection: string;\n  readonly name: string;\n\n  constructor(collection: string, name: string) {\n    super();\n    this.collection = collection;\n    this.name = name;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoDdlCommandVisitor<R>): R {\n    return visitor.dropIndex(this);\n  }\n}\n\nexport interface CreateCollectionOptions {\n  readonly validator?: Record<string, unknown>;\n  readonly validationLevel?: 'strict' | 'moderate';\n  readonly validationAction?: 'error' | 'warn';\n  readonly capped?: boolean;\n  readonly size?: number;\n  readonly max?: number;\n  readonly timeseries?: {\n    timeField: string;\n    metaField?: string;\n    granularity?: 'seconds' | 'minutes' | 'hours';\n  };\n  readonly collation?: CollationOptions;\n  readonly changeStreamPreAndPostImages?: { enabled: boolean };\n  readonly clusteredIndex?: {\n    key: Record<string, number>;\n    unique: boolean;\n    name?: string;\n  };\n}\n\nexport class CreateCollectionCommand extends MongoAstNode implements MongoCreateCollectionOptions {\n  readonly kind = 'createCollection' as const;\n  readonly collection: string;\n  declare readonly validator?: Record<string, unknown>;\n  declare readonly validationLevel?: 'strict' | 'moderate';\n  declare readonly validationAction?: 'error' | 'warn';\n  declare readonly capped?: boolean;\n  declare readonly size?: number;\n  declare readonly max?: number;\n  declare readonly timeseries?: {\n    timeField: string;\n    metaField?: string;\n    granularity?: 'seconds' | 'minutes' | 'hours';\n  };\n  declare readonly collation?: CollationOptions;\n  declare readonly changeStreamPreAndPostImages?: { enabled: boolean };\n  declare readonly clusteredIndex?: {\n    key: Record<string, number>;\n    unique: boolean;\n    name?: string;\n  };\n\n  constructor(collection: string, options?: CreateCollectionOptions) {\n    super();\n    this.collection = collection;\n    if (options?.validator !== undefined) this.validator = options.validator;\n    if (options?.validationLevel !== undefined) this.validationLevel = options.validationLevel;\n    if (options?.validationAction !== undefined) this.validationAction = options.validationAction;\n    if (options?.capped !== undefined) this.capped = options.capped;\n    if (options?.size !== undefined) this.size = options.size;\n    if (options?.max !== undefined) this.max = options.max;\n    if (options?.timeseries !== undefined) this.timeseries = options.timeseries;\n    if (options?.collation !== undefined) this.collation = options.collation;\n    if (options?.changeStreamPreAndPostImages !== undefined)\n      this.changeStreamPreAndPostImages = options.changeStreamPreAndPostImages;\n    if (options?.clusteredIndex !== undefined) this.clusteredIndex = options.clusteredIndex;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoDdlCommandVisitor<R>): R {\n    return visitor.createCollection(this);\n  }\n}\n\nexport class DropCollectionCommand extends MongoAstNode {\n  readonly kind = 'dropCollection' as const;\n  readonly collection: string;\n\n  constructor(collection: string) {\n    super();\n    this.collection = collection;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoDdlCommandVisitor<R>): R {\n    return visitor.dropCollection(this);\n  }\n}\n\nexport interface CollModOptions {\n  readonly validator?: Record<string, unknown>;\n  readonly validationLevel?: 'strict' | 'moderate';\n  readonly validationAction?: 'error' | 'warn';\n  readonly changeStreamPreAndPostImages?: { enabled: boolean };\n}\n\nexport class CollModCommand extends MongoAstNode {\n  readonly kind = 'collMod' as const;\n  readonly collection: string;\n  declare readonly validator?: Record<string, unknown>;\n  declare readonly validationLevel?: 'strict' | 'moderate';\n  declare readonly validationAction?: 'error' | 'warn';\n  declare readonly changeStreamPreAndPostImages?: { enabled: boolean };\n\n  constructor(collection: string, options: CollModOptions) {\n    super();\n    this.collection = collection;\n    if (options.validator !== undefined) this.validator = options.validator;\n    if (options.validationLevel !== undefined) this.validationLevel = options.validationLevel;\n    if (options.validationAction !== undefined) this.validationAction = options.validationAction;\n    if (options.changeStreamPreAndPostImages !== undefined)\n      this.changeStreamPreAndPostImages = options.changeStreamPreAndPostImages;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoDdlCommandVisitor<R>): R {\n    return visitor.collMod(this);\n  }\n}\n\nexport type AnyMongoDdlCommand =\n  | CreateIndexCommand\n  | DropIndexCommand\n  | CreateCollectionCommand\n  | DropCollectionCommand\n  | CollModCommand;\n","import { MongoAstNode } from './ast-node';\nimport type { MongoInspectionCommandVisitor } from './ddl-visitors';\n\nexport class ListIndexesCommand extends MongoAstNode {\n  readonly kind = 'listIndexes' as const;\n  readonly collection: string;\n\n  constructor(collection: string) {\n    super();\n    this.collection = collection;\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoInspectionCommandVisitor<R>): R {\n    return visitor.listIndexes(this);\n  }\n}\n\nexport class ListCollectionsCommand extends MongoAstNode {\n  readonly kind = 'listCollections' as const;\n\n  constructor() {\n    super();\n    this.freeze();\n  }\n\n  accept<R>(visitor: MongoInspectionCommandVisitor<R>): R {\n    return visitor.listCollections(this);\n  }\n}\n\nexport type AnyMongoInspectionCommand = ListIndexesCommand | ListCollectionsCommand;\n","import type { MongoIndexKey, MongoIndexKeyDirection } from '@prisma-next/mongo-contract';\n\nexport function buildIndexOpId(\n  verb: 'create' | 'drop',\n  collection: string,\n  keys: ReadonlyArray<MongoIndexKey>,\n): string {\n  const keyStr = keys.map((k) => `${k.field}:${k.direction}`).join(',');\n  return `index.${collection}.${verb}(${keyStr})`;\n}\n\nexport function defaultMongoIndexName(keys: ReadonlyArray<MongoIndexKey>): string {\n  return keys.map((k) => `${k.field}_${k.direction}`).join('_');\n}\n\nexport function keysToKeySpec(\n  keys: ReadonlyArray<MongoIndexKey>,\n): Record<string, MongoIndexKeyDirection> {\n  const spec: Record<string, MongoIndexKeyDirection> = {};\n  for (const k of keys) {\n    spec[k.field] = k.direction;\n  }\n  return spec;\n}\n"],"mappings":"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"}