@prisma/orm-family-mongo 8.0.0-rc.11-dev.43 → 8.0.0-rc.11-dev.44
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-psl.d.mts +6 -5
- 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/{control-CqaQ5sXO.mjs → control-Zbc5ZHq0.mjs} +2 -2
- package/dist/{control-CqaQ5sXO.mjs.map → control-Zbc5ZHq0.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-ConSw3cr-CzhkBY4W.mjs → interpreter-BsGn9AR--DggjzYPT.mjs} +56 -50
- package/dist/interpreter-BsGn9AR--DggjzYPT.mjs.map +1 -0
- package/package.json +19 -19
- package/dist/interpreter-ConSw3cr-CzhkBY4W.mjs.map +0 -1
package/dist/contract-psl.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ import { Q as MongoValidator } from "./mongo-value-set-tNn9-pun-dJYx_rVD.mjs";
|
|
|
2
2
|
import "./index-b88CnctD.mjs";
|
|
3
3
|
import { Contract, ContractField, ContractValueObject, JsonValue } from "@prisma/orm-framework/contract/types";
|
|
4
4
|
import { AuthoringContributions } from "@prisma/orm-framework/components/authoring";
|
|
5
|
-
import { AttributeSpec, AttributeSpecContext, FieldAttributeCtx, FieldAttributeSpecContext, ModelAttributeCtx, SymbolTable, TypedFuncCall } from "@prisma/orm-framework/psl-parser";
|
|
5
|
+
import { AttributeSpec, AttributeSpecContext, FieldAttributeCtx, FieldAttributeSpecContext, ModelAttributeCtx, ModelSymbol, SymbolTable, TypedFuncCall } from "@prisma/orm-framework/psl-parser";
|
|
6
6
|
import { Result } from "@prisma/orm-framework/utils/result";
|
|
7
7
|
import { DocumentAst, PslSources } from "@prisma/orm-framework/psl-parser/syntax";
|
|
8
8
|
import { ControlDefaultRegistries } from "@prisma/orm-framework/components/control";
|
|
@@ -44,6 +44,10 @@ interface InterpretPslDocumentToMongoContractInput {
|
|
|
44
44
|
declare function interpretPslDocumentToMongoContract(input: InterpretPslDocumentToMongoContractInput): Result<Contract, ContractSourceDiagnostics>;
|
|
45
45
|
//#endregion
|
|
46
46
|
//#region src/mongo-attribute-specs.d.ts
|
|
47
|
+
declare function baseModelSpec(): AttributeSpec<{
|
|
48
|
+
base: import("@prisma/orm-framework/psl-parser").ResolvedEntityReference<ModelSymbol>;
|
|
49
|
+
value: string;
|
|
50
|
+
}, ModelAttributeCtx>;
|
|
47
51
|
declare const mongoAttributeSpecs: {
|
|
48
52
|
readonly model: {
|
|
49
53
|
readonly map: (ctx: AttributeSpecContext) => AttributeSpec<{
|
|
@@ -52,10 +56,7 @@ declare const mongoAttributeSpecs: {
|
|
|
52
56
|
readonly discriminator: (ctx: AttributeSpecContext) => AttributeSpec<{
|
|
53
57
|
field: string;
|
|
54
58
|
}, ModelAttributeCtx>;
|
|
55
|
-
readonly base:
|
|
56
|
-
base: string;
|
|
57
|
-
value: string;
|
|
58
|
-
}, ModelAttributeCtx>;
|
|
59
|
+
readonly base: typeof baseModelSpec;
|
|
59
60
|
readonly index: (ctx: AttributeSpecContext) => AttributeSpec<{
|
|
60
61
|
fields: (string | TypedFuncCall)[];
|
|
61
62
|
readonly collationLocale?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-psl.d.mts","names":[],"sources":["../../../../2-mongo-family/2-authoring/contract-psl/dist/index.d.mts"],"mappings":";;;;;;;;;;;;;;;;;KAeK,iBAAiB;WACX,iBAAiB;;iBAEX,iBAAiB,QAAQ,eAAe,gBAAgB,eAAe,eAAe,sBAAsB,cAAc,aAAa,YAAY,iBAAiB;UAC3K;WACC;WACA,QAAQ,eAAe;;iBAEjB,4BAA4B,YAAY,eAAe,gBAAgB,4BAA4B,mBAAmB,sBAAsB,eAAe,eAAe,sBAAsB,cAAc,aAAa,YAAY,iBAAiB;;;UAG/P;WACC,UAAU;WACV,aAAa;WACb,SAAS;WACT,oBAAoB;WACpB,yBAAyB;WACzB,cAAc;WACd,2BAA2B;WAC3B,yBAAyB;;WAEzB;aACE;aACA;;;iBAGI,oCAAoC,OAAO,2CAA2C,OAAO,UAAU;;;
|
|
1
|
+
{"version":3,"file":"contract-psl.d.mts","names":[],"sources":["../../../../2-mongo-family/2-authoring/contract-psl/dist/index.d.mts"],"mappings":";;;;;;;;;;;;;;;;;KAeK,iBAAiB;WACX,iBAAiB;;iBAEX,iBAAiB,QAAQ,eAAe,gBAAgB,eAAe,eAAe,sBAAsB,cAAc,aAAa,YAAY,iBAAiB;UAC3K;WACC;WACA,QAAQ,eAAe;;iBAEjB,4BAA4B,YAAY,eAAe,gBAAgB,4BAA4B,mBAAmB,sBAAsB,eAAe,eAAe,sBAAsB,cAAc,aAAa,YAAY,iBAAiB;;;UAG/P;WACC,UAAU;WACV,aAAa;WACb,SAAS;WACT,oBAAoB;WACpB,yBAAyB;WACzB,cAAc;WACd,2BAA2B;WAC3B,yBAAyB;;WAEzB;aACE;aACA;;;iBAGI,oCAAoC,OAAO,2CAA2C,OAAO,UAAU;;;iBAGvG,iBAAiB;EAChC,qCAAqC,wBAAwB;EAC7D;GACC;cACW;WACH;aACE,MAAM,KAAK,yBAAyB;MAC3C;OACC;aACM,gBAAgB,KAAK,yBAAyB;MACrD;OACC;aACM,aAAa;aACb,QAAQ,KAAK,yBAAyB;MAC7C,kBAAkB;eACT;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA,SAAS;eACT;eACA;eACA;eACA;OACR;aACM,SAAS,KAAK,yBAAyB;MAC9C,kBAAkB;eACT;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA,SAAS;eACT;eACA;eACA;eACA;OACR;aACM,YAAY,KAAK,yBAAyB;MACjD,kBAAkB;eACT;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA;eACA,SAAS;eACT,UAAU;eACV;eACA;OACR;;WAEI;aACE,KAAK,KAAK,8BAA8B,kBAAkB;aAC1D,SAAS,KAAK,8BAA8B,kBAAkB;aAC9D,MAAM,KAAK,8BAA8B;MAChD;OACC;aACM,WAAW,KAAK,8BAA8B;MACrD;eACS;eACA;OACR"}
|
package/dist/contract-psl.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as mongoAttributeSpecs, n as derivePolymorphicJsonSchema, r as interpretPslDocumentToMongoContract, t as deriveJsonSchema } from "./interpreter-
|
|
1
|
+
import { i as mongoAttributeSpecs, n as derivePolymorphicJsonSchema, r as interpretPslDocumentToMongoContract, t as deriveJsonSchema } from "./interpreter-BsGn9AR--DggjzYPT.mjs";
|
|
2
2
|
export { deriveJsonSchema, derivePolymorphicJsonSchema, interpretPslDocumentToMongoContract, mongoAttributeSpecs };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as interpretPslDocumentToMongoContract } from "./interpreter-
|
|
1
|
+
import { r as interpretPslDocumentToMongoContract } from "./interpreter-BsGn9AR--DggjzYPT.mjs";
|
|
2
2
|
import { collectScalarTypeConstructors } from "@prisma/orm-framework/components/authoring";
|
|
3
3
|
import { buildSymbolTable, mapPslDiagnostics } from "@prisma/orm-framework/psl-parser";
|
|
4
4
|
import { withSeedDiagnostics } from "@prisma/orm-framework/psl-parser/interpret";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-psl__provider.mjs","names":[],"sources":["../../../../2-mongo-family/2-authoring/contract-psl/dist/exports/provider.mjs"],"sourcesContent":["import { t as interpretPslDocumentToMongoContract } from \"../interpreter-
|
|
1
|
+
{"version":3,"file":"contract-psl__provider.mjs","names":[],"sources":["../../../../2-mongo-family/2-authoring/contract-psl/dist/exports/provider.mjs"],"sourcesContent":["import { t as interpretPslDocumentToMongoContract } from \"../interpreter-BsGn9AR-.mjs\";\nimport { collectScalarTypeConstructors } from \"@internal/framework-components/authoring\";\nimport { buildSymbolTable, mapPslDiagnostics } from \"@internal/psl-parser\";\nimport { withSeedDiagnostics } from \"@internal/psl-parser/interpret\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { notOk } from \"@internal/utils/result\";\nimport { readFile } from \"node:fs/promises\";\nimport { parse } from \"@internal/psl-parser/syntax\";\nimport { InternalError } from \"@internal/utils/internal-error\";\n//#region src/provider.ts\nfunction collectScalarTypeCodecIds(namespace) {\n\treturn new Map([...collectScalarTypeConstructors(namespace)].map(([name, output]) => [name, output.codecId]));\n}\nfunction mongoContract(schemaPath, options) {\n\treturn {\n\t\tsource: {\n\t\t\tformat: \"psl\",\n\t\t\tinputs: [schemaPath],\n\t\t\tinterpret(input, context) {\n\t\t\t\treturn interpretPslDocumentToMongoContract({\n\t\t\t\t\tdocument: input.document,\n\t\t\t\t\tsymbolTable: input.symbolTable,\n\t\t\t\t\tsources: input.sources,\n\t\t\t\t\tseedDiagnostics: [],\n\t\t\t\t\tscalarTypeCodecIds: collectScalarTypeCodecIds(context.authoringContributions.type),\n\t\t\t\t\tcontrolMutationDefaults: {\n\t\t\t\t\t\t...context.controlMutationDefaults,\n\t\t\t\t\t\tdataTypeEntries: context.authoringContributions.dataTypes\n\t\t\t\t\t},\n\t\t\t\t\tcodecLookup: context.codecLookup,\n\t\t\t\t\tauthoringContributions: context.authoringContributions,\n\t\t\t\t\t...ifDefined(\"enumInferenceCodecs\", options?.enumInferenceCodecs)\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync load(context) {\n\t\t\t\tconst [absoluteSchemaPath] = context.resolvedInputs;\n\t\t\t\tif (absoluteSchemaPath === void 0) throw new InternalError(\"mongoContract: context.resolvedInputs is empty. The CLI config loader should populate it positional-matched with source.inputs.\");\n\t\t\t\tlet schema;\n\t\t\t\ttry {\n\t\t\t\t\tschema = await readFile(absoluteSchemaPath, \"utf-8\");\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = String(error);\n\t\t\t\t\treturn notOk({\n\t\t\t\t\t\tsummary: `Failed to read Prisma schema at \"${schemaPath}\"`,\n\t\t\t\t\t\tdiagnostics: [{\n\t\t\t\t\t\t\tcode: \"PSL_SCHEMA_READ_FAILED\",\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\tsourceId: schemaPath\n\t\t\t\t\t\t}],\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tschemaPath,\n\t\t\t\t\t\t\tabsoluteSchemaPath,\n\t\t\t\t\t\t\tcause: message\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst { document, sources, diagnostics: parseDiagnostics } = parse(schema, schemaPath);\n\t\t\t\tconst { symbolTable, diagnostics: symbolTableDiagnostics } = buildSymbolTable({\n\t\t\t\t\tdocuments: [document],\n\t\t\t\t\tsources,\n\t\t\t\t\tpslBlockDescriptors: context.authoringContributions.pslBlockDescriptors\n\t\t\t\t});\n\t\t\t\tconst seedDiagnostics = mapPslDiagnostics([...parseDiagnostics, ...symbolTableDiagnostics], sources);\n\t\t\t\treturn withSeedDiagnostics(this.interpret({\n\t\t\t\t\tdocument,\n\t\t\t\t\tsources,\n\t\t\t\t\tsymbolTable\n\t\t\t\t}, context), seedDiagnostics);\n\t\t\t}\n\t\t},\n\t\t...ifDefined(\"output\", options?.output)\n\t};\n}\n//#endregion\nexport { mongoContract };\n\n//# sourceMappingURL=provider.mjs.map"],"mappings":";;;;;;;;;;AAUA,SAAS,0BAA0B,WAAW;CAC7C,OAAO,IAAI,IAAI,CAAC,GAAG,8BAA8B,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,YAAY,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAC7G;AACA,SAAS,cAAc,YAAY,SAAS;CAC3C,OAAO;EACN,QAAQ;GACP,QAAQ;GACR,QAAQ,CAAC,UAAU;GACnB,UAAU,OAAO,SAAS;IACzB,OAAO,oCAAoC;KAC1C,UAAU,MAAM;KAChB,aAAa,MAAM;KACnB,SAAS,MAAM;KACf,iBAAiB,CAAC;KAClB,oBAAoB,0BAA0B,QAAQ,uBAAuB,IAAI;KACjF,yBAAyB;MACxB,GAAG,QAAQ;MACX,iBAAiB,QAAQ,uBAAuB;KACjD;KACA,aAAa,QAAQ;KACrB,wBAAwB,QAAQ;KAChC,GAAG,UAAU,uBAAuB,SAAS,mBAAmB;IACjE,CAAC;GACF;GACA,MAAM,KAAK,SAAS;IACnB,MAAM,CAAC,sBAAsB,QAAQ;IACrC,IAAI,uBAAuB,KAAK,GAAG,MAAM,IAAI,cAAc,iIAAiI;IAC5L,IAAI;IACJ,IAAI;KACH,SAAS,MAAM,SAAS,oBAAoB,OAAO;IACpD,SAAS,OAAO;KACf,MAAM,UAAU,OAAO,KAAK;KAC5B,OAAO,MAAM;MACZ,SAAS,oCAAoC,WAAW;MACxD,aAAa,CAAC;OACb,MAAM;OACN;OACA,UAAU;MACX,CAAC;MACD,MAAM;OACL;OACA;OACA,OAAO;MACR;KACD,CAAC;IACF;IACA,MAAM,EAAE,UAAU,SAAS,aAAa,qBAAqB,MAAM,QAAQ,UAAU;IACrF,MAAM,EAAE,aAAa,aAAa,2BAA2B,iBAAiB;KAC7E,WAAW,CAAC,QAAQ;KACpB;KACA,qBAAqB,QAAQ,uBAAuB;IACrD,CAAC;IACD,MAAM,kBAAkB,kBAAkB,CAAC,GAAG,kBAAkB,GAAG,sBAAsB,GAAG,OAAO;IACnG,OAAO,oBAAoB,KAAK,UAAU;KACzC;KACA;KACA;IACD,GAAG,OAAO,GAAG,eAAe;GAC7B;EACD;EACA,GAAG,UAAU,UAAU,SAAS,MAAM;CACvC;AACD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as mongoContractCanonicalizationHooks } from "./canonicalization-hooks-DF3Z6sjO.mjs";
|
|
2
|
-
import { i as mongoAttributeSpecs } from "./interpreter-
|
|
2
|
+
import { i as mongoAttributeSpecs } from "./interpreter-BsGn9AR--DggjzYPT.mjs";
|
|
3
3
|
import { t as mongoEmission } from "./exports-BSUZo1ZX.mjs";
|
|
4
4
|
import { i as verifyMongoSchema } from "./verify-mongo-schema-B0bMHQW0-DSZhsvrk.mjs";
|
|
5
5
|
import { n as mongoFamilyPslBlockDescriptors, t as mongoFamilyEntityTypes } from "./authoring-entity-types-DkFfee0x-1-Cz_f4r.mjs";
|
|
@@ -398,4 +398,4 @@ const mongoFamilyDescriptor = new MongoFamilyDescriptor();
|
|
|
398
398
|
//#endregion
|
|
399
399
|
export { mongoOperationsToPreview as i, formatMongoOperations as n, mongoFamilyDescriptor as r, createMongoFamilyInstance as t };
|
|
400
400
|
|
|
401
|
-
//# sourceMappingURL=control-
|
|
401
|
+
//# sourceMappingURL=control-Zbc5ZHq0.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-CqaQ5sXO.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-B0bMHQW0.mjs\";\nimport { n as mongoFamilyPslBlockDescriptors, t as mongoFamilyEntityTypes } from \"./authoring-entity-types-DkFfee0x.mjs\";\nimport { t as MongoContractSerializer } from \"./mongo-contract-serializer-DC_DM9_Y.mjs\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { 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 } from \"@internal/framework-components/control\";\nimport { mongoContractCanonicalizationHooks } from \"@internal/mongo-contract/canonicalization-hooks\";\nimport { assertDescriptorSelfConsistency } from \"@internal/migration-tools/spaces\";\nimport { InternalError } from \"@internal/utils/internal-error\";\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}\nvar MongoDdlCommandFormatter = class {\n\tcreateIndex(cmd) {\n\t\tconst keySpec = formatKeySpec(cmd.keys);\n\t\tconst opts = formatOptions(cmd);\n\t\treturn opts ? `db.${cmd.collection}.createIndex(${keySpec}, ${opts})` : `db.${cmd.collection}.createIndex(${keySpec})`;\n\t}\n\tdropIndex(cmd) {\n\t\treturn `db.${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 `db.${cmd.collection}.drop()`;\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 formatMongoOperations(operations) {\n\tconst statements = [];\n\tfor (const operation of operations) {\n\t\tconst candidate = operation;\n\t\tif (!(\"execute\" in candidate) || !Array.isArray(candidate[\"execute\"])) continue;\n\t\tfor (const step of candidate[\"execute\"]) if (step.command && typeof step.command.accept === \"function\") statements.push(step.command.accept(formatter));\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/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 jsonSchema = collection.validator.jsonSchema;\n\t\tconst properties = jsonSchema[\"properties\"];\n\t\tconst required = new Set(jsonSchema[\"required\"] ?? []);\n\t\tif (properties) for (const [propName, propDef] of Object.entries(properties)) {\n\t\t\tconst bsonType = propDef[\"bsonType\"] ?? \"unknown\";\n\t\t\tconst suffix = required.has(propName) ? \" (required)\" : \"\";\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}${suffix}`\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}\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 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 = 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 = 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(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\treturn {\n\t\tfamilyId: \"mongo\",\n\t\tdeserializeContract(contractJson) {\n\t\t\treturn 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 sign(options) {\n\t\t\tconst { driver, contract: rawContract, 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 controlAdapter = getControlAdapter();\n\t\t\tconst mongoDriver = asMongoDriver(driver);\n\t\t\tconst existingMarker = await controlAdapter.readMarker(mongoDriver, APP_SPACE_ID);\n\t\t\tlet markerCreated = false;\n\t\t\tlet markerUpdated = false;\n\t\t\tlet previousHashes;\n\t\t\tif (!existingMarker) {\n\t\t\t\tawait controlAdapter.initMarker(mongoDriver, APP_SPACE_ID, {\n\t\t\t\t\tstorageHash: contractStorageHash,\n\t\t\t\t\tprofileHash: contractProfileHash\n\t\t\t\t});\n\t\t\t\tmarkerCreated = true;\n\t\t\t} else {\n\t\t\t\tconst storageHashMatches = existingMarker.storageHash === contractStorageHash;\n\t\t\t\tconst profileHashMatches = existingMarker.profileHash === contractProfileHash;\n\t\t\t\tif (!storageHashMatches || !profileHashMatches) {\n\t\t\t\t\tpreviousHashes = {\n\t\t\t\t\t\tstorageHash: existingMarker.storageHash,\n\t\t\t\t\t\tprofileHash: existingMarker.profileHash\n\t\t\t\t\t};\n\t\t\t\t\tif (!await controlAdapter.updateMarker(mongoDriver, APP_SPACE_ID, existingMarker.storageHash, {\n\t\t\t\t\t\tstorageHash: contractStorageHash,\n\t\t\t\t\t\tprofileHash: contractProfileHash\n\t\t\t\t\t})) throw structuredError(\"MIGRATION.MARKER_CAS_FAILURE\", \"CAS conflict: marker was modified by another process during sign\");\n\t\t\t\t\tmarkerUpdated = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet summary;\n\t\t\tif (markerCreated) summary = \"Database signed (marker created)\";\n\t\t\telse if (markerUpdated) summary = `Database signed (marker updated from ${previousHashes?.storageHash ?? \"unknown\"})`;\n\t\t\telse summary = \"Database already signed with this contract\";\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tsummary,\n\t\t\t\tcontract: {\n\t\t\t\t\tstorageHash: contractStorageHash,\n\t\t\t\t\tprofileHash: contractProfileHash\n\t\t\t\t},\n\t\t\t\ttarget: {\n\t\t\t\t\texpected: contract.target,\n\t\t\t\t\tactual: contract.target\n\t\t\t\t},\n\t\t\t\tmarker: {\n\t\t\t\t\tcreated: markerCreated,\n\t\t\t\t\tupdated: markerUpdated,\n\t\t\t\t\t...ifDefined(\"previous\", previousHashes)\n\t\t\t\t},\n\t\t\t\tmeta: {\n\t\t\t\t\tcontractPath,\n\t\t\t\t\t...ifDefined(\"configPath\", configPath)\n\t\t\t\t},\n\t\t\t\ttimings: { total: Date.now() - startTime }\n\t\t\t};\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\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};\n}\n//#endregion\n//#region src/core/control-descriptor.ts\nconst mongoFamilyAttributeSpecs = mongoAttributeSpecs;\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\tcreate(stack) {\n\t\treturn createMongoFamilyInstance(stack);\n\t}\n};\nconst mongoFamilyDescriptor = new MongoFamilyDescriptor();\n//#endregion\nexport { canonicalizeSchemasForVerification, contractToMongoSchemaIR, createMongoFamilyInstance, diffMongoSchemas, formatMongoOperations, mongoFamilyDescriptor, mongoOperationsToPreview };\n\n//# sourceMappingURL=control.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"control-Zbc5ZHq0.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-B0bMHQW0.mjs\";\nimport { n as mongoFamilyPslBlockDescriptors, t as mongoFamilyEntityTypes } from \"./authoring-entity-types-DkFfee0x.mjs\";\nimport { t as MongoContractSerializer } from \"./mongo-contract-serializer-DC_DM9_Y.mjs\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { 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 } from \"@internal/framework-components/control\";\nimport { mongoContractCanonicalizationHooks } from \"@internal/mongo-contract/canonicalization-hooks\";\nimport { assertDescriptorSelfConsistency } from \"@internal/migration-tools/spaces\";\nimport { InternalError } from \"@internal/utils/internal-error\";\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}\nvar MongoDdlCommandFormatter = class {\n\tcreateIndex(cmd) {\n\t\tconst keySpec = formatKeySpec(cmd.keys);\n\t\tconst opts = formatOptions(cmd);\n\t\treturn opts ? `db.${cmd.collection}.createIndex(${keySpec}, ${opts})` : `db.${cmd.collection}.createIndex(${keySpec})`;\n\t}\n\tdropIndex(cmd) {\n\t\treturn `db.${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 `db.${cmd.collection}.drop()`;\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 formatMongoOperations(operations) {\n\tconst statements = [];\n\tfor (const operation of operations) {\n\t\tconst candidate = operation;\n\t\tif (!(\"execute\" in candidate) || !Array.isArray(candidate[\"execute\"])) continue;\n\t\tfor (const step of candidate[\"execute\"]) if (step.command && typeof step.command.accept === \"function\") statements.push(step.command.accept(formatter));\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/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 jsonSchema = collection.validator.jsonSchema;\n\t\tconst properties = jsonSchema[\"properties\"];\n\t\tconst required = new Set(jsonSchema[\"required\"] ?? []);\n\t\tif (properties) for (const [propName, propDef] of Object.entries(properties)) {\n\t\t\tconst bsonType = propDef[\"bsonType\"] ?? \"unknown\";\n\t\t\tconst suffix = required.has(propName) ? \" (required)\" : \"\";\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}${suffix}`\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}\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 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 = 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 = 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(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\treturn {\n\t\tfamilyId: \"mongo\",\n\t\tdeserializeContract(contractJson) {\n\t\t\treturn 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 sign(options) {\n\t\t\tconst { driver, contract: rawContract, 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 controlAdapter = getControlAdapter();\n\t\t\tconst mongoDriver = asMongoDriver(driver);\n\t\t\tconst existingMarker = await controlAdapter.readMarker(mongoDriver, APP_SPACE_ID);\n\t\t\tlet markerCreated = false;\n\t\t\tlet markerUpdated = false;\n\t\t\tlet previousHashes;\n\t\t\tif (!existingMarker) {\n\t\t\t\tawait controlAdapter.initMarker(mongoDriver, APP_SPACE_ID, {\n\t\t\t\t\tstorageHash: contractStorageHash,\n\t\t\t\t\tprofileHash: contractProfileHash\n\t\t\t\t});\n\t\t\t\tmarkerCreated = true;\n\t\t\t} else {\n\t\t\t\tconst storageHashMatches = existingMarker.storageHash === contractStorageHash;\n\t\t\t\tconst profileHashMatches = existingMarker.profileHash === contractProfileHash;\n\t\t\t\tif (!storageHashMatches || !profileHashMatches) {\n\t\t\t\t\tpreviousHashes = {\n\t\t\t\t\t\tstorageHash: existingMarker.storageHash,\n\t\t\t\t\t\tprofileHash: existingMarker.profileHash\n\t\t\t\t\t};\n\t\t\t\t\tif (!await controlAdapter.updateMarker(mongoDriver, APP_SPACE_ID, existingMarker.storageHash, {\n\t\t\t\t\t\tstorageHash: contractStorageHash,\n\t\t\t\t\t\tprofileHash: contractProfileHash\n\t\t\t\t\t})) throw structuredError(\"MIGRATION.MARKER_CAS_FAILURE\", \"CAS conflict: marker was modified by another process during sign\");\n\t\t\t\t\tmarkerUpdated = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet summary;\n\t\t\tif (markerCreated) summary = \"Database signed (marker created)\";\n\t\t\telse if (markerUpdated) summary = `Database signed (marker updated from ${previousHashes?.storageHash ?? \"unknown\"})`;\n\t\t\telse summary = \"Database already signed with this contract\";\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tsummary,\n\t\t\t\tcontract: {\n\t\t\t\t\tstorageHash: contractStorageHash,\n\t\t\t\t\tprofileHash: contractProfileHash\n\t\t\t\t},\n\t\t\t\ttarget: {\n\t\t\t\t\texpected: contract.target,\n\t\t\t\t\tactual: contract.target\n\t\t\t\t},\n\t\t\t\tmarker: {\n\t\t\t\t\tcreated: markerCreated,\n\t\t\t\t\tupdated: markerUpdated,\n\t\t\t\t\t...ifDefined(\"previous\", previousHashes)\n\t\t\t\t},\n\t\t\t\tmeta: {\n\t\t\t\t\tcontractPath,\n\t\t\t\t\t...ifDefined(\"configPath\", configPath)\n\t\t\t\t},\n\t\t\t\ttimings: { total: Date.now() - startTime }\n\t\t\t};\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\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};\n}\n//#endregion\n//#region src/core/control-descriptor.ts\nconst mongoFamilyAttributeSpecs = mongoAttributeSpecs;\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\tcreate(stack) {\n\t\treturn createMongoFamilyInstance(stack);\n\t}\n};\nconst mongoFamilyDescriptor = new MongoFamilyDescriptor();\n//#endregion\nexport { canonicalizeSchemasForVerification, contractToMongoSchemaIR, createMongoFamilyInstance, diffMongoSchemas, formatMongoOperations, mongoFamilyDescriptor, mongoOperationsToPreview };\n\n//# sourceMappingURL=control.mjs.map"],"mappings":"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"}
|
package/dist/family.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { l as defaultMongoDomainNamespaceId, u as defaultMongoStorageNamespaceId
|
|
|
2
2
|
import { i as verifyMongoSchema, n as contractToMongoSchemaIR, r as diffMongoSchemas, t as canonicalizeSchemasForVerification } from "./verify-mongo-schema-B0bMHQW0-DSZhsvrk.mjs";
|
|
3
3
|
import { n as mongoFamilyPslBlockDescriptors, t as mongoFamilyEntityTypes } from "./authoring-entity-types-DkFfee0x-1-Cz_f4r.mjs";
|
|
4
4
|
import { n as MongoContractSerializerBase, t as MongoContractSerializer } from "./mongo-contract-serializer-DC_DM9_Y-D13m_FBX.mjs";
|
|
5
|
-
import { i as mongoOperationsToPreview, n as formatMongoOperations, r as mongoFamilyDescriptor, t as createMongoFamilyInstance } from "./control-
|
|
5
|
+
import { i as mongoOperationsToPreview, n as formatMongoOperations, r as mongoFamilyDescriptor, t as createMongoFamilyInstance } from "./control-Zbc5ZHq0.mjs";
|
|
6
6
|
import { t as MongoContractView$1 } from "./mongo-contract-view-JZOa0Ry--BZsUrVN_.mjs";
|
|
7
7
|
import { t as MongoSchemaVerifierBase } from "./ir-Ch2aPr7a.mjs";
|
|
8
8
|
import { t as MongoMigration } from "./migration-c8VhrzyG.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-B0bMHQW0-DSZhsvrk.mjs";
|
|
2
|
-
import { i as mongoOperationsToPreview, n as formatMongoOperations, r as mongoFamilyDescriptor, t as createMongoFamilyInstance } from "./control-
|
|
2
|
+
import { i as mongoOperationsToPreview, n as formatMongoOperations, r as mongoFamilyDescriptor, t as createMongoFamilyInstance } from "./control-Zbc5ZHq0.mjs";
|
|
3
3
|
export { canonicalizeSchemasForVerification, contractToMongoSchemaIR, createMongoFamilyInstance, diffMongoSchemas, formatMongoOperations, mongoFamilyDescriptor, mongoOperationsToPreview };
|
package/dist/family__pack.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as mongoAttributeSpecs } from "./interpreter-
|
|
1
|
+
import { i as mongoAttributeSpecs } from "./interpreter-BsGn9AR--DggjzYPT.mjs";
|
|
2
2
|
import { n as mongoFamilyPslBlockDescriptors, t as mongoFamilyEntityTypes } from "./authoring-entity-types-DkFfee0x-1-Cz_f4r.mjs";
|
|
3
3
|
//#region ../../../2-mongo-family/9-family/dist/pack.mjs
|
|
4
4
|
const mongoFamilyPack = {
|
|
@@ -13,7 +13,7 @@ import { consumeInvalidFkPairing, fkRelationPairKey, requiredOneToOneBackrelatio
|
|
|
13
13
|
import { assertDefined } from "@prisma/orm-framework/utils/assertions";
|
|
14
14
|
import { ifDefined } from "@prisma/orm-framework/utils/defined";
|
|
15
15
|
import { notOk, ok } from "@prisma/orm-framework/utils/result";
|
|
16
|
-
//#region ../../../2-mongo-family/2-authoring/contract-psl/dist/interpreter-
|
|
16
|
+
//#region ../../../2-mongo-family/2-authoring/contract-psl/dist/interpreter-BsGn9AR-.mjs
|
|
17
17
|
function resolveBsonType(codecId, codecLookup) {
|
|
18
18
|
return codecLookup?.targetTypesFor(codecId)?.[0];
|
|
19
19
|
}
|
|
@@ -124,7 +124,8 @@ function findFieldAttributeNode(field, name) {
|
|
|
124
124
|
function buildModelAttributeCtx(input) {
|
|
125
125
|
return {
|
|
126
126
|
sources: input.sources,
|
|
127
|
-
selfModel: input.selfModel
|
|
127
|
+
selfModel: input.selfModel,
|
|
128
|
+
symbols: input.symbols
|
|
128
129
|
};
|
|
129
130
|
}
|
|
130
131
|
function buildFieldAttributeCtx(input) {
|
|
@@ -132,11 +133,13 @@ function buildFieldAttributeCtx(input) {
|
|
|
132
133
|
sources: input.sources,
|
|
133
134
|
selfModel: input.selfModel,
|
|
134
135
|
resolveReferencedModel: input.resolveReferencedModel ?? (() => void 0),
|
|
135
|
-
field: input.field
|
|
136
|
+
field: input.field,
|
|
137
|
+
symbols: input.symbols
|
|
136
138
|
};
|
|
137
139
|
}
|
|
138
140
|
function interpretModelAttribute(input) {
|
|
139
141
|
const result = interpretAttribute(input.node, input.spec, buildModelAttributeCtx({
|
|
142
|
+
symbols: input.symbols,
|
|
140
143
|
selfModel: input.model,
|
|
141
144
|
sources: input.sources
|
|
142
145
|
}));
|
|
@@ -148,6 +151,7 @@ function interpretModelAttribute(input) {
|
|
|
148
151
|
}
|
|
149
152
|
function interpretFieldAttribute(input) {
|
|
150
153
|
const result = interpretAttribute(input.node, input.spec, buildFieldAttributeCtx({
|
|
154
|
+
symbols: input.symbols,
|
|
151
155
|
selfModel: input.model,
|
|
152
156
|
field: input.field,
|
|
153
157
|
sources: input.sources,
|
|
@@ -213,18 +217,20 @@ const discriminatorModelSpec = modelAttribute("discriminator", {
|
|
|
213
217
|
documentation: "The discriminator field on this model."
|
|
214
218
|
}]
|
|
215
219
|
});
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
220
|
+
function baseModelSpec() {
|
|
221
|
+
return modelAttribute("base", {
|
|
222
|
+
documentation: "Declares this model as a variant of a base model.",
|
|
223
|
+
positional: [{
|
|
224
|
+
key: "base",
|
|
225
|
+
type: entityRef({ kind: "model" }),
|
|
226
|
+
documentation: "The base model to inherit from."
|
|
227
|
+
}, {
|
|
228
|
+
key: "value",
|
|
229
|
+
type: str(),
|
|
230
|
+
documentation: "The discriminator value identifying this variant."
|
|
231
|
+
}]
|
|
232
|
+
});
|
|
233
|
+
}
|
|
228
234
|
const sortSig = {
|
|
229
235
|
documentation: "Selects an index field with an explicit sort direction.",
|
|
230
236
|
named: { sort: {
|
|
@@ -239,7 +245,7 @@ function indexFieldElement(fieldNames) {
|
|
|
239
245
|
documentation: "Indexes document fields using a MongoDB wildcard index.",
|
|
240
246
|
positional: [{
|
|
241
247
|
key: "scope",
|
|
242
|
-
type: optional(
|
|
248
|
+
type: optional(identifier()),
|
|
243
249
|
documentation: "The field path to index recursively. Omit to index all document fields."
|
|
244
250
|
}]
|
|
245
251
|
}),
|
|
@@ -374,7 +380,7 @@ const mongoAttributeSpecs = {
|
|
|
374
380
|
model: {
|
|
375
381
|
map: staticModelSpec(mapModelSpec),
|
|
376
382
|
discriminator: staticModelSpec(discriminatorModelSpec),
|
|
377
|
-
base:
|
|
383
|
+
base: baseModelSpec,
|
|
378
384
|
index: (ctx) => buildIndexModelSpec("index", modelFieldElement(ctx)),
|
|
379
385
|
unique: (ctx) => buildIndexModelSpec("unique", modelFieldElement(ctx)),
|
|
380
386
|
textIndex: (ctx) => buildTextIndexModelSpec(modelFieldElement(ctx))
|
|
@@ -456,6 +462,7 @@ function resolveFieldMappings(input) {
|
|
|
456
462
|
for (const field of Object.values(model.fields)) {
|
|
457
463
|
const mapNode = findFieldAttributeNode(field, "map");
|
|
458
464
|
const mapped = (mapNode ? interpretFieldAttribute({
|
|
465
|
+
symbols: specContext.symbols,
|
|
459
466
|
node: mapNode,
|
|
460
467
|
spec: mongoAttributeSpecs.field.map({
|
|
461
468
|
...specContext,
|
|
@@ -474,6 +481,7 @@ function resolveCollectionName(input) {
|
|
|
474
481
|
const { model, specContext, sources, diagnostics } = input;
|
|
475
482
|
const mapNode = findModelAttributeNode(model, "map");
|
|
476
483
|
return (mapNode ? interpretModelAttribute({
|
|
484
|
+
symbols: specContext.symbols,
|
|
477
485
|
node: mapNode,
|
|
478
486
|
spec: mongoAttributeSpecs.model.map(specContext),
|
|
479
487
|
model,
|
|
@@ -492,6 +500,7 @@ function collectPolymorphismDeclarations(models, specContextFor, modelMetadataBy
|
|
|
492
500
|
const discNode = findModelAttributeNode(model, "discriminator");
|
|
493
501
|
if (discNode) {
|
|
494
502
|
const parsed = interpretModelAttribute({
|
|
503
|
+
symbols: specContext.symbols,
|
|
495
504
|
node: discNode,
|
|
496
505
|
spec: mongoAttributeSpecs.model.discriminator(specContext),
|
|
497
506
|
model,
|
|
@@ -506,7 +515,7 @@ function collectPolymorphismDeclarations(models, specContextFor, modelMetadataBy
|
|
|
506
515
|
message: `Discriminator field "${fieldName}" on model "${model.name}" must be of type String, but is "${discField.typeName}"`,
|
|
507
516
|
...diagnosticSource(sources, discNode.syntax).at(nodePslSpan(discNode.syntax, sources))
|
|
508
517
|
});
|
|
509
|
-
else discriminatorDeclarations.set(model
|
|
518
|
+
else discriminatorDeclarations.set(model, {
|
|
510
519
|
fieldName,
|
|
511
520
|
source: diagnosticSource(sources, discNode.syntax),
|
|
512
521
|
span: nodePslSpan(discNode.syntax, sources)
|
|
@@ -516,16 +525,17 @@ function collectPolymorphismDeclarations(models, specContextFor, modelMetadataBy
|
|
|
516
525
|
const baseNode = findModelAttributeNode(model, "base");
|
|
517
526
|
if (baseNode) {
|
|
518
527
|
const parsed = interpretModelAttribute({
|
|
528
|
+
symbols: specContext.symbols,
|
|
519
529
|
node: baseNode,
|
|
520
|
-
spec: mongoAttributeSpecs.model.base(
|
|
530
|
+
spec: mongoAttributeSpecs.model.base(),
|
|
521
531
|
model,
|
|
522
532
|
sources,
|
|
523
533
|
diagnostics
|
|
524
534
|
});
|
|
525
535
|
if (parsed) {
|
|
526
536
|
const collectionName = modelMetadataByName.get(model.name)?.collectionName ?? defaultCollectionName(model.name);
|
|
527
|
-
baseDeclarations.set(model
|
|
528
|
-
|
|
537
|
+
baseDeclarations.set(model, {
|
|
538
|
+
base: parsed.base.declaration,
|
|
529
539
|
value: parsed.value,
|
|
530
540
|
collectionName,
|
|
531
541
|
source: diagnosticSource(sources, baseNode.syntax),
|
|
@@ -540,13 +550,14 @@ function collectPolymorphismDeclarations(models, specContextFor, modelMetadataBy
|
|
|
540
550
|
};
|
|
541
551
|
}
|
|
542
552
|
function resolvePolymorphism(input) {
|
|
543
|
-
const { discriminatorDeclarations, baseDeclarations,
|
|
553
|
+
const { discriminatorDeclarations, baseDeclarations, modelMetadataByName, indexSpans, modelIndexesByName, indexSources } = input;
|
|
544
554
|
let patched = input.models;
|
|
545
555
|
let roots = input.roots;
|
|
546
556
|
let collections = input.collections;
|
|
547
557
|
const diagnostics = createPslDiagnosticCollector(input.sources);
|
|
548
|
-
for (const [
|
|
549
|
-
|
|
558
|
+
for (const [declaration, decl] of discriminatorDeclarations) {
|
|
559
|
+
const modelName = declaration.name;
|
|
560
|
+
if (baseDeclarations.has(declaration)) {
|
|
550
561
|
diagnostics.push({
|
|
551
562
|
code: "PSL_DISCRIMINATOR_AND_BASE",
|
|
552
563
|
message: `Model "${modelName}" cannot have both @@discriminator and @@base`,
|
|
@@ -566,9 +577,9 @@ function resolvePolymorphism(input) {
|
|
|
566
577
|
continue;
|
|
567
578
|
}
|
|
568
579
|
const variants = {};
|
|
569
|
-
for (const [
|
|
570
|
-
if (baseDecl.
|
|
571
|
-
variants[
|
|
580
|
+
for (const [variant, baseDecl] of baseDeclarations) {
|
|
581
|
+
if (baseDecl.base !== declaration) continue;
|
|
582
|
+
variants[variant.name] = { value: baseDecl.value };
|
|
572
583
|
}
|
|
573
584
|
if (Object.keys(variants).length === 0) {
|
|
574
585
|
diagnostics.push({
|
|
@@ -587,31 +598,23 @@ function resolvePolymorphism(input) {
|
|
|
587
598
|
}
|
|
588
599
|
};
|
|
589
600
|
}
|
|
590
|
-
for (const [
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
message: `Model "${variantName}" @@base references non-existent model "${baseDecl.baseName}"`,
|
|
595
|
-
...baseDecl.source.at(baseDecl.span)
|
|
596
|
-
});
|
|
597
|
-
continue;
|
|
598
|
-
}
|
|
599
|
-
if (!discriminatorDeclarations.has(baseDecl.baseName)) {
|
|
601
|
+
for (const [variant, baseDecl] of baseDeclarations) {
|
|
602
|
+
const variantName = variant.name;
|
|
603
|
+
const baseName = baseDecl.base.name;
|
|
604
|
+
if (!discriminatorDeclarations.has(baseDecl.base)) {
|
|
600
605
|
diagnostics.push({
|
|
601
606
|
code: "PSL_ORPHANED_BASE",
|
|
602
|
-
message: `Model "${variantName}" declares @@base(${
|
|
607
|
+
message: `Model "${variantName}" declares @@base(${baseName}, ...) but "${baseName}" has no @@discriminator`,
|
|
603
608
|
...baseDecl.source.at(baseDecl.span)
|
|
604
609
|
});
|
|
605
610
|
continue;
|
|
606
611
|
}
|
|
607
|
-
if (discriminatorDeclarations.has(
|
|
608
|
-
const baseModel = patched[
|
|
609
|
-
|
|
610
|
-
if (!variantModelView) continue;
|
|
611
|
-
if (getAttribute(variantModelView.attributes, "map") !== void 0 && baseModel && baseDecl.collectionName !== baseModel.storage.collection) {
|
|
612
|
+
if (discriminatorDeclarations.has(variant)) continue;
|
|
613
|
+
const baseModel = patched[baseName];
|
|
614
|
+
if (getAttribute(variant.attributes, "map") !== void 0 && baseModel && baseDecl.collectionName !== baseModel.storage.collection) {
|
|
612
615
|
diagnostics.push({
|
|
613
616
|
code: "PSL_MONGO_VARIANT_SEPARATE_COLLECTION",
|
|
614
|
-
message: `Mongo variant "${variantName}" cannot use a different collection than its base "${
|
|
617
|
+
message: `Mongo variant "${variantName}" cannot use a different collection than its base "${baseName}". Mongo only supports single-collection polymorphism.`,
|
|
615
618
|
...baseDecl.source.at(baseDecl.span)
|
|
616
619
|
});
|
|
617
620
|
continue;
|
|
@@ -622,19 +625,19 @@ function resolvePolymorphism(input) {
|
|
|
622
625
|
...patched,
|
|
623
626
|
[variantName]: {
|
|
624
627
|
...variantModel,
|
|
625
|
-
base: mongoCrossRef(
|
|
628
|
+
base: mongoCrossRef(baseName),
|
|
626
629
|
storage: { collection: baseCollection }
|
|
627
630
|
}
|
|
628
631
|
};
|
|
629
632
|
const variantCollectionName = modelMetadataByName.get(variantName)?.collectionName ?? defaultCollectionName(variantName);
|
|
630
633
|
if (roots[variantCollectionName]?.model === variantName) if (variantCollectionName === baseCollection && baseModel) roots = {
|
|
631
634
|
...roots,
|
|
632
|
-
[variantCollectionName]: mongoCrossRef(
|
|
635
|
+
[variantCollectionName]: mongoCrossRef(baseName)
|
|
633
636
|
};
|
|
634
637
|
else roots = Object.fromEntries(Object.entries(roots).filter(([key]) => key !== variantCollectionName));
|
|
635
638
|
const variantOwnIndexes = modelIndexesByName.get(variantName) ?? [];
|
|
636
639
|
const baseColl = collections[baseCollection];
|
|
637
|
-
const discriminatorField = patched[
|
|
640
|
+
const discriminatorField = patched[baseName]?.discriminator?.field;
|
|
638
641
|
const scopedVariantIndexes = [];
|
|
639
642
|
if (discriminatorField) for (const idx of variantOwnIndexes) {
|
|
640
643
|
const result = applyPolymorphicScopeToMongoIndex(idx, {
|
|
@@ -906,6 +909,7 @@ function collectIndexes(pslModel, specContext, fieldMappings, modelNames, source
|
|
|
906
909
|
const uniqueNode = findFieldAttributeNode(field, "unique");
|
|
907
910
|
if (!uniqueNode) continue;
|
|
908
911
|
if (interpretFieldAttribute({
|
|
912
|
+
symbols: specContext.symbols,
|
|
909
913
|
node: uniqueNode,
|
|
910
914
|
spec: mongoAttributeSpecs.field.unique({
|
|
911
915
|
...specContext,
|
|
@@ -944,6 +948,7 @@ function collectIndexes(pslModel, specContext, fieldMappings, modelNames, source
|
|
|
944
948
|
let index;
|
|
945
949
|
if (attr.name === "textIndex") {
|
|
946
950
|
const parsed = interpretModelAttribute({
|
|
951
|
+
symbols: specContext.symbols,
|
|
947
952
|
node,
|
|
948
953
|
spec: mongoAttributeSpecs.model.textIndex(specContext),
|
|
949
954
|
model: pslModel,
|
|
@@ -964,6 +969,7 @@ function collectIndexes(pslModel, specContext, fieldMappings, modelNames, source
|
|
|
964
969
|
} else {
|
|
965
970
|
const unique = attr.name === "unique";
|
|
966
971
|
const parsed = interpretModelAttribute({
|
|
972
|
+
symbols: specContext.symbols,
|
|
967
973
|
node,
|
|
968
974
|
spec: unique ? mongoAttributeSpecs.model.unique(specContext) : mongoAttributeSpecs.model.index(specContext),
|
|
969
975
|
model: pslModel,
|
|
@@ -1156,6 +1162,7 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1156
1162
|
if (isRelationField(field, modelNames)) {
|
|
1157
1163
|
const relationNode = findFieldAttributeNode(field, "relation");
|
|
1158
1164
|
const relation = relationNode ? interpretFieldAttribute({
|
|
1165
|
+
symbols: specContext.symbols,
|
|
1159
1166
|
node: relationNode,
|
|
1160
1167
|
spec: mongoAttributeSpecs.field.relation({
|
|
1161
1168
|
...specContext,
|
|
@@ -1224,6 +1231,7 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1224
1231
|
const idNode = findFieldAttributeNode(field, "id");
|
|
1225
1232
|
if (!idNode) return false;
|
|
1226
1233
|
return interpretFieldAttribute({
|
|
1234
|
+
symbols: specContext.symbols,
|
|
1227
1235
|
node: idNode,
|
|
1228
1236
|
spec: mongoAttributeSpecs.field.id({
|
|
1229
1237
|
...specContext,
|
|
@@ -1329,10 +1337,8 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1329
1337
|
models,
|
|
1330
1338
|
roots,
|
|
1331
1339
|
collections,
|
|
1332
|
-
allModels,
|
|
1333
1340
|
discriminatorDeclarations,
|
|
1334
1341
|
baseDeclarations,
|
|
1335
|
-
modelNames,
|
|
1336
1342
|
indexSpans,
|
|
1337
1343
|
modelIndexesByName,
|
|
1338
1344
|
modelMetadataByName,
|
|
@@ -1426,4 +1432,4 @@ function interpretPslDocumentToMongoContract(input) {
|
|
|
1426
1432
|
//#endregion
|
|
1427
1433
|
export { mongoAttributeSpecs as i, derivePolymorphicJsonSchema as n, interpretPslDocumentToMongoContract as r, deriveJsonSchema as t };
|
|
1428
1434
|
|
|
1429
|
-
//# sourceMappingURL=interpreter-
|
|
1435
|
+
//# sourceMappingURL=interpreter-BsGn9AR--DggjzYPT.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpreter-BsGn9AR--DggjzYPT.mjs","names":[],"sources":["../../../../2-mongo-family/2-authoring/contract-psl/dist/interpreter-BsGn9AR-.mjs"],"sourcesContent":["import { MongoIndex, MongoStorage, MongoValidator, applyPolymorphicScopeToMongoIndex, buildMongoNamespace } from \"@internal/mongo-contract\";\nimport { computeProfileHash, computeStorageHash } from \"@internal/contract/hashing\";\nimport { crossRef } from \"@internal/contract/types\";\nimport { resolveToOneRelationNullable } from \"@internal/contract-authoring\";\nimport { errorEnumCodecNotInPackStack } from \"@internal/errors/control\";\nimport { instantiateAuthoringEntityType, isAuthoringEntityTypeDescriptor } from \"@internal/framework-components/authoring\";\nimport { UNBOUND_NAMESPACE_ID } from \"@internal/framework-components/ir\";\nimport { mongoContractCanonicalizationHooks } from \"@internal/mongo-contract/canonicalization-hooks\";\nimport { bool, createPslDiagnosticCollector, diagnosticSource, entityRef, fieldAttribute, fieldRef, funcCall, identifier, int, interpretAttribute, json, list, modelAttribute, nodePslSpan, num, oneOf, optional, record, referencedFieldRef, str } from \"@internal/psl-parser\";\nimport { consumeInvalidFkPairing, fkRelationPairKey, requiredOneToOneBackrelationDiagnostic } from \"@internal/psl-parser/interpret\";\nimport { assertDefined } from \"@internal/utils/assertions\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { notOk, ok } from \"@internal/utils/result\";\n//#region src/derive-json-schema.ts\nfunction resolveBsonType(codecId, codecLookup) {\n\treturn codecLookup?.targetTypesFor(codecId)?.[0];\n}\nfunction fieldToBsonSchema(field, valueObjects, codecLookup, valueSets) {\n\tif (field.type.kind === \"scalar\") {\n\t\tconst bsonType = resolveBsonType(field.type.codecId, codecLookup);\n\t\tif (!bsonType) return void 0;\n\t\tconst enumValues = field.valueSet !== void 0 ? valueSets?.[field.valueSet.entityName]?.values ?? null : null;\n\t\tif (\"many\" in field && field.many) {\n\t\t\tconst items = { bsonType };\n\t\t\tif (enumValues) items[\"enum\"] = enumValues;\n\t\t\treturn {\n\t\t\t\tbsonType: \"array\",\n\t\t\t\titems\n\t\t\t};\n\t\t}\n\t\tif (field.nullable) {\n\t\t\tconst s = { bsonType: [\"null\", bsonType] };\n\t\t\tif (enumValues) s[\"enum\"] = [...enumValues, null];\n\t\t\treturn s;\n\t\t}\n\t\tconst s = { bsonType };\n\t\tif (enumValues) s[\"enum\"] = enumValues;\n\t\treturn s;\n\t}\n\tif (field.type.kind === \"valueObject\") {\n\t\tconst vo = valueObjects?.[field.type.name];\n\t\tif (!vo) return void 0;\n\t\tconst voSchema = deriveObjectSchema(vo.fields, valueObjects, codecLookup, valueSets);\n\t\tif (\"many\" in field && field.many) return {\n\t\t\tbsonType: \"array\",\n\t\t\titems: voSchema\n\t\t};\n\t\tif (field.nullable) return { oneOf: [{ bsonType: \"null\" }, voSchema] };\n\t\treturn voSchema;\n\t}\n}\nfunction deriveObjectSchema(fields, valueObjects, codecLookup, valueSets) {\n\tconst properties = {};\n\tconst required = [];\n\tfor (const [fieldName, field] of Object.entries(fields)) {\n\t\tconst schema = fieldToBsonSchema(field, valueObjects, codecLookup, valueSets);\n\t\tif (schema) {\n\t\t\tproperties[fieldName] = schema;\n\t\t\tif (!field.nullable) required.push(fieldName);\n\t\t}\n\t}\n\tconst result = {\n\t\tbsonType: \"object\",\n\t\tproperties,\n\t\tadditionalProperties: false\n\t};\n\tif (required.length > 0) result[\"required\"] = required.sort();\n\treturn result;\n}\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction deriveJsonSchema(fields, valueObjects, codecLookup, valueSets) {\n\treturn new MongoValidator({\n\t\tjsonSchema: deriveObjectSchema(fields, valueObjects, codecLookup, valueSets),\n\t\tvalidationLevel: \"strict\",\n\t\tvalidationAction: \"error\"\n\t});\n}\nfunction derivePolymorphicJsonSchema(baseFields, discriminatorField, variants, valueObjects, codecLookup, valueSets) {\n\tconst baseSchema = deriveObjectSchema(baseFields, valueObjects, codecLookup, valueSets);\n\tconst baseProperties = isRecord(baseSchema[\"properties\"]) ? baseSchema[\"properties\"] : {};\n\tconst oneOf = [];\n\tfor (const variant of variants) {\n\t\tconst variantOnlyFields = {};\n\t\tfor (const [name, field] of Object.entries(variant.fields)) if (!(name in baseFields)) variantOnlyFields[name] = field;\n\t\tconst variantProperties = {};\n\t\tconst variantRequired = [discriminatorField];\n\t\tfor (const [name, field] of Object.entries(variantOnlyFields)) {\n\t\t\tconst schema = fieldToBsonSchema(field, valueObjects, codecLookup, valueSets);\n\t\t\tif (schema) {\n\t\t\t\tvariantProperties[name] = schema;\n\t\t\t\tif (!field.nullable) variantRequired.push(name);\n\t\t\t}\n\t\t}\n\t\tconst entry = {\n\t\t\tproperties: {\n\t\t\t\t...baseProperties,\n\t\t\t\t[discriminatorField]: { enum: [variant.discriminatorValue] },\n\t\t\t\t...variantProperties\n\t\t\t},\n\t\t\trequired: variantRequired.sort(),\n\t\t\tadditionalProperties: false\n\t\t};\n\t\toneOf.push(entry);\n\t}\n\tconst jsonSchema = { ...baseSchema };\n\tdelete jsonSchema[\"additionalProperties\"];\n\tif (oneOf.length > 0) jsonSchema[\"oneOf\"] = oneOf;\n\treturn new MongoValidator({\n\t\tjsonSchema,\n\t\tvalidationLevel: \"strict\",\n\t\tvalidationAction: \"error\"\n\t});\n}\n//#endregion\n//#region src/mongo-attribute-specs.ts\nfunction findModelAttributeNode(model, name) {\n\tfor (const attribute of model.node.attributes()) if (attribute.name()?.isSimpleName(name) === true) return attribute;\n}\nfunction findFieldAttributeNode(field, name) {\n\tfor (const attribute of field.node.attributes()) if (attribute.name()?.isSimpleName(name) === true) return attribute;\n}\nfunction buildModelAttributeCtx(input) {\n\treturn {\n\t\tsources: input.sources,\n\t\tselfModel: input.selfModel,\n\t\tsymbols: input.symbols\n\t};\n}\nfunction buildFieldAttributeCtx(input) {\n\treturn {\n\t\tsources: input.sources,\n\t\tselfModel: input.selfModel,\n\t\tresolveReferencedModel: input.resolveReferencedModel ?? (() => void 0),\n\t\tfield: input.field,\n\t\tsymbols: input.symbols\n\t};\n}\nfunction interpretModelAttribute(input) {\n\tconst result = interpretAttribute(input.node, input.spec, buildModelAttributeCtx({\n\t\tsymbols: input.symbols,\n\t\tselfModel: input.model,\n\t\tsources: input.sources\n\t}));\n\tif (!result.ok) {\n\t\tinput.diagnostics.push(...result.failure);\n\t\treturn;\n\t}\n\treturn result.value;\n}\nfunction interpretFieldAttribute(input) {\n\tconst result = interpretAttribute(input.node, input.spec, buildFieldAttributeCtx({\n\t\tsymbols: input.symbols,\n\t\tselfModel: input.model,\n\t\tfield: input.field,\n\t\tsources: input.sources,\n\t\tresolveReferencedModel: input.resolveReferencedModel\n\t}));\n\tif (!result.ok) {\n\t\tinput.diagnostics.push(...result.failure);\n\t\treturn;\n\t}\n\treturn result.value;\n}\nconst mapModelSpec = modelAttribute(\"map\", {\n\tdocumentation: \"Maps this model to a MongoDB collection name.\",\n\tpositional: [{\n\t\tkey: \"name\",\n\t\ttype: str(),\n\t\tdocumentation: \"The collection name stored in MongoDB.\"\n\t}]\n});\nconst mapFieldSpec = fieldAttribute(\"map\", {\n\tdocumentation: \"Maps this field to a stored document key.\",\n\tpositional: [{\n\t\tkey: \"name\",\n\t\ttype: str(),\n\t\tdocumentation: \"The key stored in MongoDB documents.\"\n\t}]\n});\nconst idFieldSpec = fieldAttribute(\"id\", { documentation: \"Identifies the document’s primary-key field.\" });\nconst uniqueFieldSpec = fieldAttribute(\"unique\", { documentation: \"Requires values in this field to be unique across the collection.\" });\nconst relationFieldSpec = fieldAttribute(\"relation\", {\n\tdocumentation: \"Names a relation and associates local fields with fields on the referenced model.\",\n\tpositional: [{\n\t\tkey: \"name\",\n\t\ttype: optional(str()),\n\t\tdocumentation: \"The relation name used to pair both sides. May also be supplied by name.\"\n\t}],\n\tnamed: {\n\t\tname: {\n\t\t\ttype: optional(str()),\n\t\t\tdocumentation: \"The relation name used to pair both sides. Cannot also be supplied positionally.\"\n\t\t},\n\t\tfields: {\n\t\t\ttype: optional(list(fieldRef(), {\n\t\t\t\tallowEmpty: false,\n\t\t\t\tunique: true\n\t\t\t})),\n\t\t\tdocumentation: \"The ordered local fields holding references to related documents.\"\n\t\t},\n\t\treferences: {\n\t\t\ttype: optional(list(referencedFieldRef(), {\n\t\t\t\tallowEmpty: false,\n\t\t\t\tunique: true\n\t\t\t})),\n\t\t\tdocumentation: \"The corresponding fields on the referenced model.\"\n\t\t}\n\t}\n});\nconst discriminatorModelSpec = modelAttribute(\"discriminator\", {\n\tdocumentation: \"Selects the field that distinguishes inheritance variants in this collection.\",\n\tpositional: [{\n\t\tkey: \"field\",\n\t\ttype: fieldRef(),\n\t\tdocumentation: \"The discriminator field on this model.\"\n\t}]\n});\nfunction baseModelSpec() {\n\treturn modelAttribute(\"base\", {\n\t\tdocumentation: \"Declares this model as a variant of a base model.\",\n\t\tpositional: [{\n\t\t\tkey: \"base\",\n\t\t\ttype: entityRef({ kind: \"model\" }),\n\t\t\tdocumentation: \"The base model to inherit from.\"\n\t\t}, {\n\t\t\tkey: \"value\",\n\t\t\ttype: str(),\n\t\t\tdocumentation: \"The discriminator value identifying this variant.\"\n\t\t}]\n\t});\n}\nconst sortSig = {\n\tdocumentation: \"Selects an index field with an explicit sort direction.\",\n\tnamed: { sort: {\n\t\ttype: oneOf(identifier(\"Asc\", { documentation: \"Sort ascending.\" }), identifier(\"Desc\", { documentation: \"Sort descending.\" })),\n\t\tdocumentation: \"The index order for this field: `Asc` or `Desc`.\"\n\t} }\n};\nfunction indexFieldElement(fieldNames) {\n\treturn oneOf(...[\n\t\tfieldRef(),\n\t\tfuncCall(\"wildcard\", {\n\t\t\tdocumentation: \"Indexes document fields using a MongoDB wildcard index.\",\n\t\t\tpositional: [{\n\t\t\t\tkey: \"scope\",\n\t\t\t\ttype: optional(identifier()),\n\t\t\t\tdocumentation: \"The field path to index recursively. Omit to index all document fields.\"\n\t\t\t}]\n\t\t}),\n\t\t...fieldNames.map((name) => funcCall(name, sortSig))\n\t]);\n}\nconst collationNamedArgs = {\n\tcollationLocale: {\n\t\ttype: optional(str()),\n\t\tdocumentation: \"The ICU locale used for string comparison, or `simple` for binary comparison.\"\n\t},\n\tcollationStrength: {\n\t\ttype: optional(oneOf(num(1), num(2), num(3), num(4), num(5))),\n\t\tdocumentation: \"The collation comparison level, from `1` (primary differences) through `5` (identical).\"\n\t},\n\tcollationCaseLevel: {\n\t\ttype: optional(bool()),\n\t\tdocumentation: \"Whether case differences are compared at strength `1` or `2`.\"\n\t},\n\tcollationCaseFirst: {\n\t\ttype: optional(oneOf(str(\"upper\"), str(\"lower\"), str(\"off\"))),\n\t\tdocumentation: \"Whether uppercase or lowercase sorts first, or `off` for the locale default.\"\n\t},\n\tcollationNumericOrdering: {\n\t\ttype: optional(bool()),\n\t\tdocumentation: \"Whether numeric strings are compared as numbers rather than lexicographically.\"\n\t},\n\tcollationAlternate: {\n\t\ttype: optional(oneOf(str(\"non-ignorable\"), str(\"shifted\"))),\n\t\tdocumentation: \"Whether punctuation and whitespace are significant or shifted to a later comparison level.\"\n\t},\n\tcollationMaxVariable: {\n\t\ttype: optional(oneOf(str(\"punct\"), str(\"space\"))),\n\t\tdocumentation: \"Which characters are ignored when alternate handling is `shifted`: punctuation or spaces.\"\n\t},\n\tcollationBackwards: {\n\t\ttype: optional(bool()),\n\t\tdocumentation: \"Whether secondary differences, such as accents, are compared in reverse order.\"\n\t},\n\tcollationNormalization: {\n\t\ttype: optional(bool()),\n\t\tdocumentation: \"Whether strings are checked and normalized before comparison.\"\n\t}\n};\nfunction buildIndexModelSpec(name, fieldElement) {\n\treturn modelAttribute(name, {\n\t\tdocumentation: name === \"unique\" ? \"Declares a unique MongoDB index over the selected fields.\" : \"Declares a MongoDB index over the selected fields.\",\n\t\tpositional: [{\n\t\t\tkey: \"fields\",\n\t\t\ttype: list(fieldElement, { allowEmpty: false }),\n\t\t\tdocumentation: name === \"unique\" ? \"The nonempty list of indexed fields, optionally with sort directions. Wildcard scopes are not supported.\" : \"The nonempty list of indexed fields, optionally with sort directions or a wildcard scope.\"\n\t\t}],\n\t\tnamed: {\n\t\t\ttype: {\n\t\t\t\ttype: optional(oneOf(num(1), num(-1), str(\"text\"), str(\"2dsphere\"), str(\"2d\"), str(\"hashed\"))),\n\t\t\t\tdocumentation: \"The MongoDB index key type: ascending `1`, descending `-1`, text, geospatial, or hashed.\"\n\t\t\t},\n\t\t\tsparse: {\n\t\t\t\ttype: optional(bool()),\n\t\t\t\tdocumentation: \"Whether documents missing indexed fields are omitted from the index.\"\n\t\t\t},\n\t\t\texpireAfterSeconds: {\n\t\t\t\ttype: optional(int()),\n\t\t\t\tdocumentation: \"The expiration interval in seconds for a TTL index.\"\n\t\t\t},\n\t\t\tfilter: {\n\t\t\t\ttype: optional(json()),\n\t\t\t\tdocumentation: \"A JSON partial-filter expression limiting which documents are indexed.\"\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\ttype: optional(list(str())),\n\t\t\t\tdocumentation: \"Document paths included in the wildcard index projection.\"\n\t\t\t},\n\t\t\texclude: {\n\t\t\t\ttype: optional(list(str())),\n\t\t\t\tdocumentation: \"Document paths excluded from the wildcard index projection.\"\n\t\t\t},\n\t\t\tdefault_language: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The default language for text-index tokenization and stemming.\"\n\t\t\t},\n\t\t\tlanguageOverride: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The document field that overrides the text-index language.\"\n\t\t\t},\n\t\t\t...collationNamedArgs\n\t\t}\n\t});\n}\nfunction buildTextIndexModelSpec(fieldElement) {\n\treturn modelAttribute(\"textIndex\", {\n\t\tdocumentation: \"Declares a MongoDB text index with optional field weights and language settings.\",\n\t\tpositional: [{\n\t\t\tkey: \"fields\",\n\t\t\ttype: list(fieldElement, { allowEmpty: false }),\n\t\t\tdocumentation: \"The nonempty list of fields whose text is indexed.\"\n\t\t}],\n\t\tnamed: {\n\t\t\tfilter: {\n\t\t\t\ttype: optional(json()),\n\t\t\t\tdocumentation: \"A JSON partial-filter expression limiting which documents are indexed.\"\n\t\t\t},\n\t\t\tweights: {\n\t\t\t\ttype: optional(record(int({\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: 99999\n\t\t\t\t}))),\n\t\t\t\tdocumentation: \"Relative text-search weights by field, each from `1` through `99999`.\"\n\t\t\t},\n\t\t\tlanguage: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The default language for tokenization and stemming.\"\n\t\t\t},\n\t\t\tlanguageOverride: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The document field that overrides the text-index language.\"\n\t\t\t},\n\t\t\t...collationNamedArgs\n\t\t}\n\t});\n}\nfunction modelFieldElement(ctx) {\n\treturn indexFieldElement(Object.keys(ctx.model.fields));\n}\nfunction staticModelSpec(spec) {\n\treturn () => spec;\n}\nfunction staticFieldSpec(spec) {\n\treturn () => spec;\n}\nconst mongoAttributeSpecs = {\n\tmodel: {\n\t\tmap: staticModelSpec(mapModelSpec),\n\t\tdiscriminator: staticModelSpec(discriminatorModelSpec),\n\t\tbase: baseModelSpec,\n\t\tindex: (ctx) => buildIndexModelSpec(\"index\", modelFieldElement(ctx)),\n\t\tunique: (ctx) => buildIndexModelSpec(\"unique\", modelFieldElement(ctx)),\n\t\ttextIndex: (ctx) => buildTextIndexModelSpec(modelFieldElement(ctx))\n\t},\n\tfield: {\n\t\tid: staticFieldSpec(idFieldSpec),\n\t\tunique: staticFieldSpec(uniqueFieldSpec),\n\t\tmap: staticFieldSpec(mapFieldSpec),\n\t\trelation: staticFieldSpec(relationFieldSpec)\n\t}\n};\n//#endregion\n//#region src/psl-helpers.ts\n/** Storage collection name of a model that declares no `@@map`: the model name, verbatim. */\nfunction defaultCollectionName(modelName) {\n\treturn modelName;\n}\nfunction getAttribute(attributes, name) {\n\treturn attributes.find((attr) => attr.name === name);\n}\n//#endregion\n//#region src/interpreter.ts\n/**\n* Encode an authored enum value to its codec-encoded JSON form via the codec resolved by id from the\n* contract's codec lookup, so a non-identity `encodeJson` (permitted by the `mongoCodec` factory) is\n* respected. Matches the TS builder's `encodeEnumValue`: the lookup is always threaded in production,\n* and a codecId the lookup cannot resolve is a hard error — the enum uses a codec that is not part of\n* the contract's pack stack.\n*/\nfunction encodeEnumValue(value, codecId, codecLookup) {\n\tconst codec = codecLookup.get(codecId);\n\tif (!codec) throw errorEnumCodecNotInPackStack({ codecId });\n\treturn codec.encodeJson(value);\n}\n/**\n* Mongo's PSL surface binds the database from the connection string, so every\n* explicit namespace block is invalid, including `namespace unbound { … }`.\n*/\nfunction validateNamespaceBlocksForMongoTarget(input) {\n\tfor (const namespace of input.namespaces) for (const { node, span } of namespace.declarations) input.diagnostics.push({\n\t\tcode: \"PSL_UNSUPPORTED_NAMESPACE_BLOCK\",\n\t\tmessage: `Mongo does not support \\`namespace ${namespace.name} { … }\\` blocks (the database is bound by the connection string; declare models at the document top level instead).`,\n\t\t...diagnosticSource(input.sources, node.syntax).at(span)\n\t});\n}\nconst UNLOWERED_FIELD_ATTRIBUTE_HINTS = /* @__PURE__ */ new Map([[\"updatedAt\", \"Mongo lowers no automatic timestamp updates; delete the attribute and set the timestamp in application code.\"]]);\nfunction unsupportedFieldAttributeMessage(ownerName, fieldName, attributeName) {\n\tconst base = `Field \"${ownerName}.${fieldName}\" uses unsupported attribute \"@${attributeName}\"`;\n\tconst hint = UNLOWERED_FIELD_ATTRIBUTE_HINTS.get(attributeName);\n\treturn hint === void 0 ? base : `${base}. ${hint}`;\n}\nfunction reportUnknownAttributes(input) {\n\tconst { sources, diagnostics } = input;\n\tfor (const model of input.models) for (const attribute of model.attributes) {\n\t\tif (Object.hasOwn(mongoAttributeSpecs.model, attribute.name)) continue;\n\t\tdiagnostics.push({\n\t\t\tcode: \"PSL_UNSUPPORTED_MODEL_ATTRIBUTE\",\n\t\t\tmessage: `Model \"${model.name}\" uses unsupported attribute \"@@${attribute.name}\"`,\n\t\t\t...diagnosticSource(sources, model.node.syntax).at(attribute.span)\n\t\t});\n\t}\n\tfor (const owner of [...input.models, ...input.compositeTypes]) for (const field of Object.values(owner.fields)) for (const attribute of field.attributes) {\n\t\tif (Object.hasOwn(mongoAttributeSpecs.field, attribute.name)) continue;\n\t\tdiagnostics.push({\n\t\t\tcode: \"PSL_UNSUPPORTED_FIELD_ATTRIBUTE\",\n\t\t\tmessage: unsupportedFieldAttributeMessage(owner.name, field.name, attribute.name),\n\t\t\t...diagnosticSource(sources, field.node.syntax).at(attribute.span)\n\t\t});\n\t}\n}\nfunction relationNullabilityMismatchDiagnostic(modelName, field, sources) {\n\tconst source = diagnosticSource(sources, field.node.syntax);\n\tconst fieldLabel = `Relation field \"${modelName}.${field.name}\"`;\n\treturn {\n\t\tcode: \"PSL_RELATION_NULLABILITY_MISMATCH\",\n\t\tmessage: field.optional ? `${fieldLabel} is optional but every field in @relation(fields: [...]) is required. Make one of those fields optional with \"?\" or remove \"?\" from \"${field.name}\".` : `${fieldLabel} is required but a field in @relation(fields: [...]) is optional. Add \"?\" to \"${field.name}\" or make those fields required.`,\n\t\t...source.at(field.span)\n\t};\n}\nfunction resolveFieldMappings(input) {\n\tconst { model, specContext, sources, diagnostics } = input;\n\tconst pslNameToMapped = /* @__PURE__ */ new Map();\n\tfor (const field of Object.values(model.fields)) {\n\t\tconst mapNode = findFieldAttributeNode(field, \"map\");\n\t\tconst mapped = (mapNode ? interpretFieldAttribute({\n\t\t\tsymbols: specContext.symbols,\n\t\t\tnode: mapNode,\n\t\t\tspec: mongoAttributeSpecs.field.map({\n\t\t\t\t...specContext,\n\t\t\t\tfield\n\t\t\t}),\n\t\t\tmodel,\n\t\t\tfield,\n\t\t\tsources,\n\t\t\tdiagnostics\n\t\t})?.name : void 0) ?? field.name;\n\t\tpslNameToMapped.set(field.name, mapped);\n\t}\n\treturn { pslNameToMapped };\n}\nfunction resolveCollectionName(input) {\n\tconst { model, specContext, sources, diagnostics } = input;\n\tconst mapNode = findModelAttributeNode(model, \"map\");\n\treturn (mapNode ? interpretModelAttribute({\n\t\tsymbols: specContext.symbols,\n\t\tnode: mapNode,\n\t\tspec: mongoAttributeSpecs.model.map(specContext),\n\t\tmodel,\n\t\tsources,\n\t\tdiagnostics\n\t})?.name : void 0) ?? defaultCollectionName(model.name);\n}\nfunction mongoCrossRef(modelName) {\n\treturn crossRef(modelName, UNBOUND_NAMESPACE_ID);\n}\nfunction collectPolymorphismDeclarations(models, specContextFor, modelMetadataByName, sources, diagnostics) {\n\tconst discriminatorDeclarations = /* @__PURE__ */ new Map();\n\tconst baseDeclarations = /* @__PURE__ */ new Map();\n\tfor (const model of models) {\n\t\tconst specContext = specContextFor(model);\n\t\tconst discNode = findModelAttributeNode(model, \"discriminator\");\n\t\tif (discNode) {\n\t\t\tconst parsed = interpretModelAttribute({\n\t\t\t\tsymbols: specContext.symbols,\n\t\t\t\tnode: discNode,\n\t\t\t\tspec: mongoAttributeSpecs.model.discriminator(specContext),\n\t\t\t\tmodel,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t});\n\t\t\tif (parsed) {\n\t\t\t\tconst fieldName = parsed.field;\n\t\t\t\tconst discField = model.fields[fieldName];\n\t\t\t\tif (discField && discField.typeName !== \"String\") diagnostics.push({\n\t\t\t\t\tcode: \"PSL_INVALID_ATTRIBUTE_ARGUMENT\",\n\t\t\t\t\tmessage: `Discriminator field \"${fieldName}\" on model \"${model.name}\" must be of type String, but is \"${discField.typeName}\"`,\n\t\t\t\t\t...diagnosticSource(sources, discNode.syntax).at(nodePslSpan(discNode.syntax, sources))\n\t\t\t\t});\n\t\t\t\telse discriminatorDeclarations.set(model, {\n\t\t\t\t\tfieldName,\n\t\t\t\t\tsource: diagnosticSource(sources, discNode.syntax),\n\t\t\t\t\tspan: nodePslSpan(discNode.syntax, sources)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst baseNode = findModelAttributeNode(model, \"base\");\n\t\tif (baseNode) {\n\t\t\tconst parsed = interpretModelAttribute({\n\t\t\t\tsymbols: specContext.symbols,\n\t\t\t\tnode: baseNode,\n\t\t\t\tspec: mongoAttributeSpecs.model.base(),\n\t\t\t\tmodel,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t});\n\t\t\tif (parsed) {\n\t\t\t\tconst collectionName = modelMetadataByName.get(model.name)?.collectionName ?? defaultCollectionName(model.name);\n\t\t\t\tbaseDeclarations.set(model, {\n\t\t\t\t\tbase: parsed.base.declaration,\n\t\t\t\t\tvalue: parsed.value,\n\t\t\t\t\tcollectionName,\n\t\t\t\t\tsource: diagnosticSource(sources, baseNode.syntax),\n\t\t\t\t\tspan: nodePslSpan(baseNode.syntax, sources)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tdiscriminatorDeclarations,\n\t\tbaseDeclarations\n\t};\n}\nfunction resolvePolymorphism(input) {\n\tconst { discriminatorDeclarations, baseDeclarations, modelMetadataByName, indexSpans, modelIndexesByName, indexSources } = input;\n\tlet patched = input.models;\n\tlet roots = input.roots;\n\tlet collections = input.collections;\n\tconst diagnostics = createPslDiagnosticCollector(input.sources);\n\tfor (const [declaration, decl] of discriminatorDeclarations) {\n\t\tconst modelName = declaration.name;\n\t\tif (baseDeclarations.has(declaration)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_DISCRIMINATOR_AND_BASE\",\n\t\t\t\tmessage: `Model \"${modelName}\" cannot have both @@discriminator and @@base`,\n\t\t\t\t...decl.source.at(decl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst model = patched[modelName];\n\t\tif (!model) continue;\n\t\tconst mappedDiscriminatorField = modelMetadataByName.get(modelName)?.fieldMappings.pslNameToMapped.get(decl.fieldName) ?? decl.fieldName;\n\t\tif (!Object.hasOwn(model.fields, mappedDiscriminatorField)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_DISCRIMINATOR_FIELD_NOT_FOUND\",\n\t\t\t\tmessage: `Discriminator field \"${decl.fieldName}\" is not a field on model \"${modelName}\"`,\n\t\t\t\t...decl.source.at(decl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst variants = {};\n\t\tfor (const [variant, baseDecl] of baseDeclarations) {\n\t\t\tif (baseDecl.base !== declaration) continue;\n\t\t\tvariants[variant.name] = { value: baseDecl.value };\n\t\t}\n\t\tif (Object.keys(variants).length === 0) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_ORPHANED_DISCRIMINATOR\",\n\t\t\t\tmessage: `Model \"${modelName}\" has @@discriminator but no variant models declare @@base(${modelName}, ...)`,\n\t\t\t\t...decl.source.at(decl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tpatched = {\n\t\t\t...patched,\n\t\t\t[modelName]: {\n\t\t\t\t...model,\n\t\t\t\tdiscriminator: { field: mappedDiscriminatorField },\n\t\t\t\tvariants\n\t\t\t}\n\t\t};\n\t}\n\tfor (const [variant, baseDecl] of baseDeclarations) {\n\t\tconst variantName = variant.name;\n\t\tconst baseName = baseDecl.base.name;\n\t\tif (!discriminatorDeclarations.has(baseDecl.base)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_ORPHANED_BASE\",\n\t\t\t\tmessage: `Model \"${variantName}\" declares @@base(${baseName}, ...) but \"${baseName}\" has no @@discriminator`,\n\t\t\t\t...baseDecl.source.at(baseDecl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (discriminatorDeclarations.has(variant)) continue;\n\t\tconst baseModel = patched[baseName];\n\t\tif (getAttribute(variant.attributes, \"map\") !== void 0 && baseModel && baseDecl.collectionName !== baseModel.storage.collection) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_MONGO_VARIANT_SEPARATE_COLLECTION\",\n\t\t\t\tmessage: `Mongo variant \"${variantName}\" cannot use a different collection than its base \"${baseName}\". Mongo only supports single-collection polymorphism.`,\n\t\t\t\t...baseDecl.source.at(baseDecl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst baseCollection = baseModel?.storage.collection ?? baseDecl.collectionName;\n\t\tconst variantModel = patched[variantName];\n\t\tif (variantModel) patched = {\n\t\t\t...patched,\n\t\t\t[variantName]: {\n\t\t\t\t...variantModel,\n\t\t\t\tbase: mongoCrossRef(baseName),\n\t\t\t\tstorage: { collection: baseCollection }\n\t\t\t}\n\t\t};\n\t\tconst variantCollectionName = modelMetadataByName.get(variantName)?.collectionName ?? defaultCollectionName(variantName);\n\t\tif (roots[variantCollectionName]?.model === variantName) if (variantCollectionName === baseCollection && baseModel) roots = {\n\t\t\t...roots,\n\t\t\t[variantCollectionName]: mongoCrossRef(baseName)\n\t\t};\n\t\telse roots = Object.fromEntries(Object.entries(roots).filter(([key]) => key !== variantCollectionName));\n\t\tconst variantOwnIndexes = modelIndexesByName.get(variantName) ?? [];\n\t\tconst baseColl = collections[baseCollection];\n\t\tconst discriminatorField = patched[baseName]?.discriminator?.field;\n\t\tconst scopedVariantIndexes = [];\n\t\tif (discriminatorField) for (const idx of variantOwnIndexes) {\n\t\t\tconst result = applyPolymorphicScopeToMongoIndex(idx, {\n\t\t\t\tdiscriminatorField,\n\t\t\t\tdiscriminatorValue: baseDecl.value\n\t\t\t});\n\t\t\tif (result.kind === \"conflict\") {\n\t\t\t\tconst span = indexSpans.get(idx) ?? baseDecl.span;\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\t\t\tmessage: `Variant \"${variantName}\" index conflicts with discriminator scope: ${result.reason}`,\n\t\t\t\t\t...(indexSources.get(idx) ?? baseDecl.source).at(span)\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (result.index !== idx) indexSpans.set(result.index, indexSpans.get(idx) ?? baseDecl.span);\n\t\t\tscopedVariantIndexes.push(result.index);\n\t\t}\n\t\telse scopedVariantIndexes.push(...variantOwnIndexes);\n\t\tif (variantCollectionName !== baseCollection) {\n\t\t\tconst filtered = Object.fromEntries(Object.entries(collections).filter(([key]) => key !== variantCollectionName));\n\t\t\tif (scopedVariantIndexes.length > 0 && baseColl) {\n\t\t\t\tconst baseIndexes = collectionIndexes(baseColl);\n\t\t\t\tcollections = {\n\t\t\t\t\t...filtered,\n\t\t\t\t\t[baseCollection]: {\n\t\t\t\t\t\t...baseColl,\n\t\t\t\t\t\tindexes: [...baseIndexes, ...scopedVariantIndexes]\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else collections = filtered;\n\t\t} else if (baseColl) {\n\t\t\tconst existingIndexes = collectionIndexes(baseColl);\n\t\t\tconst variantIndexSet = new Set(variantOwnIndexes);\n\t\t\tconst withoutUnscopedVariants = existingIndexes.filter((idx) => !variantIndexSet.has(idx));\n\t\t\tconst mergedIndexes = [...withoutUnscopedVariants];\n\t\t\tfor (const idx of scopedVariantIndexes) {\n\t\t\t\tconst idxKey = canonicalJson(idx);\n\t\t\t\tif (!withoutUnscopedVariants.some((existing) => canonicalJson(existing) === idxKey)) mergedIndexes.push(idx);\n\t\t\t}\n\t\t\tif (mergedIndexes.length !== existingIndexes.length || mergedIndexes.some((idx, i) => idx !== existingIndexes[i])) {\n\t\t\t\tconst next = { ...baseColl };\n\t\t\t\tif (mergedIndexes.length > 0) next[\"indexes\"] = mergedIndexes;\n\t\t\t\telse delete next[\"indexes\"];\n\t\t\t\tcollections = {\n\t\t\t\t\t...collections,\n\t\t\t\t\t[baseCollection]: next\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tmodels: patched,\n\t\troots,\n\t\tcollections,\n\t\tdiagnostics\n\t};\n}\nfunction collectionIndexes(collection) {\n\treturn blindCast(collection[\"indexes\"] ?? []);\n}\nfunction canonicalJson(value) {\n\tif (Array.isArray(value)) return `[${value.map(canonicalJson).join(\",\")}]`;\n\tif (value && typeof value === \"object\") return `{${Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`).join(\",\")}}`;\n\treturn JSON.stringify(value);\n}\nfunction normalizeIndexField(element) {\n\tif (typeof element === \"string\") return {\n\t\tkind: \"field\",\n\t\tname: element\n\t};\n\tif (element.fn === \"wildcard\" && element.args[\"sort\"] === void 0) {\n\t\tconst scope = element.args[\"scope\"];\n\t\treturn typeof scope === \"string\" ? {\n\t\t\tkind: \"wildcard\",\n\t\t\tscope\n\t\t} : { kind: \"wildcard\" };\n\t}\n\tconst sort = element.args[\"sort\"];\n\treturn {\n\t\tkind: \"field\",\n\t\tname: element.fn,\n\t\tdirection: sort === \"Desc\" ? -1 : 1\n\t};\n}\nfunction buildCollationFromSpec(args) {\n\tconst locale = args.collationLocale;\n\tif (locale === void 0) return args.collationStrength !== void 0 || args.collationCaseLevel !== void 0 || args.collationCaseFirst !== void 0 || args.collationNumericOrdering !== void 0 || args.collationAlternate !== void 0 || args.collationMaxVariable !== void 0 || args.collationBackwards !== void 0 || args.collationNormalization !== void 0 ? null : void 0;\n\tconst collation = { locale };\n\tif (args.collationStrength !== void 0) collation.strength = args.collationStrength;\n\tif (args.collationCaseLevel !== void 0) collation.caseLevel = args.collationCaseLevel;\n\tif (args.collationCaseFirst !== void 0) collation.caseFirst = args.collationCaseFirst;\n\tif (args.collationNumericOrdering !== void 0) collation.numericOrdering = args.collationNumericOrdering;\n\tif (args.collationAlternate !== void 0) collation.alternate = args.collationAlternate;\n\tif (args.collationMaxVariable !== void 0) collation.maxVariable = args.collationMaxVariable;\n\tif (args.collationBackwards !== void 0) collation.backwards = args.collationBackwards;\n\tif (args.collationNormalization !== void 0) collation.normalization = args.collationNormalization;\n\treturn collation;\n}\nfunction resolveIndexKeys(parsedFields, defaultDirection, ctx) {\n\tconst wildcardCount = parsedFields.filter((field) => field.kind === \"wildcard\").length;\n\tif (wildcardCount > 1) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"An index can contain at most one wildcard() field\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tfor (const field of parsedFields) {\n\t\tconst fieldName = field.kind === \"wildcard\" ? field.scope : field.name;\n\t\tif (fieldName !== void 0 && !ctx.indexableFieldNames.has(fieldName)) {\n\t\t\tctx.diagnostics.push({\n\t\t\t\tcode: \"PSL_INDEX_FIELD_NOT_FOUND\",\n\t\t\t\tmessage: `Index on model \"${ctx.pslModel.name}\" references unknown field \"${fieldName}\"`,\n\t\t\t\t...ctx.source.at(ctx.span)\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t}\n\treturn {\n\t\tkeys: parsedFields.map((field) => {\n\t\t\tif (field.kind === \"wildcard\") {\n\t\t\t\tif (field.scope === void 0) return {\n\t\t\t\t\tfield: \"$**\",\n\t\t\t\t\tdirection: defaultDirection\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tfield: `${ctx.fieldMappings.pslNameToMapped.get(field.scope) ?? field.scope}.$**`,\n\t\t\t\t\tdirection: defaultDirection\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tfield: ctx.fieldMappings.pslNameToMapped.get(field.name) ?? field.name,\n\t\t\t\tdirection: field.direction ?? defaultDirection\n\t\t\t};\n\t\t}),\n\t\thasWildcard: wildcardCount === 1\n\t};\n}\nfunction buildProjection(include, exclude, hasWildcard, ctx) {\n\tif (include !== void 0 && exclude !== void 0) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"Cannot specify both include and exclude on the same index\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn null;\n\t}\n\tconst fields = include ?? exclude;\n\tif (fields === void 0) return void 0;\n\tif (!hasWildcard) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"include/exclude options are only valid when the index contains a wildcard() field\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn null;\n\t}\n\tif (fields.length === 0) return void 0;\n\tconst value = include === void 0 ? 0 : 1;\n\tconst projection = {};\n\tfor (const field of fields) projection[field] = value;\n\treturn projection;\n}\nfunction buildNormalIndex(parsed, unique, ctx) {\n\tconst parsedFields = parsed.fields.map(normalizeIndexField);\n\tif (parsedFields.length === 0) return void 0;\n\tconst defaultDirection = parsed.type ?? 1;\n\tconst resolved = resolveIndexKeys(parsedFields, defaultDirection, ctx);\n\tif (!resolved) return void 0;\n\tif (unique && resolved.hasWildcard) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"Unique indexes cannot use wildcard() fields\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tif (resolved.hasWildcard && typeof defaultDirection === \"string\" && [\n\t\t\"hashed\",\n\t\t\"2dsphere\",\n\t\t\"2d\"\n\t].includes(defaultDirection)) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: `wildcard() fields cannot be combined with type: ${defaultDirection}`,\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tif (defaultDirection === \"hashed\" && parsedFields.length > 1) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"Hashed indexes must have exactly one field\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tif (resolved.hasWildcard && parsed.expireAfterSeconds !== void 0) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"expireAfterSeconds cannot be combined with wildcard() fields\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tconst wildcardProjection = buildProjection(parsed.include, parsed.exclude, resolved.hasWildcard, ctx);\n\tif (wildcardProjection === null) return void 0;\n\tconst collation = buildCollationFromSpec(parsed);\n\tif (collation === null) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"collationLocale is required when using collation options\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\treturn new MongoIndex({\n\t\tkeys: resolved.keys,\n\t\t...unique && { unique: true },\n\t\t...parsed.sparse !== void 0 && { sparse: parsed.sparse },\n\t\t...parsed.expireAfterSeconds !== void 0 && { expireAfterSeconds: parsed.expireAfterSeconds },\n\t\t...parsed.filter !== void 0 && { partialFilterExpression: parsed.filter },\n\t\t...wildcardProjection !== void 0 && { wildcardProjection },\n\t\t...collation !== void 0 && { collation },\n\t\t...parsed.default_language !== void 0 && { default_language: parsed.default_language },\n\t\t...parsed.languageOverride !== void 0 && { language_override: parsed.languageOverride }\n\t});\n}\nfunction buildTextIndex(parsed, ctx) {\n\tconst parsedFields = parsed.fields.map(normalizeIndexField);\n\tif (parsedFields.length === 0) return void 0;\n\tconst resolved = resolveIndexKeys(parsedFields, \"text\", ctx);\n\tif (!resolved) return void 0;\n\tif (resolved.hasWildcard) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"wildcard() fields cannot be combined with type: hashed/2dsphere/2d or @@textIndex\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tconst collation = buildCollationFromSpec(parsed);\n\tif (collation === null) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"collationLocale is required when using collation options\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\treturn new MongoIndex({\n\t\tkeys: resolved.keys,\n\t\t...parsed.filter !== void 0 && { partialFilterExpression: parsed.filter },\n\t\t...collation !== void 0 && { collation },\n\t\t...ifDefined(\"weights\", parsed.weights),\n\t\t...parsed.language !== void 0 && { default_language: parsed.language },\n\t\t...parsed.languageOverride !== void 0 && { language_override: parsed.languageOverride }\n\t});\n}\nfunction collectIndexes(pslModel, specContext, fieldMappings, modelNames, sources, diagnostics, indexSpans, indexSources) {\n\tconst indexes = [];\n\tlet textIndexCount = 0;\n\tconst indexableFieldNames = /* @__PURE__ */ new Set();\n\tfor (const field of Object.values(pslModel.fields)) if (!modelNames.has(field.typeName)) indexableFieldNames.add(field.name);\n\tfor (const field of Object.values(pslModel.fields)) {\n\t\tif (modelNames.has(field.typeName)) continue;\n\t\tconst uniqueNode = findFieldAttributeNode(field, \"unique\");\n\t\tif (!uniqueNode) continue;\n\t\tif (interpretFieldAttribute({\n\t\t\tsymbols: specContext.symbols,\n\t\t\tnode: uniqueNode,\n\t\t\tspec: mongoAttributeSpecs.field.unique({\n\t\t\t\t...specContext,\n\t\t\t\tfield\n\t\t\t}),\n\t\t\tmodel: pslModel,\n\t\t\tfield,\n\t\t\tsources,\n\t\t\tdiagnostics\n\t\t}) === void 0) continue;\n\t\tconst fieldUniqueIndex = new MongoIndex({\n\t\t\tkeys: [{\n\t\t\t\tfield: fieldMappings.pslNameToMapped.get(field.name) ?? field.name,\n\t\t\t\tdirection: 1\n\t\t\t}],\n\t\t\tunique: true\n\t\t});\n\t\tindexes.push(fieldUniqueIndex);\n\t\tindexSpans.set(fieldUniqueIndex, nodePslSpan(uniqueNode.syntax, sources));\n\t\tindexSources.set(fieldUniqueIndex, diagnosticSource(sources, uniqueNode.syntax));\n\t}\n\tconst attributeNodes = Array.from(pslModel.node.attributes());\n\tfor (const [attrIndex, attr] of pslModel.attributes.entries()) {\n\t\tif (attr.name !== \"index\" && attr.name !== \"unique\" && attr.name !== \"textIndex\") continue;\n\t\tconst node = attributeNodes[attrIndex];\n\t\tif (!node) continue;\n\t\tconst source = diagnosticSource(sources, node.syntax);\n\t\tconst ctx = {\n\t\t\tpslModel,\n\t\t\tfieldMappings,\n\t\t\tindexableFieldNames,\n\t\t\tsource,\n\t\t\tspan: attr.span,\n\t\t\tdiagnostics\n\t\t};\n\t\tlet index;\n\t\tif (attr.name === \"textIndex\") {\n\t\t\tconst parsed = interpretModelAttribute({\n\t\t\t\tsymbols: specContext.symbols,\n\t\t\t\tnode,\n\t\t\t\tspec: mongoAttributeSpecs.model.textIndex(specContext),\n\t\t\t\tmodel: pslModel,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t});\n\t\t\tif (!parsed || parsed.fields.length === 0) continue;\n\t\t\ttextIndexCount++;\n\t\t\tif (textIndexCount > 1) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\t\t\tmessage: `Only one @@textIndex is allowed per collection (model \"${pslModel.name}\")`,\n\t\t\t\t\t...source.at(attr.span)\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tindex = buildTextIndex(parsed, ctx);\n\t\t} else {\n\t\t\tconst unique = attr.name === \"unique\";\n\t\t\tconst parsed = interpretModelAttribute({\n\t\t\t\tsymbols: specContext.symbols,\n\t\t\t\tnode,\n\t\t\t\tspec: unique ? mongoAttributeSpecs.model.unique(specContext) : mongoAttributeSpecs.model.index(specContext),\n\t\t\t\tmodel: pslModel,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t});\n\t\t\tif (!parsed) continue;\n\t\t\tindex = buildNormalIndex(parsed, unique, ctx);\n\t\t}\n\t\tif (!index) continue;\n\t\tindexes.push(index);\n\t\tindexSpans.set(index, attr.span);\n\t\tindexSources.set(index, source);\n\t}\n\treturn indexes;\n}\nfunction isRelationField(field, modelNames) {\n\treturn modelNames.has(field.typeName);\n}\nconst MONGO_OBJECT_ID_PSL_TYPE = \"ObjectId\";\nfunction resolveFieldCodecId(field, scalarTypeCodecIds) {\n\treturn scalarTypeCodecIds.get(field.typeName);\n}\nfunction resolveNonRelationField(field, ownerName, compositeTypeNames, scalarTypeCodecIds, codecIdByEnumName, sources, diagnostics) {\n\tif (compositeTypeNames.has(field.typeName)) {\n\t\tconst result = {\n\t\t\ttype: {\n\t\t\t\tkind: \"valueObject\",\n\t\t\t\tname: field.typeName\n\t\t\t},\n\t\t\tnullable: field.optional\n\t\t};\n\t\treturn field.list ? {\n\t\t\t...result,\n\t\t\tmany: true\n\t\t} : result;\n\t}\n\tconst enumCodecId = codecIdByEnumName.get(field.typeName);\n\tif (enumCodecId !== void 0) {\n\t\tconst valueSet = {\n\t\t\tplane: \"domain\",\n\t\t\tentityKind: \"enum\",\n\t\t\tnamespaceId: UNBOUND_NAMESPACE_ID,\n\t\t\tentityName: field.typeName\n\t\t};\n\t\tconst result = {\n\t\t\ttype: {\n\t\t\t\tkind: \"scalar\",\n\t\t\t\tcodecId: enumCodecId\n\t\t\t},\n\t\t\tnullable: field.optional,\n\t\t\tvalueSet\n\t\t};\n\t\treturn field.list ? {\n\t\t\t...result,\n\t\t\tmany: true\n\t\t} : result;\n\t}\n\tif (field.malformedType) return;\n\tconst codecId = resolveFieldCodecId(field, scalarTypeCodecIds);\n\tif (!codecId) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"PSL_UNSUPPORTED_FIELD_TYPE\",\n\t\t\tmessage: `Field \"${ownerName}.${field.name}\" type \"${field.typeName}\" is not supported in Mongo PSL interpreter`,\n\t\t\t...diagnosticSource(sources, field.node.syntax).at(field.span)\n\t\t});\n\t\treturn;\n\t}\n\tconst result = {\n\t\ttype: {\n\t\t\tkind: \"scalar\",\n\t\t\tcodecId\n\t\t},\n\t\tnullable: field.optional\n\t};\n\treturn field.list ? {\n\t\t...result,\n\t\tmany: true\n\t} : result;\n}\nfunction processEnumDeclarations(input) {\n\tconst builtEnums = {};\n\tif (input.enumSymbols.length === 0) return builtEnums;\n\tconst enumDescriptor = input.authoringContributions?.entityTypes?.[\"enum\"] !== void 0 && isAuthoringEntityTypeDescriptor(input.authoringContributions.entityTypes[\"enum\"]) ? input.authoringContributions.entityTypes[\"enum\"] : void 0;\n\tif (!enumDescriptor) {\n\t\tfor (const enumSymbol of input.enumSymbols) {\n\t\t\tconst source = diagnosticSource(input.sources, enumSymbol.node.syntax);\n\t\t\tinput.diagnostics.push({\n\t\t\t\tcode: \"PSL_ENUM_MISSING_FACTORY\",\n\t\t\t\tmessage: `enum \"${enumSymbol.block.name}\" requires an \"enum\" entityType factory in the active authoring contributions`,\n\t\t\t\t...source.at(enumSymbol.span)\n\t\t\t});\n\t\t}\n\t\treturn builtEnums;\n\t}\n\tfor (const enumSymbol of input.enumSymbols) {\n\t\tconst sourceFile = input.sources.sourceFileFor(enumSymbol.node.syntax);\n\t\tconst decl = enumSymbol.block;\n\t\tconst handle = instantiateAuthoringEntityType(\"enum\", enumDescriptor, [decl], {\n\t\t\t...input.entityContext,\n\t\t\tsourceId: sourceFile.filename\n\t\t});\n\t\tif (handle === void 0 || handle === null) continue;\n\t\tbuiltEnums[decl.name] = {\n\t\t\tcodecId: handle.codecId,\n\t\t\tmembers: handle.enumMembers.map((m) => ({\n\t\t\t\tname: m.name,\n\t\t\t\tvalue: blindCast(m.value)\n\t\t\t}))\n\t\t};\n\t}\n\treturn builtEnums;\n}\nfunction interpretPslDocumentToMongoContract(input) {\n\tconst { symbolTable, sources, scalarTypeCodecIds, codecLookup } = input;\n\tconst diagnostics = createPslDiagnosticCollector(sources);\n\tconst topLevel = symbolTable.topLevel;\n\tvalidateNamespaceBlocksForMongoTarget({\n\t\tnamespaces: Object.values(topLevel.namespaces),\n\t\tsources,\n\t\tdiagnostics\n\t});\n\tconst allModels = Object.values(topLevel.models);\n\tconst allCompositeTypes = Object.values(topLevel.compositeTypes);\n\tconst modelNames = new Set(allModels.map((m) => m.name));\n\tconst compositeTypeNames = new Set(allCompositeTypes.map((ct) => ct.name));\n\treportUnknownAttributes({\n\t\tmodels: allModels,\n\t\tcompositeTypes: allCompositeTypes,\n\t\tsources,\n\t\tdiagnostics\n\t});\n\tconst specContextFor = (model) => ({\n\t\tsymbols: symbolTable,\n\t\tmodel,\n\t\tcontrolMutationDefaults: input.controlMutationDefaults\n\t});\n\tconst modelMetadataByName = /* @__PURE__ */ new Map();\n\tfor (const model of allModels) {\n\t\tconst specContext = specContextFor(model);\n\t\tmodelMetadataByName.set(model.name, {\n\t\t\tcollectionName: resolveCollectionName({\n\t\t\t\tmodel,\n\t\t\t\tspecContext,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t}),\n\t\t\tfieldMappings: resolveFieldMappings({\n\t\t\t\tmodel,\n\t\t\t\tspecContext,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t})\n\t\t});\n\t}\n\tconst builtEnums = processEnumDeclarations({\n\t\tenumSymbols: Object.values(topLevel.blocks).filter((b) => b.keyword === \"enum\"),\n\t\tsources,\n\t\tauthoringContributions: input.authoringContributions,\n\t\tentityContext: {\n\t\t\tfamily: \"mongo\",\n\t\t\ttarget: \"mongo\",\n\t\t\t...ifDefined(\"enumInferenceCodecs\", input.enumInferenceCodecs),\n\t\t\t...ifDefined(\"codecLookup\", codecLookup),\n\t\t\tdiagnostics: { push: (d) => {\n\t\t\t\tdiagnostics.pushExternal(blindCast(d));\n\t\t\t} }\n\t\t},\n\t\tdiagnostics\n\t});\n\tconst codecIdByEnumName = new Map(Object.entries(builtEnums).map(([name, e]) => [name, e.codecId]));\n\tconst models = {};\n\tconst collections = {};\n\tconst roots = {};\n\tconst allFkRelations = [];\n\tconst indexSpans = /* @__PURE__ */ new Map();\n\tconst indexSources = /* @__PURE__ */ new Map();\n\tconst modelIndexesByName = /* @__PURE__ */ new Map();\n\tconst backrelationCandidates = [];\n\tconst invalidFkPairings = [];\n\tfor (const pslModel of allModels) {\n\t\tconst modelSource = diagnosticSource(sources, pslModel.node.syntax);\n\t\tconst metadata = modelMetadataByName.get(pslModel.name);\n\t\tif (!metadata) continue;\n\t\tconst { collectionName, fieldMappings } = metadata;\n\t\tconst specContext = specContextFor(pslModel);\n\t\tconst fields = {};\n\t\tconst relations = {};\n\t\tfor (const field of Object.values(pslModel.fields)) {\n\t\t\tif (isRelationField(field, modelNames)) {\n\t\t\t\tconst relationNode = findFieldAttributeNode(field, \"relation\");\n\t\t\t\tconst relation = relationNode ? interpretFieldAttribute({\n\t\t\t\t\tsymbols: specContext.symbols,\n\t\t\t\t\tnode: relationNode,\n\t\t\t\t\tspec: mongoAttributeSpecs.field.relation({\n\t\t\t\t\t\t...specContext,\n\t\t\t\t\t\tfield\n\t\t\t\t\t}),\n\t\t\t\t\tmodel: pslModel,\n\t\t\t\t\tfield,\n\t\t\t\t\tsources,\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tresolveReferencedModel: () => allModels.find((m) => m.name === field.typeName)\n\t\t\t\t}) : void 0;\n\t\t\t\tif (field.list || !(relation?.fields && relation?.references)) {\n\t\t\t\t\tbackrelationCandidates.push({\n\t\t\t\t\t\tmodelName: pslModel.name,\n\t\t\t\t\t\tfieldName: field.name,\n\t\t\t\t\t\ttargetModelName: field.typeName,\n\t\t\t\t\t\t...ifDefined(\"relationName\", relation?.name),\n\t\t\t\t\t\tcardinality: field.list ? \"1:N\" : \"1:1\",\n\t\t\t\t\t\tfield\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (relation?.fields && relation?.references) {\n\t\t\t\t\tif (resolveToOneRelationNullable({\n\t\t\t\t\t\tdeclaredNullable: field.optional,\n\t\t\t\t\t\tlocalFieldNullability: relation.fields.map((localFieldName) => pslModel.fields[localFieldName]?.optional === true),\n\t\t\t\t\t\townsReference: true\n\t\t\t\t\t}).contradiction !== void 0) {\n\t\t\t\t\t\tdiagnostics.push(relationNullabilityMismatchDiagnostic(pslModel.name, field, sources));\n\t\t\t\t\t\tinvalidFkPairings.push({\n\t\t\t\t\t\t\tpairKey: fkRelationPairKey(pslModel.name, field.typeName),\n\t\t\t\t\t\t\t...ifDefined(\"relationName\", relation.name)\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst localMapped = relation.fields.map((f) => fieldMappings.pslNameToMapped.get(f) ?? f);\n\t\t\t\t\tconst targetFieldMappings = modelMetadataByName.get(field.typeName)?.fieldMappings;\n\t\t\t\t\tconst targetMapped = relation.references.map((f) => targetFieldMappings?.pslNameToMapped.get(f) ?? f);\n\t\t\t\t\trelations[field.name] = {\n\t\t\t\t\t\tto: mongoCrossRef(field.typeName),\n\t\t\t\t\t\tcardinality: \"N:1\",\n\t\t\t\t\t\tnullable: field.optional,\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tlocalFields: localMapped,\n\t\t\t\t\t\t\ttargetFields: targetMapped\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tallFkRelations.push({\n\t\t\t\t\t\tdeclaringModel: pslModel.name,\n\t\t\t\t\t\tfieldName: field.name,\n\t\t\t\t\t\ttargetModel: field.typeName,\n\t\t\t\t\t\t...ifDefined(\"relationName\", relation.name),\n\t\t\t\t\t\tlocalFields: localMapped,\n\t\t\t\t\t\ttargetFields: targetMapped\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst resolved = resolveNonRelationField(field, pslModel.name, compositeTypeNames, scalarTypeCodecIds, codecIdByEnumName, sources, diagnostics);\n\t\t\tif (!resolved) continue;\n\t\t\tconst mappedName = fieldMappings.pslNameToMapped.get(field.name) ?? field.name;\n\t\t\tfields[mappedName] = resolved;\n\t\t}\n\t\tconst isVariantModel = pslModel.attributes.some((attr) => attr.name === \"base\");\n\t\tconst hasIdField = Object.values(pslModel.fields).filter((field) => {\n\t\t\tconst idNode = findFieldAttributeNode(field, \"id\");\n\t\t\tif (!idNode) return false;\n\t\t\treturn interpretFieldAttribute({\n\t\t\t\tsymbols: specContext.symbols,\n\t\t\t\tnode: idNode,\n\t\t\t\tspec: mongoAttributeSpecs.field.id({\n\t\t\t\t\t...specContext,\n\t\t\t\t\tfield\n\t\t\t\t}),\n\t\t\t\tmodel: pslModel,\n\t\t\t\tfield,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t}) !== void 0;\n\t\t}).length > 0;\n\t\tif (!isVariantModel) if (!hasIdField) diagnostics.pushUnlocated({\n\t\t\tcode: \"PSL_MISSING_ID_FIELD\",\n\t\t\tmessage: `Model \"${pslModel.name}\" has no field with @id attribute. Every model must have exactly one @id field.`,\n\t\t\t...modelSource.at()\n\t\t});\n\t\telse {\n\t\t\tconst objectIdCodecId = scalarTypeCodecIds.get(MONGO_OBJECT_ID_PSL_TYPE);\n\t\t\tconst idField = fields[\"_id\"];\n\t\t\tif (!(idField !== void 0 && idField.type.kind === \"scalar\" && objectIdCodecId !== void 0 && idField.type.codecId === objectIdCodecId)) diagnostics.pushUnlocated({\n\t\t\t\tcode: \"PSL_MONGO_ID_REQUIRED\",\n\t\t\t\tmessage: `Model \"${pslModel.name}\" must declare an _id field of type ObjectId (e.g. \\`id ObjectId @id @map(\"_id\")\\`).`,\n\t\t\t\t...modelSource.at()\n\t\t\t});\n\t\t}\n\t\tmodels[pslModel.name] = {\n\t\t\tfields,\n\t\t\trelations,\n\t\t\tstorage: { collection: collectionName }\n\t\t};\n\t\tconst modelIndexes = collectIndexes(pslModel, specContext, fieldMappings, modelNames, sources, diagnostics, indexSpans, indexSources);\n\t\tmodelIndexesByName.set(pslModel.name, modelIndexes);\n\t\tconst existingColl = collections[collectionName];\n\t\tif (existingColl && modelIndexes.length > 0) collections[collectionName] = { indexes: [...collectionIndexes(existingColl), ...modelIndexes] };\n\t\telse if (!existingColl) collections[collectionName] = modelIndexes.length > 0 ? { indexes: modelIndexes } : {};\n\t\troots[collectionName] = mongoCrossRef(pslModel.name);\n\t}\n\tconst valueObjects = {};\n\tfor (const compositeType of allCompositeTypes) {\n\t\tconst fields = {};\n\t\tfor (const field of Object.values(compositeType.fields)) {\n\t\t\tconst resolved = resolveNonRelationField(field, compositeType.name, compositeTypeNames, scalarTypeCodecIds, codecIdByEnumName, sources, diagnostics);\n\t\t\tif (!resolved) continue;\n\t\t\tfields[field.name] = resolved;\n\t\t}\n\t\tvalueObjects[compositeType.name] = { fields };\n\t}\n\tconst fkRelationsByPair = /* @__PURE__ */ new Map();\n\tfor (const fk of allFkRelations) {\n\t\tconst key = fkRelationPairKey(fk.declaringModel, fk.targetModel);\n\t\tconst existing = fkRelationsByPair.get(key);\n\t\tif (existing) existing.push(fk);\n\t\telse fkRelationsByPair.set(key, [fk]);\n\t}\n\tfor (const candidate of backrelationCandidates) {\n\t\tconst candidateSource = diagnosticSource(sources, candidate.field.node.syntax);\n\t\tconst pairKey = fkRelationPairKey(candidate.targetModelName, candidate.modelName);\n\t\tconst pairMatches = fkRelationsByPair.get(pairKey) ?? [];\n\t\tconst matches = candidate.relationName ? pairMatches.filter((r) => r.relationName === candidate.relationName) : [...pairMatches];\n\t\tif (matches.length === 0) {\n\t\t\tif (consumeInvalidFkPairing(candidate, pairKey, invalidFkPairings)) continue;\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_ORPHANED_BACKRELATION\",\n\t\t\t\tmessage: `Backrelation list field \"${candidate.modelName}.${candidate.fieldName}\" has no matching FK-side relation on model \"${candidate.targetModelName}\". Add @relation(fields: [...], references: [...]) on the FK-side relation or use an explicit join model for many-to-many.`,\n\t\t\t\t...candidateSource.at(candidate.field.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (matches.length > 1) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_AMBIGUOUS_BACKRELATION\",\n\t\t\t\tmessage: `Backrelation list field \"${candidate.modelName}.${candidate.fieldName}\" matches multiple FK-side relations on model \"${candidate.targetModelName}\". Add @relation(\"...\") to both sides to disambiguate.`,\n\t\t\t\t...candidateSource.at(candidate.field.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst fk = matches[0];\n\t\tif (!fk) continue;\n\t\tconst modelEntry = models[candidate.modelName];\n\t\tif (!modelEntry) continue;\n\t\tif (candidate.cardinality === \"1:1\" && !candidate.field.optional) diagnostics.push(requiredOneToOneBackrelationDiagnostic({\n\t\t\tmodelName: candidate.modelName,\n\t\t\tfield: candidate.field,\n\t\t\ttargetModelName: candidate.targetModelName,\n\t\t\tsources,\n\t\t\trecordNoun: \"document\"\n\t\t}));\n\t\tmodelEntry.relations[candidate.fieldName] = {\n\t\t\tto: mongoCrossRef(candidate.targetModelName),\n\t\t\t...candidate.cardinality === \"1:N\" ? { cardinality: \"1:N\" } : {\n\t\t\t\tcardinality: \"1:1\",\n\t\t\t\tnullable: true\n\t\t\t},\n\t\t\ton: {\n\t\t\t\tlocalFields: fk.targetFields,\n\t\t\t\ttargetFields: fk.localFields\n\t\t\t}\n\t\t};\n\t}\n\tconst { discriminatorDeclarations, baseDeclarations } = collectPolymorphismDeclarations(allModels, specContextFor, modelMetadataByName, sources, diagnostics);\n\tconst polyResult = resolvePolymorphism({\n\t\tsources,\n\t\tmodels,\n\t\troots,\n\t\tcollections,\n\t\tdiscriminatorDeclarations,\n\t\tbaseDeclarations,\n\t\tindexSpans,\n\t\tmodelIndexesByName,\n\t\tmodelMetadataByName,\n\t\tindexSources\n\t});\n\tif (diagnostics.length > 0 || polyResult.diagnostics.length > 0 || (input.seedDiagnostics?.length ?? 0) > 0) return notOk({\n\t\tsummary: \"PSL to Mongo contract interpretation failed\",\n\t\tdiagnostics: [\n\t\t\t...input.seedDiagnostics ?? [],\n\t\t\t...diagnostics.toExternal(),\n\t\t\t...polyResult.diagnostics.toExternal()\n\t\t]\n\t});\n\tconst resolvedModels = polyResult.models;\n\tconst resolvedCollections = polyResult.collections;\n\tconst storageValueSets = {};\n\tconst enumEntries = Object.entries(builtEnums);\n\tif (enumEntries.length > 0) {\n\t\tassertDefined(codecLookup, \"Mongo PSL interpretation requires a codec lookup to encode enum values\");\n\t\tfor (const [enumName, builtEnum] of enumEntries) storageValueSets[enumName] = {\n\t\t\tkind: \"valueSet\",\n\t\t\tvalues: builtEnum.members.map((m) => encodeEnumValue(m.value, builtEnum.codecId, codecLookup))\n\t\t};\n\t}\n\tfor (const [, modelEntry] of Object.entries(resolvedModels)) {\n\t\tif (modelEntry.base) continue;\n\t\tconst coll = resolvedCollections[modelEntry.storage.collection];\n\t\tif (!coll) continue;\n\t\tif (modelEntry.discriminator && modelEntry.variants) {\n\t\t\tconst variantEntries = Object.entries(modelEntry.variants).map(([variantName, { value }]) => ({\n\t\t\t\tdiscriminatorValue: value,\n\t\t\t\tfields: resolvedModels[variantName]?.fields ?? {}\n\t\t\t}));\n\t\t\tcoll[\"validator\"] = derivePolymorphicJsonSchema(modelEntry.fields, modelEntry.discriminator.field, variantEntries, valueObjects, codecLookup, storageValueSets);\n\t\t} else coll[\"validator\"] = deriveJsonSchema(modelEntry.fields, valueObjects, codecLookup, storageValueSets);\n\t}\n\tconst target = \"mongo\";\n\tconst targetFamily = \"mongo\";\n\tconst collectionInputs = {};\n\tfor (const [name, coll] of Object.entries(resolvedCollections)) {\n\t\tconst raw = {};\n\t\tif (coll[\"indexes\"] != null) raw[\"indexes\"] = coll[\"indexes\"];\n\t\tif (coll[\"validator\"] != null) raw[\"validator\"] = coll[\"validator\"];\n\t\tif (coll[\"options\"] != null) raw[\"options\"] = coll[\"options\"];\n\t\tcollectionInputs[name] = blindCast(raw);\n\t}\n\tconst unboundNamespace = buildMongoNamespace({\n\t\tid: UNBOUND_NAMESPACE_ID,\n\t\tentries: {\n\t\t\tcollection: collectionInputs,\n\t\t\t...Object.keys(storageValueSets).length > 0 ? { valueSet: storageValueSets } : {}\n\t\t}\n\t});\n\tconst storage = blindCast(new MongoStorage({\n\t\tstorageHash: computeStorageHash({\n\t\t\ttarget,\n\t\t\ttargetFamily,\n\t\t\tstorage: { namespaces: { [UNBOUND_NAMESPACE_ID]: {\n\t\t\t\tid: UNBOUND_NAMESPACE_ID,\n\t\t\t\tentries: {\n\t\t\t\t\tcollection: unboundNamespace.entries.collection,\n\t\t\t\t\t...unboundNamespace.entries.valueSet !== void 0 ? { valueSet: unboundNamespace.entries.valueSet } : {}\n\t\t\t\t}\n\t\t\t} } },\n\t\t\t...mongoContractCanonicalizationHooks\n\t\t}),\n\t\tnamespaces: { [UNBOUND_NAMESPACE_ID]: unboundNamespace }\n\t}));\n\tconst capabilities = {};\n\tconst hasEnums = Object.keys(builtEnums).length > 0;\n\treturn ok({\n\t\ttargetFamily,\n\t\ttarget,\n\t\troots: polyResult.roots,\n\t\tdomain: { namespaces: { [UNBOUND_NAMESPACE_ID]: {\n\t\t\tmodels: polyResult.models,\n\t\t\t...Object.keys(valueObjects).length > 0 ? { valueObjects } : {},\n\t\t\t...hasEnums ? { enum: builtEnums } : {}\n\t\t} } },\n\t\tstorage,\n\t\textensions: {},\n\t\tcapabilities,\n\t\tprofileHash: computeProfileHash({\n\t\t\ttarget,\n\t\t\ttargetFamily,\n\t\t\tcapabilities\n\t\t}),\n\t\tmeta: {}\n\t});\n}\n//#endregion\nexport { derivePolymorphicJsonSchema as i, mongoAttributeSpecs as n, deriveJsonSchema as r, interpretPslDocumentToMongoContract as t };\n\n//# sourceMappingURL=interpreter-BsGn9AR-.mjs.map"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prisma/orm-family-mongo",
|
|
3
|
-
"version": "8.0.0-rc.11-dev.
|
|
3
|
+
"version": "8.0.0-rc.11-dev.44",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -9,29 +9,29 @@
|
|
|
9
9
|
"dist"
|
|
10
10
|
],
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@prisma/orm-framework": "8.0.0-rc.11-dev.
|
|
13
|
-
"@prisma/orm-toolchain": "8.0.0-rc.11-dev.
|
|
12
|
+
"@prisma/orm-framework": "8.0.0-rc.11-dev.44",
|
|
13
|
+
"@prisma/orm-toolchain": "8.0.0-rc.11-dev.44",
|
|
14
14
|
"arktype": "^2.2.2",
|
|
15
15
|
"mongodb": "^7.4.0",
|
|
16
16
|
"pathe": "^2.0.3"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@internal/family-mongo": "8.0.0-rc.11-dev.
|
|
20
|
-
"@internal/mongo-codec": "8.0.0-rc.11-dev.
|
|
21
|
-
"@internal/mongo-contract": "8.0.0-rc.11-dev.
|
|
22
|
-
"@internal/mongo-contract-psl": "8.0.0-rc.11-dev.
|
|
23
|
-
"@internal/mongo-contract-ts": "8.0.0-rc.11-dev.
|
|
24
|
-
"@internal/mongo-emitter": "8.0.0-rc.11-dev.
|
|
25
|
-
"@internal/mongo-lowering": "8.0.0-rc.11-dev.
|
|
26
|
-
"@internal/mongo-orm": "8.0.0-rc.11-dev.
|
|
27
|
-
"@internal/mongo-query-ast": "8.0.0-rc.11-dev.
|
|
28
|
-
"@internal/mongo-query-builder": "8.0.0-rc.11-dev.
|
|
29
|
-
"@internal/mongo-runtime": "8.0.0-rc.11-dev.
|
|
30
|
-
"@internal/mongo-schema-ir": "8.0.0-rc.11-dev.
|
|
31
|
-
"@internal/mongo-value": "8.0.0-rc.11-dev.
|
|
32
|
-
"@internal/mongo-wire": "8.0.0-rc.11-dev.
|
|
33
|
-
"@repo/tsconfig": "8.0.0-rc.11-dev.
|
|
34
|
-
"@repo/tsdown": "8.0.0-rc.11-dev.
|
|
19
|
+
"@internal/family-mongo": "8.0.0-rc.11-dev.44",
|
|
20
|
+
"@internal/mongo-codec": "8.0.0-rc.11-dev.44",
|
|
21
|
+
"@internal/mongo-contract": "8.0.0-rc.11-dev.44",
|
|
22
|
+
"@internal/mongo-contract-psl": "8.0.0-rc.11-dev.44",
|
|
23
|
+
"@internal/mongo-contract-ts": "8.0.0-rc.11-dev.44",
|
|
24
|
+
"@internal/mongo-emitter": "8.0.0-rc.11-dev.44",
|
|
25
|
+
"@internal/mongo-lowering": "8.0.0-rc.11-dev.44",
|
|
26
|
+
"@internal/mongo-orm": "8.0.0-rc.11-dev.44",
|
|
27
|
+
"@internal/mongo-query-ast": "8.0.0-rc.11-dev.44",
|
|
28
|
+
"@internal/mongo-query-builder": "8.0.0-rc.11-dev.44",
|
|
29
|
+
"@internal/mongo-runtime": "8.0.0-rc.11-dev.44",
|
|
30
|
+
"@internal/mongo-schema-ir": "8.0.0-rc.11-dev.44",
|
|
31
|
+
"@internal/mongo-value": "8.0.0-rc.11-dev.44",
|
|
32
|
+
"@internal/mongo-wire": "8.0.0-rc.11-dev.44",
|
|
33
|
+
"@repo/tsconfig": "8.0.0-rc.11-dev.44",
|
|
34
|
+
"@repo/tsdown": "8.0.0-rc.11-dev.44",
|
|
35
35
|
"tsdown": "0.22.14",
|
|
36
36
|
"typescript": "5.9.3"
|
|
37
37
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interpreter-ConSw3cr-CzhkBY4W.mjs","names":[],"sources":["../../../../2-mongo-family/2-authoring/contract-psl/dist/interpreter-ConSw3cr.mjs"],"sourcesContent":["import { MongoIndex, MongoStorage, MongoValidator, applyPolymorphicScopeToMongoIndex, buildMongoNamespace } from \"@internal/mongo-contract\";\nimport { computeProfileHash, computeStorageHash } from \"@internal/contract/hashing\";\nimport { crossRef } from \"@internal/contract/types\";\nimport { resolveToOneRelationNullable } from \"@internal/contract-authoring\";\nimport { errorEnumCodecNotInPackStack } from \"@internal/errors/control\";\nimport { instantiateAuthoringEntityType, isAuthoringEntityTypeDescriptor } from \"@internal/framework-components/authoring\";\nimport { UNBOUND_NAMESPACE_ID } from \"@internal/framework-components/ir\";\nimport { mongoContractCanonicalizationHooks } from \"@internal/mongo-contract/canonicalization-hooks\";\nimport { bool, createPslDiagnosticCollector, diagnosticSource, entityRef, fieldAttribute, fieldRef, funcCall, identifier, int, interpretAttribute, json, list, modelAttribute, nodePslSpan, num, oneOf, optional, record, referencedFieldRef, str } from \"@internal/psl-parser\";\nimport { consumeInvalidFkPairing, fkRelationPairKey, requiredOneToOneBackrelationDiagnostic } from \"@internal/psl-parser/interpret\";\nimport { assertDefined } from \"@internal/utils/assertions\";\nimport { blindCast } from \"@internal/utils/casts\";\nimport { ifDefined } from \"@internal/utils/defined\";\nimport { notOk, ok } from \"@internal/utils/result\";\n//#region src/derive-json-schema.ts\nfunction resolveBsonType(codecId, codecLookup) {\n\treturn codecLookup?.targetTypesFor(codecId)?.[0];\n}\nfunction fieldToBsonSchema(field, valueObjects, codecLookup, valueSets) {\n\tif (field.type.kind === \"scalar\") {\n\t\tconst bsonType = resolveBsonType(field.type.codecId, codecLookup);\n\t\tif (!bsonType) return void 0;\n\t\tconst enumValues = field.valueSet !== void 0 ? valueSets?.[field.valueSet.entityName]?.values ?? null : null;\n\t\tif (\"many\" in field && field.many) {\n\t\t\tconst items = { bsonType };\n\t\t\tif (enumValues) items[\"enum\"] = enumValues;\n\t\t\treturn {\n\t\t\t\tbsonType: \"array\",\n\t\t\t\titems\n\t\t\t};\n\t\t}\n\t\tif (field.nullable) {\n\t\t\tconst s = { bsonType: [\"null\", bsonType] };\n\t\t\tif (enumValues) s[\"enum\"] = [...enumValues, null];\n\t\t\treturn s;\n\t\t}\n\t\tconst s = { bsonType };\n\t\tif (enumValues) s[\"enum\"] = enumValues;\n\t\treturn s;\n\t}\n\tif (field.type.kind === \"valueObject\") {\n\t\tconst vo = valueObjects?.[field.type.name];\n\t\tif (!vo) return void 0;\n\t\tconst voSchema = deriveObjectSchema(vo.fields, valueObjects, codecLookup, valueSets);\n\t\tif (\"many\" in field && field.many) return {\n\t\t\tbsonType: \"array\",\n\t\t\titems: voSchema\n\t\t};\n\t\tif (field.nullable) return { oneOf: [{ bsonType: \"null\" }, voSchema] };\n\t\treturn voSchema;\n\t}\n}\nfunction deriveObjectSchema(fields, valueObjects, codecLookup, valueSets) {\n\tconst properties = {};\n\tconst required = [];\n\tfor (const [fieldName, field] of Object.entries(fields)) {\n\t\tconst schema = fieldToBsonSchema(field, valueObjects, codecLookup, valueSets);\n\t\tif (schema) {\n\t\t\tproperties[fieldName] = schema;\n\t\t\tif (!field.nullable) required.push(fieldName);\n\t\t}\n\t}\n\tconst result = {\n\t\tbsonType: \"object\",\n\t\tproperties,\n\t\tadditionalProperties: false\n\t};\n\tif (required.length > 0) result[\"required\"] = required.sort();\n\treturn result;\n}\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction deriveJsonSchema(fields, valueObjects, codecLookup, valueSets) {\n\treturn new MongoValidator({\n\t\tjsonSchema: deriveObjectSchema(fields, valueObjects, codecLookup, valueSets),\n\t\tvalidationLevel: \"strict\",\n\t\tvalidationAction: \"error\"\n\t});\n}\nfunction derivePolymorphicJsonSchema(baseFields, discriminatorField, variants, valueObjects, codecLookup, valueSets) {\n\tconst baseSchema = deriveObjectSchema(baseFields, valueObjects, codecLookup, valueSets);\n\tconst baseProperties = isRecord(baseSchema[\"properties\"]) ? baseSchema[\"properties\"] : {};\n\tconst oneOf = [];\n\tfor (const variant of variants) {\n\t\tconst variantOnlyFields = {};\n\t\tfor (const [name, field] of Object.entries(variant.fields)) if (!(name in baseFields)) variantOnlyFields[name] = field;\n\t\tconst variantProperties = {};\n\t\tconst variantRequired = [discriminatorField];\n\t\tfor (const [name, field] of Object.entries(variantOnlyFields)) {\n\t\t\tconst schema = fieldToBsonSchema(field, valueObjects, codecLookup, valueSets);\n\t\t\tif (schema) {\n\t\t\t\tvariantProperties[name] = schema;\n\t\t\t\tif (!field.nullable) variantRequired.push(name);\n\t\t\t}\n\t\t}\n\t\tconst entry = {\n\t\t\tproperties: {\n\t\t\t\t...baseProperties,\n\t\t\t\t[discriminatorField]: { enum: [variant.discriminatorValue] },\n\t\t\t\t...variantProperties\n\t\t\t},\n\t\t\trequired: variantRequired.sort(),\n\t\t\tadditionalProperties: false\n\t\t};\n\t\toneOf.push(entry);\n\t}\n\tconst jsonSchema = { ...baseSchema };\n\tdelete jsonSchema[\"additionalProperties\"];\n\tif (oneOf.length > 0) jsonSchema[\"oneOf\"] = oneOf;\n\treturn new MongoValidator({\n\t\tjsonSchema,\n\t\tvalidationLevel: \"strict\",\n\t\tvalidationAction: \"error\"\n\t});\n}\n//#endregion\n//#region src/mongo-attribute-specs.ts\nfunction findModelAttributeNode(model, name) {\n\tfor (const attribute of model.node.attributes()) if (attribute.name()?.isSimpleName(name) === true) return attribute;\n}\nfunction findFieldAttributeNode(field, name) {\n\tfor (const attribute of field.node.attributes()) if (attribute.name()?.isSimpleName(name) === true) return attribute;\n}\nfunction buildModelAttributeCtx(input) {\n\treturn {\n\t\tsources: input.sources,\n\t\tselfModel: input.selfModel\n\t};\n}\nfunction buildFieldAttributeCtx(input) {\n\treturn {\n\t\tsources: input.sources,\n\t\tselfModel: input.selfModel,\n\t\tresolveReferencedModel: input.resolveReferencedModel ?? (() => void 0),\n\t\tfield: input.field\n\t};\n}\nfunction interpretModelAttribute(input) {\n\tconst result = interpretAttribute(input.node, input.spec, buildModelAttributeCtx({\n\t\tselfModel: input.model,\n\t\tsources: input.sources\n\t}));\n\tif (!result.ok) {\n\t\tinput.diagnostics.push(...result.failure);\n\t\treturn;\n\t}\n\treturn result.value;\n}\nfunction interpretFieldAttribute(input) {\n\tconst result = interpretAttribute(input.node, input.spec, buildFieldAttributeCtx({\n\t\tselfModel: input.model,\n\t\tfield: input.field,\n\t\tsources: input.sources,\n\t\tresolveReferencedModel: input.resolveReferencedModel\n\t}));\n\tif (!result.ok) {\n\t\tinput.diagnostics.push(...result.failure);\n\t\treturn;\n\t}\n\treturn result.value;\n}\nconst mapModelSpec = modelAttribute(\"map\", {\n\tdocumentation: \"Maps this model to a MongoDB collection name.\",\n\tpositional: [{\n\t\tkey: \"name\",\n\t\ttype: str(),\n\t\tdocumentation: \"The collection name stored in MongoDB.\"\n\t}]\n});\nconst mapFieldSpec = fieldAttribute(\"map\", {\n\tdocumentation: \"Maps this field to a stored document key.\",\n\tpositional: [{\n\t\tkey: \"name\",\n\t\ttype: str(),\n\t\tdocumentation: \"The key stored in MongoDB documents.\"\n\t}]\n});\nconst idFieldSpec = fieldAttribute(\"id\", { documentation: \"Identifies the document’s primary-key field.\" });\nconst uniqueFieldSpec = fieldAttribute(\"unique\", { documentation: \"Requires values in this field to be unique across the collection.\" });\nconst relationFieldSpec = fieldAttribute(\"relation\", {\n\tdocumentation: \"Names a relation and associates local fields with fields on the referenced model.\",\n\tpositional: [{\n\t\tkey: \"name\",\n\t\ttype: optional(str()),\n\t\tdocumentation: \"The relation name used to pair both sides. May also be supplied by name.\"\n\t}],\n\tnamed: {\n\t\tname: {\n\t\t\ttype: optional(str()),\n\t\t\tdocumentation: \"The relation name used to pair both sides. Cannot also be supplied positionally.\"\n\t\t},\n\t\tfields: {\n\t\t\ttype: optional(list(fieldRef(), {\n\t\t\t\tallowEmpty: false,\n\t\t\t\tunique: true\n\t\t\t})),\n\t\t\tdocumentation: \"The ordered local fields holding references to related documents.\"\n\t\t},\n\t\treferences: {\n\t\t\ttype: optional(list(referencedFieldRef(), {\n\t\t\t\tallowEmpty: false,\n\t\t\t\tunique: true\n\t\t\t})),\n\t\t\tdocumentation: \"The corresponding fields on the referenced model.\"\n\t\t}\n\t}\n});\nconst discriminatorModelSpec = modelAttribute(\"discriminator\", {\n\tdocumentation: \"Selects the field that distinguishes inheritance variants in this collection.\",\n\tpositional: [{\n\t\tkey: \"field\",\n\t\ttype: fieldRef(),\n\t\tdocumentation: \"The discriminator field on this model.\"\n\t}]\n});\nconst baseModelSpec = modelAttribute(\"base\", {\n\tdocumentation: \"Declares this model as a variant of a base model.\",\n\tpositional: [{\n\t\tkey: \"base\",\n\t\ttype: entityRef(),\n\t\tdocumentation: \"The base model to inherit from.\"\n\t}, {\n\t\tkey: \"value\",\n\t\ttype: str(),\n\t\tdocumentation: \"The discriminator value identifying this variant.\"\n\t}]\n});\nconst sortSig = {\n\tdocumentation: \"Selects an index field with an explicit sort direction.\",\n\tnamed: { sort: {\n\t\ttype: oneOf(identifier(\"Asc\", { documentation: \"Sort ascending.\" }), identifier(\"Desc\", { documentation: \"Sort descending.\" })),\n\t\tdocumentation: \"The index order for this field: `Asc` or `Desc`.\"\n\t} }\n};\nfunction indexFieldElement(fieldNames) {\n\treturn oneOf(...[\n\t\tfieldRef(),\n\t\tfuncCall(\"wildcard\", {\n\t\t\tdocumentation: \"Indexes document fields using a MongoDB wildcard index.\",\n\t\t\tpositional: [{\n\t\t\t\tkey: \"scope\",\n\t\t\t\ttype: optional(entityRef()),\n\t\t\t\tdocumentation: \"The field path to index recursively. Omit to index all document fields.\"\n\t\t\t}]\n\t\t}),\n\t\t...fieldNames.map((name) => funcCall(name, sortSig))\n\t]);\n}\nconst collationNamedArgs = {\n\tcollationLocale: {\n\t\ttype: optional(str()),\n\t\tdocumentation: \"The ICU locale used for string comparison, or `simple` for binary comparison.\"\n\t},\n\tcollationStrength: {\n\t\ttype: optional(oneOf(num(1), num(2), num(3), num(4), num(5))),\n\t\tdocumentation: \"The collation comparison level, from `1` (primary differences) through `5` (identical).\"\n\t},\n\tcollationCaseLevel: {\n\t\ttype: optional(bool()),\n\t\tdocumentation: \"Whether case differences are compared at strength `1` or `2`.\"\n\t},\n\tcollationCaseFirst: {\n\t\ttype: optional(oneOf(str(\"upper\"), str(\"lower\"), str(\"off\"))),\n\t\tdocumentation: \"Whether uppercase or lowercase sorts first, or `off` for the locale default.\"\n\t},\n\tcollationNumericOrdering: {\n\t\ttype: optional(bool()),\n\t\tdocumentation: \"Whether numeric strings are compared as numbers rather than lexicographically.\"\n\t},\n\tcollationAlternate: {\n\t\ttype: optional(oneOf(str(\"non-ignorable\"), str(\"shifted\"))),\n\t\tdocumentation: \"Whether punctuation and whitespace are significant or shifted to a later comparison level.\"\n\t},\n\tcollationMaxVariable: {\n\t\ttype: optional(oneOf(str(\"punct\"), str(\"space\"))),\n\t\tdocumentation: \"Which characters are ignored when alternate handling is `shifted`: punctuation or spaces.\"\n\t},\n\tcollationBackwards: {\n\t\ttype: optional(bool()),\n\t\tdocumentation: \"Whether secondary differences, such as accents, are compared in reverse order.\"\n\t},\n\tcollationNormalization: {\n\t\ttype: optional(bool()),\n\t\tdocumentation: \"Whether strings are checked and normalized before comparison.\"\n\t}\n};\nfunction buildIndexModelSpec(name, fieldElement) {\n\treturn modelAttribute(name, {\n\t\tdocumentation: name === \"unique\" ? \"Declares a unique MongoDB index over the selected fields.\" : \"Declares a MongoDB index over the selected fields.\",\n\t\tpositional: [{\n\t\t\tkey: \"fields\",\n\t\t\ttype: list(fieldElement, { allowEmpty: false }),\n\t\t\tdocumentation: name === \"unique\" ? \"The nonempty list of indexed fields, optionally with sort directions. Wildcard scopes are not supported.\" : \"The nonempty list of indexed fields, optionally with sort directions or a wildcard scope.\"\n\t\t}],\n\t\tnamed: {\n\t\t\ttype: {\n\t\t\t\ttype: optional(oneOf(num(1), num(-1), str(\"text\"), str(\"2dsphere\"), str(\"2d\"), str(\"hashed\"))),\n\t\t\t\tdocumentation: \"The MongoDB index key type: ascending `1`, descending `-1`, text, geospatial, or hashed.\"\n\t\t\t},\n\t\t\tsparse: {\n\t\t\t\ttype: optional(bool()),\n\t\t\t\tdocumentation: \"Whether documents missing indexed fields are omitted from the index.\"\n\t\t\t},\n\t\t\texpireAfterSeconds: {\n\t\t\t\ttype: optional(int()),\n\t\t\t\tdocumentation: \"The expiration interval in seconds for a TTL index.\"\n\t\t\t},\n\t\t\tfilter: {\n\t\t\t\ttype: optional(json()),\n\t\t\t\tdocumentation: \"A JSON partial-filter expression limiting which documents are indexed.\"\n\t\t\t},\n\t\t\tinclude: {\n\t\t\t\ttype: optional(list(str())),\n\t\t\t\tdocumentation: \"Document paths included in the wildcard index projection.\"\n\t\t\t},\n\t\t\texclude: {\n\t\t\t\ttype: optional(list(str())),\n\t\t\t\tdocumentation: \"Document paths excluded from the wildcard index projection.\"\n\t\t\t},\n\t\t\tdefault_language: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The default language for text-index tokenization and stemming.\"\n\t\t\t},\n\t\t\tlanguageOverride: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The document field that overrides the text-index language.\"\n\t\t\t},\n\t\t\t...collationNamedArgs\n\t\t}\n\t});\n}\nfunction buildTextIndexModelSpec(fieldElement) {\n\treturn modelAttribute(\"textIndex\", {\n\t\tdocumentation: \"Declares a MongoDB text index with optional field weights and language settings.\",\n\t\tpositional: [{\n\t\t\tkey: \"fields\",\n\t\t\ttype: list(fieldElement, { allowEmpty: false }),\n\t\t\tdocumentation: \"The nonempty list of fields whose text is indexed.\"\n\t\t}],\n\t\tnamed: {\n\t\t\tfilter: {\n\t\t\t\ttype: optional(json()),\n\t\t\t\tdocumentation: \"A JSON partial-filter expression limiting which documents are indexed.\"\n\t\t\t},\n\t\t\tweights: {\n\t\t\t\ttype: optional(record(int({\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: 99999\n\t\t\t\t}))),\n\t\t\t\tdocumentation: \"Relative text-search weights by field, each from `1` through `99999`.\"\n\t\t\t},\n\t\t\tlanguage: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The default language for tokenization and stemming.\"\n\t\t\t},\n\t\t\tlanguageOverride: {\n\t\t\t\ttype: optional(str()),\n\t\t\t\tdocumentation: \"The document field that overrides the text-index language.\"\n\t\t\t},\n\t\t\t...collationNamedArgs\n\t\t}\n\t});\n}\nfunction modelFieldElement(ctx) {\n\treturn indexFieldElement(Object.keys(ctx.model.fields));\n}\nfunction staticModelSpec(spec) {\n\treturn () => spec;\n}\nfunction staticFieldSpec(spec) {\n\treturn () => spec;\n}\nconst mongoAttributeSpecs = {\n\tmodel: {\n\t\tmap: staticModelSpec(mapModelSpec),\n\t\tdiscriminator: staticModelSpec(discriminatorModelSpec),\n\t\tbase: staticModelSpec(baseModelSpec),\n\t\tindex: (ctx) => buildIndexModelSpec(\"index\", modelFieldElement(ctx)),\n\t\tunique: (ctx) => buildIndexModelSpec(\"unique\", modelFieldElement(ctx)),\n\t\ttextIndex: (ctx) => buildTextIndexModelSpec(modelFieldElement(ctx))\n\t},\n\tfield: {\n\t\tid: staticFieldSpec(idFieldSpec),\n\t\tunique: staticFieldSpec(uniqueFieldSpec),\n\t\tmap: staticFieldSpec(mapFieldSpec),\n\t\trelation: staticFieldSpec(relationFieldSpec)\n\t}\n};\n//#endregion\n//#region src/psl-helpers.ts\n/** Storage collection name of a model that declares no `@@map`: the model name, verbatim. */\nfunction defaultCollectionName(modelName) {\n\treturn modelName;\n}\nfunction getAttribute(attributes, name) {\n\treturn attributes.find((attr) => attr.name === name);\n}\n//#endregion\n//#region src/interpreter.ts\n/**\n* Encode an authored enum value to its codec-encoded JSON form via the codec resolved by id from the\n* contract's codec lookup, so a non-identity `encodeJson` (permitted by the `mongoCodec` factory) is\n* respected. Matches the TS builder's `encodeEnumValue`: the lookup is always threaded in production,\n* and a codecId the lookup cannot resolve is a hard error — the enum uses a codec that is not part of\n* the contract's pack stack.\n*/\nfunction encodeEnumValue(value, codecId, codecLookup) {\n\tconst codec = codecLookup.get(codecId);\n\tif (!codec) throw errorEnumCodecNotInPackStack({ codecId });\n\treturn codec.encodeJson(value);\n}\n/**\n* Mongo's PSL surface binds the database from the connection string, so every\n* explicit namespace block is invalid, including `namespace unbound { … }`.\n*/\nfunction validateNamespaceBlocksForMongoTarget(input) {\n\tfor (const namespace of input.namespaces) for (const { node, span } of namespace.declarations) input.diagnostics.push({\n\t\tcode: \"PSL_UNSUPPORTED_NAMESPACE_BLOCK\",\n\t\tmessage: `Mongo does not support \\`namespace ${namespace.name} { … }\\` blocks (the database is bound by the connection string; declare models at the document top level instead).`,\n\t\t...diagnosticSource(input.sources, node.syntax).at(span)\n\t});\n}\nconst UNLOWERED_FIELD_ATTRIBUTE_HINTS = /* @__PURE__ */ new Map([[\"updatedAt\", \"Mongo lowers no automatic timestamp updates; delete the attribute and set the timestamp in application code.\"]]);\nfunction unsupportedFieldAttributeMessage(ownerName, fieldName, attributeName) {\n\tconst base = `Field \"${ownerName}.${fieldName}\" uses unsupported attribute \"@${attributeName}\"`;\n\tconst hint = UNLOWERED_FIELD_ATTRIBUTE_HINTS.get(attributeName);\n\treturn hint === void 0 ? base : `${base}. ${hint}`;\n}\nfunction reportUnknownAttributes(input) {\n\tconst { sources, diagnostics } = input;\n\tfor (const model of input.models) for (const attribute of model.attributes) {\n\t\tif (Object.hasOwn(mongoAttributeSpecs.model, attribute.name)) continue;\n\t\tdiagnostics.push({\n\t\t\tcode: \"PSL_UNSUPPORTED_MODEL_ATTRIBUTE\",\n\t\t\tmessage: `Model \"${model.name}\" uses unsupported attribute \"@@${attribute.name}\"`,\n\t\t\t...diagnosticSource(sources, model.node.syntax).at(attribute.span)\n\t\t});\n\t}\n\tfor (const owner of [...input.models, ...input.compositeTypes]) for (const field of Object.values(owner.fields)) for (const attribute of field.attributes) {\n\t\tif (Object.hasOwn(mongoAttributeSpecs.field, attribute.name)) continue;\n\t\tdiagnostics.push({\n\t\t\tcode: \"PSL_UNSUPPORTED_FIELD_ATTRIBUTE\",\n\t\t\tmessage: unsupportedFieldAttributeMessage(owner.name, field.name, attribute.name),\n\t\t\t...diagnosticSource(sources, field.node.syntax).at(attribute.span)\n\t\t});\n\t}\n}\nfunction relationNullabilityMismatchDiagnostic(modelName, field, sources) {\n\tconst source = diagnosticSource(sources, field.node.syntax);\n\tconst fieldLabel = `Relation field \"${modelName}.${field.name}\"`;\n\treturn {\n\t\tcode: \"PSL_RELATION_NULLABILITY_MISMATCH\",\n\t\tmessage: field.optional ? `${fieldLabel} is optional but every field in @relation(fields: [...]) is required. Make one of those fields optional with \"?\" or remove \"?\" from \"${field.name}\".` : `${fieldLabel} is required but a field in @relation(fields: [...]) is optional. Add \"?\" to \"${field.name}\" or make those fields required.`,\n\t\t...source.at(field.span)\n\t};\n}\nfunction resolveFieldMappings(input) {\n\tconst { model, specContext, sources, diagnostics } = input;\n\tconst pslNameToMapped = /* @__PURE__ */ new Map();\n\tfor (const field of Object.values(model.fields)) {\n\t\tconst mapNode = findFieldAttributeNode(field, \"map\");\n\t\tconst mapped = (mapNode ? interpretFieldAttribute({\n\t\t\tnode: mapNode,\n\t\t\tspec: mongoAttributeSpecs.field.map({\n\t\t\t\t...specContext,\n\t\t\t\tfield\n\t\t\t}),\n\t\t\tmodel,\n\t\t\tfield,\n\t\t\tsources,\n\t\t\tdiagnostics\n\t\t})?.name : void 0) ?? field.name;\n\t\tpslNameToMapped.set(field.name, mapped);\n\t}\n\treturn { pslNameToMapped };\n}\nfunction resolveCollectionName(input) {\n\tconst { model, specContext, sources, diagnostics } = input;\n\tconst mapNode = findModelAttributeNode(model, \"map\");\n\treturn (mapNode ? interpretModelAttribute({\n\t\tnode: mapNode,\n\t\tspec: mongoAttributeSpecs.model.map(specContext),\n\t\tmodel,\n\t\tsources,\n\t\tdiagnostics\n\t})?.name : void 0) ?? defaultCollectionName(model.name);\n}\nfunction mongoCrossRef(modelName) {\n\treturn crossRef(modelName, UNBOUND_NAMESPACE_ID);\n}\nfunction collectPolymorphismDeclarations(models, specContextFor, modelMetadataByName, sources, diagnostics) {\n\tconst discriminatorDeclarations = /* @__PURE__ */ new Map();\n\tconst baseDeclarations = /* @__PURE__ */ new Map();\n\tfor (const model of models) {\n\t\tconst specContext = specContextFor(model);\n\t\tconst discNode = findModelAttributeNode(model, \"discriminator\");\n\t\tif (discNode) {\n\t\t\tconst parsed = interpretModelAttribute({\n\t\t\t\tnode: discNode,\n\t\t\t\tspec: mongoAttributeSpecs.model.discriminator(specContext),\n\t\t\t\tmodel,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t});\n\t\t\tif (parsed) {\n\t\t\t\tconst fieldName = parsed.field;\n\t\t\t\tconst discField = model.fields[fieldName];\n\t\t\t\tif (discField && discField.typeName !== \"String\") diagnostics.push({\n\t\t\t\t\tcode: \"PSL_INVALID_ATTRIBUTE_ARGUMENT\",\n\t\t\t\t\tmessage: `Discriminator field \"${fieldName}\" on model \"${model.name}\" must be of type String, but is \"${discField.typeName}\"`,\n\t\t\t\t\t...diagnosticSource(sources, discNode.syntax).at(nodePslSpan(discNode.syntax, sources))\n\t\t\t\t});\n\t\t\t\telse discriminatorDeclarations.set(model.name, {\n\t\t\t\t\tfieldName,\n\t\t\t\t\tsource: diagnosticSource(sources, discNode.syntax),\n\t\t\t\t\tspan: nodePslSpan(discNode.syntax, sources)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tconst baseNode = findModelAttributeNode(model, \"base\");\n\t\tif (baseNode) {\n\t\t\tconst parsed = interpretModelAttribute({\n\t\t\t\tnode: baseNode,\n\t\t\t\tspec: mongoAttributeSpecs.model.base(specContext),\n\t\t\t\tmodel,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t});\n\t\t\tif (parsed) {\n\t\t\t\tconst collectionName = modelMetadataByName.get(model.name)?.collectionName ?? defaultCollectionName(model.name);\n\t\t\t\tbaseDeclarations.set(model.name, {\n\t\t\t\t\tbaseName: parsed.base,\n\t\t\t\t\tvalue: parsed.value,\n\t\t\t\t\tcollectionName,\n\t\t\t\t\tsource: diagnosticSource(sources, baseNode.syntax),\n\t\t\t\t\tspan: nodePslSpan(baseNode.syntax, sources)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tdiscriminatorDeclarations,\n\t\tbaseDeclarations\n\t};\n}\nfunction resolvePolymorphism(input) {\n\tconst { discriminatorDeclarations, baseDeclarations, modelNames, modelMetadataByName, allModels: allModelViews, indexSpans, modelIndexesByName, indexSources } = input;\n\tlet patched = input.models;\n\tlet roots = input.roots;\n\tlet collections = input.collections;\n\tconst diagnostics = createPslDiagnosticCollector(input.sources);\n\tfor (const [modelName, decl] of discriminatorDeclarations) {\n\t\tif (baseDeclarations.has(modelName)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_DISCRIMINATOR_AND_BASE\",\n\t\t\t\tmessage: `Model \"${modelName}\" cannot have both @@discriminator and @@base`,\n\t\t\t\t...decl.source.at(decl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst model = patched[modelName];\n\t\tif (!model) continue;\n\t\tconst mappedDiscriminatorField = modelMetadataByName.get(modelName)?.fieldMappings.pslNameToMapped.get(decl.fieldName) ?? decl.fieldName;\n\t\tif (!Object.hasOwn(model.fields, mappedDiscriminatorField)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_DISCRIMINATOR_FIELD_NOT_FOUND\",\n\t\t\t\tmessage: `Discriminator field \"${decl.fieldName}\" is not a field on model \"${modelName}\"`,\n\t\t\t\t...decl.source.at(decl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst variants = {};\n\t\tfor (const [variantName, baseDecl] of baseDeclarations) {\n\t\t\tif (baseDecl.baseName !== modelName) continue;\n\t\t\tvariants[variantName] = { value: baseDecl.value };\n\t\t}\n\t\tif (Object.keys(variants).length === 0) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_ORPHANED_DISCRIMINATOR\",\n\t\t\t\tmessage: `Model \"${modelName}\" has @@discriminator but no variant models declare @@base(${modelName}, ...)`,\n\t\t\t\t...decl.source.at(decl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tpatched = {\n\t\t\t...patched,\n\t\t\t[modelName]: {\n\t\t\t\t...model,\n\t\t\t\tdiscriminator: { field: mappedDiscriminatorField },\n\t\t\t\tvariants\n\t\t\t}\n\t\t};\n\t}\n\tfor (const [variantName, baseDecl] of baseDeclarations) {\n\t\tif (!modelNames.has(baseDecl.baseName)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_BASE_TARGET_NOT_FOUND\",\n\t\t\t\tmessage: `Model \"${variantName}\" @@base references non-existent model \"${baseDecl.baseName}\"`,\n\t\t\t\t...baseDecl.source.at(baseDecl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (!discriminatorDeclarations.has(baseDecl.baseName)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_ORPHANED_BASE\",\n\t\t\t\tmessage: `Model \"${variantName}\" declares @@base(${baseDecl.baseName}, ...) but \"${baseDecl.baseName}\" has no @@discriminator`,\n\t\t\t\t...baseDecl.source.at(baseDecl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (discriminatorDeclarations.has(variantName)) continue;\n\t\tconst baseModel = patched[baseDecl.baseName];\n\t\tconst variantModelView = allModelViews.find((m) => m.name === variantName);\n\t\tif (!variantModelView) continue;\n\t\tif (getAttribute(variantModelView.attributes, \"map\") !== void 0 && baseModel && baseDecl.collectionName !== baseModel.storage.collection) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_MONGO_VARIANT_SEPARATE_COLLECTION\",\n\t\t\t\tmessage: `Mongo variant \"${variantName}\" cannot use a different collection than its base \"${baseDecl.baseName}\". Mongo only supports single-collection polymorphism.`,\n\t\t\t\t...baseDecl.source.at(baseDecl.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst baseCollection = baseModel?.storage.collection ?? baseDecl.collectionName;\n\t\tconst variantModel = patched[variantName];\n\t\tif (variantModel) patched = {\n\t\t\t...patched,\n\t\t\t[variantName]: {\n\t\t\t\t...variantModel,\n\t\t\t\tbase: mongoCrossRef(baseDecl.baseName),\n\t\t\t\tstorage: { collection: baseCollection }\n\t\t\t}\n\t\t};\n\t\tconst variantCollectionName = modelMetadataByName.get(variantName)?.collectionName ?? defaultCollectionName(variantName);\n\t\tif (roots[variantCollectionName]?.model === variantName) if (variantCollectionName === baseCollection && baseModel) roots = {\n\t\t\t...roots,\n\t\t\t[variantCollectionName]: mongoCrossRef(baseDecl.baseName)\n\t\t};\n\t\telse roots = Object.fromEntries(Object.entries(roots).filter(([key]) => key !== variantCollectionName));\n\t\tconst variantOwnIndexes = modelIndexesByName.get(variantName) ?? [];\n\t\tconst baseColl = collections[baseCollection];\n\t\tconst discriminatorField = patched[baseDecl.baseName]?.discriminator?.field;\n\t\tconst scopedVariantIndexes = [];\n\t\tif (discriminatorField) for (const idx of variantOwnIndexes) {\n\t\t\tconst result = applyPolymorphicScopeToMongoIndex(idx, {\n\t\t\t\tdiscriminatorField,\n\t\t\t\tdiscriminatorValue: baseDecl.value\n\t\t\t});\n\t\t\tif (result.kind === \"conflict\") {\n\t\t\t\tconst span = indexSpans.get(idx) ?? baseDecl.span;\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\t\t\tmessage: `Variant \"${variantName}\" index conflicts with discriminator scope: ${result.reason}`,\n\t\t\t\t\t...(indexSources.get(idx) ?? baseDecl.source).at(span)\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (result.index !== idx) indexSpans.set(result.index, indexSpans.get(idx) ?? baseDecl.span);\n\t\t\tscopedVariantIndexes.push(result.index);\n\t\t}\n\t\telse scopedVariantIndexes.push(...variantOwnIndexes);\n\t\tif (variantCollectionName !== baseCollection) {\n\t\t\tconst filtered = Object.fromEntries(Object.entries(collections).filter(([key]) => key !== variantCollectionName));\n\t\t\tif (scopedVariantIndexes.length > 0 && baseColl) {\n\t\t\t\tconst baseIndexes = collectionIndexes(baseColl);\n\t\t\t\tcollections = {\n\t\t\t\t\t...filtered,\n\t\t\t\t\t[baseCollection]: {\n\t\t\t\t\t\t...baseColl,\n\t\t\t\t\t\tindexes: [...baseIndexes, ...scopedVariantIndexes]\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else collections = filtered;\n\t\t} else if (baseColl) {\n\t\t\tconst existingIndexes = collectionIndexes(baseColl);\n\t\t\tconst variantIndexSet = new Set(variantOwnIndexes);\n\t\t\tconst withoutUnscopedVariants = existingIndexes.filter((idx) => !variantIndexSet.has(idx));\n\t\t\tconst mergedIndexes = [...withoutUnscopedVariants];\n\t\t\tfor (const idx of scopedVariantIndexes) {\n\t\t\t\tconst idxKey = canonicalJson(idx);\n\t\t\t\tif (!withoutUnscopedVariants.some((existing) => canonicalJson(existing) === idxKey)) mergedIndexes.push(idx);\n\t\t\t}\n\t\t\tif (mergedIndexes.length !== existingIndexes.length || mergedIndexes.some((idx, i) => idx !== existingIndexes[i])) {\n\t\t\t\tconst next = { ...baseColl };\n\t\t\t\tif (mergedIndexes.length > 0) next[\"indexes\"] = mergedIndexes;\n\t\t\t\telse delete next[\"indexes\"];\n\t\t\t\tcollections = {\n\t\t\t\t\t...collections,\n\t\t\t\t\t[baseCollection]: next\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tmodels: patched,\n\t\troots,\n\t\tcollections,\n\t\tdiagnostics\n\t};\n}\nfunction collectionIndexes(collection) {\n\treturn blindCast(collection[\"indexes\"] ?? []);\n}\nfunction canonicalJson(value) {\n\tif (Array.isArray(value)) return `[${value.map(canonicalJson).join(\",\")}]`;\n\tif (value && typeof value === \"object\") return `{${Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`).join(\",\")}}`;\n\treturn JSON.stringify(value);\n}\nfunction normalizeIndexField(element) {\n\tif (typeof element === \"string\") return {\n\t\tkind: \"field\",\n\t\tname: element\n\t};\n\tif (element.fn === \"wildcard\" && element.args[\"sort\"] === void 0) {\n\t\tconst scope = element.args[\"scope\"];\n\t\treturn typeof scope === \"string\" ? {\n\t\t\tkind: \"wildcard\",\n\t\t\tscope\n\t\t} : { kind: \"wildcard\" };\n\t}\n\tconst sort = element.args[\"sort\"];\n\treturn {\n\t\tkind: \"field\",\n\t\tname: element.fn,\n\t\tdirection: sort === \"Desc\" ? -1 : 1\n\t};\n}\nfunction buildCollationFromSpec(args) {\n\tconst locale = args.collationLocale;\n\tif (locale === void 0) return args.collationStrength !== void 0 || args.collationCaseLevel !== void 0 || args.collationCaseFirst !== void 0 || args.collationNumericOrdering !== void 0 || args.collationAlternate !== void 0 || args.collationMaxVariable !== void 0 || args.collationBackwards !== void 0 || args.collationNormalization !== void 0 ? null : void 0;\n\tconst collation = { locale };\n\tif (args.collationStrength !== void 0) collation.strength = args.collationStrength;\n\tif (args.collationCaseLevel !== void 0) collation.caseLevel = args.collationCaseLevel;\n\tif (args.collationCaseFirst !== void 0) collation.caseFirst = args.collationCaseFirst;\n\tif (args.collationNumericOrdering !== void 0) collation.numericOrdering = args.collationNumericOrdering;\n\tif (args.collationAlternate !== void 0) collation.alternate = args.collationAlternate;\n\tif (args.collationMaxVariable !== void 0) collation.maxVariable = args.collationMaxVariable;\n\tif (args.collationBackwards !== void 0) collation.backwards = args.collationBackwards;\n\tif (args.collationNormalization !== void 0) collation.normalization = args.collationNormalization;\n\treturn collation;\n}\nfunction resolveIndexKeys(parsedFields, defaultDirection, ctx) {\n\tconst wildcardCount = parsedFields.filter((field) => field.kind === \"wildcard\").length;\n\tif (wildcardCount > 1) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"An index can contain at most one wildcard() field\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tfor (const field of parsedFields) {\n\t\tconst fieldName = field.kind === \"wildcard\" ? field.scope : field.name;\n\t\tif (fieldName !== void 0 && !ctx.indexableFieldNames.has(fieldName)) {\n\t\t\tctx.diagnostics.push({\n\t\t\t\tcode: \"PSL_INDEX_FIELD_NOT_FOUND\",\n\t\t\t\tmessage: `Index on model \"${ctx.pslModel.name}\" references unknown field \"${fieldName}\"`,\n\t\t\t\t...ctx.source.at(ctx.span)\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t}\n\treturn {\n\t\tkeys: parsedFields.map((field) => {\n\t\t\tif (field.kind === \"wildcard\") {\n\t\t\t\tif (field.scope === void 0) return {\n\t\t\t\t\tfield: \"$**\",\n\t\t\t\t\tdirection: defaultDirection\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tfield: `${ctx.fieldMappings.pslNameToMapped.get(field.scope) ?? field.scope}.$**`,\n\t\t\t\t\tdirection: defaultDirection\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tfield: ctx.fieldMappings.pslNameToMapped.get(field.name) ?? field.name,\n\t\t\t\tdirection: field.direction ?? defaultDirection\n\t\t\t};\n\t\t}),\n\t\thasWildcard: wildcardCount === 1\n\t};\n}\nfunction buildProjection(include, exclude, hasWildcard, ctx) {\n\tif (include !== void 0 && exclude !== void 0) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"Cannot specify both include and exclude on the same index\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn null;\n\t}\n\tconst fields = include ?? exclude;\n\tif (fields === void 0) return void 0;\n\tif (!hasWildcard) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"include/exclude options are only valid when the index contains a wildcard() field\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn null;\n\t}\n\tif (fields.length === 0) return void 0;\n\tconst value = include === void 0 ? 0 : 1;\n\tconst projection = {};\n\tfor (const field of fields) projection[field] = value;\n\treturn projection;\n}\nfunction buildNormalIndex(parsed, unique, ctx) {\n\tconst parsedFields = parsed.fields.map(normalizeIndexField);\n\tif (parsedFields.length === 0) return void 0;\n\tconst defaultDirection = parsed.type ?? 1;\n\tconst resolved = resolveIndexKeys(parsedFields, defaultDirection, ctx);\n\tif (!resolved) return void 0;\n\tif (unique && resolved.hasWildcard) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"Unique indexes cannot use wildcard() fields\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tif (resolved.hasWildcard && typeof defaultDirection === \"string\" && [\n\t\t\"hashed\",\n\t\t\"2dsphere\",\n\t\t\"2d\"\n\t].includes(defaultDirection)) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: `wildcard() fields cannot be combined with type: ${defaultDirection}`,\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tif (defaultDirection === \"hashed\" && parsedFields.length > 1) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"Hashed indexes must have exactly one field\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tif (resolved.hasWildcard && parsed.expireAfterSeconds !== void 0) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"expireAfterSeconds cannot be combined with wildcard() fields\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tconst wildcardProjection = buildProjection(parsed.include, parsed.exclude, resolved.hasWildcard, ctx);\n\tif (wildcardProjection === null) return void 0;\n\tconst collation = buildCollationFromSpec(parsed);\n\tif (collation === null) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"collationLocale is required when using collation options\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\treturn new MongoIndex({\n\t\tkeys: resolved.keys,\n\t\t...unique && { unique: true },\n\t\t...parsed.sparse !== void 0 && { sparse: parsed.sparse },\n\t\t...parsed.expireAfterSeconds !== void 0 && { expireAfterSeconds: parsed.expireAfterSeconds },\n\t\t...parsed.filter !== void 0 && { partialFilterExpression: parsed.filter },\n\t\t...wildcardProjection !== void 0 && { wildcardProjection },\n\t\t...collation !== void 0 && { collation },\n\t\t...parsed.default_language !== void 0 && { default_language: parsed.default_language },\n\t\t...parsed.languageOverride !== void 0 && { language_override: parsed.languageOverride }\n\t});\n}\nfunction buildTextIndex(parsed, ctx) {\n\tconst parsedFields = parsed.fields.map(normalizeIndexField);\n\tif (parsedFields.length === 0) return void 0;\n\tconst resolved = resolveIndexKeys(parsedFields, \"text\", ctx);\n\tif (!resolved) return void 0;\n\tif (resolved.hasWildcard) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"wildcard() fields cannot be combined with type: hashed/2dsphere/2d or @@textIndex\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\tconst collation = buildCollationFromSpec(parsed);\n\tif (collation === null) {\n\t\tctx.diagnostics.push({\n\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\tmessage: \"collationLocale is required when using collation options\",\n\t\t\t...ctx.source.at(ctx.span)\n\t\t});\n\t\treturn;\n\t}\n\treturn new MongoIndex({\n\t\tkeys: resolved.keys,\n\t\t...parsed.filter !== void 0 && { partialFilterExpression: parsed.filter },\n\t\t...collation !== void 0 && { collation },\n\t\t...ifDefined(\"weights\", parsed.weights),\n\t\t...parsed.language !== void 0 && { default_language: parsed.language },\n\t\t...parsed.languageOverride !== void 0 && { language_override: parsed.languageOverride }\n\t});\n}\nfunction collectIndexes(pslModel, specContext, fieldMappings, modelNames, sources, diagnostics, indexSpans, indexSources) {\n\tconst indexes = [];\n\tlet textIndexCount = 0;\n\tconst indexableFieldNames = /* @__PURE__ */ new Set();\n\tfor (const field of Object.values(pslModel.fields)) if (!modelNames.has(field.typeName)) indexableFieldNames.add(field.name);\n\tfor (const field of Object.values(pslModel.fields)) {\n\t\tif (modelNames.has(field.typeName)) continue;\n\t\tconst uniqueNode = findFieldAttributeNode(field, \"unique\");\n\t\tif (!uniqueNode) continue;\n\t\tif (interpretFieldAttribute({\n\t\t\tnode: uniqueNode,\n\t\t\tspec: mongoAttributeSpecs.field.unique({\n\t\t\t\t...specContext,\n\t\t\t\tfield\n\t\t\t}),\n\t\t\tmodel: pslModel,\n\t\t\tfield,\n\t\t\tsources,\n\t\t\tdiagnostics\n\t\t}) === void 0) continue;\n\t\tconst fieldUniqueIndex = new MongoIndex({\n\t\t\tkeys: [{\n\t\t\t\tfield: fieldMappings.pslNameToMapped.get(field.name) ?? field.name,\n\t\t\t\tdirection: 1\n\t\t\t}],\n\t\t\tunique: true\n\t\t});\n\t\tindexes.push(fieldUniqueIndex);\n\t\tindexSpans.set(fieldUniqueIndex, nodePslSpan(uniqueNode.syntax, sources));\n\t\tindexSources.set(fieldUniqueIndex, diagnosticSource(sources, uniqueNode.syntax));\n\t}\n\tconst attributeNodes = Array.from(pslModel.node.attributes());\n\tfor (const [attrIndex, attr] of pslModel.attributes.entries()) {\n\t\tif (attr.name !== \"index\" && attr.name !== \"unique\" && attr.name !== \"textIndex\") continue;\n\t\tconst node = attributeNodes[attrIndex];\n\t\tif (!node) continue;\n\t\tconst source = diagnosticSource(sources, node.syntax);\n\t\tconst ctx = {\n\t\t\tpslModel,\n\t\t\tfieldMappings,\n\t\t\tindexableFieldNames,\n\t\t\tsource,\n\t\t\tspan: attr.span,\n\t\t\tdiagnostics\n\t\t};\n\t\tlet index;\n\t\tif (attr.name === \"textIndex\") {\n\t\t\tconst parsed = interpretModelAttribute({\n\t\t\t\tnode,\n\t\t\t\tspec: mongoAttributeSpecs.model.textIndex(specContext),\n\t\t\t\tmodel: pslModel,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t});\n\t\t\tif (!parsed || parsed.fields.length === 0) continue;\n\t\t\ttextIndexCount++;\n\t\t\tif (textIndexCount > 1) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tcode: \"PSL_INVALID_INDEX\",\n\t\t\t\t\tmessage: `Only one @@textIndex is allowed per collection (model \"${pslModel.name}\")`,\n\t\t\t\t\t...source.at(attr.span)\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tindex = buildTextIndex(parsed, ctx);\n\t\t} else {\n\t\t\tconst unique = attr.name === \"unique\";\n\t\t\tconst parsed = interpretModelAttribute({\n\t\t\t\tnode,\n\t\t\t\tspec: unique ? mongoAttributeSpecs.model.unique(specContext) : mongoAttributeSpecs.model.index(specContext),\n\t\t\t\tmodel: pslModel,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t});\n\t\t\tif (!parsed) continue;\n\t\t\tindex = buildNormalIndex(parsed, unique, ctx);\n\t\t}\n\t\tif (!index) continue;\n\t\tindexes.push(index);\n\t\tindexSpans.set(index, attr.span);\n\t\tindexSources.set(index, source);\n\t}\n\treturn indexes;\n}\nfunction isRelationField(field, modelNames) {\n\treturn modelNames.has(field.typeName);\n}\nconst MONGO_OBJECT_ID_PSL_TYPE = \"ObjectId\";\nfunction resolveFieldCodecId(field, scalarTypeCodecIds) {\n\treturn scalarTypeCodecIds.get(field.typeName);\n}\nfunction resolveNonRelationField(field, ownerName, compositeTypeNames, scalarTypeCodecIds, codecIdByEnumName, sources, diagnostics) {\n\tif (compositeTypeNames.has(field.typeName)) {\n\t\tconst result = {\n\t\t\ttype: {\n\t\t\t\tkind: \"valueObject\",\n\t\t\t\tname: field.typeName\n\t\t\t},\n\t\t\tnullable: field.optional\n\t\t};\n\t\treturn field.list ? {\n\t\t\t...result,\n\t\t\tmany: true\n\t\t} : result;\n\t}\n\tconst enumCodecId = codecIdByEnumName.get(field.typeName);\n\tif (enumCodecId !== void 0) {\n\t\tconst valueSet = {\n\t\t\tplane: \"domain\",\n\t\t\tentityKind: \"enum\",\n\t\t\tnamespaceId: UNBOUND_NAMESPACE_ID,\n\t\t\tentityName: field.typeName\n\t\t};\n\t\tconst result = {\n\t\t\ttype: {\n\t\t\t\tkind: \"scalar\",\n\t\t\t\tcodecId: enumCodecId\n\t\t\t},\n\t\t\tnullable: field.optional,\n\t\t\tvalueSet\n\t\t};\n\t\treturn field.list ? {\n\t\t\t...result,\n\t\t\tmany: true\n\t\t} : result;\n\t}\n\tif (field.malformedType) return;\n\tconst codecId = resolveFieldCodecId(field, scalarTypeCodecIds);\n\tif (!codecId) {\n\t\tdiagnostics.push({\n\t\t\tcode: \"PSL_UNSUPPORTED_FIELD_TYPE\",\n\t\t\tmessage: `Field \"${ownerName}.${field.name}\" type \"${field.typeName}\" is not supported in Mongo PSL interpreter`,\n\t\t\t...diagnosticSource(sources, field.node.syntax).at(field.span)\n\t\t});\n\t\treturn;\n\t}\n\tconst result = {\n\t\ttype: {\n\t\t\tkind: \"scalar\",\n\t\t\tcodecId\n\t\t},\n\t\tnullable: field.optional\n\t};\n\treturn field.list ? {\n\t\t...result,\n\t\tmany: true\n\t} : result;\n}\nfunction processEnumDeclarations(input) {\n\tconst builtEnums = {};\n\tif (input.enumSymbols.length === 0) return builtEnums;\n\tconst enumDescriptor = input.authoringContributions?.entityTypes?.[\"enum\"] !== void 0 && isAuthoringEntityTypeDescriptor(input.authoringContributions.entityTypes[\"enum\"]) ? input.authoringContributions.entityTypes[\"enum\"] : void 0;\n\tif (!enumDescriptor) {\n\t\tfor (const enumSymbol of input.enumSymbols) {\n\t\t\tconst source = diagnosticSource(input.sources, enumSymbol.node.syntax);\n\t\t\tinput.diagnostics.push({\n\t\t\t\tcode: \"PSL_ENUM_MISSING_FACTORY\",\n\t\t\t\tmessage: `enum \"${enumSymbol.block.name}\" requires an \"enum\" entityType factory in the active authoring contributions`,\n\t\t\t\t...source.at(enumSymbol.span)\n\t\t\t});\n\t\t}\n\t\treturn builtEnums;\n\t}\n\tfor (const enumSymbol of input.enumSymbols) {\n\t\tconst sourceFile = input.sources.sourceFileFor(enumSymbol.node.syntax);\n\t\tconst decl = enumSymbol.block;\n\t\tconst handle = instantiateAuthoringEntityType(\"enum\", enumDescriptor, [decl], {\n\t\t\t...input.entityContext,\n\t\t\tsourceId: sourceFile.filename\n\t\t});\n\t\tif (handle === void 0 || handle === null) continue;\n\t\tbuiltEnums[decl.name] = {\n\t\t\tcodecId: handle.codecId,\n\t\t\tmembers: handle.enumMembers.map((m) => ({\n\t\t\t\tname: m.name,\n\t\t\t\tvalue: blindCast(m.value)\n\t\t\t}))\n\t\t};\n\t}\n\treturn builtEnums;\n}\nfunction interpretPslDocumentToMongoContract(input) {\n\tconst { symbolTable, sources, scalarTypeCodecIds, codecLookup } = input;\n\tconst diagnostics = createPslDiagnosticCollector(sources);\n\tconst topLevel = symbolTable.topLevel;\n\tvalidateNamespaceBlocksForMongoTarget({\n\t\tnamespaces: Object.values(topLevel.namespaces),\n\t\tsources,\n\t\tdiagnostics\n\t});\n\tconst allModels = Object.values(topLevel.models);\n\tconst allCompositeTypes = Object.values(topLevel.compositeTypes);\n\tconst modelNames = new Set(allModels.map((m) => m.name));\n\tconst compositeTypeNames = new Set(allCompositeTypes.map((ct) => ct.name));\n\treportUnknownAttributes({\n\t\tmodels: allModels,\n\t\tcompositeTypes: allCompositeTypes,\n\t\tsources,\n\t\tdiagnostics\n\t});\n\tconst specContextFor = (model) => ({\n\t\tsymbols: symbolTable,\n\t\tmodel,\n\t\tcontrolMutationDefaults: input.controlMutationDefaults\n\t});\n\tconst modelMetadataByName = /* @__PURE__ */ new Map();\n\tfor (const model of allModels) {\n\t\tconst specContext = specContextFor(model);\n\t\tmodelMetadataByName.set(model.name, {\n\t\t\tcollectionName: resolveCollectionName({\n\t\t\t\tmodel,\n\t\t\t\tspecContext,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t}),\n\t\t\tfieldMappings: resolveFieldMappings({\n\t\t\t\tmodel,\n\t\t\t\tspecContext,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t})\n\t\t});\n\t}\n\tconst builtEnums = processEnumDeclarations({\n\t\tenumSymbols: Object.values(topLevel.blocks).filter((b) => b.keyword === \"enum\"),\n\t\tsources,\n\t\tauthoringContributions: input.authoringContributions,\n\t\tentityContext: {\n\t\t\tfamily: \"mongo\",\n\t\t\ttarget: \"mongo\",\n\t\t\t...ifDefined(\"enumInferenceCodecs\", input.enumInferenceCodecs),\n\t\t\t...ifDefined(\"codecLookup\", codecLookup),\n\t\t\tdiagnostics: { push: (d) => {\n\t\t\t\tdiagnostics.pushExternal(blindCast(d));\n\t\t\t} }\n\t\t},\n\t\tdiagnostics\n\t});\n\tconst codecIdByEnumName = new Map(Object.entries(builtEnums).map(([name, e]) => [name, e.codecId]));\n\tconst models = {};\n\tconst collections = {};\n\tconst roots = {};\n\tconst allFkRelations = [];\n\tconst indexSpans = /* @__PURE__ */ new Map();\n\tconst indexSources = /* @__PURE__ */ new Map();\n\tconst modelIndexesByName = /* @__PURE__ */ new Map();\n\tconst backrelationCandidates = [];\n\tconst invalidFkPairings = [];\n\tfor (const pslModel of allModels) {\n\t\tconst modelSource = diagnosticSource(sources, pslModel.node.syntax);\n\t\tconst metadata = modelMetadataByName.get(pslModel.name);\n\t\tif (!metadata) continue;\n\t\tconst { collectionName, fieldMappings } = metadata;\n\t\tconst specContext = specContextFor(pslModel);\n\t\tconst fields = {};\n\t\tconst relations = {};\n\t\tfor (const field of Object.values(pslModel.fields)) {\n\t\t\tif (isRelationField(field, modelNames)) {\n\t\t\t\tconst relationNode = findFieldAttributeNode(field, \"relation\");\n\t\t\t\tconst relation = relationNode ? interpretFieldAttribute({\n\t\t\t\t\tnode: relationNode,\n\t\t\t\t\tspec: mongoAttributeSpecs.field.relation({\n\t\t\t\t\t\t...specContext,\n\t\t\t\t\t\tfield\n\t\t\t\t\t}),\n\t\t\t\t\tmodel: pslModel,\n\t\t\t\t\tfield,\n\t\t\t\t\tsources,\n\t\t\t\t\tdiagnostics,\n\t\t\t\t\tresolveReferencedModel: () => allModels.find((m) => m.name === field.typeName)\n\t\t\t\t}) : void 0;\n\t\t\t\tif (field.list || !(relation?.fields && relation?.references)) {\n\t\t\t\t\tbackrelationCandidates.push({\n\t\t\t\t\t\tmodelName: pslModel.name,\n\t\t\t\t\t\tfieldName: field.name,\n\t\t\t\t\t\ttargetModelName: field.typeName,\n\t\t\t\t\t\t...ifDefined(\"relationName\", relation?.name),\n\t\t\t\t\t\tcardinality: field.list ? \"1:N\" : \"1:1\",\n\t\t\t\t\t\tfield\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (relation?.fields && relation?.references) {\n\t\t\t\t\tif (resolveToOneRelationNullable({\n\t\t\t\t\t\tdeclaredNullable: field.optional,\n\t\t\t\t\t\tlocalFieldNullability: relation.fields.map((localFieldName) => pslModel.fields[localFieldName]?.optional === true),\n\t\t\t\t\t\townsReference: true\n\t\t\t\t\t}).contradiction !== void 0) {\n\t\t\t\t\t\tdiagnostics.push(relationNullabilityMismatchDiagnostic(pslModel.name, field, sources));\n\t\t\t\t\t\tinvalidFkPairings.push({\n\t\t\t\t\t\t\tpairKey: fkRelationPairKey(pslModel.name, field.typeName),\n\t\t\t\t\t\t\t...ifDefined(\"relationName\", relation.name)\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst localMapped = relation.fields.map((f) => fieldMappings.pslNameToMapped.get(f) ?? f);\n\t\t\t\t\tconst targetFieldMappings = modelMetadataByName.get(field.typeName)?.fieldMappings;\n\t\t\t\t\tconst targetMapped = relation.references.map((f) => targetFieldMappings?.pslNameToMapped.get(f) ?? f);\n\t\t\t\t\trelations[field.name] = {\n\t\t\t\t\t\tto: mongoCrossRef(field.typeName),\n\t\t\t\t\t\tcardinality: \"N:1\",\n\t\t\t\t\t\tnullable: field.optional,\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tlocalFields: localMapped,\n\t\t\t\t\t\t\ttargetFields: targetMapped\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tallFkRelations.push({\n\t\t\t\t\t\tdeclaringModel: pslModel.name,\n\t\t\t\t\t\tfieldName: field.name,\n\t\t\t\t\t\ttargetModel: field.typeName,\n\t\t\t\t\t\t...ifDefined(\"relationName\", relation.name),\n\t\t\t\t\t\tlocalFields: localMapped,\n\t\t\t\t\t\ttargetFields: targetMapped\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst resolved = resolveNonRelationField(field, pslModel.name, compositeTypeNames, scalarTypeCodecIds, codecIdByEnumName, sources, diagnostics);\n\t\t\tif (!resolved) continue;\n\t\t\tconst mappedName = fieldMappings.pslNameToMapped.get(field.name) ?? field.name;\n\t\t\tfields[mappedName] = resolved;\n\t\t}\n\t\tconst isVariantModel = pslModel.attributes.some((attr) => attr.name === \"base\");\n\t\tconst hasIdField = Object.values(pslModel.fields).filter((field) => {\n\t\t\tconst idNode = findFieldAttributeNode(field, \"id\");\n\t\t\tif (!idNode) return false;\n\t\t\treturn interpretFieldAttribute({\n\t\t\t\tnode: idNode,\n\t\t\t\tspec: mongoAttributeSpecs.field.id({\n\t\t\t\t\t...specContext,\n\t\t\t\t\tfield\n\t\t\t\t}),\n\t\t\t\tmodel: pslModel,\n\t\t\t\tfield,\n\t\t\t\tsources,\n\t\t\t\tdiagnostics\n\t\t\t}) !== void 0;\n\t\t}).length > 0;\n\t\tif (!isVariantModel) if (!hasIdField) diagnostics.pushUnlocated({\n\t\t\tcode: \"PSL_MISSING_ID_FIELD\",\n\t\t\tmessage: `Model \"${pslModel.name}\" has no field with @id attribute. Every model must have exactly one @id field.`,\n\t\t\t...modelSource.at()\n\t\t});\n\t\telse {\n\t\t\tconst objectIdCodecId = scalarTypeCodecIds.get(MONGO_OBJECT_ID_PSL_TYPE);\n\t\t\tconst idField = fields[\"_id\"];\n\t\t\tif (!(idField !== void 0 && idField.type.kind === \"scalar\" && objectIdCodecId !== void 0 && idField.type.codecId === objectIdCodecId)) diagnostics.pushUnlocated({\n\t\t\t\tcode: \"PSL_MONGO_ID_REQUIRED\",\n\t\t\t\tmessage: `Model \"${pslModel.name}\" must declare an _id field of type ObjectId (e.g. \\`id ObjectId @id @map(\"_id\")\\`).`,\n\t\t\t\t...modelSource.at()\n\t\t\t});\n\t\t}\n\t\tmodels[pslModel.name] = {\n\t\t\tfields,\n\t\t\trelations,\n\t\t\tstorage: { collection: collectionName }\n\t\t};\n\t\tconst modelIndexes = collectIndexes(pslModel, specContext, fieldMappings, modelNames, sources, diagnostics, indexSpans, indexSources);\n\t\tmodelIndexesByName.set(pslModel.name, modelIndexes);\n\t\tconst existingColl = collections[collectionName];\n\t\tif (existingColl && modelIndexes.length > 0) collections[collectionName] = { indexes: [...collectionIndexes(existingColl), ...modelIndexes] };\n\t\telse if (!existingColl) collections[collectionName] = modelIndexes.length > 0 ? { indexes: modelIndexes } : {};\n\t\troots[collectionName] = mongoCrossRef(pslModel.name);\n\t}\n\tconst valueObjects = {};\n\tfor (const compositeType of allCompositeTypes) {\n\t\tconst fields = {};\n\t\tfor (const field of Object.values(compositeType.fields)) {\n\t\t\tconst resolved = resolveNonRelationField(field, compositeType.name, compositeTypeNames, scalarTypeCodecIds, codecIdByEnumName, sources, diagnostics);\n\t\t\tif (!resolved) continue;\n\t\t\tfields[field.name] = resolved;\n\t\t}\n\t\tvalueObjects[compositeType.name] = { fields };\n\t}\n\tconst fkRelationsByPair = /* @__PURE__ */ new Map();\n\tfor (const fk of allFkRelations) {\n\t\tconst key = fkRelationPairKey(fk.declaringModel, fk.targetModel);\n\t\tconst existing = fkRelationsByPair.get(key);\n\t\tif (existing) existing.push(fk);\n\t\telse fkRelationsByPair.set(key, [fk]);\n\t}\n\tfor (const candidate of backrelationCandidates) {\n\t\tconst candidateSource = diagnosticSource(sources, candidate.field.node.syntax);\n\t\tconst pairKey = fkRelationPairKey(candidate.targetModelName, candidate.modelName);\n\t\tconst pairMatches = fkRelationsByPair.get(pairKey) ?? [];\n\t\tconst matches = candidate.relationName ? pairMatches.filter((r) => r.relationName === candidate.relationName) : [...pairMatches];\n\t\tif (matches.length === 0) {\n\t\t\tif (consumeInvalidFkPairing(candidate, pairKey, invalidFkPairings)) continue;\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_ORPHANED_BACKRELATION\",\n\t\t\t\tmessage: `Backrelation list field \"${candidate.modelName}.${candidate.fieldName}\" has no matching FK-side relation on model \"${candidate.targetModelName}\". Add @relation(fields: [...], references: [...]) on the FK-side relation or use an explicit join model for many-to-many.`,\n\t\t\t\t...candidateSource.at(candidate.field.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (matches.length > 1) {\n\t\t\tdiagnostics.push({\n\t\t\t\tcode: \"PSL_AMBIGUOUS_BACKRELATION\",\n\t\t\t\tmessage: `Backrelation list field \"${candidate.modelName}.${candidate.fieldName}\" matches multiple FK-side relations on model \"${candidate.targetModelName}\". Add @relation(\"...\") to both sides to disambiguate.`,\n\t\t\t\t...candidateSource.at(candidate.field.span)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst fk = matches[0];\n\t\tif (!fk) continue;\n\t\tconst modelEntry = models[candidate.modelName];\n\t\tif (!modelEntry) continue;\n\t\tif (candidate.cardinality === \"1:1\" && !candidate.field.optional) diagnostics.push(requiredOneToOneBackrelationDiagnostic({\n\t\t\tmodelName: candidate.modelName,\n\t\t\tfield: candidate.field,\n\t\t\ttargetModelName: candidate.targetModelName,\n\t\t\tsources,\n\t\t\trecordNoun: \"document\"\n\t\t}));\n\t\tmodelEntry.relations[candidate.fieldName] = {\n\t\t\tto: mongoCrossRef(candidate.targetModelName),\n\t\t\t...candidate.cardinality === \"1:N\" ? { cardinality: \"1:N\" } : {\n\t\t\t\tcardinality: \"1:1\",\n\t\t\t\tnullable: true\n\t\t\t},\n\t\t\ton: {\n\t\t\t\tlocalFields: fk.targetFields,\n\t\t\t\ttargetFields: fk.localFields\n\t\t\t}\n\t\t};\n\t}\n\tconst { discriminatorDeclarations, baseDeclarations } = collectPolymorphismDeclarations(allModels, specContextFor, modelMetadataByName, sources, diagnostics);\n\tconst polyResult = resolvePolymorphism({\n\t\tsources,\n\t\tmodels,\n\t\troots,\n\t\tcollections,\n\t\tallModels,\n\t\tdiscriminatorDeclarations,\n\t\tbaseDeclarations,\n\t\tmodelNames,\n\t\tindexSpans,\n\t\tmodelIndexesByName,\n\t\tmodelMetadataByName,\n\t\tindexSources\n\t});\n\tif (diagnostics.length > 0 || polyResult.diagnostics.length > 0 || (input.seedDiagnostics?.length ?? 0) > 0) return notOk({\n\t\tsummary: \"PSL to Mongo contract interpretation failed\",\n\t\tdiagnostics: [\n\t\t\t...input.seedDiagnostics ?? [],\n\t\t\t...diagnostics.toExternal(),\n\t\t\t...polyResult.diagnostics.toExternal()\n\t\t]\n\t});\n\tconst resolvedModels = polyResult.models;\n\tconst resolvedCollections = polyResult.collections;\n\tconst storageValueSets = {};\n\tconst enumEntries = Object.entries(builtEnums);\n\tif (enumEntries.length > 0) {\n\t\tassertDefined(codecLookup, \"Mongo PSL interpretation requires a codec lookup to encode enum values\");\n\t\tfor (const [enumName, builtEnum] of enumEntries) storageValueSets[enumName] = {\n\t\t\tkind: \"valueSet\",\n\t\t\tvalues: builtEnum.members.map((m) => encodeEnumValue(m.value, builtEnum.codecId, codecLookup))\n\t\t};\n\t}\n\tfor (const [, modelEntry] of Object.entries(resolvedModels)) {\n\t\tif (modelEntry.base) continue;\n\t\tconst coll = resolvedCollections[modelEntry.storage.collection];\n\t\tif (!coll) continue;\n\t\tif (modelEntry.discriminator && modelEntry.variants) {\n\t\t\tconst variantEntries = Object.entries(modelEntry.variants).map(([variantName, { value }]) => ({\n\t\t\t\tdiscriminatorValue: value,\n\t\t\t\tfields: resolvedModels[variantName]?.fields ?? {}\n\t\t\t}));\n\t\t\tcoll[\"validator\"] = derivePolymorphicJsonSchema(modelEntry.fields, modelEntry.discriminator.field, variantEntries, valueObjects, codecLookup, storageValueSets);\n\t\t} else coll[\"validator\"] = deriveJsonSchema(modelEntry.fields, valueObjects, codecLookup, storageValueSets);\n\t}\n\tconst target = \"mongo\";\n\tconst targetFamily = \"mongo\";\n\tconst collectionInputs = {};\n\tfor (const [name, coll] of Object.entries(resolvedCollections)) {\n\t\tconst raw = {};\n\t\tif (coll[\"indexes\"] != null) raw[\"indexes\"] = coll[\"indexes\"];\n\t\tif (coll[\"validator\"] != null) raw[\"validator\"] = coll[\"validator\"];\n\t\tif (coll[\"options\"] != null) raw[\"options\"] = coll[\"options\"];\n\t\tcollectionInputs[name] = blindCast(raw);\n\t}\n\tconst unboundNamespace = buildMongoNamespace({\n\t\tid: UNBOUND_NAMESPACE_ID,\n\t\tentries: {\n\t\t\tcollection: collectionInputs,\n\t\t\t...Object.keys(storageValueSets).length > 0 ? { valueSet: storageValueSets } : {}\n\t\t}\n\t});\n\tconst storage = blindCast(new MongoStorage({\n\t\tstorageHash: computeStorageHash({\n\t\t\ttarget,\n\t\t\ttargetFamily,\n\t\t\tstorage: { namespaces: { [UNBOUND_NAMESPACE_ID]: {\n\t\t\t\tid: UNBOUND_NAMESPACE_ID,\n\t\t\t\tentries: {\n\t\t\t\t\tcollection: unboundNamespace.entries.collection,\n\t\t\t\t\t...unboundNamespace.entries.valueSet !== void 0 ? { valueSet: unboundNamespace.entries.valueSet } : {}\n\t\t\t\t}\n\t\t\t} } },\n\t\t\t...mongoContractCanonicalizationHooks\n\t\t}),\n\t\tnamespaces: { [UNBOUND_NAMESPACE_ID]: unboundNamespace }\n\t}));\n\tconst capabilities = {};\n\tconst hasEnums = Object.keys(builtEnums).length > 0;\n\treturn ok({\n\t\ttargetFamily,\n\t\ttarget,\n\t\troots: polyResult.roots,\n\t\tdomain: { namespaces: { [UNBOUND_NAMESPACE_ID]: {\n\t\t\tmodels: polyResult.models,\n\t\t\t...Object.keys(valueObjects).length > 0 ? { valueObjects } : {},\n\t\t\t...hasEnums ? { enum: builtEnums } : {}\n\t\t} } },\n\t\tstorage,\n\t\textensions: {},\n\t\tcapabilities,\n\t\tprofileHash: computeProfileHash({\n\t\t\ttarget,\n\t\t\ttargetFamily,\n\t\t\tcapabilities\n\t\t}),\n\t\tmeta: {}\n\t});\n}\n//#endregion\nexport { derivePolymorphicJsonSchema as i, mongoAttributeSpecs as n, deriveJsonSchema as r, interpretPslDocumentToMongoContract as t };\n\n//# sourceMappingURL=interpreter-ConSw3cr.mjs.map"],"mappings":"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"}
|