@prisma-next/adapter-mongo 0.12.0-dev.49 → 0.12.0-dev.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/control.d.mts +4 -7
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs +8 -26
- package/dist/control.mjs.map +1 -1
- package/package.json +22 -23
- package/src/core/mongo-control-driver.ts +5 -27
- package/src/core/runner-deps.ts +5 -5
- package/src/exports/control.ts +2 -5
package/dist/control.d.mts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { t as createMongoAdapter } from "./mongo-adapter-JuKx_-h9.mjs";
|
|
2
|
-
import { Db, Document
|
|
2
|
+
import { Db, Document } from "mongodb";
|
|
3
3
|
import { CollModCommand, CreateCollectionCommand, CreateIndexCommand, DropCollectionCommand, DropIndexCommand, ListCollectionsCommand, ListIndexesCommand, MongoDdlCommandVisitor, MongoInspectionCommandVisitor } from "@prisma-next/mongo-query-ast/control";
|
|
4
4
|
import { MongoSchemaIR } from "@prisma-next/mongo-schema-ir";
|
|
5
5
|
import { ContractMarkerRecord, LedgerEntryRecord } from "@prisma-next/contract/types";
|
|
6
6
|
import { MongoControlAdapter, MongoControlAdapterDescriptor } from "@prisma-next/family-mongo/control-adapter";
|
|
7
|
+
import { MongoAdapter, MongoControlDriverInstance, MongoControlDriverInstance as MongoControlDriverInstance$1, MongoDriver } from "@prisma-next/mongo-lowering";
|
|
7
8
|
import { ControlDriverInstance, ControlFamilyInstance } from "@prisma-next/framework-components/control";
|
|
8
|
-
import { MongoAdapter, MongoDriver } from "@prisma-next/mongo-lowering";
|
|
9
9
|
|
|
10
10
|
//#region src/core/command-executor.d.ts
|
|
11
11
|
declare class MongoCommandExecutor implements MongoDdlCommandVisitor<Promise<void>> {
|
|
@@ -62,10 +62,7 @@ declare class MongoControlAdapterImpl implements MongoControlAdapter<'mongo'> {
|
|
|
62
62
|
}
|
|
63
63
|
//#endregion
|
|
64
64
|
//#region src/core/mongo-control-driver.d.ts
|
|
65
|
-
|
|
66
|
-
readonly db: Db;
|
|
67
|
-
}
|
|
68
|
-
declare function createMongoControlDriver(db: Db, client: MongoClient): MongoControlDriverInstance;
|
|
65
|
+
declare function isMongoControlDriver(driver: ControlDriverInstance<'mongo', string>): driver is MongoControlDriverInstance$1;
|
|
69
66
|
//#endregion
|
|
70
67
|
//#region src/core/runner-deps.d.ts
|
|
71
68
|
declare function extractDb(driver: ControlDriverInstance<'mongo', 'mongo'>): Db;
|
|
@@ -139,5 +136,5 @@ declare function writeLedgerEntry(db: Db, space: string, entry: {
|
|
|
139
136
|
}): Promise<void>;
|
|
140
137
|
declare const mongoAdapterDescriptor: MongoControlAdapterDescriptor<'mongo'>;
|
|
141
138
|
//#endregion
|
|
142
|
-
export { type MarkerOperations, MongoCommandExecutor, MongoControlAdapterImpl, type MongoControlDriverInstance, MongoInspectionExecutor, type MongoRunnerDependencies, createMongoAdapter,
|
|
139
|
+
export { type MarkerOperations, MongoCommandExecutor, MongoControlAdapterImpl, type MongoControlDriverInstance, MongoInspectionExecutor, type MongoRunnerDependencies, createMongoAdapter, createMongoRunnerDeps, mongoAdapterDescriptor as default, mongoAdapterDescriptor, extractDb, initMarker, introspectSchema, isMongoControlDriver, readAllMarkers, readLedger, readMarker, updateMarker, writeLedgerEntry };
|
|
143
140
|
//# sourceMappingURL=control.d.mts.map
|
package/dist/control.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/command-executor.ts","../src/core/introspect-schema.ts","../src/core/mongo-control-adapter.ts","../src/core/mongo-control-driver.ts","../src/core/runner-deps.ts","../src/exports/control.ts"],"mappings":";;;;;;;;;;cAca,oBAAA,YAAgC,sBAAA,CAAuB,OAAA;EAAA,iBACrC,EAAA;cAAA,EAAA,EAAI,EAAA;EAE3B,WAAA,CAAY,GAAA,EAAK,kBAAA,GAAqB,OAAA;EAmBtC,SAAA,CAAU,GAAA,EAAK,gBAAA,GAAmB,OAAA;EAIlC,gBAAA,CAAiB,GAAA,EAAK,uBAAA,GAA0B,OAAA;EAgBhD,cAAA,CAAe,GAAA,EAAK,qBAAA,GAAwB,OAAA;EAI5C,OAAA,CAAQ,GAAA,EAAK,cAAA,GAAiB,OAAA;AAAA;AAAA,cAWzB,uBAAA,YAAmC,6BAAA,CAA8B,OAAA,CAAQ,QAAA;EAAA,iBACvD,EAAA;cAAA,EAAA,EAAI,EAAA;EAE3B,WAAA,CAAY,GAAA,EAAK,kBAAA,GAAqB,OAAA,CAAQ,QAAA;EAW9C,eAAA,CAAgB,IAAA,EAAM,sBAAA,GAAyB,OAAA,CAAQ,QAAA;AAAA;;;iBCMzC,gBAAA,CAAiB,EAAA,EAAI,EAAA,GAAK,OAAA,CAAQ,aAAA;;;;;;;;;cC7D3C,uBAAA,YAAmC,mBAAA;EAAA,SACrC,QAAA;EAAA,SACA,QAAA;EAEH,UAAA,CACJ,MAAA,EAAQ,qBAAA,oBACR,KAAA,WACC,OAAA,CAAQ,oBAAA;EAgBL,cAAA,CACJ,MAAA,EAAQ,qBAAA,qBACP,OAAA,CAAQ,WAAA,SAAoB,oBAAA;EA6BzB,UAAA,CACJ,MAAA,EAAQ,qBAAA,oBACR,KAAA,UACA,WAAA;IAAA,SACW,WAAA;IAAA,SACA,WAAA;IAAA,SACA,UAAA;EAAA,IAEV,OAAA;EAiBG,YAAA,CACJ,MAAA,EAAQ,qBAAA,oBACR,KAAA,UACA,YAAA,UACA,WAAA;IAAA,SACW,WAAA;IAAA,SACA,WAAA;IAAA,SACA,UAAA;EAAA,IAEV,OAAA;EAmCG,gBAAA,CACJ,MAAA,EAAQ,qBAAA,oBACR,KAAA,UACA,KAAA;IAAA,SACW,MAAA;IAAA,SACA,IAAA;IAAA,SACA,EAAA;IAAA,SACA,aAAA;IAAA,SACA,aAAA;IAAA,SACA,UAAA;EAAA,IAEV,OAAA;EAgBG,UAAA,CACJ,MAAA,EAAQ,qBAAA,oBACR,KAAA,YACC,OAAA,UAAiB,iBAAA;EAsDd,gBAAA,CAAiB,MAAA,EAAQ,qBAAA,qBAA0C,OAAA,CAAQ,aAAA;AAAA;;;
|
|
1
|
+
{"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/command-executor.ts","../src/core/introspect-schema.ts","../src/core/mongo-control-adapter.ts","../src/core/mongo-control-driver.ts","../src/core/runner-deps.ts","../src/exports/control.ts"],"mappings":"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"}
|
package/dist/control.mjs
CHANGED
|
@@ -211,11 +211,15 @@ async function executeFindOneAndUpdate(db, cmd) {
|
|
|
211
211
|
return db.collection(cmd.collection).findOneAndUpdate(cmd.filter, cmd.update, { upsert: cmd.upsert });
|
|
212
212
|
}
|
|
213
213
|
//#endregion
|
|
214
|
+
//#region src/core/mongo-control-driver.ts
|
|
215
|
+
function isMongoControlDriver(driver) {
|
|
216
|
+
return driver.familyId === "mongo" && driver.targetId === "mongo";
|
|
217
|
+
}
|
|
218
|
+
//#endregion
|
|
214
219
|
//#region src/core/runner-deps.ts
|
|
215
220
|
function extractDb(driver) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
return mongoDriver.db;
|
|
221
|
+
if (!isMongoControlDriver(driver)) throw new Error("Expected a Mongo control driver created by mongoControlDriver.create() from `@prisma-next/driver-mongo/control`.");
|
|
222
|
+
return driver.db;
|
|
219
223
|
}
|
|
220
224
|
/**
|
|
221
225
|
* Build the runner-dependencies envelope. `controlAdapter` is the
|
|
@@ -370,27 +374,6 @@ var MongoControlAdapterImpl = class {
|
|
|
370
374
|
}
|
|
371
375
|
};
|
|
372
376
|
//#endregion
|
|
373
|
-
//#region src/core/mongo-control-driver.ts
|
|
374
|
-
var MongoControlDriverImpl = class {
|
|
375
|
-
familyId = "mongo";
|
|
376
|
-
targetId = "mongo";
|
|
377
|
-
db;
|
|
378
|
-
#client;
|
|
379
|
-
constructor(db, client) {
|
|
380
|
-
this.db = db;
|
|
381
|
-
this.#client = client;
|
|
382
|
-
}
|
|
383
|
-
query() {
|
|
384
|
-
throw new Error("MongoDB control driver does not support SQL queries");
|
|
385
|
-
}
|
|
386
|
-
async close() {
|
|
387
|
-
await this.#client.close();
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
function createMongoControlDriver(db, client) {
|
|
391
|
-
return new MongoControlDriverImpl(db, client);
|
|
392
|
-
}
|
|
393
|
-
//#endregion
|
|
394
377
|
//#region src/exports/control.ts
|
|
395
378
|
const defaultControlAdapter = new MongoControlAdapterImpl();
|
|
396
379
|
function controlDriverFromDb(db) {
|
|
@@ -398,7 +381,6 @@ function controlDriverFromDb(db) {
|
|
|
398
381
|
familyId: "mongo",
|
|
399
382
|
targetId: "mongo",
|
|
400
383
|
db,
|
|
401
|
-
query: () => Promise.reject(/* @__PURE__ */ new Error("MongoDB control driver does not support SQL queries")),
|
|
402
384
|
close: async () => {}
|
|
403
385
|
};
|
|
404
386
|
}
|
|
@@ -452,6 +434,6 @@ const mongoAdapterDescriptor = {
|
|
|
452
434
|
}
|
|
453
435
|
};
|
|
454
436
|
//#endregion
|
|
455
|
-
export { MongoCommandExecutor, MongoControlAdapterImpl, MongoInspectionExecutor, createMongoAdapter,
|
|
437
|
+
export { MongoCommandExecutor, MongoControlAdapterImpl, MongoInspectionExecutor, createMongoAdapter, createMongoRunnerDeps, mongoAdapterDescriptor as default, mongoAdapterDescriptor, extractDb, initMarker, introspectSchema, isMongoControlDriver, readAllMarkers, readLedger, readMarker, updateMarker, writeLedgerEntry };
|
|
456
438
|
|
|
457
439
|
//# sourceMappingURL=control.mjs.map
|
package/dist/control.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.mjs","names":["#client"],"sources":["../src/core/command-executor.ts","../src/core/introspect-schema.ts","../src/core/marker-ledger.ts","../src/core/runner-deps.ts","../src/core/mongo-control-adapter.ts","../src/core/mongo-control-driver.ts","../src/exports/control.ts"],"sourcesContent":["import type {\n CollModCommand,\n CreateCollectionCommand,\n CreateIndexCommand,\n DropCollectionCommand,\n DropIndexCommand,\n ListCollectionsCommand,\n ListIndexesCommand,\n MongoDdlCommandVisitor,\n MongoInspectionCommandVisitor,\n} from '@prisma-next/mongo-query-ast/control';\nimport { keysToKeySpec } from '@prisma-next/mongo-query-ast/control';\nimport { type Db, type Document, MongoServerError } from 'mongodb';\n\nexport class MongoCommandExecutor implements MongoDdlCommandVisitor<Promise<void>> {\n constructor(private readonly db: Db) {}\n\n async createIndex(cmd: CreateIndexCommand): Promise<void> {\n const keySpec: Document = keysToKeySpec(cmd.keys);\n const options: Record<string, unknown> = {};\n if (cmd.unique !== undefined) options['unique'] = cmd.unique;\n if (cmd.sparse !== undefined) options['sparse'] = cmd.sparse;\n if (cmd.expireAfterSeconds !== undefined)\n options['expireAfterSeconds'] = cmd.expireAfterSeconds;\n if (cmd.partialFilterExpression !== undefined)\n options['partialFilterExpression'] = cmd.partialFilterExpression;\n if (cmd.name !== undefined) options['name'] = cmd.name;\n if (cmd.wildcardProjection !== undefined)\n options['wildcardProjection'] = cmd.wildcardProjection;\n if (cmd.collation !== undefined) options['collation'] = cmd.collation;\n if (cmd.weights !== undefined) options['weights'] = cmd.weights;\n if (cmd.default_language !== undefined) options['default_language'] = cmd.default_language;\n if (cmd.language_override !== undefined) options['language_override'] = cmd.language_override;\n await this.db.collection(cmd.collection).createIndex(keySpec, options);\n }\n\n async dropIndex(cmd: DropIndexCommand): Promise<void> {\n await this.db.collection(cmd.collection).dropIndex(cmd.name);\n }\n\n async createCollection(cmd: CreateCollectionCommand): Promise<void> {\n const options: Record<string, unknown> = {};\n if (cmd.capped !== undefined) options['capped'] = cmd.capped;\n if (cmd.size !== undefined) options['size'] = cmd.size;\n if (cmd.max !== undefined) options['max'] = cmd.max;\n if (cmd.timeseries !== undefined) options['timeseries'] = cmd.timeseries;\n if (cmd.collation !== undefined) options['collation'] = cmd.collation;\n if (cmd.clusteredIndex !== undefined) options['clusteredIndex'] = cmd.clusteredIndex;\n if (cmd.validator !== undefined) options['validator'] = cmd.validator;\n if (cmd.validationLevel !== undefined) options['validationLevel'] = cmd.validationLevel;\n if (cmd.validationAction !== undefined) options['validationAction'] = cmd.validationAction;\n if (cmd.changeStreamPreAndPostImages !== undefined)\n options['changeStreamPreAndPostImages'] = cmd.changeStreamPreAndPostImages;\n await this.db.createCollection(cmd.collection, options);\n }\n\n async dropCollection(cmd: DropCollectionCommand): Promise<void> {\n await this.db.collection(cmd.collection).drop();\n }\n\n async collMod(cmd: CollModCommand): Promise<void> {\n const command: Record<string, unknown> = { collMod: cmd.collection };\n if (cmd.validator !== undefined) command['validator'] = cmd.validator;\n if (cmd.validationLevel !== undefined) command['validationLevel'] = cmd.validationLevel;\n if (cmd.validationAction !== undefined) command['validationAction'] = cmd.validationAction;\n if (cmd.changeStreamPreAndPostImages !== undefined)\n command['changeStreamPreAndPostImages'] = cmd.changeStreamPreAndPostImages;\n await this.db.command(command);\n }\n}\n\nexport class MongoInspectionExecutor implements MongoInspectionCommandVisitor<Promise<Document[]>> {\n constructor(private readonly db: Db) {}\n\n async listIndexes(cmd: ListIndexesCommand): Promise<Document[]> {\n try {\n return await this.db.collection(cmd.collection).listIndexes().toArray();\n } catch (error: unknown) {\n if (error instanceof MongoServerError && error.code === 26) {\n return [];\n }\n throw error;\n }\n }\n\n async listCollections(_cmd: ListCollectionsCommand): Promise<Document[]> {\n return this.db.listCollections().toArray();\n }\n}\n","import type { MongoIndexKey, MongoIndexKeyDirection } from '@prisma-next/mongo-contract';\nimport {\n MongoSchemaCollection,\n MongoSchemaCollectionOptions,\n MongoSchemaIndex,\n MongoSchemaIR,\n MongoSchemaValidator,\n} from '@prisma-next/mongo-schema-ir';\nimport type { Db, Document } from 'mongodb';\n\nconst PRISMA_MIGRATIONS_COLLECTION = '_prisma_migrations';\n\nfunction parseIndexKeys(keySpec: Record<string, unknown>): MongoIndexKey[] {\n const keys: MongoIndexKey[] = [];\n for (const [field, direction] of Object.entries(keySpec)) {\n keys.push({ field, direction: direction as MongoIndexKeyDirection });\n }\n return keys;\n}\n\n/**\n * Exported for unit tests to exercise the defensive `!key` guard; not part of\n * the public API. Callers in this package use it via the `introspectSchema`\n * pipeline only.\n */\nexport function isDefaultIdIndex(doc: Document): boolean {\n const key = doc['key'] as Record<string, unknown> | undefined;\n if (!key) return false;\n const entries = Object.entries(key);\n return entries.length === 1 && entries[0]?.[0] === '_id' && entries[0]?.[1] === 1;\n}\n\nfunction parseIndex(doc: Document): MongoSchemaIndex {\n const keySpec = doc['key'] as Record<string, unknown>;\n return new MongoSchemaIndex({\n keys: parseIndexKeys(keySpec),\n unique: doc['unique'] as boolean | undefined,\n sparse: doc['sparse'] as boolean | undefined,\n expireAfterSeconds: doc['expireAfterSeconds'] as number | undefined,\n partialFilterExpression: doc['partialFilterExpression'] as Record<string, unknown> | undefined,\n wildcardProjection: doc['wildcardProjection'] as Record<string, 0 | 1> | undefined,\n collation: doc['collation'] as Record<string, unknown> | undefined,\n weights: doc['weights'] as Record<string, number> | undefined,\n default_language: doc['default_language'] as string | undefined,\n language_override: doc['language_override'] as string | undefined,\n });\n}\n\nfunction parseValidator(options: Document): MongoSchemaValidator | undefined {\n const validator = options['validator'] as Record<string, unknown> | undefined;\n if (!validator) return undefined;\n\n const jsonSchema = validator['$jsonSchema'] as Record<string, unknown> | undefined;\n if (!jsonSchema) return undefined;\n\n return new MongoSchemaValidator({\n jsonSchema,\n validationLevel: (options['validationLevel'] as 'strict' | 'moderate') ?? 'strict',\n validationAction: (options['validationAction'] as 'error' | 'warn') ?? 'error',\n });\n}\n\nfunction parseCollectionOptions(info: Document): MongoSchemaCollectionOptions | undefined {\n const options = info['options'] as Record<string, unknown> | undefined;\n if (!options) return undefined;\n\n const capped = options['capped'] as boolean | undefined;\n const size = options['size'] as number | undefined;\n const max = options['max'] as number | undefined;\n const timeseries = options['timeseries'] as\n | { timeField: string; metaField?: string; granularity?: 'seconds' | 'minutes' | 'hours' }\n | undefined;\n const collation = options['collation'] as Record<string, unknown> | undefined;\n const changeStreamPreAndPostImages = options['changeStreamPreAndPostImages'] as\n | { enabled: boolean }\n | undefined;\n const clusteredIndex = options['clusteredIndex'] as { name?: string } | undefined;\n\n const hasMeaningfulOptions =\n capped || timeseries || collation || changeStreamPreAndPostImages || clusteredIndex;\n if (!hasMeaningfulOptions) return undefined;\n\n return new MongoSchemaCollectionOptions({\n ...(capped ? { capped: { size: size ?? 0, ...(max != null ? { max } : {}) } } : {}),\n ...(timeseries ? { timeseries } : {}),\n ...(collation ? { collation } : {}),\n ...(changeStreamPreAndPostImages ? { changeStreamPreAndPostImages } : {}),\n ...(clusteredIndex ? { clusteredIndex } : {}),\n });\n}\n\nexport async function introspectSchema(db: Db): Promise<MongoSchemaIR> {\n const collectionInfos = await db.listCollections().toArray();\n\n const collections: MongoSchemaCollection[] = [];\n\n for (const info of collectionInfos) {\n const name = info['name'] as string;\n const type = info['type'] as string | undefined;\n\n if (name === PRISMA_MIGRATIONS_COLLECTION) continue;\n if (name.startsWith('system.')) continue;\n if (type === 'view') continue;\n\n const indexDocs = await db.collection(name).listIndexes().toArray();\n const indexes = indexDocs.filter((doc) => !isDefaultIdIndex(doc)).map(parseIndex);\n\n const infoOptions = 'options' in info ? (info['options'] as Record<string, unknown>) : {};\n const validator = parseValidator(infoOptions);\n const options = parseCollectionOptions(info);\n\n collections.push(\n new MongoSchemaCollection({\n name,\n indexes,\n ...(validator ? { validator } : {}),\n ...(options ? { options } : {}),\n }),\n );\n }\n\n return new MongoSchemaIR(collections);\n}\n","import type { ContractMarkerRecord } from '@prisma-next/contract/types';\nimport { parseMarkerRowSafely } from '@prisma-next/errors/execution';\nimport type {\n RawAggregateCommand,\n RawFindOneAndUpdateCommand,\n RawInsertOneCommand,\n} from '@prisma-next/mongo-query-ast/execution';\nimport { type } from 'arktype';\nimport type { Db, Document, UpdateFilter } from 'mongodb';\n\nexport const COLLECTION = '_prisma_migrations';\nexport const MONGO_MARKER_COLLECTION = `_prisma_migrations marker documents in ${COLLECTION}`;\nexport const MONGO_LEDGER_COLLECTION = `_prisma_migrations ledger documents in ${COLLECTION}`;\n\nconst MongoMarkerDocSchema = type({\n space: 'string',\n storageHash: 'string',\n profileHash: 'string',\n 'contractJson?': 'unknown | null',\n 'canonicalVersion?': 'number | null',\n 'updatedAt?': 'Date',\n 'appTag?': 'string | null',\n 'meta?': type({ '[string]': 'unknown' }).or('null'),\n 'invariants?': type('string').array(),\n '+': 'delete',\n});\n\nexport function parseMongoMarkerDoc(doc: unknown): ContractMarkerRecord {\n const result = MongoMarkerDocSchema(doc);\n if (result instanceof type.errors) {\n throw new Error(`Invalid marker doc on ${COLLECTION}: ${result.summary}`);\n }\n return {\n storageHash: result.storageHash,\n profileHash: result.profileHash,\n contractJson: result.contractJson ?? null,\n canonicalVersion: result.canonicalVersion ?? null,\n updatedAt: result.updatedAt ?? new Date(),\n appTag: result.appTag ?? null,\n meta: (result.meta as Record<string, unknown> | null) ?? {},\n invariants: result.invariants ?? [],\n };\n}\n\nexport function parseMongoMarkerDocSafely(doc: unknown, space: string): ContractMarkerRecord {\n return parseMarkerRowSafely(doc, parseMongoMarkerDoc, {\n space,\n markerLocation: MONGO_MARKER_COLLECTION,\n });\n}\n\nexport async function executeAggregate(db: Db, cmd: RawAggregateCommand): Promise<Document[]> {\n return db\n .collection(cmd.collection)\n .aggregate(cmd.pipeline as Record<string, unknown>[])\n .toArray();\n}\n\nexport async function executeInsertOne(db: Db, cmd: RawInsertOneCommand): Promise<void> {\n await db.collection(cmd.collection).insertOne(cmd.document);\n}\n\nexport async function executeFindOneAndUpdate(\n db: Db,\n cmd: RawFindOneAndUpdateCommand,\n): Promise<Document | null> {\n return db\n .collection(cmd.collection)\n .findOneAndUpdate(cmd.filter, cmd.update as UpdateFilter<Document> | Document[], {\n upsert: cmd.upsert,\n });\n}\n","import type { ContractMarkerRecord } from '@prisma-next/contract/types';\nimport type { MongoControlAdapter } from '@prisma-next/family-mongo/control-adapter';\nimport type {\n ControlDriverInstance,\n ControlFamilyInstance,\n} from '@prisma-next/framework-components/control';\nimport type { MongoAdapter, MongoDriver } from '@prisma-next/mongo-lowering';\nimport type {\n MongoDdlCommandVisitor,\n MongoInspectionCommandVisitor,\n} from '@prisma-next/mongo-query-ast/control';\nimport type { MongoSchemaIR } from '@prisma-next/mongo-schema-ir';\nimport type { Db } from 'mongodb';\nimport { createMongoAdapter } from '../mongo-adapter';\nimport { MongoCommandExecutor, MongoInspectionExecutor } from './command-executor';\nimport { MongoControlAdapterImpl } from './mongo-control-adapter';\n\nexport function extractDb(driver: ControlDriverInstance<'mongo', 'mongo'>): Db {\n const mongoDriver = driver as ControlDriverInstance<'mongo', 'mongo'> & { db?: Db };\n if (!mongoDriver.db) {\n throw new Error(\n 'Mongo control driver does not expose a db property. ' +\n 'Use mongoControlDriver.create() from `@prisma-next/driver-mongo/control`.',\n );\n }\n return mongoDriver.db;\n}\n\n/**\n * Marker / ledger operations the Mongo runner depends on. Every method\n * takes a `space` parameter so each loaded contract space addresses its\n * own marker row independently — see ADR 212 for the per-space\n * mechanism.\n */\nexport interface MarkerOperations {\n readMarker(space: string): Promise<ContractMarkerRecord | null>;\n initMarker(\n space: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n ): Promise<void>;\n updateMarker(\n space: string,\n expectedFrom: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n ): Promise<boolean>;\n writeLedgerEntry(\n space: string,\n entry: {\n readonly edgeId: string;\n readonly from: string;\n readonly to: string;\n readonly migrationName: string;\n readonly migrationHash: string;\n readonly operations: readonly unknown[];\n },\n ): Promise<void>;\n}\n\nexport interface MongoRunnerDependencies {\n readonly commandExecutor: MongoDdlCommandVisitor<Promise<void>>;\n readonly inspectionExecutor: MongoInspectionCommandVisitor<Promise<Record<string, unknown>[]>>;\n readonly adapter: MongoAdapter;\n readonly driver: MongoDriver;\n readonly markerOps: MarkerOperations;\n readonly introspectSchema: () => Promise<MongoSchemaIR>;\n}\n\n/**\n * Build the runner-dependencies envelope. `controlAdapter` is the\n * dispatch surface for wire-level Mongo CAS operations (marker reads,\n * marker advances, ledger appends, introspection); the envelope's\n * `markerOps` shim simply forwards each call through it. When the\n * caller already has a `MongoControlAdapter` on the control stack it\n * can pass it in; otherwise a default `MongoControlAdapterImpl` is\n * constructed locally.\n */\nexport function createMongoRunnerDeps(\n controlDriver: ControlDriverInstance<'mongo', 'mongo'>,\n driver: MongoDriver,\n // Vestigial after the family→adapter SPI refactor: the runner dependencies\n // now route every wire-level call through `controlAdapter`, so the `family`\n // instance is no longer consulted. Kept on the signature to avoid rippling\n // through ~14 call sites; a follow-up that already touches this factory\n // should drop the parameter outright.\n _family: ControlFamilyInstance<'mongo', MongoSchemaIR>,\n controlAdapter: MongoControlAdapter<'mongo'> = new MongoControlAdapterImpl(),\n): MongoRunnerDependencies {\n return {\n commandExecutor: new MongoCommandExecutor(extractDb(controlDriver)),\n inspectionExecutor: new MongoInspectionExecutor(extractDb(controlDriver)),\n adapter: createMongoAdapter(),\n driver,\n markerOps: {\n readMarker: (space) => controlAdapter.readMarker(controlDriver, space),\n initMarker: (space, dest) => controlAdapter.initMarker(controlDriver, space, dest),\n updateMarker: (space, expectedFrom, dest) =>\n controlAdapter.updateMarker(controlDriver, space, expectedFrom, dest),\n writeLedgerEntry: (space, entry) =>\n controlAdapter.writeLedgerEntry(controlDriver, space, entry),\n },\n introspectSchema: () => controlAdapter.introspectSchema(controlDriver),\n };\n}\n","import type { ContractMarkerRecord, LedgerEntryRecord } from '@prisma-next/contract/types';\nimport { withMarkerReadErrorHandling } from '@prisma-next/errors/execution';\nimport type { MongoControlAdapter } from '@prisma-next/family-mongo/control-adapter';\nimport type { ControlDriverInstance } from '@prisma-next/framework-components/control';\nimport { ledgerOriginFromStored } from '@prisma-next/migration-tools/ledger-origin';\nimport {\n RawAggregateCommand,\n RawFindOneAndUpdateCommand,\n RawInsertOneCommand,\n} from '@prisma-next/mongo-query-ast/execution';\nimport type { MongoSchemaIR } from '@prisma-next/mongo-schema-ir';\nimport type { Document } from 'mongodb';\nimport { introspectSchema } from './introspect-schema';\nimport {\n COLLECTION,\n executeAggregate,\n executeFindOneAndUpdate,\n executeInsertOne,\n MONGO_LEDGER_COLLECTION,\n MONGO_MARKER_COLLECTION,\n parseMongoMarkerDocSafely,\n} from './marker-ledger';\nimport { extractDb } from './runner-deps';\n\n/**\n * Mongo control adapter for control-plane operations like introspection\n * and marker-ledger CAS. Implements the family-level `MongoControlAdapter`\n * SPI by extracting the underlying `Db` from the framework-shaped driver\n * per call.\n */\nexport class MongoControlAdapterImpl implements MongoControlAdapter<'mongo'> {\n readonly familyId = 'mongo' as const;\n readonly targetId = 'mongo' as const;\n\n async readMarker(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space: string,\n ): Promise<ContractMarkerRecord | null> {\n const db = extractDb(driver);\n const markerContext = { space, markerLocation: MONGO_MARKER_COLLECTION };\n const docs = await withMarkerReadErrorHandling(\n () =>\n executeAggregate(\n db,\n new RawAggregateCommand(COLLECTION, [{ $match: { _id: space, space } }, { $limit: 1 }]),\n ),\n markerContext,\n );\n const doc = docs[0];\n if (!doc) return null;\n return parseMongoMarkerDocSafely(doc, space);\n }\n\n async readAllMarkers(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n ): Promise<ReadonlyMap<string, ContractMarkerRecord>> {\n const db = extractDb(driver);\n const markerContext = { space: 'app', markerLocation: MONGO_MARKER_COLLECTION };\n const docs = await withMarkerReadErrorHandling(\n () =>\n executeAggregate(\n db,\n new RawAggregateCommand(COLLECTION, [\n {\n $match: {\n _id: { $type: 'string' },\n space: { $type: 'string' },\n $expr: { $eq: ['$_id', '$space'] },\n },\n },\n ]),\n ),\n markerContext,\n );\n const out = new Map<string, ContractMarkerRecord>();\n for (const doc of docs) {\n const space = doc['space'];\n /* v8 ignore next -- @preserve type-narrowing guard: the $match stage above filters on `space: { $type: 'string' }`, so this branch is unreachable at runtime. The check exists so the `out.set(space, ...)` call below can accept `string`. */\n if (typeof space !== 'string') continue;\n out.set(space, parseMongoMarkerDocSafely(doc, space));\n }\n return out;\n }\n\n async initMarker(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n ): Promise<void> {\n const db = extractDb(driver);\n const cmd = new RawInsertOneCommand(COLLECTION, {\n _id: space,\n space,\n storageHash: destination.storageHash,\n profileHash: destination.profileHash,\n contractJson: null,\n canonicalVersion: null,\n updatedAt: new Date(),\n appTag: null,\n meta: {},\n invariants: destination.invariants ?? [],\n });\n await executeInsertOne(db, cmd);\n }\n\n async updateMarker(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space: string,\n expectedFrom: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n ): Promise<boolean> {\n const db = extractDb(driver);\n const setBase: Record<string, unknown> = {\n storageHash: destination.storageHash,\n profileHash: destination.profileHash,\n updatedAt: new Date(),\n };\n const update: Document | Document[] =\n destination.invariants === undefined\n ? { $set: setBase }\n : [\n {\n $set: {\n ...setBase,\n invariants: {\n $sortArray: {\n input: {\n $setUnion: [{ $ifNull: ['$invariants', []] }, destination.invariants],\n },\n sortBy: 1,\n },\n },\n },\n },\n ];\n const cmd = new RawFindOneAndUpdateCommand(\n COLLECTION,\n { _id: space, space, storageHash: expectedFrom },\n update,\n false,\n );\n const result = await executeFindOneAndUpdate(db, cmd);\n return result !== null;\n }\n\n async writeLedgerEntry(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space: string,\n entry: {\n readonly edgeId: string;\n readonly from: string;\n readonly to: string;\n readonly migrationName: string;\n readonly migrationHash: string;\n readonly operations: readonly unknown[];\n },\n ): Promise<void> {\n const db = extractDb(driver);\n const cmd = new RawInsertOneCommand(COLLECTION, {\n type: 'ledger',\n space,\n edgeId: entry.edgeId,\n from: entry.from,\n to: entry.to,\n migrationName: entry.migrationName,\n migrationHash: entry.migrationHash,\n operations: entry.operations,\n appliedAt: new Date(),\n });\n await executeInsertOne(db, cmd);\n }\n\n async readLedger(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space?: string,\n ): Promise<readonly LedgerEntryRecord[]> {\n const db = extractDb(driver);\n const ledgerContext = { space: space ?? '*', markerLocation: MONGO_LEDGER_COLLECTION };\n const matchStage: Record<string, unknown> = { type: 'ledger' };\n if (space !== undefined) {\n matchStage['space'] = space;\n }\n const docs = await withMarkerReadErrorHandling(\n () =>\n executeAggregate(\n db,\n new RawAggregateCommand(COLLECTION, [{ $match: matchStage }, { $sort: { _id: 1 } }]),\n ),\n ledgerContext,\n );\n\n const entries: LedgerEntryRecord[] = [];\n for (const doc of docs) {\n const migrationName = doc['migrationName'];\n const migrationHash = doc['migrationHash'];\n const from = doc['from'];\n const to = doc['to'];\n const docSpace = doc['space'];\n if (typeof migrationName !== 'string' || typeof migrationHash !== 'string') {\n continue;\n }\n if (typeof from !== 'string' || typeof to !== 'string') {\n continue;\n }\n if (typeof docSpace !== 'string') {\n continue;\n }\n const appliedAt = doc['appliedAt'];\n const appliedAtDate =\n appliedAt instanceof Date\n ? appliedAt\n : appliedAt !== undefined\n ? new Date(String(appliedAt))\n : new Date();\n const operations = doc['operations'];\n const opList = Array.isArray(operations) ? operations : [];\n entries.push({\n space: docSpace,\n migrationName,\n migrationHash,\n from: ledgerOriginFromStored(from),\n to,\n appliedAt: appliedAtDate,\n operationCount: opList.length,\n });\n }\n return entries;\n }\n\n async introspectSchema(driver: ControlDriverInstance<'mongo', 'mongo'>): Promise<MongoSchemaIR> {\n return introspectSchema(extractDb(driver));\n }\n}\n","import type { ControlDriverInstance } from '@prisma-next/framework-components/control';\nimport type { Db, MongoClient } from 'mongodb';\n\nexport interface MongoControlDriverInstance extends ControlDriverInstance<'mongo', 'mongo'> {\n readonly db: Db;\n}\n\nclass MongoControlDriverImpl implements MongoControlDriverInstance {\n readonly familyId = 'mongo' as const;\n readonly targetId = 'mongo' as const;\n readonly db: Db;\n readonly #client: MongoClient;\n\n constructor(db: Db, client: MongoClient) {\n this.db = db;\n this.#client = client;\n }\n\n query(): Promise<never> {\n throw new Error('MongoDB control driver does not support SQL queries');\n }\n\n async close(): Promise<void> {\n await this.#client.close();\n }\n}\n\nexport function createMongoControlDriver(db: Db, client: MongoClient): MongoControlDriverInstance {\n return new MongoControlDriverImpl(db, client);\n}\n","import type { ContractMarkerRecord, LedgerEntryRecord } from '@prisma-next/contract/types';\nimport type { MongoControlAdapterDescriptor } from '@prisma-next/family-mongo/control-adapter';\nimport type { ControlDriverInstance } from '@prisma-next/framework-components/control';\nimport type { Db } from 'mongodb';\n\nexport { MongoCommandExecutor, MongoInspectionExecutor } from '../core/command-executor';\nexport { introspectSchema } from '../core/introspect-schema';\nexport { MongoControlAdapterImpl } from '../core/mongo-control-adapter';\nexport {\n createMongoControlDriver,\n type MongoControlDriverInstance,\n} from '../core/mongo-control-driver';\nexport {\n createMongoRunnerDeps,\n extractDb,\n type MarkerOperations,\n type MongoRunnerDependencies,\n} from '../core/runner-deps';\nexport { createMongoAdapter } from '../mongo-adapter';\n\nimport { mongoCodecDescriptors } from '../core/codecs';\nimport { MongoControlAdapterImpl } from '../core/mongo-control-adapter';\n\nconst defaultControlAdapter = new MongoControlAdapterImpl();\n\nfunction controlDriverFromDb(db: Db): ControlDriverInstance<'mongo', 'mongo'> & { db: Db } {\n return {\n familyId: 'mongo',\n targetId: 'mongo',\n db,\n query: () => Promise.reject(new Error('MongoDB control driver does not support SQL queries')),\n close: async () => {},\n };\n}\n\nexport async function readMarker(db: Db, space: string): Promise<ContractMarkerRecord | null> {\n return defaultControlAdapter.readMarker(controlDriverFromDb(db), space);\n}\n\nexport async function readAllMarkers(db: Db): Promise<ReadonlyMap<string, ContractMarkerRecord>> {\n return defaultControlAdapter.readAllMarkers(controlDriverFromDb(db));\n}\n\nexport async function initMarker(\n db: Db,\n space: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n): Promise<void> {\n await defaultControlAdapter.initMarker(controlDriverFromDb(db), space, destination);\n}\n\nexport async function updateMarker(\n db: Db,\n space: string,\n expectedFrom: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n): Promise<boolean> {\n return defaultControlAdapter.updateMarker(\n controlDriverFromDb(db),\n space,\n expectedFrom,\n destination,\n );\n}\n\nexport async function readLedger(db: Db, space?: string): Promise<readonly LedgerEntryRecord[]> {\n return defaultControlAdapter.readLedger(controlDriverFromDb(db), space);\n}\n\nexport async function writeLedgerEntry(\n db: Db,\n space: string,\n entry: {\n readonly edgeId: string;\n readonly from: string;\n readonly to: string;\n readonly migrationName: string;\n readonly migrationHash: string;\n readonly operations: readonly unknown[];\n },\n): Promise<void> {\n await defaultControlAdapter.writeLedgerEntry(controlDriverFromDb(db), space, entry);\n}\n\nexport const mongoAdapterDescriptor: MongoControlAdapterDescriptor<'mongo'> = {\n kind: 'adapter',\n id: 'mongo',\n familyId: 'mongo',\n targetId: 'mongo',\n version: '0.0.1',\n scalarTypeDescriptors: new Map([\n ['String', 'mongo/string@1'],\n ['Int', 'mongo/int32@1'],\n ['Boolean', 'mongo/bool@1'],\n ['DateTime', 'mongo/date@1'],\n ['ObjectId', 'mongo/objectId@1'],\n ['Float', 'mongo/double@1'],\n ]),\n types: {\n codecTypes: {\n codecDescriptors: mongoCodecDescriptors,\n import: {\n package: '@prisma-next/adapter-mongo/codec-types',\n named: 'CodecTypes',\n alias: 'MongoCodecTypes',\n },\n typeImports: [\n {\n package: '@prisma-next/adapter-mongo/codec-types',\n named: 'Vector',\n alias: 'Vector',\n },\n ],\n },\n },\n create(_stack) {\n return new MongoControlAdapterImpl();\n },\n};\n\nexport default mongoAdapterDescriptor;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"control.mjs","names":[],"sources":["../src/core/command-executor.ts","../src/core/introspect-schema.ts","../src/core/marker-ledger.ts","../src/core/mongo-control-driver.ts","../src/core/runner-deps.ts","../src/core/mongo-control-adapter.ts","../src/exports/control.ts"],"sourcesContent":["import type {\n CollModCommand,\n CreateCollectionCommand,\n CreateIndexCommand,\n DropCollectionCommand,\n DropIndexCommand,\n ListCollectionsCommand,\n ListIndexesCommand,\n MongoDdlCommandVisitor,\n MongoInspectionCommandVisitor,\n} from '@prisma-next/mongo-query-ast/control';\nimport { keysToKeySpec } from '@prisma-next/mongo-query-ast/control';\nimport { type Db, type Document, MongoServerError } from 'mongodb';\n\nexport class MongoCommandExecutor implements MongoDdlCommandVisitor<Promise<void>> {\n constructor(private readonly db: Db) {}\n\n async createIndex(cmd: CreateIndexCommand): Promise<void> {\n const keySpec: Document = keysToKeySpec(cmd.keys);\n const options: Record<string, unknown> = {};\n if (cmd.unique !== undefined) options['unique'] = cmd.unique;\n if (cmd.sparse !== undefined) options['sparse'] = cmd.sparse;\n if (cmd.expireAfterSeconds !== undefined)\n options['expireAfterSeconds'] = cmd.expireAfterSeconds;\n if (cmd.partialFilterExpression !== undefined)\n options['partialFilterExpression'] = cmd.partialFilterExpression;\n if (cmd.name !== undefined) options['name'] = cmd.name;\n if (cmd.wildcardProjection !== undefined)\n options['wildcardProjection'] = cmd.wildcardProjection;\n if (cmd.collation !== undefined) options['collation'] = cmd.collation;\n if (cmd.weights !== undefined) options['weights'] = cmd.weights;\n if (cmd.default_language !== undefined) options['default_language'] = cmd.default_language;\n if (cmd.language_override !== undefined) options['language_override'] = cmd.language_override;\n await this.db.collection(cmd.collection).createIndex(keySpec, options);\n }\n\n async dropIndex(cmd: DropIndexCommand): Promise<void> {\n await this.db.collection(cmd.collection).dropIndex(cmd.name);\n }\n\n async createCollection(cmd: CreateCollectionCommand): Promise<void> {\n const options: Record<string, unknown> = {};\n if (cmd.capped !== undefined) options['capped'] = cmd.capped;\n if (cmd.size !== undefined) options['size'] = cmd.size;\n if (cmd.max !== undefined) options['max'] = cmd.max;\n if (cmd.timeseries !== undefined) options['timeseries'] = cmd.timeseries;\n if (cmd.collation !== undefined) options['collation'] = cmd.collation;\n if (cmd.clusteredIndex !== undefined) options['clusteredIndex'] = cmd.clusteredIndex;\n if (cmd.validator !== undefined) options['validator'] = cmd.validator;\n if (cmd.validationLevel !== undefined) options['validationLevel'] = cmd.validationLevel;\n if (cmd.validationAction !== undefined) options['validationAction'] = cmd.validationAction;\n if (cmd.changeStreamPreAndPostImages !== undefined)\n options['changeStreamPreAndPostImages'] = cmd.changeStreamPreAndPostImages;\n await this.db.createCollection(cmd.collection, options);\n }\n\n async dropCollection(cmd: DropCollectionCommand): Promise<void> {\n await this.db.collection(cmd.collection).drop();\n }\n\n async collMod(cmd: CollModCommand): Promise<void> {\n const command: Record<string, unknown> = { collMod: cmd.collection };\n if (cmd.validator !== undefined) command['validator'] = cmd.validator;\n if (cmd.validationLevel !== undefined) command['validationLevel'] = cmd.validationLevel;\n if (cmd.validationAction !== undefined) command['validationAction'] = cmd.validationAction;\n if (cmd.changeStreamPreAndPostImages !== undefined)\n command['changeStreamPreAndPostImages'] = cmd.changeStreamPreAndPostImages;\n await this.db.command(command);\n }\n}\n\nexport class MongoInspectionExecutor implements MongoInspectionCommandVisitor<Promise<Document[]>> {\n constructor(private readonly db: Db) {}\n\n async listIndexes(cmd: ListIndexesCommand): Promise<Document[]> {\n try {\n return await this.db.collection(cmd.collection).listIndexes().toArray();\n } catch (error: unknown) {\n if (error instanceof MongoServerError && error.code === 26) {\n return [];\n }\n throw error;\n }\n }\n\n async listCollections(_cmd: ListCollectionsCommand): Promise<Document[]> {\n return this.db.listCollections().toArray();\n }\n}\n","import type { MongoIndexKey, MongoIndexKeyDirection } from '@prisma-next/mongo-contract';\nimport {\n MongoSchemaCollection,\n MongoSchemaCollectionOptions,\n MongoSchemaIndex,\n MongoSchemaIR,\n MongoSchemaValidator,\n} from '@prisma-next/mongo-schema-ir';\nimport type { Db, Document } from 'mongodb';\n\nconst PRISMA_MIGRATIONS_COLLECTION = '_prisma_migrations';\n\nfunction parseIndexKeys(keySpec: Record<string, unknown>): MongoIndexKey[] {\n const keys: MongoIndexKey[] = [];\n for (const [field, direction] of Object.entries(keySpec)) {\n keys.push({ field, direction: direction as MongoIndexKeyDirection });\n }\n return keys;\n}\n\n/**\n * Exported for unit tests to exercise the defensive `!key` guard; not part of\n * the public API. Callers in this package use it via the `introspectSchema`\n * pipeline only.\n */\nexport function isDefaultIdIndex(doc: Document): boolean {\n const key = doc['key'] as Record<string, unknown> | undefined;\n if (!key) return false;\n const entries = Object.entries(key);\n return entries.length === 1 && entries[0]?.[0] === '_id' && entries[0]?.[1] === 1;\n}\n\nfunction parseIndex(doc: Document): MongoSchemaIndex {\n const keySpec = doc['key'] as Record<string, unknown>;\n return new MongoSchemaIndex({\n keys: parseIndexKeys(keySpec),\n unique: doc['unique'] as boolean | undefined,\n sparse: doc['sparse'] as boolean | undefined,\n expireAfterSeconds: doc['expireAfterSeconds'] as number | undefined,\n partialFilterExpression: doc['partialFilterExpression'] as Record<string, unknown> | undefined,\n wildcardProjection: doc['wildcardProjection'] as Record<string, 0 | 1> | undefined,\n collation: doc['collation'] as Record<string, unknown> | undefined,\n weights: doc['weights'] as Record<string, number> | undefined,\n default_language: doc['default_language'] as string | undefined,\n language_override: doc['language_override'] as string | undefined,\n });\n}\n\nfunction parseValidator(options: Document): MongoSchemaValidator | undefined {\n const validator = options['validator'] as Record<string, unknown> | undefined;\n if (!validator) return undefined;\n\n const jsonSchema = validator['$jsonSchema'] as Record<string, unknown> | undefined;\n if (!jsonSchema) return undefined;\n\n return new MongoSchemaValidator({\n jsonSchema,\n validationLevel: (options['validationLevel'] as 'strict' | 'moderate') ?? 'strict',\n validationAction: (options['validationAction'] as 'error' | 'warn') ?? 'error',\n });\n}\n\nfunction parseCollectionOptions(info: Document): MongoSchemaCollectionOptions | undefined {\n const options = info['options'] as Record<string, unknown> | undefined;\n if (!options) return undefined;\n\n const capped = options['capped'] as boolean | undefined;\n const size = options['size'] as number | undefined;\n const max = options['max'] as number | undefined;\n const timeseries = options['timeseries'] as\n | { timeField: string; metaField?: string; granularity?: 'seconds' | 'minutes' | 'hours' }\n | undefined;\n const collation = options['collation'] as Record<string, unknown> | undefined;\n const changeStreamPreAndPostImages = options['changeStreamPreAndPostImages'] as\n | { enabled: boolean }\n | undefined;\n const clusteredIndex = options['clusteredIndex'] as { name?: string } | undefined;\n\n const hasMeaningfulOptions =\n capped || timeseries || collation || changeStreamPreAndPostImages || clusteredIndex;\n if (!hasMeaningfulOptions) return undefined;\n\n return new MongoSchemaCollectionOptions({\n ...(capped ? { capped: { size: size ?? 0, ...(max != null ? { max } : {}) } } : {}),\n ...(timeseries ? { timeseries } : {}),\n ...(collation ? { collation } : {}),\n ...(changeStreamPreAndPostImages ? { changeStreamPreAndPostImages } : {}),\n ...(clusteredIndex ? { clusteredIndex } : {}),\n });\n}\n\nexport async function introspectSchema(db: Db): Promise<MongoSchemaIR> {\n const collectionInfos = await db.listCollections().toArray();\n\n const collections: MongoSchemaCollection[] = [];\n\n for (const info of collectionInfos) {\n const name = info['name'] as string;\n const type = info['type'] as string | undefined;\n\n if (name === PRISMA_MIGRATIONS_COLLECTION) continue;\n if (name.startsWith('system.')) continue;\n if (type === 'view') continue;\n\n const indexDocs = await db.collection(name).listIndexes().toArray();\n const indexes = indexDocs.filter((doc) => !isDefaultIdIndex(doc)).map(parseIndex);\n\n const infoOptions = 'options' in info ? (info['options'] as Record<string, unknown>) : {};\n const validator = parseValidator(infoOptions);\n const options = parseCollectionOptions(info);\n\n collections.push(\n new MongoSchemaCollection({\n name,\n indexes,\n ...(validator ? { validator } : {}),\n ...(options ? { options } : {}),\n }),\n );\n }\n\n return new MongoSchemaIR(collections);\n}\n","import type { ContractMarkerRecord } from '@prisma-next/contract/types';\nimport { parseMarkerRowSafely } from '@prisma-next/errors/execution';\nimport type {\n RawAggregateCommand,\n RawFindOneAndUpdateCommand,\n RawInsertOneCommand,\n} from '@prisma-next/mongo-query-ast/execution';\nimport { type } from 'arktype';\nimport type { Db, Document, UpdateFilter } from 'mongodb';\n\nexport const COLLECTION = '_prisma_migrations';\nexport const MONGO_MARKER_COLLECTION = `_prisma_migrations marker documents in ${COLLECTION}`;\nexport const MONGO_LEDGER_COLLECTION = `_prisma_migrations ledger documents in ${COLLECTION}`;\n\nconst MongoMarkerDocSchema = type({\n space: 'string',\n storageHash: 'string',\n profileHash: 'string',\n 'contractJson?': 'unknown | null',\n 'canonicalVersion?': 'number | null',\n 'updatedAt?': 'Date',\n 'appTag?': 'string | null',\n 'meta?': type({ '[string]': 'unknown' }).or('null'),\n 'invariants?': type('string').array(),\n '+': 'delete',\n});\n\nexport function parseMongoMarkerDoc(doc: unknown): ContractMarkerRecord {\n const result = MongoMarkerDocSchema(doc);\n if (result instanceof type.errors) {\n throw new Error(`Invalid marker doc on ${COLLECTION}: ${result.summary}`);\n }\n return {\n storageHash: result.storageHash,\n profileHash: result.profileHash,\n contractJson: result.contractJson ?? null,\n canonicalVersion: result.canonicalVersion ?? null,\n updatedAt: result.updatedAt ?? new Date(),\n appTag: result.appTag ?? null,\n meta: (result.meta as Record<string, unknown> | null) ?? {},\n invariants: result.invariants ?? [],\n };\n}\n\nexport function parseMongoMarkerDocSafely(doc: unknown, space: string): ContractMarkerRecord {\n return parseMarkerRowSafely(doc, parseMongoMarkerDoc, {\n space,\n markerLocation: MONGO_MARKER_COLLECTION,\n });\n}\n\nexport async function executeAggregate(db: Db, cmd: RawAggregateCommand): Promise<Document[]> {\n return db\n .collection(cmd.collection)\n .aggregate(cmd.pipeline as Record<string, unknown>[])\n .toArray();\n}\n\nexport async function executeInsertOne(db: Db, cmd: RawInsertOneCommand): Promise<void> {\n await db.collection(cmd.collection).insertOne(cmd.document);\n}\n\nexport async function executeFindOneAndUpdate(\n db: Db,\n cmd: RawFindOneAndUpdateCommand,\n): Promise<Document | null> {\n return db\n .collection(cmd.collection)\n .findOneAndUpdate(cmd.filter, cmd.update as UpdateFilter<Document> | Document[], {\n upsert: cmd.upsert,\n });\n}\n","import type { ControlDriverInstance } from '@prisma-next/framework-components/control';\nimport type { MongoControlDriverInstance } from '@prisma-next/mongo-lowering';\n\nexport function isMongoControlDriver(\n driver: ControlDriverInstance<'mongo', string>,\n): driver is MongoControlDriverInstance {\n return driver.familyId === 'mongo' && driver.targetId === 'mongo';\n}\n","import type { ContractMarkerRecord } from '@prisma-next/contract/types';\nimport type { MongoControlAdapter } from '@prisma-next/family-mongo/control-adapter';\nimport type {\n ControlDriverInstance,\n ControlFamilyInstance,\n} from '@prisma-next/framework-components/control';\nimport type { MongoAdapter, MongoDriver } from '@prisma-next/mongo-lowering';\nimport type {\n MongoDdlCommandVisitor,\n MongoInspectionCommandVisitor,\n} from '@prisma-next/mongo-query-ast/control';\nimport type { MongoSchemaIR } from '@prisma-next/mongo-schema-ir';\nimport type { Db } from 'mongodb';\nimport { createMongoAdapter } from '../mongo-adapter';\nimport { MongoCommandExecutor, MongoInspectionExecutor } from './command-executor';\nimport { MongoControlAdapterImpl } from './mongo-control-adapter';\nimport { isMongoControlDriver } from './mongo-control-driver';\n\nexport function extractDb(driver: ControlDriverInstance<'mongo', 'mongo'>): Db {\n if (!isMongoControlDriver(driver)) {\n throw new Error(\n 'Expected a Mongo control driver created by ' +\n 'mongoControlDriver.create() from `@prisma-next/driver-mongo/control`.',\n );\n }\n return driver.db;\n}\n\n/**\n * Marker / ledger operations the Mongo runner depends on. Every method\n * takes a `space` parameter so each loaded contract space addresses its\n * own marker row independently — see ADR 212 for the per-space\n * mechanism.\n */\nexport interface MarkerOperations {\n readMarker(space: string): Promise<ContractMarkerRecord | null>;\n initMarker(\n space: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n ): Promise<void>;\n updateMarker(\n space: string,\n expectedFrom: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n ): Promise<boolean>;\n writeLedgerEntry(\n space: string,\n entry: {\n readonly edgeId: string;\n readonly from: string;\n readonly to: string;\n readonly migrationName: string;\n readonly migrationHash: string;\n readonly operations: readonly unknown[];\n },\n ): Promise<void>;\n}\n\nexport interface MongoRunnerDependencies {\n readonly commandExecutor: MongoDdlCommandVisitor<Promise<void>>;\n readonly inspectionExecutor: MongoInspectionCommandVisitor<Promise<Record<string, unknown>[]>>;\n readonly adapter: MongoAdapter;\n readonly driver: MongoDriver;\n readonly markerOps: MarkerOperations;\n readonly introspectSchema: () => Promise<MongoSchemaIR>;\n}\n\n/**\n * Build the runner-dependencies envelope. `controlAdapter` is the\n * dispatch surface for wire-level Mongo CAS operations (marker reads,\n * marker advances, ledger appends, introspection); the envelope's\n * `markerOps` shim simply forwards each call through it. When the\n * caller already has a `MongoControlAdapter` on the control stack it\n * can pass it in; otherwise a default `MongoControlAdapterImpl` is\n * constructed locally.\n */\nexport function createMongoRunnerDeps(\n controlDriver: ControlDriverInstance<'mongo', 'mongo'>,\n driver: MongoDriver,\n // Vestigial after the family→adapter SPI refactor: the runner dependencies\n // now route every wire-level call through `controlAdapter`, so the `family`\n // instance is no longer consulted. Kept on the signature to avoid rippling\n // through ~14 call sites; a follow-up that already touches this factory\n // should drop the parameter outright.\n _family: ControlFamilyInstance<'mongo', MongoSchemaIR>,\n controlAdapter: MongoControlAdapter<'mongo'> = new MongoControlAdapterImpl(),\n): MongoRunnerDependencies {\n return {\n commandExecutor: new MongoCommandExecutor(extractDb(controlDriver)),\n inspectionExecutor: new MongoInspectionExecutor(extractDb(controlDriver)),\n adapter: createMongoAdapter(),\n driver,\n markerOps: {\n readMarker: (space) => controlAdapter.readMarker(controlDriver, space),\n initMarker: (space, dest) => controlAdapter.initMarker(controlDriver, space, dest),\n updateMarker: (space, expectedFrom, dest) =>\n controlAdapter.updateMarker(controlDriver, space, expectedFrom, dest),\n writeLedgerEntry: (space, entry) =>\n controlAdapter.writeLedgerEntry(controlDriver, space, entry),\n },\n introspectSchema: () => controlAdapter.introspectSchema(controlDriver),\n };\n}\n","import type { ContractMarkerRecord, LedgerEntryRecord } from '@prisma-next/contract/types';\nimport { withMarkerReadErrorHandling } from '@prisma-next/errors/execution';\nimport type { MongoControlAdapter } from '@prisma-next/family-mongo/control-adapter';\nimport type { ControlDriverInstance } from '@prisma-next/framework-components/control';\nimport { ledgerOriginFromStored } from '@prisma-next/migration-tools/ledger-origin';\nimport {\n RawAggregateCommand,\n RawFindOneAndUpdateCommand,\n RawInsertOneCommand,\n} from '@prisma-next/mongo-query-ast/execution';\nimport type { MongoSchemaIR } from '@prisma-next/mongo-schema-ir';\nimport type { Document } from 'mongodb';\nimport { introspectSchema } from './introspect-schema';\nimport {\n COLLECTION,\n executeAggregate,\n executeFindOneAndUpdate,\n executeInsertOne,\n MONGO_LEDGER_COLLECTION,\n MONGO_MARKER_COLLECTION,\n parseMongoMarkerDocSafely,\n} from './marker-ledger';\nimport { extractDb } from './runner-deps';\n\n/**\n * Mongo control adapter for control-plane operations like introspection\n * and marker-ledger CAS. Implements the family-level `MongoControlAdapter`\n * SPI by extracting the underlying `Db` from the framework-shaped driver\n * per call.\n */\nexport class MongoControlAdapterImpl implements MongoControlAdapter<'mongo'> {\n readonly familyId = 'mongo' as const;\n readonly targetId = 'mongo' as const;\n\n async readMarker(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space: string,\n ): Promise<ContractMarkerRecord | null> {\n const db = extractDb(driver);\n const markerContext = { space, markerLocation: MONGO_MARKER_COLLECTION };\n const docs = await withMarkerReadErrorHandling(\n () =>\n executeAggregate(\n db,\n new RawAggregateCommand(COLLECTION, [{ $match: { _id: space, space } }, { $limit: 1 }]),\n ),\n markerContext,\n );\n const doc = docs[0];\n if (!doc) return null;\n return parseMongoMarkerDocSafely(doc, space);\n }\n\n async readAllMarkers(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n ): Promise<ReadonlyMap<string, ContractMarkerRecord>> {\n const db = extractDb(driver);\n const markerContext = { space: 'app', markerLocation: MONGO_MARKER_COLLECTION };\n const docs = await withMarkerReadErrorHandling(\n () =>\n executeAggregate(\n db,\n new RawAggregateCommand(COLLECTION, [\n {\n $match: {\n _id: { $type: 'string' },\n space: { $type: 'string' },\n $expr: { $eq: ['$_id', '$space'] },\n },\n },\n ]),\n ),\n markerContext,\n );\n const out = new Map<string, ContractMarkerRecord>();\n for (const doc of docs) {\n const space = doc['space'];\n /* v8 ignore next -- @preserve type-narrowing guard: the $match stage above filters on `space: { $type: 'string' }`, so this branch is unreachable at runtime. The check exists so the `out.set(space, ...)` call below can accept `string`. */\n if (typeof space !== 'string') continue;\n out.set(space, parseMongoMarkerDocSafely(doc, space));\n }\n return out;\n }\n\n async initMarker(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n ): Promise<void> {\n const db = extractDb(driver);\n const cmd = new RawInsertOneCommand(COLLECTION, {\n _id: space,\n space,\n storageHash: destination.storageHash,\n profileHash: destination.profileHash,\n contractJson: null,\n canonicalVersion: null,\n updatedAt: new Date(),\n appTag: null,\n meta: {},\n invariants: destination.invariants ?? [],\n });\n await executeInsertOne(db, cmd);\n }\n\n async updateMarker(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space: string,\n expectedFrom: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n ): Promise<boolean> {\n const db = extractDb(driver);\n const setBase: Record<string, unknown> = {\n storageHash: destination.storageHash,\n profileHash: destination.profileHash,\n updatedAt: new Date(),\n };\n const update: Document | Document[] =\n destination.invariants === undefined\n ? { $set: setBase }\n : [\n {\n $set: {\n ...setBase,\n invariants: {\n $sortArray: {\n input: {\n $setUnion: [{ $ifNull: ['$invariants', []] }, destination.invariants],\n },\n sortBy: 1,\n },\n },\n },\n },\n ];\n const cmd = new RawFindOneAndUpdateCommand(\n COLLECTION,\n { _id: space, space, storageHash: expectedFrom },\n update,\n false,\n );\n const result = await executeFindOneAndUpdate(db, cmd);\n return result !== null;\n }\n\n async writeLedgerEntry(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space: string,\n entry: {\n readonly edgeId: string;\n readonly from: string;\n readonly to: string;\n readonly migrationName: string;\n readonly migrationHash: string;\n readonly operations: readonly unknown[];\n },\n ): Promise<void> {\n const db = extractDb(driver);\n const cmd = new RawInsertOneCommand(COLLECTION, {\n type: 'ledger',\n space,\n edgeId: entry.edgeId,\n from: entry.from,\n to: entry.to,\n migrationName: entry.migrationName,\n migrationHash: entry.migrationHash,\n operations: entry.operations,\n appliedAt: new Date(),\n });\n await executeInsertOne(db, cmd);\n }\n\n async readLedger(\n driver: ControlDriverInstance<'mongo', 'mongo'>,\n space?: string,\n ): Promise<readonly LedgerEntryRecord[]> {\n const db = extractDb(driver);\n const ledgerContext = { space: space ?? '*', markerLocation: MONGO_LEDGER_COLLECTION };\n const matchStage: Record<string, unknown> = { type: 'ledger' };\n if (space !== undefined) {\n matchStage['space'] = space;\n }\n const docs = await withMarkerReadErrorHandling(\n () =>\n executeAggregate(\n db,\n new RawAggregateCommand(COLLECTION, [{ $match: matchStage }, { $sort: { _id: 1 } }]),\n ),\n ledgerContext,\n );\n\n const entries: LedgerEntryRecord[] = [];\n for (const doc of docs) {\n const migrationName = doc['migrationName'];\n const migrationHash = doc['migrationHash'];\n const from = doc['from'];\n const to = doc['to'];\n const docSpace = doc['space'];\n if (typeof migrationName !== 'string' || typeof migrationHash !== 'string') {\n continue;\n }\n if (typeof from !== 'string' || typeof to !== 'string') {\n continue;\n }\n if (typeof docSpace !== 'string') {\n continue;\n }\n const appliedAt = doc['appliedAt'];\n const appliedAtDate =\n appliedAt instanceof Date\n ? appliedAt\n : appliedAt !== undefined\n ? new Date(String(appliedAt))\n : new Date();\n const operations = doc['operations'];\n const opList = Array.isArray(operations) ? operations : [];\n entries.push({\n space: docSpace,\n migrationName,\n migrationHash,\n from: ledgerOriginFromStored(from),\n to,\n appliedAt: appliedAtDate,\n operationCount: opList.length,\n });\n }\n return entries;\n }\n\n async introspectSchema(driver: ControlDriverInstance<'mongo', 'mongo'>): Promise<MongoSchemaIR> {\n return introspectSchema(extractDb(driver));\n }\n}\n","import type { ContractMarkerRecord, LedgerEntryRecord } from '@prisma-next/contract/types';\nimport type { MongoControlAdapterDescriptor } from '@prisma-next/family-mongo/control-adapter';\nimport type { ControlDriverInstance } from '@prisma-next/framework-components/control';\nimport type { Db } from 'mongodb';\n\nexport type { MongoControlDriverInstance } from '@prisma-next/mongo-lowering';\nexport { MongoCommandExecutor, MongoInspectionExecutor } from '../core/command-executor';\nexport { introspectSchema } from '../core/introspect-schema';\nexport { MongoControlAdapterImpl } from '../core/mongo-control-adapter';\nexport { isMongoControlDriver } from '../core/mongo-control-driver';\nexport {\n createMongoRunnerDeps,\n extractDb,\n type MarkerOperations,\n type MongoRunnerDependencies,\n} from '../core/runner-deps';\nexport { createMongoAdapter } from '../mongo-adapter';\n\nimport { mongoCodecDescriptors } from '../core/codecs';\nimport { MongoControlAdapterImpl } from '../core/mongo-control-adapter';\n\nconst defaultControlAdapter = new MongoControlAdapterImpl();\n\nfunction controlDriverFromDb(db: Db): ControlDriverInstance<'mongo', 'mongo'> & { db: Db } {\n return {\n familyId: 'mongo',\n targetId: 'mongo',\n db,\n close: async () => {},\n };\n}\n\nexport async function readMarker(db: Db, space: string): Promise<ContractMarkerRecord | null> {\n return defaultControlAdapter.readMarker(controlDriverFromDb(db), space);\n}\n\nexport async function readAllMarkers(db: Db): Promise<ReadonlyMap<string, ContractMarkerRecord>> {\n return defaultControlAdapter.readAllMarkers(controlDriverFromDb(db));\n}\n\nexport async function initMarker(\n db: Db,\n space: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n): Promise<void> {\n await defaultControlAdapter.initMarker(controlDriverFromDb(db), space, destination);\n}\n\nexport async function updateMarker(\n db: Db,\n space: string,\n expectedFrom: string,\n destination: {\n readonly storageHash: string;\n readonly profileHash: string;\n readonly invariants?: readonly string[];\n },\n): Promise<boolean> {\n return defaultControlAdapter.updateMarker(\n controlDriverFromDb(db),\n space,\n expectedFrom,\n destination,\n );\n}\n\nexport async function readLedger(db: Db, space?: string): Promise<readonly LedgerEntryRecord[]> {\n return defaultControlAdapter.readLedger(controlDriverFromDb(db), space);\n}\n\nexport async function writeLedgerEntry(\n db: Db,\n space: string,\n entry: {\n readonly edgeId: string;\n readonly from: string;\n readonly to: string;\n readonly migrationName: string;\n readonly migrationHash: string;\n readonly operations: readonly unknown[];\n },\n): Promise<void> {\n await defaultControlAdapter.writeLedgerEntry(controlDriverFromDb(db), space, entry);\n}\n\nexport const mongoAdapterDescriptor: MongoControlAdapterDescriptor<'mongo'> = {\n kind: 'adapter',\n id: 'mongo',\n familyId: 'mongo',\n targetId: 'mongo',\n version: '0.0.1',\n scalarTypeDescriptors: new Map([\n ['String', 'mongo/string@1'],\n ['Int', 'mongo/int32@1'],\n ['Boolean', 'mongo/bool@1'],\n ['DateTime', 'mongo/date@1'],\n ['ObjectId', 'mongo/objectId@1'],\n ['Float', 'mongo/double@1'],\n ]),\n types: {\n codecTypes: {\n codecDescriptors: mongoCodecDescriptors,\n import: {\n package: '@prisma-next/adapter-mongo/codec-types',\n named: 'CodecTypes',\n alias: 'MongoCodecTypes',\n },\n typeImports: [\n {\n package: '@prisma-next/adapter-mongo/codec-types',\n named: 'Vector',\n alias: 'Vector',\n },\n ],\n },\n },\n create(_stack) {\n return new MongoControlAdapterImpl();\n },\n};\n\nexport default mongoAdapterDescriptor;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,37 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/adapter-mongo",
|
|
3
|
-
"version": "0.12.0-dev.
|
|
3
|
+
"version": "0.12.0-dev.50",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"description": "MongoDB adapter for Prisma Next (lowers commands to wire format)",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@prisma-next/config": "0.12.0-dev.
|
|
10
|
-
"@prisma-next/contract": "0.12.0-dev.
|
|
11
|
-
"@prisma-next/errors": "0.12.0-dev.
|
|
12
|
-
"@prisma-next/family-mongo": "0.12.0-dev.
|
|
13
|
-
"@prisma-next/framework-components": "0.12.0-dev.
|
|
14
|
-
"@prisma-next/migration-tools": "0.12.0-dev.
|
|
15
|
-
"@prisma-next/mongo-codec": "0.12.0-dev.
|
|
16
|
-
"@prisma-next/mongo-contract": "0.12.0-dev.
|
|
17
|
-
"@prisma-next/mongo-lowering": "0.12.0-dev.
|
|
18
|
-
"@prisma-next/mongo-query-ast": "0.12.0-dev.
|
|
19
|
-
"@prisma-next/mongo-schema-ir": "0.12.0-dev.
|
|
20
|
-
"@prisma-next/mongo-value": "0.12.0-dev.
|
|
21
|
-
"@prisma-next/mongo-wire": "0.12.0-dev.
|
|
22
|
-
"@prisma-next/operations": "0.12.0-dev.
|
|
23
|
-
"@prisma-next/utils": "0.12.0-dev.
|
|
9
|
+
"@prisma-next/config": "0.12.0-dev.50",
|
|
10
|
+
"@prisma-next/contract": "0.12.0-dev.50",
|
|
11
|
+
"@prisma-next/errors": "0.12.0-dev.50",
|
|
12
|
+
"@prisma-next/family-mongo": "0.12.0-dev.50",
|
|
13
|
+
"@prisma-next/framework-components": "0.12.0-dev.50",
|
|
14
|
+
"@prisma-next/migration-tools": "0.12.0-dev.50",
|
|
15
|
+
"@prisma-next/mongo-codec": "0.12.0-dev.50",
|
|
16
|
+
"@prisma-next/mongo-contract": "0.12.0-dev.50",
|
|
17
|
+
"@prisma-next/mongo-lowering": "0.12.0-dev.50",
|
|
18
|
+
"@prisma-next/mongo-query-ast": "0.12.0-dev.50",
|
|
19
|
+
"@prisma-next/mongo-schema-ir": "0.12.0-dev.50",
|
|
20
|
+
"@prisma-next/mongo-value": "0.12.0-dev.50",
|
|
21
|
+
"@prisma-next/mongo-wire": "0.12.0-dev.50",
|
|
22
|
+
"@prisma-next/operations": "0.12.0-dev.50",
|
|
23
|
+
"@prisma-next/utils": "0.12.0-dev.50",
|
|
24
24
|
"arktype": "^2.2.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"mongodb": "^7.2.0",
|
|
28
|
-
"@prisma-next/
|
|
29
|
-
"@prisma-next/
|
|
30
|
-
"@prisma-next/
|
|
31
|
-
"@prisma-next/
|
|
32
|
-
"@prisma-next/
|
|
33
|
-
"@prisma-next/
|
|
34
|
-
"@prisma-next/tsdown": "0.12.0-dev.49",
|
|
28
|
+
"@prisma-next/errors": "0.12.0-dev.50",
|
|
29
|
+
"@prisma-next/mongo-contract-psl": "0.12.0-dev.50",
|
|
30
|
+
"@prisma-next/psl-parser": "0.12.0-dev.50",
|
|
31
|
+
"@prisma-next/test-utils": "0.12.0-dev.50",
|
|
32
|
+
"@prisma-next/tsconfig": "0.12.0-dev.50",
|
|
33
|
+
"@prisma-next/tsdown": "0.12.0-dev.50",
|
|
35
34
|
"mongodb-memory-server": "11.1.0",
|
|
36
35
|
"tsdown": "0.22.0",
|
|
37
36
|
"typescript": "5.9.3",
|
|
@@ -1,30 +1,8 @@
|
|
|
1
1
|
import type { ControlDriverInstance } from '@prisma-next/framework-components/control';
|
|
2
|
-
import type {
|
|
2
|
+
import type { MongoControlDriverInstance } from '@prisma-next/mongo-lowering';
|
|
3
3
|
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class MongoControlDriverImpl implements MongoControlDriverInstance {
|
|
9
|
-
readonly familyId = 'mongo' as const;
|
|
10
|
-
readonly targetId = 'mongo' as const;
|
|
11
|
-
readonly db: Db;
|
|
12
|
-
readonly #client: MongoClient;
|
|
13
|
-
|
|
14
|
-
constructor(db: Db, client: MongoClient) {
|
|
15
|
-
this.db = db;
|
|
16
|
-
this.#client = client;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
query(): Promise<never> {
|
|
20
|
-
throw new Error('MongoDB control driver does not support SQL queries');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async close(): Promise<void> {
|
|
24
|
-
await this.#client.close();
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export function createMongoControlDriver(db: Db, client: MongoClient): MongoControlDriverInstance {
|
|
29
|
-
return new MongoControlDriverImpl(db, client);
|
|
4
|
+
export function isMongoControlDriver(
|
|
5
|
+
driver: ControlDriverInstance<'mongo', string>,
|
|
6
|
+
): driver is MongoControlDriverInstance {
|
|
7
|
+
return driver.familyId === 'mongo' && driver.targetId === 'mongo';
|
|
30
8
|
}
|
package/src/core/runner-deps.ts
CHANGED
|
@@ -14,16 +14,16 @@ import type { Db } from 'mongodb';
|
|
|
14
14
|
import { createMongoAdapter } from '../mongo-adapter';
|
|
15
15
|
import { MongoCommandExecutor, MongoInspectionExecutor } from './command-executor';
|
|
16
16
|
import { MongoControlAdapterImpl } from './mongo-control-adapter';
|
|
17
|
+
import { isMongoControlDriver } from './mongo-control-driver';
|
|
17
18
|
|
|
18
19
|
export function extractDb(driver: ControlDriverInstance<'mongo', 'mongo'>): Db {
|
|
19
|
-
|
|
20
|
-
if (!mongoDriver.db) {
|
|
20
|
+
if (!isMongoControlDriver(driver)) {
|
|
21
21
|
throw new Error(
|
|
22
|
-
'Mongo control driver
|
|
23
|
-
'
|
|
22
|
+
'Expected a Mongo control driver created by ' +
|
|
23
|
+
'mongoControlDriver.create() from `@prisma-next/driver-mongo/control`.',
|
|
24
24
|
);
|
|
25
25
|
}
|
|
26
|
-
return
|
|
26
|
+
return driver.db;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/**
|
package/src/exports/control.ts
CHANGED
|
@@ -3,13 +3,11 @@ import type { MongoControlAdapterDescriptor } from '@prisma-next/family-mongo/co
|
|
|
3
3
|
import type { ControlDriverInstance } from '@prisma-next/framework-components/control';
|
|
4
4
|
import type { Db } from 'mongodb';
|
|
5
5
|
|
|
6
|
+
export type { MongoControlDriverInstance } from '@prisma-next/mongo-lowering';
|
|
6
7
|
export { MongoCommandExecutor, MongoInspectionExecutor } from '../core/command-executor';
|
|
7
8
|
export { introspectSchema } from '../core/introspect-schema';
|
|
8
9
|
export { MongoControlAdapterImpl } from '../core/mongo-control-adapter';
|
|
9
|
-
export {
|
|
10
|
-
createMongoControlDriver,
|
|
11
|
-
type MongoControlDriverInstance,
|
|
12
|
-
} from '../core/mongo-control-driver';
|
|
10
|
+
export { isMongoControlDriver } from '../core/mongo-control-driver';
|
|
13
11
|
export {
|
|
14
12
|
createMongoRunnerDeps,
|
|
15
13
|
extractDb,
|
|
@@ -28,7 +26,6 @@ function controlDriverFromDb(db: Db): ControlDriverInstance<'mongo', 'mongo'> &
|
|
|
28
26
|
familyId: 'mongo',
|
|
29
27
|
targetId: 'mongo',
|
|
30
28
|
db,
|
|
31
|
-
query: () => Promise.reject(new Error('MongoDB control driver does not support SQL queries')),
|
|
32
29
|
close: async () => {},
|
|
33
30
|
};
|
|
34
31
|
}
|