typeferry 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
1
2
|
import { z } from 'zod';
|
|
2
3
|
import { isObjectIdSchema } from './bson-schema.js';
|
|
3
4
|
const BSON_NUMERIC_TYPES = ['int', 'long', 'double', 'decimal'];
|
|
@@ -70,8 +71,9 @@ function convertSchema(value, path) {
|
|
|
70
71
|
if (Object.keys(value).length === 0) {
|
|
71
72
|
throwUnsupported(path, 'Zod emitted an unconstrained JSON Schema node.');
|
|
72
73
|
}
|
|
74
|
+
const normalizedValue = normalizeHomogeneousVariadicTuple(value, path);
|
|
73
75
|
const result = {};
|
|
74
|
-
for (const [key, child] of Object.entries(
|
|
76
|
+
for (const [key, child] of Object.entries(normalizedValue)) {
|
|
75
77
|
if (key === '$schema' || key === '~standard')
|
|
76
78
|
continue;
|
|
77
79
|
if (key === 'type') {
|
|
@@ -116,8 +118,11 @@ function convertSchema(value, path) {
|
|
|
116
118
|
result.enum = [child];
|
|
117
119
|
continue;
|
|
118
120
|
}
|
|
121
|
+
if (key === 'readOnly') {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
119
124
|
if (key === 'format') {
|
|
120
|
-
if (typeof
|
|
125
|
+
if (typeof normalizedValue.pattern !== 'string') {
|
|
121
126
|
throwUnsupported([...path, key], `Zod string format "${String(child)}" has no MongoDB-compatible pattern.`);
|
|
122
127
|
}
|
|
123
128
|
continue;
|
|
@@ -132,6 +137,35 @@ function convertSchema(value, path) {
|
|
|
132
137
|
}
|
|
133
138
|
return result;
|
|
134
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Collapses the losslessly representable subset of draft-04 tuple schemas.
|
|
142
|
+
*
|
|
143
|
+
* MongoDB cannot enforce positional tuples. A Zod variadic tuple is equivalent
|
|
144
|
+
* to a homogeneous array only when every required prefix item is structurally
|
|
145
|
+
* identical to its rest item; the prefix length then becomes `minItems`.
|
|
146
|
+
*/
|
|
147
|
+
function normalizeHomogeneousVariadicTuple(value, path) {
|
|
148
|
+
if (!Array.isArray(value.items))
|
|
149
|
+
return value;
|
|
150
|
+
if (!isJsonObject(value.additionalItems)) {
|
|
151
|
+
throwUnsupported(path, 'Tuple schemas are not supported.');
|
|
152
|
+
}
|
|
153
|
+
const rest = convertSchema(value.additionalItems, [
|
|
154
|
+
...path,
|
|
155
|
+
'additionalItems',
|
|
156
|
+
]);
|
|
157
|
+
const prefix = value.items.map((item, index) => convertSchema(item, [...path, 'items', String(index)]));
|
|
158
|
+
if (!prefix.every((item) => isDeepStrictEqual(item, rest))) {
|
|
159
|
+
throwUnsupported(path, 'Tuple schemas are not supported.');
|
|
160
|
+
}
|
|
161
|
+
const normalized = {
|
|
162
|
+
...value,
|
|
163
|
+
items: value.additionalItems,
|
|
164
|
+
minItems: prefix.length,
|
|
165
|
+
};
|
|
166
|
+
delete normalized.additionalItems;
|
|
167
|
+
return normalized;
|
|
168
|
+
}
|
|
135
169
|
function convertJsonTypes(value) {
|
|
136
170
|
if (Array.isArray(value)) {
|
|
137
171
|
return value.flatMap(convertJsonType);
|
|
@@ -144,6 +178,8 @@ function convertJsonTypes(value) {
|
|
|
144
178
|
function convertJsonType(value) {
|
|
145
179
|
if (value === 'number' || value === 'integer')
|
|
146
180
|
return BSON_NUMERIC_TYPES;
|
|
181
|
+
if (value === 'boolean')
|
|
182
|
+
return 'bool';
|
|
147
183
|
return value;
|
|
148
184
|
}
|
|
149
185
|
function allowGeneratedObjectId(schema) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/mongodb/validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAIhD,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAA;AAExE;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,sBAAsB;IACtB,OAAO;IACP,OAAO;IACP,UAAU;IACV,aAAa;IACb,MAAM;IACN,kBAAkB;IAClB,kBAAkB;IAClB,OAAO;IACP,SAAS;IACT,UAAU;IACV,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,YAAY;IACZ,KAAK;IACL,OAAO;IACP,SAAS;IACT,YAAY;IACZ,UAAU;IACV,MAAM;IACN,aAAa;CACd,CAAC,CAAA;AAEF,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAC/B,MAA4B;IAE5B,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE;QACxC,MAAM,EAAE,UAAU;QAClB,EAAE,EAAE,QAAQ;QACZ,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,QAAQ;QAChB,eAAe,EAAE,KAAK;QACtB,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE;YACvD,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,eAAe,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;gBACpD,OAAM;YACR,CAAC;YAED,IAAI,SAAS,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC;gBACnC,eAAe,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;gBAChD,OAAM;YACR,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;gBAC5D,MAAM,IAAI,KAAK,CACb,mEAAmE,QAAQ,GAAG,CAC/E,CAAA;YACH,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAC/C,OAAO,SAAS,CAAC,OAAO,CAAA;IACxB,sBAAsB,CAAC,SAAS,CAAC,CAAA;IACjC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAC5B,MAA4B;IAE5B,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAA;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,IAAuB;IAC5D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,gBAAgB,CAAC,IAAI,EAAE,4CAA4C,CAAC,CAAA;IACtE,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,gBAAgB,CAAC,IAAI,EAAE,gDAAgD,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/mongodb/validator.ts"],"names":[],"mappings":"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"}
|