@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.
- package/dist/contract.d.mts +1 -1
- package/dist/contract.mjs +1 -1
- package/dist/contract__validate-domain.d.mts +1 -1
- package/dist/contract__validate-domain.mjs +1 -1
- package/dist/{validate-domain-DgY72oWI.mjs → validate-domain-BWxgeXy0.mjs} +12 -1
- package/dist/validate-domain-BWxgeXy0.mjs.map +1 -0
- package/dist/{validate-domain-M93ZRMRA.d.mts → validate-domain-DaAswa8n.d.mts} +3 -3
- package/dist/validate-domain-DaAswa8n.d.mts.map +1 -0
- package/package.json +15 -15
- package/dist/validate-domain-DgY72oWI.mjs.map +0 -1
- package/dist/validate-domain-M93ZRMRA.d.mts.map +0 -1
package/dist/contract.d.mts
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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,
|
|
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-
|
|
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.
|
|
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.
|
|
20
|
-
"@internal/contract": "8.0.0-rc.14-dev.
|
|
21
|
-
"@internal/contract-authoring": "8.0.0-rc.14-dev.
|
|
22
|
-
"@internal/errors": "8.0.0-rc.14-dev.
|
|
23
|
-
"@internal/framework-components": "8.0.0-rc.14-dev.
|
|
24
|
-
"@internal/ids": "8.0.0-rc.14-dev.
|
|
25
|
-
"@internal/operations": "8.0.0-rc.14-dev.
|
|
26
|
-
"@internal/psl-parser": "8.0.0-rc.14-dev.
|
|
27
|
-
"@internal/psl-printer": "8.0.0-rc.14-dev.
|
|
28
|
-
"@internal/ts-render": "8.0.0-rc.14-dev.
|
|
29
|
-
"@repo/tsconfig": "8.0.0-rc.14-dev.
|
|
30
|
-
"@internal/publish-surface": "8.0.0-rc.14-dev.
|
|
31
|
-
"@repo/tsdown": "8.0.0-rc.14-dev.
|
|
32
|
-
"@internal/utils": "8.0.0-rc.14-dev.
|
|
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"}
|