@prisma-next/target-mongo 0.3.0 → 0.4.0-dev.2

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/README.md CHANGED
@@ -7,14 +7,18 @@ MongoDB target pack for Prisma Next.
7
7
  - **Target pack assembly**: Exports the MongoDB target pack for authoring and family composition
8
8
  - **Target metadata**: Defines the stable Mongo target identity (`kind`, `familyId`, `targetId`, `version`, `capabilities`)
9
9
  - **Codec type surface**: Exposes the base Mongo codec type map used by authoring-time type composition
10
+ - **Migration operation factories**: Factory functions for MongoDB migration operations
10
11
 
11
12
  ## Entrypoints
12
13
 
13
14
  - `./pack`: pure target pack ref used by `@prisma-next/family-mongo` and `@prisma-next/mongo-contract-ts`
14
15
  - `./codec-types`: base Mongo codec type map
16
+ - `./migration`: factory functions (the `Migration` base class is in `@prisma-next/family-mongo/migration`)
15
17
 
16
18
  ## Usage
17
19
 
20
+ ### Contract definition
21
+
18
22
  ```typescript
19
23
  import mongoFamily from '@prisma-next/family-mongo/pack';
20
24
  import { defineContract } from '@prisma-next/mongo-contract-ts/contract-builder';
@@ -25,3 +29,36 @@ const contract = defineContract({
25
29
  target: mongoTarget,
26
30
  });
27
31
  ```
32
+
33
+ ### Migration authoring
34
+
35
+ ```typescript
36
+ import { Migration } from '@prisma-next/family-mongo/migration';
37
+ import { createIndex, createCollection } from '@prisma-next/target-mongo/migration';
38
+
39
+ class UsersMigration extends Migration {
40
+ plan() {
41
+ return [
42
+ createCollection("users", {
43
+ validator: { $jsonSchema: { required: ["email"] } },
44
+ validationLevel: "strict",
45
+ }),
46
+ createIndex("users", [{ field: "email", direction: 1 }], { unique: true }),
47
+ ]
48
+ }
49
+ }
50
+
51
+ export default UsersMigration;
52
+ Migration.run(import.meta.url, UsersMigration)
53
+ ```
54
+
55
+ Run `tsx migration.ts` to produce `ops.json` and `migration.json` (when `describe()` is implemented). Use `--dry-run` to preview without writing.
56
+
57
+ ### Available factories
58
+
59
+ - `createIndex(collection, keys, options?)` — create an index
60
+ - `dropIndex(collection, keys)` — drop an index
61
+ - `createCollection(collection, options?)` — create a collection
62
+ - `dropCollection(collection)` — drop a collection
63
+ - `setValidation(collection, schema, options?)` — set document validation on a collection
64
+ - `validatedCollection(name, schema, indexes)` — create a collection with a JSON Schema validator and indexes
@@ -1,6 +1,30 @@
1
+ import { a as DropCollectionCall, c as OpFactoryCallVisitor, i as CreateIndexCall, l as schemaCollectionToCreateCollectionOptions, n as CollModMeta, o as DropIndexCall, r as CreateCollectionCall, s as OpFactoryCall, t as CollModCall, u as schemaIndexToCreateIndexOptions } from "./op-factory-call-CfPGebEH.mjs";
2
+ import { MongoSchemaIR } from "@prisma-next/mongo-schema-ir";
3
+ import { MongoAndExpr, MongoDdlCommandVisitor, MongoExistsExpr, MongoExprFilter, MongoFieldFilter, MongoFilterExpr, MongoFilterVisitor, MongoInspectionCommandVisitor, MongoMigrationPlanOperation, MongoNotExpr, MongoOrExpr } from "@prisma-next/mongo-query-ast/control";
4
+ import { MongoContract } from "@prisma-next/mongo-contract";
5
+ import { MigrationOperationPolicy, MigrationPlan, MigrationPlanOperation, MigrationPlanner, MigrationPlannerConflict, MigrationPlannerResult, MigrationRunnerExecutionChecks, MigrationRunnerResult } from "@prisma-next/framework-components/control";
1
6
  import { ContractMarkerRecord } from "@prisma-next/contract/types";
