@stndrds/schema 1.0.0-alpha.282 → 1.0.0-alpha.284
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/all-DanoPxKr.d.ts +879 -0
- package/dist/all-bG_ha0VV.d.mts +879 -0
- package/dist/{attributes-CU871AfG.d.ts → attributes-CNYwg_Nr.d.ts} +3 -2
- package/dist/{attributes-DoiGyNFk.d.mts → attributes-CWPLbp7c.d.mts} +3 -2
- package/dist/capabilities.d.mts +146 -0
- package/dist/capabilities.d.ts +146 -0
- package/dist/capabilities.js +77 -0
- package/dist/capabilities.mjs +70 -0
- package/dist/{chunk-R34LOMT7.mjs → chunk-5OBQRDRM.mjs} +3 -3
- package/dist/{chunk-QGRYOIHT.mjs → chunk-AGRAFDGU.mjs} +40 -14
- package/dist/{chunk-DIMTNM3F.js → chunk-BOICAZHR.js} +5 -4
- package/dist/{chunk-V4MZOTLV.js → chunk-I3EYILYO.js} +5 -5
- package/dist/{chunk-LBGLB443.js → chunk-K6ET4CXP.js} +3 -3
- package/dist/{chunk-PLTLAMWJ.mjs → chunk-PNOWKRH2.mjs} +2 -2
- package/dist/{chunk-EFSS7PGC.mjs → chunk-R57T4UDX.mjs} +1 -1
- package/dist/{chunk-HOVUEYEQ.mjs → chunk-RUO25ERR.mjs} +4 -0
- package/dist/{chunk-L4KLYMUI.js → chunk-V26R64A4.js} +4 -0
- package/dist/{chunk-KIMECN6D.js → chunk-YZ5RCMIQ.js} +83 -46
- package/dist/exceptions.d.mts +6 -2
- package/dist/exceptions.d.ts +6 -2
- package/dist/exceptions.js +39 -39
- package/dist/exceptions.mjs +1 -1
- package/dist/{helpers-BNr-Dppk.d.ts → helpers-CXkVwpsl.d.ts} +3 -3
- package/dist/{helpers-CfEOUBmB.d.mts → helpers-Dul_r9rJ.d.mts} +3 -3
- package/dist/{index-D9XBjFnu.d.mts → index-Ca-MzQuU.d.mts} +8 -3
- package/dist/{index-Br7koyHF.d.ts → index-Ns6KGfrZ.d.ts} +8 -3
- package/dist/index.d.mts +1120 -206
- package/dist/index.d.ts +1120 -206
- package/dist/index.js +1184 -359
- package/dist/index.mjs +868 -118
- package/dist/{migrations-BGWgXHXb.d.ts → migrations-DaFneOfx.d.ts} +1 -1
- package/dist/{migrations-C-GN1xx_.d.mts → migrations-fRvadl6i.d.mts} +1 -1
- package/dist/{objects-BRypaBpi.d.mts → objects-CDwMSnqv.d.mts} +2 -2
- package/dist/{objects-BiOMwzLL.d.ts → objects-DJv6WrDE.d.ts} +2 -2
- package/dist/{types-80c2rOUZ.d.mts → types-CVYiFc69.d.mts} +1 -1
- package/dist/{types-DqYz8Iv_.d.ts → types-NGEww_ln.d.ts} +1 -1
- package/dist/utils.js +8 -8
- package/dist/utils.mjs +2 -2
- package/dist/validation/all.d.mts +7 -7
- package/dist/validation/all.d.ts +7 -7
- package/dist/validation/all.js +46 -46
- package/dist/validation/all.mjs +5 -5
- package/dist/validation/complex/currency.d.mts +2 -2
- package/dist/validation/complex/currency.d.ts +2 -2
- package/dist/validation/complex/location.d.mts +2 -2
- package/dist/validation/complex/location.d.ts +2 -2
- package/dist/validation/complex/phone.d.mts +2 -2
- package/dist/validation/complex/phone.d.ts +2 -2
- package/dist/validation/complex/relation.d.mts +2 -2
- package/dist/validation/complex/relation.d.ts +2 -2
- package/dist/validation/complex/richtext.d.mts +2 -2
- package/dist/validation/complex/richtext.d.ts +2 -2
- package/dist/validation/complex/select.d.mts +2 -2
- package/dist/validation/complex/select.d.ts +2 -2
- package/dist/validation/complex/user.d.mts +2 -2
- package/dist/validation/complex/user.d.ts +2 -2
- package/dist/validation/computed/formula.d.mts +2 -2
- package/dist/validation/computed/formula.d.ts +2 -2
- package/dist/validation/computed/rollup.d.mts +2 -2
- package/dist/validation/computed/rollup.d.ts +2 -2
- package/dist/validation/config/index.d.mts +4 -4
- package/dist/validation/config/index.d.ts +4 -4
- package/dist/validation/config/index.js +15 -11
- package/dist/validation/config/index.mjs +2 -2
- package/dist/validation/core/index.d.mts +3 -3
- package/dist/validation/core/index.d.ts +3 -3
- package/dist/validation/object/index.d.mts +5 -5
- package/dist/validation/object/index.d.ts +5 -5
- package/dist/validation/object/index.js +15 -15
- package/dist/validation/object/index.mjs +3 -3
- package/dist/validation/primitives/checkbox.d.mts +2 -2
- package/dist/validation/primitives/checkbox.d.ts +2 -2
- package/dist/validation/primitives/date.d.mts +2 -2
- package/dist/validation/primitives/date.d.ts +2 -2
- package/dist/validation/primitives/number.d.mts +2 -2
- package/dist/validation/primitives/number.d.ts +2 -2
- package/dist/validation/primitives/text.d.mts +2 -2
- package/dist/validation/primitives/text.d.ts +2 -2
- package/package.json +10 -5
- package/dist/all-C3EaFLCU.d.ts +0 -472
- package/dist/all-CQMswOrw.d.mts +0 -472
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkV26R64A4_js = require('./chunk-V26R64A4.js');
|
|
4
4
|
var zod = require('zod');
|
|
5
5
|
var constants = require('@stndrds/constants');
|
|
6
6
|
|
|
@@ -551,7 +551,7 @@ var attributeConfigSchemas = {
|
|
|
551
551
|
function getAttributeConfigSchema(type) {
|
|
552
552
|
const schema = attributeConfigSchemas[type];
|
|
553
553
|
if (!schema) {
|
|
554
|
-
throw new
|
|
554
|
+
throw new chunkV26R64A4_js.ValidationError(`Unsupported attribute type: ${type}`, []);
|
|
555
555
|
}
|
|
556
556
|
return schema;
|
|
557
557
|
}
|
|
@@ -575,7 +575,7 @@ function getAttributeConfigWriteSchema(type) {
|
|
|
575
575
|
}
|
|
576
576
|
}
|
|
577
577
|
function validationErrorFromIssues(issues) {
|
|
578
|
-
return
|
|
578
|
+
return chunkV26R64A4_js.ValidationError.fromZodErrors(
|
|
579
579
|
issues.map((issue) => ({
|
|
580
580
|
path: issue.path.map((segment) => typeof segment === "symbol" ? String(segment) : segment),
|
|
581
581
|
message: issue.message
|
|
@@ -598,7 +598,7 @@ function validatePatchedIcon(patch) {
|
|
|
598
598
|
}
|
|
599
599
|
const result = iconNameSchema.optional().safeParse(patch.icon);
|
|
600
600
|
if (!result.success) {
|
|
601
|
-
throw
|
|
601
|
+
throw chunkV26R64A4_js.ValidationError.fromZodErrors(
|
|
602
602
|
result.error.issues.map((issue) => ({
|
|
603
603
|
path: [
|
|
604
604
|
"icon",
|
|
@@ -645,6 +645,7 @@ exports.SCHEMA_LIMITS = SCHEMA_LIMITS;
|
|
|
645
645
|
exports.attributeConfigSchemas = attributeConfigSchemas;
|
|
646
646
|
exports.colorIdSchema = colorIdSchema;
|
|
647
647
|
exports.getAttributeConfigSchema = getAttributeConfigSchema;
|
|
648
|
+
exports.getAttributeConfigWriteSchema = getAttributeConfigWriteSchema;
|
|
648
649
|
exports.iconNameSchema = iconNameSchema;
|
|
649
650
|
exports.multiselectOptionWriteSchema = multiselectOptionWriteSchema;
|
|
650
651
|
exports.parseAttributeConfig = parseAttributeConfig;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkEEH4XQ7W_js = require('./chunk-EEH4XQ7W.js');
|
|
3
4
|
var chunkEW5XR2X3_js = require('./chunk-EW5XR2X3.js');
|
|
4
5
|
var chunkQWKLQRBX_js = require('./chunk-QWKLQRBX.js');
|
|
5
6
|
var chunkKNGWHQLR_js = require('./chunk-KNGWHQLR.js');
|
|
@@ -9,11 +10,10 @@ var chunk5WATIVCA_js = require('./chunk-5WATIVCA.js');
|
|
|
9
10
|
var chunkSI34M4IC_js = require('./chunk-SI34M4IC.js');
|
|
10
11
|
var chunkYIP5FJ5H_js = require('./chunk-YIP5FJ5H.js');
|
|
11
12
|
var chunkZPFOKBIN_js = require('./chunk-ZPFOKBIN.js');
|
|
12
|
-
var
|
|
13
|
+
var chunkV26R64A4_js = require('./chunk-V26R64A4.js');
|
|
13
14
|
var chunkACKMC6FL_js = require('./chunk-ACKMC6FL.js');
|
|
14
15
|
var chunkE6JUYGJX_js = require('./chunk-E6JUYGJX.js');
|
|
15
16
|
var chunkQ4SZAMJT_js = require('./chunk-Q4SZAMJT.js');
|
|
16
|
-
var chunkEEH4XQ7W_js = require('./chunk-EEH4XQ7W.js');
|
|
17
17
|
var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
|
|
18
18
|
var zod = require('zod');
|
|
19
19
|
|
|
@@ -162,7 +162,7 @@ function validateObjectOrThrow(objectDef, data) {
|
|
|
162
162
|
if (!result.success) {
|
|
163
163
|
const errors = result.errors ?? [];
|
|
164
164
|
const detail = errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("\n") || "Unknown validation error";
|
|
165
|
-
throw new
|
|
165
|
+
throw new chunkV26R64A4_js.ValidationError(
|
|
166
166
|
`Validation failed for ${objectDef.label}:
|
|
167
167
|
${detail}`,
|
|
168
168
|
errors.map((err) => ({ path: err.path, message: err.message }))
|
|
@@ -189,7 +189,7 @@ function validateDraftOrThrow(objectDef, data) {
|
|
|
189
189
|
if (!result.success) {
|
|
190
190
|
const errors = result.errors ?? [];
|
|
191
191
|
const detail = errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("\n") || "Unknown validation error";
|
|
192
|
-
throw new
|
|
192
|
+
throw new chunkV26R64A4_js.ValidationError(
|
|
193
193
|
`Draft validation failed for ${objectDef.label}:
|
|
194
194
|
${detail}`,
|
|
195
195
|
errors.map((err) => ({ path: err.path, message: err.message }))
|
|
@@ -201,7 +201,7 @@ function rejectUnknownAttributesOrThrow(objectDef, data) {
|
|
|
201
201
|
const knownNames = new Set(objectDef.attributes.map((a) => a.name));
|
|
202
202
|
const unknownKeys = Object.keys(data).filter((key) => !knownNames.has(key));
|
|
203
203
|
if (unknownKeys.length > 0) {
|
|
204
|
-
throw new
|
|
204
|
+
throw new chunkV26R64A4_js.ValidationError(
|
|
205
205
|
`Unknown attribute${unknownKeys.length > 1 ? "s" : ""} for ${objectDef.label}: ${unknownKeys.join(", ")}`,
|
|
206
206
|
unknownKeys.map((key) => ({ path: [key], message: "Unknown attribute" }))
|
|
207
207
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkV26R64A4_js = require('./chunk-V26R64A4.js');
|
|
4
4
|
|
|
5
5
|
// src/utils/canonical-json.ts
|
|
6
6
|
function canonicalStringify(value) {
|
|
@@ -17,10 +17,10 @@ function canonicalStringify(value) {
|
|
|
17
17
|
case "object":
|
|
18
18
|
break;
|
|
19
19
|
default:
|
|
20
|
-
throw new
|
|
20
|
+
throw new chunkV26R64A4_js.ValidationError(`Cannot canonicalize value of type ${typeof v}`, []);
|
|
21
21
|
}
|
|
22
22
|
const obj = v;
|
|
23
|
-
if (seen.has(obj)) throw new
|
|
23
|
+
if (seen.has(obj)) throw new chunkV26R64A4_js.ValidationError("Cannot canonicalize circular structure", []);
|
|
24
24
|
seen.add(obj);
|
|
25
25
|
try {
|
|
26
26
|
if (Array.isArray(obj)) return `[${obj.map((e) => encode(e) ?? "null").join(",")}]`;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRelationValidator } from './chunk-GO6LQADH.mjs';
|
|
1
2
|
import { createRichtextValidator } from './chunk-QVLQPW3O.mjs';
|
|
2
3
|
import { createMultiselectValidator, createSelectValidator, createStatusValidator } from './chunk-ZDQ5AP26.mjs';
|
|
3
4
|
import { createUserValidator } from './chunk-LV3FEUKU.mjs';
|
|
@@ -7,11 +8,10 @@ import { createCheckboxValidator } from './chunk-OSSGN43B.mjs';
|
|
|
7
8
|
import { createDateValidator } from './chunk-Q44QKLN4.mjs';
|
|
8
9
|
import { createNumberValidator } from './chunk-UANQJ2GH.mjs';
|
|
9
10
|
import { createTextValidator } from './chunk-O73ROMWQ.mjs';
|
|
10
|
-
import { ValidationError } from './chunk-
|
|
11
|
+
import { ValidationError } from './chunk-RUO25ERR.mjs';
|
|
11
12
|
import { createCurrencyValidator } from './chunk-AYVHMVKQ.mjs';
|
|
12
13
|
import { createLocationValidator } from './chunk-YUFTHPOE.mjs';
|
|
13
14
|
import { createPhoneValidator } from './chunk-R5LAJCBU.mjs';
|
|
14
|
-
import { createRelationValidator } from './chunk-GO6LQADH.mjs';
|
|
15
15
|
import { DEFAULT_VALIDATION_MESSAGES, formatZodErrors } from './chunk-HRQEZUAA.mjs';
|
|
16
16
|
import { z } from 'zod';
|
|
17
17
|
|
|
@@ -203,6 +203,8 @@ var NotFoundError = class extends SchemaError {
|
|
|
203
203
|
resourceType,
|
|
204
204
|
resourceId
|
|
205
205
|
});
|
|
206
|
+
/** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
|
|
207
|
+
this._tag = "NotFoundError";
|
|
206
208
|
this.name = "NotFoundError";
|
|
207
209
|
this.resourceType = resourceType;
|
|
208
210
|
this.resourceId = resourceId;
|
|
@@ -235,6 +237,8 @@ var SchemaPlanNotFoundError = class extends NotFoundError {
|
|
|
235
237
|
var ValidationError = class _ValidationError extends SchemaError {
|
|
236
238
|
constructor(message, errors) {
|
|
237
239
|
super(message, SchemaErrorCode.VALIDATION_FAILED, { errors });
|
|
240
|
+
/** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
|
|
241
|
+
this._tag = "ValidationError";
|
|
238
242
|
this.name = "ValidationError";
|
|
239
243
|
this.errors = errors;
|
|
240
244
|
}
|
|
@@ -205,6 +205,8 @@ var NotFoundError = class extends SchemaError {
|
|
|
205
205
|
resourceType,
|
|
206
206
|
resourceId
|
|
207
207
|
});
|
|
208
|
+
/** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
|
|
209
|
+
this._tag = "NotFoundError";
|
|
208
210
|
this.name = "NotFoundError";
|
|
209
211
|
this.resourceType = resourceType;
|
|
210
212
|
this.resourceId = resourceId;
|
|
@@ -237,6 +239,8 @@ var SchemaPlanNotFoundError = class extends NotFoundError {
|
|
|
237
239
|
var ValidationError = class _ValidationError extends SchemaError {
|
|
238
240
|
constructor(message, errors) {
|
|
239
241
|
super(message, SchemaErrorCode.VALIDATION_FAILED, { errors });
|
|
242
|
+
/** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
|
|
243
|
+
this._tag = "ValidationError";
|
|
240
244
|
this.name = "ValidationError";
|
|
241
245
|
this.errors = errors;
|
|
242
246
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkBOICAZHR_js = require('./chunk-BOICAZHR.js');
|
|
4
|
+
var chunkV26R64A4_js = require('./chunk-V26R64A4.js');
|
|
5
5
|
var zod = require('zod');
|
|
6
6
|
|
|
7
7
|
// src/types/system-attributes.ts
|
|
@@ -500,7 +500,7 @@ function canonicalizeFilterValue(rule, effectiveType) {
|
|
|
500
500
|
const message = `Filter on a currency attribute expected a numeric amount, received ${JSON.stringify(
|
|
501
501
|
value
|
|
502
502
|
)}`;
|
|
503
|
-
throw new
|
|
503
|
+
throw new chunkV26R64A4_js.ValidationError(message, [{ path: ["value"], message }]);
|
|
504
504
|
}
|
|
505
505
|
function hasCurrencyAmount(value) {
|
|
506
506
|
if (typeof value !== "object") return true;
|
|
@@ -661,13 +661,13 @@ function resolveCanonicalOperator(rawOperator, effectiveType) {
|
|
|
661
661
|
const replacement = REMOVED_OPERATOR_REPLACEMENTS[rawOperator];
|
|
662
662
|
if (replacement) {
|
|
663
663
|
const m = `Unknown filter operator "${rawOperator}" \u2014 use ${replacement}`;
|
|
664
|
-
throw new
|
|
664
|
+
throw new chunkV26R64A4_js.ValidationError(m, [{ path: ["operator"], message: m }]);
|
|
665
665
|
}
|
|
666
666
|
const normalized = normalizeOperator(rawOperator);
|
|
667
667
|
const membership = SUBSTRING_TO_MEMBERSHIP[normalized];
|
|
668
668
|
if (membership && SET_MEMBERSHIP_TYPES.has(effectiveType)) {
|
|
669
669
|
const m = `Operator "${normalized}" is not valid for type "${effectiveType}" \u2014 use "${membership}"`;
|
|
670
|
-
throw new
|
|
670
|
+
throw new chunkV26R64A4_js.ValidationError(m, [{ path: ["operator"], message: m }]);
|
|
671
671
|
}
|
|
672
672
|
return normalized;
|
|
673
673
|
}
|
|
@@ -677,7 +677,7 @@ function assertOperatorForType(operator, type, context) {
|
|
|
677
677
|
if (!ops?.includes(normalized)) {
|
|
678
678
|
const validList = ops?.length ? ops.join(", ") : "(no operators registered for this type)";
|
|
679
679
|
const summary = `Operator "${operator}" is not valid for ${context} type "${type}". Valid operators: ${validList}.`;
|
|
680
|
-
throw new
|
|
680
|
+
throw new chunkV26R64A4_js.ValidationError(summary, [
|
|
681
681
|
{
|
|
682
682
|
path: ["operator"],
|
|
683
683
|
message: summary
|
|
@@ -690,7 +690,7 @@ function assertRelativeDateValue(rule) {
|
|
|
690
690
|
if (rule.operator !== "is_within") return;
|
|
691
691
|
if (!isRelativeDateValue(rule.value)) {
|
|
692
692
|
const m = `Operator "is_within" requires a relative-date value { amount: positive number, unit: days|weeks|months|years, direction: past|future }`;
|
|
693
|
-
throw new
|
|
693
|
+
throw new chunkV26R64A4_js.ValidationError(m, [{ path: ["value"], message: m }]);
|
|
694
694
|
}
|
|
695
695
|
}
|
|
696
696
|
function applyCanonicalForm(rule, operator, effectiveType) {
|
|
@@ -703,11 +703,11 @@ function assertDynamicValueForAttribute(rule, attrType) {
|
|
|
703
703
|
const v = rule.value;
|
|
704
704
|
if (v.dynamic === "actor" && attrType !== "user") {
|
|
705
705
|
const m = `actor token (@me) is only valid on user attributes, not "${attrType}"`;
|
|
706
|
-
throw new
|
|
706
|
+
throw new chunkV26R64A4_js.ValidationError(m, [{ path: ["value"], message: m }]);
|
|
707
707
|
}
|
|
708
708
|
if (v.dynamic === "date" && attrType !== "date") {
|
|
709
709
|
const m = `date token (@today/@now) is only valid on date attributes, not "${attrType}"`;
|
|
710
|
-
throw new
|
|
710
|
+
throw new chunkV26R64A4_js.ValidationError(m, [{ path: ["value"], message: m }]);
|
|
711
711
|
}
|
|
712
712
|
}
|
|
713
713
|
function collectQualifiedRuleIssues(rule, context) {
|
|
@@ -715,7 +715,7 @@ function collectQualifiedRuleIssues(rule, context) {
|
|
|
715
715
|
validateQualifiedRule({ ...rule }, context);
|
|
716
716
|
return [];
|
|
717
717
|
} catch (error) {
|
|
718
|
-
if (!(error instanceof
|
|
718
|
+
if (!(error instanceof chunkV26R64A4_js.ValidationError)) throw error;
|
|
719
719
|
return error.errors.map((issue) => ({ ...issue, path: [...issue.path] }));
|
|
720
720
|
}
|
|
721
721
|
}
|
|
@@ -723,17 +723,17 @@ function validateQualifiedRule(rule, context) {
|
|
|
723
723
|
const rootAttr = context.attributes.find((a) => a.name === rule.attribute);
|
|
724
724
|
const systemOps = SYSTEM_FILTER_OPERATORS[rule.attribute];
|
|
725
725
|
if (!(rootAttr || systemOps)) {
|
|
726
|
-
throw new
|
|
726
|
+
throw new chunkV26R64A4_js.ValidationError(`Unknown attribute: ${rule.attribute}`, [
|
|
727
727
|
{ path: ["attribute"], message: `Unknown attribute: ${rule.attribute}` }
|
|
728
728
|
]);
|
|
729
729
|
}
|
|
730
730
|
if (rule.quantifier !== void 0 && !rule.property) {
|
|
731
731
|
const m = `quantifier is only valid on qualified edge rules (set "property")`;
|
|
732
|
-
throw new
|
|
732
|
+
throw new chunkV26R64A4_js.ValidationError(m, [{ path: ["quantifier"], message: m }]);
|
|
733
733
|
}
|
|
734
734
|
if (!rootAttr) {
|
|
735
735
|
if (rule.property) {
|
|
736
|
-
throw new
|
|
736
|
+
throw new chunkV26R64A4_js.ValidationError(`Cannot qualify system attribute "${rule.attribute}"`, [
|
|
737
737
|
{ path: ["property"], message: `"${rule.attribute}" is a system column, not a reference` }
|
|
738
738
|
]);
|
|
739
739
|
}
|
|
@@ -741,7 +741,7 @@ function validateQualifiedRule(rule, context) {
|
|
|
741
741
|
const normalizedOperator2 = resolveCanonicalOperator(rule.operator, effectiveType);
|
|
742
742
|
if (!systemOps.includes(normalizedOperator2)) {
|
|
743
743
|
const summary = `Operator "${rule.operator}" is not valid for system attribute "${rule.attribute}". Valid operators: ${systemOps.join(", ")}.`;
|
|
744
|
-
throw new
|
|
744
|
+
throw new chunkV26R64A4_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
|
|
745
745
|
}
|
|
746
746
|
applyCanonicalForm(rule, normalizedOperator2, effectiveType);
|
|
747
747
|
return;
|
|
@@ -753,25 +753,25 @@ function validateQualifiedRule(rule, context) {
|
|
|
753
753
|
if (!ops.includes(normalizedOperator2)) {
|
|
754
754
|
const validList = ops.length ? ops.join(", ") : "(not filterable)";
|
|
755
755
|
const summary = `Operator "${rule.operator}" is not valid for attribute "${rootAttr.name}". Valid operators: ${validList}.`;
|
|
756
|
-
throw new
|
|
756
|
+
throw new chunkV26R64A4_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
|
|
757
757
|
}
|
|
758
758
|
applyCanonicalForm(rule, normalizedOperator2, resolveEffectiveFilterType(rootAttr));
|
|
759
759
|
return;
|
|
760
760
|
}
|
|
761
761
|
if (!REFERENCE_TYPES.has(rootAttr.type)) {
|
|
762
|
-
throw new
|
|
762
|
+
throw new chunkV26R64A4_js.ValidationError(`Cannot qualify ${rootAttr.type} attribute "${rule.attribute}"`, [
|
|
763
763
|
{ path: ["property"], message: `Attribute "${rule.attribute}" is not a reference type` }
|
|
764
764
|
]);
|
|
765
765
|
}
|
|
766
766
|
const propSchema = rootAttr.properties;
|
|
767
767
|
if (!propSchema) {
|
|
768
|
-
throw new
|
|
768
|
+
throw new chunkV26R64A4_js.ValidationError(`Attribute "${rule.attribute}" has no qualifyWith schema`, [
|
|
769
769
|
{ path: ["property"], message: `"${rule.attribute}" has no qualifyWith` }
|
|
770
770
|
]);
|
|
771
771
|
}
|
|
772
772
|
const propDef = propSchema.definitions.find((p) => p.name === rule.property);
|
|
773
773
|
if (!propDef) {
|
|
774
|
-
throw new
|
|
774
|
+
throw new chunkV26R64A4_js.ValidationError(
|
|
775
775
|
`Property "${rule.property}" not defined on "${rule.attribute}".qualifyWith()`,
|
|
776
776
|
[{ path: ["property"], message: `Unknown property: ${rule.property}` }]
|
|
777
777
|
);
|
|
@@ -787,7 +787,7 @@ function parseResourceVisibility(value) {
|
|
|
787
787
|
if (typeof value === "string" && RESOURCE_VISIBILITIES.includes(value)) {
|
|
788
788
|
return value;
|
|
789
789
|
}
|
|
790
|
-
throw new
|
|
790
|
+
throw new chunkV26R64A4_js.ValidationError(
|
|
791
791
|
`visibility must be one of: ${RESOURCE_VISIBILITIES.join(", ")} (received: ${String(value)})`,
|
|
792
792
|
[]
|
|
793
793
|
);
|
|
@@ -821,12 +821,12 @@ var RESERVED_OBJECT_NAMES = ["skill"];
|
|
|
821
821
|
// src/validators/view-config.schema.ts
|
|
822
822
|
var createModeSchema = zod.z.enum(["redirect", "inline", "peek"]);
|
|
823
823
|
var nonEmptyStringArraySchema = zod.z.array(zod.z.string()).min(1);
|
|
824
|
-
var columnsSchema = zod.z.array(zod.z.string()).max(
|
|
824
|
+
var columnsSchema = zod.z.array(zod.z.string()).max(chunkBOICAZHR_js.SCHEMA_LIMITS.columnsPerTab);
|
|
825
825
|
var sortRuleSchema = zod.z.object({
|
|
826
826
|
attribute: zod.z.string(),
|
|
827
827
|
direction: zod.z.enum(["asc", "desc"])
|
|
828
828
|
}).strict();
|
|
829
|
-
var sortsSchema = zod.z.array(sortRuleSchema).max(
|
|
829
|
+
var sortsSchema = zod.z.array(sortRuleSchema).max(chunkBOICAZHR_js.SCHEMA_LIMITS.sortsPerTab);
|
|
830
830
|
var relativeDateValueSchema = zod.z.object({
|
|
831
831
|
amount: zod.z.number(),
|
|
832
832
|
unit: zod.z.enum(["days", "weeks", "months", "years"]),
|
|
@@ -900,7 +900,7 @@ var filterRuleSchema = zod.z.object({
|
|
|
900
900
|
operator: filterOperatorSchema,
|
|
901
901
|
value: filterValueSchema
|
|
902
902
|
}).strict();
|
|
903
|
-
var filterRulesSchema = zod.z.array(filterRuleSchema).max(
|
|
903
|
+
var filterRulesSchema = zod.z.array(filterRuleSchema).max(chunkBOICAZHR_js.SCHEMA_LIMITS.filterRulesPerTab);
|
|
904
904
|
var filterStateSchema = zod.z.object({
|
|
905
905
|
combinator: zod.z.enum(["and", "or"]),
|
|
906
906
|
rules: filterRulesSchema
|
|
@@ -961,20 +961,25 @@ var fieldPresentationShape = {
|
|
|
961
961
|
label: zod.z.string().optional(),
|
|
962
962
|
readOnly: zod.z.boolean().optional()
|
|
963
963
|
};
|
|
964
|
-
var
|
|
965
|
-
/** Stable slot identity. Optional: a builder may omit it, `ensureFieldIds` assigns it. */
|
|
966
|
-
id: zod.z.string().optional(),
|
|
964
|
+
var fieldShape = {
|
|
967
965
|
attribute: zod.z.string().optional(),
|
|
968
966
|
attributeGroup: attributeGroupFieldSchema.optional(),
|
|
969
967
|
...fieldPresentationShape
|
|
970
|
-
}
|
|
968
|
+
};
|
|
969
|
+
function refineField(field, ctx) {
|
|
971
970
|
if (field.attribute === void 0 === (field.attributeGroup === void 0)) {
|
|
972
971
|
ctx.addIssue({
|
|
973
972
|
code: "custom",
|
|
974
973
|
message: "A field must define exactly one of attribute or attributeGroup"
|
|
975
974
|
});
|
|
976
975
|
}
|
|
977
|
-
}
|
|
976
|
+
}
|
|
977
|
+
var fieldSchema = zod.z.object({
|
|
978
|
+
/** Stable slot identity. Optional: a builder may omit it, `ensureFieldIds` assigns it. */
|
|
979
|
+
id: zod.z.string().optional(),
|
|
980
|
+
...fieldShape
|
|
981
|
+
}).strict().superRefine(refineField);
|
|
982
|
+
var fieldSlotSchema = zod.z.object({ id: zod.z.string().min(1), ...fieldShape }).strict().superRefine(refineField);
|
|
978
983
|
var baseGroupShape = {
|
|
979
984
|
id: zod.z.string(),
|
|
980
985
|
label: zod.z.string(),
|
|
@@ -986,35 +991,38 @@ var baseGroupShape = {
|
|
|
986
991
|
var fieldGroupWriteSchema = zod.z.object({
|
|
987
992
|
...baseGroupShape,
|
|
988
993
|
type: zod.z.literal("fields"),
|
|
989
|
-
fields: zod.z.array(fieldSchema).max(
|
|
994
|
+
fields: zod.z.array(fieldSchema).max(chunkBOICAZHR_js.SCHEMA_LIMITS.fieldsPerGroup)
|
|
990
995
|
}).strict();
|
|
991
996
|
var groupWriteSchema = fieldGroupWriteSchema;
|
|
992
997
|
var baseTabShape = {
|
|
993
998
|
id: zod.z.string(),
|
|
994
999
|
name: zod.z.string(),
|
|
995
1000
|
label: zod.z.string(),
|
|
996
|
-
icon:
|
|
1001
|
+
icon: chunkBOICAZHR_js.iconNameSchema.optional(),
|
|
997
1002
|
order: zod.z.number().optional()
|
|
998
1003
|
};
|
|
999
|
-
var
|
|
1004
|
+
var formTabGroupsSchema = zod.z.array(groupWriteSchema).max(chunkBOICAZHR_js.SCHEMA_LIMITS.groupsPerFormTab);
|
|
1005
|
+
var formTabShape = {
|
|
1000
1006
|
...baseTabShape,
|
|
1001
1007
|
type: zod.z.literal("form"),
|
|
1002
|
-
groups:
|
|
1008
|
+
groups: formTabGroupsSchema,
|
|
1003
1009
|
formColumns: zod.z.union([zod.z.literal(1), zod.z.literal(2), zod.z.literal(3)]).optional(),
|
|
1004
1010
|
density: zod.z.enum(["compact", "comfortable", "spacious"]).optional()
|
|
1005
|
-
}
|
|
1011
|
+
};
|
|
1012
|
+
var formTabDraftObjectSchema = zod.z.object(formTabShape).strict();
|
|
1013
|
+
function refineFormTab(tab, ctx) {
|
|
1006
1014
|
addDuplicateIdIssues(tab.groups, ctx, ["groups"]);
|
|
1007
1015
|
const totalFields = tab.groups.reduce(
|
|
1008
1016
|
(count, group) => count + (group.type === "fields" ? group.fields.length : 0),
|
|
1009
1017
|
0
|
|
1010
1018
|
);
|
|
1011
|
-
if (totalFields >
|
|
1019
|
+
if (totalFields > chunkBOICAZHR_js.SCHEMA_LIMITS.fieldsPerFormTab) {
|
|
1012
1020
|
ctx.addIssue({
|
|
1013
1021
|
code: "too_big",
|
|
1014
1022
|
origin: "array",
|
|
1015
|
-
maximum:
|
|
1023
|
+
maximum: chunkBOICAZHR_js.SCHEMA_LIMITS.fieldsPerFormTab,
|
|
1016
1024
|
inclusive: true,
|
|
1017
|
-
message: `A form tab can contain at most ${
|
|
1025
|
+
message: `A form tab can contain at most ${chunkBOICAZHR_js.SCHEMA_LIMITS.fieldsPerFormTab} fields`,
|
|
1018
1026
|
path: ["groups"]
|
|
1019
1027
|
});
|
|
1020
1028
|
}
|
|
@@ -1034,7 +1042,9 @@ var formTabWriteSchema = zod.z.object({
|
|
|
1034
1042
|
seenAttributeGroupIds.add(id);
|
|
1035
1043
|
});
|
|
1036
1044
|
});
|
|
1037
|
-
}
|
|
1045
|
+
}
|
|
1046
|
+
var formTabWriteSchema = zod.z.object({ ...formTabShape, groups: formTabGroupsSchema.min(1) }).strict().superRefine(refineFormTab);
|
|
1047
|
+
var formTabDraftSchema = formTabDraftObjectSchema.superRefine(refineFormTab);
|
|
1038
1048
|
var relationSourceSchema = zod.z.object({
|
|
1039
1049
|
type: zod.z.literal("relation"),
|
|
1040
1050
|
attribute: zod.z.string()
|
|
@@ -1216,15 +1226,14 @@ var formsTabSchema = zod.z.object({
|
|
|
1216
1226
|
var emailsTabSchema = zod.z.object({
|
|
1217
1227
|
...baseTabShape,
|
|
1218
1228
|
type: zod.z.literal("emails"),
|
|
1219
|
-
emailAttributeIds: zod.z.array(zod.z.string()).max(
|
|
1229
|
+
emailAttributeIds: zod.z.array(zod.z.string()).max(chunkBOICAZHR_js.SCHEMA_LIMITS.emailAttributesPerTab)
|
|
1220
1230
|
}).strict();
|
|
1221
1231
|
var meetingsTabSchema = zod.z.object({
|
|
1222
1232
|
...baseTabShape,
|
|
1223
1233
|
type: zod.z.literal("meetings"),
|
|
1224
|
-
emailAttributeIds: zod.z.array(zod.z.string()).max(
|
|
1234
|
+
emailAttributeIds: zod.z.array(zod.z.string()).max(chunkBOICAZHR_js.SCHEMA_LIMITS.emailAttributesPerTab)
|
|
1225
1235
|
}).strict();
|
|
1226
|
-
var
|
|
1227
|
-
formTabWriteSchema,
|
|
1236
|
+
var nonFormDetailTabSchemas = [
|
|
1228
1237
|
tableTabSchema,
|
|
1229
1238
|
customTabSchema,
|
|
1230
1239
|
activityTabSchema,
|
|
@@ -1233,11 +1242,19 @@ var detailTabSchema = zod.z.discriminatedUnion("type", [
|
|
|
1233
1242
|
formsTabSchema,
|
|
1234
1243
|
emailsTabSchema,
|
|
1235
1244
|
meetingsTabSchema
|
|
1245
|
+
];
|
|
1246
|
+
var detailTabSchema = zod.z.discriminatedUnion("type", [
|
|
1247
|
+
formTabWriteSchema,
|
|
1248
|
+
...nonFormDetailTabSchemas
|
|
1249
|
+
]);
|
|
1250
|
+
var detailTabDraftSchema = zod.z.discriminatedUnion("type", [
|
|
1251
|
+
formTabDraftSchema,
|
|
1252
|
+
...nonFormDetailTabSchemas
|
|
1236
1253
|
]);
|
|
1237
1254
|
var listTabCommonShape = {
|
|
1238
1255
|
id: zod.z.string(),
|
|
1239
1256
|
label: zod.z.string(),
|
|
1240
|
-
icon:
|
|
1257
|
+
icon: chunkBOICAZHR_js.iconNameSchema.optional(),
|
|
1241
1258
|
default: zod.z.boolean().optional(),
|
|
1242
1259
|
// Which records the tab scopes to. `"all"` is the default and means "impose
|
|
1243
1260
|
// no scope" — the mandatory viewer predicate alone decides, so the tab shows
|
|
@@ -1271,7 +1288,7 @@ var listViewTabSchema = zod.z.discriminatedUnion("layout", [
|
|
|
1271
1288
|
]);
|
|
1272
1289
|
var _listViewConfigSchema = zod.z.object({
|
|
1273
1290
|
defaultFilters: filterGroupSchema.optional(),
|
|
1274
|
-
tabs: zod.z.array(listViewTabSchema).min(1).max(
|
|
1291
|
+
tabs: zod.z.array(listViewTabSchema).min(1).max(chunkBOICAZHR_js.SCHEMA_LIMITS.tabsPerView)
|
|
1275
1292
|
}).strict().superRefine((config, ctx) => {
|
|
1276
1293
|
addDuplicateIdIssues(config.tabs, ctx, ["tabs"]);
|
|
1277
1294
|
let hasDefault = false;
|
|
@@ -1292,7 +1309,7 @@ var sidePanelPaneSchema = zod.z.discriminatedUnion("kind", [
|
|
|
1292
1309
|
kind: zod.z.literal("fields"),
|
|
1293
1310
|
id: zod.z.string().optional(),
|
|
1294
1311
|
label: zod.z.string().optional(),
|
|
1295
|
-
attributes: zod.z.array(zod.z.string()).max(
|
|
1312
|
+
attributes: zod.z.array(zod.z.string()).max(chunkBOICAZHR_js.SCHEMA_LIMITS.sidePanelAttributes)
|
|
1296
1313
|
}).strict(),
|
|
1297
1314
|
zod.z.object({
|
|
1298
1315
|
kind: zod.z.literal("activity"),
|
|
@@ -1311,10 +1328,10 @@ var sidePanelPaneSchema = zod.z.discriminatedUnion("kind", [
|
|
|
1311
1328
|
}).strict()
|
|
1312
1329
|
]);
|
|
1313
1330
|
var _detailViewConfigSchema = zod.z.object({
|
|
1314
|
-
tabs: zod.z.array(detailTabSchema).min(1).max(
|
|
1331
|
+
tabs: zod.z.array(detailTabSchema).min(1).max(chunkBOICAZHR_js.SCHEMA_LIMITS.tabsPerView),
|
|
1315
1332
|
sidePanel: zod.z.object({
|
|
1316
|
-
attributes: zod.z.array(zod.z.string()).max(
|
|
1317
|
-
panes: zod.z.array(sidePanelPaneSchema).max(
|
|
1333
|
+
attributes: zod.z.array(zod.z.string()).max(chunkBOICAZHR_js.SCHEMA_LIMITS.sidePanelAttributes).optional(),
|
|
1334
|
+
panes: zod.z.array(sidePanelPaneSchema).max(chunkBOICAZHR_js.SCHEMA_LIMITS.sidePanelPanes).optional(),
|
|
1318
1335
|
width: zod.z.number().optional()
|
|
1319
1336
|
}).strict().refine((sidePanel) => sidePanel.attributes !== void 0 || sidePanel.panes !== void 0, {
|
|
1320
1337
|
message: "sidePanel requires attributes or panes"
|
|
@@ -1350,8 +1367,19 @@ function parseViewConfig(type, input) {
|
|
|
1350
1367
|
return viewConfigByTypeSchema.parse({ type, config: input }).config;
|
|
1351
1368
|
}
|
|
1352
1369
|
}
|
|
1370
|
+
var LIST_TAB_TABLE_KEYS = ["columnSizing"];
|
|
1371
|
+
var LIST_TAB_KANBAN_KEYS = [
|
|
1372
|
+
"groupByAttribute",
|
|
1373
|
+
"cardUserAttribute",
|
|
1374
|
+
"cardDateAttribute",
|
|
1375
|
+
"kanbanColumnOrder",
|
|
1376
|
+
"kanbanColumnVisibility",
|
|
1377
|
+
"kanbanPinnedColumns"
|
|
1378
|
+
];
|
|
1353
1379
|
|
|
1354
1380
|
exports.ATTRIBUTE_FILTER_OPERATORS = ATTRIBUTE_FILTER_OPERATORS;
|
|
1381
|
+
exports.LIST_TAB_KANBAN_KEYS = LIST_TAB_KANBAN_KEYS;
|
|
1382
|
+
exports.LIST_TAB_TABLE_KEYS = LIST_TAB_TABLE_KEYS;
|
|
1355
1383
|
exports.LIST_VIEW_TAB_VISIBILITIES = LIST_VIEW_TAB_VISIBILITIES;
|
|
1356
1384
|
exports.NO_VALUE_OPERATORS = NO_VALUE_OPERATORS;
|
|
1357
1385
|
exports.OPERATORS_BY_TYPE = OPERATORS_BY_TYPE;
|
|
@@ -1366,17 +1394,25 @@ exports.SYSTEM_FIELD_NAMES = SYSTEM_FIELD_NAMES;
|
|
|
1366
1394
|
exports.SYSTEM_FILTER_ATTRIBUTE_TYPES = SYSTEM_FILTER_ATTRIBUTE_TYPES;
|
|
1367
1395
|
exports.canonicalizeFilterValue = canonicalizeFilterValue;
|
|
1368
1396
|
exports.collectQualifiedRuleIssues = collectQualifiedRuleIssues;
|
|
1397
|
+
exports.columnsSchema = columnsSchema;
|
|
1369
1398
|
exports.currentActor = currentActor;
|
|
1399
|
+
exports.detailTabDraftSchema = detailTabDraftSchema;
|
|
1370
1400
|
exports.detailTabSchema = detailTabSchema;
|
|
1371
1401
|
exports.detailViewConfigSchema = detailViewConfigSchema;
|
|
1372
1402
|
exports.extractCurrencyFilterValue = extractCurrencyFilterValue;
|
|
1373
1403
|
exports.extractFilterValue = extractFilterValue;
|
|
1404
|
+
exports.fieldSchema = fieldSchema;
|
|
1405
|
+
exports.fieldShape = fieldShape;
|
|
1406
|
+
exports.fieldSlotSchema = fieldSlotSchema;
|
|
1407
|
+
exports.filterGroupSchema = filterGroupSchema;
|
|
1408
|
+
exports.filterStateSchema = filterStateSchema;
|
|
1374
1409
|
exports.getAttributeCapabilities = getAttributeCapabilities;
|
|
1375
1410
|
exports.getAttributeFilterOperators = getAttributeFilterOperators;
|
|
1376
1411
|
exports.getOperatorPolarity = getOperatorPolarity;
|
|
1377
1412
|
exports.getRollupFilterOperators = getRollupFilterOperators2;
|
|
1378
1413
|
exports.getSystemAttributeI18nKey = getSystemAttributeI18nKey;
|
|
1379
1414
|
exports.getSystemAttributeList = getSystemAttributeList;
|
|
1415
|
+
exports.groupWriteSchema = groupWriteSchema;
|
|
1380
1416
|
exports.inverseSourceSchema = inverseSourceSchema;
|
|
1381
1417
|
exports.isAttributeFilterable = isAttributeFilterable;
|
|
1382
1418
|
exports.isAttributeGroupable = isAttributeGroupable;
|
|
@@ -1400,6 +1436,7 @@ exports.relationSourceSchema = relationSourceSchema;
|
|
|
1400
1436
|
exports.resolveEffectiveFilterType = resolveEffectiveFilterType;
|
|
1401
1437
|
exports.resolveIsWithinBounds = resolveIsWithinBounds;
|
|
1402
1438
|
exports.resolveUtcDayBounds = resolveUtcDayBounds;
|
|
1439
|
+
exports.sortsSchema = sortsSchema;
|
|
1403
1440
|
exports.tableSourceSchema = tableSourceSchema;
|
|
1404
1441
|
exports.toMultiValueOperator = toMultiValueOperator;
|
|
1405
1442
|
exports.toUtcDayString = toUtcDayString;
|
package/dist/exceptions.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as SchemaOperation } from './migrations-
|
|
2
|
-
import './attributes-
|
|
1
|
+
import { S as SchemaOperation } from './migrations-fRvadl6i.mjs';
|
|
2
|
+
import './attributes-CWPLbp7c.mjs';
|
|
3
3
|
import '@stndrds/constants';
|
|
4
4
|
import './utils.mjs';
|
|
5
5
|
|
|
@@ -151,6 +151,8 @@ declare class SchemaError extends Error {
|
|
|
151
151
|
* Base class for "not found" errors
|
|
152
152
|
*/
|
|
153
153
|
declare class NotFoundError extends SchemaError {
|
|
154
|
+
/** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
|
|
155
|
+
readonly _tag = "NotFoundError";
|
|
154
156
|
readonly resourceType: string;
|
|
155
157
|
readonly resourceId: string;
|
|
156
158
|
constructor(resourceType: string, resourceId: string, code?: SchemaErrorCode, message?: string);
|
|
@@ -193,6 +195,8 @@ interface ValidationErrorDetail {
|
|
|
193
195
|
* Validation error thrown when data fails schema validation
|
|
194
196
|
*/
|
|
195
197
|
declare class ValidationError extends SchemaError {
|
|
198
|
+
/** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
|
|
199
|
+
readonly _tag = "ValidationError";
|
|
196
200
|
readonly errors: ValidationErrorDetail[];
|
|
197
201
|
constructor(message: string, errors: ValidationErrorDetail[]);
|
|
198
202
|
/**
|
package/dist/exceptions.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as SchemaOperation } from './migrations-
|
|
2
|
-
import './attributes-
|
|
1
|
+
import { S as SchemaOperation } from './migrations-DaFneOfx.js';
|
|
2
|
+
import './attributes-CNYwg_Nr.js';
|
|
3
3
|
import '@stndrds/constants';
|
|
4
4
|
import './utils.js';
|
|
5
5
|
|
|
@@ -151,6 +151,8 @@ declare class SchemaError extends Error {
|
|
|
151
151
|
* Base class for "not found" errors
|
|
152
152
|
*/
|
|
153
153
|
declare class NotFoundError extends SchemaError {
|
|
154
|
+
/** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
|
|
155
|
+
readonly _tag = "NotFoundError";
|
|
154
156
|
readonly resourceType: string;
|
|
155
157
|
readonly resourceId: string;
|
|
156
158
|
constructor(resourceType: string, resourceId: string, code?: SchemaErrorCode, message?: string);
|
|
@@ -193,6 +195,8 @@ interface ValidationErrorDetail {
|
|
|
193
195
|
* Validation error thrown when data fails schema validation
|
|
194
196
|
*/
|
|
195
197
|
declare class ValidationError extends SchemaError {
|
|
198
|
+
/** Literal discriminator for `Effect.catchTag`; a widened `string` breaks narrowing. */
|
|
199
|
+
readonly _tag = "ValidationError";
|
|
196
200
|
readonly errors: ValidationErrorDetail[];
|
|
197
201
|
constructor(message: string, errors: ValidationErrorDetail[]);
|
|
198
202
|
/**
|