@chkit/plugin-backfill 0.1.0-beta.2 → 0.1.0-beta.20
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 +40 -0
- package/dist/args.d.ts +109 -6
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +73 -97
- 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 +38 -0
- package/dist/chunking/analyze.d.ts.map +1 -0
- package/dist/chunking/analyze.js +76 -0
- package/dist/chunking/analyze.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/introspect.d.ts +34 -0
- package/dist/chunking/introspect.d.ts.map +1 -0
- package/dist/chunking/introspect.js +96 -0
- package/dist/chunking/introspect.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 +12 -0
- package/dist/chunking/sql.d.ts.map +1 -0
- package/dist/chunking/sql.js +221 -0
- package/dist/chunking/sql.js.map +1 -0
- package/dist/chunking/types.d.ts +29 -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/detect.d.ts +13 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +113 -0
- package/dist/detect.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts +151 -4
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +161 -109
- 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 +8 -18
- package/dist/payload.js.map +1 -1
- package/dist/planner.d.ts +9 -8
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +92 -92
- 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 +295 -215
- 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/state.d.ts +16 -28
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +59 -124
- 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 +50 -103
- package/dist/types.d.ts.map +1 -1
- package/package.json +23 -2
package/dist/payload.js
CHANGED
|
@@ -7,22 +7,14 @@ export function planPayload(output) {
|
|
|
7
7
|
from: output.plan.from,
|
|
8
8
|
to: output.plan.to,
|
|
9
9
|
chunkCount: output.plan.chunks.length,
|
|
10
|
-
|
|
10
|
+
maxChunkBytes: output.plan.options.maxChunkBytes,
|
|
11
|
+
sortKeyColumn: output.plan.options.sortKeyColumn,
|
|
11
12
|
planPath: output.planPath,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
ok: output.status.status === 'completed',
|
|
18
|
-
command: 'run',
|
|
19
|
-
planId: output.run.planId,
|
|
20
|
-
status: output.status.status,
|
|
21
|
-
chunkCounts: output.status.totals,
|
|
22
|
-
attempts: output.status.attempts,
|
|
23
|
-
runPath: output.runPath,
|
|
24
|
-
eventPath: output.eventPath,
|
|
25
|
-
lastError: output.status.lastError,
|
|
13
|
+
strategy: output.plan.strategy,
|
|
14
|
+
partitionCount: output.plan.partitions?.length,
|
|
15
|
+
totalBytes: output.plan.partitions
|
|
16
|
+
? output.plan.partitions.reduce((sum, p) => sum + p.bytesOnDisk, 0)
|
|
17
|
+
: undefined,
|
|
26
18
|
};
|
|
27
19
|
}
|
|
28
20
|
export function statusPayload(summary) {
|
|
@@ -32,9 +24,8 @@ export function statusPayload(summary) {
|
|
|
32
24
|
planId: summary.planId,
|
|
33
25
|
status: summary.status,
|
|
34
26
|
chunkCounts: summary.totals,
|
|
35
|
-
|
|
27
|
+
rowsWritten: summary.rowsWritten,
|
|
36
28
|
runPath: summary.runPath,
|
|
37
|
-
eventPath: summary.eventPath,
|
|
38
29
|
updatedAt: summary.updatedAt,
|
|
39
30
|
lastError: summary.lastError,
|
|
40
31
|
};
|
|
@@ -47,7 +38,6 @@ export function cancelPayload(summary) {
|
|
|
47
38
|
status: summary.status,
|
|
48
39
|
chunkCounts: summary.totals,
|
|
49
40
|
runPath: summary.runPath,
|
|
50
|
-
eventPath: summary.eventPath,
|
|
51
41
|
};
|
|
52
42
|
}
|
|
53
43
|
export function doctorPayload(report) {
|
package/dist/payload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../src/payload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../src/payload.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,WAAW,CAAC,MAA+B;IAezD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;QAC1B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;QAC1B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;QACtB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QAClB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;QACrC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;QAChD,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;QAChD,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM;QAC9C,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACnE,CAAC,CAAC,SAAS;KACd,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAA8B;IAW1D,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,QAAQ;QAC/B,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAA8B;IAQ1D,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,WAAW;QAClC,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA4B;IASxD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAClC,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAA;AACH,CAAC"}
|
package/dist/planner.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { ResolvedChxConfig } from '@chkit/core';
|
|
2
|
-
import type {
|
|
2
|
+
import type { PlanOptions } from './options.js';
|
|
3
|
+
import type { BuildBackfillPlanOutput } from './types.js';
|
|
3
4
|
export declare function buildBackfillPlan(input: {
|
|
4
|
-
|
|
5
|
-
from: string;
|
|
6
|
-
to: string;
|
|
5
|
+
opts: PlanOptions;
|
|
7
6
|
configPath: string;
|
|
8
|
-
config: Pick<ResolvedChxConfig, 'metaDir'>;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
config: Pick<ResolvedChxConfig, 'metaDir' | 'schema'>;
|
|
8
|
+
clickhouse?: {
|
|
9
|
+
url: string;
|
|
10
|
+
database: string;
|
|
11
|
+
};
|
|
12
|
+
clickhouseQuery: <T>(sql: string) => Promise<T[]>;
|
|
12
13
|
}): Promise<BuildBackfillPlanOutput>;
|
|
13
14
|
//# sourceMappingURL=planner.d.ts.map
|
package/dist/planner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAMpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAO/C,OAAO,KAAK,EAEV,uBAAuB,EAExB,MAAM,YAAY,CAAA;AAEnB,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,IAAI,EAAE,WAAW,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAA;IACrD,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,eAAe,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;CAClD,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAwHnC"}
|
package/dist/planner.js
CHANGED
|
@@ -1,113 +1,113 @@
|
|
|
1
|
+
import { dirname } from 'node:path';
|
|
2
|
+
import { loadSchemaDefinitions } from '@chkit/core/schema-loader';
|
|
3
|
+
import { analyzeAndChunk } from './chunking/analyze.js';
|
|
4
|
+
import { buildChunkSql } from './chunking/sql.js';
|
|
5
|
+
import { findMvForTarget } from './detect.js';
|
|
1
6
|
import { BackfillConfigError } from './errors.js';
|
|
2
|
-
import { backfillPaths, computeBackfillStateDir,
|
|
3
|
-
function
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
if (
|
|
7
|
-
throw new BackfillConfigError('Invalid
|
|
7
|
+
import { backfillPaths, computeBackfillStateDir, computeEnvironmentFingerprint, writeJson, } from './state.js';
|
|
8
|
+
export async function buildBackfillPlan(input) {
|
|
9
|
+
const { opts } = input;
|
|
10
|
+
const [database, table] = opts.target.split('.');
|
|
11
|
+
if (!database || !table) {
|
|
12
|
+
throw new BackfillConfigError('Invalid target format. Expected <database.table>.');
|
|
8
13
|
}
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
const env = computeEnvironmentFingerprint(input.clickhouse);
|
|
15
|
+
// 1. Analyze table and build planned chunks
|
|
16
|
+
const { planId, partitions, sortKey, chunks: plannedChunks } = await analyzeAndChunk({
|
|
17
|
+
database,
|
|
18
|
+
table,
|
|
19
|
+
from: opts.from,
|
|
20
|
+
to: opts.to,
|
|
21
|
+
maxChunkBytes: opts.maxChunkBytes,
|
|
22
|
+
requireIdempotencyToken: opts.requireIdempotencyToken,
|
|
23
|
+
query: input.clickhouseQuery,
|
|
24
|
+
});
|
|
25
|
+
if (partitions.length === 0) {
|
|
26
|
+
throw new BackfillConfigError(`No partitions found for ${opts.target}${opts.from || opts.to ? ' within the specified time range' : ''}. The table may be empty.`);
|
|
12
27
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
function buildChunks(input) {
|
|
25
|
-
const fromMillis = new Date(input.from).getTime();
|
|
26
|
-
const toMillis = new Date(input.to).getTime();
|
|
27
|
-
const chunkMillis = input.chunkHours * 60 * 60 * 1000;
|
|
28
|
-
const chunks = [];
|
|
29
|
-
let current = fromMillis;
|
|
30
|
-
while (current < toMillis) {
|
|
31
|
-
const next = Math.min(current + chunkMillis, toMillis);
|
|
32
|
-
const chunkFrom = new Date(current).toISOString();
|
|
33
|
-
const chunkTo = new Date(next).toISOString();
|
|
34
|
-
const idSeed = `${input.planId}:${chunkFrom}:${chunkTo}`;
|
|
35
|
-
const chunkId = hashId(`chunk:${idSeed}`).slice(0, 16);
|
|
36
|
-
const token = input.requireIdempotencyToken ? hashId(`token:${idSeed}`) : '';
|
|
37
|
-
chunks.push({
|
|
38
|
-
id: chunkId,
|
|
39
|
-
from: chunkFrom,
|
|
40
|
-
to: chunkTo,
|
|
41
|
-
status: 'pending',
|
|
42
|
-
attempts: 0,
|
|
43
|
-
idempotencyToken: token,
|
|
44
|
-
sqlTemplate: buildChunkSqlTemplate({
|
|
45
|
-
planId: input.planId,
|
|
46
|
-
chunkId,
|
|
47
|
-
token,
|
|
48
|
-
target: input.target,
|
|
49
|
-
from: chunkFrom,
|
|
50
|
-
to: chunkTo,
|
|
51
|
-
}),
|
|
28
|
+
const firstPartition = partitions[0];
|
|
29
|
+
const derivedFrom = opts.from ?? partitions.reduce((min, p) => (p.minTime < min ? p.minTime : min), firstPartition.minTime);
|
|
30
|
+
const derivedTo = opts.to ?? partitions.reduce((max, p) => (p.maxTime > max ? p.maxTime : max), firstPartition.maxTime);
|
|
31
|
+
const stateDir = computeBackfillStateDir(input.config, input.configPath, opts.stateDir);
|
|
32
|
+
const paths = backfillPaths(stateDir, planId);
|
|
33
|
+
// 2. Detect MV for replay strategy
|
|
34
|
+
let mvAsQuery;
|
|
35
|
+
let targetColumns;
|
|
36
|
+
try {
|
|
37
|
+
const definitions = await loadSchemaDefinitions(input.config.schema, {
|
|
38
|
+
cwd: dirname(input.configPath),
|
|
52
39
|
});
|
|
53
|
-
|
|
40
|
+
const mv = findMvForTarget(definitions, database, table);
|
|
41
|
+
if (mv) {
|
|
42
|
+
mvAsQuery = mv.as;
|
|
43
|
+
const tableDef = definitions.find((d) => d.kind === 'table' && d.database === database && d.name === table);
|
|
44
|
+
if (tableDef && tableDef.kind === 'table') {
|
|
45
|
+
targetColumns = tableDef.columns.map((c) => c.name);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
54
48
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
export async function buildBackfillPlan(input) {
|
|
58
|
-
const chunkHours = input.chunkHours ?? input.options.defaults.chunkHours;
|
|
59
|
-
if (chunkHours * 60 < input.options.limits.minChunkMinutes) {
|
|
60
|
-
throw new BackfillConfigError(`Chunk size ${chunkHours}h is below limits.minChunkMinutes=${input.options.limits.minChunkMinutes}.`);
|
|
49
|
+
catch {
|
|
50
|
+
// Schema load failed — fall back to direct copy
|
|
61
51
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
52
|
+
// 3. Stamp SQL on each planned chunk to produce BackfillChunk[]
|
|
53
|
+
const chunks = plannedChunks.map(planned => {
|
|
54
|
+
const sqlTemplate = buildChunkSql({
|
|
55
|
+
planId,
|
|
56
|
+
chunk: planned,
|
|
57
|
+
target: opts.target,
|
|
58
|
+
sortKey,
|
|
59
|
+
mvAsQuery,
|
|
60
|
+
targetColumns,
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
id: planned.id,
|
|
64
|
+
from: planned.from,
|
|
65
|
+
to: planned.to,
|
|
66
|
+
status: 'pending',
|
|
67
|
+
attempts: 0,
|
|
68
|
+
idempotencyToken: planned.idempotencyToken,
|
|
69
|
+
sqlTemplate,
|
|
70
|
+
partitionId: planned.partitionId,
|
|
71
|
+
estimatedBytes: planned.estimatedBytes,
|
|
72
|
+
...(planned.sortKeyFrom !== undefined ? { sortKeyFrom: planned.sortKeyFrom } : {}),
|
|
73
|
+
...(planned.sortKeyTo !== undefined ? { sortKeyTo: planned.sortKeyTo } : {}),
|
|
74
|
+
};
|
|
67
75
|
});
|
|
68
|
-
const
|
|
69
|
-
const stateDir = computeBackfillStateDir(input.config, input.configPath, input.options);
|
|
70
|
-
const paths = backfillPaths(stateDir, planId);
|
|
76
|
+
const strategy = mvAsQuery ? 'mv_replay' : 'partition';
|
|
71
77
|
const plan = {
|
|
72
78
|
planId,
|
|
73
|
-
target:
|
|
79
|
+
target: opts.target,
|
|
74
80
|
createdAt: '1970-01-01T00:00:00.000Z',
|
|
75
81
|
status: 'planned',
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
chunkHours,
|
|
84
|
-
requireIdempotencyToken: input.options.defaults.requireIdempotencyToken,
|
|
85
|
-
}),
|
|
82
|
+
strategy: strategy,
|
|
83
|
+
...(env ? { environment: env } : {}),
|
|
84
|
+
from: derivedFrom,
|
|
85
|
+
to: derivedTo,
|
|
86
|
+
chunks,
|
|
87
|
+
partitions,
|
|
88
|
+
sortKey,
|
|
86
89
|
options: {
|
|
87
|
-
|
|
88
|
-
maxParallelChunks:
|
|
89
|
-
maxRetriesPerChunk:
|
|
90
|
-
requireIdempotencyToken:
|
|
90
|
+
maxChunkBytes: opts.maxChunkBytes,
|
|
91
|
+
maxParallelChunks: opts.maxParallelChunks,
|
|
92
|
+
maxRetriesPerChunk: opts.maxRetriesPerChunk,
|
|
93
|
+
requireIdempotencyToken: opts.requireIdempotencyToken,
|
|
94
|
+
sortKeyColumn: sortKey?.column,
|
|
95
|
+
},
|
|
96
|
+
policy: {
|
|
97
|
+
requireDryRunBeforeRun: opts.requireDryRunBeforeRun,
|
|
98
|
+
requireExplicitWindow: opts.requireExplicitWindow,
|
|
99
|
+
blockOverlappingRuns: opts.blockOverlappingRuns,
|
|
100
|
+
failCheckOnRequiredPendingBackfill: opts.failCheckOnRequiredPendingBackfill,
|
|
101
|
+
},
|
|
102
|
+
limits: {
|
|
103
|
+
maxWindowHours: opts.maxWindowHours,
|
|
104
|
+
minChunkMinutes: opts.minChunkMinutes,
|
|
91
105
|
},
|
|
92
|
-
policy: input.options.policy,
|
|
93
|
-
limits: input.options.limits,
|
|
94
106
|
};
|
|
95
|
-
const existing = await readExistingPlan(paths.planPath);
|
|
96
|
-
if (existing) {
|
|
97
|
-
if (stableSerialize(existing) !== stableSerialize(plan)) {
|
|
98
|
-
throw new BackfillConfigError(`Backfill plan already exists at ${paths.planPath} but differs from current planning output. Remove it if you intentionally changed planning parameters.`);
|
|
99
|
-
}
|
|
100
|
-
return {
|
|
101
|
-
plan: existing,
|
|
102
|
-
planPath: paths.planPath,
|
|
103
|
-
existed: true,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
107
|
await writeJson(paths.planPath, plan);
|
|
107
108
|
return {
|
|
108
109
|
plan,
|
|
109
110
|
planPath: paths.planPath,
|
|
110
|
-
existed: false,
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
113
|
//# sourceMappingURL=planner.js.map
|
package/dist/planner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
1
|
+
import { type PluginConfig } from './options.js';
|
|
2
|
+
import type { BackfillPlugin, BackfillPluginRegistration } from './types.js';
|
|
3
|
+
export declare function createBackfillPlugin(options?: PluginConfig): BackfillPlugin;
|
|
4
|
+
export declare function backfill(options?: PluginConfig): BackfillPluginRegistration;
|
|
4
5
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAWL,KAAK,YAAY,EAClB,MAAM,cAAc,CAAA;AAcrB,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAE3B,MAAM,YAAY,CAAA;AAuInB,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,YAAiB,GAAG,cAAc,CA+R/E;AAED,wBAAgB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,0BAA0B,CAO/E"}
|