@chkit/core 0.1.0-beta.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/canonical.d.ts +6 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +133 -0
- package/dist/canonical.js.map +1 -0
- package/dist/diff-primitives.d.ts +28 -0
- package/dist/diff-primitives.d.ts.map +1 -0
- package/dist/diff-primitives.js +52 -0
- package/dist/diff-primitives.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/key-clause.d.ts +3 -0
- package/dist/key-clause.d.ts.map +1 -0
- package/dist/key-clause.js +47 -0
- package/dist/key-clause.js.map +1 -0
- package/dist/model-types.d.ts +161 -0
- package/dist/model-types.d.ts.map +1 -0
- package/dist/model-types.js +2 -0
- package/dist/model-types.js.map +1 -0
- package/dist/model.d.ts +15 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +61 -0
- package/dist/model.js.map +1 -0
- package/dist/planner.d.ts +3 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +376 -0
- package/dist/planner.js.map +1 -0
- package/dist/schema-loader.d.ts +6 -0
- package/dist/schema-loader.d.ts.map +1 -0
- package/dist/schema-loader.js +21 -0
- package/dist/schema-loader.js.map +1 -0
- package/dist/snapshot.d.ts +3 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +9 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/sql-normalizer.d.ts +2 -0
- package/dist/sql-normalizer.d.ts.map +1 -0
- package/dist/sql-normalizer.js +4 -0
- package/dist/sql-normalizer.js.map +1 -0
- package/dist/sql.d.ts +16 -0
- package/dist/sql.d.ts.map +1 -0
- package/dist/sql.js +95 -0
- package/dist/sql.js.map +1 -0
- package/dist/validate.d.ts +4 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +72 -0
- package/dist/validate.js.map +1 -0
- package/package.json +27 -0
package/dist/validate.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { definitionKey } from './canonical.js';
|
|
2
|
+
import { normalizeKeyColumns } from './key-clause.js';
|
|
3
|
+
import { ChxValidationError as ValidationError } from './model.js';
|
|
4
|
+
function pushValidationIssue(issues, def, code, message) {
|
|
5
|
+
issues.push({
|
|
6
|
+
code,
|
|
7
|
+
kind: def.kind,
|
|
8
|
+
database: def.database,
|
|
9
|
+
name: def.name,
|
|
10
|
+
message,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function validateTableDefinition(def, issues) {
|
|
14
|
+
const columnSeen = new Set();
|
|
15
|
+
const columnSet = new Set();
|
|
16
|
+
for (const column of def.columns) {
|
|
17
|
+
if (columnSeen.has(column.name)) {
|
|
18
|
+
pushValidationIssue(issues, def, 'duplicate_column_name', `Table ${def.database}.${def.name} has duplicate column name "${column.name}"`);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
columnSeen.add(column.name);
|
|
22
|
+
columnSet.add(column.name);
|
|
23
|
+
}
|
|
24
|
+
const indexSeen = new Set();
|
|
25
|
+
for (const index of def.indexes ?? []) {
|
|
26
|
+
if (indexSeen.has(index.name)) {
|
|
27
|
+
pushValidationIssue(issues, def, 'duplicate_index_name', `Table ${def.database}.${def.name} has duplicate index name "${index.name}"`);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
indexSeen.add(index.name);
|
|
31
|
+
}
|
|
32
|
+
const projectionSeen = new Set();
|
|
33
|
+
for (const projection of def.projections ?? []) {
|
|
34
|
+
if (projectionSeen.has(projection.name)) {
|
|
35
|
+
pushValidationIssue(issues, def, 'duplicate_projection_name', `Table ${def.database}.${def.name} has duplicate projection name "${projection.name}"`);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
projectionSeen.add(projection.name);
|
|
39
|
+
}
|
|
40
|
+
for (const column of normalizeKeyColumns(def.primaryKey)) {
|
|
41
|
+
if (!columnSet.has(column)) {
|
|
42
|
+
pushValidationIssue(issues, def, 'primary_key_missing_column', `Table ${def.database}.${def.name} primaryKey references missing column "${column}"`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
for (const column of normalizeKeyColumns(def.orderBy)) {
|
|
46
|
+
if (!columnSet.has(column)) {
|
|
47
|
+
pushValidationIssue(issues, def, 'order_by_missing_column', `Table ${def.database}.${def.name} orderBy references missing column "${column}"`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export function validateDefinitions(definitions) {
|
|
52
|
+
const issues = [];
|
|
53
|
+
const objectKeys = new Set();
|
|
54
|
+
for (const def of definitions) {
|
|
55
|
+
const key = definitionKey(def);
|
|
56
|
+
if (objectKeys.has(key)) {
|
|
57
|
+
pushValidationIssue(issues, def, 'duplicate_object_name', `Duplicate schema object definition "${def.kind}:${def.database}.${def.name}"`);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
objectKeys.add(key);
|
|
61
|
+
if (def.kind === 'table') {
|
|
62
|
+
validateTableDefinition(def, issues);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return issues;
|
|
66
|
+
}
|
|
67
|
+
export function assertValidDefinitions(definitions) {
|
|
68
|
+
const issues = validateDefinitions(definitions);
|
|
69
|
+
if (issues.length > 0)
|
|
70
|
+
throw new ValidationError(issues);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@chkit/core",
|
|
3
|
+
"version": "0.1.0-beta.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc -p tsconfig.json",
|
|
18
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
19
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
20
|
+
"lint": "biome lint src",
|
|
21
|
+
"test": "bun test src",
|
|
22
|
+
"clean": "rm -rf dist"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"fast-glob": "^3.3.2"
|
|
26
|
+
}
|
|
27
|
+
}
|