@prisma-next/adapter-mongo 0.5.0-dev.5 → 0.5.0-dev.7
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 +2 -2
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs +3 -2
- package/dist/control.mjs.map +1 -1
- package/package.json +15 -15
- package/src/core/runner-deps.ts +7 -1
package/dist/control.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ import { Db, Document, MongoClient } from "mongodb";
|
|
|
2
2
|
import { CollModCommand, CreateCollectionCommand, CreateIndexCommand, DropCollectionCommand, DropIndexCommand, ListCollectionsCommand, ListIndexesCommand, MongoDdlCommandVisitor, MongoInspectionCommandVisitor } from "@prisma-next/mongo-query-ast/control";
|
|
3
3
|
import { MongoSchemaIR } from "@prisma-next/mongo-schema-ir";
|
|
4
4
|
import { MongoRunnerDependencies } from "@prisma-next/target-mongo/control";
|
|
5
|
-
import { ControlAdapterDescriptor, ControlDriverInstance } from "@prisma-next/framework-components/control";
|
|
5
|
+
import { ControlAdapterDescriptor, ControlDriverInstance, ControlFamilyInstance } from "@prisma-next/framework-components/control";
|
|
6
6
|
import { MongoDriver } from "@prisma-next/mongo-lowering";
|
|
7
7
|
|
|
8
8
|
//#region src/core/command-executor.d.ts
|
|
@@ -33,7 +33,7 @@ declare function createMongoControlDriver(db: Db, client: MongoClient): MongoCon
|
|
|
33
33
|
//#endregion
|
|
34
34
|
//#region src/core/runner-deps.d.ts
|
|
35
35
|
declare function extractDb(driver: ControlDriverInstance<'mongo', 'mongo'>): Db;
|
|
36
|
-
declare function createMongoRunnerDeps(controlDriver: ControlDriverInstance<'mongo', 'mongo'>, driver: MongoDriver): MongoRunnerDependencies;
|
|
36
|
+
declare function createMongoRunnerDeps(controlDriver: ControlDriverInstance<'mongo', 'mongo'>, driver: MongoDriver, family: ControlFamilyInstance<'mongo', MongoSchemaIR>): MongoRunnerDependencies;
|
|
37
37
|
//#endregion
|
|
38
38
|
//#region src/exports/control.d.ts
|
|
39
39
|
declare const mongoAdapterDescriptor: ControlAdapterDescriptor<'mongo', 'mongo'>;
|
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-driver.ts","../src/core/runner-deps.ts","../src/exports/control.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAca,oBAAA,YAAgC,uBAAuB;;kBACjC;mBAEV,qBAAqB;iBAmBvB,mBAAmB;wBAIZ,0BAA0B;EA1B3C,cAAA,CAAA,GAAA,EA0Ce,qBA1CM,CAAA,EA0CkB,OA1ClB,CAAA,IAAA,CAAA;EAAkC,OAAA,CAAA,GAAA,EA8C/C,cA9C+C,CAAA,EA8C9B,OA9C8B,CAAA,IAAA,CAAA;;AAG3C,cAsDZ,uBAAA,YAAmC,6BAtDvB,CAsDqD,OAtDrD,CAsD6D,QAtD7D,EAAA,CAAA,CAAA,CAAA;EAAqB,iBAAA,EAAA;EAmBvB,WAAA,CAAA,EAAA,EAoCY,EApCZ;EAAmB,WAAA,CAAA,GAAA,EAsCjB,kBAtCiB,CAAA,EAsCI,OAtCJ,CAsCY,QAtCZ,EAAA,CAAA;EAIZ,eAAA,CAAA,IAAA,EA6CA,sBA7CA,CAAA,EA6CyB,OA7CzB,CA6CiC,QA7CjC,EAAA,CAAA;;;;iBC8CR,gBAAA,KAAqB,KAAK,QAAQ;;;UCnFvC,0BAAA,SAAmC;eACrC;;iBAuBC,wBAAA,KAA6B,YAAY,cAAc;;;
|
|
1
|
+
{"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/command-executor.ts","../src/core/introspect-schema.ts","../src/core/mongo-control-driver.ts","../src/core/runner-deps.ts","../src/exports/control.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAca,oBAAA,YAAgC,uBAAuB;;kBACjC;mBAEV,qBAAqB;iBAmBvB,mBAAmB;wBAIZ,0BAA0B;EA1B3C,cAAA,CAAA,GAAA,EA0Ce,qBA1CM,CAAA,EA0CkB,OA1ClB,CAAA,IAAA,CAAA;EAAkC,OAAA,CAAA,GAAA,EA8C/C,cA9C+C,CAAA,EA8C9B,OA9C8B,CAAA,IAAA,CAAA;;AAG3C,cAsDZ,uBAAA,YAAmC,6BAtDvB,CAsDqD,OAtDrD,CAsD6D,QAtD7D,EAAA,CAAA,CAAA,CAAA;EAAqB,iBAAA,EAAA;EAmBvB,WAAA,CAAA,EAAA,EAoCY,EApCZ;EAAmB,WAAA,CAAA,GAAA,EAsCjB,kBAtCiB,CAAA,EAsCI,OAtCJ,CAsCY,QAtCZ,EAAA,CAAA;EAIZ,eAAA,CAAA,IAAA,EA6CA,sBA7CA,CAAA,EA6CyB,OA7CzB,CA6CiC,QA7CjC,EAAA,CAAA;;;;iBC8CR,gBAAA,KAAqB,KAAK,QAAQ;;;UCnFvC,0BAAA,SAAmC;eACrC;;iBAuBC,wBAAA,KAA6B,YAAY,cAAc;;;iBCVvD,SAAA,SAAkB,0CAA0C;iBAW5D,qBAAA,gBACC,iDACP,qBACA,+BAA+B,iBACtC;;;cCZG,wBAAwB"}
|
package/dist/control.mjs
CHANGED
|
@@ -186,7 +186,7 @@ function extractDb(driver) {
|
|
|
186
186
|
if (!mongoDriver.db) throw new Error("Mongo control driver does not expose a db property. Use mongoControlDriver.create() from `@prisma-next/driver-mongo/control`.");
|
|
187
187
|
return mongoDriver.db;
|
|
188
188
|
}
|
|
189
|
-
function createMongoRunnerDeps(controlDriver, driver) {
|
|
189
|
+
function createMongoRunnerDeps(controlDriver, driver, family) {
|
|
190
190
|
const db = extractDb(controlDriver);
|
|
191
191
|
return {
|
|
192
192
|
commandExecutor: new MongoCommandExecutor(db),
|
|
@@ -198,7 +198,8 @@ function createMongoRunnerDeps(controlDriver, driver) {
|
|
|
198
198
|
initMarker: (dest) => initMarker(db, dest),
|
|
199
199
|
updateMarker: (expectedFrom, dest) => updateMarker(db, expectedFrom, dest),
|
|
200
200
|
writeLedgerEntry: (entry) => writeLedgerEntry(db, entry)
|
|
201
|
-
}
|
|
201
|
+
},
|
|
202
|
+
introspectSchema: () => family.introspect({ driver: controlDriver })
|
|
202
203
|
};
|
|
203
204
|
}
|
|
204
205
|
|
package/dist/control.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.mjs","names":["db: Db","keySpec: Document","options: Record<string, unknown>","command: Record<string, unknown>","error: unknown","keys: MongoIndexKey[]","collections: MongoSchemaCollection[]","#client","mongoAdapterDescriptor: ControlAdapterDescriptor<'mongo', 'mongo'>"],"sources":["../src/core/command-executor.ts","../src/core/introspect-schema.ts","../src/core/mongo-control-driver.ts","../src/core/runner-deps.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\nfunction 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 { 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 { ControlDriverInstance } from '@prisma-next/framework-components/control';\nimport type { MongoDriver } from '@prisma-next/mongo-lowering';\nimport {\n initMarker,\n type MongoRunnerDependencies,\n readMarker,\n updateMarker,\n writeLedgerEntry,\n} from '@prisma-next/target-mongo/control';\nimport type { Db } from 'mongodb';\nimport { createMongoAdapter } from '../mongo-adapter';\nimport { MongoCommandExecutor, MongoInspectionExecutor } from './command-executor';\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\nexport function createMongoRunnerDeps(\n controlDriver: ControlDriverInstance<'mongo', 'mongo'>,\n driver: MongoDriver,\n): MongoRunnerDependencies {\n const db = extractDb(controlDriver);\n return {\n commandExecutor: new MongoCommandExecutor(db),\n inspectionExecutor: new MongoInspectionExecutor(db),\n adapter: createMongoAdapter(),\n driver,\n markerOps: {\n readMarker: () => readMarker(db),\n initMarker: (dest) => initMarker(db, dest),\n updateMarker: (expectedFrom, dest) => updateMarker(db, expectedFrom, dest),\n writeLedgerEntry: (entry) => writeLedgerEntry(db, entry),\n },\n };\n}\n","import type { ControlAdapterDescriptor } from '@prisma-next/framework-components/control';\n\nexport { MongoCommandExecutor, MongoInspectionExecutor } from '../core/command-executor';\nexport { introspectSchema } from '../core/introspect-schema';\nexport {\n createMongoControlDriver,\n type MongoControlDriverInstance,\n} from '../core/mongo-control-driver';\nexport { createMongoRunnerDeps, extractDb } from '../core/runner-deps';\n\nimport {\n mongoBooleanCodec,\n mongoDateCodec,\n mongoDoubleCodec,\n mongoInt32Codec,\n mongoObjectIdCodec,\n mongoStringCodec,\n mongoVectorCodec,\n} from '../core/codecs';\n\nconst mongoAdapterDescriptor: ControlAdapterDescriptor<'mongo', '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 codecInstances: [\n mongoObjectIdCodec,\n mongoStringCodec,\n mongoDoubleCodec,\n mongoInt32Codec,\n mongoBooleanCodec,\n mongoDateCodec,\n mongoVectorCodec,\n ],\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 { familyId: 'mongo' as const, targetId: 'mongo' as const };\n },\n};\n\nexport default mongoAdapterDescriptor;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"control.mjs","names":["db: Db","keySpec: Document","options: Record<string, unknown>","command: Record<string, unknown>","error: unknown","keys: MongoIndexKey[]","collections: MongoSchemaCollection[]","#client","mongoAdapterDescriptor: ControlAdapterDescriptor<'mongo', 'mongo'>"],"sources":["../src/core/command-executor.ts","../src/core/introspect-schema.ts","../src/core/mongo-control-driver.ts","../src/core/runner-deps.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\nfunction 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 { 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 {\n ControlDriverInstance,\n ControlFamilyInstance,\n} from '@prisma-next/framework-components/control';\nimport type { MongoDriver } from '@prisma-next/mongo-lowering';\nimport type { MongoSchemaIR } from '@prisma-next/mongo-schema-ir';\nimport {\n initMarker,\n type MongoRunnerDependencies,\n readMarker,\n updateMarker,\n writeLedgerEntry,\n} from '@prisma-next/target-mongo/control';\nimport type { Db } from 'mongodb';\nimport { createMongoAdapter } from '../mongo-adapter';\nimport { MongoCommandExecutor, MongoInspectionExecutor } from './command-executor';\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\nexport function createMongoRunnerDeps(\n controlDriver: ControlDriverInstance<'mongo', 'mongo'>,\n driver: MongoDriver,\n family: ControlFamilyInstance<'mongo', MongoSchemaIR>,\n): MongoRunnerDependencies {\n const db = extractDb(controlDriver);\n return {\n commandExecutor: new MongoCommandExecutor(db),\n inspectionExecutor: new MongoInspectionExecutor(db),\n adapter: createMongoAdapter(),\n driver,\n markerOps: {\n readMarker: () => readMarker(db),\n initMarker: (dest) => initMarker(db, dest),\n updateMarker: (expectedFrom, dest) => updateMarker(db, expectedFrom, dest),\n writeLedgerEntry: (entry) => writeLedgerEntry(db, entry),\n },\n introspectSchema: () => family.introspect({ driver: controlDriver }),\n };\n}\n","import type { ControlAdapterDescriptor } from '@prisma-next/framework-components/control';\n\nexport { MongoCommandExecutor, MongoInspectionExecutor } from '../core/command-executor';\nexport { introspectSchema } from '../core/introspect-schema';\nexport {\n createMongoControlDriver,\n type MongoControlDriverInstance,\n} from '../core/mongo-control-driver';\nexport { createMongoRunnerDeps, extractDb } from '../core/runner-deps';\n\nimport {\n mongoBooleanCodec,\n mongoDateCodec,\n mongoDoubleCodec,\n mongoInt32Codec,\n mongoObjectIdCodec,\n mongoStringCodec,\n mongoVectorCodec,\n} from '../core/codecs';\n\nconst mongoAdapterDescriptor: ControlAdapterDescriptor<'mongo', '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 codecInstances: [\n mongoObjectIdCodec,\n mongoStringCodec,\n mongoDoubleCodec,\n mongoInt32Codec,\n mongoBooleanCodec,\n mongoDateCodec,\n mongoVectorCodec,\n ],\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 { familyId: 'mongo' as const, targetId: 'mongo' as const };\n },\n};\n\nexport default mongoAdapterDescriptor;\n"],"mappings":";;;;;;;AAcA,IAAa,uBAAb,MAAmF;CACjF,YAAY,AAAiBA,IAAQ;EAAR;;CAE7B,MAAM,YAAY,KAAwC;EACxD,MAAMC,UAAoB,cAAc,IAAI,KAAK;EACjD,MAAMC,UAAmC,EAAE;AAC3C,MAAI,IAAI,WAAW,OAAW,SAAQ,YAAY,IAAI;AACtD,MAAI,IAAI,WAAW,OAAW,SAAQ,YAAY,IAAI;AACtD,MAAI,IAAI,uBAAuB,OAC7B,SAAQ,wBAAwB,IAAI;AACtC,MAAI,IAAI,4BAA4B,OAClC,SAAQ,6BAA6B,IAAI;AAC3C,MAAI,IAAI,SAAS,OAAW,SAAQ,UAAU,IAAI;AAClD,MAAI,IAAI,uBAAuB,OAC7B,SAAQ,wBAAwB,IAAI;AACtC,MAAI,IAAI,cAAc,OAAW,SAAQ,eAAe,IAAI;AAC5D,MAAI,IAAI,YAAY,OAAW,SAAQ,aAAa,IAAI;AACxD,MAAI,IAAI,qBAAqB,OAAW,SAAQ,sBAAsB,IAAI;AAC1E,MAAI,IAAI,sBAAsB,OAAW,SAAQ,uBAAuB,IAAI;AAC5E,QAAM,KAAK,GAAG,WAAW,IAAI,WAAW,CAAC,YAAY,SAAS,QAAQ;;CAGxE,MAAM,UAAU,KAAsC;AACpD,QAAM,KAAK,GAAG,WAAW,IAAI,WAAW,CAAC,UAAU,IAAI,KAAK;;CAG9D,MAAM,iBAAiB,KAA6C;EAClE,MAAMA,UAAmC,EAAE;AAC3C,MAAI,IAAI,WAAW,OAAW,SAAQ,YAAY,IAAI;AACtD,MAAI,IAAI,SAAS,OAAW,SAAQ,UAAU,IAAI;AAClD,MAAI,IAAI,QAAQ,OAAW,SAAQ,SAAS,IAAI;AAChD,MAAI,IAAI,eAAe,OAAW,SAAQ,gBAAgB,IAAI;AAC9D,MAAI,IAAI,cAAc,OAAW,SAAQ,eAAe,IAAI;AAC5D,MAAI,IAAI,mBAAmB,OAAW,SAAQ,oBAAoB,IAAI;AACtE,MAAI,IAAI,cAAc,OAAW,SAAQ,eAAe,IAAI;AAC5D,MAAI,IAAI,oBAAoB,OAAW,SAAQ,qBAAqB,IAAI;AACxE,MAAI,IAAI,qBAAqB,OAAW,SAAQ,sBAAsB,IAAI;AAC1E,MAAI,IAAI,iCAAiC,OACvC,SAAQ,kCAAkC,IAAI;AAChD,QAAM,KAAK,GAAG,iBAAiB,IAAI,YAAY,QAAQ;;CAGzD,MAAM,eAAe,KAA2C;AAC9D,QAAM,KAAK,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM;;CAGjD,MAAM,QAAQ,KAAoC;EAChD,MAAMC,UAAmC,EAAE,SAAS,IAAI,YAAY;AACpE,MAAI,IAAI,cAAc,OAAW,SAAQ,eAAe,IAAI;AAC5D,MAAI,IAAI,oBAAoB,OAAW,SAAQ,qBAAqB,IAAI;AACxE,MAAI,IAAI,qBAAqB,OAAW,SAAQ,sBAAsB,IAAI;AAC1E,MAAI,IAAI,iCAAiC,OACvC,SAAQ,kCAAkC,IAAI;AAChD,QAAM,KAAK,GAAG,QAAQ,QAAQ;;;AAIlC,IAAa,0BAAb,MAAmG;CACjG,YAAY,AAAiBH,IAAQ;EAAR;;CAE7B,MAAM,YAAY,KAA8C;AAC9D,MAAI;AACF,UAAO,MAAM,KAAK,GAAG,WAAW,IAAI,WAAW,CAAC,aAAa,CAAC,SAAS;WAChEI,OAAgB;AACvB,OAAI,iBAAiB,oBAAoB,MAAM,SAAS,GACtD,QAAO,EAAE;AAEX,SAAM;;;CAIV,MAAM,gBAAgB,MAAmD;AACvE,SAAO,KAAK,GAAG,iBAAiB,CAAC,SAAS;;;;;;AC5E9C,MAAM,+BAA+B;AAErC,SAAS,eAAe,SAAmD;CACzE,MAAMC,OAAwB,EAAE;AAChC,MAAK,MAAM,CAAC,OAAO,cAAc,OAAO,QAAQ,QAAQ,CACtD,MAAK,KAAK;EAAE;EAAkB;EAAqC,CAAC;AAEtE,QAAO;;AAGT,SAAS,iBAAiB,KAAwB;CAChD,MAAM,MAAM,IAAI;AAChB,KAAI,CAAC,IAAK,QAAO;CACjB,MAAM,UAAU,OAAO,QAAQ,IAAI;AACnC,QAAO,QAAQ,WAAW,KAAK,QAAQ,KAAK,OAAO,SAAS,QAAQ,KAAK,OAAO;;AAGlF,SAAS,WAAW,KAAiC;CACnD,MAAM,UAAU,IAAI;AACpB,QAAO,IAAI,iBAAiB;EAC1B,MAAM,eAAe,QAAQ;EAC7B,QAAQ,IAAI;EACZ,QAAQ,IAAI;EACZ,oBAAoB,IAAI;EACxB,yBAAyB,IAAI;EAC7B,oBAAoB,IAAI;EACxB,WAAW,IAAI;EACf,SAAS,IAAI;EACb,kBAAkB,IAAI;EACtB,mBAAmB,IAAI;EACxB,CAAC;;AAGJ,SAAS,eAAe,SAAqD;CAC3E,MAAM,YAAY,QAAQ;AAC1B,KAAI,CAAC,UAAW,QAAO;CAEvB,MAAM,aAAa,UAAU;AAC7B,KAAI,CAAC,WAAY,QAAO;AAExB,QAAO,IAAI,qBAAqB;EAC9B;EACA,iBAAkB,QAAQ,sBAAgD;EAC1E,kBAAmB,QAAQ,uBAA4C;EACxE,CAAC;;AAGJ,SAAS,uBAAuB,MAA0D;CACxF,MAAM,UAAU,KAAK;AACrB,KAAI,CAAC,QAAS,QAAO;CAErB,MAAM,SAAS,QAAQ;CACvB,MAAM,OAAO,QAAQ;CACrB,MAAM,MAAM,QAAQ;CACpB,MAAM,aAAa,QAAQ;CAG3B,MAAM,YAAY,QAAQ;CAC1B,MAAM,+BAA+B,QAAQ;CAG7C,MAAM,iBAAiB,QAAQ;AAI/B,KAAI,EADF,UAAU,cAAc,aAAa,gCAAgC,gBAC5C,QAAO;AAElC,QAAO,IAAI,6BAA6B;EACtC,GAAI,SAAS,EAAE,QAAQ;GAAE,MAAM,QAAQ;GAAG,GAAI,OAAO,OAAO,EAAE,KAAK,GAAG,EAAE;GAAG,EAAE,GAAG,EAAE;EAClF,GAAI,aAAa,EAAE,YAAY,GAAG,EAAE;EACpC,GAAI,YAAY,EAAE,WAAW,GAAG,EAAE;EAClC,GAAI,+BAA+B,EAAE,8BAA8B,GAAG,EAAE;EACxE,GAAI,iBAAiB,EAAE,gBAAgB,GAAG,EAAE;EAC7C,CAAC;;AAGJ,eAAsB,iBAAiB,IAAgC;CACrE,MAAM,kBAAkB,MAAM,GAAG,iBAAiB,CAAC,SAAS;CAE5D,MAAMC,cAAuC,EAAE;AAE/C,MAAK,MAAM,QAAQ,iBAAiB;EAClC,MAAM,OAAO,KAAK;EAClB,MAAM,OAAO,KAAK;AAElB,MAAI,SAAS,6BAA8B;AAC3C,MAAI,KAAK,WAAW,UAAU,CAAE;AAChC,MAAI,SAAS,OAAQ;EAGrB,MAAM,WADY,MAAM,GAAG,WAAW,KAAK,CAAC,aAAa,CAAC,SAAS,EACzC,QAAQ,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CAAC,IAAI,WAAW;EAGjF,MAAM,YAAY,eADE,aAAa,OAAQ,KAAK,aAAyC,EAAE,CAC5C;EAC7C,MAAM,UAAU,uBAAuB,KAAK;AAE5C,cAAY,KACV,IAAI,sBAAsB;GACxB;GACA;GACA,GAAI,YAAY,EAAE,WAAW,GAAG,EAAE;GAClC,GAAI,UAAU,EAAE,SAAS,GAAG,EAAE;GAC/B,CAAC,CACH;;AAGH,QAAO,IAAI,cAAc,YAAY;;;;;AC7GvC,IAAM,yBAAN,MAAmE;CACjE,AAAS,WAAW;CACpB,AAAS,WAAW;CACpB,AAAS;CACT,CAASC;CAET,YAAY,IAAQ,QAAqB;AACvC,OAAK,KAAK;AACV,QAAKA,SAAU;;CAGjB,QAAwB;AACtB,QAAM,IAAI,MAAM,sDAAsD;;CAGxE,MAAM,QAAuB;AAC3B,QAAM,MAAKA,OAAQ,OAAO;;;AAI9B,SAAgB,yBAAyB,IAAQ,QAAiD;AAChG,QAAO,IAAI,uBAAuB,IAAI,OAAO;;;;;ACX/C,SAAgB,UAAU,QAAqD;CAC7E,MAAM,cAAc;AACpB,KAAI,CAAC,YAAY,GACf,OAAM,IAAI,MACR,gIAED;AAEH,QAAO,YAAY;;AAGrB,SAAgB,sBACd,eACA,QACA,QACyB;CACzB,MAAM,KAAK,UAAU,cAAc;AACnC,QAAO;EACL,iBAAiB,IAAI,qBAAqB,GAAG;EAC7C,oBAAoB,IAAI,wBAAwB,GAAG;EACnD,SAAS,oBAAoB;EAC7B;EACA,WAAW;GACT,kBAAkB,WAAW,GAAG;GAChC,aAAa,SAAS,WAAW,IAAI,KAAK;GAC1C,eAAe,cAAc,SAAS,aAAa,IAAI,cAAc,KAAK;GAC1E,mBAAmB,UAAU,iBAAiB,IAAI,MAAM;GACzD;EACD,wBAAwB,OAAO,WAAW,EAAE,QAAQ,eAAe,CAAC;EACrE;;;;;AC1BH,MAAMC,yBAAqE;CACzE,MAAM;CACN,IAAI;CACJ,UAAU;CACV,UAAU;CACV,SAAS;CACT,uBAAuB,IAAI,IAAI;EAC7B,CAAC,UAAU,iBAAiB;EAC5B,CAAC,OAAO,gBAAgB;EACxB,CAAC,WAAW,eAAe;EAC3B,CAAC,YAAY,eAAe;EAC5B,CAAC,YAAY,mBAAmB;EAChC,CAAC,SAAS,iBAAiB;EAC5B,CAAC;CACF,OAAO,EACL,YAAY;EACV,gBAAgB;GACd;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,QAAQ;GACN,SAAS;GACT,OAAO;GACP,OAAO;GACR;EACD,aAAa,CACX;GACE,SAAS;GACT,OAAO;GACP,OAAO;GACR,CACF;EACF,EACF;CACD,OAAO,QAAQ;AACb,SAAO;GAAE,UAAU;GAAkB,UAAU;GAAkB;;CAEpE;AAED,sBAAe"}
|
package/package.json
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma-next/adapter-mongo",
|
|
3
|
-
"version": "0.5.0-dev.
|
|
3
|
+
"version": "0.5.0-dev.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "MongoDB adapter for Prisma Next (lowers commands to wire format)",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"arktype": "^2.1.29",
|
|
9
9
|
"mongodb": "^6.16.0",
|
|
10
|
-
"@prisma-next/config": "0.5.0-dev.
|
|
11
|
-
"@prisma-next/
|
|
12
|
-
"@prisma-next/
|
|
13
|
-
"@prisma-next/
|
|
14
|
-
"@prisma-next/
|
|
15
|
-
"@prisma-next/mongo-contract": "0.5.0-dev.
|
|
16
|
-
"@prisma-next/mongo-
|
|
17
|
-
"@prisma-next/mongo-
|
|
18
|
-
"@prisma-next/mongo-
|
|
19
|
-
"@prisma-next/mongo-
|
|
20
|
-
"@prisma-next/
|
|
21
|
-
"@prisma-next/
|
|
22
|
-
"@prisma-next/
|
|
10
|
+
"@prisma-next/config": "0.5.0-dev.7",
|
|
11
|
+
"@prisma-next/target-mongo": "0.5.0-dev.7",
|
|
12
|
+
"@prisma-next/contract": "0.5.0-dev.7",
|
|
13
|
+
"@prisma-next/mongo-codec": "0.5.0-dev.7",
|
|
14
|
+
"@prisma-next/framework-components": "0.5.0-dev.7",
|
|
15
|
+
"@prisma-next/mongo-contract": "0.5.0-dev.7",
|
|
16
|
+
"@prisma-next/mongo-lowering": "0.5.0-dev.7",
|
|
17
|
+
"@prisma-next/mongo-query-ast": "0.5.0-dev.7",
|
|
18
|
+
"@prisma-next/mongo-value": "0.5.0-dev.7",
|
|
19
|
+
"@prisma-next/mongo-schema-ir": "0.5.0-dev.7",
|
|
20
|
+
"@prisma-next/operations": "0.5.0-dev.7",
|
|
21
|
+
"@prisma-next/mongo-wire": "0.5.0-dev.7",
|
|
22
|
+
"@prisma-next/utils": "0.5.0-dev.7"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"mongodb-memory-server": "10.4.3",
|
|
26
26
|
"tsdown": "0.18.4",
|
|
27
27
|
"typescript": "5.9.3",
|
|
28
28
|
"vitest": "4.0.17",
|
|
29
|
-
"@prisma-next/driver-mongo": "0.5.0-dev.
|
|
29
|
+
"@prisma-next/driver-mongo": "0.5.0-dev.7",
|
|
30
30
|
"@prisma-next/test-utils": "0.0.1",
|
|
31
31
|
"@prisma-next/tsconfig": "0.0.0",
|
|
32
32
|
"@prisma-next/tsdown": "0.0.0"
|
package/src/core/runner-deps.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
ControlDriverInstance,
|
|
3
|
+
ControlFamilyInstance,
|
|
4
|
+
} from '@prisma-next/framework-components/control';
|
|
2
5
|
import type { MongoDriver } from '@prisma-next/mongo-lowering';
|
|
6
|
+
import type { MongoSchemaIR } from '@prisma-next/mongo-schema-ir';
|
|
3
7
|
import {
|
|
4
8
|
initMarker,
|
|
5
9
|
type MongoRunnerDependencies,
|
|
@@ -25,6 +29,7 @@ export function extractDb(driver: ControlDriverInstance<'mongo', 'mongo'>): Db {
|
|
|
25
29
|
export function createMongoRunnerDeps(
|
|
26
30
|
controlDriver: ControlDriverInstance<'mongo', 'mongo'>,
|
|
27
31
|
driver: MongoDriver,
|
|
32
|
+
family: ControlFamilyInstance<'mongo', MongoSchemaIR>,
|
|
28
33
|
): MongoRunnerDependencies {
|
|
29
34
|
const db = extractDb(controlDriver);
|
|
30
35
|
return {
|
|
@@ -38,5 +43,6 @@ export function createMongoRunnerDeps(
|
|
|
38
43
|
updateMarker: (expectedFrom, dest) => updateMarker(db, expectedFrom, dest),
|
|
39
44
|
writeLedgerEntry: (entry) => writeLedgerEntry(db, entry),
|
|
40
45
|
},
|
|
46
|
+
introspectSchema: () => family.introspect({ driver: controlDriver }),
|
|
41
47
|
};
|
|
42
48
|
}
|