@beechcms/cli 0.4.0-preview.1

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.
@@ -0,0 +1,8 @@
1
+ export interface SeedLoadOptions {
2
+ dryRun: boolean;
3
+ diff: boolean;
4
+ local: boolean;
5
+ db?: string;
6
+ }
7
+ export declare function seedLoad(args: SeedLoadOptions): Promise<void>;
8
+ //# sourceMappingURL=seed-load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-load.d.ts","sourceRoot":"","sources":["../../src/commands/seed-load.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAiFD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAenE"}
@@ -0,0 +1,89 @@
1
+ import pc from 'picocolors';
2
+ import { SEED_REGISTRY, generateCreateTable, generateIndexes, generateFtsTable, generateFtsTriggers, } from '@beech/core';
3
+ import { executeD1File, findWranglerConfig, resolveDbName } from '../lib/wrangler.js';
4
+ import { diffSeed } from '../lib/schema-diff.js';
5
+ function buildStatements(seed) {
6
+ const stmts = [generateCreateTable(seed), ...generateIndexes(seed)];
7
+ const fts = generateFtsTable(seed);
8
+ if (fts) {
9
+ stmts.push(fts, ...generateFtsTriggers(seed));
10
+ }
11
+ return stmts;
12
+ }
13
+ async function runDiff(options) {
14
+ const seeds = Object.values(SEED_REGISTRY);
15
+ console.log(pc.cyan('\n Diffing schema…\n'));
16
+ let allOk = true;
17
+ for (const seed of seeds) {
18
+ const result = await diffSeed(seed, options);
19
+ const tableName = `content_${seed.slug}`;
20
+ if (!result.tableExists) {
21
+ console.log(pc.red(` ✗ ${tableName} — table missing`));
22
+ allOk = false;
23
+ continue;
24
+ }
25
+ const problems = result.columns.filter(c => c.status !== 'ok');
26
+ if (problems.length === 0) {
27
+ console.log(pc.green(` ✓ ${tableName}`));
28
+ continue;
29
+ }
30
+ allOk = false;
31
+ console.log(pc.yellow(` ⚠ ${tableName}`));
32
+ for (const col of problems) {
33
+ if (col.status === 'missing') {
34
+ console.log(pc.red(` + missing column: ${col.name} ${col.expectedType}`));
35
+ }
36
+ else if (col.status === 'extra') {
37
+ console.log(pc.dim(` ~ extra column: ${col.name} ${col.actualType}`));
38
+ }
39
+ else if (col.status === 'type_mismatch') {
40
+ console.log(pc.red(` ≠ type mismatch: ${col.name} (expected ${col.expectedType}, got ${col.actualType})`));
41
+ }
42
+ }
43
+ }
44
+ console.log('');
45
+ if (allOk) {
46
+ console.log(pc.green(' Schema matches seeds. No action needed.\n'));
47
+ }
48
+ else {
49
+ console.log(pc.yellow(' Run `beech seed:load` to apply missing tables/columns.\n'));
50
+ }
51
+ }
52
+ async function runLoad(options, dryRun) {
53
+ const seeds = Object.values(SEED_REGISTRY);
54
+ if (dryRun) {
55
+ console.log(pc.cyan('\n -- dry-run: SQL that would be executed\n'));
56
+ for (const seed of seeds) {
57
+ const stmts = buildStatements(seed);
58
+ console.log(pc.dim(` -- content_${seed.slug}`));
59
+ for (const stmt of stmts) {
60
+ console.log(stmt + '\n');
61
+ }
62
+ }
63
+ return;
64
+ }
65
+ console.log(pc.cyan(`\n Loading seeds into ${options.local ? 'local' : 'remote'} D1 (${options.db})…\n`));
66
+ for (const seed of seeds) {
67
+ const stmts = buildStatements(seed);
68
+ const sql = stmts.join('\n\n') + '\n';
69
+ process.stdout.write(` ${pc.dim('→')} content_${seed.slug}… `);
70
+ executeD1File(sql, options);
71
+ console.log(pc.green('done'));
72
+ }
73
+ console.log(pc.green('\n All seeds loaded.\n'));
74
+ }
75
+ export async function seedLoad(args) {
76
+ const configPath = findWranglerConfig();
77
+ const db = args.db ?? resolveDbName(configPath);
78
+ const options = {
79
+ db,
80
+ local: args.local,
81
+ configPath,
82
+ };
83
+ if (args.diff) {
84
+ await runDiff(options);
85
+ }
86
+ else {
87
+ await runLoad(options, args.dryRun);
88
+ }
89
+ }
@@ -0,0 +1,3 @@
1
+ export { seedLoad } from './commands/seed-load.js';
2
+ export type { SeedLoadOptions } from './commands/seed-load.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,193 @@
1
+ // src/commands/seed-load.ts
2
+ import pc from "picocolors";
3
+ import {
4
+ SEED_REGISTRY,
5
+ generateCreateTable,
6
+ generateDraftTable,
7
+ generateIndexes,
8
+ generateFtsTable,
9
+ generateFtsTriggers
10
+ } from "@beechcms/core";
11
+
12
+ // src/lib/wrangler.ts
13
+ import { execSync, spawnSync } from "node:child_process";
14
+ import { writeFileSync, rmSync, existsSync } from "node:fs";
15
+ import { tmpdir } from "node:os";
16
+ import { join, resolve } from "node:path";
17
+ function buildArgs(options) {
18
+ const args = [];
19
+ if (options.configPath) args.push("--config", options.configPath);
20
+ if (options.local) args.push("--local");
21
+ else args.push("--remote");
22
+ return args;
23
+ }
24
+ function executeD1File(sql, options) {
25
+ const tmpFile = join(tmpdir(), `beech-seed-${Date.now()}.sql`);
26
+ try {
27
+ writeFileSync(tmpFile, sql, "utf-8");
28
+ const args = ["d1", "execute", options.db, "--file", tmpFile, ...buildArgs(options)];
29
+ const result = spawnSync("npx", ["wrangler", ...args], { stdio: "inherit", cwd: process.cwd() });
30
+ if (result.status !== 0) {
31
+ process.exit(result.status ?? 1);
32
+ }
33
+ } finally {
34
+ try {
35
+ rmSync(tmpFile);
36
+ } catch {
37
+ }
38
+ }
39
+ }
40
+ function queryD1(sql, options) {
41
+ const args = ["d1", "execute", options.db, "--command", sql, "--json", ...buildArgs(options)];
42
+ const result = spawnSync("npx", ["wrangler", ...args], { encoding: "utf-8", cwd: process.cwd() });
43
+ if (result.status !== 0) {
44
+ throw new Error(`wrangler d1 execute failed:
45
+ ${result.stderr}`);
46
+ }
47
+ try {
48
+ const parsed = JSON.parse(result.stdout);
49
+ return parsed[0]?.results ?? [];
50
+ } catch {
51
+ throw new Error(`Failed to parse wrangler JSON output:
52
+ ${result.stdout}`);
53
+ }
54
+ }
55
+ function findWranglerConfig() {
56
+ const candidate = resolve(process.cwd(), "apps", "api", "wrangler.jsonc");
57
+ return existsSync(candidate) ? candidate : null;
58
+ }
59
+ function resolveDbName(configPath) {
60
+ if (!configPath) return "beech-db";
61
+ try {
62
+ const content = execSync(`cat "${configPath}"`, { encoding: "utf-8" });
63
+ const match = content.match(/"database_name"\s*:\s*"([^"]+)"/);
64
+ return match?.[1] ?? "beech-db";
65
+ } catch {
66
+ return "beech-db";
67
+ }
68
+ }
69
+
70
+ // src/lib/schema-diff.ts
71
+ import { getExpectedColumns } from "@beechcms/core";
72
+ async function diffSeed(seed, options) {
73
+ const tableName = `content_${seed.slug}`;
74
+ const expected = getExpectedColumns(seed);
75
+ let actual;
76
+ try {
77
+ actual = queryD1(`PRAGMA table_info(${tableName})`, options);
78
+ } catch {
79
+ return { slug: seed.slug, tableExists: false, columns: expected.map((c) => ({ name: c.name, status: "missing", expectedType: c.sqlType })) };
80
+ }
81
+ if (actual.length === 0) {
82
+ return { slug: seed.slug, tableExists: false, columns: expected.map((c) => ({ name: c.name, status: "missing", expectedType: c.sqlType })) };
83
+ }
84
+ const actualMap = new Map(actual.map((r) => [r.name, r]));
85
+ const expectedSet = new Set(expected.map((c) => c.name));
86
+ const columns = [];
87
+ for (const col of expected) {
88
+ const actual2 = actualMap.get(col.name);
89
+ if (!actual2) {
90
+ columns.push({ name: col.name, status: "missing", expectedType: col.sqlType });
91
+ } else if (actual2.type.toUpperCase() !== col.sqlType) {
92
+ columns.push({ name: col.name, status: "type_mismatch", expectedType: col.sqlType, actualType: actual2.type });
93
+ } else {
94
+ columns.push({ name: col.name, status: "ok" });
95
+ }
96
+ }
97
+ for (const row of actual) {
98
+ if (!expectedSet.has(row.name)) {
99
+ columns.push({ name: row.name, status: "extra", actualType: row.type });
100
+ }
101
+ }
102
+ return { slug: seed.slug, tableExists: true, columns };
103
+ }
104
+
105
+ // src/commands/seed-load.ts
106
+ function buildStatements(seed) {
107
+ const stmts = [generateCreateTable(seed), ...generateIndexes(seed)];
108
+ const draft = generateDraftTable(seed);
109
+ if (draft) stmts.push(draft);
110
+ const fts = generateFtsTable(seed);
111
+ if (fts) {
112
+ stmts.push(fts, ...generateFtsTriggers(seed));
113
+ }
114
+ return stmts;
115
+ }
116
+ async function runDiff(options) {
117
+ const seeds = Object.values(SEED_REGISTRY);
118
+ console.log(pc.cyan("\n Diffing schema\u2026\n"));
119
+ let allOk = true;
120
+ for (const seed of seeds) {
121
+ const result = await diffSeed(seed, options);
122
+ const tableName = `content_${seed.slug}`;
123
+ if (!result.tableExists) {
124
+ console.log(pc.red(` \u2717 ${tableName} \u2014 table missing`));
125
+ allOk = false;
126
+ continue;
127
+ }
128
+ const problems = result.columns.filter((c) => c.status !== "ok");
129
+ if (problems.length === 0) {
130
+ console.log(pc.green(` \u2713 ${tableName}`));
131
+ continue;
132
+ }
133
+ allOk = false;
134
+ console.log(pc.yellow(` \u26A0 ${tableName}`));
135
+ for (const col of problems) {
136
+ if (col.status === "missing") {
137
+ console.log(pc.red(` + missing column: ${col.name} ${col.expectedType}`));
138
+ } else if (col.status === "extra") {
139
+ console.log(pc.dim(` ~ extra column: ${col.name} ${col.actualType}`));
140
+ } else if (col.status === "type_mismatch") {
141
+ console.log(pc.red(` \u2260 type mismatch: ${col.name} (expected ${col.expectedType}, got ${col.actualType})`));
142
+ }
143
+ }
144
+ }
145
+ console.log("");
146
+ if (allOk) {
147
+ console.log(pc.green(" Schema matches seeds. No action needed.\n"));
148
+ } else {
149
+ console.log(pc.yellow(" Run `beech seed:load` to apply missing tables/columns.\n"));
150
+ }
151
+ }
152
+ async function runLoad(options, dryRun) {
153
+ const seeds = Object.values(SEED_REGISTRY);
154
+ if (dryRun) {
155
+ console.log(pc.cyan("\n -- dry-run: SQL that would be executed\n"));
156
+ for (const seed of seeds) {
157
+ const stmts = buildStatements(seed);
158
+ console.log(pc.dim(` -- content_${seed.slug}`));
159
+ for (const stmt of stmts) {
160
+ console.log(stmt + "\n");
161
+ }
162
+ }
163
+ return;
164
+ }
165
+ console.log(pc.cyan(`
166
+ Loading seeds into ${options.local ? "local" : "remote"} D1 (${options.db})\u2026
167
+ `));
168
+ for (const seed of seeds) {
169
+ const stmts = buildStatements(seed);
170
+ const sql = stmts.join("\n\n") + "\n";
171
+ process.stdout.write(` ${pc.dim("\u2192")} content_${seed.slug}\u2026 `);
172
+ executeD1File(sql, options);
173
+ console.log(pc.green("done"));
174
+ }
175
+ console.log(pc.green("\n All seeds loaded.\n"));
176
+ }
177
+ async function seedLoad(args) {
178
+ const configPath = findWranglerConfig();
179
+ const db = args.db ?? resolveDbName(configPath);
180
+ const options = {
181
+ db,
182
+ local: args.local,
183
+ configPath
184
+ };
185
+ if (args.diff) {
186
+ await runDiff(options);
187
+ } else {
188
+ await runLoad(options, args.dryRun);
189
+ }
190
+ }
191
+ export {
192
+ seedLoad
193
+ };
@@ -0,0 +1,15 @@
1
+ import type { Seed } from '@beech/core';
2
+ import type { WranglerOptions } from './wrangler.js';
3
+ export interface ColumnDiff {
4
+ name: string;
5
+ status: 'ok' | 'missing' | 'extra' | 'type_mismatch';
6
+ expectedType?: string;
7
+ actualType?: string;
8
+ }
9
+ export interface SeedDiff {
10
+ slug: string;
11
+ tableExists: boolean;
12
+ columns: ColumnDiff[];
13
+ }
14
+ export declare function diffSeed(seed: Seed, options: WranglerOptions): Promise<SeedDiff>;
15
+ //# sourceMappingURL=schema-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-diff.d.ts","sourceRoot":"","sources":["../../src/lib/schema-diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAS,MAAM,eAAe,CAAA;AAU3D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,eAAe,CAAA;IACpD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,UAAU,EAAE,CAAA;CACtB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsCtF"}
@@ -0,0 +1,37 @@
1
+ import { getExpectedColumns } from '@beech/core';
2
+ import { queryD1 } from './wrangler.js';
3
+ export async function diffSeed(seed, options) {
4
+ const tableName = `content_${seed.slug}`;
5
+ const expected = getExpectedColumns(seed);
6
+ let actual;
7
+ try {
8
+ actual = queryD1(`PRAGMA table_info(${tableName})`, options);
9
+ }
10
+ catch {
11
+ return { slug: seed.slug, tableExists: false, columns: expected.map(c => ({ name: c.name, status: 'missing', expectedType: c.sqlType })) };
12
+ }
13
+ if (actual.length === 0) {
14
+ return { slug: seed.slug, tableExists: false, columns: expected.map(c => ({ name: c.name, status: 'missing', expectedType: c.sqlType })) };
15
+ }
16
+ const actualMap = new Map(actual.map(r => [r.name, r]));
17
+ const expectedSet = new Set(expected.map(c => c.name));
18
+ const columns = [];
19
+ for (const col of expected) {
20
+ const actual = actualMap.get(col.name);
21
+ if (!actual) {
22
+ columns.push({ name: col.name, status: 'missing', expectedType: col.sqlType });
23
+ }
24
+ else if (actual.type.toUpperCase() !== col.sqlType) {
25
+ columns.push({ name: col.name, status: 'type_mismatch', expectedType: col.sqlType, actualType: actual.type });
26
+ }
27
+ else {
28
+ columns.push({ name: col.name, status: 'ok' });
29
+ }
30
+ }
31
+ for (const row of actual) {
32
+ if (!expectedSet.has(row.name)) {
33
+ columns.push({ name: row.name, status: 'extra', actualType: row.type });
34
+ }
35
+ }
36
+ return { slug: seed.slug, tableExists: true, columns };
37
+ }
@@ -0,0 +1,17 @@
1
+ export interface WranglerOptions {
2
+ db: string;
3
+ local: boolean;
4
+ configPath: string | null;
5
+ }
6
+ export interface D1Row {
7
+ [key: string]: unknown;
8
+ }
9
+ /** Esegue SQL da file temporaneo via `wrangler d1 execute --file`. */
10
+ export declare function executeD1File(sql: string, options: WranglerOptions): void;
11
+ /** Esegue una query SQL e ritorna i risultati come array di oggetti (--json). */
12
+ export declare function queryD1<T extends D1Row = D1Row>(sql: string, options: WranglerOptions): T[];
13
+ /** Trova il path di wrangler.jsonc in apps/api/ relativo a cwd. */
14
+ export declare function findWranglerConfig(): string | null;
15
+ /** Risolve il nome del database D1 da wrangler.jsonc (grepping 'database_name'). */
16
+ export declare function resolveDbName(configPath: string | null): string;
17
+ //# sourceMappingURL=wrangler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrangler.d.ts","sourceRoot":"","sources":["../../src/lib/wrangler.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,OAAO,CAAA;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,KAAK;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAgBD,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAYzE;AAED,iFAAiF;AACjF,wBAAgB,OAAO,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,CAAC,EAAE,CAc3F;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAGlD;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAS/D"}
@@ -0,0 +1,65 @@
1
+ import { execSync, spawnSync } from 'node:child_process';
2
+ import { writeFileSync, rmSync, existsSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { join, resolve } from 'node:path';
5
+ function buildArgs(options) {
6
+ const args = [];
7
+ if (options.configPath)
8
+ args.push('--config', options.configPath);
9
+ if (options.local)
10
+ args.push('--local');
11
+ else
12
+ args.push('--remote');
13
+ return args;
14
+ }
15
+ /** Esegue SQL da file temporaneo via `wrangler d1 execute --file`. */
16
+ export function executeD1File(sql, options) {
17
+ const tmpFile = join(tmpdir(), `beech-seed-${Date.now()}.sql`);
18
+ try {
19
+ writeFileSync(tmpFile, sql, 'utf-8');
20
+ const args = ['d1', 'execute', options.db, '--file', tmpFile, ...buildArgs(options)];
21
+ const result = spawnSync('npx', ['wrangler', ...args], { stdio: 'inherit', cwd: process.cwd() });
22
+ if (result.status !== 0) {
23
+ process.exit(result.status ?? 1);
24
+ }
25
+ }
26
+ finally {
27
+ try {
28
+ rmSync(tmpFile);
29
+ }
30
+ catch { }
31
+ }
32
+ }
33
+ /** Esegue una query SQL e ritorna i risultati come array di oggetti (--json). */
34
+ export function queryD1(sql, options) {
35
+ const args = ['d1', 'execute', options.db, '--command', sql, '--json', ...buildArgs(options)];
36
+ const result = spawnSync('npx', ['wrangler', ...args], { encoding: 'utf-8', cwd: process.cwd() });
37
+ if (result.status !== 0) {
38
+ throw new Error(`wrangler d1 execute failed:\n${result.stderr}`);
39
+ }
40
+ try {
41
+ const parsed = JSON.parse(result.stdout);
42
+ return (parsed[0]?.results ?? []);
43
+ }
44
+ catch {
45
+ throw new Error(`Failed to parse wrangler JSON output:\n${result.stdout}`);
46
+ }
47
+ }
48
+ /** Trova il path di wrangler.jsonc in apps/api/ relativo a cwd. */
49
+ export function findWranglerConfig() {
50
+ const candidate = resolve(process.cwd(), 'apps', 'api', 'wrangler.jsonc');
51
+ return existsSync(candidate) ? candidate : null;
52
+ }
53
+ /** Risolve il nome del database D1 da wrangler.jsonc (grepping 'database_name'). */
54
+ export function resolveDbName(configPath) {
55
+ if (!configPath)
56
+ return 'beech-db';
57
+ try {
58
+ const content = execSync(`cat "${configPath}"`, { encoding: 'utf-8' });
59
+ const match = content.match(/"database_name"\s*:\s*"([^"]+)"/);
60
+ return match?.[1] ?? 'beech-db';
61
+ }
62
+ catch {
63
+ return 'beech-db';
64
+ }
65
+ }
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@beechcms/cli",
3
+ "version": "0.4.0-preview.1",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "exports": {
7
+ ".": "./dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc --noEmit && esbuild src/index.ts --bundle --packages=external --platform=node --format=esm --outfile=dist/index.js",
11
+ "dev": "esbuild src/index.ts --bundle --packages=external --platform=node --format=esm --outfile=dist/index.js --watch"
12
+ },
13
+ "dependencies": {
14
+ "@beechcms/core": "^0.4.0-preview.1",
15
+ "picocolors": "^1.1.1"
16
+ },
17
+ "devDependencies": {
18
+ "esbuild": "^0.27.3",
19
+ "typescript": "^5.9.3"
20
+ }
21
+ }
@@ -0,0 +1,120 @@
1
+ import pc from 'picocolors'
2
+ import {
3
+ SEED_REGISTRY,
4
+ generateCreateTable,
5
+ generateDraftTable,
6
+ generateIndexes,
7
+ generateFtsTable,
8
+ generateFtsTriggers,
9
+ type Seed,
10
+ } from '@beechcms/core'
11
+ import { executeD1File, findWranglerConfig, resolveDbName, type WranglerOptions } from '../lib/wrangler.js'
12
+ import { diffSeed } from '../lib/schema-diff.js'
13
+
14
+ export interface SeedLoadOptions {
15
+ dryRun: boolean
16
+ diff: boolean
17
+ local: boolean
18
+ db?: string
19
+ }
20
+
21
+ function buildStatements(seed: Seed): string[] {
22
+ const stmts: string[] = [generateCreateTable(seed), ...generateIndexes(seed)]
23
+
24
+ const draft = generateDraftTable(seed)
25
+ if (draft) stmts.push(draft)
26
+
27
+ const fts = generateFtsTable(seed)
28
+ if (fts) {
29
+ stmts.push(fts, ...generateFtsTriggers(seed))
30
+ }
31
+
32
+ return stmts
33
+ }
34
+
35
+ async function runDiff(options: WranglerOptions): Promise<void> {
36
+ const seeds = Object.values(SEED_REGISTRY)
37
+ console.log(pc.cyan('\n Diffing schema…\n'))
38
+
39
+ let allOk = true
40
+ for (const seed of seeds) {
41
+ const result = await diffSeed(seed, options)
42
+ const tableName = `content_${seed.slug}`
43
+
44
+ if (!result.tableExists) {
45
+ console.log(pc.red(` ✗ ${tableName} — table missing`))
46
+ allOk = false
47
+ continue
48
+ }
49
+
50
+ const problems = result.columns.filter(c => c.status !== 'ok')
51
+ if (problems.length === 0) {
52
+ console.log(pc.green(` ✓ ${tableName}`))
53
+ continue
54
+ }
55
+
56
+ allOk = false
57
+ console.log(pc.yellow(` ⚠ ${tableName}`))
58
+ for (const col of problems) {
59
+ if (col.status === 'missing') {
60
+ console.log(pc.red(` + missing column: ${col.name} ${col.expectedType}`))
61
+ } else if (col.status === 'extra') {
62
+ console.log(pc.dim(` ~ extra column: ${col.name} ${col.actualType}`))
63
+ } else if (col.status === 'type_mismatch') {
64
+ console.log(pc.red(` ≠ type mismatch: ${col.name} (expected ${col.expectedType}, got ${col.actualType})`))
65
+ }
66
+ }
67
+ }
68
+
69
+ console.log('')
70
+ if (allOk) {
71
+ console.log(pc.green(' Schema matches seeds. No action needed.\n'))
72
+ } else {
73
+ console.log(pc.yellow(' Run `beech seed:load` to apply missing tables/columns.\n'))
74
+ }
75
+ }
76
+
77
+ async function runLoad(options: WranglerOptions, dryRun: boolean): Promise<void> {
78
+ const seeds = Object.values(SEED_REGISTRY)
79
+
80
+ if (dryRun) {
81
+ console.log(pc.cyan('\n -- dry-run: SQL that would be executed\n'))
82
+ for (const seed of seeds) {
83
+ const stmts = buildStatements(seed)
84
+ console.log(pc.dim(` -- content_${seed.slug}`))
85
+ for (const stmt of stmts) {
86
+ console.log(stmt + '\n')
87
+ }
88
+ }
89
+ return
90
+ }
91
+
92
+ console.log(pc.cyan(`\n Loading seeds into ${options.local ? 'local' : 'remote'} D1 (${options.db})…\n`))
93
+
94
+ for (const seed of seeds) {
95
+ const stmts = buildStatements(seed)
96
+ const sql = stmts.join('\n\n') + '\n'
97
+ process.stdout.write(` ${pc.dim('→')} content_${seed.slug}… `)
98
+ executeD1File(sql, options)
99
+ console.log(pc.green('done'))
100
+ }
101
+
102
+ console.log(pc.green('\n All seeds loaded.\n'))
103
+ }
104
+
105
+ export async function seedLoad(args: SeedLoadOptions): Promise<void> {
106
+ const configPath = findWranglerConfig()
107
+ const db = args.db ?? resolveDbName(configPath)
108
+
109
+ const options: WranglerOptions = {
110
+ db,
111
+ local: args.local,
112
+ configPath,
113
+ }
114
+
115
+ if (args.diff) {
116
+ await runDiff(options)
117
+ } else {
118
+ await runLoad(options, args.dryRun)
119
+ }
120
+ }
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { seedLoad } from './commands/seed-load.js'
2
+ export type { SeedLoadOptions } from './commands/seed-load.js'
@@ -0,0 +1,64 @@
1
+ import type { Seed } from '@beechcms/core'
2
+ import { getExpectedColumns, type SchemaColumn } from '@beechcms/core'
3
+ import type { WranglerOptions, D1Row } from './wrangler.js'
4
+ import { queryD1 } from './wrangler.js'
5
+
6
+ interface PragmaRow extends D1Row {
7
+ name: string
8
+ type: string
9
+ notnull: number
10
+ pk: number
11
+ }
12
+
13
+ export interface ColumnDiff {
14
+ name: string
15
+ status: 'ok' | 'missing' | 'extra' | 'type_mismatch'
16
+ expectedType?: string
17
+ actualType?: string
18
+ }
19
+
20
+ export interface SeedDiff {
21
+ slug: string
22
+ tableExists: boolean
23
+ columns: ColumnDiff[]
24
+ }
25
+
26
+ export async function diffSeed(seed: Seed, options: WranglerOptions): Promise<SeedDiff> {
27
+ const tableName = `content_${seed.slug}`
28
+ const expected = getExpectedColumns(seed)
29
+
30
+ let actual: PragmaRow[]
31
+ try {
32
+ actual = queryD1<PragmaRow>(`PRAGMA table_info(${tableName})`, options)
33
+ } catch {
34
+ return { slug: seed.slug, tableExists: false, columns: expected.map(c => ({ name: c.name, status: 'missing', expectedType: c.sqlType })) }
35
+ }
36
+
37
+ if (actual.length === 0) {
38
+ return { slug: seed.slug, tableExists: false, columns: expected.map(c => ({ name: c.name, status: 'missing', expectedType: c.sqlType })) }
39
+ }
40
+
41
+ const actualMap = new Map<string, PragmaRow>(actual.map(r => [r.name, r]))
42
+ const expectedSet = new Set<string>(expected.map(c => c.name))
43
+
44
+ const columns: ColumnDiff[] = []
45
+
46
+ for (const col of expected) {
47
+ const actual = actualMap.get(col.name)
48
+ if (!actual) {
49
+ columns.push({ name: col.name, status: 'missing', expectedType: col.sqlType })
50
+ } else if (actual.type.toUpperCase() !== col.sqlType) {
51
+ columns.push({ name: col.name, status: 'type_mismatch', expectedType: col.sqlType, actualType: actual.type })
52
+ } else {
53
+ columns.push({ name: col.name, status: 'ok' })
54
+ }
55
+ }
56
+
57
+ for (const row of actual) {
58
+ if (!expectedSet.has(row.name)) {
59
+ columns.push({ name: row.name, status: 'extra', actualType: row.type })
60
+ }
61
+ }
62
+
63
+ return { slug: seed.slug, tableExists: true, columns }
64
+ }
@@ -0,0 +1,78 @@
1
+ import { execSync, spawnSync } from 'node:child_process'
2
+ import { writeFileSync, rmSync, existsSync } from 'node:fs'
3
+ import { tmpdir } from 'node:os'
4
+ import { join, resolve } from 'node:path'
5
+
6
+ export interface WranglerOptions {
7
+ db: string
8
+ local: boolean
9
+ configPath: string | null
10
+ }
11
+
12
+ export interface D1Row {
13
+ [key: string]: unknown
14
+ }
15
+
16
+ interface WranglerResult {
17
+ results: D1Row[]
18
+ success: boolean
19
+ error?: string
20
+ }
21
+
22
+ function buildArgs(options: WranglerOptions): string[] {
23
+ const args: string[] = []
24
+ if (options.configPath) args.push('--config', options.configPath)
25
+ if (options.local) args.push('--local')
26
+ else args.push('--remote')
27
+ return args
28
+ }
29
+
30
+ /** Esegue SQL da file temporaneo via `wrangler d1 execute --file`. */
31
+ export function executeD1File(sql: string, options: WranglerOptions): void {
32
+ const tmpFile = join(tmpdir(), `beech-seed-${Date.now()}.sql`)
33
+ try {
34
+ writeFileSync(tmpFile, sql, 'utf-8')
35
+ const args = ['d1', 'execute', options.db, '--file', tmpFile, ...buildArgs(options)]
36
+ const result = spawnSync('npx', ['wrangler', ...args], { stdio: 'inherit', cwd: process.cwd() })
37
+ if (result.status !== 0) {
38
+ process.exit(result.status ?? 1)
39
+ }
40
+ } finally {
41
+ try { rmSync(tmpFile) } catch {}
42
+ }
43
+ }
44
+
45
+ /** Esegue una query SQL e ritorna i risultati come array di oggetti (--json). */
46
+ export function queryD1<T extends D1Row = D1Row>(sql: string, options: WranglerOptions): T[] {
47
+ const args = ['d1', 'execute', options.db, '--command', sql, '--json', ...buildArgs(options)]
48
+ const result = spawnSync('npx', ['wrangler', ...args], { encoding: 'utf-8', cwd: process.cwd() })
49
+
50
+ if (result.status !== 0) {
51
+ throw new Error(`wrangler d1 execute failed:\n${result.stderr}`)
52
+ }
53
+
54
+ try {
55
+ const parsed: WranglerResult[] = JSON.parse(result.stdout)
56
+ return (parsed[0]?.results ?? []) as T[]
57
+ } catch {
58
+ throw new Error(`Failed to parse wrangler JSON output:\n${result.stdout}`)
59
+ }
60
+ }
61
+
62
+ /** Trova il path di wrangler.jsonc in apps/api/ relativo a cwd. */
63
+ export function findWranglerConfig(): string | null {
64
+ const candidate = resolve(process.cwd(), 'apps', 'api', 'wrangler.jsonc')
65
+ return existsSync(candidate) ? candidate : null
66
+ }
67
+
68
+ /** Risolve il nome del database D1 da wrangler.jsonc (grepping 'database_name'). */
69
+ export function resolveDbName(configPath: string | null): string {
70
+ if (!configPath) return 'beech-db'
71
+ try {
72
+ const content = execSync(`cat "${configPath}"`, { encoding: 'utf-8' })
73
+ const match = content.match(/"database_name"\s*:\s*"([^"]+)"/)
74
+ return match?.[1] ?? 'beech-db'
75
+ } catch {
76
+ return 'beech-db'
77
+ }
78
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "composite": true,
5
+ "declaration": true,
6
+ "declarationMap": true,
7
+ "outDir": "dist",
8
+ "rootDir": "src",
9
+ "module": "ESNext",
10
+ "moduleResolution": "Bundler",
11
+ "target": "ES2022"
12
+ },
13
+ "include": ["src/**/*"],
14
+ "exclude": ["node_modules", "dist"],
15
+ "references": [{ "path": "../core" }]
16
+ }
@@ -0,0 +1 @@
1
+ {"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../node_modules/typescript/lib/lib.scripthost.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/typescript/lib/lib.es2022.full.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/picocolors/types.d.ts","../../node_modules/picocolors/picocolors.d.ts","../core/dist/types.d.ts","../core/dist/define-seed.d.ts","../core/dist/seeds.d.ts","../core/dist/engine.d.ts","../core/dist/validation.d.ts","../core/dist/richtext.d.ts","../../node_modules/orderedmap/dist/index.d.cts","../../node_modules/prosemirror-model/dist/index.d.cts","../../node_modules/prosemirror-transform/dist/index.d.cts","../../node_modules/prosemirror-view/dist/index.d.cts","../../node_modules/prosemirror-state/dist/index.d.cts","../../node_modules/@tiptap/pm/dist/state/index.d.cts","../../node_modules/@tiptap/pm/dist/model/index.d.cts","../../node_modules/@tiptap/pm/dist/view/index.d.cts","../../node_modules/@tiptap/pm/dist/transform/index.d.cts","../../node_modules/@tiptap/core/dist/index.d.cts","../core/dist/richtext-render.d.ts","../core/dist/slug-utils.d.ts","../core/dist/policies.d.ts","../core/dist/index.d.ts","./src/lib/wrangler.ts","./src/lib/schema-diff.ts","./src/commands/seed-load.ts","./src/index.ts","../../node_modules/@types/aria-query/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/bcryptjs/index.d.ts","../../node_modules/@types/deep-eql/index.d.ts","../../node_modules/assertion-error/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/@types/node/web-globals/events.d.ts","../../node_modules/undici-types/utility.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client-stats.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/h2c-client.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-call-history.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/inspector.generated.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/sqlite.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/statuses/index.d.ts","../../node_modules/@types/use-sync-external-store/index.d.ts","../../node_modules/@types/validate-npm-package-name/index.d.ts","../../node_modules/@types/whatwg-mimetype/index.d.ts","../../node_modules/@types/ws/index.d.ts"],"fileIdsList":[[97,116,170,187,188],[116,170,187,188],[83,84,85,86,116,170,187,188],[79,116,170,187,188],[82,116,170,187,188],[80,116,170,187,188],[81,116,170,187,188],[97,98,99,100,101,116,170,187,188],[97,99,116,170,187,188],[104,105,116,170,187,188],[107,116,170,187,188],[110,116,170,187,188],[116,167,168,170,187,188],[116,169,170,187,188],[170,187,188],[116,170,175,187,188,205],[116,170,171,176,181,187,188,190,202,213],[116,170,171,172,181,187,188,190],[116,170,173,187,188,214],[116,170,174,175,182,187,188,191],[116,170,175,187,188,202,210],[116,170,176,178,181,187,188,190],[116,169,170,177,187,188],[116,170,178,179,187,188],[116,170,180,181,187,188],[116,169,170,181,187,188],[116,170,181,182,183,187,188,202,213],[116,170,181,182,183,187,188,197,202,205],[116,162,170,178,181,184,187,188,190,202,213],[116,170,181,182,184,185,187,188,190,202,210,213],[116,170,184,186,187,188,202,210,213],[114,115,116,117,118,119,120,121,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219],[116,170,181,187,188],[116,170,187,188,189,213],[116,170,178,181,187,188,190,202],[116,170,187,188,191],[116,170,187,188,192],[116,169,170,187,188,193],[116,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219],[116,170,187,188,195],[116,170,187,188,196],[116,170,181,187,188,197,198],[116,170,187,188,197,199,214,216],[116,170,182,187,188],[116,170,181,187,188,202,203,205],[116,170,187,188,204,205],[116,170,187,188,202,203],[116,170,187,188,205],[116,170,187,188,206],[116,167,170,187,188,202,207,213],[116,170,181,187,188,208,209],[116,170,187,188,208,209],[116,170,175,187,188,190,202,210],[116,170,187,188,211],[116,170,187,188,190,212],[116,170,184,187,188,196,213],[116,170,175,187,188,214],[116,170,187,188,202,215],[116,170,187,188,189,216],[116,170,187,188,217],[116,170,175,187,188],[116,162,170,187,188],[116,170,187,188,218],[116,162,170,181,183,187,188,193,202,205,213,215,216,218],[116,170,187,188,202,219],[68,116,170,187,188],[66,67,116,170,187,188],[116,170,181,184,186,187,188,190,202,210,213,219,220],[70,116,170,187,188],[78,116,170,187,188],[79,80,81,116,170,187,188],[79,80,82,116,170,187,188],[116,128,131,134,135,170,187,188,213],[116,131,170,187,188,202,213],[116,131,135,170,187,188,213],[116,170,187,188,202],[116,125,170,187,188],[116,129,170,187,188],[116,127,128,131,170,187,188,213],[116,170,187,188,190,210],[116,170,187,188,220],[116,125,170,187,188,220],[116,127,131,170,187,188,190,213],[116,122,123,124,126,130,170,181,187,188,202,213],[116,131,139,147,170,187,188],[116,123,129,170,187,188],[116,131,156,157,170,187,188],[116,123,126,131,170,187,188,205,213,220],[116,131,170,187,188],[116,127,131,170,187,188,213],[116,122,170,187,188],[116,125,126,127,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,170,187,188],[116,131,149,152,170,178,187,188],[116,131,139,140,141,170,187,188],[116,129,131,140,142,170,187,188],[116,130,170,187,188],[116,123,125,131,170,187,188],[116,131,135,140,142,170,187,188],[116,135,170,187,188],[116,129,131,134,170,187,188,213],[116,123,127,131,139,170,187,188],[116,131,149,170,187,188],[116,142,170,187,188],[116,125,131,156,170,187,188,205,218,220],[69,71,91,92,93,116,170,187,188],[69,94,116,170,187,188],[69,91,92,116,170,187,188],[69,116,170,171,182,187,188,191,192],[72,116,170,187,188],[72,73,74,75,76,77,88,89,90,116,170,187,188],[87,116,170,187,188]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"590595c1230ebb7c43ebac51b2b2da956a719b213355b4358e2a6b16a8b5936c","impliedFormat":1},{"version":"8c5f0739f00f89f89b03a1fe6658c6d78000d7ebd7f556f0f8d6908fa679de35","impliedFormat":1},"86bec14949d6a909814591d9fcfe88bfaeb00371188a09b5902ba67d6cfca52c","b0608545e934b7a80afcc2fc6b6a2bf31c62b167aa2425996c20b799b563811b","b8865307c64194a27646cc66c93b23ce32a50868402504cf0780a49a7e15db45","ed511f45bbebde6e742a65963f5efab099b1031fc75abf8d60c2775fc659c532","4b22441b77201958046d001d7144ee4158744afe82eb74470586e1f03109216c","a948391db3523bf551c51321c9af9ab53a951b20c0c47a01d690a828f9a88bf8",{"version":"264f935450101e4b000eb351cf75c9d799ca20a278b260a9e5770303b5f2b6a3","impliedFormat":1},{"version":"f6f171b23ae6db93454343f1b788960f799c8f37043904874a752c0990c6fca6","impliedFormat":1},{"version":"089f9928e7ab1ca2c225e167a80ff1cb5ed0a71c98be7e81f040a51e2cc6bf5e","impliedFormat":1},{"version":"b11acc27c280988d7256bbd8ffe9f1cb5a0e5ed17cddf5335289ee0e81500369","affectsGlobalScope":true,"impliedFormat":1},{"version":"02ab5dbcaa58da1d58c46c7cdfa7f94792c5ccf0fc7c0622ef33755fe415366c","impliedFormat":1},{"version":"e689cc8cd8a102d31c9d3a7b0db0028594202093c4aca25982b425e8ae744556","impliedFormat":1},{"version":"478e59ac0830a0f6360236632d0d589fb0211183aa1ab82292fbca529c0cce35","impliedFormat":1},{"version":"1b4ed9deaba72d4bc8495bf46db690dbf91040da0cb2401db10bad162732c0e2","impliedFormat":1},{"version":"3e94295f73335c9122308a858445d2348949842579ac2bacd30728ab46fe75a7","impliedFormat":1},{"version":"c13b73a1f46995ab76ca7b3638942a550ad52a90081e998919ab549305de5b6a","impliedFormat":1},"5a20f99b17ca97918eb6764cc0153db5a5c7c9b7134c894d653349665e82577d","7723f699ef9e39217d0892bd9b037fe8920c74e0e1ee020e11a3a93e6aa7f0c7","6701859c3587bb771e8dcbb867f2c0030dadfc786cf7c61dc0eb8c5a472e6501","fc9b9a13ae278ccac2ac886f40a600bf97a6c87d0d9f1c0b0d10ea9174c662de",{"version":"649fe31cb0c97df9ffe7fb8f4b98168a7544767e9d427e4fdf83ea2c64bf6b85","signature":"01409b3e147ce904c778c54d6cc4682699039d2ddedc39822955c945f55d7b4a"},"3de237a8e0cf6cf66b6ba77282ac511c68df01df88bfddfefee404e89850679c","9f3ebadf49d7ba7be931f8e42b98796746b8861dab16f30da35f99ec15653230","67480e239e092cb796f489a3e643249fc1dab5b862033afc32506af0ba539f14",{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"a3d3f704c5339a36da3ca8c62b29072f87e86c783b8452d235992142ec71aa2d","impliedFormat":1},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"89e326922cadcc2331d7e851011cf9f0456a681aaf3c95b48b81f8d80e8cdfba","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","impliedFormat":1},{"version":"79b4369233a12c6fa4a07301ecb7085802c98f3a77cf9ab97eee27e1656f82e6","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"d4a22007b481fe2a2e6bfd3a42c00cd62d41edb36d30fc4697df2692e9891fc8","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"378281aa35786c27d5811af7e6bcaa492eebd0c7013d48137c35bbc69a2b9751","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"1b2dd1cbeb0cc6ae20795958ba5950395ebb2849b7c8326853dd15530c77ab0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"f724236417941ea77ec8d38c6b7021f5fb7f8521c7f8c1538e87661f2c6a0774","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ea15fd99b2e34cb25fe8346c955000bb70c8b423ae4377a972ef46bfb37f595","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"f9b4137a0d285bd77dba2e6e895530112264310ae47e07bf311feae428fb8b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"c06b2652ffeb89afd0f1c52c165ced77032f9cd09bc481153fbd6b5504c69494","impliedFormat":1},{"version":"51aecd2df90a3cffea1eb4696b33b2d78594ea2aa2138e6b9471ec4841c6c2ee","impliedFormat":1},{"version":"9d8f9e63e29a3396285620908e7f14d874d066caea747dc4b2c378f0599166b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"612422d5ba6b4a5c4537f423e9199645468ad80a689801da63ab7edb43f7b835","impliedFormat":1},{"version":"db9ada976f9e52e13f7ae8b9a320f4b67b87685938c5879187d8864b2fbe97f3","impliedFormat":1},{"version":"9f39e70a354d0fba29ac3cdf6eca00b7f9e96f64b2b2780c432e8ea27f133743","impliedFormat":1},{"version":"0dace96cc0f7bc6d0ee2044921bdf19fe42d16284dbcc8ae200800d1c9579335","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"c64e1888baaa3253ca4405b455e4bf44f76357868a1bd0a52998ade9a092ad78","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc8c6f5322961b56d9906601b20798725df60baeab45ec014fba9f795d5596fd","impliedFormat":1},{"version":"0904660ae854e6d41f6ff25356db1d654436c6305b0f0aa89d1532df0253486e","impliedFormat":1},{"version":"060d305fe4494d8cb2b99d620928d369d1ee55c1645f5e729a2aca07d0f108cb","impliedFormat":1},{"version":"230bdc111d7578276e4a3bb9d075d85c78c6b68f428c3a9935e2eaa10f4ae1f5","impliedFormat":1},{"version":"0c50296ee73dae94efc3f0da4936b1146ca6ce2217acfabb44c19c9a33fa30e5","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"0e5974dfff7a97181c7c376545f126b20acf2f1341db7d3fccea4977bf3ce19c","impliedFormat":1},{"version":"c7f977ea78a1b060a30554c1c4ec0e2269c6e305a349ca2ada14931ac27ecc0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3806cdd6b48ba01a9198134e62a384ec217a98f316d4baef74dd46d62c947a63","impliedFormat":1},{"version":"ff65b8a8bd380c6d129becc35de02f7c29ad7ce03300331ca91311fb4044d1a9","impliedFormat":1},{"version":"04bf1aa481d1adfb16d93d76e44ce71c51c8ef68039d849926551199489637f6","impliedFormat":1},{"version":"2c9adcc85574b002c9a6311ff2141055769e0071856ec979d92ff989042b1f1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bf3fe89ec8baa335f6370b9fa36308e1bc7a72e2eb2dad1e94f31e27fa28b5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"5fb39858b2459864b139950a09adae4f38dad87c25bf572ce414f10e4bd7baab","impliedFormat":1},{"version":"35390d6fa94bdb432c5d0bcb6547bdd11406c2692a6b90b9e47be2105ea19bd6","impliedFormat":1},{"version":"3910dab597c40e173bf0e0d419d3ce9682c54ebf6ae84849f9b829b1451a17ec","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"486c074a5c0f2254345c0d1c9540380f5463999e42d7e1a159305ea823d3c4b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"c119835edf36415081dfd9ed15fc0cd37aaa28d232be029ad073f15f3d88c323","impliedFormat":1},{"version":"8e7c3bed5f19ade8f911677ddc83052e2283e25b0a8654cd89db9079d4b323c7","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"ccf3afaeebbeee4ca9092101e99fd6abd681116b6e5ec23e381bbb1e1f32262c","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"ab7818a9d57a9297b90e456fc68b77f84d74395a9210a3cfa9d87db33aff8b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb08062718a5470cd864c1fae0eb5b3a3adc5bcd05dcf87608d6f60b65eca3f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3a815b7d1aebc0646b91548eab2fc19dada09ff255d04c71ced00bbd3058c8eb","impliedFormat":1},{"version":"255d948f87f24ffd57bcb2fdf95792fd418a2e1f712a98cf2cce88744d75085c","impliedFormat":1},{"version":"0d5b085f36e6dc55bc6332ecb9c733be3a534958c238fb8d8d18d4a2b6f2a15a","impliedFormat":1},{"version":"836b36913830645ac3b28fe33731aac3fdb3524ee8adbb4cdab9a5c189f41943","affectsGlobalScope":true,"impliedFormat":1},{"version":"bfd3b3c21a56104693183942e221c1896ee23bcb8f8d91ab0b941f7b32985411","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"1f4ae755492a669b317903a6b1664cb7af3fe0c3d1eec6447f4e95a80616d15a","impliedFormat":1},{"version":"7fa8d75d229eeaee235a801758d9c694e94405013fe77d5d1dd8e3201fc414f1","impliedFormat":1},{"version":"0b301e46295e7dee8bcead624b4a0f94ab8ba1cb3f572b726977322293be2196","impliedFormat":1},{"version":"18942319aff2c9619e05c379641b571f0958506472a4b539f906be08fcccf806","impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1}],"root":[[92,95]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"jsx":4,"module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[99,1],[97,2],[87,3],[84,4],[83,5],[86,6],[85,7],[96,2],[102,8],[98,1],[100,9],[101,1],[103,2],[106,10],[108,11],[104,2],[109,2],[111,12],[112,2],[113,12],[107,2],[167,13],[168,13],[169,14],[116,15],[170,16],[171,17],[172,18],[114,2],[173,19],[174,20],[175,21],[176,22],[177,23],[178,24],[179,24],[180,25],[181,26],[182,27],[183,28],[117,2],[115,2],[184,29],[185,30],[186,31],[220,32],[187,33],[188,2],[189,34],[190,35],[191,36],[192,37],[193,38],[194,39],[195,40],[196,41],[197,42],[198,42],[199,43],[200,2],[201,44],[202,45],[204,46],[203,47],[205,48],[206,49],[207,50],[208,51],[209,52],[210,53],[211,54],[212,55],[213,56],[214,57],[215,58],[216,59],[217,60],[118,2],[119,61],[120,2],[121,2],[163,62],[164,63],[165,2],[166,48],[218,64],[219,65],[221,66],[66,2],[68,67],[69,66],[222,2],[110,2],[223,2],[224,2],[225,2],[226,68],[105,2],[67,2],[78,2],[71,69],[70,2],[79,70],[82,71],[80,4],[81,72],[63,2],[64,2],[12,2],[10,2],[11,2],[16,2],[15,2],[2,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[3,2],[25,2],[26,2],[4,2],[27,2],[31,2],[28,2],[29,2],[30,2],[32,2],[33,2],[34,2],[5,2],[35,2],[36,2],[37,2],[38,2],[6,2],[42,2],[39,2],[40,2],[41,2],[43,2],[7,2],[44,2],[49,2],[50,2],[45,2],[46,2],[47,2],[48,2],[8,2],[54,2],[51,2],[52,2],[53,2],[55,2],[9,2],[56,2],[65,2],[57,2],[58,2],[60,2],[59,2],[1,2],[61,2],[62,2],[14,2],[13,2],[139,73],[151,74],[137,75],[152,76],[161,77],[128,78],[129,79],[127,80],[160,81],[155,82],[159,83],[131,84],[148,85],[130,86],[158,87],[125,88],[126,82],[132,89],[133,2],[138,90],[136,89],[123,91],[162,92],[153,93],[142,94],[141,89],[143,95],[146,96],[140,97],[144,98],[156,81],[134,99],[135,100],[147,101],[124,76],[150,102],[149,89],[145,103],[154,2],[122,2],[157,104],[94,105],[95,106],[93,107],[92,108],[73,109],[75,109],[91,110],[90,109],[88,111],[77,2],[74,109],[89,2],[72,2],[76,109]],"affectedFilesPendingEmit":[[94,49],[95,49],[93,49],[92,49]],"emitSignatures":[[93,"cf062d767e4c69d775feb4e018a1879b67940b5c636d5da4cafc8a2edda56d52"],[94,"7b39df61f694310eb72008a976f58d66291803203a84d98c528679c75fc2482b"],[95,"d718f20ec1f031aabfbd8c13248227b70b9d1f25427f5fd701e7445dd027754b"]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.9.3"}