@vibesdotdev/localdb 0.0.2 → 1.0.0-rc.2
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/LICENSE +18 -0
- package/README.md +123 -2
- package/dist/cli/commands/_shared.consumer.d.ts +1 -3
- package/dist/cli/commands/_shared.consumer.d.ts.map +1 -1
- package/dist/cli/commands/_shared.consumer.js +1 -11
- package/dist/cli/commands/_shared.consumer.js.map +1 -1
- package/dist/cli/commands/migrate/dev.localdb.migrate.cli-command.descriptor.js +1 -1
- package/dist/cli/commands/migrate/dev.localdb.migrate.cli-command.descriptor.js.map +1 -1
- package/dist/cli/commands/migrate/dev.localdb.migrate.cli-command.impl.consumer.d.ts +9 -3
- package/dist/cli/commands/migrate/dev.localdb.migrate.cli-command.impl.consumer.d.ts.map +1 -1
- package/dist/cli/commands/migrate/dev.localdb.migrate.cli-command.impl.consumer.js +59 -45
- package/dist/cli/commands/migrate/dev.localdb.migrate.cli-command.impl.consumer.js.map +1 -1
- package/dist/cli/commands/namespaces/dev.localdb.namespaces.cli-command.descriptor.js +1 -1
- package/dist/cli/commands/namespaces/dev.localdb.namespaces.cli-command.descriptor.js.map +1 -1
- package/dist/cli/commands/namespaces/dev.localdb.namespaces.cli-command.impl.d.ts +8 -3
- package/dist/cli/commands/namespaces/dev.localdb.namespaces.cli-command.impl.d.ts.map +1 -1
- package/dist/cli/commands/namespaces/dev.localdb.namespaces.cli-command.impl.js +12 -10
- package/dist/cli/commands/namespaces/dev.localdb.namespaces.cli-command.impl.js.map +1 -1
- package/dist/cli/commands/pools/dev.localdb.pools.cli-command.descriptor.js +1 -1
- package/dist/cli/commands/pools/dev.localdb.pools.cli-command.descriptor.js.map +1 -1
- package/dist/cli/commands/pools/dev.localdb.pools.cli-command.impl.d.ts +6 -3
- package/dist/cli/commands/pools/dev.localdb.pools.cli-command.impl.d.ts.map +1 -1
- package/dist/cli/commands/pools/dev.localdb.pools.cli-command.impl.js +8 -7
- package/dist/cli/commands/pools/dev.localdb.pools.cli-command.impl.js.map +1 -1
- package/dist/cli/commands/query/dev.localdb.query.cli-command.descriptor.js +1 -1
- package/dist/cli/commands/query/dev.localdb.query.cli-command.descriptor.js.map +1 -1
- package/dist/cli/commands/query/dev.localdb.query.cli-command.impl.consumer.d.ts +13 -3
- package/dist/cli/commands/query/dev.localdb.query.cli-command.impl.consumer.d.ts.map +1 -1
- package/dist/cli/commands/query/dev.localdb.query.cli-command.impl.consumer.js +66 -51
- package/dist/cli/commands/query/dev.localdb.query.cli-command.impl.consumer.js.map +1 -1
- package/dist/cli/commands/status/dev.localdb.status.cli-command.descriptor.js +1 -1
- package/dist/cli/commands/status/dev.localdb.status.cli-command.descriptor.js.map +1 -1
- package/dist/cli/commands/status/dev.localdb.status.cli-command.impl.consumer.d.ts +9 -3
- package/dist/cli/commands/status/dev.localdb.status.cli-command.impl.consumer.d.ts.map +1 -1
- package/dist/cli/commands/status/dev.localdb.status.cli-command.impl.consumer.js +41 -29
- package/dist/cli/commands/status/dev.localdb.status.cli-command.impl.consumer.js.map +1 -1
- package/dist/cli/inputs.d.ts +25 -0
- package/dist/cli/inputs.d.ts.map +1 -0
- package/dist/cli/inputs.js +81 -0
- package/dist/cli/inputs.js.map +1 -0
- package/dist/cli/types.d.ts +45 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +14 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/core/connection-pool.d.ts +204 -46
- package/dist/core/connection-pool.d.ts.map +1 -1
- package/dist/core/connection-pool.js +610 -101
- package/dist/core/connection-pool.js.map +1 -1
- package/dist/core/database.d.ts +243 -63
- package/dist/core/database.d.ts.map +1 -1
- package/dist/core/database.js +937 -203
- package/dist/core/database.js.map +1 -1
- package/dist/core/holders.d.ts +15 -0
- package/dist/core/holders.d.ts.map +1 -0
- package/dist/core/holders.js +4 -0
- package/dist/core/holders.js.map +1 -0
- package/dist/core/host-kinds.d.ts +22 -0
- package/dist/core/host-kinds.d.ts.map +1 -0
- package/dist/core/host-kinds.js +52 -0
- package/dist/core/host-kinds.js.map +1 -0
- package/dist/core/live-runtime.d.ts +17 -0
- package/dist/core/live-runtime.d.ts.map +1 -0
- package/dist/core/live-runtime.js +28 -0
- package/dist/core/live-runtime.js.map +1 -0
- package/dist/core/migration-registry.d.ts +115 -80
- package/dist/core/migration-registry.d.ts.map +1 -1
- package/dist/core/migration-registry.js +340 -199
- package/dist/core/migration-registry.js.map +1 -1
- package/dist/core/open-connection.d.ts +11 -0
- package/dist/core/open-connection.d.ts.map +1 -0
- package/dist/core/open-connection.js +70 -0
- package/dist/core/open-connection.js.map +1 -0
- package/dist/core/outcome.d.ts +21 -0
- package/dist/core/outcome.d.ts.map +1 -0
- package/dist/core/outcome.js +22 -0
- package/dist/core/outcome.js.map +1 -0
- package/dist/core/pool-api.d.ts +19 -0
- package/dist/core/pool-api.d.ts.map +1 -0
- package/dist/core/pool-api.js +59 -0
- package/dist/core/pool-api.js.map +1 -0
- package/dist/core/slow-statement.d.ts +81 -0
- package/dist/core/slow-statement.d.ts.map +1 -0
- package/dist/core/slow-statement.js +149 -0
- package/dist/core/slow-statement.js.map +1 -0
- package/dist/core/wal-policy.d.ts +86 -0
- package/dist/core/wal-policy.d.ts.map +1 -0
- package/dist/core/wal-policy.js +115 -0
- package/dist/core/wal-policy.js.map +1 -0
- package/dist/dev.localdb.cli-group.descriptor.d.ts +1 -1
- package/dist/dev.localdb.cli-group.descriptor.d.ts.map +1 -1
- package/dist/dev.localdb.context.descriptor.d.ts +15 -1
- package/dist/dev.localdb.context.descriptor.d.ts.map +1 -1
- package/dist/dev.localdb.context.descriptor.js +1 -1
- package/dist/dev.localdb.context.descriptor.js.map +1 -1
- package/dist/dev.localdb.context.impl.consumer.d.ts +12 -5
- package/dist/dev.localdb.context.impl.consumer.d.ts.map +1 -1
- package/dist/dev.localdb.context.impl.consumer.js +14 -5
- package/dist/dev.localdb.context.impl.consumer.js.map +1 -1
- package/dist/driver/sqlite-driver.base.d.ts +107 -0
- package/dist/driver/sqlite-driver.base.d.ts.map +1 -0
- package/dist/driver/sqlite-driver.base.js +426 -0
- package/dist/driver/sqlite-driver.base.js.map +1 -0
- package/dist/driver/sqlite-driver.d.ts +154 -0
- package/dist/driver/sqlite-driver.d.ts.map +1 -0
- package/dist/driver/sqlite-driver.js +103 -0
- package/dist/driver/sqlite-driver.js.map +1 -0
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/localdb.client.descriptor.d.ts +10 -0
- package/dist/localdb.client.descriptor.d.ts.map +1 -0
- package/dist/localdb.client.descriptor.js +13 -0
- package/dist/localdb.client.descriptor.js.map +1 -0
- package/dist/localdb.client.impl.consumer.d.ts +11 -0
- package/dist/localdb.client.impl.consumer.d.ts.map +1 -0
- package/dist/localdb.client.impl.consumer.js +11 -0
- package/dist/localdb.client.impl.consumer.js.map +1 -0
- package/dist/localdb.plugin.d.ts +2 -2
- package/dist/localdb.plugin.d.ts.map +1 -1
- package/dist/localdb.plugin.js +58 -10
- package/dist/localdb.plugin.js.map +1 -1
- package/dist/location.d.ts +6 -0
- package/dist/location.d.ts.map +1 -0
- package/dist/location.js +6 -0
- package/dist/location.js.map +1 -0
- package/dist/migrations/load-sql.d.ts +25 -21
- package/dist/migrations/load-sql.d.ts.map +1 -1
- package/dist/migrations/load-sql.js +91 -76
- package/dist/migrations/load-sql.js.map +1 -1
- package/dist/pool.d.ts +3 -0
- package/dist/pool.d.ts.map +1 -0
- package/dist/pool.js +3 -0
- package/dist/pool.js.map +1 -0
- package/dist/schemas/api.d.ts +133 -59
- package/dist/schemas/api.d.ts.map +1 -1
- package/dist/schemas/api.js +1 -1
- package/dist/schemas/api.js.map +1 -1
- package/dist/schemas/migrations.d.ts +123 -0
- package/dist/schemas/migrations.d.ts.map +1 -0
- package/dist/schemas/migrations.js +55 -0
- package/dist/schemas/migrations.js.map +1 -0
- package/dist/schemas/pool.d.ts +27 -0
- package/dist/schemas/pool.d.ts.map +1 -0
- package/dist/schemas/pool.js +7 -0
- package/dist/schemas/pool.js.map +1 -0
- package/dist/schemas/sqlite-driver-base.d.ts +50 -0
- package/dist/schemas/sqlite-driver-base.d.ts.map +1 -0
- package/dist/schemas/sqlite-driver-base.js +2 -0
- package/dist/schemas/sqlite-driver-base.js.map +1 -0
- package/dist/testing/sqlite-driver-conformance.d.ts +42 -0
- package/dist/testing/sqlite-driver-conformance.d.ts.map +1 -0
- package/dist/testing/sqlite-driver-conformance.js +471 -0
- package/dist/testing/sqlite-driver-conformance.js.map +1 -0
- package/package.json +78 -104
- package/dist/core/error-context.d.ts +0 -2
- package/dist/core/error-context.d.ts.map +0 -1
- package/dist/core/error-context.js +0 -17
- package/dist/core/error-context.js.map +0 -1
- package/dist/core/runtime.d.ts +0 -3
- package/dist/core/runtime.d.ts.map +0 -1
- package/dist/core/runtime.js +0 -17
- package/dist/core/runtime.js.map +0 -1
- package/dist/localdb.cloud.plugin.d.ts +0 -17
- package/dist/localdb.cloud.plugin.d.ts.map +0 -1
- package/dist/localdb.cloud.plugin.js +0 -23
- package/dist/localdb.cloud.plugin.js.map +0 -1
- package/src/cli/commands/_shared.consumer.ts +0 -20
- package/src/cli/commands/migrate/dev.localdb.migrate.cli-command.descriptor.ts +0 -20
- package/src/cli/commands/migrate/dev.localdb.migrate.cli-command.impl.consumer.ts +0 -97
- package/src/cli/commands/namespaces/dev.localdb.namespaces.cli-command.descriptor.ts +0 -17
- package/src/cli/commands/namespaces/dev.localdb.namespaces.cli-command.impl.ts +0 -46
- package/src/cli/commands/pools/dev.localdb.pools.cli-command.descriptor.ts +0 -16
- package/src/cli/commands/pools/dev.localdb.pools.cli-command.impl.ts +0 -37
- package/src/cli/commands/query/dev.localdb.query.cli-command.descriptor.ts +0 -21
- package/src/cli/commands/query/dev.localdb.query.cli-command.impl.consumer.ts +0 -69
- package/src/cli/commands/status/dev.localdb.status.cli-command.descriptor.ts +0 -20
- package/src/cli/commands/status/dev.localdb.status.cli-command.impl.consumer.ts +0 -93
- package/src/core/connection-pool.ts +0 -240
- package/src/core/database.ts +0 -419
- package/src/core/error-context.ts +0 -19
- package/src/core/migration-registry.ts +0 -321
- package/src/core/runtime.ts +0 -17
- package/src/dev.localdb.cli-group.descriptor.ts +0 -20
- package/src/dev.localdb.context.descriptor.ts +0 -13
- package/src/dev.localdb.context.impl.consumer.ts +0 -12
- package/src/index.ts +0 -28
- package/src/localdb.cloud.plugin.ts +0 -24
- package/src/localdb.plugin.ts +0 -43
- package/src/migrations/atlas/001-initial-schema.sql +0 -173
- package/src/migrations/atlas/002-lang-server-fields.sql +0 -12
- package/src/migrations/atlas/003-config-id-dedup.sql +0 -31
- package/src/migrations/atlas/004-fix-on-conflict-constraints.sql +0 -25
- package/src/migrations/atlas/005-diagnostics.sql +0 -66
- package/src/migrations/atlas/006-diagnostic-summaries.sql +0 -65
- package/src/migrations/atlas/007-diagnostic-slice.sql +0 -83
- package/src/migrations/load-sql.ts +0 -133
- package/src/schemas/api.ts +0 -92
|
@@ -1,63 +1,78 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
1
|
+
import { CaughtFailureSchema, isCapabilityError } from '@vibesdotdev/kernel';
|
|
2
|
+
import { settle } from "../../../core/outcome.js";
|
|
3
|
+
import { existingFiles, readCliFlag, readCliText, resolveCliDatabasePath } from "../../inputs.js";
|
|
4
|
+
/** Run `sql` and print its rows (a SELECT) or its change count; a failing statement rejects. */
|
|
5
|
+
async function runQuery(runtime, localdb, ui, fullPath, sql, json) {
|
|
6
|
+
const db = await localdb.getRawDatabase(runtime, fullPath, 'localdb-query');
|
|
7
|
+
const isSelect = sql.trim().toLowerCase().startsWith('select');
|
|
8
|
+
if (isSelect) {
|
|
9
|
+
const results = db.prepare(sql).all();
|
|
10
|
+
if (json) {
|
|
11
|
+
ui.json(results);
|
|
12
|
+
}
|
|
13
|
+
else if (results.length === 0) {
|
|
14
|
+
ui.info('No results.');
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
ui.table(results);
|
|
18
|
+
ui.info(`(${results.length} row${results.length !== 1 ? 's' : ''})`);
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const result = db.prepare(sql).run();
|
|
23
|
+
const payload = {
|
|
24
|
+
changes: result.changes,
|
|
25
|
+
lastInsertRowid: result.lastInsertRowid
|
|
26
|
+
};
|
|
27
|
+
if (json) {
|
|
28
|
+
ui.json(payload);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
ui.success('Query executed successfully.');
|
|
32
|
+
ui.log(`Changes: ${payload.changes}`);
|
|
33
|
+
if (payload.lastInsertRowid)
|
|
34
|
+
ui.log(`Last Insert Row ID: ${String(payload.lastInsertRowid)}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Hoisted const: tsc rewriteRelativeImportExtensions does not rewrite `.ts` specifiers inside `export default <expr>` (TS 6.0.3).
|
|
38
|
+
const defaultExport = {
|
|
39
|
+
async execute(args, opts, context) {
|
|
40
|
+
const runtime = context.runtime;
|
|
41
|
+
const ui = await runtime.context('cli/ui');
|
|
42
|
+
const app = await runtime.context('cli/app');
|
|
43
|
+
const localdb = await runtime.context('dev/localdb');
|
|
44
|
+
const sql = readCliText(args, 'sql') ?? '';
|
|
45
|
+
const dbOpt = readCliText(opts, 'db') ?? '';
|
|
46
|
+
const json = readCliFlag(opts, 'json');
|
|
11
47
|
if (!sql.trim()) {
|
|
12
48
|
ui.error('Missing SQL statement');
|
|
13
|
-
|
|
49
|
+
app.exit(1);
|
|
50
|
+
return;
|
|
14
51
|
}
|
|
15
52
|
if (!dbOpt.trim()) {
|
|
16
53
|
ui.error('Missing required option: --db <path>');
|
|
17
|
-
|
|
54
|
+
app.exit(1);
|
|
55
|
+
return;
|
|
18
56
|
}
|
|
19
|
-
|
|
20
|
-
|
|
57
|
+
// A relative --db resolves against the runtime's workspace through the
|
|
58
|
+
// host's path mechanics, never an ambient cwd (#011 ruling 3). LocalDB
|
|
59
|
+
// itself never computes database paths; owners declare them.
|
|
60
|
+
const fullPath = await resolveCliDatabasePath(runtime, dbOpt);
|
|
61
|
+
if ((await existingFiles(runtime, [fullPath])).length === 0) {
|
|
21
62
|
ui.error(`Database not found: ${dbOpt}`);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
const db = localdb.getRawDatabase(fullPath, 'localdb-query');
|
|
26
|
-
const isSelect = sql.trim().toLowerCase().startsWith('select');
|
|
27
|
-
if (isSelect) {
|
|
28
|
-
const results = db.query(sql).all();
|
|
29
|
-
if (opts.json) {
|
|
30
|
-
ui.json(results);
|
|
31
|
-
}
|
|
32
|
-
else if (results.length === 0) {
|
|
33
|
-
ui.info('No results.');
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
ui.table(results);
|
|
37
|
-
ui.info(`(${results.length} row${results.length !== 1 ? 's' : ''})`);
|
|
38
|
-
}
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
const stmt = db.prepare(sql);
|
|
42
|
-
const result = stmt.run();
|
|
43
|
-
const payload = {
|
|
44
|
-
changes: result.changes,
|
|
45
|
-
lastInsertRowid: result.lastInsertRowid
|
|
46
|
-
};
|
|
47
|
-
if (opts.json) {
|
|
48
|
-
ui.json(payload);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
ui.success('Query executed successfully.');
|
|
52
|
-
ui.log(`Changes: ${payload.changes}`);
|
|
53
|
-
if (payload.lastInsertRowid)
|
|
54
|
-
ui.log(`Last Insert Row ID: ${String(payload.lastInsertRowid)}`);
|
|
55
|
-
}
|
|
63
|
+
app.exit(1);
|
|
64
|
+
return;
|
|
56
65
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
66
|
+
const ran = await settle(runQuery(runtime, localdb, ui, fullPath, sql, json));
|
|
67
|
+
if (ran.failed) {
|
|
68
|
+
// The typed refusal, never SQLite's own text: that quotes the statement's literals and names.
|
|
69
|
+
const failure = CaughtFailureSchema.parse(ran.cause);
|
|
70
|
+
ui.error(isCapabilityError(failure)
|
|
71
|
+
? `Error executing query: ${failure.message} (${failure.code} ${failure.reason})`
|
|
72
|
+
: 'Error executing query: the statement failed.');
|
|
73
|
+
app.exit(1);
|
|
60
74
|
}
|
|
61
75
|
}
|
|
62
76
|
};
|
|
77
|
+
export default defaultExport;
|
|
63
78
|
//# sourceMappingURL=dev.localdb.query.cli-command.impl.consumer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.localdb.query.cli-command.impl.consumer.js","sourceRoot":"","sources":["../../../../src/cli/commands/query/dev.localdb.query.cli-command.impl.consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dev.localdb.query.cli-command.impl.consumer.js","sourceRoot":"","sources":["../../../../src/cli/commands/query/dev.localdb.query.cli-command.impl.consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.localdb.status.cli-command.descriptor.js","sourceRoot":"","sources":["../../../../src/cli/commands/status/dev.localdb.status.cli-command.descriptor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dev.localdb.status.cli-command.descriptor.js","sourceRoot":"","sources":["../../../../src/cli/commands/status/dev.localdb.status.cli-command.descriptor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,eAAe,kBAAkB,CAAC;IACjC,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,oCAAoC;IACjD,KAAK,EAAE,aAAa;IACpB,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,IAAI;IACb,OAAO,EAAE;QACR,EAAE,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,oCAAoC,EAAE;QAClF,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,oDAAoD,EAAE;KACzF;CACD,CAAC,CAAC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { LocalDbCliCommandContext, LocalDbCliNoArguments } from '../../types.ts';
|
|
2
|
+
/** The options the CLI parses from this command's descriptor. */
|
|
3
|
+
interface StatusOptions {
|
|
4
|
+
namespace?: string;
|
|
5
|
+
verbose?: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare const defaultExport: {
|
|
8
|
+
execute(_args: LocalDbCliNoArguments, opts: StatusOptions, context: LocalDbCliCommandContext): Promise<void>;
|
|
3
9
|
};
|
|
4
|
-
export default
|
|
10
|
+
export default defaultExport;
|
|
5
11
|
//# sourceMappingURL=dev.localdb.status.cli-command.impl.consumer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.localdb.status.cli-command.impl.consumer.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/status/dev.localdb.status.cli-command.impl.consumer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.localdb.status.cli-command.impl.consumer.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/status/dev.localdb.status.cli-command.impl.consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,wBAAwB,EACxB,qBAAqB,EAErB,MAAM,gBAAgB,CAAC;AAOxB,iEAAiE;AACjE,UAAU,aAAa;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAGD,QAAA,MAAM,aAAa;mBACG,qBAAqB,QAAQ,aAAa,WAAW,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;CA6FlH,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,46 +1,60 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
export default
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
1
|
+
import { migrationRegistry } from "../../../core/migration-registry.js";
|
|
2
|
+
import { attempt, settle } from "../../../core/outcome.js";
|
|
3
|
+
import { formatAgeMs, resolveDatabaseLocationForNamespace } from "../_shared.consumer.js";
|
|
4
|
+
import { existingFiles, readCliFlag, readCliText } from "../../inputs.js";
|
|
5
|
+
// Hoisted const: tsc rewriteRelativeImportExtensions does not rewrite `.ts` specifiers inside `export default <expr>` (TS 6.0.3).
|
|
6
|
+
const defaultExport = {
|
|
7
|
+
async execute(_args, opts, context) {
|
|
8
|
+
const runtime = context.runtime;
|
|
9
|
+
const ui = await runtime.context('cli/ui');
|
|
10
|
+
const app = await runtime.context('cli/app');
|
|
11
|
+
const localdb = await runtime.context('dev/localdb');
|
|
12
|
+
const namespaceOpt = readCliText(opts, 'namespace');
|
|
13
|
+
const verbose = readCliFlag(opts, 'verbose');
|
|
12
14
|
ui.log('\n=== LocalDB Status ===\n');
|
|
13
|
-
|
|
15
|
+
// Declarations belong to this runtime. Absence here says nothing about files on disk.
|
|
16
|
+
const namespaces = localdb.listNamespaces(runtime);
|
|
14
17
|
if (namespaces.length === 0) {
|
|
15
|
-
ui.info('No migration namespaces registered.');
|
|
18
|
+
ui.info('No migration namespaces registered on this runtime.');
|
|
16
19
|
return;
|
|
17
20
|
}
|
|
21
|
+
ui.info(`Namespaces registered on this runtime: ${namespaces.join(', ')}`);
|
|
18
22
|
const namespacesToShow = namespaceOpt
|
|
19
23
|
? namespaces.filter((ns) => ns === namespaceOpt)
|
|
20
24
|
: namespaces;
|
|
21
25
|
if (namespacesToShow.length === 0) {
|
|
22
26
|
ui.error(`Namespace '${namespaceOpt}' not found.`);
|
|
23
27
|
ui.info(`Available namespaces: ${namespaces.join(', ')}`);
|
|
24
|
-
|
|
28
|
+
app.exit(1);
|
|
29
|
+
return;
|
|
25
30
|
}
|
|
26
|
-
const { migrationRegistry } = (await import('../../../core/migration-registry'));
|
|
27
31
|
for (const ns of namespacesToShow) {
|
|
28
32
|
ui.log(`\nNamespace: ${ns}`);
|
|
29
33
|
ui.log('─'.repeat(50));
|
|
30
|
-
const
|
|
31
|
-
if (
|
|
32
|
-
ui.
|
|
34
|
+
const located = attempt(() => resolveDatabaseLocationForNamespace(runtime, ns));
|
|
35
|
+
if (located.failed) {
|
|
36
|
+
ui.error(`Database location unresolvable: ${String(located.cause)}`);
|
|
33
37
|
continue;
|
|
34
38
|
}
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
ui.log(`Exists: ${exists ? 'yes' : 'no'}`);
|
|
39
|
-
if (!exists)
|
|
39
|
+
const location = located.value;
|
|
40
|
+
if (!location) {
|
|
41
|
+
ui.info('No declared database location (the owning package has not registered one).');
|
|
40
42
|
continue;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
}
|
|
44
|
+
ui.log(`Convention: ${location.description}`);
|
|
45
|
+
const present = new Set(await existingFiles(runtime, location.expectedPaths));
|
|
46
|
+
for (const fullPath of location.expectedPaths) {
|
|
47
|
+
const exists = present.has(fullPath);
|
|
48
|
+
ui.log(`Database: ${fullPath}`);
|
|
49
|
+
ui.log(`Exists: ${exists ? 'yes' : 'no'}`);
|
|
50
|
+
if (!exists)
|
|
51
|
+
continue;
|
|
52
|
+
const read = await settle(localdb.getRawDatabase(runtime, fullPath, 'localdb-status').then((db) => migrationRegistry.getDatabaseStatus(runtime, db, ns)));
|
|
53
|
+
if (read.failed) {
|
|
54
|
+
ui.error(`Error reading migration status: ${String(read.cause)}`);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const status = read.value;
|
|
44
58
|
ui.log(`Schema Version: v${status.currentVersion}`);
|
|
45
59
|
ui.log(`Target Version: v${status.targetVersion}`);
|
|
46
60
|
ui.log(`Status: ${status.pendingMigrations > 0 ? 'migrations pending' : 'up to date'}`);
|
|
@@ -51,9 +65,6 @@ export default {
|
|
|
51
65
|
}
|
|
52
66
|
}
|
|
53
67
|
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
ui.error(`Error reading migration status: ${String(error)}`);
|
|
56
|
-
}
|
|
57
68
|
}
|
|
58
69
|
if (verbose) {
|
|
59
70
|
ui.log('\n\n=== Connection Pool ===\n');
|
|
@@ -70,4 +81,5 @@ export default {
|
|
|
70
81
|
}
|
|
71
82
|
}
|
|
72
83
|
};
|
|
84
|
+
export default defaultExport;
|
|
73
85
|
//# sourceMappingURL=dev.localdb.status.cli-command.impl.consumer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.localdb.status.cli-command.impl.consumer.js","sourceRoot":"","sources":["../../../../src/cli/commands/status/dev.localdb.status.cli-command.impl.consumer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.localdb.status.cli-command.impl.consumer.js","sourceRoot":"","sources":["../../../../src/cli/commands/status/dev.localdb.status.cli-command.impl.consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one guard LocalDB's CLI commands read their arguments and options
|
|
3
|
+
* through. The CLI parses argv into plain objects of strings and booleans;
|
|
4
|
+
* each field is parsed once by its schema, and anything else (a value of
|
|
5
|
+
* another type, a throwing getter, a revoked Proxy, a Zod failure while
|
|
6
|
+
* reading it) refuses `INVALID_INPUT localdb-option-invalid` instead of
|
|
7
|
+
* throwing into the command.
|
|
8
|
+
*/
|
|
9
|
+
import { type RuntimeRef } from '@vibesdotdev/kernel';
|
|
10
|
+
/** The text field `key` of a parsed argument or option object: the string, or `undefined` when absent. */
|
|
11
|
+
export declare function readCliText<TInputs extends object>(source: TInputs, key: keyof TInputs & string): string | undefined;
|
|
12
|
+
/** The flag `key` of a parsed option object: `true` only for a present `true`. */
|
|
13
|
+
export declare function readCliFlag<TInputs extends object>(source: TInputs, key: keyof TInputs & string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve a user-supplied database path the way the runtime resolves paths:
|
|
16
|
+
* an absolute path stands; a relative one resolves against the runtime's
|
|
17
|
+
* workspace (`runtime/workspace-path`, which refuses `NOT_FOUND
|
|
18
|
+
* workspace-unbound` on an unbound runtime), never against a cwd. Path
|
|
19
|
+
* mechanics come from the host's `paths/runtime-path` kind; a runtime without
|
|
20
|
+
* it refuses `UNAVAILABLE runtime-path-unavailable`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveCliDatabasePath(runtime: RuntimeRef, path: string): Promise<string>;
|
|
23
|
+
/** The paths among `paths` that exist, through the runtime's filesystem (`filesystem/adapter`). */
|
|
24
|
+
export declare function existingFiles(runtime: RuntimeRef, paths: readonly string[]): Promise<string[]>;
|
|
25
|
+
//# sourceMappingURL=inputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/cli/inputs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAkBvE,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpH;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,CAEzG;AAoBD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB/F;AAED,mGAAmG;AACnG,wBAAsB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOpG"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one guard LocalDB's CLI commands read their arguments and options
|
|
3
|
+
* through. The CLI parses argv into plain objects of strings and booleans;
|
|
4
|
+
* each field is parsed once by its schema, and anything else (a value of
|
|
5
|
+
* another type, a throwing getter, a revoked Proxy, a Zod failure while
|
|
6
|
+
* reading it) refuses `INVALID_INPUT localdb-option-invalid` instead of
|
|
7
|
+
* throwing into the command.
|
|
8
|
+
*/
|
|
9
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
10
|
+
import * as z from 'zod/v4';
|
|
11
|
+
import { fileSystemOf } from "../core/host-kinds.js";
|
|
12
|
+
/** Run one read of a parsed CLI input; whatever it throws becomes the typed refusal naming `key`. */
|
|
13
|
+
function guardCliInput(key, read) {
|
|
14
|
+
try {
|
|
15
|
+
return read();
|
|
16
|
+
}
|
|
17
|
+
catch (cause) {
|
|
18
|
+
throw new CapabilityError(`The '${key}' input is not what the command declares.`, 'INVALID_INPUT', {
|
|
19
|
+
reason: 'localdb-option-invalid',
|
|
20
|
+
retryable: false,
|
|
21
|
+
details: { key },
|
|
22
|
+
cause
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** The text field `key` of a parsed argument or option object: the string, or `undefined` when absent. */
|
|
27
|
+
export function readCliText(source, key) {
|
|
28
|
+
return guardCliInput(key, () => z.object({ [key]: z.string().optional() }).parse(source)[key]);
|
|
29
|
+
}
|
|
30
|
+
/** The flag `key` of a parsed option object: `true` only for a present `true`. */
|
|
31
|
+
export function readCliFlag(source, key) {
|
|
32
|
+
return guardCliInput(key, () => z.object({ [key]: z.boolean().optional() }).parse(source)[key] === true);
|
|
33
|
+
}
|
|
34
|
+
const CliRuntimePathMembersSchema = z.object({
|
|
35
|
+
isAbsolute: z.custom((member) => member instanceof Function),
|
|
36
|
+
resolve: z.custom((member) => member instanceof Function)
|
|
37
|
+
});
|
|
38
|
+
/** The resolved implementation itself (its methods keep their receiver), once its shape is checked. */
|
|
39
|
+
const CliRuntimePathSchema = z.custom((paths) => CliRuntimePathMembersSchema.safeParse(paths).success);
|
|
40
|
+
const WorkspacePathSchema = z.string().min(1);
|
|
41
|
+
const RUNTIME_PATH_KIND = 'paths/runtime-path';
|
|
42
|
+
/**
|
|
43
|
+
* Resolve a user-supplied database path the way the runtime resolves paths:
|
|
44
|
+
* an absolute path stands; a relative one resolves against the runtime's
|
|
45
|
+
* workspace (`runtime/workspace-path`, which refuses `NOT_FOUND
|
|
46
|
+
* workspace-unbound` on an unbound runtime), never against a cwd. Path
|
|
47
|
+
* mechanics come from the host's `paths/runtime-path` kind; a runtime without
|
|
48
|
+
* it refuses `UNAVAILABLE runtime-path-unavailable`.
|
|
49
|
+
*/
|
|
50
|
+
export async function resolveCliDatabasePath(runtime, path) {
|
|
51
|
+
const unavailable = () => new CapabilityError('This runtime offers no host path mechanics (paths/runtime-path).', 'UNAVAILABLE', {
|
|
52
|
+
reason: 'runtime-path-unavailable',
|
|
53
|
+
retryable: false
|
|
54
|
+
});
|
|
55
|
+
if (!runtime.hasKind(RUNTIME_PATH_KIND))
|
|
56
|
+
throw unavailable();
|
|
57
|
+
const paths = CliRuntimePathSchema.safeParse(await runtime.query(RUNTIME_PATH_KIND).resolve());
|
|
58
|
+
if (!paths.success)
|
|
59
|
+
throw unavailable();
|
|
60
|
+
if (paths.data.isAbsolute(path))
|
|
61
|
+
return paths.data.resolve(path);
|
|
62
|
+
const workspace = WorkspacePathSchema.safeParse(await runtime.context('runtime/workspace-path'));
|
|
63
|
+
if (!workspace.success) {
|
|
64
|
+
throw new CapabilityError('The runtime answered no workspace path.', 'UNAVAILABLE', {
|
|
65
|
+
reason: 'workspace-path-invalid',
|
|
66
|
+
retryable: false
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return paths.data.resolve(workspace.data, path);
|
|
70
|
+
}
|
|
71
|
+
/** The paths among `paths` that exist, through the runtime's filesystem (`filesystem/adapter`). */
|
|
72
|
+
export async function existingFiles(runtime, paths) {
|
|
73
|
+
const files = await fileSystemOf(runtime);
|
|
74
|
+
const present = [];
|
|
75
|
+
for (const path of paths) {
|
|
76
|
+
if (await files.exists(path))
|
|
77
|
+
present.push(path);
|
|
78
|
+
}
|
|
79
|
+
return present;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=inputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/cli/inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local CLI Types (localdb)
|
|
3
|
+
*
|
|
4
|
+
* LocalDB's CLI command implementations consume the runtime contexts `cli/ui`
|
|
5
|
+
* and `cli/app`, whose canonical shapes live in `@vibesdotdev/cli/providers`.
|
|
6
|
+
* `@vibesdotdev/cli` itself depends on `@vibesdotdev/localdb`, so a back-import
|
|
7
|
+
* here would form a package cycle (`localdb#build ↔ cli#build`). Following the
|
|
8
|
+
* same convention as `@vibesdotdev/storage`, this module declares a structural
|
|
9
|
+
* subset that matches only the methods the localdb commands actually call. The
|
|
10
|
+
* full contexts live in `@vibesdotdev/cli`; the runtime resolves them at run
|
|
11
|
+
* time via `runtime.context('cli/ui' | 'cli/app')`.
|
|
12
|
+
*/
|
|
13
|
+
import type { RuntimeRef } from '@vibesdotdev/kernel';
|
|
14
|
+
/**
|
|
15
|
+
* Structural subset of the CLI `CommandContext`: the runtime the CLI hands
|
|
16
|
+
* each command's `execute`. Commands read `cli/ui`, `cli/app` and
|
|
17
|
+
* `dev/localdb` from this runtime, and every LocalDB call they make reports
|
|
18
|
+
* on it, never on an ambient one.
|
|
19
|
+
*/
|
|
20
|
+
export interface LocalDbCliCommandContext {
|
|
21
|
+
runtime: RuntimeRef;
|
|
22
|
+
}
|
|
23
|
+
/** Positional arguments of a command that declares none. */
|
|
24
|
+
export type LocalDbCliNoArguments = Readonly<Record<string, never>>;
|
|
25
|
+
/** One value a SQLite row column can hold. */
|
|
26
|
+
export type LocalDbCliCell = string | number | bigint | boolean | null | Uint8Array;
|
|
27
|
+
/** One row the commands print: a table row, a query result row, or a statement result. */
|
|
28
|
+
export type LocalDbCliRow = Readonly<Record<string, LocalDbCliCell>>;
|
|
29
|
+
/** Structural subset of `UIContext` used by localdb CLI commands. */
|
|
30
|
+
export interface LocalDbCliUIContext {
|
|
31
|
+
info(message: string): void;
|
|
32
|
+
success(message: string): void;
|
|
33
|
+
warn(message: string): void;
|
|
34
|
+
error(message: string): void;
|
|
35
|
+
log(message: string): void;
|
|
36
|
+
table(rows: readonly LocalDbCliRow[], options?: {
|
|
37
|
+
columns?: string[];
|
|
38
|
+
} | string | string[]): void;
|
|
39
|
+
json(data: readonly LocalDbCliRow[] | LocalDbCliRow): void;
|
|
40
|
+
}
|
|
41
|
+
/** Structural subset of `AppContext` used by localdb CLI commands. */
|
|
42
|
+
export interface LocalDbCliAppContext {
|
|
43
|
+
exit(code?: number): void;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,UAAU,CAAC;CACpB;AAED,4DAA4D;AAC5D,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAEpE,8CAA8C;AAC9C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,UAAU,CAAC;AAEpF,0FAA0F;AAC1F,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;AAErE,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IAClG,IAAI,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,GAAG,aAAa,GAAG,IAAI,CAAC;CAC3D;AAED,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACpC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local CLI Types (localdb)
|
|
3
|
+
*
|
|
4
|
+
* LocalDB's CLI command implementations consume the runtime contexts `cli/ui`
|
|
5
|
+
* and `cli/app`, whose canonical shapes live in `@vibesdotdev/cli/providers`.
|
|
6
|
+
* `@vibesdotdev/cli` itself depends on `@vibesdotdev/localdb`, so a back-import
|
|
7
|
+
* here would form a package cycle (`localdb#build ↔ cli#build`). Following the
|
|
8
|
+
* same convention as `@vibesdotdev/storage`, this module declares a structural
|
|
9
|
+
* subset that matches only the methods the localdb commands actually call. The
|
|
10
|
+
* full contexts live in `@vibesdotdev/cli`; the runtime resolves them at run
|
|
11
|
+
* time via `runtime.context('cli/ui' | 'cli/app')`.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|