@revisium/schema-toolkit 0.14.3 → 0.15.0
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/README.md +1 -1
- package/dist/{chunk-DJ4JPKI4.js → chunk-2NRQPOQY.js} +126 -218
- package/dist/chunk-2NRQPOQY.js.map +1 -0
- package/dist/chunk-3IKI64T2.js +3 -0
- package/dist/{chunk-H7W4QNMA.js.map → chunk-3IKI64T2.js.map} +1 -1
- package/dist/chunk-5WZ4YPH5.cjs +2209 -0
- package/dist/chunk-5WZ4YPH5.cjs.map +1 -0
- package/dist/chunk-A4E524UU.cjs +2179 -0
- package/dist/chunk-A4E524UU.cjs.map +1 -0
- package/dist/{chunk-L5MLJEC7.js → chunk-CYTPQYVM.js} +2 -2
- package/dist/chunk-CYTPQYVM.js.map +1 -0
- package/dist/chunk-F4UBBZAL.js +2147 -0
- package/dist/chunk-F4UBBZAL.js.map +1 -0
- package/dist/{chunk-B22UU3JK.cjs → chunk-GAPLSVZN.cjs} +2 -2
- package/dist/chunk-GAPLSVZN.cjs.map +1 -0
- package/dist/chunk-OP35BPMU.js +2178 -0
- package/dist/chunk-OP35BPMU.js.map +1 -0
- package/dist/chunk-TBFTADML.cjs +4 -0
- package/dist/{chunk-ODCH3PP2.cjs.map → chunk-TBFTADML.cjs.map} +1 -1
- package/dist/chunk-WSPFHUHU.cjs +130 -0
- package/dist/chunk-WSPFHUHU.cjs.map +1 -0
- package/dist/{chunk-VX5C5YMF.cjs → chunk-XS47N22X.cjs} +125 -218
- package/dist/chunk-XS47N22X.cjs.map +1 -0
- package/dist/chunk-YFWOURZL.js +128 -0
- package/dist/chunk-YFWOURZL.js.map +1 -0
- package/dist/{chunk-KJCURW4D.js → chunk-ZBPUTF3Q.js} +3 -3
- package/dist/chunk-ZBPUTF3Q.js.map +1 -0
- package/dist/{chunk-GF3XXYOS.cjs → chunk-ZRNFSUOV.cjs} +3 -3
- package/dist/chunk-ZRNFSUOV.cjs.map +1 -0
- package/dist/computeValueDiff-CDwbNw8F.d.ts +5 -0
- package/dist/computeValueDiff-CNT84rwK.d.cts +5 -0
- package/dist/core/index.cjs +474 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +313 -0
- package/dist/core/index.d.ts +313 -0
- package/dist/core/index.js +336 -0
- package/dist/core/index.js.map +1 -0
- package/dist/formula/index.d.cts +1 -1
- package/dist/formula/index.d.ts +1 -1
- package/dist/index.cjs +166 -44
- package/dist/index.d.cts +11 -7
- package/dist/index.d.ts +11 -7
- package/dist/index.js +7 -5
- package/dist/{json-patch.types-CYt9TCu3.d.ts → json-patch.types-DTUHS9SV.d.ts} +1 -1
- package/dist/{json-patch.types-DUcWbQRY.d.cts → json-patch.types-eltVqnWC.d.cts} +1 -1
- package/dist/{json-string.store-CcZ197KO.d.cts → json-string.store-DKlkc1u_.d.cts} +1 -1
- package/dist/{json-string.store-DckDcMVN.d.ts → json-string.store-DMrHPJ3v.d.ts} +1 -1
- package/dist/json-value-patch.types-CjBpq5VF.d.cts +24 -0
- package/dist/json-value-patch.types-U2y_ugm1.d.ts +24 -0
- package/dist/lib/index.cjs +40 -39
- package/dist/lib/index.d.cts +6 -7
- package/dist/lib/index.d.ts +6 -7
- package/dist/lib/index.js +4 -3
- package/dist/mocks/index.cjs +1 -1
- package/dist/mocks/index.d.cts +2 -2
- package/dist/mocks/index.d.ts +2 -2
- package/dist/mocks/index.js +1 -1
- package/dist/model/index.cjs +125 -2
- package/dist/model/index.d.cts +582 -4
- package/dist/model/index.d.ts +582 -4
- package/dist/model/index.js +5 -2
- package/dist/plugins/index.cjs +1 -1
- package/dist/plugins/index.d.cts +25 -1
- package/dist/plugins/index.d.ts +25 -1
- package/dist/plugins/index.js +1 -1
- package/dist/{schema.types-CLHMJmkJ.d.cts → schema.types-ZX5fUW1X.d.cts} +6 -0
- package/dist/{schema.types-CLHMJmkJ.d.ts → schema.types-ZX5fUW1X.d.ts} +6 -0
- package/dist/types/index.cjs +5 -5
- package/dist/types/index.d.cts +8 -29
- package/dist/types/index.d.ts +8 -29
- package/dist/types/index.js +3 -3
- package/dist/{value-diff.types-BRoI_kGE.d.cts → types-C_GxaUve.d.cts} +4 -4
- package/dist/{value-diff.types-BRoI_kGE.d.ts → types-C_GxaUve.d.ts} +4 -4
- package/dist/types-CwJ2OWO_.d.cts +183 -0
- package/dist/types-XDWz0V1v.d.ts +183 -0
- package/package.json +14 -1
- package/dist/chunk-B22UU3JK.cjs.map +0 -1
- package/dist/chunk-DJ4JPKI4.js.map +0 -1
- package/dist/chunk-GF3XXYOS.cjs.map +0 -1
- package/dist/chunk-H7W4QNMA.js +0 -3
- package/dist/chunk-KJCURW4D.js.map +0 -1
- package/dist/chunk-L5MLJEC7.js.map +0 -1
- package/dist/chunk-ODCH3PP2.cjs +0 -4
- package/dist/chunk-SBJFTOWW.js +0 -3
- package/dist/chunk-SBJFTOWW.js.map +0 -1
- package/dist/chunk-VX5C5YMF.cjs.map +0 -1
- package/dist/chunk-XAFOMEOK.cjs +0 -4
- package/dist/chunk-XAFOMEOK.cjs.map +0 -1
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
export { ChangeCoalescer, ChangeCollector, EMPTY_METADATA, EMPTY_PATH, ItemsSegment, NULL_NODE, NodePathIndex, PatchBuilder, PatchEnricher, PatchGenerator, PropertySegment, SchemaDiff, SchemaSerializer, areNodesContentEqual, areNodesEqual, coalesceChanges, collectChanges, createArrayNode, createBooleanNode, createNumberNode, createObjectNode, createPath, createRefNode, createSchemaTree, createStringNode, jsonPointerToPath, jsonPointerToSegments, jsonPointerToSimplePath } from '../chunk-F4UBBZAL.js';
|
|
2
|
+
import '../chunk-3IKI64T2.js';
|
|
3
|
+
export { computeValueDiff } from '../chunk-YFWOURZL.js';
|
|
4
|
+
export { FieldChangeType } from '../chunk-ZBPUTF3Q.js';
|
|
5
|
+
import '../chunk-CYTPQYVM.js';
|
|
6
|
+
|
|
7
|
+
// src/core/reactivity/noop-adapter.ts
|
|
8
|
+
var NoopReactivityAdapter = class {
|
|
9
|
+
makeObservable(_target, _annotations) {
|
|
10
|
+
}
|
|
11
|
+
observableArray() {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
observableMap() {
|
|
15
|
+
return /* @__PURE__ */ new Map();
|
|
16
|
+
}
|
|
17
|
+
reaction(_expression, _effect) {
|
|
18
|
+
return () => {
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
runInAction(fn) {
|
|
22
|
+
return fn();
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
var noopAdapter = new NoopReactivityAdapter();
|
|
26
|
+
|
|
27
|
+
// src/core/validation/ValidatorRegistry.ts
|
|
28
|
+
var ValidatorRegistry = class {
|
|
29
|
+
validators = /* @__PURE__ */ new Map();
|
|
30
|
+
rules = [];
|
|
31
|
+
register(type, factory) {
|
|
32
|
+
this.validators.set(type, factory);
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
addRule(rule) {
|
|
36
|
+
this.rules.push(rule);
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
get(type) {
|
|
40
|
+
const factory = this.validators.get(type);
|
|
41
|
+
return factory ? factory() : void 0;
|
|
42
|
+
}
|
|
43
|
+
has(type) {
|
|
44
|
+
return this.validators.has(type);
|
|
45
|
+
}
|
|
46
|
+
getRules() {
|
|
47
|
+
return this.rules;
|
|
48
|
+
}
|
|
49
|
+
getValidatorTypes() {
|
|
50
|
+
return Array.from(this.validators.keys());
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// src/core/validation/ValidatorResolver.ts
|
|
55
|
+
var ValidatorResolver = class {
|
|
56
|
+
constructor(registry) {
|
|
57
|
+
this.registry = registry;
|
|
58
|
+
}
|
|
59
|
+
resolve(context) {
|
|
60
|
+
const validators = [];
|
|
61
|
+
const rules = this.registry.getRules();
|
|
62
|
+
for (const rule of rules) {
|
|
63
|
+
if (rule.shouldApply(context)) {
|
|
64
|
+
const validator = this.registry.get(rule.validatorType);
|
|
65
|
+
if (validator) {
|
|
66
|
+
validators.push(validator);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return validators;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// src/core/validation/ValidationEngine.ts
|
|
75
|
+
var ValidationEngine = class {
|
|
76
|
+
constructor(resolver) {
|
|
77
|
+
this.resolver = resolver;
|
|
78
|
+
}
|
|
79
|
+
validate(context) {
|
|
80
|
+
const validators = this.resolver.resolve(context);
|
|
81
|
+
const diagnostics = [];
|
|
82
|
+
for (const validator of validators) {
|
|
83
|
+
const diagnostic = validator.validate(context);
|
|
84
|
+
if (diagnostic) {
|
|
85
|
+
diagnostics.push(diagnostic);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return diagnostics;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// src/core/validation/rules/SchemaBasedRule.ts
|
|
93
|
+
var SchemaPropertyRule = class {
|
|
94
|
+
constructor(validatorType, propertyName) {
|
|
95
|
+
this.validatorType = validatorType;
|
|
96
|
+
this.propertyName = propertyName;
|
|
97
|
+
}
|
|
98
|
+
shouldApply(context) {
|
|
99
|
+
const value = context.schema[this.propertyName];
|
|
100
|
+
return value !== void 0 && value !== null;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
var SchemaTruthyRule = class {
|
|
104
|
+
constructor(validatorType, propertyName) {
|
|
105
|
+
this.validatorType = validatorType;
|
|
106
|
+
this.propertyName = propertyName;
|
|
107
|
+
}
|
|
108
|
+
shouldApply(context) {
|
|
109
|
+
return context.schema[this.propertyName] === true;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
var CompositeRule = class {
|
|
113
|
+
constructor(validatorType, conditions) {
|
|
114
|
+
this.validatorType = validatorType;
|
|
115
|
+
this.conditions = conditions;
|
|
116
|
+
}
|
|
117
|
+
shouldApply(context) {
|
|
118
|
+
return this.conditions.every((condition) => condition(context));
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
// src/core/validation/validators/RequiredValidator.ts
|
|
123
|
+
var RequiredValidator = class {
|
|
124
|
+
type = "required";
|
|
125
|
+
validate(context) {
|
|
126
|
+
const { value, nodeName } = context;
|
|
127
|
+
if (value === "" || value === null || value === void 0) {
|
|
128
|
+
return {
|
|
129
|
+
severity: "error",
|
|
130
|
+
type: this.type,
|
|
131
|
+
message: "Field is required",
|
|
132
|
+
path: nodeName
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// src/core/validation/validators/PatternValidator.ts
|
|
140
|
+
var PatternValidator = class {
|
|
141
|
+
type = "pattern";
|
|
142
|
+
validate(context) {
|
|
143
|
+
const { value, schema, nodeName } = context;
|
|
144
|
+
const pattern = schema.pattern;
|
|
145
|
+
if (!pattern) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
if (typeof value !== "string") {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
if (value.length === 0) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
if (!new RegExp(pattern).test(value)) {
|
|
156
|
+
return {
|
|
157
|
+
severity: "error",
|
|
158
|
+
type: this.type,
|
|
159
|
+
message: "Value does not match pattern",
|
|
160
|
+
path: nodeName,
|
|
161
|
+
params: { pattern }
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
} catch {
|
|
165
|
+
return {
|
|
166
|
+
severity: "error",
|
|
167
|
+
type: "invalidPattern",
|
|
168
|
+
message: "Invalid regex pattern in schema",
|
|
169
|
+
path: nodeName,
|
|
170
|
+
params: { pattern }
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
// src/core/validation/validators/MinLengthValidator.ts
|
|
178
|
+
var MinLengthValidator = class {
|
|
179
|
+
type = "minLength";
|
|
180
|
+
validate(context) {
|
|
181
|
+
const { value, schema, nodeName } = context;
|
|
182
|
+
const minLength = schema.minLength;
|
|
183
|
+
if (minLength === void 0) {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
if (typeof value !== "string") {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
if (value.length < minLength) {
|
|
190
|
+
return {
|
|
191
|
+
severity: "error",
|
|
192
|
+
type: this.type,
|
|
193
|
+
message: `Value must be at least ${minLength} characters`,
|
|
194
|
+
path: nodeName,
|
|
195
|
+
params: { min: minLength, actual: value.length }
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
// src/core/validation/validators/MaxLengthValidator.ts
|
|
203
|
+
var MaxLengthValidator = class {
|
|
204
|
+
type = "maxLength";
|
|
205
|
+
validate(context) {
|
|
206
|
+
const { value, schema, nodeName } = context;
|
|
207
|
+
const maxLength = schema.maxLength;
|
|
208
|
+
if (maxLength === void 0) {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
if (typeof value !== "string") {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
if (value.length > maxLength) {
|
|
215
|
+
return {
|
|
216
|
+
severity: "error",
|
|
217
|
+
type: this.type,
|
|
218
|
+
message: `Value must be at most ${maxLength} characters`,
|
|
219
|
+
path: nodeName,
|
|
220
|
+
params: { max: maxLength, actual: value.length }
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// src/core/validation/validators/MinimumValidator.ts
|
|
228
|
+
var MinimumValidator = class {
|
|
229
|
+
type = "minimum";
|
|
230
|
+
validate(context) {
|
|
231
|
+
const { value, schema, nodeName } = context;
|
|
232
|
+
const minimum = schema.minimum;
|
|
233
|
+
if (minimum === void 0) {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
if (typeof value !== "number") {
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
if (value < minimum) {
|
|
240
|
+
return {
|
|
241
|
+
severity: "error",
|
|
242
|
+
type: this.type,
|
|
243
|
+
message: `Value must be at least ${minimum}`,
|
|
244
|
+
path: nodeName,
|
|
245
|
+
params: { min: minimum, actual: value }
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
// src/core/validation/validators/MaximumValidator.ts
|
|
253
|
+
var MaximumValidator = class {
|
|
254
|
+
type = "maximum";
|
|
255
|
+
validate(context) {
|
|
256
|
+
const { value, schema, nodeName } = context;
|
|
257
|
+
const maximum = schema.maximum;
|
|
258
|
+
if (maximum === void 0) {
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
if (typeof value !== "number") {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
if (value > maximum) {
|
|
265
|
+
return {
|
|
266
|
+
severity: "error",
|
|
267
|
+
type: this.type,
|
|
268
|
+
message: `Value must be at most ${maximum}`,
|
|
269
|
+
path: nodeName,
|
|
270
|
+
params: { max: maximum, actual: value }
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
// src/core/validation/validators/EnumValidator.ts
|
|
278
|
+
var EnumValidator = class {
|
|
279
|
+
type = "enum";
|
|
280
|
+
validate(context) {
|
|
281
|
+
const { value, schema, nodeName } = context;
|
|
282
|
+
const enumValues = schema.enum;
|
|
283
|
+
if (!enumValues || enumValues.length === 0) {
|
|
284
|
+
return null;
|
|
285
|
+
}
|
|
286
|
+
if (!enumValues.includes(value)) {
|
|
287
|
+
return {
|
|
288
|
+
severity: "error",
|
|
289
|
+
type: this.type,
|
|
290
|
+
message: "Value must be one of the allowed values",
|
|
291
|
+
path: nodeName,
|
|
292
|
+
params: { allowed: [...enumValues], actual: value }
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
// src/core/validation/validators/ForeignKeyValidator.ts
|
|
300
|
+
var ForeignKeyValidator = class {
|
|
301
|
+
type = "foreignKey";
|
|
302
|
+
validate(context) {
|
|
303
|
+
const { value, schema, nodeName } = context;
|
|
304
|
+
const foreignKey = schema.foreignKey;
|
|
305
|
+
if (!foreignKey) {
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
if (value === "" || value === null || value === void 0) {
|
|
309
|
+
return {
|
|
310
|
+
severity: "error",
|
|
311
|
+
type: this.type,
|
|
312
|
+
message: "Foreign key reference is required",
|
|
313
|
+
path: nodeName,
|
|
314
|
+
params: { table: foreignKey }
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
// src/core/validation/createValidationEngine.ts
|
|
322
|
+
function createDefaultValidatorRegistry() {
|
|
323
|
+
const registry = new ValidatorRegistry();
|
|
324
|
+
registry.register("required", () => new RequiredValidator()).register("pattern", () => new PatternValidator()).register("minLength", () => new MinLengthValidator()).register("maxLength", () => new MaxLengthValidator()).register("minimum", () => new MinimumValidator()).register("maximum", () => new MaximumValidator()).register("enum", () => new EnumValidator()).register("foreignKey", () => new ForeignKeyValidator());
|
|
325
|
+
registry.addRule(new SchemaTruthyRule("required", "required")).addRule(new SchemaPropertyRule("pattern", "pattern")).addRule(new SchemaPropertyRule("minLength", "minLength")).addRule(new SchemaPropertyRule("maxLength", "maxLength")).addRule(new SchemaPropertyRule("minimum", "minimum")).addRule(new SchemaPropertyRule("maximum", "maximum")).addRule(new SchemaPropertyRule("enum", "enum")).addRule(new SchemaPropertyRule("foreignKey", "foreignKey"));
|
|
326
|
+
return registry;
|
|
327
|
+
}
|
|
328
|
+
function createValidationEngine(registry) {
|
|
329
|
+
const validatorRegistry = registry ?? createDefaultValidatorRegistry();
|
|
330
|
+
const resolver = new ValidatorResolver(validatorRegistry);
|
|
331
|
+
return new ValidationEngine(resolver);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export { CompositeRule, EnumValidator, ForeignKeyValidator, MaxLengthValidator, MaximumValidator, MinLengthValidator, MinimumValidator, PatternValidator, RequiredValidator, SchemaPropertyRule, SchemaTruthyRule, ValidationEngine, ValidatorRegistry, ValidatorResolver, createDefaultValidatorRegistry, createValidationEngine, noopAdapter };
|
|
335
|
+
//# sourceMappingURL=index.js.map
|
|
336
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/reactivity/noop-adapter.ts","../../src/core/validation/ValidatorRegistry.ts","../../src/core/validation/ValidatorResolver.ts","../../src/core/validation/ValidationEngine.ts","../../src/core/validation/rules/SchemaBasedRule.ts","../../src/core/validation/validators/RequiredValidator.ts","../../src/core/validation/validators/PatternValidator.ts","../../src/core/validation/validators/MinLengthValidator.ts","../../src/core/validation/validators/MaxLengthValidator.ts","../../src/core/validation/validators/MinimumValidator.ts","../../src/core/validation/validators/MaximumValidator.ts","../../src/core/validation/validators/EnumValidator.ts","../../src/core/validation/validators/ForeignKeyValidator.ts","../../src/core/validation/createValidationEngine.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { AnnotationsMap } from '../types/index.js';\nimport type { ReactivityAdapter } from './types.js';\n\nclass NoopReactivityAdapter implements ReactivityAdapter {\n makeObservable<T extends object>(\n _target: T,\n _annotations: AnnotationsMap<T>,\n ): void {\n // noop\n }\n\n observableArray<T>(): T[] {\n return [];\n }\n\n observableMap<K, V>(): Map<K, V> {\n return new Map();\n }\n\n reaction<T>(\n _expression: () => T,\n _effect: (value: T) => void,\n ): () => void {\n return () => {};\n }\n\n runInAction<T>(fn: () => T): T {\n return fn();\n }\n}\n\nexport const noopAdapter: ReactivityAdapter = new NoopReactivityAdapter();\n","import type { Validator, ValidatorFactoryFn, ValidatorRule } from './types.js';\n\nexport class ValidatorRegistry {\n private readonly validators = new Map<string, ValidatorFactoryFn>();\n private readonly rules: ValidatorRule[] = [];\n\n register(type: string, factory: ValidatorFactoryFn): this {\n this.validators.set(type, factory);\n return this;\n }\n\n addRule(rule: ValidatorRule): this {\n this.rules.push(rule);\n return this;\n }\n\n get(type: string): Validator | undefined {\n const factory = this.validators.get(type);\n return factory ? factory() : undefined;\n }\n\n has(type: string): boolean {\n return this.validators.has(type);\n }\n\n getRules(): readonly ValidatorRule[] {\n return this.rules;\n }\n\n getValidatorTypes(): string[] {\n return Array.from(this.validators.keys());\n }\n}\n","import type { Validator, ValidationContext } from './types.js';\nimport type { ValidatorRegistry } from './ValidatorRegistry.js';\n\nexport class ValidatorResolver {\n constructor(private readonly registry: ValidatorRegistry) {}\n\n resolve(context: ValidationContext): Validator[] {\n const validators: Validator[] = [];\n const rules = this.registry.getRules();\n\n for (const rule of rules) {\n if (rule.shouldApply(context)) {\n const validator = this.registry.get(rule.validatorType);\n if (validator) {\n validators.push(validator);\n }\n }\n }\n\n return validators;\n }\n}\n","import type { Diagnostic, ValidationContext } from './types.js';\nimport type { ValidatorResolver } from './ValidatorResolver.js';\n\nexport class ValidationEngine {\n constructor(private readonly resolver: ValidatorResolver) {}\n\n validate(context: ValidationContext): readonly Diagnostic[] {\n const validators = this.resolver.resolve(context);\n const diagnostics: Diagnostic[] = [];\n\n for (const validator of validators) {\n const diagnostic = validator.validate(context);\n if (diagnostic) {\n diagnostics.push(diagnostic);\n }\n }\n\n return diagnostics;\n }\n}\n","import type { ValidatorRule, ValidationContext, SchemaLike } from '../types.js';\n\nexport class SchemaPropertyRule implements ValidatorRule {\n constructor(\n readonly validatorType: string,\n private readonly propertyName: keyof SchemaLike,\n ) {}\n\n shouldApply(context: ValidationContext): boolean {\n const value = context.schema[this.propertyName];\n return value !== undefined && value !== null;\n }\n}\n\nexport class SchemaTruthyRule implements ValidatorRule {\n constructor(\n readonly validatorType: string,\n private readonly propertyName: keyof SchemaLike,\n ) {}\n\n shouldApply(context: ValidationContext): boolean {\n return context.schema[this.propertyName] === true;\n }\n}\n\nexport class CompositeRule implements ValidatorRule {\n constructor(\n readonly validatorType: string,\n private readonly conditions: Array<(context: ValidationContext) => boolean>,\n ) {}\n\n shouldApply(context: ValidationContext): boolean {\n return this.conditions.every((condition) => condition(context));\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class RequiredValidator implements Validator {\n readonly type = 'required';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, nodeName } = context;\n\n if (value === '' || value === null || value === undefined) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Field is required',\n path: nodeName,\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class PatternValidator implements Validator {\n readonly type = 'pattern';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const pattern = schema.pattern;\n\n if (!pattern) {\n return null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.length === 0) {\n return null;\n }\n\n try {\n if (!new RegExp(pattern).test(value)) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Value does not match pattern',\n path: nodeName,\n params: { pattern },\n };\n }\n } catch {\n return {\n severity: 'error',\n type: 'invalidPattern',\n message: 'Invalid regex pattern in schema',\n path: nodeName,\n params: { pattern },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MinLengthValidator implements Validator {\n readonly type = 'minLength';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const minLength = schema.minLength;\n\n if (minLength === undefined) {\n return null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.length < minLength) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at least ${minLength} characters`,\n path: nodeName,\n params: { min: minLength, actual: value.length },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MaxLengthValidator implements Validator {\n readonly type = 'maxLength';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const maxLength = schema.maxLength;\n\n if (maxLength === undefined) {\n return null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.length > maxLength) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at most ${maxLength} characters`,\n path: nodeName,\n params: { max: maxLength, actual: value.length },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MinimumValidator implements Validator {\n readonly type = 'minimum';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const minimum = schema.minimum;\n\n if (minimum === undefined) {\n return null;\n }\n\n if (typeof value !== 'number') {\n return null;\n }\n\n if (value < minimum) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at least ${minimum}`,\n path: nodeName,\n params: { min: minimum, actual: value },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MaximumValidator implements Validator {\n readonly type = 'maximum';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const maximum = schema.maximum;\n\n if (maximum === undefined) {\n return null;\n }\n\n if (typeof value !== 'number') {\n return null;\n }\n\n if (value > maximum) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at most ${maximum}`,\n path: nodeName,\n params: { max: maximum, actual: value },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class EnumValidator implements Validator {\n readonly type = 'enum';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const enumValues = schema.enum;\n\n if (!enumValues || enumValues.length === 0) {\n return null;\n }\n\n if (!(enumValues as readonly unknown[]).includes(value)) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Value must be one of the allowed values',\n path: nodeName,\n params: { allowed: [...enumValues], actual: value },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class ForeignKeyValidator implements Validator {\n readonly type = 'foreignKey';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const foreignKey = schema.foreignKey;\n\n if (!foreignKey) {\n return null;\n }\n\n if (value === '' || value === null || value === undefined) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Foreign key reference is required',\n path: nodeName,\n params: { table: foreignKey },\n };\n }\n\n return null;\n }\n}\n","import { ValidatorRegistry } from './ValidatorRegistry.js';\nimport { ValidatorResolver } from './ValidatorResolver.js';\nimport { ValidationEngine } from './ValidationEngine.js';\nimport { SchemaPropertyRule, SchemaTruthyRule } from './rules/index.js';\nimport {\n RequiredValidator,\n PatternValidator,\n MinLengthValidator,\n MaxLengthValidator,\n MinimumValidator,\n MaximumValidator,\n EnumValidator,\n ForeignKeyValidator,\n} from './validators/index.js';\n\nexport function createDefaultValidatorRegistry(): ValidatorRegistry {\n const registry = new ValidatorRegistry();\n\n registry\n .register('required', () => new RequiredValidator())\n .register('pattern', () => new PatternValidator())\n .register('minLength', () => new MinLengthValidator())\n .register('maxLength', () => new MaxLengthValidator())\n .register('minimum', () => new MinimumValidator())\n .register('maximum', () => new MaximumValidator())\n .register('enum', () => new EnumValidator())\n .register('foreignKey', () => new ForeignKeyValidator());\n\n registry\n .addRule(new SchemaTruthyRule('required', 'required'))\n .addRule(new SchemaPropertyRule('pattern', 'pattern'))\n .addRule(new SchemaPropertyRule('minLength', 'minLength'))\n .addRule(new SchemaPropertyRule('maxLength', 'maxLength'))\n .addRule(new SchemaPropertyRule('minimum', 'minimum'))\n .addRule(new SchemaPropertyRule('maximum', 'maximum'))\n .addRule(new SchemaPropertyRule('enum', 'enum'))\n .addRule(new SchemaPropertyRule('foreignKey', 'foreignKey'));\n\n return registry;\n}\n\nexport function createValidationEngine(\n registry?: ValidatorRegistry,\n): ValidationEngine {\n const validatorRegistry = registry ?? createDefaultValidatorRegistry();\n const resolver = new ValidatorResolver(validatorRegistry);\n return new ValidationEngine(resolver);\n}\n"]}
|
package/dist/formula/index.d.cts
CHANGED
package/dist/formula/index.d.ts
CHANGED