@chkit/core 0.1.0-beta.2 → 0.1.0-beta.21
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 +57 -0
- package/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +60 -3
- package/dist/canonical.js.map +1 -1
- package/dist/codec.d.ts +23 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +194 -0
- package/dist/codec.js.map +1 -0
- package/dist/flags.d.ts +55 -0
- package/dist/flags.d.ts.map +1 -0
- package/dist/flags.js +104 -0
- package/dist/flags.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/model-types.d.ts +91 -4
- package/dist/model-types.d.ts.map +1 -1
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +89 -37
- package/dist/planner.js.map +1 -1
- package/dist/plugin-error.d.ts +9 -0
- package/dist/plugin-error.d.ts.map +1 -0
- package/dist/plugin-error.js +18 -0
- package/dist/plugin-error.js.map +1 -0
- package/dist/sql-normalizer.d.ts +1 -0
- package/dist/sql-normalizer.d.ts.map +1 -1
- package/dist/sql-normalizer.js +7 -0
- package/dist/sql-normalizer.js.map +1 -1
- package/dist/sql-splitter.d.ts +3 -0
- package/dist/sql-splitter.d.ts.map +1 -0
- package/dist/sql-splitter.js +168 -0
- package/dist/sql-splitter.js.map +1 -0
- package/dist/sql.d.ts +15 -1
- package/dist/sql.d.ts.map +1 -1
- package/dist/sql.js +74 -3
- package/dist/sql.js.map +1 -1
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +2 -0
- package/dist/utils.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +69 -0
- package/dist/validate.js.map +1 -1
- package/package.json +28 -1
package/README.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# @chkit/core
|
|
2
|
+
|
|
3
|
+
Schema DSL, configuration, and diff engine for chkit.
|
|
4
|
+
|
|
5
|
+
Part of the [chkit](https://github.com/obsessiondb/chkit) monorepo. This package is typically used together with the [`chkit`](https://www.npmjs.com/package/chkit) CLI.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bun add @chkit/core
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
Define your ClickHouse schema in TypeScript:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { defineConfig, schema, table, view, materializedView } from '@chkit/core'
|
|
19
|
+
|
|
20
|
+
const events = table({
|
|
21
|
+
database: 'default',
|
|
22
|
+
name: 'events',
|
|
23
|
+
engine: 'MergeTree',
|
|
24
|
+
columns: [
|
|
25
|
+
{ name: 'id', type: 'UInt64' },
|
|
26
|
+
{ name: 'source', type: 'String' },
|
|
27
|
+
{ name: 'ingested_at', type: 'DateTime64(3)', default: 'fn:now64(3)' },
|
|
28
|
+
],
|
|
29
|
+
primaryKey: ['id'],
|
|
30
|
+
orderBy: ['id'],
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
export default schema(events)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Configure your project:
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
// clickhouse.config.ts
|
|
40
|
+
import { defineConfig } from '@chkit/core'
|
|
41
|
+
|
|
42
|
+
export default defineConfig({
|
|
43
|
+
schema: './src/db/schema/**/*.ts',
|
|
44
|
+
outDir: './chkit',
|
|
45
|
+
clickhouse: {
|
|
46
|
+
url: process.env.CLICKHOUSE_URL ?? 'http://localhost:8123',
|
|
47
|
+
},
|
|
48
|
+
})
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Documentation
|
|
52
|
+
|
|
53
|
+
See the [chkit documentation](https://chkit.obsessiondb.com).
|
|
54
|
+
|
|
55
|
+
## License
|
|
56
|
+
|
|
57
|
+
[MIT](../../LICENSE)
|
package/dist/canonical.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,gBAAgB,EAIjB,MAAM,YAAY,CAAA;AA2JnB,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,GAAG,gBAAgB,CAI9E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAE3D;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAc3F;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,EAAE,CAiB7F"}
|
package/dist/canonical.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { normalizeKeyColumns } from './key-clause.js';
|
|
2
2
|
import { isSchemaDefinition } from './model.js';
|
|
3
|
-
import {
|
|
3
|
+
import { canonicalizeCodec } from './codec.js';
|
|
4
|
+
import { normalizeEngine, normalizeSQLFragment } from './sql-normalizer.js';
|
|
4
5
|
function sortByName(items) {
|
|
5
6
|
return [...items].sort((a, b) => a.name.localeCompare(b.name));
|
|
6
7
|
}
|
|
@@ -18,6 +19,7 @@ function canonicalizeColumn(column) {
|
|
|
18
19
|
renamedFrom: column.renamedFrom?.trim(),
|
|
19
20
|
type: typeof column.type === 'string' ? column.type.trim() : column.type,
|
|
20
21
|
comment: column.comment?.trim(),
|
|
22
|
+
codec: column.codec ? canonicalizeCodec(column.codec) : undefined,
|
|
21
23
|
};
|
|
22
24
|
}
|
|
23
25
|
function canonicalizeIndex(index) {
|
|
@@ -50,7 +52,7 @@ function canonicalizeTable(def) {
|
|
|
50
52
|
name: def.renamedFrom.name.trim(),
|
|
51
53
|
}
|
|
52
54
|
: undefined,
|
|
53
|
-
engine: def.engine
|
|
55
|
+
engine: normalizeEngine(def.engine),
|
|
54
56
|
columns: def.columns.map(canonicalizeColumn),
|
|
55
57
|
primaryKey: normalizeKeyColumns(def.primaryKey),
|
|
56
58
|
orderBy: normalizeKeyColumns(def.orderBy),
|
|
@@ -72,8 +74,55 @@ function canonicalizeView(def) {
|
|
|
72
74
|
comment: def.comment?.trim(),
|
|
73
75
|
};
|
|
74
76
|
}
|
|
77
|
+
const INTERVAL_UNIT_PATTERN = /\b(second|minute|hour|day|week|month|year)s?\b/gi;
|
|
78
|
+
function canonicalizeInterval(value) {
|
|
79
|
+
if (value === undefined)
|
|
80
|
+
return undefined;
|
|
81
|
+
return value
|
|
82
|
+
.trim()
|
|
83
|
+
.replace(/\s+/g, ' ')
|
|
84
|
+
.replace(INTERVAL_UNIT_PATTERN, (unit) => unit.toUpperCase().replace(/S$/, ''));
|
|
85
|
+
}
|
|
86
|
+
function canonicalizeRefresh(refresh) {
|
|
87
|
+
if (!refresh)
|
|
88
|
+
return undefined;
|
|
89
|
+
const dependsOn = refresh.dependsOn
|
|
90
|
+
? [...refresh.dependsOn]
|
|
91
|
+
.map((dep) => ({ database: dep.database.trim(), name: dep.name.trim() }))
|
|
92
|
+
.sort((a, b) => {
|
|
93
|
+
const aKey = `${a.database}.${a.name}`;
|
|
94
|
+
const bKey = `${b.database}.${b.name}`;
|
|
95
|
+
return aKey.localeCompare(bKey);
|
|
96
|
+
})
|
|
97
|
+
: undefined;
|
|
98
|
+
const settings = refresh.settings
|
|
99
|
+
? Object.fromEntries(Object.entries(refresh.settings).sort(([a], [b]) => a.localeCompare(b)))
|
|
100
|
+
: undefined;
|
|
101
|
+
const canonical = {};
|
|
102
|
+
const every = canonicalizeInterval(refresh.every);
|
|
103
|
+
const after = canonicalizeInterval(refresh.after);
|
|
104
|
+
const offset = canonicalizeInterval(refresh.offset);
|
|
105
|
+
const randomize = canonicalizeInterval(refresh.randomize);
|
|
106
|
+
if (every !== undefined)
|
|
107
|
+
canonical.every = every;
|
|
108
|
+
if (after !== undefined)
|
|
109
|
+
canonical.after = after;
|
|
110
|
+
if (offset !== undefined)
|
|
111
|
+
canonical.offset = offset;
|
|
112
|
+
if (randomize !== undefined)
|
|
113
|
+
canonical.randomize = randomize;
|
|
114
|
+
if (dependsOn && dependsOn.length > 0)
|
|
115
|
+
canonical.dependsOn = dependsOn;
|
|
116
|
+
if (settings && Object.keys(settings).length > 0)
|
|
117
|
+
canonical.settings = settings;
|
|
118
|
+
if (refresh.append)
|
|
119
|
+
canonical.append = true;
|
|
120
|
+
if (refresh.empty)
|
|
121
|
+
canonical.empty = true;
|
|
122
|
+
return canonical;
|
|
123
|
+
}
|
|
75
124
|
function canonicalizeMaterializedView(def) {
|
|
76
|
-
|
|
125
|
+
const canonical = {
|
|
77
126
|
...def,
|
|
78
127
|
database: def.database.trim(),
|
|
79
128
|
name: def.name.trim(),
|
|
@@ -84,6 +133,14 @@ function canonicalizeMaterializedView(def) {
|
|
|
84
133
|
as: normalizeSQLFragment(def.as),
|
|
85
134
|
comment: def.comment?.trim(),
|
|
86
135
|
};
|
|
136
|
+
const refresh = canonicalizeRefresh(def.refresh);
|
|
137
|
+
if (refresh) {
|
|
138
|
+
canonical.refresh = refresh;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
delete canonical.refresh;
|
|
142
|
+
}
|
|
143
|
+
return canonical;
|
|
87
144
|
}
|
|
88
145
|
export function canonicalizeDefinition(def) {
|
|
89
146
|
if (def.kind === 'table')
|
package/dist/canonical.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../src/canonical.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE3E,SAAS,UAAU,CAA6B,KAAU;IACxD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,SAAS,QAAQ,CAAC,IAA8B;IAC9C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,CAAC,CAAA;IAC9B,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAwB;IAClD,OAAO;QACL,GAAG,MAAM;QACT,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;QACxB,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE;QACvC,IAAI,EAAE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;QACxE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;KAClE,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA0B;IACnD,OAAO;QACL,GAAG,KAAK;QACR,UAAU,EAAE,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC;KACnD,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAgC;IAC9D,OAAO;QACL,GAAG,UAAU;QACb,KAAK,EAAE,oBAAoB,CAAC,UAAU,CAAC,KAAK,CAAC;KAC9C,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAoB;IAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ;QAC3B,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACpE;QACH,CAAC,CAAC,SAAS,CAAA;IAEb,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACxF,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW;QACjC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACzD,CAAC,CAAC,SAAS,CAAA;IAEb,OAAO;QACL,GAAG,GAAG;QACN,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC7B,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;QACrB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC1B,CAAC,CAAC;gBACE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE;gBAC1C,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;aAClC;YACH,CAAC,CAAC,SAAS;QACb,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QACnC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC5C,UAAU,EAAE,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC;QAC/C,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;QACzC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QACzE,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QAChF,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QACxD,QAAQ;QACR,OAAO;QACP,WAAW;QACX,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;KAC7B,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAmB;IAC3C,OAAO;QACL,GAAG,GAAG;QACN,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC7B,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;QACrB,EAAE,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;KAC7B,CAAA;AACH,CAAC;AAED,MAAM,qBAAqB,GAAG,kDAAkD,CAAA;AAEhF,SAAS,oBAAoB,CAAC,KAAyB;IACrD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,OAAO,KAAK;SACT,IAAI,EAAE;SACN,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;AACnF,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAA4C;IAE5C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAE9B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;QACjC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;aACnB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;aACxE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;YACtC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QACjC,CAAC,CAAC;QACN,CAAC,CAAC,SAAS,CAAA;IAEb,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;QAC/B,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACxE;QACH,CAAC,CAAC,SAAS,CAAA;IAEb,MAAM,SAAS,GAA4B,EAAE,CAAA;IAC7C,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACnD,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACzD,IAAI,KAAK,KAAK,SAAS;QAAE,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA;IAChD,IAAI,MAAM,KAAK,SAAS;QAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAA;IACnD,IAAI,SAAS,KAAK,SAAS;QAAE,SAAS,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5D,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,SAAS,CAAC,SAAS,GAAG,SAAS,CAAA;IACtE,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC/E,IAAI,OAAO,CAAC,MAAM;QAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAA;IAC3C,IAAI,OAAO,CAAC,KAAK;QAAE,SAAS,CAAC,KAAK,GAAG,IAAI,CAAA;IACzC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,4BAA4B,CAAC,GAA+B;IACnE,MAAM,SAAS,GAA+B;QAC5C,GAAG,GAAG;QACN,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC7B,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;QACrB,EAAE,EAAE;YACF,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE;YAChC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;SACzB;QACD,EAAE,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;KAC7B,CAAA;IACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,GAAG,OAAO,CAAA;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC,OAAO,CAAA;IAC1B,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAqB;IAC1D,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;IACvD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACrD,OAAO,4BAA4B,CAAC,GAAG,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAqB;IACjD,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,WAA+B;IACrE,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAA;IACjD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;QAC9C,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACrD,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;QACrC,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QACpD,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO,OAAO,CAAA;QACjC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAA4B;IACvE,MAAM,GAAG,GAAuB,EAAE,CAAA;IAElC,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QACD,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACf,OAAM;QACR,CAAC;IACH,CAAC,CAAA;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACnD,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAA;AACrC,CAAC"}
|
package/dist/codec.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ColumnCodec, ColumnCodecSpec, GeneralColumnCodec, PreprocessingColumnCodec, RawColumnCodec } from './model-types.js';
|
|
2
|
+
export declare function isGeneralCodec(codec: ColumnCodec): codec is GeneralColumnCodec;
|
|
3
|
+
export declare function isPreprocessorCodec(codec: ColumnCodec): codec is PreprocessingColumnCodec;
|
|
4
|
+
export declare function isRawCodec(codec: ColumnCodec): codec is RawColumnCodec;
|
|
5
|
+
export declare function renderCodec(spec: ColumnCodecSpec): string;
|
|
6
|
+
/**
|
|
7
|
+
* Parses a ClickHouse-returned codec expression (e.g. `CODEC(Delta(4), ZSTD(1))`).
|
|
8
|
+
* Returns undefined for empty/missing input. Unknown or unparsable tokens fall
|
|
9
|
+
* back to a single `raw` atom holding the whole chain, so ClickHouse-returned
|
|
10
|
+
* codecs we haven't typed still round-trip cleanly.
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseCodec(raw: string | undefined | null): ColumnCodec[] | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Normalizes a codec spec to array form with ClickHouse defaults filled in,
|
|
15
|
+
* so that `{kind:'ZSTD'}` and `{kind:'ZSTD', level:1}` compare equal.
|
|
16
|
+
* Does not reorder chain steps — `[Delta, ZSTD]` ≠ `[ZSTD, Delta]` semantically.
|
|
17
|
+
*/
|
|
18
|
+
export declare function canonicalizeCodec(spec: ColumnCodecSpec): ColumnCodec[];
|
|
19
|
+
export declare function codecsEqual(a?: ColumnCodecSpec, b?: ColumnCodecSpec): boolean;
|
|
20
|
+
export declare const codec: {
|
|
21
|
+
raw: (expression: string) => RawColumnCodec;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,cAAc,EACf,MAAM,kBAAkB,CAAA;AASzB,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,kBAAkB,CAE9E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,wBAAwB,CAEzF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,cAAc,CAEtE;AAyBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAGzD;AA6ED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,EAAE,GAAG,SAAS,CAkBpF;AAqBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,EAAE,CAEtE;AAED,wBAAgB,WAAW,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAI7E;AAED,eAAO,MAAM,KAAK;sBACE,MAAM,KAAG,cAAc;CAC1C,CAAA"}
|
package/dist/codec.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
const GENERAL_KINDS = new Set(['NONE', 'LZ4', 'LZ4HC', 'ZSTD', 'T64', 'GCD', 'ALP']);
|
|
2
|
+
const PREPROCESSOR_KINDS = new Set(['Delta', 'DoubleDelta', 'Gorilla', 'FPC']);
|
|
3
|
+
function toArray(spec) {
|
|
4
|
+
return Array.isArray(spec) ? spec : [spec];
|
|
5
|
+
}
|
|
6
|
+
export function isGeneralCodec(codec) {
|
|
7
|
+
return GENERAL_KINDS.has(codec.kind);
|
|
8
|
+
}
|
|
9
|
+
export function isPreprocessorCodec(codec) {
|
|
10
|
+
return PREPROCESSOR_KINDS.has(codec.kind);
|
|
11
|
+
}
|
|
12
|
+
export function isRawCodec(codec) {
|
|
13
|
+
return codec.kind === 'raw';
|
|
14
|
+
}
|
|
15
|
+
function renderStep(step) {
|
|
16
|
+
switch (step.kind) {
|
|
17
|
+
case 'NONE':
|
|
18
|
+
case 'LZ4':
|
|
19
|
+
case 'T64':
|
|
20
|
+
case 'GCD':
|
|
21
|
+
case 'ALP':
|
|
22
|
+
return step.kind;
|
|
23
|
+
case 'LZ4HC':
|
|
24
|
+
return step.level !== undefined ? `LZ4HC(${step.level})` : 'LZ4HC';
|
|
25
|
+
case 'ZSTD':
|
|
26
|
+
return step.level !== undefined ? `ZSTD(${step.level})` : 'ZSTD';
|
|
27
|
+
case 'Delta':
|
|
28
|
+
case 'DoubleDelta':
|
|
29
|
+
case 'Gorilla':
|
|
30
|
+
return step.size !== undefined ? `${step.kind}(${step.size})` : step.kind;
|
|
31
|
+
case 'FPC':
|
|
32
|
+
return `FPC(${step.level}, ${step.floatSize})`;
|
|
33
|
+
case 'raw':
|
|
34
|
+
return step.expression;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function renderCodec(spec) {
|
|
38
|
+
const steps = toArray(spec);
|
|
39
|
+
return `CODEC(${steps.map(renderStep).join(', ')})`;
|
|
40
|
+
}
|
|
41
|
+
const ATOM_PATTERN = /^(\w+)(?:\(([^)]*)\))?$/;
|
|
42
|
+
function parseAtom(raw) {
|
|
43
|
+
const trimmed = raw.trim();
|
|
44
|
+
if (trimmed.length === 0)
|
|
45
|
+
return undefined;
|
|
46
|
+
const match = trimmed.match(ATOM_PATTERN);
|
|
47
|
+
if (!match)
|
|
48
|
+
return undefined;
|
|
49
|
+
const [, name, argsRaw] = match;
|
|
50
|
+
if (!name)
|
|
51
|
+
return undefined;
|
|
52
|
+
const rawArgs = argsRaw?.split(',').map((value) => value.trim());
|
|
53
|
+
const args = rawArgs && !(rawArgs.length === 1 && rawArgs[0] === '') ? rawArgs : undefined;
|
|
54
|
+
switch (name) {
|
|
55
|
+
case 'NONE':
|
|
56
|
+
case 'LZ4':
|
|
57
|
+
case 'T64':
|
|
58
|
+
case 'GCD':
|
|
59
|
+
case 'ALP':
|
|
60
|
+
if (args !== undefined)
|
|
61
|
+
return undefined;
|
|
62
|
+
return { kind: name };
|
|
63
|
+
case 'LZ4HC': {
|
|
64
|
+
if (args === undefined)
|
|
65
|
+
return { kind: 'LZ4HC' };
|
|
66
|
+
if (args.length !== 1)
|
|
67
|
+
return undefined;
|
|
68
|
+
const level = Number(args[0]);
|
|
69
|
+
if (!Number.isFinite(level))
|
|
70
|
+
return undefined;
|
|
71
|
+
return { kind: 'LZ4HC', level };
|
|
72
|
+
}
|
|
73
|
+
case 'ZSTD': {
|
|
74
|
+
if (args === undefined)
|
|
75
|
+
return { kind: 'ZSTD' };
|
|
76
|
+
if (args.length !== 1)
|
|
77
|
+
return undefined;
|
|
78
|
+
const level = Number(args[0]);
|
|
79
|
+
if (!Number.isFinite(level))
|
|
80
|
+
return undefined;
|
|
81
|
+
return { kind: 'ZSTD', level };
|
|
82
|
+
}
|
|
83
|
+
case 'Delta':
|
|
84
|
+
case 'DoubleDelta':
|
|
85
|
+
case 'Gorilla': {
|
|
86
|
+
if (args === undefined)
|
|
87
|
+
return { kind: name };
|
|
88
|
+
if (args.length !== 1)
|
|
89
|
+
return undefined;
|
|
90
|
+
const size = Number(args[0]);
|
|
91
|
+
if (size !== 1 && size !== 2 && size !== 4 && size !== 8)
|
|
92
|
+
return undefined;
|
|
93
|
+
return { kind: name, size };
|
|
94
|
+
}
|
|
95
|
+
case 'FPC': {
|
|
96
|
+
if (!args || args.length !== 2)
|
|
97
|
+
return undefined;
|
|
98
|
+
const level = Number(args[0]);
|
|
99
|
+
const floatSize = Number(args[1]);
|
|
100
|
+
if (!Number.isFinite(level))
|
|
101
|
+
return undefined;
|
|
102
|
+
if (floatSize !== 4 && floatSize !== 8)
|
|
103
|
+
return undefined;
|
|
104
|
+
return { kind: 'FPC', level, floatSize };
|
|
105
|
+
}
|
|
106
|
+
default:
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function splitTopLevelCommas(input) {
|
|
111
|
+
const out = [];
|
|
112
|
+
let depth = 0;
|
|
113
|
+
let current = '';
|
|
114
|
+
for (let i = 0; i < input.length; i++) {
|
|
115
|
+
const ch = input[i];
|
|
116
|
+
if (ch === '(')
|
|
117
|
+
depth += 1;
|
|
118
|
+
else if (ch === ')')
|
|
119
|
+
depth = Math.max(0, depth - 1);
|
|
120
|
+
if (ch === ',' && depth === 0) {
|
|
121
|
+
out.push(current);
|
|
122
|
+
current = '';
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
current += ch;
|
|
126
|
+
}
|
|
127
|
+
if (current.length > 0)
|
|
128
|
+
out.push(current);
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Parses a ClickHouse-returned codec expression (e.g. `CODEC(Delta(4), ZSTD(1))`).
|
|
133
|
+
* Returns undefined for empty/missing input. Unknown or unparsable tokens fall
|
|
134
|
+
* back to a single `raw` atom holding the whole chain, so ClickHouse-returned
|
|
135
|
+
* codecs we haven't typed still round-trip cleanly.
|
|
136
|
+
*/
|
|
137
|
+
export function parseCodec(raw) {
|
|
138
|
+
if (!raw)
|
|
139
|
+
return undefined;
|
|
140
|
+
const trimmed = raw.trim();
|
|
141
|
+
if (trimmed.length === 0)
|
|
142
|
+
return undefined;
|
|
143
|
+
const stripped = trimmed.replace(/^CODEC\s*\(([\s\S]*)\)\s*$/i, '$1').trim();
|
|
144
|
+
if (stripped.length === 0)
|
|
145
|
+
return undefined;
|
|
146
|
+
const atoms = splitTopLevelCommas(stripped)
|
|
147
|
+
.map((value) => value.trim())
|
|
148
|
+
.filter((value) => value.length > 0);
|
|
149
|
+
const parsed = [];
|
|
150
|
+
for (const atom of atoms) {
|
|
151
|
+
const step = parseAtom(atom);
|
|
152
|
+
if (!step)
|
|
153
|
+
return [{ kind: 'raw', expression: stripped }];
|
|
154
|
+
parsed.push(step);
|
|
155
|
+
}
|
|
156
|
+
return parsed;
|
|
157
|
+
}
|
|
158
|
+
function canonicalizeStep(step) {
|
|
159
|
+
switch (step.kind) {
|
|
160
|
+
case 'ZSTD':
|
|
161
|
+
return { kind: 'ZSTD', level: step.level ?? 1 };
|
|
162
|
+
case 'LZ4HC':
|
|
163
|
+
return { kind: 'LZ4HC', level: step.level ?? 9 };
|
|
164
|
+
case 'Delta':
|
|
165
|
+
case 'DoubleDelta':
|
|
166
|
+
case 'Gorilla':
|
|
167
|
+
return { kind: step.kind, size: step.size ?? 1 };
|
|
168
|
+
case 'FPC':
|
|
169
|
+
return { kind: 'FPC', level: step.level, floatSize: step.floatSize };
|
|
170
|
+
case 'raw':
|
|
171
|
+
return { kind: 'raw', expression: step.expression.trim() };
|
|
172
|
+
default:
|
|
173
|
+
return { kind: step.kind };
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Normalizes a codec spec to array form with ClickHouse defaults filled in,
|
|
178
|
+
* so that `{kind:'ZSTD'}` and `{kind:'ZSTD', level:1}` compare equal.
|
|
179
|
+
* Does not reorder chain steps — `[Delta, ZSTD]` ≠ `[ZSTD, Delta]` semantically.
|
|
180
|
+
*/
|
|
181
|
+
export function canonicalizeCodec(spec) {
|
|
182
|
+
return toArray(spec).map(canonicalizeStep);
|
|
183
|
+
}
|
|
184
|
+
export function codecsEqual(a, b) {
|
|
185
|
+
if (a === undefined && b === undefined)
|
|
186
|
+
return true;
|
|
187
|
+
if (a === undefined || b === undefined)
|
|
188
|
+
return false;
|
|
189
|
+
return JSON.stringify(canonicalizeCodec(a)) === JSON.stringify(canonicalizeCodec(b));
|
|
190
|
+
}
|
|
191
|
+
export const codec = {
|
|
192
|
+
raw: (expression) => ({ kind: 'raw', expression: expression.trim() }),
|
|
193
|
+
};
|
|
194
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"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"}
|
package/dist/flags.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export interface FlagDef {
|
|
2
|
+
name: string;
|
|
3
|
+
type: 'boolean' | 'string' | 'string[]';
|
|
4
|
+
description: string;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
negation?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export type ParsedFlags = Record<string, string | string[] | boolean | undefined>;
|
|
9
|
+
type FlagTypeMap = {
|
|
10
|
+
boolean: boolean | undefined;
|
|
11
|
+
string: string | undefined;
|
|
12
|
+
'string[]': string[] | undefined;
|
|
13
|
+
};
|
|
14
|
+
export type InferFlags<T extends readonly FlagDef[]> = {
|
|
15
|
+
[K in T[number] as K['name']]: FlagTypeMap[K['type']];
|
|
16
|
+
};
|
|
17
|
+
export declare function defineFlags<const T extends readonly FlagDef[]>(defs: T): T;
|
|
18
|
+
export declare function typedFlags<const T extends readonly FlagDef[]>(flags: ParsedFlags, _defs: T): InferFlags<T>;
|
|
19
|
+
export declare class UnknownFlagError extends Error {
|
|
20
|
+
readonly flag: string;
|
|
21
|
+
constructor(flag: string);
|
|
22
|
+
}
|
|
23
|
+
export declare class MissingFlagValueError extends Error {
|
|
24
|
+
readonly flag: string;
|
|
25
|
+
constructor(flag: string);
|
|
26
|
+
}
|
|
27
|
+
export interface FlagMappingEntry {
|
|
28
|
+
key: string;
|
|
29
|
+
coerce?: (value: string) => unknown;
|
|
30
|
+
}
|
|
31
|
+
export type FlagMapping = Record<string, FlagMappingEntry>;
|
|
32
|
+
export declare function mapFlags(flags: ParsedFlags, mapping: FlagMapping): Record<string, unknown>;
|
|
33
|
+
/** Minimal interface compatible with Zod's safeParse — avoids a zod dependency in core. */
|
|
34
|
+
export interface SafeParseable<T> {
|
|
35
|
+
safeParse(data: unknown): {
|
|
36
|
+
success: true;
|
|
37
|
+
data: T;
|
|
38
|
+
} | {
|
|
39
|
+
success: false;
|
|
40
|
+
error: {
|
|
41
|
+
issues: Array<{
|
|
42
|
+
path: PropertyKey[];
|
|
43
|
+
message: string;
|
|
44
|
+
}>;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Three-layer option resolution: pluginConfig → runtimeOptions → CLI flags.
|
|
50
|
+
* Merges sources, validates through a schema, and throws ErrorClass on failure.
|
|
51
|
+
*/
|
|
52
|
+
export declare function resolveOptions<T>(schema: SafeParseable<T>, pluginConfig: Record<string, unknown>, runtimeOptions: Record<string, unknown>, flags: ParsedFlags, flagMapping: FlagMapping, ErrorClass?: new (message: string) => Error): T;
|
|
53
|
+
export declare function parseFlags<const T extends readonly FlagDef[]>(argv: string[], flagDefs: T): InferFlags<T>;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC,CAAA;AAEjF,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,IAAI;KACpD,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CACtD,CAAA;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAE1E;AAED,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAC3D,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,CAAC,GACP,UAAU,CAAC,CAAC,CAAC,CAEf;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBACT,IAAI,EAAE,MAAM;CAKzB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBACT,IAAI,EAAE,MAAM;CAKzB;AAID,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;CACpC;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;AAE1D,wBAAgB,QAAQ,CACtB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB;AAED,2FAA2F;AAC3F,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,SAAS,CAAC,IAAI,EAAE,OAAO,GACnB;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,GAC1B;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE;YAAE,MAAM,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,WAAW,EAAE,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAA;KAAE,CAAA;CAC3F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,EACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,WAAW,EACxB,UAAU,GAAE,KAAK,OAAO,EAAE,MAAM,KAAK,KAAa,GACjD,CAAC,CAWH;AAID,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CA0DzG"}
|
package/dist/flags.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export function defineFlags(defs) {
|
|
2
|
+
return defs;
|
|
3
|
+
}
|
|
4
|
+
export function typedFlags(flags, _defs) {
|
|
5
|
+
return flags;
|
|
6
|
+
}
|
|
7
|
+
export class UnknownFlagError extends Error {
|
|
8
|
+
flag;
|
|
9
|
+
constructor(flag) {
|
|
10
|
+
super(`Unknown flag: ${flag}`);
|
|
11
|
+
this.name = 'UnknownFlagError';
|
|
12
|
+
this.flag = flag;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class MissingFlagValueError extends Error {
|
|
16
|
+
flag;
|
|
17
|
+
constructor(flag) {
|
|
18
|
+
super(`Missing value for ${flag}`);
|
|
19
|
+
this.name = 'MissingFlagValueError';
|
|
20
|
+
this.flag = flag;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function mapFlags(flags, mapping) {
|
|
24
|
+
const result = {};
|
|
25
|
+
for (const [flagName, entry] of Object.entries(mapping)) {
|
|
26
|
+
const raw = flags[flagName];
|
|
27
|
+
if (raw === undefined)
|
|
28
|
+
continue;
|
|
29
|
+
if (entry.coerce && typeof raw === 'string') {
|
|
30
|
+
result[entry.key] = entry.coerce(raw);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
result[entry.key] = raw;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Three-layer option resolution: pluginConfig → runtimeOptions → CLI flags.
|
|
40
|
+
* Merges sources, validates through a schema, and throws ErrorClass on failure.
|
|
41
|
+
*/
|
|
42
|
+
export function resolveOptions(schema, pluginConfig, runtimeOptions, flags, flagMapping, ErrorClass = Error) {
|
|
43
|
+
const cliOverrides = mapFlags(flags, flagMapping);
|
|
44
|
+
const merged = { ...pluginConfig, ...runtimeOptions, ...cliOverrides };
|
|
45
|
+
const result = schema.safeParse(merged);
|
|
46
|
+
if (!result.success) {
|
|
47
|
+
const issue = result.error.issues[0];
|
|
48
|
+
throw new ErrorClass(issue ? `${issue.path.join('.')}: ${issue.message}` : 'Invalid options');
|
|
49
|
+
}
|
|
50
|
+
return result.data;
|
|
51
|
+
}
|
|
52
|
+
// ───── Flag parsing ─────
|
|
53
|
+
export function parseFlags(argv, flagDefs) {
|
|
54
|
+
const lookup = new Map();
|
|
55
|
+
const negationMap = new Map();
|
|
56
|
+
for (const def of flagDefs) {
|
|
57
|
+
lookup.set(def.name, def);
|
|
58
|
+
if (def.type === 'boolean' && def.negation) {
|
|
59
|
+
const basename = def.name.replace(/^--/, '');
|
|
60
|
+
const negated = `--no-${basename}`;
|
|
61
|
+
negationMap.set(negated, def.name);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const flags = {};
|
|
65
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
66
|
+
const token = argv[i];
|
|
67
|
+
if (!token || !token.startsWith('--'))
|
|
68
|
+
continue;
|
|
69
|
+
if (negationMap.has(token)) {
|
|
70
|
+
const originalName = negationMap.get(token);
|
|
71
|
+
flags[originalName] = false;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const def = lookup.get(token);
|
|
75
|
+
if (!def) {
|
|
76
|
+
throw new UnknownFlagError(token);
|
|
77
|
+
}
|
|
78
|
+
if (def.type === 'boolean') {
|
|
79
|
+
flags[def.name] = true;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const nextToken = argv[i + 1];
|
|
83
|
+
if (nextToken === undefined || nextToken.startsWith('--')) {
|
|
84
|
+
throw new MissingFlagValueError(def.name);
|
|
85
|
+
}
|
|
86
|
+
i += 1;
|
|
87
|
+
if (def.type === 'string') {
|
|
88
|
+
flags[def.name] = nextToken;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (def.type === 'string[]') {
|
|
92
|
+
const values = nextToken.split(',').map((v) => v.trim()).filter((v) => v.length > 0);
|
|
93
|
+
const existing = flags[def.name];
|
|
94
|
+
if (Array.isArray(existing)) {
|
|
95
|
+
existing.push(...values);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
flags[def.name] = values;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return flags;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
export * from './flags.js';
|
|
1
2
|
export * from './model.js';
|
|
2
3
|
export { canonicalizeDefinition, canonicalizeDefinitions, collectDefinitionsFromModule, } from './canonical.js';
|
|
3
4
|
export { planDiff } from './planner.js';
|
|
4
5
|
export { createSnapshot } from './snapshot.js';
|
|
5
|
-
export {
|
|
6
|
-
export { normalizeSQLFragment } from './sql-normalizer.js';
|
|
6
|
+
export { splitTopLevelComma } from './key-clause.js';
|
|
7
|
+
export { normalizeEngine, normalizeSQLFragment } from './sql-normalizer.js';
|
|
7
8
|
export { toCreateSQL } from './sql.js';
|
|
9
|
+
export { canonicalizeCodec, codec, codecsEqual, isGeneralCodec, isPreprocessorCodec, isRawCodec, parseCodec, renderCodec, } from './codec.js';
|
|
8
10
|
export { assertValidDefinitions, validateDefinitions } from './validate.js';
|
|
11
|
+
export { wrapPluginRun } from './plugin-error.js';
|
|
12
|
+
export { splitSqlStatements, extractExecutableStatements } from './sql-splitter.js';
|
|
9
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EACL,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
export * from './flags.js';
|
|
1
2
|
export * from './model.js';
|
|
2
3
|
export { canonicalizeDefinition, canonicalizeDefinitions, collectDefinitionsFromModule, } from './canonical.js';
|
|
3
4
|
export { planDiff } from './planner.js';
|
|
4
5
|
export { createSnapshot } from './snapshot.js';
|
|
5
|
-
export {
|
|
6
|
-
export { normalizeSQLFragment } from './sql-normalizer.js';
|
|
6
|
+
export { splitTopLevelComma } from './key-clause.js';
|
|
7
|
+
export { normalizeEngine, normalizeSQLFragment } from './sql-normalizer.js';
|
|
7
8
|
export { toCreateSQL } from './sql.js';
|
|
9
|
+
export { canonicalizeCodec, codec, codecsEqual, isGeneralCodec, isPreprocessorCodec, isRawCodec, parseCodec, renderCodec, } from './codec.js';
|
|
8
10
|
export { assertValidDefinitions, validateDefinitions } from './validate.js';
|
|
11
|
+
export { wrapPluginRun } from './plugin-error.js';
|
|
12
|
+
export { splitSqlStatements, extractExecutableStatements } from './sql-splitter.js';
|
|
9
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EACL,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA"}
|