aboutsummaryrefslogtreecommitdiff
path: root/packages/db/src/core/cli/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/db/src/core/cli/index.ts')
-rw-r--r--packages/db/src/core/cli/index.ts82
1 files changed, 82 insertions, 0 deletions
diff --git a/packages/db/src/core/cli/index.ts b/packages/db/src/core/cli/index.ts
new file mode 100644
index 000000000..531b016a6
--- /dev/null
+++ b/packages/db/src/core/cli/index.ts
@@ -0,0 +1,82 @@
+import type { AstroConfig } from 'astro';
+import type { Arguments } from 'yargs-parser';
+import { resolveDbConfig } from '../load-file.js';
+import { printHelp } from './print-help.js';
+
+export async function cli({
+ flags,
+ config: astroConfig,
+}: {
+ flags: Arguments;
+ config: AstroConfig;
+}) {
+ const args = flags._ as string[];
+ // Most commands are `astro db foo`, but for now login/logout
+ // are also handled by this package, so first check if this is a db command.
+ const command = args[2] === 'db' ? args[3] : args[2];
+ const { dbConfig } = await resolveDbConfig(astroConfig);
+
+ switch (command) {
+ case 'shell': {
+ const { cmd } = await import('./commands/shell/index.js');
+ return await cmd({ astroConfig, dbConfig, flags });
+ }
+ case 'gen': {
+ console.log('"astro db gen" is no longer needed! Visit the docs for more information.');
+ return;
+ }
+ case 'sync': {
+ console.log('"astro db sync" is no longer needed! Visit the docs for more information.');
+ return;
+ }
+ case 'push': {
+ const { cmd } = await import('./commands/push/index.js');
+ return await cmd({ astroConfig, dbConfig, flags });
+ }
+ case 'verify': {
+ const { cmd } = await import('./commands/verify/index.js');
+ return await cmd({ astroConfig, dbConfig, flags });
+ }
+ case 'execute': {
+ const { cmd } = await import('./commands/execute/index.js');
+ return await cmd({ astroConfig, dbConfig, flags });
+ }
+ case 'login': {
+ const { cmd } = await import('./commands/login/index.js');
+ return await cmd({ astroConfig, dbConfig, flags });
+ }
+ case 'logout': {
+ const { cmd } = await import('./commands/logout/index.js');
+ return await cmd();
+ }
+ case 'link': {
+ const { cmd } = await import('./commands/link/index.js');
+ return await cmd();
+ }
+ default: {
+ if (command != null) {
+ console.error(`Unknown command: ${command}`);
+ }
+ printHelp({
+ commandName: 'astro db',
+ usage: '[command] [...flags]',
+ headline: ' ',
+ tables: {
+ Commands: [
+ ['push', 'Push table schema updates to Astro Studio.'],
+ ['verify', 'Test schema updates /w Astro Studio (good for CI).'],
+ [
+ 'astro db execute <file-path>',
+ 'Execute a ts/js file using astro:db. Use --remote to connect to Studio.',
+ ],
+ [
+ 'astro db shell --query <sql-string>',
+ 'Execute a SQL string. Use --remote to connect to Studio.',
+ ],
+ ],
+ },
+ });
+ return;
+ }
+ }
+}