@chkit/core 0.1.2-beta.7 → 0.2.0-beta.11
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 +26 -6
- package/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +26 -7
- package/dist/canonical.js.map +1 -1
- package/dist/column-default.d.ts +62 -0
- package/dist/column-default.d.ts.map +1 -0
- package/dist/column-default.js +212 -0
- package/dist/column-default.js.map +1 -0
- package/dist/conflict-markers.d.ts +3 -0
- package/dist/conflict-markers.d.ts.map +1 -0
- package/dist/conflict-markers.js +9 -0
- package/dist/conflict-markers.js.map +1 -0
- package/dist/identifier.d.ts +22 -0
- package/dist/identifier.d.ts.map +1 -0
- package/dist/identifier.js +69 -0
- package/dist/identifier.js.map +1 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/insert-columns.d.ts +13 -0
- package/dist/insert-columns.d.ts.map +1 -0
- package/dist/insert-columns.js +36 -0
- package/dist/insert-columns.js.map +1 -0
- package/dist/kafka.d.ts +9 -0
- package/dist/kafka.d.ts.map +1 -0
- package/dist/kafka.js +64 -0
- package/dist/kafka.js.map +1 -0
- package/dist/key-clause.d.ts +6 -1
- package/dist/key-clause.d.ts.map +1 -1
- package/dist/key-clause.js +12 -13
- package/dist/key-clause.js.map +1 -1
- package/dist/model-types.d.ts +84 -6
- package/dist/model-types.d.ts.map +1 -1
- package/dist/model.d.ts +3 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +9 -2
- package/dist/model.js.map +1 -1
- package/dist/object-dependencies.d.ts +18 -0
- package/dist/object-dependencies.d.ts.map +1 -0
- package/dist/object-dependencies.js +351 -0
- package/dist/object-dependencies.js.map +1 -0
- package/dist/on-cluster.d.ts.map +1 -1
- package/dist/on-cluster.js +7 -3
- package/dist/on-cluster.js.map +1 -1
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +93 -82
- package/dist/planner.js.map +1 -1
- package/dist/projection.d.ts.map +1 -1
- package/dist/projection.js +5 -40
- package/dist/projection.js.map +1 -1
- package/dist/schema-loader.d.ts +2 -0
- package/dist/schema-loader.d.ts.map +1 -1
- package/dist/schema-loader.js +72 -5
- package/dist/schema-loader.js.map +1 -1
- package/dist/sql-lexer.d.ts +29 -0
- package/dist/sql-lexer.d.ts.map +1 -0
- package/dist/sql-lexer.js +220 -0
- package/dist/sql-lexer.js.map +1 -0
- package/dist/sql-normalizer.d.ts +48 -0
- package/dist/sql-normalizer.d.ts.map +1 -1
- package/dist/sql-normalizer.js +118 -1
- package/dist/sql-normalizer.js.map +1 -1
- package/dist/sql-scan.d.ts +20 -0
- package/dist/sql-scan.d.ts.map +1 -0
- package/dist/sql-scan.js +82 -0
- package/dist/sql-scan.js.map +1 -0
- package/dist/sql-splitter.d.ts.map +1 -1
- package/dist/sql-splitter.js +52 -5
- package/dist/sql-splitter.js.map +1 -1
- package/dist/sql.d.ts +7 -0
- package/dist/sql.d.ts.map +1 -1
- package/dist/sql.js +51 -39
- package/dist/sql.js.map +1 -1
- package/dist/text-index-sql.d.ts +6 -0
- package/dist/text-index-sql.d.ts.map +1 -0
- package/dist/text-index-sql.js +200 -0
- package/dist/text-index-sql.js.map +1 -0
- package/dist/text-index.d.ts +10 -0
- package/dist/text-index.d.ts.map +1 -0
- package/dist/text-index.js +121 -0
- package/dist/text-index.js.map +1 -0
- package/dist/ts-import.d.ts.map +1 -1
- package/dist/ts-import.js +23 -3
- package/dist/ts-import.js.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +303 -3
- package/dist/validate.js.map +1 -1
- package/package.json +1 -1
- package/dist/utils.d.ts +0 -2
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -2
- package/dist/utils.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
export * from './flags.js';
|
|
2
2
|
export * from './model.js';
|
|
3
|
+
export { isKafkaEngine, parseKafkaSettings, kafkaSettingFingerprint } from './kafka.js';
|
|
4
|
+
export { findQuoteEnd, findTopLevelSQLPattern, isQuoteChar, stripWrappingParens, } from './sql-scan.js';
|
|
3
5
|
export { SYNTHESIZED_CONFIG_PATH, isSynthesizedConfigPath } from './config-path.js';
|
|
4
|
-
export {
|
|
6
|
+
export { hasConflictMarkers } from './conflict-markers.js';
|
|
7
|
+
export { canonicalizeDefinition, canonicalizeDefinitions, collectDefinitionsFromModule, definitionKey, } from './canonical.js';
|
|
5
8
|
export { planDiff } from './planner.js';
|
|
6
9
|
export { createSnapshot } from './snapshot.js';
|
|
10
|
+
export { TEXT_INDEX_GRANULARITY, canonicalizeTextIndex, normalizeTextIndexSQL, parseTextIndexParams, renderTextIndexType, textIndexFingerprint, } from './text-index.js';
|
|
7
11
|
export { splitTopLevelComma } from './key-clause.js';
|
|
12
|
+
export { insertColumnList } from './insert-columns.js';
|
|
13
|
+
export { quoteIdentifier, renderIdentifier, renderQualifiedName, unquoteIdentifiers, } from './identifier.js';
|
|
14
|
+
export { parseColumnDefault, renderDefault, type ParsedColumnDefault } from './column-default.js';
|
|
8
15
|
export { isIndexProjection, normalizeProjectionIndex } from './projection.js';
|
|
9
|
-
export { normalizeEngine, normalizeSQLFragment } from './sql-normalizer.js';
|
|
10
|
-
export { renderDictionarySQL, toCreateSQL } from './sql.js';
|
|
16
|
+
export { isSyntheticEphemeralDefault, normalizeEngine, normalizeSQLFragment, sqlExpressionFingerprint, } from './sql-normalizer.js';
|
|
17
|
+
export { renderDictionarySQL, renderKeyClauseColumns, toCreateSQL } from './sql.js';
|
|
11
18
|
export { applyOnClusterToPlan, onClusterClause } from './on-cluster.js';
|
|
12
19
|
export { canonicalizeCodec, codec, codecsEqual, isGeneralCodec, isPreprocessorCodec, isRawCodec, parseCodec, renderCodec, } from './codec.js';
|
|
13
20
|
export { assertValidDefinitions, validateDefinitions } from './validate.js';
|
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,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACvF,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,WAAW,EACX,mBAAmB,GACpB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,aAAa,GACd,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACvE,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,kBAAkB,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
export * from './flags.js';
|
|
2
2
|
export * from './model.js';
|
|
3
|
+
export { isKafkaEngine, parseKafkaSettings, kafkaSettingFingerprint } from './kafka.js';
|
|
4
|
+
export { findQuoteEnd, findTopLevelSQLPattern, isQuoteChar, stripWrappingParens, } from './sql-scan.js';
|
|
3
5
|
export { SYNTHESIZED_CONFIG_PATH, isSynthesizedConfigPath } from './config-path.js';
|
|
4
|
-
export {
|
|
6
|
+
export { hasConflictMarkers } from './conflict-markers.js';
|
|
7
|
+
export { canonicalizeDefinition, canonicalizeDefinitions, collectDefinitionsFromModule, definitionKey, } from './canonical.js';
|
|
5
8
|
export { planDiff } from './planner.js';
|
|
6
9
|
export { createSnapshot } from './snapshot.js';
|
|
10
|
+
export { TEXT_INDEX_GRANULARITY, canonicalizeTextIndex, normalizeTextIndexSQL, parseTextIndexParams, renderTextIndexType, textIndexFingerprint, } from './text-index.js';
|
|
7
11
|
export { splitTopLevelComma } from './key-clause.js';
|
|
12
|
+
export { insertColumnList } from './insert-columns.js';
|
|
13
|
+
export { quoteIdentifier, renderIdentifier, renderQualifiedName, unquoteIdentifiers, } from './identifier.js';
|
|
14
|
+
export { parseColumnDefault, renderDefault } from './column-default.js';
|
|
8
15
|
export { isIndexProjection, normalizeProjectionIndex } from './projection.js';
|
|
9
|
-
export { normalizeEngine, normalizeSQLFragment } from './sql-normalizer.js';
|
|
10
|
-
export { renderDictionarySQL, toCreateSQL } from './sql.js';
|
|
16
|
+
export { isSyntheticEphemeralDefault, normalizeEngine, normalizeSQLFragment, sqlExpressionFingerprint, } from './sql-normalizer.js';
|
|
17
|
+
export { renderDictionarySQL, renderKeyClauseColumns, toCreateSQL } from './sql.js';
|
|
11
18
|
export { applyOnClusterToPlan, onClusterClause } from './on-cluster.js';
|
|
12
19
|
export { canonicalizeCodec, codec, codecsEqual, isGeneralCodec, isPreprocessorCodec, isRawCodec, parseCodec, renderCodec, } from './codec.js';
|
|
13
20
|
export { assertValidDefinitions, validateDefinitions } from './validate.js';
|
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,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACvF,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,WAAW,EACX,mBAAmB,GACpB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,aAAa,GACd,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAA4B,MAAM,qBAAqB,CAAA;AACjG,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC7E,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACvE,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,kBAAkB,EAAE,aAAa,EAAyB,MAAM,mBAAmB,CAAA;AAC5F,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TableDefinition } from './model-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The INSERT column list for `INSERT ... FORMAT JSONEachRow`, or `undefined`
|
|
4
|
+
* for a table without EPHEMERAL columns. Without a list ClickHouse treats
|
|
5
|
+
* EPHEMERAL keys as unknown fields and drops them, so the list names every
|
|
6
|
+
* insertable column. Omitted keys still receive their defaults.
|
|
7
|
+
*
|
|
8
|
+
* A `Nested(...)` column is listed by its `name.field` subcolumns: with the
|
|
9
|
+
* default `flatten_nested = 1` those are the table's real columns, and the
|
|
10
|
+
* Nested name itself is rejected as an unknown column.
|
|
11
|
+
*/
|
|
12
|
+
export declare function insertColumnList(table: TableDefinition): string[] | undefined;
|
|
13
|
+
//# sourceMappingURL=insert-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-columns.d.ts","sourceRoot":"","sources":["../src/insert-columns.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,EAAE,GAAG,SAAS,CAS7E"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { renderIdentifier, unescapeQuoted } from './identifier.js';
|
|
2
|
+
import { findQuoteEnd } from './sql-scan.js';
|
|
3
|
+
import { splitTopLevelComma } from './key-clause.js';
|
|
4
|
+
/**
|
|
5
|
+
* The INSERT column list for `INSERT ... FORMAT JSONEachRow`, or `undefined`
|
|
6
|
+
* for a table without EPHEMERAL columns. Without a list ClickHouse treats
|
|
7
|
+
* EPHEMERAL keys as unknown fields and drops them, so the list names every
|
|
8
|
+
* insertable column. Omitted keys still receive their defaults.
|
|
9
|
+
*
|
|
10
|
+
* A `Nested(...)` column is listed by its `name.field` subcolumns: with the
|
|
11
|
+
* default `flatten_nested = 1` those are the table's real columns, and the
|
|
12
|
+
* Nested name itself is rejected as an unknown column.
|
|
13
|
+
*/
|
|
14
|
+
export function insertColumnList(table) {
|
|
15
|
+
if (!table.columns.some((column) => column.defaultKind === 'EPHEMERAL'))
|
|
16
|
+
return undefined;
|
|
17
|
+
return table.columns
|
|
18
|
+
.filter((column) => column.defaultKind !== 'MATERIALIZED' && column.defaultKind !== 'ALIAS')
|
|
19
|
+
.flatMap((column) => {
|
|
20
|
+
const fields = nestedFieldNames(column.type);
|
|
21
|
+
return fields ? fields.map((field) => `${column.name}.${field}`) : [column.name];
|
|
22
|
+
})
|
|
23
|
+
.map(renderIdentifier);
|
|
24
|
+
}
|
|
25
|
+
function nestedFieldNames(type) {
|
|
26
|
+
const fields = /^Nested\s*\((.*)\)$/s.exec(type.trim())?.[1];
|
|
27
|
+
return fields === undefined ? undefined : splitTopLevelComma(fields).map(nestedFieldName);
|
|
28
|
+
}
|
|
29
|
+
/** The leading name of a `name Type` field, unquoting a backticked or double-quoted name. */
|
|
30
|
+
function nestedFieldName(field) {
|
|
31
|
+
const quote = field.charAt(0);
|
|
32
|
+
if (quote !== '`' && quote !== '"')
|
|
33
|
+
return field.split(/\s/, 1)[0] ?? field;
|
|
34
|
+
return unescapeQuoted(field.slice(1, findQuoteEnd(field, 0, quote)), quote);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=insert-columns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-columns.js","sourceRoot":"","sources":["../src/insert-columns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAGpD;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,WAAW,CAAC;QAAE,OAAO,SAAS,CAAA;IACzF,OAAO,KAAK,CAAC,OAAO;SACjB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,cAAc,IAAI,MAAM,CAAC,WAAW,KAAK,OAAO,CAAC;SAC3F,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClF,CAAC,CAAC;SACD,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5D,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAC3F,CAAC;AAED,6FAA6F;AAC7F,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAA;IAC3E,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC7E,CAAC"}
|
package/dist/kafka.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function isKafkaEngine(engine: string): boolean;
|
|
2
|
+
/** Kafka has literal settings; existing engines retain their raw SQL setting contract. */
|
|
3
|
+
export declare function renderKafkaSetting(value: string | number | boolean): string;
|
|
4
|
+
/** Decode a ClickHouse literal from SHOW CREATE, without evaluating expressions. */
|
|
5
|
+
export declare function parseKafkaSetting(value: string): string | number | boolean;
|
|
6
|
+
export declare function parseKafkaSettings(settings: Record<string, string>): Record<string, string | number | boolean>;
|
|
7
|
+
export declare function kafkaSettingFingerprint(value: string | number | boolean): string;
|
|
8
|
+
export declare function normalizeKafkaEngine(engine: string): string;
|
|
9
|
+
//# sourceMappingURL=kafka.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.d.ts","sourceRoot":"","sources":["../src/kafka.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAK3E;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAkC1E;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAI3C;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAEhF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ3D"}
|
package/dist/kafka.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { splitTopLevelComma } from './key-clause.js';
|
|
2
|
+
export function isKafkaEngine(engine) {
|
|
3
|
+
return /^Kafka\s*(?:\(|$)/i.test(engine.trim());
|
|
4
|
+
}
|
|
5
|
+
/** Kafka has literal settings; existing engines retain their raw SQL setting contract. */
|
|
6
|
+
export function renderKafkaSetting(value) {
|
|
7
|
+
if (typeof value === 'string') {
|
|
8
|
+
return `'${value.replace(/\\/g, '\\\\').replace(/'/g, "''")}'`;
|
|
9
|
+
}
|
|
10
|
+
return typeof value === 'boolean' ? (value ? '1' : '0') : String(value);
|
|
11
|
+
}
|
|
12
|
+
/** Decode a ClickHouse literal from SHOW CREATE, without evaluating expressions. */
|
|
13
|
+
export function parseKafkaSetting(value) {
|
|
14
|
+
const trimmed = value.trim();
|
|
15
|
+
if (trimmed.startsWith("'") && trimmed.endsWith("'")) {
|
|
16
|
+
const escapes = {
|
|
17
|
+
n: '\n',
|
|
18
|
+
r: '\r',
|
|
19
|
+
t: '\t',
|
|
20
|
+
b: '\b',
|
|
21
|
+
f: '\f',
|
|
22
|
+
a: '\u0007',
|
|
23
|
+
v: '\v',
|
|
24
|
+
'0': '\0',
|
|
25
|
+
N: '',
|
|
26
|
+
'\\': '\\',
|
|
27
|
+
"'": "'",
|
|
28
|
+
'"': '"',
|
|
29
|
+
};
|
|
30
|
+
const bytes = [];
|
|
31
|
+
const encoder = new TextEncoder();
|
|
32
|
+
for (const token of trimmed.slice(1, -1).match(/\\x[\da-fA-F]{2}|\\[\s\S]|''|[\s\S]/gu) ?? []) {
|
|
33
|
+
if (/^\\x[\da-fA-F]{2}$/.test(token))
|
|
34
|
+
bytes.push(Number.parseInt(token.slice(2), 16));
|
|
35
|
+
else {
|
|
36
|
+
const decoded = token === "''" ? "'" : token.startsWith('\\') ? (escapes[token[1] ?? ''] ?? token) : token;
|
|
37
|
+
bytes.push(...encoder.encode(decoded));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return new TextDecoder().decode(new Uint8Array(bytes));
|
|
41
|
+
}
|
|
42
|
+
if (/^(true|false)$/i.test(trimmed))
|
|
43
|
+
return trimmed.toLowerCase() === 'true';
|
|
44
|
+
if (/^-?\d+(?:\.\d+)?$/.test(trimmed) && Number.isSafeInteger(Number(trimmed)))
|
|
45
|
+
return Number(trimmed);
|
|
46
|
+
// Keep large integers lossless. String comparison handles numeric metadata.
|
|
47
|
+
return trimmed;
|
|
48
|
+
}
|
|
49
|
+
export function parseKafkaSettings(settings) {
|
|
50
|
+
return Object.fromEntries(Object.entries(settings).map(([key, value]) => [key, parseKafkaSetting(value)]));
|
|
51
|
+
}
|
|
52
|
+
export function kafkaSettingFingerprint(value) {
|
|
53
|
+
return typeof value === 'boolean' ? (value ? '1' : '0') : String(value);
|
|
54
|
+
}
|
|
55
|
+
export function normalizeKafkaEngine(engine) {
|
|
56
|
+
const args = engine.trim().match(/^Kafka\s*\(([\s\S]*)\)$/i)?.[1] ?? '';
|
|
57
|
+
return `Kafka(${splitTopLevelComma(args)
|
|
58
|
+
.map((arg) => {
|
|
59
|
+
const parsed = parseKafkaSetting(arg);
|
|
60
|
+
return arg.trim().startsWith("'") ? renderKafkaSetting(parsed) : arg.trim();
|
|
61
|
+
})
|
|
62
|
+
.join(', ')})`;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=kafka.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka.js","sourceRoot":"","sources":["../src/kafka.ts"],"names":[],"mappings":"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"}
|
package/dist/key-clause.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export declare function splitTopLevelComma(input: string): string[];
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Flattens key entries into one token per key part. An entry may hold several
|
|
4
|
+
* comma-separated parts (`'id, toDate(ts)'`), but one that exactly names a
|
|
5
|
+
* declared column is kept whole, since the name itself may contain a comma.
|
|
6
|
+
*/
|
|
7
|
+
export declare function normalizeKeyColumns(values: string[] | undefined, declaredColumns?: ReadonlySet<string>): string[];
|
|
3
8
|
/**
|
|
4
9
|
* A key entry references a table column only when it is a bare identifier.
|
|
5
10
|
* Anything else — function calls like `toDate(ts)`, arithmetic, or tuples — is
|
package/dist/key-clause.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-clause.d.ts","sourceRoot":"","sources":["../src/key-clause.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"key-clause.d.ts","sourceRoot":"","sources":["../src/key-clause.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAyC1D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAC5B,eAAe,GAAE,WAAW,CAAC,MAAM,CAAa,GAC/C,MAAM,EAAE,CAIV;AAID;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
package/dist/key-clause.js
CHANGED
|
@@ -1,20 +1,14 @@
|
|
|
1
|
+
import { findQuoteEnd, isQuoteChar } from './sql-scan.js';
|
|
1
2
|
export function splitTopLevelComma(input) {
|
|
2
3
|
const out = [];
|
|
3
4
|
let current = '';
|
|
4
5
|
let depth = 0;
|
|
5
|
-
let quote = null;
|
|
6
6
|
for (let i = 0; i < input.length; i += 1) {
|
|
7
7
|
const char = input[i] ?? '';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
current +=
|
|
11
|
-
|
|
12
|
-
quote = null;
|
|
13
|
-
continue;
|
|
14
|
-
}
|
|
15
|
-
if (char === "'" || char === '"' || char === '`') {
|
|
16
|
-
quote = char;
|
|
17
|
-
current += char;
|
|
8
|
+
if (isQuoteChar(char)) {
|
|
9
|
+
const end = findQuoteEnd(input, i, char);
|
|
10
|
+
current += input.slice(i, end + 1);
|
|
11
|
+
i = end;
|
|
18
12
|
continue;
|
|
19
13
|
}
|
|
20
14
|
if (char === '(') {
|
|
@@ -41,8 +35,13 @@ export function splitTopLevelComma(input) {
|
|
|
41
35
|
out.push(tail);
|
|
42
36
|
return out;
|
|
43
37
|
}
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Flattens key entries into one token per key part. An entry may hold several
|
|
40
|
+
* comma-separated parts (`'id, toDate(ts)'`), but one that exactly names a
|
|
41
|
+
* declared column is kept whole, since the name itself may contain a comma.
|
|
42
|
+
*/
|
|
43
|
+
export function normalizeKeyColumns(values, declaredColumns = new Set()) {
|
|
44
|
+
return (values ?? []).flatMap((value) => declaredColumns.has(value.trim()) ? [value.trim()] : splitTopLevelComma(value.trim()));
|
|
46
45
|
}
|
|
47
46
|
const PLAIN_COLUMN_REFERENCE = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
48
47
|
/**
|
package/dist/key-clause.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-clause.js","sourceRoot":"","sources":["../src/key-clause.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,KAAK,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"key-clause.js","sourceRoot":"","sources":["../src/key-clause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEzD,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,KAAK,GAAG,CAAC,CAAA;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAE3B,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;YACxC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;YAClC,CAAC,GAAG,GAAG,CAAA;YACP,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,CAAA;YACV,OAAO,IAAI,IAAI,CAAA;YACf,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;YAC9B,OAAO,IAAI,IAAI,CAAA;YACf,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;YAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACrC,OAAO,GAAG,EAAE,CAAA;YACZ,SAAQ;QACV,CAAC;QAED,OAAO,IAAI,IAAI,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEnC,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA4B,EAC5B,kBAAuC,IAAI,GAAG,EAAE;IAEhD,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACtC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CACtF,CAAA;AACH,CAAC;AAED,MAAM,sBAAsB,GAAG,0BAA0B,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC3C,CAAC"}
|
package/dist/model-types.d.ts
CHANGED
|
@@ -36,12 +36,47 @@ export interface RawColumnCodec {
|
|
|
36
36
|
export type ColumnCodec = GeneralColumnCodec | PreprocessingColumnCodec | RawColumnCodec;
|
|
37
37
|
/** Single codec or a chain (preprocessors then exactly one general codec). */
|
|
38
38
|
export type ColumnCodecSpec = ColumnCodec | ColumnCodec[];
|
|
39
|
+
export type ColumnDefaultKind = 'DEFAULT' | 'MATERIALIZED' | 'ALIAS' | 'EPHEMERAL';
|
|
40
|
+
/**
|
|
41
|
+
* Raw ClickHouse SQL, rendered unquoted (trimmed, with SQL comments removed)
|
|
42
|
+
* where chkit would otherwise render a literal: a column
|
|
43
|
+
* `default: { expression: 'now64(3)' }` renders `DEFAULT now64(3)`.
|
|
44
|
+
*/
|
|
45
|
+
export interface SQLExpression {
|
|
46
|
+
expression: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A column default: a literal (strings are single-quoted, numbers and booleans
|
|
50
|
+
* render as written) or a {@link SQLExpression} rendered as SQL.
|
|
51
|
+
*/
|
|
52
|
+
export type ColumnDefaultValue = string | number | boolean | SQLExpression;
|
|
39
53
|
export interface ColumnDefinition {
|
|
40
54
|
name: string;
|
|
41
55
|
type: PrimitiveColumnType | string;
|
|
42
56
|
renamedFrom?: string;
|
|
43
57
|
nullable?: boolean;
|
|
44
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Value of the column's `defaultKind` clause (`DEFAULT` unless set).
|
|
60
|
+
* - `'pending'` → `DEFAULT 'pending'` (a string is always a literal)
|
|
61
|
+
* - `0` / `false` → `DEFAULT 0` / `DEFAULT false`
|
|
62
|
+
* - `{ expression: 'now64(3)' }` → `DEFAULT now64(3)` (SQL; comments are
|
|
63
|
+
* dropped when rendered)
|
|
64
|
+
*
|
|
65
|
+
* `'fn:now64(3)'` is the legacy spelling of `{ expression: 'now64(3)' }`;
|
|
66
|
+
* snapshots store both as the `fn:` string. `generate` rejects a plain string
|
|
67
|
+
* that starts with a function call as the `DEFAULT` of a column that cannot
|
|
68
|
+
* hold a string (`column_default_looks_like_expression`), and any plain
|
|
69
|
+
* string on a `MATERIALIZED` or `ALIAS` column (`column_expression_requires_fn`).
|
|
70
|
+
*/
|
|
71
|
+
default?: ColumnDefaultValue;
|
|
72
|
+
/**
|
|
73
|
+
* How ClickHouse uses `default`: `DEFAULT` (the implicit kind),
|
|
74
|
+
* `MATERIALIZED`, `ALIAS`, or `EPHEMERAL`. The literal and `{ expression }`
|
|
75
|
+
* forms of `default` work for every kind:
|
|
76
|
+
* `{ defaultKind: 'MATERIALIZED', default: { expression: 'toDate(ts)' } }`
|
|
77
|
+
* renders `MATERIALIZED toDate(ts)`.
|
|
78
|
+
*/
|
|
79
|
+
defaultKind?: ColumnDefaultKind;
|
|
45
80
|
comment?: string;
|
|
46
81
|
codec?: ColumnCodecSpec;
|
|
47
82
|
}
|
|
@@ -50,6 +85,21 @@ interface SkipIndexBase {
|
|
|
50
85
|
expression: string;
|
|
51
86
|
granularity: number;
|
|
52
87
|
}
|
|
88
|
+
/** Full-text index. ClickHouse ignores granularity and uses one index per part. */
|
|
89
|
+
export interface TextSkipIndex extends Omit<SkipIndexBase, 'granularity'> {
|
|
90
|
+
type: 'text';
|
|
91
|
+
/** SQL tokenizer, e.g. splitByNonAlpha or splitByString([' ', ';']). */
|
|
92
|
+
tokenizer: string;
|
|
93
|
+
granularity?: number;
|
|
94
|
+
preprocessor?: string;
|
|
95
|
+
/** Requires a ClickHouse version that supports postprocessing. */
|
|
96
|
+
postprocessor?: string;
|
|
97
|
+
supportPhraseSearch?: boolean;
|
|
98
|
+
dictionaryBlockSize?: number;
|
|
99
|
+
dictionaryBlockFrontcodingCompression?: boolean;
|
|
100
|
+
postingListBlockSize?: number;
|
|
101
|
+
postingListCodec?: 'none' | 'bitpacking';
|
|
102
|
+
}
|
|
53
103
|
/**
|
|
54
104
|
* Skip index with structured, discriminated args per type. Arg signatures
|
|
55
105
|
* come from ClickHouse MergeTree docs:
|
|
@@ -58,11 +108,12 @@ interface SkipIndexBase {
|
|
|
58
108
|
* - `bloom_filter([false_positive_rate])` — optional float, default 0.025
|
|
59
109
|
* - `tokenbf_v1(size_bytes, n_hash, seed)` — 3 required ints
|
|
60
110
|
* - `ngrambf_v1(n, size_bytes, n_hash, seed)` — 4 required ints
|
|
111
|
+
* - `text(tokenizer = ..., ...)` — named parameters, automatic granularity
|
|
61
112
|
*
|
|
62
113
|
* ClickHouse 26+ requires `set(0)` not bare `set`; `maxRows` is required
|
|
63
114
|
* so this is encoded naturally.
|
|
64
115
|
*/
|
|
65
|
-
export type SkipIndexDefinition = SkipIndexBase & ({
|
|
116
|
+
export type SkipIndexDefinition = TextSkipIndex | SkipIndexBase & ({
|
|
66
117
|
type: 'minmax';
|
|
67
118
|
} | {
|
|
68
119
|
type: 'set';
|
|
@@ -122,6 +173,21 @@ export interface TableDefinition {
|
|
|
122
173
|
comment?: string;
|
|
123
174
|
plugins?: TablePlugins;
|
|
124
175
|
}
|
|
176
|
+
/** Omitted primary keys inherit ORDER BY, matching ClickHouse MergeTree semantics. */
|
|
177
|
+
export type TableInput = Omit<TableDefinition, 'kind' | 'primaryKey'> & {
|
|
178
|
+
primaryKey?: string[];
|
|
179
|
+
};
|
|
180
|
+
/** Kafka queues do not have MergeTree sorting/storage clauses. */
|
|
181
|
+
export type KafkaTableInput = Omit<TableDefinition, 'kind' | 'engine' | 'primaryKey' | 'orderBy' | 'partitionBy' | 'uniqueKey' | 'ttl' | 'indexes' | 'projections'> & {
|
|
182
|
+
engine: 'Kafka' | `Kafka(${string})`;
|
|
183
|
+
primaryKey?: never;
|
|
184
|
+
orderBy?: never;
|
|
185
|
+
partitionBy?: never;
|
|
186
|
+
uniqueKey?: never;
|
|
187
|
+
ttl?: never;
|
|
188
|
+
indexes?: never;
|
|
189
|
+
projections?: never;
|
|
190
|
+
};
|
|
125
191
|
export interface ViewDefinition {
|
|
126
192
|
kind: 'view';
|
|
127
193
|
database: string;
|
|
@@ -157,7 +223,7 @@ export interface MaterializedViewDefinition {
|
|
|
157
223
|
export interface DictionaryAttribute {
|
|
158
224
|
name: string;
|
|
159
225
|
type: PrimitiveColumnType | string;
|
|
160
|
-
/** DEFAULT / null_value for missing keys. */
|
|
226
|
+
/** DEFAULT / null_value for missing keys. A literal: ClickHouse accepts no expression here. */
|
|
161
227
|
default?: string | number | boolean;
|
|
162
228
|
/** EXPRESSION — computed from source columns. Mutually exclusive with default. */
|
|
163
229
|
expression?: string;
|
|
@@ -237,9 +303,19 @@ export interface ChxInlinePluginRegistration<TPlugin = unknown, TOptions extends
|
|
|
237
303
|
enabled?: boolean;
|
|
238
304
|
options?: TOptions;
|
|
239
305
|
}
|
|
240
|
-
export type ChxPluginRegistration = ChxInlinePluginRegistration
|
|
306
|
+
export type ChxPluginRegistration = ChxInlinePluginRegistration<unknown, object>;
|
|
241
307
|
export interface ChxUserConfig {
|
|
242
|
-
|
|
308
|
+
/**
|
|
309
|
+
* Glob patterns for schema files. Mutually exclusive with `entry`.
|
|
310
|
+
*/
|
|
311
|
+
schema?: string | string[];
|
|
312
|
+
/**
|
|
313
|
+
* Single project entry module. It is imported once: exported schema
|
|
314
|
+
* definitions are collected from it, and exported plugin-domain definitions
|
|
315
|
+
* (for example ingestion pipelines) are collected by their plugins. Mutually
|
|
316
|
+
* exclusive with `schema`.
|
|
317
|
+
*/
|
|
318
|
+
entry?: string;
|
|
243
319
|
outDir?: string;
|
|
244
320
|
migrationsDir?: string;
|
|
245
321
|
metaDir?: string;
|
|
@@ -250,6 +326,7 @@ export interface ChxUserConfig {
|
|
|
250
326
|
}
|
|
251
327
|
export interface ChxResolvedConfig {
|
|
252
328
|
schema: string[];
|
|
329
|
+
entry?: string;
|
|
253
330
|
outDir: string;
|
|
254
331
|
migrationsDir: string;
|
|
255
332
|
metaDir: string;
|
|
@@ -279,6 +356,7 @@ export interface MigrationOperation {
|
|
|
279
356
|
key: string;
|
|
280
357
|
risk: RiskLevel;
|
|
281
358
|
sql: string;
|
|
359
|
+
warning?: string;
|
|
282
360
|
}
|
|
283
361
|
export interface ColumnRenameSuggestion {
|
|
284
362
|
kind: 'column';
|
|
@@ -297,7 +375,7 @@ export interface MigrationPlan {
|
|
|
297
375
|
riskSummary: Record<RiskLevel, number>;
|
|
298
376
|
renameSuggestions: ColumnRenameSuggestion[];
|
|
299
377
|
}
|
|
300
|
-
export type ValidationIssueCode = 'duplicate_object_name' | 'duplicate_column_name' | 'duplicate_index_name' | 'duplicate_projection_name' | 'projection_ambiguous_kind' | 'projection_empty_index' | 'primary_key_missing_column' | 'order_by_missing_column' | 'refresh_requires_every_or_after' | 'refresh_every_after_mutually_exclusive' | 'refresh_interval_format' | 'refresh_append_required_for_replicated_target' | 'refresh_depends_on_requires_every' | 'codec_chain_must_end_with_general' | 'codec_chain_multiple_general' | 'codec_chain_empty' | 'dictionary_missing_primary_key' | 'dictionary_primary_key_missing_attribute' | 'dictionary_missing_source' | 'dictionary_missing_layout' | 'dictionary_missing_lifetime' | 'dictionary_attribute_default_expression_exclusive' | 'dictionary_range_missing_attribute' | 'dictionary_bidirectional_requires_hierarchical';
|
|
378
|
+
export type ValidationIssueCode = 'kafka_unsupported_clause' | 'kafka_column_default' | 'kafka_missing_setting' | 'kafka_invalid_setting' | 'kafka_change_requires_replacement' | 'column_kind_change_unsupported' | 'duplicate_object_name' | 'duplicate_column_name' | 'duplicate_index_name' | 'text_index_invalid_parameters' | 'duplicate_projection_name' | 'projection_ambiguous_kind' | 'projection_empty_index' | 'primary_key_missing_column' | 'order_by_missing_column' | 'refresh_requires_every_or_after' | 'refresh_every_after_mutually_exclusive' | 'refresh_interval_format' | 'refresh_append_required_for_replicated_target' | 'refresh_depends_on_requires_every' | 'codec_chain_must_end_with_general' | 'codec_chain_multiple_general' | 'codec_chain_empty' | 'column_default_kind_invalid' | 'column_expression_required' | 'column_expression_requires_fn' | 'column_kind_not_stored' | 'column_ephemeral_in_projection' | 'column_kind_codec_unsupported' | 'column_default_looks_like_expression' | 'column_default_invalid' | 'dictionary_missing_primary_key' | 'dictionary_primary_key_missing_attribute' | 'dictionary_missing_source' | 'dictionary_missing_layout' | 'dictionary_missing_lifetime' | 'dictionary_attribute_default_expression_exclusive' | 'dictionary_range_missing_attribute' | 'dictionary_bidirectional_requires_hierarchical' | 'invalid_identifier';
|
|
301
379
|
export interface ValidationIssue {
|
|
302
380
|
code: ValidationIssueCode;
|
|
303
381
|
kind: SchemaDefinition['kind'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-types.d.ts","sourceRoot":"","sources":["../src/model-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,SAAS,GACT,MAAM,GACN,UAAU,GACV,YAAY,CAAA;AAEhB;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpC;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAA;CAAE,CAAA;AAEpD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,wBAAwB,GAAG,cAAc,CAAA;AAExF,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,WAAW,EAAE,CAAA;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"model-types.d.ts","sourceRoot":"","sources":["../src/model-types.ts"],"names":[],"mappings":"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"}
|
package/dist/model.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ChxConfigFn, ChxResolvedConfig, ChxUserConfig, DictionaryDefinition, MaterializedViewDefinition, SchemaDefinition, TableDefinition, ValidationIssue, ViewDefinition } from './model-types.js';
|
|
1
|
+
import type { ChxConfigFn, ChxResolvedConfig, ChxUserConfig, DictionaryDefinition, KafkaTableInput, MaterializedViewDefinition, SchemaDefinition, TableDefinition, TableInput, ValidationIssue, ViewDefinition } from './model-types.js';
|
|
2
2
|
export * from './model-types.js';
|
|
3
3
|
export declare class ChxValidationError extends Error {
|
|
4
4
|
readonly issues: ValidationIssue[];
|
|
@@ -7,7 +7,8 @@ export declare class ChxValidationError extends Error {
|
|
|
7
7
|
export declare function defineConfig<T extends ChxUserConfig>(config: T): T;
|
|
8
8
|
export declare function defineConfig<T extends ChxUserConfig>(config: ChxConfigFn<T>): ChxConfigFn<T>;
|
|
9
9
|
export declare function resolveConfig(config: ChxUserConfig): ChxResolvedConfig;
|
|
10
|
-
export declare function table(input:
|
|
10
|
+
export declare function table(input: KafkaTableInput): TableDefinition;
|
|
11
|
+
export declare function table(input: TableInput): TableDefinition;
|
|
11
12
|
export declare function view(input: Omit<ViewDefinition, 'kind'>): ViewDefinition;
|
|
12
13
|
export declare function materializedView(input: Omit<MaterializedViewDefinition, 'kind'>): MaterializedViewDefinition;
|
|
13
14
|
export declare function dictionary(input: Omit<DictionaryDefinition, 'kind'>): DictionaryDefinition;
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,cAAc,EACf,MAAM,kBAAkB,CAAA;AAEzB,cAAc,kBAAkB,CAAA;AAEhC,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAA;gBAEtB,MAAM,EAAE,eAAe,EAAE;CAOtC;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;AACnE,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAoB7F,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,eAAe,EACf,cAAc,EACf,MAAM,kBAAkB,CAAA;AAEzB,cAAc,kBAAkB,CAAA;AAEhC,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAA;gBAEtB,MAAM,EAAE,eAAe,EAAE;CAOtC;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;AACnE,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAoB7F,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAyCtE;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAAA;AAC9D,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe,CAAA;AAKzD,wBAAgB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,cAAc,CAExE;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,GAC9C,0BAA0B,CAE5B;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,GACxC,oBAAoB,CAEtB;AAED,wBAAgB,MAAM,CAAC,GAAG,WAAW,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAM5E"}
|
package/dist/model.js
CHANGED
|
@@ -26,8 +26,15 @@ export function resolveConfig(config) {
|
|
|
26
26
|
const outDir = config.outDir ?? './chkit';
|
|
27
27
|
const migrationsDir = config.migrationsDir ?? join(outDir, 'migrations');
|
|
28
28
|
const metaDir = config.metaDir ?? join(outDir, 'meta');
|
|
29
|
+
const schemaGlobs = config.schema === undefined ? [] : Array.isArray(config.schema) ? config.schema : [config.schema];
|
|
30
|
+
if (config.entry !== undefined && schemaGlobs.length > 0) {
|
|
31
|
+
throw new Error('Config fields "entry" and "schema" are mutually exclusive. Use one project entry module or schema globs, not both.');
|
|
32
|
+
}
|
|
29
33
|
return {
|
|
30
|
-
|
|
34
|
+
// In entry mode the entry module is the only schema source: its exported
|
|
35
|
+
// definitions are collected exactly like any other schema file.
|
|
36
|
+
schema: config.entry !== undefined ? [config.entry] : schemaGlobs,
|
|
37
|
+
entry: config.entry,
|
|
31
38
|
outDir,
|
|
32
39
|
migrationsDir,
|
|
33
40
|
metaDir,
|
|
@@ -56,7 +63,7 @@ export function resolveConfig(config) {
|
|
|
56
63
|
};
|
|
57
64
|
}
|
|
58
65
|
export function table(input) {
|
|
59
|
-
return { ...input, kind: 'table' };
|
|
66
|
+
return { ...input, primaryKey: input.primaryKey ?? input.orderBy ?? [], orderBy: input.orderBy ?? [], kind: 'table' };
|
|
60
67
|
}
|
|
61
68
|
export function view(input) {
|
|
62
69
|
return { ...input, kind: 'view' };
|
package/dist/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SchemaDefinition } from './model.js';
|
|
2
|
+
/** Definition key → keys of the other definitions in the same set it references. */
|
|
3
|
+
export type DependencyGraph = ReadonlyMap<string, ReadonlySet<string>>;
|
|
4
|
+
/**
|
|
5
|
+
* Edges from every definition to the definitions it reads, restricted to the
|
|
6
|
+
* given set. Expects canonical definitions (`canonicalizeDefinitions`).
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildDependencyGraph(definitions: SchemaDefinition[]): DependencyGraph;
|
|
9
|
+
/**
|
|
10
|
+
* Stable topological order. Items whose prerequisites are all placed keep their
|
|
11
|
+
* input order; an item moves behind every prerequisite found in `items`.
|
|
12
|
+
* Members of a dependency cycle stay together in input order, and whatever
|
|
13
|
+
* depends on the cycle comes after all of them.
|
|
14
|
+
*/
|
|
15
|
+
export declare function orderByDependencies<T>(items: readonly T[], keyOf: (item: T) => string, prerequisitesOf: (key: string) => Iterable<string>): T[];
|
|
16
|
+
/** Reverses every edge: key → keys of the definitions that reference it. */
|
|
17
|
+
export declare function invertDependencyGraph(graph: DependencyGraph): DependencyGraph;
|
|
18
|
+
//# sourceMappingURL=object-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-dependencies.d.ts","sourceRoot":"","sources":["../src/object-dependencies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwB,gBAAgB,EAAmB,MAAM,YAAY,CAAA;AAGzF,oFAAoF;AACpF,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;AA4BtE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,eAAe,CAmBrF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC1B,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,GACjD,CAAC,EAAE,CAgDL;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAQ7E"}
|