@prisma/orm-framework 8.0.0-rc.14-dev.42 → 8.0.0-rc.14-dev.43

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.
@@ -10,5 +10,5 @@ import { t as applySpecifierDefaultControlPolicy } from "./apply-specifier-defau
10
10
  import { n as ContractValidationPhase, t as ContractValidationError } from "./contract-validation-error-R7cMoK04.mjs";
11
11
  import { a as EnumValues, c as buildEnumsMapForNamespace, i as EnumMemberNames, l as buildNamespacedEnums, n as EnumAccessor, o as NamespaceEnumAccessors, r as EnumEntriesToAccessors, s as NamespacedEnums, t as ContractEnumAccessor, u as createEnumAccessor } from "./enum-accessor-YBT4SFYM.mjs";
12
12
  import { a as compareByNameProperty, c as matchesPathPattern, i as PathSegment$1, n as PathPattern, o as createPreserveEmptyPredicate, r as PathSegment, s as createStorageSort, t as NamedArraySortTarget } from "./hashing-utils-pciIgMxz.mjs";
13
- import { n as DomainModelShape, r as validateContractDomain, t as DomainContractShape } from "./validate-domain-M93ZRMRA.mjs";
13
+ import { n as DomainModelShape, r as validateContractDomain, t as DomainContractShape } from "./validate-domain-DaAswa8n.mjs";
14
14
  export { type $, type ApplicationDomain, type ApplicationDomainNamespace, type Brand, type CanonicalizeContractOptions, type ColumnDefault, type ColumnDefaultLiteralInputValue, type ColumnDefaultLiteralValue, type Contract, type ContractDiscriminator, type ContractEmbedRelation, type ContractEnum, type ContractEnumAccessor, type ContractExecutionSection, ContractExecutionSectionSchema, type ContractField, type ContractFieldType, type ContractManyToManyRelation, type ContractMarkerRecord, type ContractModel, type ContractModelBase, type ContractNonJunctionRelation, type ContractReferenceRelation, type ContractRelation, type ContractRelationOn, type ContractRelationThrough, type ContractToManyRelation, type ContractToOneRelation, ContractValidationError, type ContractValidationPhase, type ContractValueObject, type ContractValueObjectDefinitions, type ContractVariantEntry, type ContractWithDomain, type ControlPolicy, type CrossReference, CrossReferenceSchema, type DocCollection, type DocIndex, type DomainContractShape, type DomainModelShape, type EmbedRelationKeys, type EnumAccessor, type EnumEntriesToAccessors, type EnumMemberNames, type EnumValues, type ExecutionHashBase, type ExecutionMutationDefault, type ExecutionMutationDefaultPhases, type ExecutionMutationDefaultValue, type ExecutionSection, type Expr, type FieldType, type GeneratedValueSpec, type JsonPrimitive, type JsonValue, type LedgerEntryRecord, type ModelStorageBase, type NamedArraySortTarget, type NamespaceEnumAccessors, type NamespaceId, type NamespacedEnums, type PathPattern, type PlanMeta, type PathSegment as PreserveEmptyPathSegment, type PreserveEmptyPredicate, type ProfileHashBase, type ReferenceRelationKeys, type ResolvedDomainModel, type ScalarFieldType, type SerializeContract, type Source, type StorageBase, type StorageEntitySlot, type StorageHashBase, type StorageNamespace, type StorageSort, type PathSegment$1 as StorageSortPathSegment, UNBOUND_DOMAIN_NAMESPACE_ID, type UnionFieldType, type ValueObjectFieldType, type ValueSetRef, applySpecifierDefaultControlPolicy, asNamespaceId, buildEnumsMapForNamespace, buildExecutionSection, buildNamespacedEnums, canonicalizeContract, canonicalizeContractToObject, compareByNameProperty, computeExecutionHash, computeProfileHash, computeStorageHash, coreHash, createEnumAccessor, createPreserveEmptyPredicate, createStorageSort, crossRef, domainModelsAtDefaultNamespace, domainValueObjectsAtDefaultNamespace, effectiveControlPolicy, executionHash, isColumnDefault, isColumnDefaultLiteralInputValue, isExecutionMutationDefaultValue, isPlainRecord, matchesPathPattern, profileHash, resolveDomainModel, soleDomainNamespaceId, validateContractDomain };
