boltstore 0.6.2 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -8
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +10 -2
- package/dist/audit.js.map +1 -1
- package/dist/auth/jwt.js +1 -1
- package/dist/bin.js +4 -4
- package/dist/bin.js.map +1 -1
- package/dist/cli/admin.d.ts +2 -0
- package/dist/cli/admin.d.ts.map +1 -0
- package/dist/cli/admin.js +65 -0
- package/dist/cli/admin.js.map +1 -0
- package/dist/cli/applications.d.ts +2 -0
- package/dist/cli/applications.d.ts.map +1 -0
- package/dist/cli/applications.js +105 -0
- package/dist/cli/applications.js.map +1 -0
- package/dist/cli/backup.d.ts +3 -0
- package/dist/cli/backup.d.ts.map +1 -0
- package/dist/cli/backup.js +49 -0
- package/dist/cli/backup.js.map +1 -0
- package/dist/cli/help.d.ts +3 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +36 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/import-export.d.ts +3 -0
- package/dist/cli/import-export.d.ts.map +1 -0
- package/dist/cli/import-export.js +80 -0
- package/dist/cli/import-export.js.map +1 -0
- package/dist/cli/init.d.ts +4 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +105 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/migrate.d.ts +4 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +77 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/cli/serve.d.ts +2 -0
- package/dist/cli/serve.d.ts.map +1 -0
- package/dist/cli/serve.js +33 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/status.d.ts +2 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +15 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli.d.ts +0 -10
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +95 -402
- package/dist/cli.js.map +1 -1
- package/dist/db/manager.d.ts +21 -21
- package/dist/db/manager.d.ts.map +1 -1
- package/dist/db/manager.js +97 -65
- package/dist/db/manager.js.map +1 -1
- package/dist/entry.js +4 -4
- package/dist/entry.js.map +1 -1
- package/package.json +2 -2
package/dist/db/manager.js
CHANGED
|
@@ -8,16 +8,20 @@
|
|
|
8
8
|
* db/
|
|
9
9
|
* _boltstore.db (server meta database — _databases table)
|
|
10
10
|
* files/ (future: system-level file storage)
|
|
11
|
-
* {
|
|
11
|
+
* dbs_{id}/
|
|
12
12
|
* db/
|
|
13
|
-
* {
|
|
13
|
+
* dbs_{id}.db (application database, directory named by database ID)
|
|
14
14
|
* files/ (future: per-app file storage)
|
|
15
15
|
* ```
|
|
16
16
|
*
|
|
17
|
+
* Each database gets a unique ID (dbs_ prefix) on creation. The name is
|
|
18
|
+
* kept for display/alias purposes, but the ID is the primary identifier
|
|
19
|
+
* in URLs and file paths.
|
|
20
|
+
*
|
|
17
21
|
* @module boltstore/db/manager
|
|
18
22
|
*/
|
|
19
23
|
import { DatabasePool } from "./pool";
|
|
20
|
-
import { validateIdentifier, isReservedTable, sanitizePathComponent } from "@boltstore/utils";
|
|
24
|
+
import { validateIdentifier, isReservedTable, sanitizePathComponent, generateSecureId, ID_PREFIXES } from "@boltstore/utils";
|
|
21
25
|
import { mkdirSync, rmSync } from "node:fs";
|
|
22
26
|
import { bootstrapAuthTables } from "../auth/tables";
|
|
23
27
|
const DEFAULT_CONFIG = {
|
|
@@ -39,51 +43,70 @@ export class DatabaseManager {
|
|
|
39
43
|
mkdirSync(`${this.config.dataDir}/system/db`, { recursive: true });
|
|
40
44
|
const metaPath = `${this.config.dataDir}/system/db/_boltstore.db`;
|
|
41
45
|
this.metaPool = new DatabasePool({ path: metaPath, readConnections: 1 });
|
|
42
|
-
// Bootstrap the _databases metadata table
|
|
46
|
+
// Bootstrap the _databases metadata table with id + name
|
|
43
47
|
this.metaPool.write().run(`
|
|
44
48
|
CREATE TABLE IF NOT EXISTS _databases (
|
|
45
|
-
|
|
49
|
+
id TEXT PRIMARY KEY,
|
|
50
|
+
name TEXT NOT NULL UNIQUE,
|
|
46
51
|
path TEXT NOT NULL,
|
|
47
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
52
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
53
|
+
updated_at TEXT
|
|
48
54
|
)
|
|
49
55
|
`);
|
|
56
|
+
// Migrate existing schema: add columns and backfill IDs
|
|
57
|
+
const metaWriteDb = this.metaPool.write();
|
|
58
|
+
try {
|
|
59
|
+
metaWriteDb.run("ALTER TABLE _databases ADD COLUMN updated_at TEXT");
|
|
60
|
+
}
|
|
61
|
+
catch { }
|
|
62
|
+
try {
|
|
63
|
+
metaWriteDb.run("ALTER TABLE _databases ADD COLUMN id TEXT");
|
|
64
|
+
}
|
|
65
|
+
catch { }
|
|
66
|
+
// Backfill dbs_ IDs for rows that don't have one (created by older versions)
|
|
67
|
+
const rowsWithoutId = metaWriteDb.query("SELECT rowid, name FROM _databases WHERE id IS NULL").all();
|
|
68
|
+
for (const row of rowsWithoutId) {
|
|
69
|
+
const dbId = generateSecureId(ID_PREFIXES.database);
|
|
70
|
+
metaWriteDb.run("UPDATE _databases SET id=? WHERE rowid=?", [dbId, row.rowid]);
|
|
71
|
+
}
|
|
50
72
|
}
|
|
51
73
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* If the application is not registered in `_databases`, this will throw.
|
|
55
|
-
* The application must be explicitly created via `createDatabase()` first.
|
|
74
|
+
* Resolve a database pool by ID or name.
|
|
75
|
+
* If the identifier starts with "dbs_", it's treated as an ID; otherwise as a name.
|
|
56
76
|
*/
|
|
57
|
-
get(
|
|
58
|
-
validateIdentifier(
|
|
59
|
-
if (isReservedTable(
|
|
60
|
-
throw Object.assign(new Error(`Cannot use reserved name "${
|
|
77
|
+
get(nameOrId) {
|
|
78
|
+
validateIdentifier(nameOrId.replace(/^dbs_/, ""), "database identifier");
|
|
79
|
+
if (isReservedTable(nameOrId)) {
|
|
80
|
+
throw Object.assign(new Error(`Cannot use reserved name "${nameOrId}" as a database identifier.`), { status: 403 });
|
|
61
81
|
}
|
|
62
82
|
// The system meta database is always accessible
|
|
63
|
-
if (
|
|
83
|
+
if (nameOrId === "_system") {
|
|
64
84
|
return this.metaPool;
|
|
65
85
|
}
|
|
66
86
|
// Check if already loaded
|
|
67
|
-
const cached = this.appPools.get(
|
|
87
|
+
const cached = this.appPools.get(nameOrId);
|
|
68
88
|
if (cached)
|
|
69
89
|
return cached;
|
|
70
|
-
//
|
|
90
|
+
// Look up by ID (dbs_ prefix) or name
|
|
71
91
|
const metaDb = this.metaPool.read();
|
|
72
|
-
const
|
|
92
|
+
const isId = nameOrId.startsWith("dbs_");
|
|
93
|
+
const row = metaDb
|
|
94
|
+
.query(isId ? "SELECT path FROM _databases WHERE id=?" : "SELECT path FROM _databases WHERE name=?")
|
|
95
|
+
.get(nameOrId);
|
|
73
96
|
if (!row) {
|
|
74
|
-
throw Object.assign(new Error(`Database "${
|
|
97
|
+
throw Object.assign(new Error(`Database "${nameOrId}" not found. Use POST /api/admin/databases to create it.`), { status: 404 });
|
|
75
98
|
}
|
|
76
99
|
// Create the pool
|
|
77
100
|
const parentMetaQueryTimeoutMs = this.metaPool.config?.queryTimeoutMs ?? 0;
|
|
78
101
|
const pool = new DatabasePool({ path: row.path, queryTimeoutMs: parentMetaQueryTimeoutMs });
|
|
79
|
-
this.appPools.set(
|
|
102
|
+
this.appPools.set(nameOrId, pool);
|
|
80
103
|
return pool;
|
|
81
104
|
}
|
|
82
105
|
/**
|
|
83
|
-
* Create a new application database.
|
|
106
|
+
* Create a new application database with a unique ID.
|
|
84
107
|
*
|
|
85
108
|
* This is an **admin-only** operation. A new SQLite file is created
|
|
86
|
-
* and registered in
|
|
109
|
+
* in a directory named by the database ID, and registered in `_databases`.
|
|
87
110
|
*/
|
|
88
111
|
createDatabase(name) {
|
|
89
112
|
validateIdentifier(name, "database name");
|
|
@@ -94,65 +117,72 @@ export class DatabaseManager {
|
|
|
94
117
|
throw Object.assign(new Error(`Database names cannot start with underscore.`), { status: 400 });
|
|
95
118
|
}
|
|
96
119
|
const metaDb = this.metaPool.write();
|
|
97
|
-
// Check for duplicate
|
|
120
|
+
// Check for duplicate name
|
|
98
121
|
const existing = metaDb.query("SELECT 1 FROM _databases WHERE name=?").get(name);
|
|
99
122
|
if (existing) {
|
|
100
123
|
throw Object.assign(new Error(`Database "${name}" already exists.`), { status: 409 });
|
|
101
124
|
}
|
|
102
|
-
//
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
125
|
+
// Generate a unique database ID
|
|
126
|
+
const dbId = generateSecureId(ID_PREFIXES.database);
|
|
127
|
+
const safeId = sanitizePathComponent(dbId);
|
|
128
|
+
mkdirSync(`${this.config.dataDir}/${safeId}/db`, { recursive: true });
|
|
129
|
+
const dbPath = `${this.config.dataDir}/${safeId}/db/${safeId}.db`;
|
|
106
130
|
const now = new Date().toISOString();
|
|
107
|
-
// Use writeTransaction on the meta pool for atomicity
|
|
108
131
|
return this.metaPool.writeTransaction(() => {
|
|
109
|
-
metaDb.run("INSERT INTO _databases (name, path, created_at) VALUES (?, ?, ?)", [
|
|
132
|
+
metaDb.run("INSERT INTO _databases (id, name, path, created_at, updated_at) VALUES (?, ?, ?, ?, ?)", [
|
|
133
|
+
dbId,
|
|
110
134
|
name,
|
|
111
135
|
dbPath,
|
|
112
136
|
now,
|
|
137
|
+
now,
|
|
113
138
|
]);
|
|
114
139
|
// Create the database pool (this auto-creates the SQLite file)
|
|
115
140
|
const parentMetaQueryTimeoutMs = this.metaPool.config?.queryTimeoutMs ?? 0;
|
|
116
141
|
const pool = new DatabasePool({ path: dbPath, queryTimeoutMs: parentMetaQueryTimeoutMs });
|
|
117
|
-
this.appPools.set(
|
|
142
|
+
this.appPools.set(dbId, pool);
|
|
118
143
|
// Auto-create auth tables (_users, _tokens) so the app can use auth immediately
|
|
119
144
|
bootstrapAuthTables(pool);
|
|
120
|
-
return { name, path: dbPath, createdAt: now };
|
|
145
|
+
return { id: dbId, name, path: dbPath, createdAt: now, updatedAt: now };
|
|
121
146
|
});
|
|
122
147
|
}
|
|
123
148
|
/**
|
|
124
|
-
* Delete an application database.
|
|
125
|
-
*
|
|
126
|
-
* This is an **admin-only** operation. The SQLite file is closed and removed,
|
|
127
|
-
* and the entry is deleted from `_databases`.
|
|
149
|
+
* Delete an application database by ID or name.
|
|
128
150
|
*/
|
|
129
|
-
deleteDatabase(
|
|
130
|
-
validateIdentifier(
|
|
131
|
-
if (
|
|
132
|
-
throw Object.assign(new Error(`Cannot delete system database "${
|
|
151
|
+
deleteDatabase(nameOrId) {
|
|
152
|
+
validateIdentifier(nameOrId.replace(/^dbs_/, ""), "database identifier");
|
|
153
|
+
if (nameOrId.startsWith("_")) {
|
|
154
|
+
throw Object.assign(new Error(`Cannot delete system database "${nameOrId}".`), { status: 403 });
|
|
133
155
|
}
|
|
134
156
|
return this.metaPool.writeTransaction(() => {
|
|
135
157
|
const metaDb = this.metaPool.write();
|
|
136
|
-
|
|
137
|
-
const row = metaDb
|
|
158
|
+
const isId = nameOrId.startsWith("dbs_");
|
|
159
|
+
const row = metaDb
|
|
160
|
+
.query(isId ? "SELECT path, name FROM _databases WHERE id=?" : "SELECT path, id FROM _databases WHERE name=?")
|
|
161
|
+
.get(nameOrId);
|
|
138
162
|
if (!row) {
|
|
139
|
-
throw Object.assign(new Error(`Database "${
|
|
163
|
+
throw Object.assign(new Error(`Database "${nameOrId}" not found.`), { status: 404 });
|
|
140
164
|
}
|
|
141
|
-
// Close and remove the pool if loaded
|
|
142
|
-
const cached
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
165
|
+
// Close and remove the pool if loaded (check both ID and name cache)
|
|
166
|
+
for (const [key, cached] of this.appPools.entries()) {
|
|
167
|
+
if (key === nameOrId || key === row.id || (!isId && key === row.name)) {
|
|
168
|
+
cached.close();
|
|
169
|
+
this.appPools.delete(key);
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
146
172
|
}
|
|
147
173
|
// Remove from metadata
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
174
|
+
const lookupField = isId ? "id" : "name";
|
|
175
|
+
metaDb.run(`DELETE FROM _databases WHERE ${lookupField}=?`, [nameOrId]);
|
|
176
|
+
// Remove the app directory
|
|
177
|
+
const dirName = row.path ? row.path.split("/").slice(0, -2).pop() : null;
|
|
178
|
+
if (dirName) {
|
|
179
|
+
const appDir = `${this.config.dataDir}/${dirName}`;
|
|
180
|
+
try {
|
|
181
|
+
rmSync(appDir, { recursive: true, force: true });
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Best effort cleanup
|
|
185
|
+
}
|
|
156
186
|
}
|
|
157
187
|
});
|
|
158
188
|
}
|
|
@@ -161,19 +191,24 @@ export class DatabaseManager {
|
|
|
161
191
|
*/
|
|
162
192
|
listDatabases() {
|
|
163
193
|
const metaDb = this.metaPool.read();
|
|
164
|
-
const rows = metaDb.query("SELECT name, path, created_at FROM _databases ORDER BY name").all();
|
|
194
|
+
const rows = metaDb.query("SELECT id, name, path, created_at, updated_at FROM _databases ORDER BY name").all();
|
|
165
195
|
return rows.map((r) => ({
|
|
196
|
+
id: r.id,
|
|
166
197
|
name: r.name,
|
|
167
198
|
path: r.path,
|
|
168
199
|
createdAt: r.created_at,
|
|
200
|
+
updatedAt: r.updated_at ?? undefined,
|
|
169
201
|
}));
|
|
170
202
|
}
|
|
171
203
|
/**
|
|
172
|
-
* Check if a database exists (metadata check only, no pool created).
|
|
204
|
+
* Check if a database exists by ID or name (metadata check only, no pool created).
|
|
173
205
|
*/
|
|
174
|
-
exists(
|
|
206
|
+
exists(nameOrId) {
|
|
175
207
|
const metaDb = this.metaPool.read();
|
|
176
|
-
const
|
|
208
|
+
const isId = nameOrId.startsWith("dbs_");
|
|
209
|
+
const row = metaDb
|
|
210
|
+
.query(isId ? "SELECT 1 FROM _databases WHERE id=?" : "SELECT 1 FROM _databases WHERE name=?")
|
|
211
|
+
.get(nameOrId);
|
|
177
212
|
return row !== null;
|
|
178
213
|
}
|
|
179
214
|
/**
|
|
@@ -190,15 +225,12 @@ export class DatabaseManager {
|
|
|
190
225
|
}
|
|
191
226
|
/**
|
|
192
227
|
* Close a specific database pool and remove it from the cache.
|
|
193
|
-
* Used by backup/restore to swap database files.
|
|
194
|
-
*
|
|
195
|
-
* If the pool is not loaded, this is a no-op.
|
|
196
228
|
*/
|
|
197
|
-
closePool(
|
|
198
|
-
const cached = this.appPools.get(
|
|
229
|
+
closePool(nameOrId) {
|
|
230
|
+
const cached = this.appPools.get(nameOrId);
|
|
199
231
|
if (cached) {
|
|
200
232
|
cached.close();
|
|
201
|
-
this.appPools.delete(
|
|
233
|
+
this.appPools.delete(nameOrId);
|
|
202
234
|
}
|
|
203
235
|
}
|
|
204
236
|
/**
|
package/dist/db/manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/db/manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/db/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7H,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAoBrD,MAAM,cAAc,GAAkB;IACpC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ;CAC3C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAK1B,YAAY,MAAsB;QAF1B,aAAQ,GAA8B,IAAI,GAAG,EAAE,CAAC;QAGtD,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAE/C,+BAA+B;QAC/B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAErD,kDAAkD;QAClD,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnE,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,0BAA0B,CAAC;QAClE,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzE,yDAAyD;QACzD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;;;;;;;;KAQzB,CAAC,CAAC;QAEH,wDAAwD;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACtF,IAAI,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAE9E,6EAA6E;QAC7E,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC,GAAG,EAAuC,CAAC;QAC1I,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpD,WAAW,CAAC,GAAG,CAAC,0CAA0C,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,QAAgB;QAClB,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAEzE,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,6BAA6B,QAAQ,6BAA6B,CAAC,EAC7E,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;QACJ,CAAC;QAED,gDAAgD;QAChD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,0BAA0B;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,sCAAsC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM;aACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,0CAA0C,CAAC;aACnG,GAAG,CAAC,QAAQ,CAA4B,CAAC;QAE5C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,aAAa,QAAQ,0DAA0D,CAAC,EAC1F,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,MAAM,wBAAwB,GAAI,IAAI,CAAC,QAAgE,CAAC,MAAM,EAAE,cAAc,IAAI,CAAC,CAAC;QACpI,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,wBAAwB,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,IAAY;QACzB,kBAAkB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAE1C,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,6BAA6B,IAAI,uBAAuB,CAAC,EACnE,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,8CAA8C,CAAC,EACzD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAErC,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,aAAa,IAAI,mBAAmB,CAAC,EAC/C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;QACJ,CAAC;QAED,gCAAgC;QAChC,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC3C,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,OAAO,MAAM,KAAK,CAAC;QAClE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE;YACzC,MAAM,CAAC,GAAG,CAAC,wFAAwF,EAAE;gBACnG,IAAI;gBACJ,IAAI;gBACJ,MAAM;gBACN,GAAG;gBACH,GAAG;aACJ,CAAC,CAAC;YAEH,+DAA+D;YAC/D,MAAM,wBAAwB,GAAI,IAAI,CAAC,QAAgE,CAAC,MAAM,EAAE,cAAc,IAAI,CAAC,CAAC;YACpI,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAC1F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE9B,gFAAgF;YAChF,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE1B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB;QAC7B,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAEzE,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,kCAAkC,QAAQ,IAAI,CAAC,EACzD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAErC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,MAAM;iBACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,8CAA8C,CAAC;iBAC7G,GAAG,CAAC,QAAQ,CAAwD,CAAC;YAExE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,aAAa,QAAQ,cAAc,CAAC,EAC9C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACJ,CAAC;YAED,qEAAqE;YACrE,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtE,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC1B,MAAM;gBACR,CAAC;YACH,CAAC;YAED,uBAAuB;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YACzC,MAAM,CAAC,GAAG,CAAC,gCAAgC,WAAW,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAExE,2BAA2B;YAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACzE,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;gBACnD,IAAI,CAAC;oBACH,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnD,CAAC;gBAAC,MAAM,CAAC;oBACP,sBAAsB;gBACxB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC,GAAG,EAMzG,CAAC;QAEJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,SAAS,EAAE,CAAC,CAAC,UAAU,IAAI,SAAS;SACrC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAgB;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM;aACf,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,uCAAuC,CAAC;aAC7F,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjB,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,OAAQ,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AAED,eAAe,eAAe,CAAC"}
|
package/dist/entry.js
CHANGED
|
@@ -11,10 +11,10 @@ import { runCli } from "./cli";
|
|
|
11
11
|
import { info, success, error } from "./cli-style";
|
|
12
12
|
const command = process.argv[2];
|
|
13
13
|
const CLI_COMMANDS = new Set([
|
|
14
|
-
"serve", "init", "admin", "status", "help", "--help", "-h",
|
|
15
|
-
"migrate", "migrate:rollback", "migrations",
|
|
16
|
-
"import", "export",
|
|
17
|
-
"backup", "restore",
|
|
14
|
+
"serve", "init", "admin", "applications", "status", "help", "--help", "-h",
|
|
15
|
+
"migrate", "migrate:rollback", "migrate:list", "migrations",
|
|
16
|
+
"import", "export", "db:import", "db:export",
|
|
17
|
+
"backup", "restore", "db:backup", "db:restore",
|
|
18
18
|
]);
|
|
19
19
|
const isCliCommand = command !== undefined && CLI_COMMANDS.has(command);
|
|
20
20
|
try {
|
package/dist/entry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "boltstore",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Boltstore server — lightweight backend with realtime sync",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"prepublish": "bun run build"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@boltstore/utils": "^0.6.
|
|
25
|
+
"@boltstore/utils": "^0.6.1"
|
|
26
26
|
},
|
|
27
27
|
"license": "MIT",
|
|
28
28
|
"repository": {
|