@chkit/plugin-backfill 0.1.0-beta.8 → 0.1.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/README.md +130 -0
- package/dist/args.d.ts +17 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +11 -0
- package/dist/args.js.map +1 -1
- package/dist/async-backfill.d.ts +64 -0
- package/dist/async-backfill.d.ts.map +1 -0
- package/dist/async-backfill.js +251 -0
- package/dist/async-backfill.js.map +1 -0
- package/dist/check.d.ts +9 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +79 -0
- package/dist/check.js.map +1 -0
- package/dist/chunking/analyze.d.ts +8 -0
- package/dist/chunking/analyze.d.ts.map +1 -0
- package/dist/chunking/analyze.js +8 -0
- package/dist/chunking/analyze.js.map +1 -0
- package/dist/chunking/boundary-codec.d.ts +4 -0
- package/dist/chunking/boundary-codec.d.ts.map +1 -0
- package/dist/chunking/boundary-codec.js +79 -0
- package/dist/chunking/boundary-codec.js.map +1 -0
- package/dist/chunking/build.d.ts +11 -0
- package/dist/chunking/build.d.ts.map +1 -0
- package/dist/chunking/build.js +51 -0
- package/dist/chunking/build.js.map +1 -0
- package/dist/chunking/e2e/constants.d.ts +2 -0
- package/dist/chunking/e2e/constants.d.ts.map +1 -0
- package/dist/chunking/e2e/constants.js +2 -0
- package/dist/chunking/e2e/constants.js.map +1 -0
- package/dist/chunking/e2e/seed-datasets.script.d.ts +20 -0
- package/dist/chunking/e2e/seed-datasets.script.d.ts.map +1 -0
- package/dist/chunking/e2e/seed-datasets.script.js +134 -0
- package/dist/chunking/e2e/seed-datasets.script.js.map +1 -0
- package/dist/chunking/introspect.d.ts +40 -0
- package/dist/chunking/introspect.d.ts.map +1 -0
- package/dist/chunking/introspect.js +187 -0
- package/dist/chunking/introspect.js.map +1 -0
- package/dist/chunking/partition-slices.d.ts +14 -0
- package/dist/chunking/partition-slices.d.ts.map +1 -0
- package/dist/chunking/partition-slices.js +111 -0
- package/dist/chunking/partition-slices.js.map +1 -0
- package/dist/chunking/planner.d.ts +3 -0
- package/dist/chunking/planner.d.ts.map +1 -0
- package/dist/chunking/planner.js +343 -0
- package/dist/chunking/planner.js.map +1 -0
- package/dist/chunking/services/distribution-source.d.ts +11 -0
- package/dist/chunking/services/distribution-source.d.ts.map +1 -0
- package/dist/chunking/services/distribution-source.js +60 -0
- package/dist/chunking/services/distribution-source.js.map +1 -0
- package/dist/chunking/services/metadata-source.d.ts +4 -0
- package/dist/chunking/services/metadata-source.d.ts.map +1 -0
- package/dist/chunking/services/metadata-source.js +138 -0
- package/dist/chunking/services/metadata-source.js.map +1 -0
- package/dist/chunking/services/row-probe.d.ts +12 -0
- package/dist/chunking/services/row-probe.d.ts.map +1 -0
- package/dist/chunking/services/row-probe.js +49 -0
- package/dist/chunking/services/row-probe.js.map +1 -0
- package/dist/chunking/splitter.d.ts +20 -0
- package/dist/chunking/splitter.d.ts.map +1 -0
- package/dist/chunking/splitter.js +76 -0
- package/dist/chunking/splitter.js.map +1 -0
- package/dist/chunking/sql.d.ts +18 -0
- package/dist/chunking/sql.d.ts.map +1 -0
- package/dist/chunking/sql.js +304 -0
- package/dist/chunking/sql.js.map +1 -0
- package/dist/chunking/strategies/equal-width-split.d.ts +3 -0
- package/dist/chunking/strategies/equal-width-split.d.ts.map +1 -0
- package/dist/chunking/strategies/equal-width-split.js +46 -0
- package/dist/chunking/strategies/equal-width-split.js.map +1 -0
- package/dist/chunking/strategies/group-by-key-split.d.ts +3 -0
- package/dist/chunking/strategies/group-by-key-split.d.ts.map +1 -0
- package/dist/chunking/strategies/group-by-key-split.js +54 -0
- package/dist/chunking/strategies/group-by-key-split.js.map +1 -0
- package/dist/chunking/strategies/metadata-single-chunk.d.ts +3 -0
- package/dist/chunking/strategies/metadata-single-chunk.d.ts.map +1 -0
- package/dist/chunking/strategies/metadata-single-chunk.js +5 -0
- package/dist/chunking/strategies/metadata-single-chunk.js.map +1 -0
- package/dist/chunking/strategies/quantile-range-split.d.ts +5 -0
- package/dist/chunking/strategies/quantile-range-split.d.ts.map +1 -0
- package/dist/chunking/strategies/quantile-range-split.js +132 -0
- package/dist/chunking/strategies/quantile-range-split.js.map +1 -0
- package/dist/chunking/strategies/refinement.d.ts +3 -0
- package/dist/chunking/strategies/refinement.d.ts.map +1 -0
- package/dist/chunking/strategies/refinement.js +61 -0
- package/dist/chunking/strategies/refinement.js.map +1 -0
- package/dist/chunking/strategies/string-prefix-split.d.ts +4 -0
- package/dist/chunking/strategies/string-prefix-split.d.ts.map +1 -0
- package/dist/chunking/strategies/string-prefix-split.js +73 -0
- package/dist/chunking/strategies/string-prefix-split.js.map +1 -0
- package/dist/chunking/strategies/temporal-bucket-split.d.ts +3 -0
- package/dist/chunking/strategies/temporal-bucket-split.d.ts.map +1 -0
- package/dist/chunking/strategies/temporal-bucket-split.js +67 -0
- package/dist/chunking/strategies/temporal-bucket-split.js.map +1 -0
- package/dist/chunking/strategy-policy.d.ts +3 -0
- package/dist/chunking/strategy-policy.d.ts.map +1 -0
- package/dist/chunking/strategy-policy.js +4 -0
- package/dist/chunking/strategy-policy.js.map +1 -0
- package/dist/chunking/types.d.ts +137 -0
- package/dist/chunking/types.d.ts.map +1 -0
- package/dist/chunking/types.js +2 -0
- package/dist/chunking/types.js.map +1 -0
- package/dist/chunking/utils/binary-string.d.ts +8 -0
- package/dist/chunking/utils/binary-string.d.ts.map +1 -0
- package/dist/chunking/utils/binary-string.js +52 -0
- package/dist/chunking/utils/binary-string.js.map +1 -0
- package/dist/chunking/utils/ids.d.ts +4 -0
- package/dist/chunking/utils/ids.d.ts.map +1 -0
- package/dist/chunking/utils/ids.js +11 -0
- package/dist/chunking/utils/ids.js.map +1 -0
- package/dist/chunking/utils/ranges.d.ts +5 -0
- package/dist/chunking/utils/ranges.d.ts.map +1 -0
- package/dist/chunking/utils/ranges.js +19 -0
- package/dist/chunking/utils/ranges.js.map +1 -0
- package/dist/detect.d.ts +8 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +72 -0
- package/dist/detect.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logging.d.ts +12 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +61 -0
- package/dist/logging.js.map +1 -0
- package/dist/options.d.ts +140 -4
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +145 -111
- package/dist/options.js.map +1 -1
- package/dist/payload.d.ts +7 -17
- package/dist/payload.d.ts.map +1 -1
- package/dist/payload.js +7 -19
- package/dist/payload.js.map +1 -1
- package/dist/planner.d.ts +10 -8
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +76 -97
- package/dist/planner.js.map +1 -1
- package/dist/plugin.d.ts +4 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +351 -201
- package/dist/plugin.js.map +1 -1
- package/dist/queries.d.ts +21 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +113 -0
- package/dist/queries.js.map +1 -0
- package/dist/runtime.d.ts +14 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +162 -83
- package/dist/runtime.js.map +1 -1
- package/dist/sdk.d.ts +12 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +9 -0
- package/dist/sdk.js.map +1 -0
- package/dist/state.d.ts +16 -28
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +73 -127
- package/dist/state.js.map +1 -1
- package/dist/table-config.d.ts +9 -0
- package/dist/table-config.d.ts.map +1 -0
- package/dist/table-config.js +2 -0
- package/dist/table-config.js.map +1 -0
- package/dist/types.d.ts +48 -118
- package/dist/types.d.ts.map +1 -1
- package/package.json +25 -2
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export function compareBinaryStrings(left, right) {
|
|
2
|
+
return Buffer.from(left, 'latin1').compare(Buffer.from(right, 'latin1'));
|
|
3
|
+
}
|
|
4
|
+
export function minBinaryString(left, right) {
|
|
5
|
+
return compareBinaryStrings(left, right) <= 0 ? left : right;
|
|
6
|
+
}
|
|
7
|
+
export function maxBinaryString(left, right) {
|
|
8
|
+
return compareBinaryStrings(left, right) >= 0 ? left : right;
|
|
9
|
+
}
|
|
10
|
+
export function nextPrefixValue(prefix) {
|
|
11
|
+
if (prefix.length === 0)
|
|
12
|
+
return undefined;
|
|
13
|
+
const buffer = Buffer.from(prefix, 'latin1');
|
|
14
|
+
for (let index = buffer.length - 1; index >= 0; index--) {
|
|
15
|
+
const byte = buffer[index];
|
|
16
|
+
if (byte === undefined || byte === 0xff)
|
|
17
|
+
continue;
|
|
18
|
+
const next = Buffer.from(buffer.subarray(0, index + 1));
|
|
19
|
+
next[index] = byte + 1;
|
|
20
|
+
return next.toString('latin1');
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
export function buildObservedStringUpperBound(maxValue) {
|
|
25
|
+
return `${maxValue}\0`;
|
|
26
|
+
}
|
|
27
|
+
export function strToBigInt(value, padTo) {
|
|
28
|
+
const buffer = Buffer.from(value, 'latin1');
|
|
29
|
+
let result = 0n;
|
|
30
|
+
for (let index = 0; index < padTo; index++) {
|
|
31
|
+
const byte = index < buffer.length ? (buffer[index] ?? 0) : 0;
|
|
32
|
+
result = (result << 8n) | BigInt(byte);
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
export function bigIntToStr(value, length, minLength = 0) {
|
|
37
|
+
const buffer = Buffer.alloc(length);
|
|
38
|
+
let remaining = value;
|
|
39
|
+
for (let index = length - 1; index >= 0; index--) {
|
|
40
|
+
buffer[index] = Number(remaining & 0xffn);
|
|
41
|
+
remaining >>= 8n;
|
|
42
|
+
}
|
|
43
|
+
// Strip trailing null bytes so boundaries match real string values
|
|
44
|
+
// in ClickHouse comparisons (where "abc" < "abc\0"), but preserve
|
|
45
|
+
// at least minLength bytes to avoid losing meaningful trailing nulls
|
|
46
|
+
// (e.g. from buildObservedStringUpperBound which appends "\0").
|
|
47
|
+
let end = length;
|
|
48
|
+
while (end > minLength && buffer[end - 1] === 0)
|
|
49
|
+
end--;
|
|
50
|
+
return buffer.subarray(0, end).toString('latin1');
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=binary-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-string.js","sourceRoot":"","sources":["../../../src/chunking/utils/binary-string.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,KAAa;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,OAAO,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,OAAO,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAEzC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC5C,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;YAAE,SAAQ;QAEjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,CAAA;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAChC,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,QAAgB;IAC5D,OAAO,GAAG,QAAQ,IAAI,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,KAAa;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7D,MAAM,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,MAAc,EAAE,SAAS,GAAG,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACnC,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,KAAK,IAAI,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,CAAA;QACzC,SAAS,KAAK,EAAE,CAAA;IAClB,CAAC;IAED,mEAAmE;IACnE,kEAAkE;IAClE,qEAAqE;IACrE,gEAAgE;IAChE,IAAI,GAAG,GAAG,MAAM,CAAA;IAChB,OAAO,GAAG,GAAG,SAAS,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,CAAA;IAEtD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACnD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function generatePlanId(): string;
|
|
2
|
+
export declare function generateChunkId(planId: string, partitionId: string, index: number): string;
|
|
3
|
+
export declare function generateIdempotencyToken(planId: string, chunkId: string): string;
|
|
4
|
+
//# sourceMappingURL=ids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../../src/chunking/utils/ids.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { hashId, randomPlanId } from '../../state.js';
|
|
2
|
+
export function generatePlanId() {
|
|
3
|
+
return randomPlanId();
|
|
4
|
+
}
|
|
5
|
+
export function generateChunkId(planId, partitionId, index) {
|
|
6
|
+
return hashId(`chunk:${planId}:${partitionId}:${index}`).slice(0, 16);
|
|
7
|
+
}
|
|
8
|
+
export function generateIdempotencyToken(planId, chunkId) {
|
|
9
|
+
return hashId(`token:${planId}:${chunkId}`);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../../../src/chunking/utils/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAErD,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,EAAE,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,WAAmB,EACnB,KAAa;IAEb,OAAO,MAAM,CAAC,SAAS,MAAM,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACvE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAc,EAAE,OAAe;IACtE,OAAO,MAAM,CAAC,SAAS,MAAM,IAAI,OAAO,EAAE,CAAC,CAAA;AAC7C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ChunkRange, PartitionSlice } from '../types.js';
|
|
2
|
+
export declare function getChunkRange(slice: Pick<PartitionSlice, 'ranges'>, dimensionIndex: number): ChunkRange;
|
|
3
|
+
export declare function replaceChunkRange(slice: Pick<PartitionSlice, 'ranges'>, dimensionIndex: number, from: string | undefined, to: string | undefined): ChunkRange[];
|
|
4
|
+
export declare function isExactChunkRange(range: Pick<ChunkRange, 'from' | 'to'>): boolean;
|
|
5
|
+
//# sourceMappingURL=ranges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranges.d.ts","sourceRoot":"","sources":["../../../src/chunking/utils/ranges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE7D,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EACrC,cAAc,EAAE,MAAM,GACrB,UAAU,CAQZ;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,EACrC,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,UAAU,EAAE,CAKd;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAGjF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function getChunkRange(slice, dimensionIndex) {
|
|
2
|
+
return (slice.ranges.find((range) => range.dimensionIndex === dimensionIndex) ?? {
|
|
3
|
+
dimensionIndex,
|
|
4
|
+
from: undefined,
|
|
5
|
+
to: undefined,
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
export function replaceChunkRange(slice, dimensionIndex, from, to) {
|
|
9
|
+
return slice.ranges
|
|
10
|
+
.filter((range) => range.dimensionIndex !== dimensionIndex)
|
|
11
|
+
.concat([{ dimensionIndex, from, to }])
|
|
12
|
+
.sort((left, right) => left.dimensionIndex - right.dimensionIndex);
|
|
13
|
+
}
|
|
14
|
+
export function isExactChunkRange(range) {
|
|
15
|
+
if (range.from === undefined || range.to === undefined)
|
|
16
|
+
return false;
|
|
17
|
+
return range.to === `${range.from}\0`;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ranges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranges.js","sourceRoot":"","sources":["../../../src/chunking/utils/ranges.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAC3B,KAAqC,EACrC,cAAsB;IAEtB,OAAO,CACL,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,KAAK,cAAc,CAAC,IAAI;QACvE,cAAc;QACd,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,SAAS;KACd,CACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAqC,EACrC,cAAsB,EACtB,IAAwB,EACxB,EAAsB;IAEtB,OAAO,KAAK,CAAC,MAAM;SAChB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,KAAK,cAAc,CAAC;SAC1D,MAAM,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;SACtC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAsC;IACtE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACpE,OAAO,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,CAAA;AACvC,CAAC"}
|
package/dist/detect.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MaterializedViewDefinition, SchemaDefinition, TableDefinition } from '@chkit/core';
|
|
2
|
+
import './table-config.js';
|
|
3
|
+
import type { TimeColumnCandidate } from './types.js';
|
|
4
|
+
export declare function findMvForTarget(definitions: SchemaDefinition[], database: string, table: string): MaterializedViewDefinition | undefined;
|
|
5
|
+
export declare function findTableForTarget(definitions: SchemaDefinition[], database: string, table: string): TableDefinition | undefined;
|
|
6
|
+
export declare function detectCandidatesFromTable(table: TableDefinition): TimeColumnCandidate[];
|
|
7
|
+
export declare function extractSchemaTimeColumn(table: TableDefinition): string | undefined;
|
|
8
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAEhG,OAAO,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAoBrD,wBAAgB,eAAe,CAC7B,WAAW,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,0BAA0B,GAAG,SAAS,CAWxC;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,eAAe,GAAG,SAAS,CAsB7B;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,GAAG,mBAAmB,EAAE,CAqBvF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAElF"}
|
package/dist/detect.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import './table-config.js';
|
|
2
|
+
const DATETIME_TYPES = new Set(['DateTime', 'DateTime64']);
|
|
3
|
+
const COMMON_TIME_COLUMN_NAMES = new Set([
|
|
4
|
+
'created_at',
|
|
5
|
+
'timestamp',
|
|
6
|
+
'ingested_at',
|
|
7
|
+
'event_time',
|
|
8
|
+
'event_at',
|
|
9
|
+
'occurred_at',
|
|
10
|
+
]);
|
|
11
|
+
function isDateTimeType(type) {
|
|
12
|
+
if (DATETIME_TYPES.has(type))
|
|
13
|
+
return true;
|
|
14
|
+
if (type.startsWith('DateTime64('))
|
|
15
|
+
return true;
|
|
16
|
+
if (type.startsWith("DateTime('"))
|
|
17
|
+
return true;
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
export function findMvForTarget(definitions, database, table) {
|
|
21
|
+
for (const def of definitions) {
|
|
22
|
+
if (def.kind === 'materialized_view' &&
|
|
23
|
+
def.to.database === database &&
|
|
24
|
+
def.to.name === table) {
|
|
25
|
+
return def;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
export function findTableForTarget(definitions, database, table) {
|
|
31
|
+
for (const def of definitions) {
|
|
32
|
+
if (def.kind === 'table' && def.database === database && def.name === table) {
|
|
33
|
+
return def;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
for (const def of definitions) {
|
|
37
|
+
if (def.kind === 'materialized_view' &&
|
|
38
|
+
def.to.database === database &&
|
|
39
|
+
def.to.name === table) {
|
|
40
|
+
for (const sourceDef of definitions) {
|
|
41
|
+
if (sourceDef.kind === 'table' && sourceDef.database === def.database) {
|
|
42
|
+
return sourceDef;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
export function detectCandidatesFromTable(table) {
|
|
50
|
+
const candidates = [];
|
|
51
|
+
const seen = new Set();
|
|
52
|
+
const orderByColumns = new Set(table.orderBy);
|
|
53
|
+
for (const col of table.columns) {
|
|
54
|
+
if (orderByColumns.has(col.name) && isDateTimeType(col.type)) {
|
|
55
|
+
candidates.push({ name: col.name, type: col.type, source: 'order_by' });
|
|
56
|
+
seen.add(col.name);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
for (const col of table.columns) {
|
|
60
|
+
if (seen.has(col.name))
|
|
61
|
+
continue;
|
|
62
|
+
if (COMMON_TIME_COLUMN_NAMES.has(col.name) && isDateTimeType(col.type)) {
|
|
63
|
+
candidates.push({ name: col.name, type: col.type, source: 'column_scan' });
|
|
64
|
+
seen.add(col.name);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return candidates;
|
|
68
|
+
}
|
|
69
|
+
export function extractSchemaTimeColumn(table) {
|
|
70
|
+
return table.plugins?.backfill?.timeColumn;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAEA,OAAO,mBAAmB,CAAA;AAG1B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;AAE1D,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,YAAY;IACZ,WAAW;IACX,aAAa;IACb,YAAY;IACZ,UAAU;IACV,aAAa;CACd,CAAC,CAAA;AAEF,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACzC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9C,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,WAA+B,EAC/B,QAAgB,EAChB,KAAa;IAEb,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IACE,GAAG,CAAC,IAAI,KAAK,mBAAmB;YAChC,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ;YAC5B,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,EACrB,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,WAA+B,EAC/B,QAAgB,EAChB,KAAa;IAEb,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC5E,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IACE,GAAG,CAAC,IAAI,KAAK,mBAAmB;YAChC,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ;YAC5B,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,EACrB,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;gBACpC,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACtE,OAAO,SAAS,CAAA;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAsB;IAC9D,MAAM,UAAU,GAA0B,EAAE,CAAA;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAE9B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC7C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;YACvE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAQ;QAChC,IAAI,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;YAC1E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAsB;IAC5D,OAAO,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAA;AAC5C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import './table-config.js';
|
|
1
2
|
export { backfill, createBackfillPlugin } from './plugin.js';
|
|
2
3
|
export type { BackfillPlugin, BackfillPluginOptions, BackfillPluginRegistration } from './types.js';
|
|
4
|
+
export type { PluginConfig } from './options.js';
|
|
5
|
+
export type { BackfillTableConfig } from './table-config.js';
|
|
3
6
|
//# 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,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAC5D,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAC5D,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AACnG,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Logger } from '@logtape/logtape';
|
|
2
|
+
export declare const CHKIT_LOGGER_CATEGORY: readonly ["chkit"];
|
|
3
|
+
export declare const CHKIT_BACKFILL_LOGGER_CATEGORY: readonly ["chkit", "backfill"];
|
|
4
|
+
export declare const SLOW_CLICKHOUSE_QUERY_MS = 5000;
|
|
5
|
+
export declare const SLOW_CLICKHOUSE_QUERY_REPEAT_INITIAL_MS = 5000;
|
|
6
|
+
export declare const SLOW_CLICKHOUSE_QUERY_REPEAT_MAX_MS = 30000;
|
|
7
|
+
export declare function getBackfillLogger(...segments: string[]): Logger;
|
|
8
|
+
export declare function formatBytes(bytes: number): string;
|
|
9
|
+
export declare function summarizeSql(sql: string, maxLength?: number): string;
|
|
10
|
+
export declare function describeSqlOperation(sql: string): string;
|
|
11
|
+
export declare function describeSqlContext(sql: string): string | undefined;
|
|
12
|
+
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzD,eAAO,MAAM,qBAAqB,oBAAqB,CAAA;AACvD,eAAO,MAAM,8BAA8B,gCAAkD,CAAA;AAC7F,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAC5C,eAAO,MAAM,uCAAuC,OAAO,CAAA;AAC3D,eAAO,MAAM,mCAAmC,QAAQ,CAAA;AAExD,wBAAgB,iBAAiB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAE/D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAIjE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBxD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMlE"}
|
package/dist/logging.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { getLogger } from '@logtape/logtape';
|
|
2
|
+
export const CHKIT_LOGGER_CATEGORY = ['chkit'];
|
|
3
|
+
export const CHKIT_BACKFILL_LOGGER_CATEGORY = [...CHKIT_LOGGER_CATEGORY, 'backfill'];
|
|
4
|
+
export const SLOW_CLICKHOUSE_QUERY_MS = 5000;
|
|
5
|
+
export const SLOW_CLICKHOUSE_QUERY_REPEAT_INITIAL_MS = 5000;
|
|
6
|
+
export const SLOW_CLICKHOUSE_QUERY_REPEAT_MAX_MS = 30000;
|
|
7
|
+
export function getBackfillLogger(...segments) {
|
|
8
|
+
return getLogger([...CHKIT_BACKFILL_LOGGER_CATEGORY, ...segments]);
|
|
9
|
+
}
|
|
10
|
+
export function formatBytes(bytes) {
|
|
11
|
+
if (bytes >= 1024 ** 4)
|
|
12
|
+
return `${(bytes / 1024 ** 4).toFixed(1)} TiB`;
|
|
13
|
+
if (bytes >= 1024 ** 3)
|
|
14
|
+
return `${(bytes / 1024 ** 3).toFixed(1)} GiB`;
|
|
15
|
+
if (bytes >= 1024 ** 2)
|
|
16
|
+
return `${(bytes / 1024 ** 2).toFixed(1)} MiB`;
|
|
17
|
+
if (bytes >= 1024)
|
|
18
|
+
return `${(bytes / 1024).toFixed(1)} KiB`;
|
|
19
|
+
return `${bytes} B`;
|
|
20
|
+
}
|
|
21
|
+
export function summarizeSql(sql, maxLength = 240) {
|
|
22
|
+
const normalized = normalizeSql(sql);
|
|
23
|
+
if (normalized.length <= maxLength)
|
|
24
|
+
return normalized;
|
|
25
|
+
return `${normalized.slice(0, maxLength - 3)}...`;
|
|
26
|
+
}
|
|
27
|
+
export function describeSqlOperation(sql) {
|
|
28
|
+
const normalized = normalizeSql(sql);
|
|
29
|
+
const prefixDistribution = normalized.match(/^SELECT substring\((\w+), 1, \d+\) AS prefix, count\(\) AS cnt /);
|
|
30
|
+
if (prefixDistribution?.[1])
|
|
31
|
+
return `prefix distribution on ${prefixDistribution[1]}`;
|
|
32
|
+
const temporalDistribution = normalized.match(/^SELECT formatDateTime\(toStartOf(Day|Hour)\((\w+)\)/);
|
|
33
|
+
if (temporalDistribution?.[1] && temporalDistribution[2]) {
|
|
34
|
+
return `${temporalDistribution[1].toLowerCase()} distribution on ${temporalDistribution[2]}`;
|
|
35
|
+
}
|
|
36
|
+
const minMaxProbe = normalized.match(/^SELECT toString\(min\((\w+)\)\) AS minVal, toString\(max\(\1\)\) AS maxVal /);
|
|
37
|
+
if (minMaxProbe?.[1])
|
|
38
|
+
return `range probe on ${minMaxProbe[1]}`;
|
|
39
|
+
if (normalized.startsWith('SELECT count() AS cnt FROM '))
|
|
40
|
+
return 'row count probe';
|
|
41
|
+
if (normalized.startsWith('SELECT sorting_key FROM system.tables'))
|
|
42
|
+
return 'sort key introspection';
|
|
43
|
+
if (normalized.startsWith('SELECT name, type FROM system.columns'))
|
|
44
|
+
return 'column introspection';
|
|
45
|
+
if (normalized.startsWith('SELECT partition_id,'))
|
|
46
|
+
return 'partition introspection';
|
|
47
|
+
if (normalized.startsWith('SELECT 1 FROM '))
|
|
48
|
+
return 'table existence probe';
|
|
49
|
+
return summarizeSql(normalized, 100);
|
|
50
|
+
}
|
|
51
|
+
export function describeSqlContext(sql) {
|
|
52
|
+
const normalized = normalizeSql(sql);
|
|
53
|
+
const partitionId = normalized.match(/_partition_id = '([^']+)'/)?.[1];
|
|
54
|
+
if (partitionId)
|
|
55
|
+
return `partition ${partitionId}`;
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
function normalizeSql(sql) {
|
|
59
|
+
return sql.replace(/\s+/g, ' ').trim();
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"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"}
|
package/dist/options.d.ts
CHANGED
|
@@ -1,5 +1,141 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
4
|
-
export declare
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type FlagMapping } from '@chkit/core';
|
|
3
|
+
export declare function parseByteSize(raw: string): number;
|
|
4
|
+
export declare const PluginConfigSchema: z.ZodObject<{
|
|
5
|
+
maxChunkBytes: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
maxRetriesPerChunk: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
retryDelayMs: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
maxParallelChunks: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
requireIdempotencyToken: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
chunkHours: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
timeColumn: z.ZodOptional<z.ZodString>;
|
|
12
|
+
requireDryRunBeforeRun: z.ZodOptional<z.ZodBoolean>;
|
|
13
|
+
requireExplicitWindow: z.ZodOptional<z.ZodBoolean>;
|
|
14
|
+
blockOverlappingRuns: z.ZodOptional<z.ZodBoolean>;
|
|
15
|
+
failCheckOnRequiredPendingBackfill: z.ZodOptional<z.ZodBoolean>;
|
|
16
|
+
maxWindowHours: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
minChunkMinutes: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
stateDir: z.ZodOptional<z.ZodString>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export type PluginConfig = z.input<typeof PluginConfigSchema>;
|
|
21
|
+
export declare const PlanSchema: z.ZodObject<{
|
|
22
|
+
target: z.ZodString;
|
|
23
|
+
from: z.ZodOptional<z.ZodString>;
|
|
24
|
+
to: z.ZodOptional<z.ZodString>;
|
|
25
|
+
maxChunkBytes: z.ZodDefault<z.ZodNumber>;
|
|
26
|
+
maxParallelChunks: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
maxRetriesPerChunk: z.ZodDefault<z.ZodNumber>;
|
|
28
|
+
requireIdempotencyToken: z.ZodDefault<z.ZodBoolean>;
|
|
29
|
+
requireExplicitWindow: z.ZodDefault<z.ZodBoolean>;
|
|
30
|
+
blockOverlappingRuns: z.ZodDefault<z.ZodBoolean>;
|
|
31
|
+
requireDryRunBeforeRun: z.ZodDefault<z.ZodBoolean>;
|
|
32
|
+
failCheckOnRequiredPendingBackfill: z.ZodDefault<z.ZodBoolean>;
|
|
33
|
+
maxWindowHours: z.ZodDefault<z.ZodNumber>;
|
|
34
|
+
minChunkMinutes: z.ZodDefault<z.ZodNumber>;
|
|
35
|
+
chunkHours: z.ZodOptional<z.ZodNumber>;
|
|
36
|
+
timeColumn: z.ZodOptional<z.ZodString>;
|
|
37
|
+
stateDir: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
export type PlanOptions = z.infer<typeof PlanSchema>;
|
|
40
|
+
export declare const RunSchema: z.ZodObject<{
|
|
41
|
+
planId: z.ZodString;
|
|
42
|
+
forceEnvironment: z.ZodDefault<z.ZodBoolean>;
|
|
43
|
+
concurrency: z.ZodDefault<z.ZodNumber>;
|
|
44
|
+
pollIntervalMs: z.ZodDefault<z.ZodNumber>;
|
|
45
|
+
stateDir: z.ZodOptional<z.ZodString>;
|
|
46
|
+
}, z.core.$strip>;
|
|
47
|
+
export type RunOptions = z.infer<typeof RunSchema>;
|
|
48
|
+
export declare const ResumeSchema: z.ZodObject<{
|
|
49
|
+
planId: z.ZodString;
|
|
50
|
+
forceEnvironment: z.ZodDefault<z.ZodBoolean>;
|
|
51
|
+
concurrency: z.ZodDefault<z.ZodNumber>;
|
|
52
|
+
pollIntervalMs: z.ZodDefault<z.ZodNumber>;
|
|
53
|
+
stateDir: z.ZodOptional<z.ZodString>;
|
|
54
|
+
replayFailed: z.ZodDefault<z.ZodBoolean>;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
export type ResumeOptions = z.infer<typeof ResumeSchema>;
|
|
57
|
+
export declare const StatusSchema: z.ZodObject<{
|
|
58
|
+
planId: z.ZodString;
|
|
59
|
+
stateDir: z.ZodOptional<z.ZodString>;
|
|
60
|
+
}, z.core.$strip>;
|
|
61
|
+
export type StatusOptions = z.infer<typeof StatusSchema>;
|
|
62
|
+
export declare const CheckSchema: z.ZodObject<{
|
|
63
|
+
stateDir: z.ZodOptional<z.ZodString>;
|
|
64
|
+
failCheckOnRequiredPendingBackfill: z.ZodDefault<z.ZodBoolean>;
|
|
65
|
+
}, z.core.$strip>;
|
|
66
|
+
export declare const PLAN_FLAGS: readonly [{
|
|
67
|
+
readonly name: "--target";
|
|
68
|
+
readonly type: "string";
|
|
69
|
+
readonly description: "Target table (database.table)";
|
|
70
|
+
readonly placeholder: "<database.table>";
|
|
71
|
+
}, {
|
|
72
|
+
readonly name: "--from";
|
|
73
|
+
readonly type: "string";
|
|
74
|
+
readonly description: "Filter partitions starting from timestamp";
|
|
75
|
+
readonly placeholder: "<timestamp>";
|
|
76
|
+
}, {
|
|
77
|
+
readonly name: "--to";
|
|
78
|
+
readonly type: "string";
|
|
79
|
+
readonly description: "Filter partitions up to timestamp";
|
|
80
|
+
readonly placeholder: "<timestamp>";
|
|
81
|
+
}, {
|
|
82
|
+
readonly name: "--max-chunk-bytes";
|
|
83
|
+
readonly type: "string";
|
|
84
|
+
readonly description: "Max bytes per chunk (e.g. 10G, 500M)";
|
|
85
|
+
readonly placeholder: "<bytes>";
|
|
86
|
+
}];
|
|
87
|
+
export declare const RUN_FLAGS: readonly [{
|
|
88
|
+
readonly name: "--plan-id";
|
|
89
|
+
readonly type: "string";
|
|
90
|
+
readonly description: "Plan ID to execute";
|
|
91
|
+
readonly placeholder: "<id>";
|
|
92
|
+
}, {
|
|
93
|
+
readonly name: "--force-environment";
|
|
94
|
+
readonly type: "boolean";
|
|
95
|
+
readonly description: "Skip environment mismatch checks";
|
|
96
|
+
}, {
|
|
97
|
+
readonly name: "--concurrency";
|
|
98
|
+
readonly type: "string";
|
|
99
|
+
readonly description: "Max concurrent async queries";
|
|
100
|
+
readonly placeholder: "<n>";
|
|
101
|
+
}, {
|
|
102
|
+
readonly name: "--poll-interval";
|
|
103
|
+
readonly type: "string";
|
|
104
|
+
readonly description: "Polling interval in ms";
|
|
105
|
+
readonly placeholder: "<ms>";
|
|
106
|
+
}];
|
|
107
|
+
export declare const RESUME_FLAGS: readonly [{
|
|
108
|
+
readonly name: "--plan-id";
|
|
109
|
+
readonly type: "string";
|
|
110
|
+
readonly description: "Plan ID to resume";
|
|
111
|
+
readonly placeholder: "<id>";
|
|
112
|
+
}, {
|
|
113
|
+
readonly name: "--force-environment";
|
|
114
|
+
readonly type: "boolean";
|
|
115
|
+
readonly description: "Skip environment mismatch checks";
|
|
116
|
+
}, {
|
|
117
|
+
readonly name: "--concurrency";
|
|
118
|
+
readonly type: "string";
|
|
119
|
+
readonly description: "Max concurrent async queries";
|
|
120
|
+
readonly placeholder: "<n>";
|
|
121
|
+
}, {
|
|
122
|
+
readonly name: "--poll-interval";
|
|
123
|
+
readonly type: "string";
|
|
124
|
+
readonly description: "Polling interval in ms";
|
|
125
|
+
readonly placeholder: "<ms>";
|
|
126
|
+
}, {
|
|
127
|
+
readonly name: "--replay-failed";
|
|
128
|
+
readonly type: "boolean";
|
|
129
|
+
readonly description: "Re-execute failed chunks";
|
|
130
|
+
}];
|
|
131
|
+
export declare const PLAN_ID_FLAGS: readonly [{
|
|
132
|
+
readonly name: "--plan-id";
|
|
133
|
+
readonly type: "string";
|
|
134
|
+
readonly description: "Plan ID";
|
|
135
|
+
readonly placeholder: "<id>";
|
|
136
|
+
}];
|
|
137
|
+
export declare const PLAN_FLAG_MAP: FlagMapping;
|
|
138
|
+
export declare const RUN_FLAG_MAP: FlagMapping;
|
|
139
|
+
export declare const RESUME_FLAG_MAP: FlagMapping;
|
|
140
|
+
export declare const PLAN_ID_FLAG_MAP: FlagMapping;
|
|
5
141
|
//# sourceMappingURL=options.d.ts.map
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAmC3D,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAcD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;iBAe7B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAI7D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;iBAiBrB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEpD,eAAO,MAAM,SAAS;;;;;;iBAMpB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAElD,eAAO,MAAM,YAAY;;;;;;;iBAEvB,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAExD,eAAO,MAAM,YAAY;;;iBAGvB,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAExD,eAAO,MAAM,WAAW;;;iBAGtB,CAAA;AAIF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;EAKZ,CAAA;AAEX,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;EAKX,CAAA;AAEX,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;EAMd,CAAA;AAEX,eAAO,MAAM,aAAa;;;;;EAEf,CAAA;AAIX,eAAO,MAAM,aAAa,EAAE,WAK3B,CAAA;AAUD,eAAO,MAAM,YAAY,EAAE,WAK1B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,WAM7B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,WAE9B,CAAA"}
|