package/dist/contract.mjs CHANGED
@@ -8,5 +8,5 @@ import { a as computeProfileHash, i as computeExecutionHash, n as canonicalizeCo
8
8
  import { t as resolveDomainModel } from "./resolve-domain-model-BovPAsW2-8rwyzjxp.mjs";
9
9
  import { t as asNamespaceId } from "./namespace-id-asbWpwMw-3yxn-tRe.mjs";
10
10
  import { a as domainModelsAtDefaultNamespace, c as executionHash, d as isExecutionMutationDefaultValue, f as profileHash, i as crossRef, l as isColumnDefault, n as CrossReferenceSchema, o as domainValueObjectsAtDefaultNamespace, r as coreHash, s as effectiveControlPolicy, t as ContractExecutionSectionSchema, u as isColumnDefaultLiteralInputValue } from "./types-QyibIZST.mjs";
11
- import { t as validateContractDomain } from "./validate-domain-DgY72oWI.mjs";
11
+ import { t as validateContractDomain } from "./validate-domain-BWxgeXy0.mjs";
12
12
  export { ContractExecutionSectionSchema, ContractValidationError, CrossReferenceSchema, UNBOUND_DOMAIN_NAMESPACE_ID, applySpecifierDefaultControlPolicy, asNamespaceId, buildEnumsMapForNamespace, buildExecutionSection, buildNamespacedEnums, canonicalizeContract, canonicalizeContractToObject, compareByNameProperty, computeExecutionHash, computeProfileHash, computeStorageHash, coreHash, createEnumAccessor, createPreserveEmptyPredicate, createStorageSort, crossRef, domainModelsAtDefaultNamespace, domainValueObjectsAtDefaultNamespace, effectiveControlPolicy, executionHash, isColumnDefault, isColumnDefaultLiteralInputValue, isExecutionMutationDefaultValue, isPlainRecord, matchesPathPattern, profileHash, resolveDomainModel, soleDomainNamespaceId, validateContractDomain };
@@ -1,2 +1,2 @@
1
- import { n as DomainModelShape, r as validateContractDomain, t as DomainContractShape } from "./validate-domain-M93ZRMRA.mjs";
1
+ import { n as DomainModelShape, r as validateContractDomain, t as DomainContractShape } from "./validate-domain-DaAswa8n.mjs";
2
2
  export { type DomainContractShape, type DomainModelShape, validateContractDomain };
@@ -1,2 +1,2 @@
1
- import { t as validateContractDomain } from "./validate-domain-DgY72oWI.mjs";
1
+ import { t as validateContractDomain } from "./validate-domain-BWxgeXy0.mjs";
2
2
  export { validateContractDomain };
@@ -100,6 +100,17 @@ function validateDiscriminators(modelIndex, errors) {
100
100
  if (!model.variants || Object.keys(model.variants).length === 0) errors.push(`Model "${namespaceId}:${modelName}" has discriminator but no variants`);
101
101
  if (!Object.hasOwn(model.fields, model.discriminator.field)) errors.push(`Discriminator field "${model.discriminator.field}" is not a field on model "${namespaceId}:${modelName}"`);
102
102
  }
103
+ if (model.variants) {
104
+ const variantsByValue = /* @__PURE__ */ new Map();
105
+ for (const [variantName, { value }] of Object.entries(model.variants)) {
106
+ const existingVariant = variantsByValue.get(value);
107
+ if (existingVariant !== void 0) {
108
+ errors.push(`Discriminator value "${value}" is used by both "${namespaceId}:${existingVariant}" and "${namespaceId}:${variantName}" on base model "${namespaceId}:${modelName}"`);
109
+ continue;
110
+ }
111
+ variantsByValue.set(value, variantName);
112
+ }
113
+ }
103
114
  if (model.variants && Object.keys(model.variants).length > 0 && !model.discriminator) errors.push(`Model "${namespaceId}:${modelName}" has variants but no discriminator`);
104
115
  if (model.base) {
105
116
  if (model.discriminator) errors.push(`Model "${namespaceId}:${modelName}" has base and must not have discriminator`);
@@ -157,4 +168,4 @@ function validateFieldModifiers(modelIndex, contract, errors) {
157
168
  //#endregion
158
169
  export { validateContractDomain as t };
159
170
 
160
- //# sourceMappingURL=validate-domain-DgY72oWI.mjs.map
171
+ //# sourceMappingURL=validate-domain-BWxgeXy0.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-domain-BWxgeXy0.mjs","names":[],"sources":["../../../../1-framework/0-foundation/contract/dist/validate-domain.mjs"],"sourcesContent":["import { t as asNamespaceId } from \"./namespace-id-asbWpwMw.mjs\";\nimport { t as ContractValidationError } from \"./contract-validation-error-DEiWp_EI.mjs\";\nimport { blindCast } from \"@internal/utils/casts\";\n//#region src/validate-domain.ts\nfunction indexDomainModels(contract) {\n\tconst index = /* @__PURE__ */ new Map();\n\tfor (const [namespaceKey, namespace] of Object.entries(contract.domain.namespaces)) {\n\t\tconst namespaceId = asNamespaceId(namespaceKey);\n\t\tlet modelsInNamespace = index.get(namespaceId);\n\t\tif (modelsInNamespace === void 0) {\n\t\t\tmodelsInNamespace = /* @__PURE__ */ new Map();\n\t\t\tindex.set(namespaceId, modelsInNamespace);\n\t\t}\n\t\tfor (const [name, model] of Object.entries(namespace.models)) modelsInNamespace.set(name, {\n\t\t\tnamespaceId,\n\t\t\tname,\n\t\t\tmodel\n\t\t});\n\t}\n\treturn index;\n}\nfunction lookupModel(index, ref) {\n\treturn index.get(ref.namespace)?.get(ref.model);\n}\nfunction* iterateIndexedModels(index) {\n\tfor (const modelsInNamespace of index.values()) for (const entry of modelsInNamespace.values()) yield entry;\n}\nfunction validateContractDomain(contract) {\n\tconst errors = [];\n\tconst modelIndex = indexDomainModels(contract);\n\tvalidateRoots(contract, modelIndex, errors);\n\tvalidateVariantsAndBases(modelIndex, errors);\n\tvalidateRelationTargets(modelIndex, errors);\n\tvalidateRelationNullability(modelIndex, errors);\n\tvalidateDiscriminators(modelIndex, errors);\n\tvalidateOwnership(contract, modelIndex, errors);\n\tvalidateValueObjectReferences(contract, errors);\n\tvalidateFieldModifiers(modelIndex, contract, errors);\n\tif (errors.length > 0) throw new ContractValidationError(`Contract domain validation failed:\\n- ${errors.join(\"\\n- \")}`, \"domain\");\n}\nfunction validateRoots(contract, modelIndex, errors) {\n\tconst seenRootTargets = /* @__PURE__ */ new Map();\n\tfor (const [rootKey, crossRef] of Object.entries(contract.roots)) {\n\t\tlet modelsInNamespace = seenRootTargets.get(crossRef.namespace);\n\t\tif (modelsInNamespace === void 0) {\n\t\t\tmodelsInNamespace = /* @__PURE__ */ new Set();\n\t\t\tseenRootTargets.set(crossRef.namespace, modelsInNamespace);\n\t\t}\n\t\tif (modelsInNamespace.has(crossRef.model)) errors.push(`Duplicate root value: \"${crossRef.namespace}:${crossRef.model}\" is mapped by multiple root keys`);\n\t\tmodelsInNamespace.add(crossRef.model);\n\t\tif (!lookupModel(modelIndex, crossRef)) errors.push(`Root \"${rootKey}\" references model \"${crossRef.namespace}:${crossRef.model}\" which does not exist in domain.namespaces`);\n\t}\n}\nfunction validateVariantsAndBases(modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) {\n\t\tif (model.variants) for (const variantName of Object.keys(model.variants)) {\n\t\t\tconst variantEntry = lookupModel(modelIndex, {\n\t\t\t\tnamespace: namespaceId,\n\t\t\t\tmodel: variantName\n\t\t\t});\n\t\t\tif (!variantEntry) {\n\t\t\t\terrors.push(`Model \"${namespaceId}:${modelName}\" lists variant \"${variantName}\" which does not exist at that namespace coordinate`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst variantBase = variantEntry.model.base;\n\t\t\tif (variantBase?.namespace !== namespaceId || variantBase?.model !== modelName) errors.push(`Variant \"${namespaceId}:${variantName}\" has base \"${variantBase?.namespace ?? \"?\"}:${variantBase?.model ?? \"(none)\"}\" but expected \"${namespaceId}:${modelName}\"`);\n\t\t}\n\t\tif (model.base) {\n\t\t\tconst baseEntry = lookupModel(modelIndex, model.base);\n\t\t\tif (!baseEntry) {\n\t\t\t\terrors.push(`Model \"${namespaceId}:${modelName}\" has base \"${model.base.namespace}:${model.base.model}\" which does not exist in domain.namespaces`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!baseEntry.model.variants || !Object.hasOwn(baseEntry.model.variants, modelName)) errors.push(`Model \"${namespaceId}:${modelName}\" has base \"${model.base.namespace}:${model.base.model}\" which does not list it as a variant`);\n\t\t}\n\t}\n}\nfunction validateRelationTargets(modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) for (const [relName, relation] of Object.entries(model.relations ?? {})) {\n\t\tif (relation.to.space !== void 0) continue;\n\t\tif (!lookupModel(modelIndex, relation.to)) errors.push(`Relation \"${relName}\" on model \"${namespaceId}:${modelName}\" targets \"${relation.to.namespace}:${relation.to.model}\" which does not exist in domain.namespaces`);\n\t}\n}\nfunction relationKindLabel(relation) {\n\treturn relation.on === void 0 ? \"embed relation\" : `${relation.cardinality} relation`;\n}\nfunction validateRelationNullability(modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) for (const [relName, relation] of Object.entries(model.relations ?? {})) {\n\t\tconst location = `Relation \"${relName}\" on model \"${namespaceId}:${modelName}\"`;\n\t\tif (relation.on !== void 0 && (relation.cardinality === \"1:1\" || relation.cardinality === \"N:1\")) {\n\t\t\tif (relation.nullable !== void 0 && typeof relation.nullable !== \"boolean\") errors.push(`${location} is a ${relation.cardinality} relation and its \"nullable\" must be a boolean`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (relation.nullable !== void 0) errors.push(`${location} is a ${relationKindLabel(relation)} and must not carry \"nullable\"`);\n\t}\n}\nfunction validateDiscriminators(modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) {\n\t\tif (model.discriminator) {\n\t\t\tif (!model.variants || Object.keys(model.variants).length === 0) errors.push(`Model \"${namespaceId}:${modelName}\" has discriminator but no variants`);\n\t\t\tif (!Object.hasOwn(model.fields, model.discriminator.field)) errors.push(`Discriminator field \"${model.discriminator.field}\" is not a field on model \"${namespaceId}:${modelName}\"`);\n\t\t}\n\t\tif (model.variants) {\n\t\t\tconst variantsByValue = /* @__PURE__ */ new Map();\n\t\t\tfor (const [variantName, { value }] of Object.entries(model.variants)) {\n\t\t\t\tconst existingVariant = variantsByValue.get(value);\n\t\t\t\tif (existingVariant !== void 0) {\n\t\t\t\t\terrors.push(`Discriminator value \"${value}\" is used by both \"${namespaceId}:${existingVariant}\" and \"${namespaceId}:${variantName}\" on base model \"${namespaceId}:${modelName}\"`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvariantsByValue.set(value, variantName);\n\t\t\t}\n\t\t}\n\t\tif (model.variants && Object.keys(model.variants).length > 0 && !model.discriminator) errors.push(`Model \"${namespaceId}:${modelName}\" has variants but no discriminator`);\n\t\tif (model.base) {\n\t\t\tif (model.discriminator) errors.push(`Model \"${namespaceId}:${modelName}\" has base and must not have discriminator`);\n\t\t\tif (model.variants && Object.keys(model.variants).length > 0) errors.push(`Model \"${namespaceId}:${modelName}\" has base and must not have variants`);\n\t\t}\n\t}\n}\nfunction validateOwnership(contract, modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) {\n\t\tif (!model.owner) continue;\n\t\tif (model.owner === modelName) errors.push(`Model \"${namespaceId}:${modelName}\" cannot own itself`);\n\t\tif (!lookupModel(modelIndex, {\n\t\t\tnamespace: namespaceId,\n\t\t\tmodel: model.owner\n\t\t})) errors.push(`Model \"${namespaceId}:${modelName}\" has owner \"${namespaceId}:${model.owner}\" which does not exist in domain.namespaces`);\n\t\tfor (const [rootKey, rootRef] of Object.entries(contract.roots)) if (rootRef.namespace === namespaceId && rootRef.model === modelName) errors.push(`Owned model \"${namespaceId}:${modelName}\" must not appear in roots (found as root \"${rootKey}\")`);\n\t}\n}\nfunction validateValueObjectReferences(contract, errors) {\n\tconst voNamesByNamespace = /* @__PURE__ */ new Map();\n\tfor (const [namespaceKey, namespace] of Object.entries(contract.domain.namespaces)) {\n\t\tconst namespaceId = asNamespaceId(namespaceKey);\n\t\tvoNamesByNamespace.set(namespaceId, new Set(Object.keys(namespace.valueObjects ?? {})));\n\t}\n\tfunction checkType(type, location, namespaceId) {\n\t\tif (!type) return;\n\t\tconst voNames = voNamesByNamespace.get(namespaceId) ?? /* @__PURE__ */ new Set();\n\t\tif (type.kind === \"valueObject\" && type.name && !voNames.has(type.name)) {\n\t\t\terrors.push(`${location} references value object \"${namespaceId}:${type.name}\" which does not exist in that namespace's valueObjects`);\n\t\t\treturn;\n\t\t}\n\t\tif (type.kind === \"union\") for (const member of type.members ?? []) checkType(member, location, namespaceId);\n\t}\n\tfor (const [namespaceKey, namespace] of Object.entries(contract.domain.namespaces)) {\n\t\tconst namespaceId = asNamespaceId(namespaceKey);\n\t\tfor (const [modelName, model] of Object.entries(namespace.models)) for (const [fieldName, field] of Object.entries(model.fields)) checkType(blindCast(field)?.type, `Model \"${namespaceId}:${modelName}\" field \"${fieldName}\"`, namespaceId);\n\t\tfor (const [voName, vo] of Object.entries(namespace.valueObjects ?? {})) for (const [fieldName, field] of Object.entries(vo.fields)) checkType(blindCast(field)?.type, `Value object \"${namespaceId}:${voName}\" field \"${fieldName}\"`, namespaceId);\n\t}\n}\nfunction validateFieldModifiers(modelIndex, contract, errors) {\n\tfunction validateField(location, field) {\n\t\tconst candidate = blindCast(field);\n\t\tconst many = candidate?.many;\n\t\tconst isList = typeof many === \"object\" && many !== null && !Array.isArray(many) && Object.keys(many).length === 1 && \"elementNullable\" in many && typeof many.elementNullable === \"boolean\";\n\t\tif (many !== void 0 && many !== false && !isList) errors.push(`${location} has invalid \"many\"; expected false or an elementNullable descriptor`);\n\t\tif (candidate?.elementNullable !== void 0) errors.push(`${location} cannot have sibling \"elementNullable\"; put it inside \"many\"`);\n\t\tif (isList && candidate?.dict) errors.push(`${location} cannot have both \"many\" and \"dict\" modifiers`);\n\t}\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) for (const [fieldName, field] of Object.entries(model.fields)) validateField(`Model \"${namespaceId}:${modelName}\" field \"${fieldName}\"`, field);\n\tfor (const [namespaceKey, namespace] of Object.entries(contract.domain.namespaces)) {\n\t\tconst namespaceId = asNamespaceId(namespaceKey);\n\t\tfor (const [voName, vo] of Object.entries(namespace.valueObjects ?? {})) for (const [fieldName, field] of Object.entries(vo.fields)) validateField(`Value object \"${namespaceId}:${voName}\" field \"${fieldName}\"`, field);\n\t}\n}\n//#endregion\nexport { validateContractDomain };\n\n//# sourceMappingURL=validate-domain.mjs.map"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { D as CrossReference, E as ContractWithDomain } from "./domain-envelope-C2vVIWGK-C5x7cBpU.mjs";
1
+ import { D as CrossReference, E as ContractWithDomain, T as ContractVariantEntry } from "./domain-envelope-C2vVIWGK-C5x7cBpU.mjs";
2
2
  //#region ../../../1-framework/0-foundation/contract/dist/validate-domain.d.mts
3
3
  //#region src/validate-domain.d.ts
4
4
  interface DomainRelationShape {
@@ -13,7 +13,7 @@ interface DomainModelShape {
13
13
  readonly discriminator?: {
14
14
  readonly field: string;
15
15
  };
16
- readonly variants?: Record<string, unknown>;
16
+ readonly variants?: Record<string, ContractVariantEntry>;
17
17
  readonly base?: CrossReference;
18
18
  readonly owner?: string;
19
19
  }
@@ -23,4 +23,4 @@ interface DomainContractShape extends ContractWithDomain {
23
23
  declare function validateContractDomain(contract: DomainContractShape): void;
24
24
  //#endregion
25
25
  export { DomainModelShape as n, validateContractDomain as r, DomainContractShape as t };
26
- //# sourceMappingURL=validate-domain-M93ZRMRA.d.mts.map
26
+ //# sourceMappingURL=validate-domain-DaAswa8n.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-domain-DaAswa8n.d.mts","names":[],"sources":["../../../../1-framework/0-foundation/contract/dist/validate-domain.d.mts"],"mappings":";;;UAEU;WACC,IAAI;WACJ;WACA;WACA;;UAED;WACC,QAAQ;WACR,YAAY,eAAe;WAC3B;aACE;;WAEF,WAAW,eAAe;WAC1B,OAAO;WACP;;UAED,4BAA4B;WAC3B,OAAO,eAAe;;iBAEhB,uBAAuB,UAAU"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/orm-framework",
3
- "version": "8.0.0-rc.14-dev.42",
3
+ "version": "8.0.0-rc.14-dev.43",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -16,20 +16,20 @@
16
16
  "uniku": "^0.5.0"
17
17
  },
18
18
  "devDependencies": {
19
- "@internal/config": "8.0.0-rc.14-dev.42",
20
- "@internal/contract": "8.0.0-rc.14-dev.42",
21
- "@internal/contract-authoring": "8.0.0-rc.14-dev.42",
22
- "@internal/errors": "8.0.0-rc.14-dev.42",
23
- "@internal/framework-components": "8.0.0-rc.14-dev.42",
24
- "@internal/ids": "8.0.0-rc.14-dev.42",
25
- "@internal/operations": "8.0.0-rc.14-dev.42",
26
- "@internal/psl-parser": "8.0.0-rc.14-dev.42",
27
- "@internal/psl-printer": "8.0.0-rc.14-dev.42",
28
- "@internal/ts-render": "8.0.0-rc.14-dev.42",
29
- "@repo/tsconfig": "8.0.0-rc.14-dev.42",
30
- "@internal/publish-surface": "8.0.0-rc.14-dev.42",
31
- "@repo/tsdown": "8.0.0-rc.14-dev.42",
32
- "@internal/utils": "8.0.0-rc.14-dev.42",
19
+ "@internal/config": "8.0.0-rc.14-dev.43",
20
+ "@internal/contract": "8.0.0-rc.14-dev.43",
21
+ "@internal/contract-authoring": "8.0.0-rc.14-dev.43",
22
+ "@internal/errors": "8.0.0-rc.14-dev.43",
23
+ "@internal/framework-components": "8.0.0-rc.14-dev.43",
24
+ "@internal/ids": "8.0.0-rc.14-dev.43",
25
+ "@internal/operations": "8.0.0-rc.14-dev.43",
26
+ "@internal/psl-parser": "8.0.0-rc.14-dev.43",
27
+ "@internal/psl-printer": "8.0.0-rc.14-dev.43",
28
+ "@internal/ts-render": "8.0.0-rc.14-dev.43",
29
+ "@repo/tsconfig": "8.0.0-rc.14-dev.43",
30
+ "@internal/publish-surface": "8.0.0-rc.14-dev.43",
31
+ "@repo/tsdown": "8.0.0-rc.14-dev.43",
32
+ "@internal/utils": "8.0.0-rc.14-dev.43",
33
33
  "tsdown": "0.22.14",
34
34
  "typescript": "5.9.3",
35
35
  "vitest": "5.0.0-rc.2"
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-domain-DgY72oWI.mjs","names":[],"sources":["../../../../1-framework/0-foundation/contract/dist/validate-domain.mjs"],"sourcesContent":["import { t as asNamespaceId } from \"./namespace-id-asbWpwMw.mjs\";\nimport { t as ContractValidationError } from \"./contract-validation-error-DEiWp_EI.mjs\";\nimport { blindCast } from \"@internal/utils/casts\";\n//#region src/validate-domain.ts\nfunction indexDomainModels(contract) {\n\tconst index = /* @__PURE__ */ new Map();\n\tfor (const [namespaceKey, namespace] of Object.entries(contract.domain.namespaces)) {\n\t\tconst namespaceId = asNamespaceId(namespaceKey);\n\t\tlet modelsInNamespace = index.get(namespaceId);\n\t\tif (modelsInNamespace === void 0) {\n\t\t\tmodelsInNamespace = /* @__PURE__ */ new Map();\n\t\t\tindex.set(namespaceId, modelsInNamespace);\n\t\t}\n\t\tfor (const [name, model] of Object.entries(namespace.models)) modelsInNamespace.set(name, {\n\t\t\tnamespaceId,\n\t\t\tname,\n\t\t\tmodel\n\t\t});\n\t}\n\treturn index;\n}\nfunction lookupModel(index, ref) {\n\treturn index.get(ref.namespace)?.get(ref.model);\n}\nfunction* iterateIndexedModels(index) {\n\tfor (const modelsInNamespace of index.values()) for (const entry of modelsInNamespace.values()) yield entry;\n}\nfunction validateContractDomain(contract) {\n\tconst errors = [];\n\tconst modelIndex = indexDomainModels(contract);\n\tvalidateRoots(contract, modelIndex, errors);\n\tvalidateVariantsAndBases(modelIndex, errors);\n\tvalidateRelationTargets(modelIndex, errors);\n\tvalidateRelationNullability(modelIndex, errors);\n\tvalidateDiscriminators(modelIndex, errors);\n\tvalidateOwnership(contract, modelIndex, errors);\n\tvalidateValueObjectReferences(contract, errors);\n\tvalidateFieldModifiers(modelIndex, contract, errors);\n\tif (errors.length > 0) throw new ContractValidationError(`Contract domain validation failed:\\n- ${errors.join(\"\\n- \")}`, \"domain\");\n}\nfunction validateRoots(contract, modelIndex, errors) {\n\tconst seenRootTargets = /* @__PURE__ */ new Map();\n\tfor (const [rootKey, crossRef] of Object.entries(contract.roots)) {\n\t\tlet modelsInNamespace = seenRootTargets.get(crossRef.namespace);\n\t\tif (modelsInNamespace === void 0) {\n\t\t\tmodelsInNamespace = /* @__PURE__ */ new Set();\n\t\t\tseenRootTargets.set(crossRef.namespace, modelsInNamespace);\n\t\t}\n\t\tif (modelsInNamespace.has(crossRef.model)) errors.push(`Duplicate root value: \"${crossRef.namespace}:${crossRef.model}\" is mapped by multiple root keys`);\n\t\tmodelsInNamespace.add(crossRef.model);\n\t\tif (!lookupModel(modelIndex, crossRef)) errors.push(`Root \"${rootKey}\" references model \"${crossRef.namespace}:${crossRef.model}\" which does not exist in domain.namespaces`);\n\t}\n}\nfunction validateVariantsAndBases(modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) {\n\t\tif (model.variants) for (const variantName of Object.keys(model.variants)) {\n\t\t\tconst variantEntry = lookupModel(modelIndex, {\n\t\t\t\tnamespace: namespaceId,\n\t\t\t\tmodel: variantName\n\t\t\t});\n\t\t\tif (!variantEntry) {\n\t\t\t\terrors.push(`Model \"${namespaceId}:${modelName}\" lists variant \"${variantName}\" which does not exist at that namespace coordinate`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst variantBase = variantEntry.model.base;\n\t\t\tif (variantBase?.namespace !== namespaceId || variantBase?.model !== modelName) errors.push(`Variant \"${namespaceId}:${variantName}\" has base \"${variantBase?.namespace ?? \"?\"}:${variantBase?.model ?? \"(none)\"}\" but expected \"${namespaceId}:${modelName}\"`);\n\t\t}\n\t\tif (model.base) {\n\t\t\tconst baseEntry = lookupModel(modelIndex, model.base);\n\t\t\tif (!baseEntry) {\n\t\t\t\terrors.push(`Model \"${namespaceId}:${modelName}\" has base \"${model.base.namespace}:${model.base.model}\" which does not exist in domain.namespaces`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!baseEntry.model.variants || !Object.hasOwn(baseEntry.model.variants, modelName)) errors.push(`Model \"${namespaceId}:${modelName}\" has base \"${model.base.namespace}:${model.base.model}\" which does not list it as a variant`);\n\t\t}\n\t}\n}\nfunction validateRelationTargets(modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) for (const [relName, relation] of Object.entries(model.relations ?? {})) {\n\t\tif (relation.to.space !== void 0) continue;\n\t\tif (!lookupModel(modelIndex, relation.to)) errors.push(`Relation \"${relName}\" on model \"${namespaceId}:${modelName}\" targets \"${relation.to.namespace}:${relation.to.model}\" which does not exist in domain.namespaces`);\n\t}\n}\nfunction relationKindLabel(relation) {\n\treturn relation.on === void 0 ? \"embed relation\" : `${relation.cardinality} relation`;\n}\nfunction validateRelationNullability(modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) for (const [relName, relation] of Object.entries(model.relations ?? {})) {\n\t\tconst location = `Relation \"${relName}\" on model \"${namespaceId}:${modelName}\"`;\n\t\tif (relation.on !== void 0 && (relation.cardinality === \"1:1\" || relation.cardinality === \"N:1\")) {\n\t\t\tif (relation.nullable !== void 0 && typeof relation.nullable !== \"boolean\") errors.push(`${location} is a ${relation.cardinality} relation and its \"nullable\" must be a boolean`);\n\t\t\tcontinue;\n\t\t}\n\t\tif (relation.nullable !== void 0) errors.push(`${location} is a ${relationKindLabel(relation)} and must not carry \"nullable\"`);\n\t}\n}\nfunction validateDiscriminators(modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) {\n\t\tif (model.discriminator) {\n\t\t\tif (!model.variants || Object.keys(model.variants).length === 0) errors.push(`Model \"${namespaceId}:${modelName}\" has discriminator but no variants`);\n\t\t\tif (!Object.hasOwn(model.fields, model.discriminator.field)) errors.push(`Discriminator field \"${model.discriminator.field}\" is not a field on model \"${namespaceId}:${modelName}\"`);\n\t\t}\n\t\tif (model.variants && Object.keys(model.variants).length > 0 && !model.discriminator) errors.push(`Model \"${namespaceId}:${modelName}\" has variants but no discriminator`);\n\t\tif (model.base) {\n\t\t\tif (model.discriminator) errors.push(`Model \"${namespaceId}:${modelName}\" has base and must not have discriminator`);\n\t\t\tif (model.variants && Object.keys(model.variants).length > 0) errors.push(`Model \"${namespaceId}:${modelName}\" has base and must not have variants`);\n\t\t}\n\t}\n}\nfunction validateOwnership(contract, modelIndex, errors) {\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) {\n\t\tif (!model.owner) continue;\n\t\tif (model.owner === modelName) errors.push(`Model \"${namespaceId}:${modelName}\" cannot own itself`);\n\t\tif (!lookupModel(modelIndex, {\n\t\t\tnamespace: namespaceId,\n\t\t\tmodel: model.owner\n\t\t})) errors.push(`Model \"${namespaceId}:${modelName}\" has owner \"${namespaceId}:${model.owner}\" which does not exist in domain.namespaces`);\n\t\tfor (const [rootKey, rootRef] of Object.entries(contract.roots)) if (rootRef.namespace === namespaceId && rootRef.model === modelName) errors.push(`Owned model \"${namespaceId}:${modelName}\" must not appear in roots (found as root \"${rootKey}\")`);\n\t}\n}\nfunction validateValueObjectReferences(contract, errors) {\n\tconst voNamesByNamespace = /* @__PURE__ */ new Map();\n\tfor (const [namespaceKey, namespace] of Object.entries(contract.domain.namespaces)) {\n\t\tconst namespaceId = asNamespaceId(namespaceKey);\n\t\tvoNamesByNamespace.set(namespaceId, new Set(Object.keys(namespace.valueObjects ?? {})));\n\t}\n\tfunction checkType(type, location, namespaceId) {\n\t\tif (!type) return;\n\t\tconst voNames = voNamesByNamespace.get(namespaceId) ?? /* @__PURE__ */ new Set();\n\t\tif (type.kind === \"valueObject\" && type.name && !voNames.has(type.name)) {\n\t\t\terrors.push(`${location} references value object \"${namespaceId}:${type.name}\" which does not exist in that namespace's valueObjects`);\n\t\t\treturn;\n\t\t}\n\t\tif (type.kind === \"union\") for (const member of type.members ?? []) checkType(member, location, namespaceId);\n\t}\n\tfor (const [namespaceKey, namespace] of Object.entries(contract.domain.namespaces)) {\n\t\tconst namespaceId = asNamespaceId(namespaceKey);\n\t\tfor (const [modelName, model] of Object.entries(namespace.models)) for (const [fieldName, field] of Object.entries(model.fields)) checkType(blindCast(field)?.type, `Model \"${namespaceId}:${modelName}\" field \"${fieldName}\"`, namespaceId);\n\t\tfor (const [voName, vo] of Object.entries(namespace.valueObjects ?? {})) for (const [fieldName, field] of Object.entries(vo.fields)) checkType(blindCast(field)?.type, `Value object \"${namespaceId}:${voName}\" field \"${fieldName}\"`, namespaceId);\n\t}\n}\nfunction validateFieldModifiers(modelIndex, contract, errors) {\n\tfunction validateField(location, field) {\n\t\tconst candidate = blindCast(field);\n\t\tconst many = candidate?.many;\n\t\tconst isList = typeof many === \"object\" && many !== null && !Array.isArray(many) && Object.keys(many).length === 1 && \"elementNullable\" in many && typeof many.elementNullable === \"boolean\";\n\t\tif (many !== void 0 && many !== false && !isList) errors.push(`${location} has invalid \"many\"; expected false or an elementNullable descriptor`);\n\t\tif (candidate?.elementNullable !== void 0) errors.push(`${location} cannot have sibling \"elementNullable\"; put it inside \"many\"`);\n\t\tif (isList && candidate?.dict) errors.push(`${location} cannot have both \"many\" and \"dict\" modifiers`);\n\t}\n\tfor (const { namespaceId, name: modelName, model } of iterateIndexedModels(modelIndex)) for (const [fieldName, field] of Object.entries(model.fields)) validateField(`Model \"${namespaceId}:${modelName}\" field \"${fieldName}\"`, field);\n\tfor (const [namespaceKey, namespace] of Object.entries(contract.domain.namespaces)) {\n\t\tconst namespaceId = asNamespaceId(namespaceKey);\n\t\tfor (const [voName, vo] of Object.entries(namespace.valueObjects ?? {})) for (const [fieldName, field] of Object.entries(vo.fields)) validateField(`Value object \"${namespaceId}:${voName}\" field \"${fieldName}\"`, field);\n\t}\n}\n//#endregion\nexport { validateContractDomain };\n\n//# sourceMappingURL=validate-domain.mjs.map"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-domain-M93ZRMRA.d.mts","names":[],"sources":["../../../../1-framework/0-foundation/contract/dist/validate-domain.d.mts"],"mappings":";;;UAEU;WACC,IAAI;WACJ;WACA;WACA;;UAED;WACC,QAAQ;WACR,YAAY,eAAe;WAC3B;aACE;;WAEF,WAAW;WACX,OAAO;WACP;;UAED,4BAA4B;WAC3B,OAAO,eAAe;;iBAEhB,uBAAuB,UAAU"}