2
7
  import { Db } from "mongodb";
8
+ import { TargetBoundComponentDescriptor } from "@prisma-next/framework-components/components";
3
9
 
10
+ //#region src/core/contract-to-schema.d.ts
11
+ declare function contractToMongoSchemaIR(contract: MongoContract | null): MongoSchemaIR;
12
+ //#endregion
13
+ //#region src/core/ddl-formatter.d.ts
14
+ declare function formatMongoOperations(operations: readonly MigrationPlanOperation[]): string[];
15
+ //#endregion
16
+ //#region src/core/filter-evaluator.d.ts
17
+ declare class FilterEvaluator implements MongoFilterVisitor<boolean> {
18
+ private doc;
19
+ evaluate(filter: MongoFilterExpr, doc: Record<string, unknown>): boolean;
20
+ field(expr: MongoFieldFilter): boolean;
21
+ and(expr: MongoAndExpr): boolean;
22
+ or(expr: MongoOrExpr): boolean;
23
+ not(expr: MongoNotExpr): boolean;
24
+ exists(expr: MongoExistsExpr): boolean;
25
+ expr(_expr: MongoExprFilter): boolean;
26
+ }
27
+ //#endregion
4
28
  //#region src/core/marker-ledger.d.ts
5
29
  declare function readMarker(db: Db): Promise<ContractMarkerRecord | null>;
