@prisma/orm-family-mongo 8.0.0-rc.19-dev.1 → 8.0.0-rc.19-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/dist/{contract-builder-DmOkSavT.mjs → contract-builder-D94K6aLS.mjs} +16 -14
- package/dist/contract-builder-D94K6aLS.mjs.map +1 -0
- package/dist/{contract-builder-Cy9EOYGm.d.mts → contract-builder-DYnqgdln.d.mts} +3 -3
- package/dist/{contract-builder-Cy9EOYGm.d.mts.map → contract-builder-DYnqgdln.d.mts.map} +1 -1
- package/dist/contract-prisma6__provider.mjs +1 -1
- package/dist/contract-psl.d.mts +2 -2
- package/dist/contract-psl.d.mts.map +1 -1
- package/dist/contract-psl.mjs +1 -1
- package/dist/contract-psl__provider.mjs +1 -1
- package/dist/contract-psl__provider.mjs.map +1 -1
- package/dist/contract-ts.d.mts +1 -1
- package/dist/contract-ts.mjs +1 -1
- package/dist/contract-ts__contract-builder.d.mts +1 -1
- package/dist/contract-ts__contract-builder.mjs +1 -1
- package/dist/{control-XeK2IiTX.mjs → control-DDNPkUnb.mjs} +2 -2
- package/dist/{control-XeK2IiTX.mjs.map → control-DDNPkUnb.mjs.map} +1 -1
- package/dist/dist-xk_0xOR-.mjs.map +1 -1
- package/dist/family.mjs +1 -1
- package/dist/family__control.mjs +1 -1
- package/dist/family__pack.mjs +1 -1
- package/dist/{interpreter-DytgJgyY-C5FooCz-.mjs → interpreter-mcrmtSBJ-BrAG04TC.mjs} +279 -42
- package/dist/interpreter-mcrmtSBJ-BrAG04TC.mjs.map +1 -0
- package/package.json +20 -20
- package/dist/contract-builder-DmOkSavT.mjs.map +0 -1
- package/dist/interpreter-DytgJgyY-C5FooCz-.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-XeK2IiTX.mjs","names":[],"sources":["../../../../2-mongo-family/9-family/dist/control.mjs"],"sourcesContent":["import { i as contractToMongoSchemaIR, n as canonicalizeSchemasForVerification, r as diffMongoSchemas, t as verifyMongoSchema } from \"./verify-mongo-schema-CeQP5N4k.mjs\";\nimport { n as mongoFamilyPslBlockDescriptors, t as mongoFamilyEntityTypes } from \"./authoring-entity-types-CvqTq1Za.mjs\";\nimport { t as MongoContractSerializer } from \"./mongo-contract-serializer-Zx1rvil3.mjs\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { describeUnresolvedMongoType, describeUnsupportedMongoAttribute, mongoAttributeSpecs } from \"@internal/mongo-contract-psl\";\nimport { mongoEmission } from \"@internal/mongo-emitter\";\nimport { structuredError } from \"@internal/utils/structured-error\";\nimport { APP_SPACE_ID, SchemaTreeNode, VERIFY_CODE_HASH_MISMATCH, VERIFY_CODE_MARKER_MISSING, VERIFY_CODE_TARGET_MISMATCH, sameMarkerHashes } from \"@internal/framework-components/control\";\nimport { validatorRootShapesOf } from \"@internal/mongo-contract\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { assertDescriptorSelfConsistency } from \"@internal/migration-tools/spaces\";\nimport { mongoContractCanonicalizationHooks } from \"@internal/mongo-contract/canonicalization-hooks\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { RawUpdateManyCommand } from \"@internal/mongo-query-ast/execution\";\n//#region src/core/field-rewrite.ts\nconst FIELD_OPERATORS = /* @__PURE__ */ new Set([\"$rename\", \"$unset\"]);\nfunction onlyKey(value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) return void 0;\n\tconst keys = Object.keys(value);\n\tconst [key] = keys;\n\treturn keys.length === 1 ? key : void 0;\n}\n/**\n* The planner's field rewrite an operation is, if it is one: a single `updateMany` that skips\n* validation and renames or unsets one field.\n*/\nfunction fieldRewriteOf(operation) {\n\tconst run = Reflect.get(operation, \"run\");\n\tif (!Array.isArray(run) || run.length !== 1) return void 0;\n\tconst [step] = run;\n\tconst command = typeof step === \"object\" && step !== null ? Reflect.get(step, \"command\") : void 0;\n\tif (!(command instanceof RawUpdateManyCommand) || command.bypassDocumentValidation !== true) return;\n\tconst operator = onlyKey(command.update);\n\tif (operator === void 0 || !FIELD_OPERATORS.has(operator)) return void 0;\n\tconst field = onlyKey(Reflect.get(command.update, operator));\n\treturn field === void 0 ? void 0 : {\n\t\tcollection: command.collection,\n\t\tfield,\n\t\tcommand\n\t};\n}\n//#endregion\n//#region src/core/operation-preview.ts\nfunction formatKeySpec(keys) {\n\treturn `{ ${keys.map((k) => `${JSON.stringify(k.field)}: ${JSON.stringify(k.direction)}`).join(\", \")} }`;\n}\nconst COMMAND_META_KEYS = /* @__PURE__ */ new Set([\n\t\"kind\",\n\t\"collection\",\n\t\"keys\"\n]);\nfunction formatOptionEntries(cmd) {\n\tconst parts = Object.entries(cmd).filter(([key, value]) => !COMMAND_META_KEYS.has(key) && value !== void 0).map(([key, value]) => `${key}: ${JSON.stringify(value)}`);\n\tif (parts.length === 0) return void 0;\n\treturn `{ ${parts.join(\", \")} }`;\n}\nfunction formatOptions(cmd) {\n\treturn formatOptionEntries(cmd);\n}\nfunction formatCreateCollectionOptions(cmd) {\n\treturn formatOptionEntries(cmd);\n}\nfunction collectionRef(name) {\n\treturn `db.getCollection(${JSON.stringify(name)})`;\n}\nvar MongoDdlCommandFormatter = class {\n\tcreateIndex(cmd) {\n\t\tconst keySpec = formatKeySpec(cmd.keys);\n\t\tconst opts = formatOptions(cmd);\n\t\treturn opts ? `${collectionRef(cmd.collection)}.createIndex(${keySpec}, ${opts})` : `${collectionRef(cmd.collection)}.createIndex(${keySpec})`;\n\t}\n\tdropIndex(cmd) {\n\t\treturn `${collectionRef(cmd.collection)}.dropIndex(${JSON.stringify(cmd.name)})`;\n\t}\n\tcreateCollection(cmd) {\n\t\tconst opts = formatCreateCollectionOptions(cmd);\n\t\treturn opts ? `db.createCollection(${JSON.stringify(cmd.collection)}, ${opts})` : `db.createCollection(${JSON.stringify(cmd.collection)})`;\n\t}\n\tdropCollection(cmd) {\n\t\treturn `${collectionRef(cmd.collection)}.drop()`;\n\t}\n\trenameCollection(cmd) {\n\t\treturn `${collectionRef(cmd.collection)}.renameCollection(${JSON.stringify(cmd.to)})`;\n\t}\n\tcollMod(cmd) {\n\t\tconst parts = [`collMod: ${JSON.stringify(cmd.collection)}`];\n\t\tfor (const [key, value] of Object.entries(cmd)) if (!COMMAND_META_KEYS.has(key) && value !== void 0) parts.push(`${key}: ${JSON.stringify(value)}`);\n\t\treturn `db.runCommand({ ${parts.join(\", \")} })`;\n\t}\n};\nconst formatter = new MongoDdlCommandFormatter();\nfunction formatUpdateMany(cmd) {\n\tconst args = [JSON.stringify(cmd.filter), JSON.stringify(cmd.update)];\n\tif (cmd.bypassDocumentValidation) args.push(\"{ bypassDocumentValidation: true }\");\n\treturn `${collectionRef(cmd.collection)}.updateMany(${args.join(\", \")})`;\n}\nfunction arrayAt(value, key) {\n\tconst entry = Reflect.get(value, key);\n\treturn Array.isArray(entry) ? entry : [];\n}\nfunction objectAt(value, key) {\n\tif (typeof value !== \"object\" || value === null) return void 0;\n\tconst entry = Reflect.get(value, key);\n\treturn typeof entry === \"object\" && entry !== null ? entry : void 0;\n}\nfunction isDdlCommand(value) {\n\treturn value !== void 0 && typeof Reflect.get(value, \"accept\") === \"function\";\n}\nfunction formatMongoOperations(operations) {\n\tconst statements = [];\n\tfor (const operation of operations) {\n\t\tfor (const step of arrayAt(operation, \"execute\")) {\n\t\t\tconst command = objectAt(step, \"command\");\n\t\t\tif (isDdlCommand(command)) statements.push(command.accept(formatter));\n\t\t}\n\t\tconst rewrite = fieldRewriteOf(operation);\n\t\tif (rewrite !== void 0) statements.push(formatUpdateMany(rewrite.command));\n\t}\n\treturn statements;\n}\n/**\n* Wraps `formatMongoOperations` into the family-agnostic\n* `OperationPreview` shape. Each statement carries\n* `language: 'mongodb-shell'`. Mirrors `sqlOperationsToPreview`.\n*/\nfunction mongoOperationsToPreview(operations) {\n\treturn { statements: formatMongoOperations(operations).map((text) => ({\n\t\ttext,\n\t\tlanguage: \"mongodb-shell\"\n\t})) };\n}\n//#endregion\n//#region src/core/operation-storage-name.ts\nfunction collectionOfStep(step) {\n\tif (typeof step !== \"object\" || step === null) return void 0;\n\tconst command = Reflect.get(step, \"command\");\n\tif (typeof command !== \"object\" || command === null) return void 0;\n\tconst collection = Reflect.get(command, \"collection\");\n\treturn typeof collection === \"string\" ? collection : void 0;\n}\n/**\n* The collection an operation's command names, as the database knows it: the name the Mongo\n* planner gives a dropped collection. A planner field rewrite is named `<collection>.<field>`. An operation\n* whose commands name no collection is named by its id.\n*/\nfunction mongoStorageNameOf(operation) {\n\tconst execute = Reflect.get(operation, \"execute\");\n\tconst steps = Array.isArray(execute) ? execute : [];\n\tfor (const step of steps) {\n\t\tconst collection = collectionOfStep(step);\n\t\tif (collection !== void 0) return collection;\n\t}\n\tconst rewrite = fieldRewriteOf(operation);\n\tif (rewrite !== void 0) return `${rewrite.collection}.${rewrite.field}`;\n\tconst run = Reflect.get(operation, \"run\");\n\tfor (const step of Array.isArray(run) ? run : []) {\n\t\tconst collection = collectionOfStep(step);\n\t\tif (collection !== void 0) return collection;\n\t}\n\treturn operation.id;\n}\n//#endregion\n//#region src/core/schema-to-view.ts\nfunction mongoSchemaToView(schema) {\n\tconst collectionNodes = schema.collections.map((collection) => collectionToSchemaNode(collection.name, collection));\n\treturn { root: new SchemaTreeNode({\n\t\tkind: \"root\",\n\t\tid: \"mongo-schema\",\n\t\tlabel: \"database\",\n\t\t...ifDefined(\"children\", collectionNodes.length > 0 ? collectionNodes : void 0)\n\t}) };\n}\nfunction collectionToSchemaNode(name, collection) {\n\tconst children = [];\n\tfor (const index of collection.indexes) {\n\t\tconst keysSummary = index.keys.map((k) => {\n\t\t\tif (k.direction === 1) return k.field;\n\t\t\tif (k.direction === -1) return `${k.field} desc`;\n\t\t\treturn `${k.field} ${k.direction}`;\n\t\t}).join(\", \");\n\t\tconst prefix = index.unique ? \"unique index\" : \"index\";\n\t\tconst options = [];\n\t\tif (index.sparse) options.push(\"sparse\");\n\t\tif (index.expireAfterSeconds != null) options.push(`ttl: ${index.expireAfterSeconds}s`);\n\t\tif (index.partialFilterExpression) options.push(\"partial\");\n\t\tconst optsSuffix = options.length > 0 ? ` (${options.join(\", \")})` : \"\";\n\t\tchildren.push(new SchemaTreeNode({\n\t\t\tkind: \"index\",\n\t\t\tid: `index-${name}-${index.keys.map((k) => `${k.field}_${k.direction}`).join(\"_\")}`,\n\t\t\tlabel: `${prefix} (${keysSummary})${optsSuffix}`,\n\t\t\tmeta: {\n\t\t\t\tkeys: index.keys,\n\t\t\t\tunique: index.unique,\n\t\t\t\t...ifDefined(\"sparse\", index.sparse || void 0),\n\t\t\t\t...ifDefined(\"expireAfterSeconds\", index.expireAfterSeconds ?? void 0),\n\t\t\t\t...ifDefined(\"partialFilterExpression\", index.partialFilterExpression ?? void 0)\n\t\t\t}\n\t\t}));\n\t}\n\tif (collection.validator) {\n\t\tconst validatorChildren = [];\n\t\tconst roots = validatorRootShapesOf(collection.validator.jsonSchema);\n\t\tconst fields = /* @__PURE__ */ new Map();\n\t\tfor (const root of roots) for (const [propName, propDef] of Object.entries(root.properties)) {\n\t\t\tconst types = fields.get(propName) ?? /* @__PURE__ */ new Set();\n\t\t\tfor (const type of bsonTypesOf(propDef)) types.add(type);\n\t\t\tfields.set(propName, types);\n\t\t}\n\t\tfor (const [propName, types] of fields) {\n\t\t\tconst bsonType = types.has(\"any\") ? \"any\" : [...types].join(\",\");\n\t\t\tconst required = roots.every((root) => !Object.hasOwn(root.properties, propName) || root.required.includes(propName));\n\t\t\tvalidatorChildren.push(new SchemaTreeNode({\n\t\t\t\tkind: \"field\",\n\t\t\t\tid: `field-${name}-${propName}`,\n\t\t\t\tlabel: `${propName}: ${bsonType}${required ? \" (required)\" : \"\"}`\n\t\t\t}));\n\t\t}\n\t\tchildren.push(new SchemaTreeNode({\n\t\t\tkind: \"field\",\n\t\t\tid: `validator-${name}`,\n\t\t\tlabel: `validator (level: ${collection.validator.validationLevel}, action: ${collection.validator.validationAction})`,\n\t\t\tmeta: {\n\t\t\t\tvalidationLevel: collection.validator.validationLevel,\n\t\t\t\tvalidationAction: collection.validator.validationAction,\n\t\t\t\tjsonSchema: collection.validator.jsonSchema\n\t\t\t},\n\t\t\t...ifDefined(\"children\", validatorChildren.length > 0 ? validatorChildren : void 0)\n\t\t}));\n\t}\n\tif (collection.options) {\n\t\tconst opts = collection.options;\n\t\tconst optLabels = [];\n\t\tif (opts.capped) optLabels.push(\"capped\");\n\t\tif (opts.timeseries) optLabels.push(\"timeseries\");\n\t\tif (opts.collation) optLabels.push(\"collation\");\n\t\tif (opts.changeStreamPreAndPostImages) optLabels.push(\"changeStreamPreAndPostImages\");\n\t\tif (opts.clusteredIndex) optLabels.push(\"clusteredIndex\");\n\t\tif (optLabels.length > 0) children.push(new SchemaTreeNode({\n\t\t\tkind: \"field\",\n\t\t\tid: `options-${name}`,\n\t\t\tlabel: `options (${optLabels.join(\", \")})`,\n\t\t\tmeta: {\n\t\t\t\t...ifDefined(\"capped\", opts.capped ?? void 0),\n\t\t\t\t...ifDefined(\"timeseries\", opts.timeseries ?? void 0),\n\t\t\t\t...ifDefined(\"collation\", opts.collation ?? void 0),\n\t\t\t\t...ifDefined(\"changeStreamPreAndPostImages\", opts.changeStreamPreAndPostImages ?? void 0),\n\t\t\t\t...ifDefined(\"clusteredIndex\", opts.clusteredIndex ?? void 0)\n\t\t\t}\n\t\t}));\n\t}\n\treturn new SchemaTreeNode({\n\t\tkind: \"collection\",\n\t\tid: `collection-${name}`,\n\t\tlabel: `collection ${name}`,\n\t\t...ifDefined(\"children\", children.length > 0 ? children : void 0)\n\t});\n}\nfunction bsonTypesOf(propDef) {\n\tif (typeof propDef !== \"object\" || propDef === null || !(\"bsonType\" in propDef)) return [\"any\"];\n\tconst { bsonType } = propDef;\n\treturn Array.isArray(bsonType) ? bsonType.map(String) : [String(bsonType)];\n}\n//#endregion\n//#region src/core/control-instance.ts\nfunction deserializeMongoContract(contractJson) {\n\treturn new MongoContractSerializer().deserializeContract(contractJson);\n}\n/**\n* Family-method contract input. By the time control-plane methods\n* (`verify`, `verifySchema`, `sign`, …) are invoked through the CLI\n* control client (`client.ts`), the input has already been threaded\n* through `familyInstance.deserializeContract`. The value is therefore a\n* class-form `MongoTargetContract` (or a structurally-equivalent\n* envelope post-deserialization) and must NOT be re-fed through\n* structural validation (arktype rejects extra keys like `namespaces`).\n*\n* The parameter type on the framework SPI is `unknown` for variance\n* reasons (so the family can express its own contract type without\n* leaking it to the framework). This helper recovers the validated\n* shape with a single narrow cast.\n*/\nfunction asValidatedMongoContract(contract) {\n\treturn blindCast(contract);\n}\nfunction buildVerifyResult(opts) {\n\treturn {\n\t\tok: opts.ok,\n\t\t...ifDefined(\"code\", opts.code),\n\t\tsummary: opts.summary,\n\t\tcontract: {\n\t\t\tstorageHash: opts.contractStorageHash,\n\t\t\t...ifDefined(\"profileHash\", opts.contractProfileHash)\n\t\t},\n\t\t...ifDefined(\"marker\", opts.marker ? {\n\t\t\tstorageHash: opts.marker.storageHash,\n\t\t\tprofileHash: opts.marker.profileHash\n\t\t} : void 0),\n\t\ttarget: {\n\t\t\texpected: opts.expectedTargetId,\n\t\t\t...ifDefined(\"actual\", opts.actualTargetId)\n\t\t},\n\t\tmeta: {\n\t\t\tcontractPath: opts.contractPath,\n\t\t\t...ifDefined(\"configPath\", opts.configPath)\n\t\t},\n\t\ttimings: { total: opts.totalTime }\n\t};\n}\nfunction createMongoFamilyInstance(controlStack) {\n\tconst extensions = blindCast(controlStack.extensions ?? []);\n\tfor (const extension of extensions) if (extension.contractSpace) {\n\t\tconst { contractJson, headRef } = extension.contractSpace;\n\t\tassertDescriptorSelfConsistency({\n\t\t\textensionId: extension.id,\n\t\t\ttarget: contractJson.target,\n\t\t\ttargetFamily: contractJson.targetFamily,\n\t\t\tstorage: contractJson.storage,\n\t\t\theadRefHash: headRef.hash,\n\t\t\t...mongoContractCanonicalizationHooks\n\t\t});\n\t}\n\tconst adapter = blindCast(controlStack.adapter);\n\tconst getControlAdapter = () => {\n\t\tif (!adapter) throw new InternalError(\"Mongo family requires an adapter descriptor in ControlStack\");\n\t\treturn adapter.create(blindCast(controlStack));\n\t};\n\tfunction isMongoTargetDriver(driver) {\n\t\treturn driver.targetId === \"mongo\";\n\t}\n\tfunction asMongoDriver(driver) {\n\t\tif (!isMongoTargetDriver(driver)) throw structuredError(\"CONTRACT.TARGET_MISMATCH\", `Expected Mongo control driver with targetId 'mongo', got '${driver.targetId}'`);\n\t\treturn driver;\n\t}\n\tasync function signSpaceMarker(driver, { space, contract, expected }) {\n\t\tconst storageHash = contract.storage.storageHash;\n\t\tconst profileHash = contract.profileHash;\n\t\tconst signed = {\n\t\t\tspace,\n\t\t\tcontract: {\n\t\t\t\tstorageHash,\n\t\t\t\tprofileHash\n\t\t\t}\n\t\t};\n\t\tconst controlAdapter = getControlAdapter();\n\t\tconst readHashes = async () => {\n\t\t\tconst marker = await controlAdapter.readMarker(driver, space);\n\t\t\treturn marker === null ? null : {\n\t\t\t\tstorageHash: marker.storageHash,\n\t\t\t\tprofileHash: marker.profileHash\n\t\t\t};\n\t\t};\n\t\tconst existing = await readHashes();\n\t\tif (!sameMarkerHashes(existing, expected)) return {\n\t\t\t...signed,\n\t\t\tstatus: \"conflict\",\n\t\t\texpected,\n\t\t\tfound: existing\n\t\t};\n\t\tif (existing === null) {\n\t\t\tawait controlAdapter.initMarker(driver, space, {\n\t\t\t\tstorageHash,\n\t\t\t\tprofileHash\n\t\t\t});\n\t\t\treturn {\n\t\t\t\t...signed,\n\t\t\t\tstatus: \"created\"\n\t\t\t};\n\t\t}\n\t\tif (existing.storageHash === storageHash && existing.profileHash === profileHash) return {\n\t\t\t...signed,\n\t\t\tstatus: \"unchanged\"\n\t\t};\n\t\tif (!await controlAdapter.updateMarker(driver, space, existing.storageHash, {\n\t\t\tstorageHash,\n\t\t\tprofileHash\n\t\t})) return {\n\t\t\t...signed,\n\t\t\tstatus: \"conflict\",\n\t\t\texpected,\n\t\t\tfound: await readHashes()\n\t\t};\n\t\treturn {\n\t\t\t...signed,\n\t\t\tstatus: \"updated\",\n\t\t\tprevious: existing\n\t\t};\n\t}\n\treturn {\n\t\tfamilyId: \"mongo\",\n\t\tdeserializeContract(contractJson) {\n\t\t\treturn blindCast(deserializeMongoContract(contractJson));\n\t\t},\n\t\tasync verify(options) {\n\t\t\tconst { driver, contract: rawContract, expectedTargetId, contractPath, configPath } = options;\n\t\t\tconst startTime = Date.now();\n\t\t\tconst contract = asValidatedMongoContract(rawContract);\n\t\t\tconst contractStorageHash = contract.storage.storageHash;\n\t\t\tconst contractProfileHash = contract.profileHash;\n\t\t\tconst contractTarget = contract.target;\n\t\t\tconst baseOpts = {\n\t\t\t\tcontractStorageHash,\n\t\t\t\tcontractProfileHash,\n\t\t\t\texpectedTargetId,\n\t\t\t\tcontractPath,\n\t\t\t\t...ifDefined(\"configPath\", configPath)\n\t\t\t};\n\t\t\tif (contractTarget !== expectedTargetId) return buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: false,\n\t\t\t\tcode: VERIFY_CODE_TARGET_MISMATCH,\n\t\t\t\tsummary: \"Target mismatch\",\n\t\t\t\tactualTargetId: contractTarget,\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t\tconst marker = await getControlAdapter().readMarker(asMongoDriver(driver), APP_SPACE_ID);\n\t\t\tif (!marker) return buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: false,\n\t\t\t\tcode: VERIFY_CODE_MARKER_MISSING,\n\t\t\t\tsummary: \"Marker missing\",\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t\tif (marker.storageHash !== contractStorageHash) return buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: false,\n\t\t\t\tcode: VERIFY_CODE_HASH_MISMATCH,\n\t\t\t\tsummary: \"Hash mismatch\",\n\t\t\t\tmarker,\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t\tif (contractProfileHash && marker.profileHash !== contractProfileHash) return buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: false,\n\t\t\t\tcode: VERIFY_CODE_HASH_MISMATCH,\n\t\t\t\tsummary: \"Hash mismatch\",\n\t\t\t\tmarker,\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t\treturn buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: true,\n\t\t\t\tsummary: \"Database matches contract\",\n\t\t\t\tmarker,\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t},\n\t\tverifySchema(options) {\n\t\t\treturn verifyMongoSchema({\n\t\t\t\tcontract: asValidatedMongoContract(options.contract),\n\t\t\t\tschema: options.schema,\n\t\t\t\tstrict: options.strict,\n\t\t\t\tframeworkComponents: options.frameworkComponents\n\t\t\t});\n\t\t},\n\t\tasync signSpaces(options) {\n\t\t\tconst mongoDriver = asMongoDriver(options.driver);\n\t\t\tconst signatures = [];\n\t\t\tfor (const space of options.spaces) signatures.push(await signSpaceMarker(mongoDriver, space));\n\t\t\treturn signatures;\n\t\t},\n\t\tasync readMarker(options) {\n\t\t\treturn getControlAdapter().readMarker(asMongoDriver(options.driver), options.space);\n\t\t},\n\t\tasync readAllMarkers(options) {\n\t\t\treturn getControlAdapter().readAllMarkers(asMongoDriver(options.driver));\n\t\t},\n\t\tasync readLedger(options) {\n\t\t\treturn getControlAdapter().readLedger(asMongoDriver(options.driver), options.space);\n\t\t},\n\t\tasync introspect(options) {\n\t\t\treturn getControlAdapter().introspectSchema(asMongoDriver(options.driver));\n\t\t},\n\t\tcreateRunnerDependencies(options) {\n\t\t\treturn getControlAdapter().createRunnerDependencies(asMongoDriver(options.driver));\n\t\t},\n\t\ttoSchemaView(schema) {\n\t\t\treturn mongoSchemaToView(schema);\n\t\t},\n\t\ttoOperationPreview(operations) {\n\t\t\treturn mongoOperationsToPreview(operations);\n\t\t},\n\t\tstorageNameOf(operation) {\n\t\t\treturn mongoStorageNameOf(operation);\n\t\t}\n\t};\n}\n//#endregion\n//#region src/core/control-descriptor.ts\nconst mongoFamilyAttributeSpecs = mongoAttributeSpecs;\nconst mongoFamilyDescribeUnsupportedAttribute = describeUnsupportedMongoAttribute;\nconst mongoFamilyDescribeUnresolvedType = describeUnresolvedMongoType;\nvar MongoFamilyDescriptor = class {\n\tkind = \"family\";\n\tid = \"mongo\";\n\tfamilyId = \"mongo\";\n\tversion = \"0.0.1\";\n\temission = mongoEmission;\n\tauthoring = {\n\t\tentityTypes: mongoFamilyEntityTypes,\n\t\tpslBlockDescriptors: mongoFamilyPslBlockDescriptors,\n\t\tattributeSpecs: mongoFamilyAttributeSpecs\n\t};\n\tpslDiagnostics = {\n\t\tdescribeUnsupportedAttribute: mongoFamilyDescribeUnsupportedAttribute,\n\t\tdescribeUnresolvedType: mongoFamilyDescribeUnresolvedType\n\t};\n\tcreate(stack) {\n\t\treturn createMongoFamilyInstance(stack);\n\t}\n};\nconst mongoFamilyDescriptor = new MongoFamilyDescriptor();\n//#endregion\nexport { canonicalizeSchemasForVerification, contractToMongoSchemaIR, createMongoFamilyInstance, diffMongoSchemas, fieldRewriteOf, formatMongoOperations, mongoFamilyDescriptor, mongoOperationsToPreview };\n\n//# sourceMappingURL=control.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"control-DDNPkUnb.mjs","names":[],"sources":["../../../../2-mongo-family/9-family/dist/control.mjs"],"sourcesContent":["import { i as contractToMongoSchemaIR, n as canonicalizeSchemasForVerification, r as diffMongoSchemas, t as verifyMongoSchema } from \"./verify-mongo-schema-CeQP5N4k.mjs\";\nimport { n as mongoFamilyPslBlockDescriptors, t as mongoFamilyEntityTypes } from \"./authoring-entity-types-CvqTq1Za.mjs\";\nimport { t as MongoContractSerializer } from \"./mongo-contract-serializer-Zx1rvil3.mjs\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { describeUnresolvedMongoType, describeUnsupportedMongoAttribute, mongoAttributeSpecs } from \"@internal/mongo-contract-psl\";\nimport { mongoEmission } from \"@internal/mongo-emitter\";\nimport { structuredError } from \"@internal/utils/structured-error\";\nimport { APP_SPACE_ID, SchemaTreeNode, VERIFY_CODE_HASH_MISMATCH, VERIFY_CODE_MARKER_MISSING, VERIFY_CODE_TARGET_MISMATCH, sameMarkerHashes } from \"@internal/framework-components/control\";\nimport { validatorRootShapesOf } from \"@internal/mongo-contract\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { assertDescriptorSelfConsistency } from \"@internal/migration-tools/spaces\";\nimport { mongoContractCanonicalizationHooks } from \"@internal/mongo-contract/canonicalization-hooks\";\nimport { InternalError } from \"@internal/utils/internal-error\";\nimport { RawUpdateManyCommand } from \"@internal/mongo-query-ast/execution\";\n//#region src/core/field-rewrite.ts\nconst FIELD_OPERATORS = /* @__PURE__ */ new Set([\"$rename\", \"$unset\"]);\nfunction onlyKey(value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) return void 0;\n\tconst keys = Object.keys(value);\n\tconst [key] = keys;\n\treturn keys.length === 1 ? key : void 0;\n}\n/**\n* The planner's field rewrite an operation is, if it is one: a single `updateMany` that skips\n* validation and renames or unsets one field.\n*/\nfunction fieldRewriteOf(operation) {\n\tconst run = Reflect.get(operation, \"run\");\n\tif (!Array.isArray(run) || run.length !== 1) return void 0;\n\tconst [step] = run;\n\tconst command = typeof step === \"object\" && step !== null ? Reflect.get(step, \"command\") : void 0;\n\tif (!(command instanceof RawUpdateManyCommand) || command.bypassDocumentValidation !== true) return;\n\tconst operator = onlyKey(command.update);\n\tif (operator === void 0 || !FIELD_OPERATORS.has(operator)) return void 0;\n\tconst field = onlyKey(Reflect.get(command.update, operator));\n\treturn field === void 0 ? void 0 : {\n\t\tcollection: command.collection,\n\t\tfield,\n\t\tcommand\n\t};\n}\n//#endregion\n//#region src/core/operation-preview.ts\nfunction formatKeySpec(keys) {\n\treturn `{ ${keys.map((k) => `${JSON.stringify(k.field)}: ${JSON.stringify(k.direction)}`).join(\", \")} }`;\n}\nconst COMMAND_META_KEYS = /* @__PURE__ */ new Set([\n\t\"kind\",\n\t\"collection\",\n\t\"keys\"\n]);\nfunction formatOptionEntries(cmd) {\n\tconst parts = Object.entries(cmd).filter(([key, value]) => !COMMAND_META_KEYS.has(key) && value !== void 0).map(([key, value]) => `${key}: ${JSON.stringify(value)}`);\n\tif (parts.length === 0) return void 0;\n\treturn `{ ${parts.join(\", \")} }`;\n}\nfunction formatOptions(cmd) {\n\treturn formatOptionEntries(cmd);\n}\nfunction formatCreateCollectionOptions(cmd) {\n\treturn formatOptionEntries(cmd);\n}\nfunction collectionRef(name) {\n\treturn `db.getCollection(${JSON.stringify(name)})`;\n}\nvar MongoDdlCommandFormatter = class {\n\tcreateIndex(cmd) {\n\t\tconst keySpec = formatKeySpec(cmd.keys);\n\t\tconst opts = formatOptions(cmd);\n\t\treturn opts ? `${collectionRef(cmd.collection)}.createIndex(${keySpec}, ${opts})` : `${collectionRef(cmd.collection)}.createIndex(${keySpec})`;\n\t}\n\tdropIndex(cmd) {\n\t\treturn `${collectionRef(cmd.collection)}.dropIndex(${JSON.stringify(cmd.name)})`;\n\t}\n\tcreateCollection(cmd) {\n\t\tconst opts = formatCreateCollectionOptions(cmd);\n\t\treturn opts ? `db.createCollection(${JSON.stringify(cmd.collection)}, ${opts})` : `db.createCollection(${JSON.stringify(cmd.collection)})`;\n\t}\n\tdropCollection(cmd) {\n\t\treturn `${collectionRef(cmd.collection)}.drop()`;\n\t}\n\trenameCollection(cmd) {\n\t\treturn `${collectionRef(cmd.collection)}.renameCollection(${JSON.stringify(cmd.to)})`;\n\t}\n\tcollMod(cmd) {\n\t\tconst parts = [`collMod: ${JSON.stringify(cmd.collection)}`];\n\t\tfor (const [key, value] of Object.entries(cmd)) if (!COMMAND_META_KEYS.has(key) && value !== void 0) parts.push(`${key}: ${JSON.stringify(value)}`);\n\t\treturn `db.runCommand({ ${parts.join(\", \")} })`;\n\t}\n};\nconst formatter = new MongoDdlCommandFormatter();\nfunction formatUpdateMany(cmd) {\n\tconst args = [JSON.stringify(cmd.filter), JSON.stringify(cmd.update)];\n\tif (cmd.bypassDocumentValidation) args.push(\"{ bypassDocumentValidation: true }\");\n\treturn `${collectionRef(cmd.collection)}.updateMany(${args.join(\", \")})`;\n}\nfunction arrayAt(value, key) {\n\tconst entry = Reflect.get(value, key);\n\treturn Array.isArray(entry) ? entry : [];\n}\nfunction objectAt(value, key) {\n\tif (typeof value !== \"object\" || value === null) return void 0;\n\tconst entry = Reflect.get(value, key);\n\treturn typeof entry === \"object\" && entry !== null ? entry : void 0;\n}\nfunction isDdlCommand(value) {\n\treturn value !== void 0 && typeof Reflect.get(value, \"accept\") === \"function\";\n}\nfunction formatMongoOperations(operations) {\n\tconst statements = [];\n\tfor (const operation of operations) {\n\t\tfor (const step of arrayAt(operation, \"execute\")) {\n\t\t\tconst command = objectAt(step, \"command\");\n\t\t\tif (isDdlCommand(command)) statements.push(command.accept(formatter));\n\t\t}\n\t\tconst rewrite = fieldRewriteOf(operation);\n\t\tif (rewrite !== void 0) statements.push(formatUpdateMany(rewrite.command));\n\t}\n\treturn statements;\n}\n/**\n* Wraps `formatMongoOperations` into the family-agnostic\n* `OperationPreview` shape. Each statement carries\n* `language: 'mongodb-shell'`. Mirrors `sqlOperationsToPreview`.\n*/\nfunction mongoOperationsToPreview(operations) {\n\treturn { statements: formatMongoOperations(operations).map((text) => ({\n\t\ttext,\n\t\tlanguage: \"mongodb-shell\"\n\t})) };\n}\n//#endregion\n//#region src/core/operation-storage-name.ts\nfunction collectionOfStep(step) {\n\tif (typeof step !== \"object\" || step === null) return void 0;\n\tconst command = Reflect.get(step, \"command\");\n\tif (typeof command !== \"object\" || command === null) return void 0;\n\tconst collection = Reflect.get(command, \"collection\");\n\treturn typeof collection === \"string\" ? collection : void 0;\n}\n/**\n* The collection an operation's command names, as the database knows it: the name the Mongo\n* planner gives a dropped collection. A planner field rewrite is named `<collection>.<field>`. An operation\n* whose commands name no collection is named by its id.\n*/\nfunction mongoStorageNameOf(operation) {\n\tconst execute = Reflect.get(operation, \"execute\");\n\tconst steps = Array.isArray(execute) ? execute : [];\n\tfor (const step of steps) {\n\t\tconst collection = collectionOfStep(step);\n\t\tif (collection !== void 0) return collection;\n\t}\n\tconst rewrite = fieldRewriteOf(operation);\n\tif (rewrite !== void 0) return `${rewrite.collection}.${rewrite.field}`;\n\tconst run = Reflect.get(operation, \"run\");\n\tfor (const step of Array.isArray(run) ? run : []) {\n\t\tconst collection = collectionOfStep(step);\n\t\tif (collection !== void 0) return collection;\n\t}\n\treturn operation.id;\n}\n//#endregion\n//#region src/core/schema-to-view.ts\nfunction mongoSchemaToView(schema) {\n\tconst collectionNodes = schema.collections.map((collection) => collectionToSchemaNode(collection.name, collection));\n\treturn { root: new SchemaTreeNode({\n\t\tkind: \"root\",\n\t\tid: \"mongo-schema\",\n\t\tlabel: \"database\",\n\t\t...ifDefined(\"children\", collectionNodes.length > 0 ? collectionNodes : void 0)\n\t}) };\n}\nfunction collectionToSchemaNode(name, collection) {\n\tconst children = [];\n\tfor (const index of collection.indexes) {\n\t\tconst keysSummary = index.keys.map((k) => {\n\t\t\tif (k.direction === 1) return k.field;\n\t\t\tif (k.direction === -1) return `${k.field} desc`;\n\t\t\treturn `${k.field} ${k.direction}`;\n\t\t}).join(\", \");\n\t\tconst prefix = index.unique ? \"unique index\" : \"index\";\n\t\tconst options = [];\n\t\tif (index.sparse) options.push(\"sparse\");\n\t\tif (index.expireAfterSeconds != null) options.push(`ttl: ${index.expireAfterSeconds}s`);\n\t\tif (index.partialFilterExpression) options.push(\"partial\");\n\t\tconst optsSuffix = options.length > 0 ? ` (${options.join(\", \")})` : \"\";\n\t\tchildren.push(new SchemaTreeNode({\n\t\t\tkind: \"index\",\n\t\t\tid: `index-${name}-${index.keys.map((k) => `${k.field}_${k.direction}`).join(\"_\")}`,\n\t\t\tlabel: `${prefix} (${keysSummary})${optsSuffix}`,\n\t\t\tmeta: {\n\t\t\t\tkeys: index.keys,\n\t\t\t\tunique: index.unique,\n\t\t\t\t...ifDefined(\"sparse\", index.sparse || void 0),\n\t\t\t\t...ifDefined(\"expireAfterSeconds\", index.expireAfterSeconds ?? void 0),\n\t\t\t\t...ifDefined(\"partialFilterExpression\", index.partialFilterExpression ?? void 0)\n\t\t\t}\n\t\t}));\n\t}\n\tif (collection.validator) {\n\t\tconst validatorChildren = [];\n\t\tconst roots = validatorRootShapesOf(collection.validator.jsonSchema);\n\t\tconst fields = /* @__PURE__ */ new Map();\n\t\tfor (const root of roots) for (const [propName, propDef] of Object.entries(root.properties)) {\n\t\t\tconst types = fields.get(propName) ?? /* @__PURE__ */ new Set();\n\t\t\tfor (const type of bsonTypesOf(propDef)) types.add(type);\n\t\t\tfields.set(propName, types);\n\t\t}\n\t\tfor (const [propName, types] of fields) {\n\t\t\tconst bsonType = types.has(\"any\") ? \"any\" : [...types].join(\",\");\n\t\t\tconst required = roots.every((root) => !Object.hasOwn(root.properties, propName) || root.required.includes(propName));\n\t\t\tvalidatorChildren.push(new SchemaTreeNode({\n\t\t\t\tkind: \"field\",\n\t\t\t\tid: `field-${name}-${propName}`,\n\t\t\t\tlabel: `${propName}: ${bsonType}${required ? \" (required)\" : \"\"}`\n\t\t\t}));\n\t\t}\n\t\tchildren.push(new SchemaTreeNode({\n\t\t\tkind: \"field\",\n\t\t\tid: `validator-${name}`,\n\t\t\tlabel: `validator (level: ${collection.validator.validationLevel}, action: ${collection.validator.validationAction})`,\n\t\t\tmeta: {\n\t\t\t\tvalidationLevel: collection.validator.validationLevel,\n\t\t\t\tvalidationAction: collection.validator.validationAction,\n\t\t\t\tjsonSchema: collection.validator.jsonSchema\n\t\t\t},\n\t\t\t...ifDefined(\"children\", validatorChildren.length > 0 ? validatorChildren : void 0)\n\t\t}));\n\t}\n\tif (collection.options) {\n\t\tconst opts = collection.options;\n\t\tconst optLabels = [];\n\t\tif (opts.capped) optLabels.push(\"capped\");\n\t\tif (opts.timeseries) optLabels.push(\"timeseries\");\n\t\tif (opts.collation) optLabels.push(\"collation\");\n\t\tif (opts.changeStreamPreAndPostImages) optLabels.push(\"changeStreamPreAndPostImages\");\n\t\tif (opts.clusteredIndex) optLabels.push(\"clusteredIndex\");\n\t\tif (optLabels.length > 0) children.push(new SchemaTreeNode({\n\t\t\tkind: \"field\",\n\t\t\tid: `options-${name}`,\n\t\t\tlabel: `options (${optLabels.join(\", \")})`,\n\t\t\tmeta: {\n\t\t\t\t...ifDefined(\"capped\", opts.capped ?? void 0),\n\t\t\t\t...ifDefined(\"timeseries\", opts.timeseries ?? void 0),\n\t\t\t\t...ifDefined(\"collation\", opts.collation ?? void 0),\n\t\t\t\t...ifDefined(\"changeStreamPreAndPostImages\", opts.changeStreamPreAndPostImages ?? void 0),\n\t\t\t\t...ifDefined(\"clusteredIndex\", opts.clusteredIndex ?? void 0)\n\t\t\t}\n\t\t}));\n\t}\n\treturn new SchemaTreeNode({\n\t\tkind: \"collection\",\n\t\tid: `collection-${name}`,\n\t\tlabel: `collection ${name}`,\n\t\t...ifDefined(\"children\", children.length > 0 ? children : void 0)\n\t});\n}\nfunction bsonTypesOf(propDef) {\n\tif (typeof propDef !== \"object\" || propDef === null || !(\"bsonType\" in propDef)) return [\"any\"];\n\tconst { bsonType } = propDef;\n\treturn Array.isArray(bsonType) ? bsonType.map(String) : [String(bsonType)];\n}\n//#endregion\n//#region src/core/control-instance.ts\nfunction deserializeMongoContract(contractJson) {\n\treturn new MongoContractSerializer().deserializeContract(contractJson);\n}\n/**\n* Family-method contract input. By the time control-plane methods\n* (`verify`, `verifySchema`, `sign`, …) are invoked through the CLI\n* control client (`client.ts`), the input has already been threaded\n* through `familyInstance.deserializeContract`. The value is therefore a\n* class-form `MongoTargetContract` (or a structurally-equivalent\n* envelope post-deserialization) and must NOT be re-fed through\n* structural validation (arktype rejects extra keys like `namespaces`).\n*\n* The parameter type on the framework SPI is `unknown` for variance\n* reasons (so the family can express its own contract type without\n* leaking it to the framework). This helper recovers the validated\n* shape with a single narrow cast.\n*/\nfunction asValidatedMongoContract(contract) {\n\treturn blindCast(contract);\n}\nfunction buildVerifyResult(opts) {\n\treturn {\n\t\tok: opts.ok,\n\t\t...ifDefined(\"code\", opts.code),\n\t\tsummary: opts.summary,\n\t\tcontract: {\n\t\t\tstorageHash: opts.contractStorageHash,\n\t\t\t...ifDefined(\"profileHash\", opts.contractProfileHash)\n\t\t},\n\t\t...ifDefined(\"marker\", opts.marker ? {\n\t\t\tstorageHash: opts.marker.storageHash,\n\t\t\tprofileHash: opts.marker.profileHash\n\t\t} : void 0),\n\t\ttarget: {\n\t\t\texpected: opts.expectedTargetId,\n\t\t\t...ifDefined(\"actual\", opts.actualTargetId)\n\t\t},\n\t\tmeta: {\n\t\t\tcontractPath: opts.contractPath,\n\t\t\t...ifDefined(\"configPath\", opts.configPath)\n\t\t},\n\t\ttimings: { total: opts.totalTime }\n\t};\n}\nfunction createMongoFamilyInstance(controlStack) {\n\tconst extensions = blindCast(controlStack.extensions ?? []);\n\tfor (const extension of extensions) if (extension.contractSpace) {\n\t\tconst { contractJson, headRef } = extension.contractSpace;\n\t\tassertDescriptorSelfConsistency({\n\t\t\textensionId: extension.id,\n\t\t\ttarget: contractJson.target,\n\t\t\ttargetFamily: contractJson.targetFamily,\n\t\t\tstorage: contractJson.storage,\n\t\t\theadRefHash: headRef.hash,\n\t\t\t...mongoContractCanonicalizationHooks\n\t\t});\n\t}\n\tconst adapter = blindCast(controlStack.adapter);\n\tconst getControlAdapter = () => {\n\t\tif (!adapter) throw new InternalError(\"Mongo family requires an adapter descriptor in ControlStack\");\n\t\treturn adapter.create(blindCast(controlStack));\n\t};\n\tfunction isMongoTargetDriver(driver) {\n\t\treturn driver.targetId === \"mongo\";\n\t}\n\tfunction asMongoDriver(driver) {\n\t\tif (!isMongoTargetDriver(driver)) throw structuredError(\"CONTRACT.TARGET_MISMATCH\", `Expected Mongo control driver with targetId 'mongo', got '${driver.targetId}'`);\n\t\treturn driver;\n\t}\n\tasync function signSpaceMarker(driver, { space, contract, expected }) {\n\t\tconst storageHash = contract.storage.storageHash;\n\t\tconst profileHash = contract.profileHash;\n\t\tconst signed = {\n\t\t\tspace,\n\t\t\tcontract: {\n\t\t\t\tstorageHash,\n\t\t\t\tprofileHash\n\t\t\t}\n\t\t};\n\t\tconst controlAdapter = getControlAdapter();\n\t\tconst readHashes = async () => {\n\t\t\tconst marker = await controlAdapter.readMarker(driver, space);\n\t\t\treturn marker === null ? null : {\n\t\t\t\tstorageHash: marker.storageHash,\n\t\t\t\tprofileHash: marker.profileHash\n\t\t\t};\n\t\t};\n\t\tconst existing = await readHashes();\n\t\tif (!sameMarkerHashes(existing, expected)) return {\n\t\t\t...signed,\n\t\t\tstatus: \"conflict\",\n\t\t\texpected,\n\t\t\tfound: existing\n\t\t};\n\t\tif (existing === null) {\n\t\t\tawait controlAdapter.initMarker(driver, space, {\n\t\t\t\tstorageHash,\n\t\t\t\tprofileHash\n\t\t\t});\n\t\t\treturn {\n\t\t\t\t...signed,\n\t\t\t\tstatus: \"created\"\n\t\t\t};\n\t\t}\n\t\tif (existing.storageHash === storageHash && existing.profileHash === profileHash) return {\n\t\t\t...signed,\n\t\t\tstatus: \"unchanged\"\n\t\t};\n\t\tif (!await controlAdapter.updateMarker(driver, space, existing.storageHash, {\n\t\t\tstorageHash,\n\t\t\tprofileHash\n\t\t})) return {\n\t\t\t...signed,\n\t\t\tstatus: \"conflict\",\n\t\t\texpected,\n\t\t\tfound: await readHashes()\n\t\t};\n\t\treturn {\n\t\t\t...signed,\n\t\t\tstatus: \"updated\",\n\t\t\tprevious: existing\n\t\t};\n\t}\n\treturn {\n\t\tfamilyId: \"mongo\",\n\t\tdeserializeContract(contractJson) {\n\t\t\treturn blindCast(deserializeMongoContract(contractJson));\n\t\t},\n\t\tasync verify(options) {\n\t\t\tconst { driver, contract: rawContract, expectedTargetId, contractPath, configPath } = options;\n\t\t\tconst startTime = Date.now();\n\t\t\tconst contract = asValidatedMongoContract(rawContract);\n\t\t\tconst contractStorageHash = contract.storage.storageHash;\n\t\t\tconst contractProfileHash = contract.profileHash;\n\t\t\tconst contractTarget = contract.target;\n\t\t\tconst baseOpts = {\n\t\t\t\tcontractStorageHash,\n\t\t\t\tcontractProfileHash,\n\t\t\t\texpectedTargetId,\n\t\t\t\tcontractPath,\n\t\t\t\t...ifDefined(\"configPath\", configPath)\n\t\t\t};\n\t\t\tif (contractTarget !== expectedTargetId) return buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: false,\n\t\t\t\tcode: VERIFY_CODE_TARGET_MISMATCH,\n\t\t\t\tsummary: \"Target mismatch\",\n\t\t\t\tactualTargetId: contractTarget,\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t\tconst marker = await getControlAdapter().readMarker(asMongoDriver(driver), APP_SPACE_ID);\n\t\t\tif (!marker) return buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: false,\n\t\t\t\tcode: VERIFY_CODE_MARKER_MISSING,\n\t\t\t\tsummary: \"Marker missing\",\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t\tif (marker.storageHash !== contractStorageHash) return buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: false,\n\t\t\t\tcode: VERIFY_CODE_HASH_MISMATCH,\n\t\t\t\tsummary: \"Hash mismatch\",\n\t\t\t\tmarker,\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t\tif (contractProfileHash && marker.profileHash !== contractProfileHash) return buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: false,\n\t\t\t\tcode: VERIFY_CODE_HASH_MISMATCH,\n\t\t\t\tsummary: \"Hash mismatch\",\n\t\t\t\tmarker,\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t\treturn buildVerifyResult({\n\t\t\t\t...baseOpts,\n\t\t\t\tok: true,\n\t\t\t\tsummary: \"Database matches contract\",\n\t\t\t\tmarker,\n\t\t\t\ttotalTime: Date.now() - startTime\n\t\t\t});\n\t\t},\n\t\tverifySchema(options) {\n\t\t\treturn verifyMongoSchema({\n\t\t\t\tcontract: asValidatedMongoContract(options.contract),\n\t\t\t\tschema: options.schema,\n\t\t\t\tstrict: options.strict,\n\t\t\t\tframeworkComponents: options.frameworkComponents\n\t\t\t});\n\t\t},\n\t\tasync signSpaces(options) {\n\t\t\tconst mongoDriver = asMongoDriver(options.driver);\n\t\t\tconst signatures = [];\n\t\t\tfor (const space of options.spaces) signatures.push(await signSpaceMarker(mongoDriver, space));\n\t\t\treturn signatures;\n\t\t},\n\t\tasync readMarker(options) {\n\t\t\treturn getControlAdapter().readMarker(asMongoDriver(options.driver), options.space);\n\t\t},\n\t\tasync readAllMarkers(options) {\n\t\t\treturn getControlAdapter().readAllMarkers(asMongoDriver(options.driver));\n\t\t},\n\t\tasync readLedger(options) {\n\t\t\treturn getControlAdapter().readLedger(asMongoDriver(options.driver), options.space);\n\t\t},\n\t\tasync introspect(options) {\n\t\t\treturn getControlAdapter().introspectSchema(asMongoDriver(options.driver));\n\t\t},\n\t\tcreateRunnerDependencies(options) {\n\t\t\treturn getControlAdapter().createRunnerDependencies(asMongoDriver(options.driver));\n\t\t},\n\t\ttoSchemaView(schema) {\n\t\t\treturn mongoSchemaToView(schema);\n\t\t},\n\t\ttoOperationPreview(operations) {\n\t\t\treturn mongoOperationsToPreview(operations);\n\t\t},\n\t\tstorageNameOf(operation) {\n\t\t\treturn mongoStorageNameOf(operation);\n\t\t}\n\t};\n}\n//#endregion\n//#region src/core/control-descriptor.ts\nconst mongoFamilyAttributeSpecs = mongoAttributeSpecs;\nconst mongoFamilyDescribeUnsupportedAttribute = describeUnsupportedMongoAttribute;\nconst mongoFamilyDescribeUnresolvedType = describeUnresolvedMongoType;\nvar MongoFamilyDescriptor = class {\n\tkind = \"family\";\n\tid = \"mongo\";\n\tfamilyId = \"mongo\";\n\tversion = \"0.0.1\";\n\temission = mongoEmission;\n\tauthoring = {\n\t\tentityTypes: mongoFamilyEntityTypes,\n\t\tpslBlockDescriptors: mongoFamilyPslBlockDescriptors,\n\t\tattributeSpecs: mongoFamilyAttributeSpecs\n\t};\n\tpslDiagnostics = {\n\t\tdescribeUnsupportedAttribute: mongoFamilyDescribeUnsupportedAttribute,\n\t\tdescribeUnresolvedType: mongoFamilyDescribeUnresolvedType\n\t};\n\tcreate(stack) {\n\t\treturn createMongoFamilyInstance(stack);\n\t}\n};\nconst mongoFamilyDescriptor = new MongoFamilyDescriptor();\n//#endregion\nexport { canonicalizeSchemasForVerification, contractToMongoSchemaIR, createMongoFamilyInstance, diffMongoSchemas, fieldRewriteOf, formatMongoOperations, mongoFamilyDescriptor, mongoOperationsToPreview };\n\n//# sourceMappingURL=control.mjs.map"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dist-xk_0xOR-.mjs","names":[],"sources":["../../../../2-mongo-family/2-authoring/contract-psl/dist/index.mjs"],"sourcesContent":["import { i as mongoAttributeSpecs, n as pairMongoBackRelations, r as describeUnsupportedMongoAttribute, t as interpretPslDocumentToMongoContract } from \"./interpreter-
|
|
1
|
+
{"version":3,"file":"dist-xk_0xOR-.mjs","names":[],"sources":["../../../../2-mongo-family/2-authoring/contract-psl/dist/index.mjs"],"sourcesContent":["import { i as mongoAttributeSpecs, n as pairMongoBackRelations, r as describeUnsupportedMongoAttribute, t as interpretPslDocumentToMongoContract } from \"./interpreter-mcrmtSBJ.mjs\";\nimport { collectScalarTypeConstructors, isAuthoringTypeConstructorDescriptor } from \"@internal/framework-components/authoring\";\n//#region src/describe-unresolved-type.ts\nconst EARLIER_MONGO_SCALAR_NAMES = {\n\tBigInt: \"Int64\",\n\tBytes: \"Binary\",\n\tDecimal: \"Decimal128\"\n};\nfunction scalarTypesSentence(types) {\n\tconst current = [...collectScalarTypeConstructors(types).keys()].filter((name) => {\n\t\tconst descriptor = types[name];\n\t\treturn !(descriptor !== void 0 && isAuthoringTypeConstructorDescriptor(descriptor) && descriptor.deprecated !== void 0);\n\t});\n\treturn current.length === 0 ? \"No Mongo scalar types are registered.\" : `The Mongo scalar types are ${current.length === 1 ? current.join(\"\") : `${current.slice(0, -1).join(\", \")} and ${current.at(-1)}`}.`;\n}\nfunction describeUnresolvedMongoType(contributions) {\n\tconst types = contributions.type;\n\tconst scalars = collectScalarTypeConstructors(types);\n\treturn ({ field, owner, written }) => {\n\t\tif (field.typeNamespaceId !== void 0 || field.typeConstructor !== void 0) return;\n\t\tconst replacement = EARLIER_MONGO_SCALAR_NAMES[written];\n\t\tif (replacement === void 0 || !scalars.has(replacement)) return `Field \"${owner.name}.${field.name}\" has type \"${written}\", which is not a scalar type, an enum, a composite type or a model. ${scalarTypesSentence(types)}`;\n\t\treturn `Field \"${owner.name}.${field.name}\" has type \"${written}\", which is not a Mongo scalar type; use \"${replacement}\".`;\n\t};\n}\n//#endregion\nexport { describeUnresolvedMongoType, describeUnsupportedMongoAttribute, interpretPslDocumentToMongoContract, mongoAttributeSpecs, pairMongoBackRelations };\n\n//# sourceMappingURL=index.mjs.map"],"mappings":";;AAGA,MAAM,6BAA6B;CAClC,QAAQ;CACR,OAAO;CACP,SAAS;AACV;AACA,SAAS,oBAAoB,OAAO;CACnC,MAAM,UAAU,CAAC,GAAG,8BAA8B,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,SAAS;EACjF,MAAM,aAAa,MAAM;EACzB,OAAO,EAAE,eAAe,KAAK,KAAK,qCAAqC,UAAU,KAAK,WAAW,eAAe,KAAK;CACtH,CAAC;CACD,OAAO,QAAQ,WAAW,IAAI,0CAA0C,8BAA8B,QAAQ,WAAW,IAAI,QAAQ,KAAK,EAAE,IAAI,GAAG,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,QAAQ,GAAG,EAAE,IAAI;AAC5M;AACA,SAAS,4BAA4B,eAAe;CACnD,MAAM,QAAQ,cAAc;CAC5B,MAAM,UAAU,8BAA8B,KAAK;CACnD,QAAQ,EAAE,OAAO,OAAO,cAAc;EACrC,IAAI,MAAM,oBAAoB,KAAK,KAAK,MAAM,oBAAoB,KAAK,GAAG;EAC1E,MAAM,cAAc,2BAA2B;EAC/C,IAAI,gBAAgB,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,GAAG,OAAO,UAAU,MAAM,KAAK,GAAG,MAAM,KAAK,cAAc,QAAQ,uEAAuE,oBAAoB,KAAK;EACzN,OAAO,UAAU,MAAM,KAAK,GAAG,MAAM,KAAK,cAAc,QAAQ,4CAA4C,YAAY;CACzH;AACD"}
|
package/dist/family.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { h as defaultMongoStorageNamespaceId, m as defaultMongoDomainNamespaceId
|
|
|
2
2
|
import { i as verifyMongoSchema, n as contractToMongoSchemaIR, r as diffMongoSchemas, t as canonicalizeSchemasForVerification } from "./verify-mongo-schema-CeQP5N4k-CNOctppM.mjs";
|
|
3
3
|
import { n as mongoFamilyPslBlockDescriptors, t as mongoFamilyEntityTypes } from "./authoring-entity-types-CvqTq1Za-KBOkOZYm.mjs";
|
|
4
4
|
import { n as MongoContractSerializerBase, t as MongoContractSerializer } from "./mongo-contract-serializer-Zx1rvil3-BywiKCpn.mjs";
|
|
5
|
-
import { a as mongoOperationsToPreview, i as mongoFamilyDescriptor, n as fieldRewriteOf, r as formatMongoOperations, t as createMongoFamilyInstance } from "./control-
|
|
5
|
+
import { a as mongoOperationsToPreview, i as mongoFamilyDescriptor, n as fieldRewriteOf, r as formatMongoOperations, t as createMongoFamilyInstance } from "./control-DDNPkUnb.mjs";
|
|
6
6
|
import { t as MongoContractView$1 } from "./mongo-contract-view-D5yu2LrY-DCAZYJ4q.mjs";
|
|
7
7
|
import { t as MongoSchemaVerifierBase } from "./ir-DGm0HXbP.mjs";
|
|
8
8
|
import { t as MongoMigration } from "./migration-DnQ7_A_B.mjs";
|
package/dist/family__control.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { n as contractToMongoSchemaIR, r as diffMongoSchemas, t as canonicalizeSchemasForVerification } from "./verify-mongo-schema-CeQP5N4k-CNOctppM.mjs";
|
|
2
|
-
import { a as mongoOperationsToPreview, i as mongoFamilyDescriptor, n as fieldRewriteOf, r as formatMongoOperations, t as createMongoFamilyInstance } from "./control-
|
|
2
|
+
import { a as mongoOperationsToPreview, i as mongoFamilyDescriptor, n as fieldRewriteOf, r as formatMongoOperations, t as createMongoFamilyInstance } from "./control-DDNPkUnb.mjs";
|
|
3
3
|
export { canonicalizeSchemasForVerification, contractToMongoSchemaIR, createMongoFamilyInstance, diffMongoSchemas, fieldRewriteOf, formatMongoOperations, mongoFamilyDescriptor, mongoOperationsToPreview };
|
package/dist/family__pack.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as mongoAttributeSpecs } from "./interpreter-
|
|
1
|
+
import { r as mongoAttributeSpecs } from "./interpreter-mcrmtSBJ-BrAG04TC.mjs";
|
|
2
2
|
import { n as mongoFamilyPslBlockDescriptors, t as mongoFamilyEntityTypes } from "./authoring-entity-types-CvqTq1Za-KBOkOZYm.mjs";
|
|
3
3
|
//#region ../../../2-mongo-family/9-family/dist/pack.mjs
|
|
4
4
|
const mongoFamilyPack = {
|
|
@@ -8,11 +8,11 @@ import { assertDefined, invariant } from "@prisma/orm-framework/utils/assertions
|
|
|
8
8
|
import { ArrayLiteralAst, FunctionCallAst, PathExprAst } from "@prisma/orm-framework/psl-parser/syntax";
|
|
9
9
|
import { notOk, ok } from "@prisma/orm-framework/utils/result";
|
|
10
10
|
import { resolveToOneRelationNullable } from "@prisma/orm-framework/contract-authoring";
|
|
11
|
-
import { encodeEnumMembers, enumMemberProblemDiagnostic, instantiateAuthoringEntityType, isAuthoringEntityTypeDescriptor, isAuthoringTypeConstructorDescriptor } from "@prisma/orm-framework/components/authoring";
|
|
12
|
-
import { bool, contributedTypeOf, createPslDiagnosticCollector, diagnosticSource, entityRef, fieldAttribute, fieldRef, funcCall, generatorAttributeSpec, identifier, int, interpretAttribute, interpretExtensionBlocks, json, list, mapPslDiagnostics, modelAttribute, nodePslSpan, num, oneOf, optional, record, referencedFieldRef, str, typeReferenceNode } from "@prisma/orm-framework/psl-parser";
|
|
11
|
+
import { encodeEnumMembers, enumMemberProblemDiagnostic, instantiateAuthoringEntityType, instantiateAuthoringTypeAlias, instantiateAuthoringTypeConstructor, isAuthoringEntityTypeDescriptor, isAuthoringTypeConstructorDescriptor, resolveTypeAliasGenerators } from "@prisma/orm-framework/components/authoring";
|
|
12
|
+
import { bool, contributedTypeAliasOf, contributedTypeOf, createPslDiagnosticCollector, diagnosticSource, entityRef, fieldAttribute, fieldRef, funcCall, generatorAttributeSpec, identifier, int, interpretAttribute, interpretExtensionBlocks, json, list, mapPslDiagnostics, modelAttribute, nodePslSpan, num, oneOf, optional, record, referencedFieldRef, refuseRepeatedTypeAliasAttributes, resolveTypeAliases, str, typeAliasSpecContext, typeAttributeSpecContextOfField, typeAttributeSubjectLabel, typeGeneratorAttributeSpec, typeReferenceNode } from "@prisma/orm-framework/psl-parser";
|
|
13
13
|
import { claimedBlockKeywords, consumeInvalidFkPairing, enumMemberAttributeDiagnostics, fkRelationPairKey, instantiatePslFieldPreset, isBareTypeConstructor, reportPresetNotCalled, reportTypeConstructorNotCalled, requiredOneToOneBackrelationDiagnostic, unsupportedBlockDiagnostic } from "@prisma/orm-framework/psl-parser/interpret";
|
|
14
14
|
import { ifDefined } from "@prisma/orm-framework/utils/defined";
|
|
15
|
-
//#region ../../../2-mongo-family/2-authoring/contract-psl/dist/interpreter-
|
|
15
|
+
//#region ../../../2-mongo-family/2-authoring/contract-psl/dist/interpreter-mcrmtSBJ.mjs
|
|
16
16
|
/** Storage collection name of a model that declares no `@@map`: the model name, verbatim. */
|
|
17
17
|
function defaultCollectionName(modelName) {
|
|
18
18
|
return modelName;
|
|
@@ -133,8 +133,9 @@ function buildFieldAttributeCtx(input) {
|
|
|
133
133
|
symbols: input.symbols
|
|
134
134
|
};
|
|
135
135
|
}
|
|
136
|
-
const UNLOWERED_FIELD_ATTRIBUTE_HINTS = /* @__PURE__ */ new Map([["updatedAt", "Use @onCreate(now()) @onUpdate(now())
|
|
136
|
+
const UNLOWERED_FIELD_ATTRIBUTE_HINTS = /* @__PURE__ */ new Map([["updatedAt", "Use @onCreate(now()) @onUpdate(now()), or type the field temporal.UpdatedAt."]]);
|
|
137
137
|
const DEFAULT_NOW_HINT = "Use @onCreate(now()) instead; MongoDB has no database defaults.";
|
|
138
|
+
/** The hint for an attribute MongoDB PSL does not lower, naming what to write instead. */
|
|
138
139
|
function unloweredAttributeHint(attribute) {
|
|
139
140
|
if (attribute.name === "default" && attribute.args[0]?.value.replace(/\s/g, "") === "now()") return DEFAULT_NOW_HINT;
|
|
140
141
|
return UNLOWERED_FIELD_ATTRIBUTE_HINTS.get(attribute.name);
|
|
@@ -474,6 +475,167 @@ function pairMongoBackRelations(input) {
|
|
|
474
475
|
diagnostics
|
|
475
476
|
};
|
|
476
477
|
}
|
|
478
|
+
/** The field type a type constructor gives, keeping a bare constructor's fixed type params. */
|
|
479
|
+
function scalarTypeOfConstructor(descriptor, call) {
|
|
480
|
+
if (call !== void 0) return {
|
|
481
|
+
kind: "scalar",
|
|
482
|
+
codecId: descriptor.output.codecId
|
|
483
|
+
};
|
|
484
|
+
const { codecId, typeParams } = instantiateAuthoringTypeConstructor(descriptor, []);
|
|
485
|
+
return {
|
|
486
|
+
kind: "scalar",
|
|
487
|
+
codecId,
|
|
488
|
+
...ifDefined("typeParams", typeParams)
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
const GENERATOR_PHASES$1 = ["onCreate", "onUpdate"];
|
|
492
|
+
const MONGO_TYPE_ALIAS_ATTRIBUTE_NAMES = new Set(GENERATOR_PHASES$1);
|
|
493
|
+
function describeUnsupportedMongoAliasAttribute(attribute, declaration) {
|
|
494
|
+
if (attribute.name !== "default") return void 0;
|
|
495
|
+
const base = `Type alias "${declaration.name}" uses unsupported attribute "@default"`;
|
|
496
|
+
const hint = unloweredAttributeHint(attribute);
|
|
497
|
+
return hint === void 0 ? base : `${base}. ${hint}`;
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* The generator a field's or type alias's `@onCreate(fn())` or `@onUpdate(fn())` resolves to for its type, or `undefined` once the attribute is diagnosed.
|
|
501
|
+
*/
|
|
502
|
+
function lowerGeneratorAttribute(input) {
|
|
503
|
+
const interpreted = interpretAttribute(input.attribute.node, typeGeneratorAttributeSpec(input.phase, input.specContext), {
|
|
504
|
+
sources: input.sources,
|
|
505
|
+
symbols: input.symbols,
|
|
506
|
+
binder: input.binder
|
|
507
|
+
});
|
|
508
|
+
if (!interpreted.ok) {
|
|
509
|
+
input.diagnostics.push(...interpreted.failure);
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
const call = interpreted.value.value;
|
|
513
|
+
const { type } = input;
|
|
514
|
+
const resolution = type.kind === "scalar" ? input.generatorFunctions.resolve({
|
|
515
|
+
name: call.fn,
|
|
516
|
+
args: call.args
|
|
517
|
+
}, {
|
|
518
|
+
codecId: type.codecId,
|
|
519
|
+
typeParams: type.typeParams,
|
|
520
|
+
length: void 0
|
|
521
|
+
}) : void 0;
|
|
522
|
+
if (resolution?.ok === true) return resolution.generator;
|
|
523
|
+
const label = typeAttributeSubjectLabel(input.specContext.subject);
|
|
524
|
+
input.diagnostics.push({
|
|
525
|
+
code: "PSL_GENERATOR_NOT_APPLICABLE",
|
|
526
|
+
message: resolution?.reason === "refused" ? `${label}: ${resolution.message}` : `${label}: ${call.fn}() does not apply to this field's type.`,
|
|
527
|
+
...diagnosticSource(input.sources, input.attribute.node.syntax).at(call.span)
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
function aliasType(alias, input) {
|
|
531
|
+
const { base, symbol } = alias;
|
|
532
|
+
if (base.kind === "typeConstructor") return {
|
|
533
|
+
type: scalarTypeOfConstructor(base.descriptor, base.call),
|
|
534
|
+
valueSet: void 0
|
|
535
|
+
};
|
|
536
|
+
if (base.symbol.keyword !== "enum") {
|
|
537
|
+
input.diagnostics.push({
|
|
538
|
+
code: "PSL_UNSUPPORTED_NAMED_TYPE_BASE",
|
|
539
|
+
message: `Type alias "${symbol.name}" references unsupported base type "${alias.baseName}"`,
|
|
540
|
+
...diagnosticSource(input.sources, symbol.node.syntax).at(symbol.span)
|
|
541
|
+
});
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
const codecId = input.codecIdByEnumName.get(base.symbol.name);
|
|
545
|
+
if (codecId === void 0 || alias.baseResolution.kind !== "block") return void 0;
|
|
546
|
+
return {
|
|
547
|
+
type: {
|
|
548
|
+
kind: "scalar",
|
|
549
|
+
codecId
|
|
550
|
+
},
|
|
551
|
+
valueSet: {
|
|
552
|
+
plane: "domain",
|
|
553
|
+
entityKind: "enum",
|
|
554
|
+
namespaceId: alias.baseResolution.namespace.id,
|
|
555
|
+
entityName: base.symbol.name
|
|
556
|
+
}
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
function lowerAliasGenerators(alias, type, input) {
|
|
560
|
+
const specContext = typeAliasSpecContext(alias, input);
|
|
561
|
+
const phases = {};
|
|
562
|
+
for (const phase of GENERATOR_PHASES$1) {
|
|
563
|
+
const [attribute, duplicate] = alias.attributes.filter(({ name }) => name === phase);
|
|
564
|
+
if (attribute === void 0) continue;
|
|
565
|
+
if (duplicate !== void 0) {
|
|
566
|
+
input.diagnostics.push({
|
|
567
|
+
code: "PSL_DUPLICATE_ATTRIBUTE",
|
|
568
|
+
message: `\`@${phase}\` declared more than once on type alias "${alias.symbol.name}".`,
|
|
569
|
+
...diagnosticSource(input.sources, duplicate.node.syntax).at(duplicate.span)
|
|
570
|
+
});
|
|
571
|
+
continue;
|
|
572
|
+
}
|
|
573
|
+
const generator = lowerGeneratorAttribute({
|
|
574
|
+
...input,
|
|
575
|
+
phase,
|
|
576
|
+
attribute,
|
|
577
|
+
specContext,
|
|
578
|
+
type
|
|
579
|
+
});
|
|
580
|
+
if (generator !== void 0) phases[phase] = generator;
|
|
581
|
+
}
|
|
582
|
+
return phases.onCreate === void 0 && phases.onUpdate === void 0 ? void 0 : phases;
|
|
583
|
+
}
|
|
584
|
+
function resolveContributedTypeAlias(alias, generatorFunctions) {
|
|
585
|
+
const { type } = instantiateAuthoringTypeAlias(alias.descriptor);
|
|
586
|
+
return {
|
|
587
|
+
alias,
|
|
588
|
+
name: alias.name,
|
|
589
|
+
type: {
|
|
590
|
+
kind: "scalar",
|
|
591
|
+
codecId: type.codecId,
|
|
592
|
+
...ifDefined("typeParams", type.typeParams)
|
|
593
|
+
},
|
|
594
|
+
valueSet: void 0,
|
|
595
|
+
executionDefaults: resolveTypeAliasGenerators({
|
|
596
|
+
path: alias.name,
|
|
597
|
+
descriptor: alias.descriptor,
|
|
598
|
+
generatorFunctions,
|
|
599
|
+
length: void 0
|
|
600
|
+
})
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
/**
|
|
604
|
+
* Resolves each `types {}` alias once: its field type and the values its `@onCreate` and `@onUpdate` generate. MongoDB has no database defaults, so an alias's `@default` is refused here, once, not at each field typed by it.
|
|
605
|
+
*/
|
|
606
|
+
function resolveMongoTypeAliases(input) {
|
|
607
|
+
const declared = /* @__PURE__ */ new Map();
|
|
608
|
+
const aliases = resolveTypeAliases({
|
|
609
|
+
declarations: input.declarations,
|
|
610
|
+
binder: input.binder,
|
|
611
|
+
sources: input.sources,
|
|
612
|
+
diagnostics: input.diagnostics,
|
|
613
|
+
authoringTypes: input.authoringTypes,
|
|
614
|
+
acceptedAttributes: MONGO_TYPE_ALIAS_ATTRIBUTE_NAMES,
|
|
615
|
+
describeUnsupportedAttribute: describeUnsupportedMongoAliasAttribute
|
|
616
|
+
});
|
|
617
|
+
for (const alias of aliases.values()) {
|
|
618
|
+
const resolved = aliasType(alias, input);
|
|
619
|
+
if (resolved === void 0) continue;
|
|
620
|
+
declared.set(alias.symbol, {
|
|
621
|
+
alias,
|
|
622
|
+
name: alias.symbol.name,
|
|
623
|
+
...resolved,
|
|
624
|
+
executionDefaults: lowerAliasGenerators(alias, resolved.type, input)
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
const contributed = /* @__PURE__ */ new Map();
|
|
628
|
+
return { ofResolution(resolution) {
|
|
629
|
+
if (resolution?.kind === "namedType") return declared.get(resolution.symbol);
|
|
630
|
+
const alias = contributedTypeAliasOf(resolution);
|
|
631
|
+
if (alias === void 0) return void 0;
|
|
632
|
+
const existing = contributed.get(alias.descriptor);
|
|
633
|
+
if (existing !== void 0) return existing;
|
|
634
|
+
const resolved = resolveContributedTypeAlias(alias, input.generatorFunctions);
|
|
635
|
+
contributed.set(alias.descriptor, resolved);
|
|
636
|
+
return resolved;
|
|
637
|
+
} };
|
|
638
|
+
}
|
|
477
639
|
/**
|
|
478
640
|
* Reports `PSL_DEPRECATED_SCALAR_NAME` at the type of a field whose scalar name is a deprecated alias, naming the replacement. The alias resolves to the same codec, so the contract does not change.
|
|
479
641
|
*/
|
|
@@ -1229,41 +1391,67 @@ function lowerGeneratorAttributes(input) {
|
|
|
1229
1391
|
});
|
|
1230
1392
|
return "invalid";
|
|
1231
1393
|
}
|
|
1232
|
-
const
|
|
1394
|
+
const generator = lowerGeneratorAttribute({
|
|
1395
|
+
phase,
|
|
1396
|
+
attribute,
|
|
1397
|
+
specContext: typeAttributeSpecContextOfField(input.specContext),
|
|
1398
|
+
type: input.resolved.field.type,
|
|
1233
1399
|
symbols: input.specContext.symbols,
|
|
1234
|
-
node: attribute.node,
|
|
1235
|
-
spec: mongoAttributeSpecs.field[phase](input.specContext),
|
|
1236
|
-
model: input.model,
|
|
1237
|
-
field,
|
|
1238
|
-
sources: input.sources,
|
|
1239
1400
|
binder: input.binder,
|
|
1401
|
+
sources: input.sources,
|
|
1402
|
+
generatorFunctions: input.generatorFunctions,
|
|
1240
1403
|
diagnostics
|
|
1241
1404
|
});
|
|
1242
|
-
if (
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1405
|
+
if (generator === void 0) return "invalid";
|
|
1406
|
+
phases[phase] = generator;
|
|
1407
|
+
}
|
|
1408
|
+
return phases.onCreate === void 0 && phases.onUpdate === void 0 ? void 0 : phases;
|
|
1409
|
+
}
|
|
1410
|
+
function fieldOfTypeAlias(field, typeAlias) {
|
|
1411
|
+
return {
|
|
1412
|
+
field: {
|
|
1413
|
+
type: typeAlias.type,
|
|
1414
|
+
nullable: field.optional,
|
|
1415
|
+
many: field.list ? { elementNullable: field.elementOptional } : false,
|
|
1416
|
+
...ifDefined("valueSet", typeAlias.valueSet)
|
|
1417
|
+
},
|
|
1418
|
+
typeAlias
|
|
1419
|
+
};
|
|
1420
|
+
}
|
|
1421
|
+
/**
|
|
1422
|
+
* Whether a field may take what its type alias carries: it repeats none of the alias's attributes, and, when the alias generates a value, it is required and not a list. Reports each refusal at the field.
|
|
1423
|
+
*/
|
|
1424
|
+
function acceptsTypeAliasGenerators(input) {
|
|
1425
|
+
const { field, typeAlias, diagnostics } = input;
|
|
1426
|
+
const fieldPath = `${input.modelName}.${field.name}`;
|
|
1427
|
+
if (refuseRepeatedTypeAliasAttributes({
|
|
1428
|
+
field,
|
|
1429
|
+
fieldPath,
|
|
1430
|
+
alias: typeAlias.alias,
|
|
1431
|
+
sources: input.sources,
|
|
1432
|
+
diagnostics
|
|
1433
|
+
})) return false;
|
|
1434
|
+
if (typeAlias.executionDefaults === void 0) return true;
|
|
1435
|
+
const at = diagnosticSource(input.sources, field.node.syntax).at(field.span);
|
|
1436
|
+
if (field.list) {
|
|
1257
1437
|
diagnostics.push({
|
|
1258
|
-
code: "
|
|
1259
|
-
message:
|
|
1260
|
-
...
|
|
1438
|
+
code: "PSL_LIST_EXECUTION_DEFAULT_UNSUPPORTED",
|
|
1439
|
+
message: `Field "${fieldPath}" is a list, and its type alias "${typeAlias.name}" generates a value. Lists have no per-element generated values; remove "[]" or type the field without the alias.`,
|
|
1440
|
+
...at
|
|
1261
1441
|
});
|
|
1262
|
-
return
|
|
1442
|
+
return false;
|
|
1263
1443
|
}
|
|
1264
|
-
|
|
1444
|
+
if (field.optional) {
|
|
1445
|
+
diagnostics.push({
|
|
1446
|
+
code: "PSL_OPTIONAL_EXECUTION_DEFAULT_UNSUPPORTED",
|
|
1447
|
+
message: `Field "${fieldPath}" is optional, and its type alias "${typeAlias.name}" generates a value, which needs a required field in MongoDB. Remove "?" or type the field without the alias.`,
|
|
1448
|
+
...at
|
|
1449
|
+
});
|
|
1450
|
+
return false;
|
|
1451
|
+
}
|
|
1452
|
+
return true;
|
|
1265
1453
|
}
|
|
1266
|
-
function resolveNonRelationField(field, owner, resolution, codecIdByEnumName, presetContext, scalarNames) {
|
|
1454
|
+
function resolveNonRelationField(field, owner, resolution, codecIdByEnumName, presetContext, scalarNames, typeAliases) {
|
|
1267
1455
|
const ownerName = owner.name;
|
|
1268
1456
|
if (resolution?.kind === "compositeType") return { field: {
|
|
1269
1457
|
type: {
|
|
@@ -1292,7 +1480,19 @@ function resolveNonRelationField(field, owner, resolution, codecIdByEnumName, pr
|
|
|
1292
1480
|
valueSet
|
|
1293
1481
|
} };
|
|
1294
1482
|
}
|
|
1295
|
-
if (resolution?.kind === "
|
|
1483
|
+
if (resolution?.kind === "namedType") {
|
|
1484
|
+
if (field.typeConstructor !== void 0) {
|
|
1485
|
+
presetContext.diagnostics.push({
|
|
1486
|
+
code: "PSL_UNSUPPORTED_FIELD_TYPE",
|
|
1487
|
+
message: `Field "${ownerName}.${field.name}" calls "${field.typeConstructor.path.join(".")}", which is a type alias, not a type constructor. Remove the arguments.`,
|
|
1488
|
+
...diagnosticSource(presetContext.sources, field.node.syntax).at(field.span)
|
|
1489
|
+
});
|
|
1490
|
+
return;
|
|
1491
|
+
}
|
|
1492
|
+
const typeAlias = typeAliases.ofResolution(resolution);
|
|
1493
|
+
return typeAlias === void 0 ? void 0 : fieldOfTypeAlias(field, typeAlias);
|
|
1494
|
+
}
|
|
1495
|
+
if (resolution?.kind === "model" || resolution?.kind === "block" || resolution?.kind === "crossSpace") {
|
|
1296
1496
|
presetContext.diagnostics.push({
|
|
1297
1497
|
code: "PSL_UNSUPPORTED_FIELD_TYPE",
|
|
1298
1498
|
message: `Field "${ownerName}.${field.name}" type "${field.typeName}" is not supported in Mongo PSL interpreter`,
|
|
@@ -1305,6 +1505,19 @@ function resolveNonRelationField(field, owner, resolution, codecIdByEnumName, pr
|
|
|
1305
1505
|
const call = field.typeConstructor;
|
|
1306
1506
|
const entityLabel = `Field "${ownerName}.${field.name}"`;
|
|
1307
1507
|
const source = diagnosticSource(presetContext.sources, field.node.syntax);
|
|
1508
|
+
if (descriptor.kind === "typeAlias") {
|
|
1509
|
+
if (call !== void 0) {
|
|
1510
|
+
presetContext.diagnostics.push({
|
|
1511
|
+
code: "PSL_INVALID_ATTRIBUTE_ARGUMENT",
|
|
1512
|
+
message: `${path.join(".")} is a type alias and takes no arguments.`,
|
|
1513
|
+
...source.at(call.span)
|
|
1514
|
+
});
|
|
1515
|
+
return;
|
|
1516
|
+
}
|
|
1517
|
+
const typeAlias = typeAliases.ofResolution(resolution);
|
|
1518
|
+
invariant(typeAlias !== void 0, "A contributed type alias always resolves");
|
|
1519
|
+
return fieldOfTypeAlias(field, typeAlias);
|
|
1520
|
+
}
|
|
1308
1521
|
if (descriptor.kind === "fieldPreset") {
|
|
1309
1522
|
if (call === void 0) {
|
|
1310
1523
|
reportPresetNotCalled({
|
|
@@ -1343,10 +1556,7 @@ function resolveNonRelationField(field, owner, resolution, codecIdByEnumName, pr
|
|
|
1343
1556
|
}
|
|
1344
1557
|
if (call === void 0) scalarNames.warnDeprecated(field, descriptor);
|
|
1345
1558
|
return { field: {
|
|
1346
|
-
type:
|
|
1347
|
-
kind: "scalar",
|
|
1348
|
-
codecId: descriptor.output.codecId
|
|
1349
|
-
},
|
|
1559
|
+
type: scalarTypeOfConstructor(descriptor, call),
|
|
1350
1560
|
nullable: field.optional,
|
|
1351
1561
|
many: field.list ? { elementNullable: field.elementOptional } : false
|
|
1352
1562
|
} };
|
|
@@ -1529,6 +1739,18 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1529
1739
|
diagnostics
|
|
1530
1740
|
});
|
|
1531
1741
|
const codecIdByEnumName = new Map(Object.entries(builtEnums).map(([name, e]) => [name, e.codecId]));
|
|
1742
|
+
const typeAliases = resolveMongoTypeAliases({
|
|
1743
|
+
declarations: Object.values(symbolTable.namedTypes),
|
|
1744
|
+
symbols: symbolTable,
|
|
1745
|
+
binder,
|
|
1746
|
+
sources,
|
|
1747
|
+
diagnostics,
|
|
1748
|
+
codecIdByEnumName,
|
|
1749
|
+
defaultFunctionRegistry: input.defaultFunctionRegistry,
|
|
1750
|
+
generatorFunctions,
|
|
1751
|
+
dataTypes: input.dataTypes,
|
|
1752
|
+
authoringTypes: input.authoringContributions?.type
|
|
1753
|
+
});
|
|
1532
1754
|
const models = {};
|
|
1533
1755
|
const collections = {};
|
|
1534
1756
|
const roots = {};
|
|
@@ -1617,8 +1839,15 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1617
1839
|
const resolved = resolveNonRelationField(field, {
|
|
1618
1840
|
name: pslModel.name,
|
|
1619
1841
|
kind: "model"
|
|
1620
|
-
}, resolution, codecIdByEnumName, presetContext, scalarNames);
|
|
1842
|
+
}, resolution, codecIdByEnumName, presetContext, scalarNames, typeAliases);
|
|
1621
1843
|
if (!resolved) continue;
|
|
1844
|
+
if (resolved.typeAlias !== void 0 && !acceptsTypeAliasGenerators({
|
|
1845
|
+
field,
|
|
1846
|
+
modelName: pslModel.name,
|
|
1847
|
+
typeAlias: resolved.typeAlias,
|
|
1848
|
+
sources,
|
|
1849
|
+
diagnostics
|
|
1850
|
+
})) continue;
|
|
1622
1851
|
const mappedName = physicalName(physicalNames, field);
|
|
1623
1852
|
const unsupported = unsupportedStoredNameReason(mappedName);
|
|
1624
1853
|
if (unsupported !== void 0) {
|
|
@@ -1644,7 +1873,6 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1644
1873
|
fieldSymbols.set(fieldKey(pslModel.name, field.name), field);
|
|
1645
1874
|
const generated = lowerGeneratorAttributes({
|
|
1646
1875
|
field,
|
|
1647
|
-
model: pslModel,
|
|
1648
1876
|
modelName: pslModel.name,
|
|
1649
1877
|
resolved,
|
|
1650
1878
|
specContext: {
|
|
@@ -1659,8 +1887,9 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1659
1887
|
diagnostics
|
|
1660
1888
|
});
|
|
1661
1889
|
if (generated === "invalid") continue;
|
|
1662
|
-
const
|
|
1663
|
-
|
|
1890
|
+
const inherited = resolved.executionDefaults ?? resolved.typeAlias?.executionDefaults;
|
|
1891
|
+
const phases = inherited === void 0 ? generated : {
|
|
1892
|
+
...inherited,
|
|
1664
1893
|
...generated
|
|
1665
1894
|
};
|
|
1666
1895
|
if (phases !== void 0) presetExecutionDefaults.push({
|
|
@@ -1732,8 +1961,16 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1732
1961
|
const resolved = resolveNonRelationField(field, {
|
|
1733
1962
|
name: compositeType.name,
|
|
1734
1963
|
kind: "compositeType"
|
|
1735
|
-
}, fieldTypeResolution(field, binder), codecIdByEnumName, presetContext, scalarNames);
|
|
1964
|
+
}, fieldTypeResolution(field, binder), codecIdByEnumName, presetContext, scalarNames, typeAliases);
|
|
1736
1965
|
if (!resolved) continue;
|
|
1966
|
+
if (resolved.typeAlias?.executionDefaults !== void 0) {
|
|
1967
|
+
diagnostics.push({
|
|
1968
|
+
code: "PSL_UNSUPPORTED_FIELD_TYPE",
|
|
1969
|
+
message: `Member "${field.name}" of composite type "${compositeType.name}" is typed by the type alias "${resolved.typeAlias.name}", which generates a value; a composite type member has no generated values.`,
|
|
1970
|
+
...diagnosticSource(sources, field.node.syntax).at(field.span)
|
|
1971
|
+
});
|
|
1972
|
+
continue;
|
|
1973
|
+
}
|
|
1737
1974
|
fields[field.name] = resolved.field;
|
|
1738
1975
|
fieldSymbols.set(fieldKey(compositeType.name, field.name), field);
|
|
1739
1976
|
}
|
|
@@ -1850,4 +2087,4 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1850
2087
|
//#endregion
|
|
1851
2088
|
export { pairMongoBackRelations as i, interpretPslDocumentToMongoContract as n, mongoAttributeSpecs as r, describeUnsupportedMongoAttribute as t };
|
|
1852
2089
|
|
|
1853
|
-
//# sourceMappingURL=interpreter-
|
|
2090
|
+
//# sourceMappingURL=interpreter-mcrmtSBJ-BrAG04TC.mjs.map
|