@prisma-next/sql-contract-ts 0.14.0-dev.5 → 0.14.0-dev.50
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/{build-contract-CQ4u83jx.mjs → build-contract-Bi8UaU_S.mjs} +28 -28
- package/dist/build-contract-Bi8UaU_S.mjs.map +1 -0
- package/dist/config-types.d.mts +2 -0
- package/dist/config-types.d.mts.map +1 -1
- package/dist/config-types.mjs +2 -1
- package/dist/config-types.mjs.map +1 -1
- package/dist/contract-builder.d.mts +42 -173
- package/dist/contract-builder.d.mts.map +1 -1
- package/dist/contract-builder.mjs +16 -74
- package/dist/contract-builder.mjs.map +1 -1
- package/package.json +10 -10
- package/src/authoring-helper-runtime.ts +2 -6
- package/src/build-contract.ts +62 -47
- package/src/composed-authoring-helpers.ts +3 -6
- package/src/config-types.ts +7 -1
- package/src/contract-builder.ts +8 -5
- package/src/contract-definition.ts +4 -4
- package/src/contract-dsl.ts +108 -41
- package/src/contract-lowering.ts +2 -1
- package/src/contract-types.ts +34 -10
- package/src/enum-type.ts +14 -306
- package/dist/build-contract-CQ4u83jx.mjs.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { t as buildSqlContractFromDefinition } from "./build-contract-
|
|
1
|
+
import { t as buildSqlContractFromDefinition } from "./build-contract-Bi8UaU_S.mjs";
|
|
2
2
|
import { blindCast } from "@prisma-next/utils/casts";
|
|
3
3
|
import { ifDefined } from "@prisma-next/utils/defined";
|
|
4
4
|
import { isColumnDefault } from "@prisma-next/contract/types";
|
|
5
|
-
import { createEntityHelpersFromNamespace } from "@prisma-next/contract-authoring";
|
|
5
|
+
import { bindEnumType, createEntityHelpersFromNamespace, enumType, isEnumTypeHandle, member } from "@prisma-next/contract-authoring";
|
|
6
6
|
import { toStorageTypeInstance } from "@prisma-next/sql-contract/types";
|
|
7
|
-
import { assertNoCrossRegistryCollisions, instantiateAuthoringFieldPreset, instantiateAuthoringTypeConstructor,
|
|
7
|
+
import { assertNoCrossRegistryCollisions, instantiateAuthoringFieldPreset, instantiateAuthoringTypeConstructor, isAuthoringFieldPresetDescriptor, isAuthoringTypeConstructorDescriptor, mergeAuthoringNamespaces, validateAuthoringHelperArguments } from "@prisma-next/framework-components/authoring";
|
|
8
8
|
//#region src/authoring-helper-runtime.ts
|
|
9
9
|
function isNamedConstraintOptionsLike(value) {
|
|
10
10
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
@@ -79,71 +79,6 @@ function createFieldHelpersFromNamespace(namespace, createLeafHelper, path = [])
|
|
|
79
79
|
return helpers;
|
|
80
80
|
}
|
|
81
81
|
//#endregion
|
|
82
|
-
//#region src/enum-type.ts
|
|
83
|
-
function member(name, value) {
|
|
84
|
-
return {
|
|
85
|
-
name,
|
|
86
|
-
value: blindCast(value ?? name)
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Internal brand that identifies an EnumTypeHandle in the lowering pipeline.
|
|
91
|
-
* Not exported — callers only interact with `EnumTypeHandle`.
|
|
92
|
-
*/
|
|
93
|
-
const ENUM_TYPE_HANDLE_BRAND = Symbol("EnumTypeHandle");
|
|
94
|
-
function enumType(name, codec, ...members) {
|
|
95
|
-
if (members.length === 0) throw new Error(`enumType("${name}"): must have at least one member.`);
|
|
96
|
-
const seenNames = /* @__PURE__ */ new Set();
|
|
97
|
-
const seenValues = /* @__PURE__ */ new Set();
|
|
98
|
-
for (const m of members) {
|
|
99
|
-
if (seenNames.has(m.name)) throw new Error(`enumType("${name}"): duplicate member name "${m.name}". Member names must be unique.`);
|
|
100
|
-
seenNames.add(m.name);
|
|
101
|
-
const loweredValue = String(m.value);
|
|
102
|
-
if (seenValues.has(loweredValue)) throw new Error(`enumType("${name}"): duplicate member value "${loweredValue}". Member values must be unique.`);
|
|
103
|
-
seenValues.add(loweredValue);
|
|
104
|
-
}
|
|
105
|
-
const values = Object.freeze(members.map((m) => m.value));
|
|
106
|
-
const names = Object.freeze(members.map((m) => m.name));
|
|
107
|
-
const enumMembers = Object.freeze(members.map((m) => ({
|
|
108
|
-
name: m.name,
|
|
109
|
-
value: m.value
|
|
110
|
-
})));
|
|
111
|
-
const membersAccessor = Object.freeze(Object.fromEntries(members.map((m) => [m.name, m.value])));
|
|
112
|
-
const valueSet = new Set(values);
|
|
113
|
-
const valueToName = new Map(members.map((m) => [m.value, m.name]));
|
|
114
|
-
const valueToOrdinal = new Map(values.map((v, i) => [v, i]));
|
|
115
|
-
return {
|
|
116
|
-
[ENUM_TYPE_HANDLE_BRAND]: true,
|
|
117
|
-
enumName: name,
|
|
118
|
-
codecId: codec.codecId,
|
|
119
|
-
nativeType: codec.nativeType,
|
|
120
|
-
enumMembers,
|
|
121
|
-
values,
|
|
122
|
-
names,
|
|
123
|
-
members: membersAccessor,
|
|
124
|
-
has: (v) => valueSet.has(v),
|
|
125
|
-
nameOf: (v) => valueToName.get(v),
|
|
126
|
-
ordinalOf: (v) => valueToOrdinal.get(v) ?? -1
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Bind `enumType` to a target's codec typemap. The returned function is the
|
|
131
|
-
* same runtime `enumType`, retyped so member values are constrained to the
|
|
132
|
-
* codec's input type. Target packages call this with their pack's
|
|
133
|
-
* `ExtractCodecTypesFromPack<Pack>` to expose a codec-aware `enumType`.
|
|
134
|
-
*/
|
|
135
|
-
function bindEnumType() {
|
|
136
|
-
return enumType;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Returns true when the value is an `EnumTypeHandle` produced by
|
|
140
|
-
* `enumType()`. Used in the lowering pipeline to detect enum handles
|
|
141
|
-
* in field state without importing the BRAND symbol at every call site.
|
|
142
|
-
*/
|
|
143
|
-
function isEnumTypeHandle(value) {
|
|
144
|
-
return typeof value === "object" && value !== null && Reflect.get(value, ENUM_TYPE_HANDLE_BRAND) === true;
|
|
145
|
-
}
|
|
146
|
-
//#endregion
|
|
147
82
|
//#region src/contract-dsl.ts
|
|
148
83
|
function toColumnDefault(value) {
|
|
149
84
|
if (isColumnDefault(value)) return value;
|
|
@@ -178,6 +113,12 @@ var ScalarFieldBuilder = class ScalarFieldBuilder {
|
|
|
178
113
|
columnName: name
|
|
179
114
|
});
|
|
180
115
|
}
|
|
116
|
+
many() {
|
|
117
|
+
return new ScalarFieldBuilder(blindCast({
|
|
118
|
+
...this.state,
|
|
119
|
+
many: true
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
181
122
|
default(value) {
|
|
182
123
|
return new ScalarFieldBuilder({
|
|
183
124
|
...this.state,
|
|
@@ -259,11 +200,11 @@ function generatedField(spec) {
|
|
|
259
200
|
});
|
|
260
201
|
}
|
|
261
202
|
function namedTypeField(typeRef) {
|
|
262
|
-
if (isEnumTypeHandle(typeRef)) return new EnumScalarFieldBuilder({
|
|
203
|
+
if (isEnumTypeHandle(typeRef)) return new EnumScalarFieldBuilder(blindCast({
|
|
263
204
|
kind: "scalar",
|
|
264
205
|
typeRef,
|
|
265
206
|
nullable: false
|
|
266
|
-
}, typeRef);
|
|
207
|
+
}), typeRef);
|
|
267
208
|
return new ScalarFieldBuilder({
|
|
268
209
|
kind: "scalar",
|
|
269
210
|
typeRef,
|
|
@@ -653,7 +594,7 @@ function composeTypeNamespace(components) {
|
|
|
653
594
|
const merged = {};
|
|
654
595
|
for (const component of components) {
|
|
655
596
|
const ns = extractTypeNamespace(component);
|
|
656
|
-
if (Object.keys(ns).length > 0) mergeAuthoringNamespaces(merged, ns, [],
|
|
597
|
+
if (Object.keys(ns).length > 0) mergeAuthoringNamespaces(merged, ns, [], "typeConstructor", "type");
|
|
657
598
|
}
|
|
658
599
|
return merged;
|
|
659
600
|
}
|
|
@@ -661,7 +602,7 @@ function composeFieldNamespace(components) {
|
|
|
661
602
|
const merged = {};
|
|
662
603
|
for (const component of components) {
|
|
663
604
|
const ns = extractFieldNamespace(component);
|
|
664
|
-
if (Object.keys(ns).length > 0) mergeAuthoringNamespaces(merged, ns, [],
|
|
605
|
+
if (Object.keys(ns).length > 0) mergeAuthoringNamespaces(merged, ns, [], "fieldPreset", "field");
|
|
665
606
|
}
|
|
666
607
|
return merged;
|
|
667
608
|
}
|
|
@@ -669,7 +610,7 @@ function composeEntityNamespace(components) {
|
|
|
669
610
|
const merged = {};
|
|
670
611
|
for (const component of components) {
|
|
671
612
|
const ns = extractEntitiesNamespace(component);
|
|
672
|
-
if (Object.keys(ns).length > 0) mergeAuthoringNamespaces(merged, ns, [],
|
|
613
|
+
if (Object.keys(ns).length > 0) mergeAuthoringNamespaces(merged, ns, [], "entity", "entity");
|
|
673
614
|
}
|
|
674
615
|
return merged;
|
|
675
616
|
}
|
|
@@ -1159,6 +1100,7 @@ function resolveModelNode(spec, allSpecs, storageTypes, storageTypeReverseLookup
|
|
|
1159
1100
|
columnName,
|
|
1160
1101
|
descriptor,
|
|
1161
1102
|
nullable: fieldState.nullable,
|
|
1103
|
+
...fieldState.many === true ? { many: true } : {},
|
|
1162
1104
|
...fieldState.default ? { default: fieldState.default } : {},
|
|
1163
1105
|
...fieldState.executionDefaults ? { executionDefaults: fieldState.executionDefaults } : {},
|
|
1164
1106
|
...enumHandle !== void 0 ? { enumTypeHandle: enumHandle } : {}
|
|
@@ -1259,7 +1201,7 @@ function buildContractDefinition(definition) {
|
|
|
1259
1201
|
...definition.foreignKeyDefaults ? { foreignKeyDefaults: definition.foreignKeyDefaults } : {},
|
|
1260
1202
|
...Object.keys(collection.storageTypes).length > 0 ? { storageTypes: collection.storageTypes } : {},
|
|
1261
1203
|
...definition.namespaces ? { namespaces: definition.namespaces } : {},
|
|
1262
|
-
|
|
1204
|
+
createNamespace: definition.createNamespace,
|
|
1263
1205
|
...definition.enums && Object.keys(definition.enums).length > 0 ? { enums: definition.enums } : {},
|
|
1264
1206
|
models
|
|
1265
1207
|
};
|