6
30
  declare function initMarker(db: Db, destination: {
@@ -17,5 +41,87 @@ declare function writeLedgerEntry(db: Db, entry: {
17
41
  readonly to: string;
18
42
  }): Promise<void>;
19
43
  //#endregion
20
- export { initMarker, readMarker, updateMarker, writeLedgerEntry };
44
+ //#region src/core/mongo-ops-serializer.d.ts
45
+ declare function deserializeMongoOp(json: unknown): MongoMigrationPlanOperation;
46
+ declare function deserializeMongoOps(json: readonly unknown[]): MongoMigrationPlanOperation[];
47
+ declare function serializeMongoOps(ops: readonly MongoMigrationPlanOperation[]): string;
48
+ //#endregion
49
+ //#region src/core/mongo-planner.d.ts
50
+ type PlanCallsResult = {
51
+ readonly kind: 'success';
52
+ readonly calls: OpFactoryCall[];
53
+ } | {
54
+ readonly kind: 'failure';
55
+ readonly conflicts: MigrationPlannerConflict[];
56
+ };
57
+ declare class MongoMigrationPlanner implements MigrationPlanner<'mongo', 'mongo'> {
58
+ planCalls(options: {
59
+ readonly contract: unknown;
60
+ readonly schema: unknown;
61
+ readonly policy: MigrationOperationPolicy;
62
+ readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'mongo', 'mongo'>>;
63
+ }): PlanCallsResult;
64
+ plan(options: {
65
+ readonly contract: unknown;
66
+ readonly schema: unknown;
67
+ readonly policy: MigrationOperationPolicy;
68
+ readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'mongo', 'mongo'>>;
69
+ }): MigrationPlannerResult;
70
+ }
71
+ //#endregion
72
+ //#region src/core/mongo-runner.d.ts
73
+ interface MarkerOperations {
74
+ readMarker(): Promise<ContractMarkerRecord | null>;
75
+ initMarker(destination: {
76
+ readonly storageHash: string;
77
+ readonly profileHash: string;
78
+ }): Promise<void>;
79
+ updateMarker(expectedFrom: string, destination: {
80
+ readonly storageHash: string;
81
+ readonly profileHash: string;
82
+ }): Promise<boolean>;
83
+ writeLedgerEntry(entry: {
84
+ readonly edgeId: string;
85
+ readonly from: string;
86
+ readonly to: string;
87
+ }): Promise<void>;
88
+ }
89
+ interface MongoRunnerDependencies {
90
+ readonly commandExecutor: MongoDdlCommandVisitor<Promise<void>>;
91
+ readonly inspectionExecutor: MongoInspectionCommandVisitor<Promise<Record<string, unknown>[]>>;
92
+ readonly markerOps: MarkerOperations;
93
+ }
94
+ declare class MongoMigrationRunner {
95
+ private readonly deps;
96
+ constructor(deps: MongoRunnerDependencies);
97
+ execute(options: {
98
+ readonly plan: MigrationPlan;
99
+ readonly destinationContract: unknown;
100
+ readonly policy: MigrationOperationPolicy;
101
+ readonly callbacks?: {
102
+ onOperationStart?(op: MigrationPlanOperation): void;
103
+ onOperationComplete?(op: MigrationPlanOperation): void;
104
+ };
105
+ readonly executionChecks?: MigrationRunnerExecutionChecks;
106
+ readonly frameworkComponents: ReadonlyArray<TargetBoundComponentDescriptor<'mongo', 'mongo'>>;
107
+ }): Promise<MigrationRunnerResult>;
108
+ private evaluateChecks;
109
+ private allChecksSatisfied;
110
+ private enforcePolicyCompatibility;
111
+ private ensureMarkerCompatibility;
112
+ }
113
+ //#endregion
114
+ //#region src/core/render-ops.d.ts
115
+ declare function renderOps(calls: ReadonlyArray<OpFactoryCall>): MongoMigrationPlanOperation[];
116
+ //#endregion
117
+ //#region src/core/render-typescript.d.ts
118
+ interface RenderMigrationMeta {
119
+ readonly from: string;
120
+ readonly to: string;
121
+ readonly kind?: string;
122
+ readonly labels?: readonly string[];
123
+ }
124
+ declare function renderTypeScript(calls: ReadonlyArray<OpFactoryCall>, meta?: RenderMigrationMeta): string;
125
+ //#endregion
126
+ export { CollModCall, type CollModMeta, CreateCollectionCall, CreateIndexCall, DropCollectionCall, DropIndexCall, FilterEvaluator, type MarkerOperations, MongoMigrationPlanner, MongoMigrationRunner, type MongoRunnerDependencies, type OpFactoryCall, type OpFactoryCallVisitor, type PlanCallsResult, type RenderMigrationMeta, contractToMongoSchemaIR, deserializeMongoOp, deserializeMongoOps, formatMongoOperations, initMarker, readMarker, renderOps, renderTypeScript, schemaCollectionToCreateCollectionOptions, schemaIndexToCreateIndexOptions, serializeMongoOps, updateMarker, writeLedgerEntry };
21
127
  //# sourceMappingURL=control.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/marker-ledger.ts"],"sourcesContent":[],"mappings":";;;;iBA+BsB,UAAA,KAAe,KAAK,QAAQ;iBAgB5B,UAAA,KAChB;EAjBgB,SAAA,WAAU,EAAA,MAAA;EAAK,SAAA,WAAA,EAAA,MAAA;CAAa,CAAA,EAmB/C,OAnB+C,CAAA,IAAA,CAAA;AAAR,iBAiCpB,YAAA,CAjCoB,EAAA,EAkCpC,EAlCoC,EAAA,YAAA,EAAA,MAAA,EAAA,WAAA,EAAA;EAAO,SAAA,WAAA,EAAA,MAAA;EAgB3B,SAAA,WAAU,EAAA,MAG7B;AAcH,CAAA,CAAA,EAIG,OAJmB,CAAA,OAAY,CAAA;AAqBZ,iBAAA,gBAAA,CAGnB,EAAA,EAFG,EAEI,EAAA,KAAA,EAAA;;;;IAAP"}
1
+ {"version":3,"file":"control.d.mts","names":[],"sources":["../src/core/contract-to-schema.ts","../src/core/ddl-formatter.ts","../src/core/filter-evaluator.ts","../src/core/marker-ledger.ts","../src/core/mongo-ops-serializer.ts","../src/core/mongo-planner.ts","../src/core/mongo-runner.ts","../src/core/render-ops.ts","../src/core/render-typescript.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;iBAoDgB,uBAAA,WAAkC,uBAAuB;;;iBC6CzD,qBAAA,sBAA2C;;;cC/C9C,eAAA,YAA2B;;mBAGrB,sBAAsB;cAK3B;YAKF;WAID;YAIC;eAIG;cAKD;AF5Bd;;;iBGrBsB,UAAA,KAAe,KAAK,QAAQ;iBAgB5B,UAAA,KAChB;;;IAEH;iBAcmB,YAAA,KAChB;;;AHbN,CAAA,CAAA,EGgBG,OHhBa,CAAA,OAAA,CAAA;iBGiCM,gBAAA,KAChB;;;EFWU,SAAA,EAAA,EAAA,MAAA;IETb;;;iBC0Ka,kBAAA,iBAAmC;iBAYnC,mBAAA,4BAA+C;iBAI/C,iBAAA,eAAgC;;;KChLpC,eAAA;;kBACoC;;;sBACI;;ALhDpC,cKkDH,qBAAA,YAAiC,gBLlD2B,CAAa,OAAA,EAAA,OAAA,CAAA,CAAA;;;;IC6CtE,SAAA,MAAA,EISK,wBJTsC;kCIUzB,cAAc;MAC1C;;IH1DO,SAAA,QAAgB,EAAA,OAAA;IAGV,SAAA,MAAA,EAAA,OAAA;IAAsB,SAAA,MAAA,EG2KpB,wBH3KoB;IAK3B,SAAA,mBAAA,EGuKoB,aHvKpB,CGuKkC,8BHvKlC,CAAA,OAAA,EAAA,OAAA,CAAA,CAAA;EAKF,CAAA,CAAA,EGmKN,sBHnKM;;;;UI3CK,gBAAA;gBACD,QAAQ;;;;MAIlB;EN2BU,YAAA,CAAA,YAAA,EAAuB,MAAA,EAAA,WAAW,EAAA;;;MMvB7C;ELoEW,gBAAA,CAAA,KAAA,EAAqB;;;;EC/CxB,CAAA,CAAA,EIhBP,OJgBO,CAAA,IAAA,CAAA;;AAG4B,UIhBxB,uBAAA,CJgBwB;EAK3B,SAAA,eAAA,EIpBc,sBJoBd,CIpBqC,OJoBrC,CAAA,IAAA,CAAA,CAAA;EAKF,SAAA,kBAAA,EIxBmB,6BJwBnB,CIxBiD,OJwBjD,CIxByD,MJwBzD,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,CAAA;EAID,SAAA,SAAA,EI3BW,gBJ2BX;;AAQI,cIpBF,oBAAA,CJoBE;EAKD,iBAAA,IAAA;EA9B0B,WAAA,CAAA,IAAA,EIMH,uBJNG;EAAkB,OAAA,CAAA,OAAA,EAAA;mBISvC;;qBAEE;IH9BC,SAAU,SAAA,CAAA,EAAA;MAAK,gBAAA,EAAA,EAAA,EGgCT,sBHhCS,CAAA,EAAA,IAAA;MAAa,mBAAA,EAAA,EAAA,EGiCnB,sBHjCmB,CAAA,EAAA,IAAA;IAAR,CAAA;IAAO,SAAA,eAAA,CAAA,EGmClB,8BHnCkB;IAgB3B,SAAU,mBAG7B,EGiB+B,aHjBxB,CGiBsC,8BHjBtC,CAAA,OAAA,EAAA,OAAA,CAAA,CAAA;EAcY,CAAA,CAAA,EGIhB,OHJgB,CGIR,qBHAX,CAAA;EAiBmB,QAAA,cAAgB;;;;AC6KtC;;;iBG9NgB,SAAA,QAAiB,cAAc,iBAAiB;;;UC1B/C,mBAAA;;;;;;iBAOD,gBAAA,QACP,cAAc,uBACd"}