db4ai 0.3.0 → 0.3.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/dist/chunk-3DWAMVV5.js +305 -0
- package/dist/chunk-3DWAMVV5.js.map +1 -0
- package/dist/chunk-COTPYBYM.js +618 -0
- package/dist/chunk-COTPYBYM.js.map +1 -0
- package/dist/chunk-EERD6CDF.js +735 -0
- package/dist/chunk-EERD6CDF.js.map +1 -0
- package/dist/chunk-FUF4HJTC.js +758 -0
- package/dist/chunk-FUF4HJTC.js.map +1 -0
- package/dist/chunk-JLL6FH5L.js +16 -0
- package/dist/chunk-JLL6FH5L.js.map +1 -0
- package/dist/chunk-JXFW6AIT.js +192 -0
- package/dist/chunk-JXFW6AIT.js.map +1 -0
- package/dist/chunk-XLSYCQPG.js +854 -0
- package/dist/chunk-XLSYCQPG.js.map +1 -0
- package/dist/chunk-Y5IXAS7F.js +569 -0
- package/dist/chunk-Y5IXAS7F.js.map +1 -0
- package/dist/cli/bin.d.ts +13 -12
- package/dist/cli/bin.js +277 -307
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/dashboard/index.d.ts +295 -14
- package/dist/cli/dashboard/index.js +60 -15
- package/dist/cli/dashboard/index.js.map +1 -1
- package/dist/cli/index.d.ts +10 -16
- package/dist/cli/index.js +94 -47
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/runtime/index.d.ts +52 -23
- package/dist/cli/runtime/index.js +10 -704
- package/dist/cli/runtime/index.js.map +1 -1
- package/dist/cli/scanner/index.d.ts +17 -15
- package/dist/cli/scanner/index.js +8 -639
- package/dist/cli/scanner/index.js.map +1 -1
- package/dist/cli/seed/index.d.ts +16 -12
- package/dist/cli/seed/index.js +12 -773
- package/dist/cli/seed/index.js.map +1 -1
- package/dist/cli/sync/index.d.ts +54 -53
- package/dist/cli/sync/index.js +23 -704
- package/dist/cli/sync/index.js.map +1 -1
- package/dist/cli/terminal.d.ts +9 -8
- package/dist/cli/terminal.js +6 -209
- package/dist/cli/terminal.js.map +1 -1
- package/dist/cli/workflow/index.d.ts +18 -10
- package/dist/cli/workflow/index.js +6 -307
- package/dist/cli/workflow/index.js.map +1 -1
- package/dist/handlers.d.ts +10 -9
- package/dist/handlers.js +6 -38
- package/dist/handlers.js.map +1 -1
- package/dist/index.d.ts +120 -118
- package/dist/index.js +1972 -3125
- package/dist/index.js.map +1 -1
- package/package.json +3 -4
- package/dist/cli/bin.d.ts.map +0 -1
- package/dist/cli/dashboard/App.d.ts +0 -16
- package/dist/cli/dashboard/App.d.ts.map +0 -1
- package/dist/cli/dashboard/App.js +0 -116
- package/dist/cli/dashboard/App.js.map +0 -1
- package/dist/cli/dashboard/components/index.d.ts +0 -70
- package/dist/cli/dashboard/components/index.d.ts.map +0 -1
- package/dist/cli/dashboard/components/index.js +0 -192
- package/dist/cli/dashboard/components/index.js.map +0 -1
- package/dist/cli/dashboard/hooks/index.d.ts +0 -76
- package/dist/cli/dashboard/hooks/index.d.ts.map +0 -1
- package/dist/cli/dashboard/hooks/index.js +0 -201
- package/dist/cli/dashboard/hooks/index.js.map +0 -1
- package/dist/cli/dashboard/index.d.ts.map +0 -1
- package/dist/cli/dashboard/types.d.ts +0 -84
- package/dist/cli/dashboard/types.d.ts.map +0 -1
- package/dist/cli/dashboard/types.js +0 -5
- package/dist/cli/dashboard/types.js.map +0 -1
- package/dist/cli/dashboard/views/index.d.ts +0 -51
- package/dist/cli/dashboard/views/index.d.ts.map +0 -1
- package/dist/cli/dashboard/views/index.js +0 -72
- package/dist/cli/dashboard/views/index.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/runtime/index.d.ts.map +0 -1
- package/dist/cli/scanner/index.d.ts.map +0 -1
- package/dist/cli/seed/index.d.ts.map +0 -1
- package/dist/cli/sync/index.d.ts.map +0 -1
- package/dist/cli/terminal.d.ts.map +0 -1
- package/dist/cli/workflow/index.d.ts.map +0 -1
- package/dist/errors.d.ts +0 -43
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -47
- package/dist/errors.js.map +0 -1
- package/dist/handlers.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/types.d.ts +0 -276
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -12
- package/dist/types.js.map +0 -1
package/dist/cli/bin.js
CHANGED
|
@@ -1,41 +1,36 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
seed: 'Run seed files',
|
|
15
|
-
workflow: 'Execute workflows',
|
|
16
|
-
sync: 'Synchronize data',
|
|
17
|
-
dashboard: 'Launch dashboard',
|
|
2
|
+
|
|
3
|
+
// cli/bin.ts
|
|
4
|
+
import { existsSync } from "fs";
|
|
5
|
+
import { resolve } from "path";
|
|
6
|
+
var CLI_VERSION = "0.1.0";
|
|
7
|
+
var COMMANDS = ["scan", "seed", "workflow", "sync", "dashboard"];
|
|
8
|
+
var COMMAND_DESCRIPTIONS = {
|
|
9
|
+
scan: "Scan project for schemas",
|
|
10
|
+
seed: "Run seed files",
|
|
11
|
+
workflow: "Execute workflows",
|
|
12
|
+
sync: "Synchronize data",
|
|
13
|
+
dashboard: "Launch dashboard"
|
|
18
14
|
};
|
|
19
|
-
// Main help text
|
|
20
15
|
function getMainHelp() {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
16
|
+
let help = "Usage: db4ai [options] [command]\n\n";
|
|
17
|
+
help += "Commands:\n";
|
|
18
|
+
for (const cmd of COMMANDS) {
|
|
19
|
+
help += ` ${cmd.padEnd(12)} ${COMMAND_DESCRIPTIONS[cmd]}
|
|
20
|
+
`;
|
|
21
|
+
}
|
|
22
|
+
help += "\nGlobal Options:\n";
|
|
23
|
+
help += " --version, -v Show version number\n";
|
|
24
|
+
help += " --help, -h Show help\n";
|
|
25
|
+
help += " --config <file> Path to config file\n";
|
|
26
|
+
help += " --verbose Enable verbose output\n";
|
|
27
|
+
help += " --quiet Suppress output\n";
|
|
28
|
+
help += " --no-color Disable colored output\n";
|
|
29
|
+
help += " --json Output as JSON\n";
|
|
30
|
+
return help;
|
|
35
31
|
}
|
|
36
|
-
// Command-specific help
|
|
37
32
|
function getScanHelp() {
|
|
38
|
-
|
|
33
|
+
return `Usage: db4ai scan [options]
|
|
39
34
|
|
|
40
35
|
Scan project for schemas
|
|
41
36
|
|
|
@@ -48,7 +43,7 @@ Options:
|
|
|
48
43
|
`;
|
|
49
44
|
}
|
|
50
45
|
function getSeedHelp() {
|
|
51
|
-
|
|
46
|
+
return `Usage: db4ai seed [file] [options]
|
|
52
47
|
|
|
53
48
|
Run seed files
|
|
54
49
|
|
|
@@ -61,7 +56,7 @@ Options:
|
|
|
61
56
|
`;
|
|
62
57
|
}
|
|
63
58
|
function getWorkflowHelp() {
|
|
64
|
-
|
|
59
|
+
return `Usage: db4ai workflow [name] [options]
|
|
65
60
|
|
|
66
61
|
Execute workflows
|
|
67
62
|
|
|
@@ -73,7 +68,7 @@ Options:
|
|
|
73
68
|
`;
|
|
74
69
|
}
|
|
75
70
|
function getSyncHelp() {
|
|
76
|
-
|
|
71
|
+
return `Usage: db4ai sync [subcommand] [options]
|
|
77
72
|
|
|
78
73
|
Synchronize data
|
|
79
74
|
|
|
@@ -89,7 +84,7 @@ Options:
|
|
|
89
84
|
`;
|
|
90
85
|
}
|
|
91
86
|
function getSyncPushHelp() {
|
|
92
|
-
|
|
87
|
+
return `Usage: db4ai sync push [options]
|
|
93
88
|
|
|
94
89
|
Push local changes to remote
|
|
95
90
|
|
|
@@ -100,7 +95,7 @@ Options:
|
|
|
100
95
|
`;
|
|
101
96
|
}
|
|
102
97
|
function getSyncPullHelp() {
|
|
103
|
-
|
|
98
|
+
return `Usage: db4ai sync pull [options]
|
|
104
99
|
|
|
105
100
|
Pull remote changes to local
|
|
106
101
|
|
|
@@ -111,7 +106,7 @@ Options:
|
|
|
111
106
|
`;
|
|
112
107
|
}
|
|
113
108
|
function getDashboardHelp() {
|
|
114
|
-
|
|
109
|
+
return `Usage: db4ai dashboard [options]
|
|
115
110
|
|
|
116
111
|
Launch dashboard
|
|
117
112
|
|
|
@@ -122,297 +117,272 @@ Options:
|
|
|
122
117
|
--help Show help
|
|
123
118
|
`;
|
|
124
119
|
}
|
|
125
|
-
// Find similar commands for typo suggestions
|
|
126
120
|
function findSimilarCommand(input) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
for (let j = 0; j <= a.length; j++) {
|
|
134
|
-
matrix[0][j] = j;
|
|
135
|
-
}
|
|
136
|
-
for (let i = 1; i <= b.length; i++) {
|
|
137
|
-
for (let j = 1; j <= a.length; j++) {
|
|
138
|
-
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
139
|
-
matrix[i][j] = matrix[i - 1][j - 1];
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return matrix[b.length][a.length];
|
|
121
|
+
const threshold = 2;
|
|
122
|
+
function levenshtein(a, b) {
|
|
123
|
+
const matrix = [];
|
|
124
|
+
for (let i = 0; i <= b.length; i++) {
|
|
125
|
+
matrix[i] = [i];
|
|
147
126
|
}
|
|
148
|
-
let
|
|
149
|
-
|
|
150
|
-
for (const cmd of COMMANDS) {
|
|
151
|
-
const distance = levenshtein(input, cmd);
|
|
152
|
-
if (distance < closestDistance && distance <= threshold) {
|
|
153
|
-
closest = cmd;
|
|
154
|
-
closestDistance = distance;
|
|
155
|
-
}
|
|
127
|
+
for (let j = 0; j <= a.length; j++) {
|
|
128
|
+
matrix[0][j] = j;
|
|
156
129
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
help: false,
|
|
168
|
-
args: [],
|
|
169
|
-
verbose: false,
|
|
170
|
-
quiet: false,
|
|
171
|
-
noColor: false,
|
|
172
|
-
json: false,
|
|
173
|
-
};
|
|
174
|
-
let i = 0;
|
|
175
|
-
let foundCommand = false;
|
|
176
|
-
while (i < args.length) {
|
|
177
|
-
const arg = args[i];
|
|
178
|
-
if (!foundCommand) {
|
|
179
|
-
// Global flags before command
|
|
180
|
-
if (arg === '--version' || arg === '-v') {
|
|
181
|
-
result.version = true;
|
|
182
|
-
i++;
|
|
183
|
-
continue;
|
|
184
|
-
}
|
|
185
|
-
if (arg === '--help' || arg === '-h') {
|
|
186
|
-
result.help = true;
|
|
187
|
-
i++;
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
if (arg === '--config') {
|
|
191
|
-
result.config = args[i + 1];
|
|
192
|
-
i += 2;
|
|
193
|
-
continue;
|
|
194
|
-
}
|
|
195
|
-
if (arg === '--verbose') {
|
|
196
|
-
result.verbose = true;
|
|
197
|
-
i++;
|
|
198
|
-
continue;
|
|
199
|
-
}
|
|
200
|
-
if (arg === '--quiet') {
|
|
201
|
-
result.quiet = true;
|
|
202
|
-
i++;
|
|
203
|
-
continue;
|
|
204
|
-
}
|
|
205
|
-
if (arg === '--no-color') {
|
|
206
|
-
result.noColor = true;
|
|
207
|
-
i++;
|
|
208
|
-
continue;
|
|
209
|
-
}
|
|
210
|
-
if (arg === '--json') {
|
|
211
|
-
result.json = true;
|
|
212
|
-
i++;
|
|
213
|
-
continue;
|
|
214
|
-
}
|
|
215
|
-
// Check if it's a command
|
|
216
|
-
if (COMMANDS.includes(arg)) {
|
|
217
|
-
result.command = arg;
|
|
218
|
-
foundCommand = true;
|
|
219
|
-
i++;
|
|
220
|
-
continue;
|
|
221
|
-
}
|
|
222
|
-
// Unknown argument before command - treat as command (will error later)
|
|
223
|
-
if (!arg.startsWith('-')) {
|
|
224
|
-
result.command = arg;
|
|
225
|
-
foundCommand = true;
|
|
226
|
-
i++;
|
|
227
|
-
continue;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
// After command, collect all remaining args
|
|
231
|
-
if (foundCommand) {
|
|
232
|
-
// Check for subcommand (for sync)
|
|
233
|
-
if (result.command === 'sync' && !result.subcommand && !arg.startsWith('-')) {
|
|
234
|
-
if (arg === 'push' || arg === 'pull') {
|
|
235
|
-
result.subcommand = arg;
|
|
236
|
-
i++;
|
|
237
|
-
continue;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
// Check for global options after command
|
|
241
|
-
if (arg === '--verbose') {
|
|
242
|
-
result.verbose = true;
|
|
243
|
-
i++;
|
|
244
|
-
continue;
|
|
245
|
-
}
|
|
246
|
-
if (arg === '--quiet') {
|
|
247
|
-
result.quiet = true;
|
|
248
|
-
i++;
|
|
249
|
-
continue;
|
|
250
|
-
}
|
|
251
|
-
if (arg === '--help' || arg === '-h') {
|
|
252
|
-
result.help = true;
|
|
253
|
-
i++;
|
|
254
|
-
continue;
|
|
255
|
-
}
|
|
256
|
-
if (arg === '--json') {
|
|
257
|
-
result.json = true;
|
|
258
|
-
i++;
|
|
259
|
-
continue;
|
|
260
|
-
}
|
|
261
|
-
result.args.push(arg);
|
|
130
|
+
for (let i = 1; i <= b.length; i++) {
|
|
131
|
+
for (let j = 1; j <= a.length; j++) {
|
|
132
|
+
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
133
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
134
|
+
} else {
|
|
135
|
+
matrix[i][j] = Math.min(
|
|
136
|
+
matrix[i - 1][j - 1] + 1,
|
|
137
|
+
matrix[i][j - 1] + 1,
|
|
138
|
+
matrix[i - 1][j] + 1
|
|
139
|
+
);
|
|
262
140
|
}
|
|
263
|
-
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return matrix[b.length][a.length];
|
|
144
|
+
}
|
|
145
|
+
let closest = null;
|
|
146
|
+
let closestDistance = Infinity;
|
|
147
|
+
for (const cmd of COMMANDS) {
|
|
148
|
+
const distance = levenshtein(input, cmd);
|
|
149
|
+
if (distance < closestDistance && distance <= threshold) {
|
|
150
|
+
closest = cmd;
|
|
151
|
+
closestDistance = distance;
|
|
264
152
|
}
|
|
265
|
-
|
|
153
|
+
}
|
|
154
|
+
return closest;
|
|
266
155
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
156
|
+
function parseArgs(args) {
|
|
157
|
+
const result = {
|
|
158
|
+
version: false,
|
|
159
|
+
help: false,
|
|
160
|
+
args: [],
|
|
161
|
+
verbose: false,
|
|
162
|
+
quiet: false,
|
|
163
|
+
noColor: false,
|
|
164
|
+
json: false
|
|
165
|
+
};
|
|
166
|
+
let i = 0;
|
|
167
|
+
let foundCommand = false;
|
|
168
|
+
while (i < args.length) {
|
|
169
|
+
const arg = args[i];
|
|
170
|
+
if (!foundCommand) {
|
|
171
|
+
if (arg === "--version" || arg === "-v") {
|
|
172
|
+
result.version = true;
|
|
173
|
+
i++;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (arg === "--help" || arg === "-h") {
|
|
177
|
+
result.help = true;
|
|
178
|
+
i++;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (arg === "--config") {
|
|
182
|
+
result.config = args[i + 1];
|
|
183
|
+
i += 2;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (arg === "--verbose") {
|
|
187
|
+
result.verbose = true;
|
|
188
|
+
i++;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (arg === "--quiet") {
|
|
192
|
+
result.quiet = true;
|
|
193
|
+
i++;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (arg === "--no-color") {
|
|
197
|
+
result.noColor = true;
|
|
198
|
+
i++;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (arg === "--json") {
|
|
202
|
+
result.json = true;
|
|
203
|
+
i++;
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (COMMANDS.includes(arg)) {
|
|
207
|
+
result.command = arg;
|
|
208
|
+
foundCommand = true;
|
|
209
|
+
i++;
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
if (!arg.startsWith("-")) {
|
|
213
|
+
result.command = arg;
|
|
214
|
+
foundCommand = true;
|
|
215
|
+
i++;
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
273
218
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
if (arg
|
|
277
|
-
|
|
278
|
-
|
|
219
|
+
if (foundCommand) {
|
|
220
|
+
if (result.command === "sync" && !result.subcommand && !arg.startsWith("-")) {
|
|
221
|
+
if (arg === "push" || arg === "pull") {
|
|
222
|
+
result.subcommand = arg;
|
|
223
|
+
i++;
|
|
224
|
+
continue;
|
|
279
225
|
}
|
|
226
|
+
}
|
|
227
|
+
if (arg === "--verbose") {
|
|
228
|
+
result.verbose = true;
|
|
229
|
+
i++;
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
if (arg === "--quiet") {
|
|
233
|
+
result.quiet = true;
|
|
234
|
+
i++;
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
if (arg === "--help" || arg === "-h") {
|
|
238
|
+
result.help = true;
|
|
239
|
+
i++;
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
if (arg === "--json") {
|
|
243
|
+
result.json = true;
|
|
244
|
+
i++;
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
result.args.push(arg);
|
|
280
248
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
249
|
+
i++;
|
|
250
|
+
}
|
|
251
|
+
return result;
|
|
284
252
|
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
253
|
+
async function handleScan(args, streams) {
|
|
254
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
255
|
+
streams.stdout.write(getScanHelp());
|
|
256
|
+
return 0;
|
|
257
|
+
}
|
|
258
|
+
for (const arg of args) {
|
|
259
|
+
if (arg.startsWith("--") && !["--root", "--include", "--exclude", "--json", "--verbose", "--quiet"].includes(arg)) {
|
|
260
|
+
streams.stderr.write(`Unknown option: ${arg}
|
|
261
|
+
`);
|
|
262
|
+
return 2;
|
|
290
263
|
}
|
|
291
|
-
|
|
292
|
-
|
|
264
|
+
}
|
|
265
|
+
streams.stdout.write("Scanning...\n");
|
|
266
|
+
return 0;
|
|
267
|
+
}
|
|
268
|
+
async function handleSeed(args, streams) {
|
|
269
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
270
|
+
streams.stdout.write(getSeedHelp());
|
|
293
271
|
return 0;
|
|
272
|
+
}
|
|
273
|
+
streams.stdout.write("Seeding...\n");
|
|
274
|
+
return 0;
|
|
294
275
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
streams.stdout.write(getWorkflowHelp());
|
|
299
|
-
return 0;
|
|
300
|
-
}
|
|
301
|
-
// Actual workflow implementation would go here
|
|
302
|
-
streams.stdout.write('Running workflow...\n');
|
|
276
|
+
async function handleWorkflow(args, streams) {
|
|
277
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
278
|
+
streams.stdout.write(getWorkflowHelp());
|
|
303
279
|
return 0;
|
|
280
|
+
}
|
|
281
|
+
streams.stdout.write("Running workflow...\n");
|
|
282
|
+
return 0;
|
|
304
283
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
if (
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
}
|
|
314
|
-
else {
|
|
315
|
-
streams.stdout.write(getSyncHelp());
|
|
316
|
-
}
|
|
317
|
-
return 0;
|
|
318
|
-
}
|
|
319
|
-
// Actual sync implementation would go here
|
|
320
|
-
if (subcommand) {
|
|
321
|
-
streams.stdout.write(`Syncing (${subcommand})...\n`);
|
|
322
|
-
}
|
|
323
|
-
else {
|
|
324
|
-
streams.stdout.write('Syncing...\n');
|
|
284
|
+
async function handleSync(args, subcommand, streams) {
|
|
285
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
286
|
+
if (subcommand === "push") {
|
|
287
|
+
streams.stdout.write(getSyncPushHelp());
|
|
288
|
+
} else if (subcommand === "pull") {
|
|
289
|
+
streams.stdout.write(getSyncPullHelp());
|
|
290
|
+
} else {
|
|
291
|
+
streams.stdout.write(getSyncHelp());
|
|
325
292
|
}
|
|
326
293
|
return 0;
|
|
294
|
+
}
|
|
295
|
+
if (subcommand) {
|
|
296
|
+
streams.stdout.write(`Syncing (${subcommand})...
|
|
297
|
+
`);
|
|
298
|
+
} else {
|
|
299
|
+
streams.stdout.write("Syncing...\n");
|
|
300
|
+
}
|
|
301
|
+
return 0;
|
|
327
302
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
streams.stdout.write(getDashboardHelp());
|
|
332
|
-
return 0;
|
|
333
|
-
}
|
|
334
|
-
// Actual dashboard implementation would go here
|
|
335
|
-
streams.stdout.write('Launching dashboard...\n');
|
|
303
|
+
async function handleDashboard(args, streams) {
|
|
304
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
305
|
+
streams.stdout.write(getDashboardHelp());
|
|
336
306
|
return 0;
|
|
307
|
+
}
|
|
308
|
+
streams.stdout.write("Launching dashboard...\n");
|
|
309
|
+
return 0;
|
|
337
310
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
const parsed = parseArgs(args);
|
|
350
|
-
// Handle version
|
|
351
|
-
if (parsed.version) {
|
|
352
|
-
if (parsed.json) {
|
|
353
|
-
streams.stdout.write(JSON.stringify({ version: CLI_VERSION }) + '\n');
|
|
354
|
-
}
|
|
355
|
-
else {
|
|
356
|
-
streams.stdout.write(CLI_VERSION + '\n');
|
|
357
|
-
}
|
|
358
|
-
return 0;
|
|
359
|
-
}
|
|
360
|
-
// Check for config file if specified - do this early, before help
|
|
361
|
-
// Only error on missing config if it's a custom config file (not default db4.config.ts/js)
|
|
362
|
-
if (parsed.config) {
|
|
363
|
-
const configPath = resolve(process.cwd(), parsed.config);
|
|
364
|
-
const isDefaultConfig = parsed.config === 'db4.config.ts' || parsed.config === 'db4.config.js';
|
|
365
|
-
if (!existsSync(configPath) && !isDefaultConfig) {
|
|
366
|
-
streams.stderr.write(`Config file not found: ${parsed.config}\n`);
|
|
367
|
-
return 1;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
// Handle help (no command)
|
|
371
|
-
if (parsed.help && !parsed.command) {
|
|
372
|
-
streams.stdout.write(getMainHelp());
|
|
373
|
-
return 0;
|
|
374
|
-
}
|
|
375
|
-
// No command - show help
|
|
376
|
-
if (!parsed.command) {
|
|
377
|
-
streams.stdout.write(getMainHelp());
|
|
378
|
-
return 0;
|
|
311
|
+
async function run(args, options = {}) {
|
|
312
|
+
const streams = {
|
|
313
|
+
stdout: options.stdout || process.stdout,
|
|
314
|
+
stderr: options.stderr || process.stderr
|
|
315
|
+
};
|
|
316
|
+
const parsed = parseArgs(args);
|
|
317
|
+
if (parsed.version) {
|
|
318
|
+
if (parsed.json) {
|
|
319
|
+
streams.stdout.write(JSON.stringify({ version: CLI_VERSION }) + "\n");
|
|
320
|
+
} else {
|
|
321
|
+
streams.stdout.write(CLI_VERSION + "\n");
|
|
379
322
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
323
|
+
return 0;
|
|
324
|
+
}
|
|
325
|
+
if (parsed.config) {
|
|
326
|
+
const configPath = resolve(process.cwd(), parsed.config);
|
|
327
|
+
const isDefaultConfig = parsed.config === "db4.config.ts" || parsed.config === "db4.config.js";
|
|
328
|
+
if (!existsSync(configPath) && !isDefaultConfig) {
|
|
329
|
+
streams.stderr.write(`Config file not found: ${parsed.config}
|
|
330
|
+
`);
|
|
331
|
+
return 1;
|
|
389
332
|
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
return 1;
|
|
333
|
+
}
|
|
334
|
+
if (parsed.help && !parsed.command) {
|
|
335
|
+
streams.stdout.write(getMainHelp());
|
|
336
|
+
return 0;
|
|
337
|
+
}
|
|
338
|
+
if (!parsed.command) {
|
|
339
|
+
streams.stdout.write(getMainHelp());
|
|
340
|
+
return 0;
|
|
341
|
+
}
|
|
342
|
+
if (!COMMANDS.includes(parsed.command)) {
|
|
343
|
+
const similar = findSimilarCommand(parsed.command);
|
|
344
|
+
streams.stderr.write(`Unknown command: ${parsed.command}
|
|
345
|
+
`);
|
|
346
|
+
if (similar) {
|
|
347
|
+
streams.stderr.write(`Did you mean '${similar}'?
|
|
348
|
+
`);
|
|
407
349
|
}
|
|
350
|
+
streams.stderr.write(`Run 'db4ai --help' for usage.
|
|
351
|
+
`);
|
|
352
|
+
return 1;
|
|
353
|
+
}
|
|
354
|
+
const commandArgs = parsed.help ? ["--help", ...parsed.args] : parsed.args;
|
|
355
|
+
switch (parsed.command) {
|
|
356
|
+
case "scan":
|
|
357
|
+
return handleScan(commandArgs, streams);
|
|
358
|
+
case "seed":
|
|
359
|
+
return handleSeed(commandArgs, streams);
|
|
360
|
+
case "workflow":
|
|
361
|
+
return handleWorkflow(commandArgs, streams);
|
|
362
|
+
case "sync":
|
|
363
|
+
return handleSync(commandArgs, parsed.subcommand, streams);
|
|
364
|
+
case "dashboard":
|
|
365
|
+
return handleDashboard(commandArgs, streams);
|
|
366
|
+
default:
|
|
367
|
+
streams.stderr.write(`Unknown command: ${parsed.command}
|
|
368
|
+
`);
|
|
369
|
+
return 1;
|
|
370
|
+
}
|
|
408
371
|
}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
process.
|
|
413
|
-
|
|
414
|
-
run(args).then((code) => {
|
|
415
|
-
process.exit(code);
|
|
416
|
-
});
|
|
372
|
+
if (process.argv[1] === import.meta.url.replace("file://", "") || process.argv[1]?.endsWith("/bin.ts") || process.argv[1]?.endsWith("/bin.js")) {
|
|
373
|
+
const args = process.argv.slice(2);
|
|
374
|
+
run(args).then((code) => {
|
|
375
|
+
process.exit(code);
|
|
376
|
+
});
|
|
417
377
|
}
|
|
378
|
+
export {
|
|
379
|
+
CLI_VERSION,
|
|
380
|
+
handleDashboard,
|
|
381
|
+
handleScan,
|
|
382
|
+
handleSeed,
|
|
383
|
+
handleSync,
|
|
384
|
+
handleWorkflow,
|
|
385
|
+
parseArgs,
|
|
386
|
+
run
|
|
387
|
+
};
|
|
418
388
|
//# sourceMappingURL=bin.js.map
|