@drzl/validation-core 3.12.0 → 3.13.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/dist/index.cjs +21 -1
- package/dist/index.d.cts +14 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.js +21 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -84473,6 +84473,7 @@ module.exports = __toCommonJS(index_exports2);
|
|
|
84473
84473
|
// src/checks.ts
|
|
84474
84474
|
var COMPARISON = /^\s*([A-Za-z_][A-Za-z0-9_]*)\s*(>=|<=|<>|!=|>|<|=)\s*(.+?)\s*$/;
|
|
84475
84475
|
var IN_LIST = /^\s*([A-Za-z_][A-Za-z0-9_]*)\s+IN\s*\((.+)\)\s*$/i;
|
|
84476
|
+
var CARDINALITY_OF = /^\s*(?:cardinality\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*\)|array_length\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*,\s*1\s*\))\s*(>=|<=|<>|!=|>|<|=)\s*(\d+)\s*$/i;
|
|
84476
84477
|
var LENGTH_OF = /^\s*(?:length|char_length)\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*\)\s*(>=|<=|<>|!=|>|<|=)\s*(\d+)\s*$/i;
|
|
84477
84478
|
function splitTopLevelAnd(expr) {
|
|
84478
84479
|
const parts = [];
|
|
@@ -84595,6 +84596,7 @@ function parseCheck(expression, name) {
|
|
|
84595
84596
|
const sets = [];
|
|
84596
84597
|
const rows = [];
|
|
84597
84598
|
const lengths = [];
|
|
84599
|
+
const cardinalities = [];
|
|
84598
84600
|
for (const part of parts) {
|
|
84599
84601
|
const parsed = parseCheck(part, name);
|
|
84600
84602
|
if (!parsed.ok)
|
|
@@ -84603,13 +84605,15 @@ function parseCheck(expression, name) {
|
|
|
84603
84605
|
if (parsed.sets) sets.push(...parsed.sets);
|
|
84604
84606
|
if (parsed.rows) rows.push(...parsed.rows);
|
|
84605
84607
|
if (parsed.lengths) lengths.push(...parsed.lengths);
|
|
84608
|
+
if (parsed.cardinalities) cardinalities.push(...parsed.cardinalities);
|
|
84606
84609
|
}
|
|
84607
84610
|
return {
|
|
84608
84611
|
ok: true,
|
|
84609
84612
|
checks,
|
|
84610
84613
|
...sets.length ? { sets } : {},
|
|
84611
84614
|
...rows.length ? { rows } : {},
|
|
84612
|
-
...lengths.length ? { lengths } : {}
|
|
84615
|
+
...lengths.length ? { lengths } : {},
|
|
84616
|
+
...cardinalities.length ? { cardinalities } : {}
|
|
84613
84617
|
};
|
|
84614
84618
|
}
|
|
84615
84619
|
const lengthOf = expr.match(LENGTH_OF);
|
|
@@ -84621,6 +84625,22 @@ function parseCheck(expression, name) {
|
|
|
84621
84625
|
lengths: [{ column: lengthOf[1], operator: op4, value: lengthOf[3], name }]
|
|
84622
84626
|
};
|
|
84623
84627
|
}
|
|
84628
|
+
const cardinalityOf = expr.match(CARDINALITY_OF);
|
|
84629
|
+
if (cardinalityOf) {
|
|
84630
|
+
const op4 = cardinalityOf[3] === "!=" ? "<>" : cardinalityOf[3];
|
|
84631
|
+
return {
|
|
84632
|
+
ok: true,
|
|
84633
|
+
checks: [],
|
|
84634
|
+
cardinalities: [
|
|
84635
|
+
{
|
|
84636
|
+
column: cardinalityOf[1] ?? cardinalityOf[2],
|
|
84637
|
+
operator: op4,
|
|
84638
|
+
value: cardinalityOf[4],
|
|
84639
|
+
...name ? { name } : {}
|
|
84640
|
+
}
|
|
84641
|
+
]
|
|
84642
|
+
};
|
|
84643
|
+
}
|
|
84624
84644
|
const inList = expr.match(IN_LIST);
|
|
84625
84645
|
if (inList) {
|
|
84626
84646
|
const raw = splitTopLevelCommas(inList[2]);
|
package/dist/index.d.cts
CHANGED
|
@@ -244,6 +244,18 @@ interface LengthCheck {
|
|
|
244
244
|
value: string;
|
|
245
245
|
name?: string;
|
|
246
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* A constraint on an array column's element count, from `CHECK (cardinality(tags) > 0)`.
|
|
249
|
+
*
|
|
250
|
+
* The array analogue of `LengthCheck`, and free of the question that one carries: an element
|
|
251
|
+
* count is the same number in SQL and in JavaScript, with no encoding involved.
|
|
252
|
+
*/
|
|
253
|
+
interface CardinalityCheck {
|
|
254
|
+
column: string;
|
|
255
|
+
operator: ColumnCheck['operator'];
|
|
256
|
+
value: string;
|
|
257
|
+
name?: string;
|
|
258
|
+
}
|
|
247
259
|
/** A check that was understood, or the reason it was not. */
|
|
248
260
|
type ParsedCheck = {
|
|
249
261
|
ok: true;
|
|
@@ -251,6 +263,7 @@ type ParsedCheck = {
|
|
|
251
263
|
sets?: ColumnSet[];
|
|
252
264
|
rows?: RowCheck[];
|
|
253
265
|
lengths?: LengthCheck[];
|
|
266
|
+
cardinalities?: CardinalityCheck[];
|
|
254
267
|
} | {
|
|
255
268
|
ok: false;
|
|
256
269
|
reason: string;
|
|
@@ -448,4 +461,4 @@ declare function updateColumns(table: Table): Column[];
|
|
|
448
461
|
declare function selectColumns(table: Table): Column[];
|
|
449
462
|
declare function formatCode(code: string, filePath: string, fmt?: FormatOptions): Promise<any>;
|
|
450
463
|
|
|
451
|
-
export { AFFIX_PROBE_TABLE, type AffixIssue, type AffixOptions, type AffixValue, CODEPOINT_LENGTH, COLUMN_FORMATS, type ColumnCheck, type ColumnSet, DEFAULT_IMPORT_EXTENSION, DEFAULT_MODE_PREFIX, DEFAULT_SCHEMA_SUFFIX, DEFAULT_TYPE_SUFFIX, type FormatOptions, IMPORT_EXTENSIONS, type ImportExtension, type LengthCheck, NAME_MODES, type NameMode, type ParsedCheck, type ResolvedAffix, type RowCheck, type Table, type TableCase, type ValidationGenerateOptions, type ValidationLibrary, type ValidationRenderer, applyTableCase, describeSet, formatCode, importSpecifier, insertColumns, isGeneratedColumn, isIntegerColumn, moduleFileName, moduleSpecifier, parseCheck, pascalCase, resolveAffix, resolveConfiguredImport, schemaName, selectColumns, typeName, updateColumns, validateAffix };
|
|
464
|
+
export { AFFIX_PROBE_TABLE, type AffixIssue, type AffixOptions, type AffixValue, CODEPOINT_LENGTH, COLUMN_FORMATS, type CardinalityCheck, type ColumnCheck, type ColumnSet, DEFAULT_IMPORT_EXTENSION, DEFAULT_MODE_PREFIX, DEFAULT_SCHEMA_SUFFIX, DEFAULT_TYPE_SUFFIX, type FormatOptions, IMPORT_EXTENSIONS, type ImportExtension, type LengthCheck, NAME_MODES, type NameMode, type ParsedCheck, type ResolvedAffix, type RowCheck, type Table, type TableCase, type ValidationGenerateOptions, type ValidationLibrary, type ValidationRenderer, applyTableCase, describeSet, formatCode, importSpecifier, insertColumns, isGeneratedColumn, isIntegerColumn, moduleFileName, moduleSpecifier, parseCheck, pascalCase, resolveAffix, resolveConfiguredImport, schemaName, selectColumns, typeName, updateColumns, validateAffix };
|
package/dist/index.d.ts
CHANGED
|
@@ -244,6 +244,18 @@ interface LengthCheck {
|
|
|
244
244
|
value: string;
|
|
245
245
|
name?: string;
|
|
246
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* A constraint on an array column's element count, from `CHECK (cardinality(tags) > 0)`.
|
|
249
|
+
*
|
|
250
|
+
* The array analogue of `LengthCheck`, and free of the question that one carries: an element
|
|
251
|
+
* count is the same number in SQL and in JavaScript, with no encoding involved.
|
|
252
|
+
*/
|
|
253
|
+
interface CardinalityCheck {
|
|
254
|
+
column: string;
|
|
255
|
+
operator: ColumnCheck['operator'];
|
|
256
|
+
value: string;
|
|
257
|
+
name?: string;
|
|
258
|
+
}
|
|
247
259
|
/** A check that was understood, or the reason it was not. */
|
|
248
260
|
type ParsedCheck = {
|
|
249
261
|
ok: true;
|
|
@@ -251,6 +263,7 @@ type ParsedCheck = {
|
|
|
251
263
|
sets?: ColumnSet[];
|
|
252
264
|
rows?: RowCheck[];
|
|
253
265
|
lengths?: LengthCheck[];
|
|
266
|
+
cardinalities?: CardinalityCheck[];
|
|
254
267
|
} | {
|
|
255
268
|
ok: false;
|
|
256
269
|
reason: string;
|
|
@@ -448,4 +461,4 @@ declare function updateColumns(table: Table): Column[];
|
|
|
448
461
|
declare function selectColumns(table: Table): Column[];
|
|
449
462
|
declare function formatCode(code: string, filePath: string, fmt?: FormatOptions): Promise<any>;
|
|
450
463
|
|
|
451
|
-
export { AFFIX_PROBE_TABLE, type AffixIssue, type AffixOptions, type AffixValue, CODEPOINT_LENGTH, COLUMN_FORMATS, type ColumnCheck, type ColumnSet, DEFAULT_IMPORT_EXTENSION, DEFAULT_MODE_PREFIX, DEFAULT_SCHEMA_SUFFIX, DEFAULT_TYPE_SUFFIX, type FormatOptions, IMPORT_EXTENSIONS, type ImportExtension, type LengthCheck, NAME_MODES, type NameMode, type ParsedCheck, type ResolvedAffix, type RowCheck, type Table, type TableCase, type ValidationGenerateOptions, type ValidationLibrary, type ValidationRenderer, applyTableCase, describeSet, formatCode, importSpecifier, insertColumns, isGeneratedColumn, isIntegerColumn, moduleFileName, moduleSpecifier, parseCheck, pascalCase, resolveAffix, resolveConfiguredImport, schemaName, selectColumns, typeName, updateColumns, validateAffix };
|
|
464
|
+
export { AFFIX_PROBE_TABLE, type AffixIssue, type AffixOptions, type AffixValue, CODEPOINT_LENGTH, COLUMN_FORMATS, type CardinalityCheck, type ColumnCheck, type ColumnSet, DEFAULT_IMPORT_EXTENSION, DEFAULT_MODE_PREFIX, DEFAULT_SCHEMA_SUFFIX, DEFAULT_TYPE_SUFFIX, type FormatOptions, IMPORT_EXTENSIONS, type ImportExtension, type LengthCheck, NAME_MODES, type NameMode, type ParsedCheck, type ResolvedAffix, type RowCheck, type Table, type TableCase, type ValidationGenerateOptions, type ValidationLibrary, type ValidationRenderer, applyTableCase, describeSet, formatCode, importSpecifier, insertColumns, isGeneratedColumn, isIntegerColumn, moduleFileName, moduleSpecifier, parseCheck, pascalCase, resolveAffix, resolveConfiguredImport, schemaName, selectColumns, typeName, updateColumns, validateAffix };
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import "./chunk-ZZGILH5A.js";
|
|
|
3
3
|
// src/checks.ts
|
|
4
4
|
var COMPARISON = /^\s*([A-Za-z_][A-Za-z0-9_]*)\s*(>=|<=|<>|!=|>|<|=)\s*(.+?)\s*$/;
|
|
5
5
|
var IN_LIST = /^\s*([A-Za-z_][A-Za-z0-9_]*)\s+IN\s*\((.+)\)\s*$/i;
|
|
6
|
+
var CARDINALITY_OF = /^\s*(?:cardinality\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*\)|array_length\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*,\s*1\s*\))\s*(>=|<=|<>|!=|>|<|=)\s*(\d+)\s*$/i;
|
|
6
7
|
var LENGTH_OF = /^\s*(?:length|char_length)\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*\)\s*(>=|<=|<>|!=|>|<|=)\s*(\d+)\s*$/i;
|
|
7
8
|
function splitTopLevelAnd(expr) {
|
|
8
9
|
const parts = [];
|
|
@@ -125,6 +126,7 @@ function parseCheck(expression, name) {
|
|
|
125
126
|
const sets = [];
|
|
126
127
|
const rows = [];
|
|
127
128
|
const lengths = [];
|
|
129
|
+
const cardinalities = [];
|
|
128
130
|
for (const part of parts) {
|
|
129
131
|
const parsed = parseCheck(part, name);
|
|
130
132
|
if (!parsed.ok)
|
|
@@ -133,13 +135,15 @@ function parseCheck(expression, name) {
|
|
|
133
135
|
if (parsed.sets) sets.push(...parsed.sets);
|
|
134
136
|
if (parsed.rows) rows.push(...parsed.rows);
|
|
135
137
|
if (parsed.lengths) lengths.push(...parsed.lengths);
|
|
138
|
+
if (parsed.cardinalities) cardinalities.push(...parsed.cardinalities);
|
|
136
139
|
}
|
|
137
140
|
return {
|
|
138
141
|
ok: true,
|
|
139
142
|
checks,
|
|
140
143
|
...sets.length ? { sets } : {},
|
|
141
144
|
...rows.length ? { rows } : {},
|
|
142
|
-
...lengths.length ? { lengths } : {}
|
|
145
|
+
...lengths.length ? { lengths } : {},
|
|
146
|
+
...cardinalities.length ? { cardinalities } : {}
|
|
143
147
|
};
|
|
144
148
|
}
|
|
145
149
|
const lengthOf = expr.match(LENGTH_OF);
|
|
@@ -151,6 +155,22 @@ function parseCheck(expression, name) {
|
|
|
151
155
|
lengths: [{ column: lengthOf[1], operator: op2, value: lengthOf[3], name }]
|
|
152
156
|
};
|
|
153
157
|
}
|
|
158
|
+
const cardinalityOf = expr.match(CARDINALITY_OF);
|
|
159
|
+
if (cardinalityOf) {
|
|
160
|
+
const op2 = cardinalityOf[3] === "!=" ? "<>" : cardinalityOf[3];
|
|
161
|
+
return {
|
|
162
|
+
ok: true,
|
|
163
|
+
checks: [],
|
|
164
|
+
cardinalities: [
|
|
165
|
+
{
|
|
166
|
+
column: cardinalityOf[1] ?? cardinalityOf[2],
|
|
167
|
+
operator: op2,
|
|
168
|
+
value: cardinalityOf[4],
|
|
169
|
+
...name ? { name } : {}
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
};
|
|
173
|
+
}
|
|
154
174
|
const inList = expr.match(IN_LIST);
|
|
155
175
|
if (inList) {
|
|
156
176
|
const raw = splitTopLevelCommas(inList[2]);
|