@prisma-next/adapter-mongo 0.5.0-dev.8 → 0.5.0-dev.81
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/codec-types.d.mts.map +1 -1
- package/dist/codec-types.mjs +1 -1
- package/dist/control.d.mts.map +1 -1
- package/dist/control.mjs +11 -18
- package/dist/control.mjs.map +1 -1
- package/dist/index.d.mts +16 -10
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +4 -11
- package/dist/index.mjs.map +1 -1
- package/dist/{mongo-adapter-B3Mh3rXi.mjs → mongo-adapter-DfCmEYHR.mjs} +170 -105
- package/dist/mongo-adapter-DfCmEYHR.mjs.map +1 -0
- package/dist/runtime.d.mts +16 -0
- package/dist/runtime.d.mts.map +1 -0
- package/dist/runtime.mjs +23 -0
- package/dist/runtime.mjs.map +1 -0
- package/package.json +23 -19
- package/src/core/codecs.ts +111 -23
- package/src/core/introspect-schema.ts +6 -1
- package/src/core/operations.ts +3 -3
- package/src/exports/control.ts +2 -18
- package/src/exports/runtime.ts +48 -0
- package/src/lowering.ts +25 -14
- package/src/mongo-adapter.ts +48 -47
- package/src/resolve-value.ts +41 -6
- package/dist/mongo-adapter-B3Mh3rXi.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec-types.d.mts","names":[],"sources":["../src/exports/codec-types.ts"],"
|
|
1
|
+
{"version":3,"file":"codec-types.d.mts","names":[],"sources":["../src/exports/codec-types.ts"],"mappings":";KAAY,MAAA;EAAA,SACD,cAAA,GAAiB,CAAA;AAAA;AAAA,KAGhB,UAAA;EAAA,SACD,kBAAA;IAAA,SAA+B,KAAA;IAAA,SAAwB,MAAA;EAAA;EAAA,SACvD,gBAAA;IAAA,SAA6B,KAAA;IAAA,SAAwB,MAAA;EAAA;EAAA,SACrD,gBAAA;IAAA,SAA6B,KAAA;IAAA,SAAwB,MAAA;EAAA;EAAA,SACrD,eAAA;IAAA,SAA4B,KAAA;IAAA,SAAwB,MAAA;EAAA;EAAA,SACpD,cAAA;IAAA,SAA2B,KAAA;IAAA,SAAyB,MAAA;EAAA;EAAA,SACpD,cAAA;IAAA,SAA2B,KAAA,EAAO,IAAA;IAAA,SAAe,MAAA,EAAQ,IAAA;EAAA;EAAA,SACzD,gBAAA;IAAA,SACE,KAAA;IAAA,SACA,MAAA;EAAA;AAAA"}
|
package/dist/codec-types.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {};
|
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"],"
|
|
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"],"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;;;UCxFvC,0BAAA,SAAmC,qBAAA;EAAA,SACzC,EAAA,EAAI,EAAA;AAAA;AAAA,iBAuBC,wBAAA,CAAyB,EAAA,EAAI,EAAA,EAAI,MAAA,EAAQ,WAAA,GAAc,0BAAA;;;iBCVvD,SAAA,CAAU,MAAA,EAAQ,qBAAA,qBAA0C,EAAA;AAAA,iBAW5D,qBAAA,CACd,aAAA,EAAe,qBAAA,oBACf,MAAA,EAAQ,WAAA,EACR,MAAA,EAAQ,qBAAA,UAA+B,aAAA,IACtC,uBAAA;;;cCpBG,sBAAA,EAAwB,wBAAA"}
|
package/dist/control.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { r as mongoCodecDescriptors, t as createMongoAdapter } from "./mongo-adapter-DfCmEYHR.mjs";
|
|
2
2
|
import { MongoServerError } from "mongodb";
|
|
3
3
|
import { keysToKeySpec } from "@prisma-next/mongo-query-ast/control";
|
|
4
4
|
import { MongoSchemaCollection, MongoSchemaCollectionOptions, MongoSchemaIR, MongoSchemaIndex, MongoSchemaValidator } from "@prisma-next/mongo-schema-ir";
|
|
5
5
|
import { initMarker, readMarker, updateMarker, writeLedgerEntry } from "@prisma-next/target-mongo/control";
|
|
6
|
-
|
|
7
6
|
//#region src/core/command-executor.ts
|
|
8
7
|
var MongoCommandExecutor = class {
|
|
8
|
+
db;
|
|
9
9
|
constructor(db) {
|
|
10
10
|
this.db = db;
|
|
11
11
|
}
|
|
@@ -54,6 +54,7 @@ var MongoCommandExecutor = class {
|
|
|
54
54
|
}
|
|
55
55
|
};
|
|
56
56
|
var MongoInspectionExecutor = class {
|
|
57
|
+
db;
|
|
57
58
|
constructor(db) {
|
|
58
59
|
this.db = db;
|
|
59
60
|
}
|
|
@@ -69,7 +70,6 @@ var MongoInspectionExecutor = class {
|
|
|
69
70
|
return this.db.listCollections().toArray();
|
|
70
71
|
}
|
|
71
72
|
};
|
|
72
|
-
|
|
73
73
|
//#endregion
|
|
74
74
|
//#region src/core/introspect-schema.ts
|
|
75
75
|
const PRISMA_MIGRATIONS_COLLECTION = "_prisma_migrations";
|
|
@@ -81,6 +81,11 @@ function parseIndexKeys(keySpec) {
|
|
|
81
81
|
});
|
|
82
82
|
return keys;
|
|
83
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Exported for unit tests to exercise the defensive `!key` guard; not part of
|
|
86
|
+
* the public API. Callers in this package use it via the `introspectSchema`
|
|
87
|
+
* pipeline only.
|
|
88
|
+
*/
|
|
84
89
|
function isDefaultIdIndex(doc) {
|
|
85
90
|
const key = doc["key"];
|
|
86
91
|
if (!key) return false;
|
|
@@ -156,7 +161,6 @@ async function introspectSchema(db) {
|
|
|
156
161
|
}
|
|
157
162
|
return new MongoSchemaIR(collections);
|
|
158
163
|
}
|
|
159
|
-
|
|
160
164
|
//#endregion
|
|
161
165
|
//#region src/core/mongo-control-driver.ts
|
|
162
166
|
var MongoControlDriverImpl = class {
|
|
@@ -178,7 +182,6 @@ var MongoControlDriverImpl = class {
|
|
|
178
182
|
function createMongoControlDriver(db, client) {
|
|
179
183
|
return new MongoControlDriverImpl(db, client);
|
|
180
184
|
}
|
|
181
|
-
|
|
182
185
|
//#endregion
|
|
183
186
|
//#region src/core/runner-deps.ts
|
|
184
187
|
function extractDb(driver) {
|
|
@@ -202,7 +205,6 @@ function createMongoRunnerDeps(controlDriver, driver, family) {
|
|
|
202
205
|
introspectSchema: () => family.introspect({ driver: controlDriver })
|
|
203
206
|
};
|
|
204
207
|
}
|
|
205
|
-
|
|
206
208
|
//#endregion
|
|
207
209
|
//#region src/exports/control.ts
|
|
208
210
|
const mongoAdapterDescriptor = {
|
|
@@ -220,15 +222,7 @@ const mongoAdapterDescriptor = {
|
|
|
220
222
|
["Float", "mongo/double@1"]
|
|
221
223
|
]),
|
|
222
224
|
types: { codecTypes: {
|
|
223
|
-
|
|
224
|
-
mongoObjectIdCodec,
|
|
225
|
-
mongoStringCodec,
|
|
226
|
-
mongoDoubleCodec,
|
|
227
|
-
mongoInt32Codec,
|
|
228
|
-
mongoBooleanCodec,
|
|
229
|
-
mongoDateCodec,
|
|
230
|
-
mongoVectorCodec
|
|
231
|
-
],
|
|
225
|
+
codecDescriptors: mongoCodecDescriptors,
|
|
232
226
|
import: {
|
|
233
227
|
package: "@prisma-next/adapter-mongo/codec-types",
|
|
234
228
|
named: "CodecTypes",
|
|
@@ -247,8 +241,7 @@ const mongoAdapterDescriptor = {
|
|
|
247
241
|
};
|
|
248
242
|
}
|
|
249
243
|
};
|
|
250
|
-
var control_default = mongoAdapterDescriptor;
|
|
251
|
-
|
|
252
244
|
//#endregion
|
|
253
|
-
export { MongoCommandExecutor, MongoInspectionExecutor, createMongoControlDriver, createMongoRunnerDeps,
|
|
245
|
+
export { MongoCommandExecutor, MongoInspectionExecutor, createMongoControlDriver, createMongoRunnerDeps, mongoAdapterDescriptor as default, extractDb, introspectSchema };
|
|
246
|
+
|
|
254
247
|
//# sourceMappingURL=control.mjs.map
|
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 {\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":"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"}
|
|
1
|
+
{"version":3,"file":"control.mjs","names":["#client"],"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\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 { 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 { mongoCodecDescriptors } 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 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 { familyId: 'mongo' as const, targetId: 'mongo' as const };\n },\n};\n\nexport default mongoAdapterDescriptor;\n"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MongoAggExpr, MongoFilterExpr, MongoPipelineStage } from "@prisma-next/mongo-query-ast/execution";
|
|
2
2
|
import { Document } from "@prisma-next/mongo-value";
|
|
3
|
+
import { CodecCallContext } from "@prisma-next/framework-components/codec";
|
|
3
4
|
import { MongoCodecRegistry } from "@prisma-next/mongo-codec";
|
|
4
5
|
import { MongoAdapter } from "@prisma-next/mongo-lowering";
|
|
5
6
|
import { OperationDescriptor } from "@prisma-next/operations";
|
|
@@ -7,25 +8,30 @@ import { OperationDescriptor } from "@prisma-next/operations";
|
|
|
7
8
|
//#region src/core/operations.d.ts
|
|
8
9
|
declare const mongoVectorNearOperation: Readonly<{
|
|
9
10
|
method: "near";
|
|
10
|
-
|
|
11
|
+
self: {
|
|
11
12
|
codecId: "mongo/vector@1";
|
|
12
|
-
nullable: boolean;
|
|
13
|
-
}[];
|
|
14
|
-
returns: {
|
|
15
|
-
codecId: "mongo/int32@1";
|
|
16
|
-
nullable: boolean;
|
|
17
13
|
};
|
|
14
|
+
impl: () => never;
|
|
18
15
|
}>;
|
|
19
16
|
declare const mongoVectorOperationDescriptors: readonly OperationDescriptor[];
|
|
20
17
|
//#endregion
|
|
21
18
|
//#region src/lowering.d.ts
|
|
22
19
|
declare function lowerAggExpr(expr: MongoAggExpr): unknown;
|
|
23
|
-
declare function lowerFilter(filter: MongoFilterExpr, codecs
|
|
24
|
-
declare function lowerStage(stage: MongoPipelineStage, codecs
|
|
25
|
-
declare function lowerPipeline(stages: ReadonlyArray<MongoPipelineStage>, codecs
|
|
20
|
+
declare function lowerFilter(filter: MongoFilterExpr, codecs: MongoCodecRegistry, ctx: CodecCallContext): Promise<Document>;
|
|
21
|
+
declare function lowerStage(stage: MongoPipelineStage, codecs: MongoCodecRegistry, ctx: CodecCallContext): Promise<Record<string, unknown>>;
|
|
22
|
+
declare function lowerPipeline(stages: ReadonlyArray<MongoPipelineStage>, codecs: MongoCodecRegistry, ctx: CodecCallContext): Promise<Array<Record<string, unknown>>>;
|
|
26
23
|
//#endregion
|
|
27
24
|
//#region src/mongo-adapter.d.ts
|
|
28
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Construct a Mongo adapter with the standard wire-type codecs registered
|
|
27
|
+
* for encode-side dispatch (`MongoParamRef.codecId` lookups).
|
|
28
|
+
*
|
|
29
|
+
* The runtime-side codec registry the runtime decodes against is composed
|
|
30
|
+
* separately by `createMongoExecutionContext`. This factory exists for
|
|
31
|
+
* direct adapter use (the runtime descriptor's `create(stack)` calls
|
|
32
|
+
* through it). User code should compose a stack/context instead.
|
|
33
|
+
*/
|
|
34
|
+
declare function createMongoAdapter(): MongoAdapter;
|
|
29
35
|
//#endregion
|
|
30
36
|
export { createMongoAdapter, lowerAggExpr, lowerFilter, lowerPipeline, lowerStage, mongoVectorNearOperation, mongoVectorOperationDescriptors };
|
|
31
37
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/operations.ts","../src/lowering.ts","../src/mongo-adapter.ts"],"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/operations.ts","../src/lowering.ts","../src/mongo-adapter.ts"],"mappings":";;;;;;;;cAGa,wBAAA,EAAwB,QAAA;;;;;;;cAMxB,+BAAA,WAA0C,mBAAA;;;iBC+HvC,YAAA,CAAa,IAAA,EAAM,YAAA;AAAA,iBAIb,WAAA,CACpB,MAAA,EAAQ,eAAA,EACR,MAAA,EAAQ,kBAAA,EACR,GAAA,EAAK,gBAAA,GACJ,OAAA,CAAQ,QAAA;AAAA,iBA8DW,UAAA,CACpB,KAAA,EAAO,kBAAA,EACP,MAAA,EAAQ,kBAAA,EACR,GAAA,EAAK,gBAAA,GACJ,OAAA,CAAQ,MAAA;AAAA,iBAsNW,aAAA,CACpB,MAAA,EAAQ,aAAA,CAAc,kBAAA,GACtB,MAAA,EAAQ,kBAAA,EACR,GAAA,EAAK,gBAAA,GACJ,OAAA,CAAQ,KAAA,CAAM,MAAA;;;;;;;;;ADzajB;;;iBEqKgB,kBAAA,CAAA,GAAsB,YAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { a as lowerFilter, c as MONGO_VECTOR_CODEC_ID, i as lowerAggExpr, o as lowerPipeline, s as lowerStage, t as createMongoAdapter } from "./mongo-adapter-DfCmEYHR.mjs";
|
|
3
2
|
//#region src/core/operations.ts
|
|
4
3
|
const mongoVectorNearOperation = Object.freeze({
|
|
5
4
|
method: "near",
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
nullable: false
|
|
9
|
-
}],
|
|
10
|
-
returns: {
|
|
11
|
-
codecId: MONGO_INT32_CODEC_ID,
|
|
12
|
-
nullable: false
|
|
13
|
-
}
|
|
5
|
+
self: { codecId: MONGO_VECTOR_CODEC_ID },
|
|
6
|
+
impl: () => void 0
|
|
14
7
|
});
|
|
15
8
|
const mongoVectorOperationDescriptors = [mongoVectorNearOperation];
|
|
16
|
-
|
|
17
9
|
//#endregion
|
|
18
10
|
export { createMongoAdapter, lowerAggExpr, lowerFilter, lowerPipeline, lowerStage, mongoVectorNearOperation, mongoVectorOperationDescriptors };
|
|
11
|
+
|
|
19
12
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/core/operations.ts"],"sourcesContent":["import type { OperationDescriptor } from '@prisma-next/operations';\nimport { MONGO_VECTOR_CODEC_ID } from './codec-ids';\n\nexport const mongoVectorNearOperation = Object.freeze({\n method: 'near',\n self: { codecId: MONGO_VECTOR_CODEC_ID },\n impl: () => undefined as never,\n}) satisfies OperationDescriptor;\n\nexport const mongoVectorOperationDescriptors: readonly OperationDescriptor[] = [\n mongoVectorNearOperation,\n];\n"],"mappings":";;AAGA,MAAa,2BAA2B,OAAO,OAAO;CACpD,QAAQ;CACR,MAAM,EAAE,SAAS,uBAAuB;CACxC,YAAY,KAAA;CACb,CAAC;AAEF,MAAa,kCAAkE,CAC7E,yBACD"}
|