@superfunctions/cli 0.1.0

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.
Files changed (54) hide show
  1. package/README.md +248 -0
  2. package/dist/cli.d.ts +6 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +114 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/generate.d.ts +5 -0
  7. package/dist/commands/generate.d.ts.map +1 -0
  8. package/dist/commands/generate.js +233 -0
  9. package/dist/commands/generate.js.map +1 -0
  10. package/dist/commands/status.d.ts +5 -0
  11. package/dist/commands/status.d.ts.map +1 -0
  12. package/dist/commands/status.js +148 -0
  13. package/dist/commands/status.js.map +1 -0
  14. package/dist/index.d.ts +39 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +9 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/types/library-schema.d.ts +24 -0
  19. package/dist/types/library-schema.d.ts.map +1 -0
  20. package/dist/types/library-schema.js +2 -0
  21. package/dist/types/library-schema.js.map +1 -0
  22. package/dist/utils/adapter-helper.d.ts +21 -0
  23. package/dist/utils/adapter-helper.d.ts.map +1 -0
  24. package/dist/utils/adapter-helper.js +217 -0
  25. package/dist/utils/adapter-helper.js.map +1 -0
  26. package/dist/utils/config.d.ts +4 -0
  27. package/dist/utils/config.d.ts.map +1 -0
  28. package/dist/utils/config.js +31 -0
  29. package/dist/utils/config.js.map +1 -0
  30. package/dist/utils/discover-configs.d.ts +11 -0
  31. package/dist/utils/discover-configs.d.ts.map +1 -0
  32. package/dist/utils/discover-configs.js +76 -0
  33. package/dist/utils/discover-configs.js.map +1 -0
  34. package/dist/utils/generators.d.ts +31 -0
  35. package/dist/utils/generators.d.ts.map +1 -0
  36. package/dist/utils/generators.js +302 -0
  37. package/dist/utils/generators.js.map +1 -0
  38. package/dist/utils/introspection.d.ts +55 -0
  39. package/dist/utils/introspection.d.ts.map +1 -0
  40. package/dist/utils/introspection.js +263 -0
  41. package/dist/utils/introspection.js.map +1 -0
  42. package/dist/utils/libraries.d.ts +7 -0
  43. package/dist/utils/libraries.d.ts.map +1 -0
  44. package/dist/utils/libraries.js +28 -0
  45. package/dist/utils/libraries.js.map +1 -0
  46. package/dist/utils/load-library-config.d.ts +6 -0
  47. package/dist/utils/load-library-config.d.ts.map +1 -0
  48. package/dist/utils/load-library-config.js +34 -0
  49. package/dist/utils/load-library-config.js.map +1 -0
  50. package/dist/utils/schema-diff.d.ts +48 -0
  51. package/dist/utils/schema-diff.d.ts.map +1 -0
  52. package/dist/utils/schema-diff.js +105 -0
  53. package/dist/utils/schema-diff.js.map +1 -0
  54. package/package.json +54 -0
package/README.md ADDED
@@ -0,0 +1,248 @@
1
+ # @superfunctions/cli
2
+
3
+ Command-line tool for managing Superfunctions library schemas and migrations.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @superfunctions/cli --save-dev
9
+
10
+ # Plus your ORM of choice (peer dependencies)
11
+ npm install drizzle-orm # For Drizzle
12
+ npm install @prisma/client # For Prisma
13
+ npm install kysely # For Kysely
14
+ ```
15
+
16
+ ## Quick Start
17
+
18
+ ### 1. Initialize CLI Configuration
19
+
20
+ ```bash
21
+ npx superfunctions init
22
+ ```
23
+
24
+ This creates a `superfunctions.config.js` with adapter configuration:
25
+
26
+ ```javascript
27
+ import { defineConfig } from '@superfunctions/cli';
28
+
29
+ export default defineConfig({
30
+ adapter: {
31
+ type: 'drizzle',
32
+ drizzle: {
33
+ dialect: 'postgres',
34
+ connectionString: process.env.DATABASE_URL,
35
+ }
36
+ },
37
+ migrationsDir: './migrations',
38
+ });
39
+ ```
40
+
41
+ ### 2. Create Library Config Files
42
+
43
+ For each @superfunctions library you use, create a config file following the pattern: `<library-name>.config.ts`
44
+
45
+ **conduct.config.ts:**
46
+
47
+ ```typescript
48
+ import type { ConductSchemaConfig } from 'conduct';
49
+
50
+ export const config: ConductSchemaConfig = {
51
+ namespace: 'conduct',
52
+
53
+ // Optional: Customize table/field names
54
+ models: {
55
+ project: {
56
+ modelName: 'projects',
57
+ fields: {
58
+ slug: 'project_slug',
59
+ }
60
+ },
61
+ },
62
+
63
+ // Optional: Add custom fields
64
+ additionalFields: {
65
+ project: {
66
+ customField: { type: 'string', required: false },
67
+ },
68
+ },
69
+
70
+ // Optional: Enable plugins
71
+ plugins: [
72
+ // conductAuditPlugin(),
73
+ // conductMetricsPlugin(),
74
+ ],
75
+ };
76
+
77
+ export default config;
78
+ ```
79
+
80
+ **authfn.config.ts:**
81
+
82
+ ```typescript
83
+ import type { AuthFnSchemaConfig } from '@superfunctions/authfn';
84
+
85
+ export const config: AuthFnSchemaConfig = {
86
+ namespace: 'auth',
87
+
88
+ models: {
89
+ user: {
90
+ modelName: 'users',
91
+ },
92
+ },
93
+
94
+ additionalFields: {
95
+ user: {
96
+ role: { type: 'string', required: true },
97
+ },
98
+ },
99
+
100
+ plugins: [
101
+ // authFnTwoFactorPlugin(),
102
+ ],
103
+ };
104
+
105
+ export default config;
106
+ ```
107
+
108
+ ### 3. Generate Migrations
109
+
110
+ The CLI auto-discovers your library configs:
111
+
112
+ ```bash
113
+ npx superfunctions generate
114
+ ```
115
+
116
+ **Output:**
117
+ ```
118
+ šŸ” Discovering library configurations...
119
+ šŸ“¦ Found 2 library config(s):
120
+ - conduct (./conduct.config.ts)
121
+ - authfn (./authfn.config.ts)
122
+
123
+ šŸ“– Loading conduct config...
124
+ āœ… Generated schema (v1, 8 tables)
125
+
126
+ šŸ“– Loading authfn config...
127
+ āœ… Generated schema (v1, 4 tables)
128
+
129
+ šŸ’¾ Writing migration files...
130
+ āœ… ./migrations/1234567890_conduct_v1.sql
131
+ āœ… ./migrations/1234567891_authfn_v1.sql
132
+
133
+ ✨ Generated 2 migration file(s)
134
+
135
+ šŸ’” Next steps:
136
+ 1. Review the generated migration files
137
+ 2. Apply migrations using your ORM tool:
138
+ npx drizzle-kit push
139
+ ```
140
+
141
+ ### 4. Apply Migrations
142
+
143
+ Use your ORM tool to apply migrations:
144
+
145
+ ```bash
146
+ npx drizzle-kit push
147
+ # or
148
+ npx prisma migrate deploy
149
+ # or
150
+ npx kysely migrate latest
151
+ ```
152
+
153
+ ## Commands
154
+
155
+ ### `init`
156
+
157
+ Initialize configuration file.
158
+
159
+ ```bash
160
+ npx superfunctions init [--force]
161
+ ```
162
+
163
+ ### `generate [library]`
164
+
165
+ Generate migration files from schema diffs.
166
+
167
+ ```bash
168
+ # Generate for all libraries
169
+ npx superfunctions generate
170
+
171
+ # Generate for specific library
172
+ npx superfunctions generate conduct
173
+
174
+ # Dry run (preview without writing)
175
+ npx superfunctions generate --dry-run
176
+ ```
177
+
178
+ ### `status`
179
+
180
+ Check current schema versions and migration status.
181
+
182
+ ```bash
183
+ npx superfunctions status
184
+ ```
185
+
186
+ ### `validate`
187
+
188
+ Validate configuration file structure.
189
+
190
+ ```bash
191
+ npx superfunctions validate
192
+ ```
193
+
194
+ ## Library Config Files
195
+
196
+ ### Naming Convention
197
+
198
+ `<library-name>.config.{ts,js,mjs}`
199
+
200
+ ### Supported Locations (Auto-discovered)
201
+
202
+ - Project root: `conduct.config.ts`
203
+ - src directory: `src/conduct.config.ts`
204
+ - lib directory: `lib/conduct.config.ts`
205
+ - server directory: `server/conduct.config.ts`
206
+
207
+ ### Config Structure
208
+
209
+ Each config file should export the library's configuration object. The structure is library-specific but generally includes:
210
+
211
+ - `namespace` - Table prefix for isolation
212
+ - `models` - Custom table/field names
213
+ - `additionalFields` - Extra fields per table
214
+ - `plugins` - Enabled plugins that add tables
215
+
216
+ ## Advanced: Manual Discovery Paths
217
+
218
+ If your configs are in non-standard locations:
219
+
220
+ ```javascript
221
+ // superfunctions.config.js
222
+ export default defineConfig({
223
+ adapter: { /* ... */ },
224
+
225
+ // Explicitly specify config paths
226
+ discoverConfigs: [
227
+ './lib/server/custom-conduct.config.ts',
228
+ './config/authfn.ts',
229
+ ],
230
+ });
231
+ ```
232
+
233
+ ## How It Works
234
+
235
+ 1. **Discovery**: CLI finds library config files using naming convention
236
+ 2. **Loading**: Each config is loaded (TypeScript supported via jiti)
237
+ 3. **Schema Generation**: Library's `getSchema(config)` function is called
238
+ 4. **Introspection**: Current database state is compared with desired state
239
+ 5. **Migration Generation**: ORM-specific migration files are created
240
+ 6. **Version Tracking**: Schema versions are stored in database
241
+
242
+ ## Configuration
243
+
244
+ See full configuration examples and options in the [documentation](https://superfunctions.dev/docs/cli).
245
+
246
+ ## License
247
+
248
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @superfunctions/cli - CLI tool for schema management
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;GAEG"}
package/dist/cli.js ADDED
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @superfunctions/cli - CLI tool for schema management
4
+ */
5
+ import { Command } from 'commander';
6
+ const program = new Command();
7
+ program
8
+ .name('superfunctions')
9
+ .description('CLI tool for Superfunctions schema management and migrations')
10
+ .version('1.0.0');
11
+ program
12
+ .command('status')
13
+ .description('Check schema version status for all libraries')
14
+ .option('-c, --config <path>', 'Path to superfunctions config', 'superfunctions.config.js')
15
+ .action(async (opts) => {
16
+ const { showStatus } = await import('./commands/status.js');
17
+ try {
18
+ await showStatus(opts.config);
19
+ }
20
+ catch (e) {
21
+ console.error('āŒ Error:', e.message);
22
+ process.exitCode = 1;
23
+ }
24
+ });
25
+ program
26
+ .command('init')
27
+ .description('Initialize a superfunctions.config.js in the current directory')
28
+ .option('-f, --force', 'Overwrite if exists', false)
29
+ .action(async (opts) => {
30
+ const fs = await import('node:fs');
31
+ const path = await import('node:path');
32
+ const target = path.resolve(process.cwd(), 'superfunctions.config.js');
33
+ if (fs.existsSync(target) && !opts.force) {
34
+ console.log('Config already exists. Use --force to overwrite.');
35
+ return;
36
+ }
37
+ const template = `// superfunctions.config.js\n// Minimal JS config (use JS to avoid runtime TS loader requirements)\nimport { defineConfig } from '@superfunctions/cli';\n\nexport default defineConfig({\n adapter: { type: 'drizzle' },\n migrationsDir: './migrations',\n libraries: { }\n});\n`;
38
+ fs.writeFileSync(target, template, 'utf8');
39
+ console.log('Created superfunctions.config.js');
40
+ });
41
+ program
42
+ .command('generate [library]')
43
+ .description('Generate migrations for libraries')
44
+ .option('-c, --config <path>', 'Path to superfunctions config', 'superfunctions.config.js')
45
+ .option('--dry-run', 'Show what would be generated without writing files', false)
46
+ .action(async (library, options) => {
47
+ const { generateMigrations } = await import('./commands/generate.js');
48
+ try {
49
+ await generateMigrations(options.config, library, options.dryRun);
50
+ }
51
+ catch (e) {
52
+ console.error('āŒ Error:', e.message);
53
+ process.exitCode = 1;
54
+ }
55
+ });
56
+ program
57
+ .command('validate')
58
+ .description('Validate configuration file structure')
59
+ .option('-c, --config <path>', 'Path to superfunctions config', 'superfunctions.config.js')
60
+ .action(async (opts) => {
61
+ const { loadConfig } = await import('./utils/config.js');
62
+ try {
63
+ const cfg = await loadConfig(opts.config);
64
+ if (!cfg) {
65
+ console.log('Config not found');
66
+ return;
67
+ }
68
+ if (!cfg.adapter?.type)
69
+ throw new Error('adapter.type is required');
70
+ if (!cfg.migrationsDir)
71
+ throw new Error('migrationsDir is required');
72
+ console.log('āœ… Config is valid');
73
+ }
74
+ catch (e) {
75
+ console.error('āŒ Config invalid:', e.message);
76
+ process.exitCode = 1;
77
+ }
78
+ });
79
+ program
80
+ .command('migrate')
81
+ .description('Apply migrations using your ORM tool')
82
+ .option('-c, --config <path>', 'Path to superfunctions config', 'superfunctions.config.js')
83
+ .action(async (opts) => {
84
+ const { loadConfig } = await import('./utils/config.js');
85
+ try {
86
+ const cfg = await loadConfig(opts.config);
87
+ if (!cfg) {
88
+ console.log('āŒ No config found');
89
+ return;
90
+ }
91
+ const adapterType = cfg.adapter?.type;
92
+ console.log('šŸš€ To apply migrations, use your ORM tool:\n');
93
+ if (adapterType === 'drizzle') {
94
+ console.log(' npx drizzle-kit push');
95
+ console.log(' # or: npx drizzle-kit migrate');
96
+ }
97
+ else if (adapterType === 'prisma') {
98
+ console.log(' npx prisma migrate deploy');
99
+ }
100
+ else if (adapterType === 'kysely') {
101
+ console.log(' npx kysely migrate latest');
102
+ }
103
+ else {
104
+ console.log(' (Unknown adapter type)');
105
+ }
106
+ console.log('\nšŸ’” This ensures migrations are applied using your ORM\'s official tools.');
107
+ }
108
+ catch (e) {
109
+ console.error('āŒ Error:', e.message);
110
+ process.exitCode = 1;
111
+ }
112
+ });
113
+ program.parse();
114
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generate command - create migration files from schema diffs
3
+ */
4
+ export declare function generateMigrations(configPath: string, libraryFilter?: string, dryRun?: boolean): Promise<void>;
5
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CA4Pf"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Generate command - create migration files from schema diffs
3
+ */
4
+ import fs from 'node:fs';
5
+ import path from 'node:path';
6
+ import { loadConfig } from '../utils/config.js';
7
+ import { createAdapterFromConfig, getRawConnection } from '../utils/adapter-helper.js';
8
+ import { diffTables, createMigrationPlan } from '../utils/schema-diff.js';
9
+ import { generateDrizzleMigration, generatePrismaMigration, generateKyselyMigration, } from '../utils/generators.js';
10
+ import { introspectPostgres, introspectMySQL, introspectSQLite, } from '../utils/introspection.js';
11
+ import { discoverLibraryConfigs } from '../utils/discover-configs.js';
12
+ import { loadLibraryConfig } from '../utils/load-library-config.js';
13
+ export async function generateMigrations(configPath, libraryFilter, dryRun = false) {
14
+ console.log('šŸ”Ø Generating migrations...\n');
15
+ // Load config
16
+ const config = await loadConfig(configPath);
17
+ if (!config) {
18
+ console.log('āŒ No config found. Create one with: superfunctions init');
19
+ process.exitCode = 1;
20
+ return;
21
+ }
22
+ const adapterType = config.adapter?.type;
23
+ if (!adapterType) {
24
+ console.log('āŒ adapter.type is required in config');
25
+ process.exitCode = 1;
26
+ return;
27
+ }
28
+ const migrationsDir = config.migrationsDir ?? './migrations';
29
+ console.log('āœ… Config loaded');
30
+ console.log(` Adapter: ${adapterType}`);
31
+ console.log(` Migrations dir: ${migrationsDir}\n`);
32
+ // Discover library config files
33
+ console.log('šŸ” Discovering library configurations...');
34
+ const discoveredConfigs = await discoverLibraryConfigs(process.cwd(), config.discoverConfigs);
35
+ if (discoveredConfigs.length === 0) {
36
+ console.log('āš ļø No library configurations found');
37
+ console.log(' Create config files: <library-name>.config.ts');
38
+ console.log(' Example: conduct.config.ts, authfn.config.ts');
39
+ process.exitCode = 1;
40
+ return;
41
+ }
42
+ // Filter if specified
43
+ const configsToProcess = libraryFilter
44
+ ? discoveredConfigs.filter(c => c.libraryName === libraryFilter)
45
+ : discoveredConfigs;
46
+ console.log(`šŸ“¦ Found ${configsToProcess.length} library config(s):`);
47
+ for (const cfg of configsToProcess) {
48
+ console.log(` - ${cfg.libraryName} (${cfg.configPath})`);
49
+ }
50
+ console.log('');
51
+ // Load library configs and generate schemas
52
+ const librarySchemas = [];
53
+ for (const discovered of configsToProcess) {
54
+ try {
55
+ console.log(`šŸ“– Loading ${discovered.libraryName} config...`);
56
+ // Load the config file
57
+ const libraryConfig = await loadLibraryConfig(discovered.configPath);
58
+ // Import library's schema generator
59
+ const libraryPackage = await import(discovered.packageName);
60
+ if (!libraryPackage.getSchema) {
61
+ console.log(` āš ļø ${discovered.libraryName} doesn't export getSchema function`);
62
+ console.log(` Skipping...\n`);
63
+ continue;
64
+ }
65
+ // Generate schema from config
66
+ const schema = libraryPackage.getSchema(libraryConfig);
67
+ librarySchemas.push({
68
+ namespace: discovered.libraryName,
69
+ version: schema.version,
70
+ tables: schema.schemas,
71
+ });
72
+ console.log(` āœ… Generated schema (v${schema.version}, ${schema.schemas.length} tables)\n`);
73
+ }
74
+ catch (e) {
75
+ console.error(` āŒ Error loading ${discovered.libraryName}:`, e.message);
76
+ console.log(` Skipping...\n`);
77
+ }
78
+ }
79
+ if (librarySchemas.length === 0) {
80
+ console.log('āŒ No valid schemas generated');
81
+ process.exitCode = 1;
82
+ return;
83
+ }
84
+ // Connect to database
85
+ let connection;
86
+ try {
87
+ console.log('šŸ”Œ Connecting to database...');
88
+ connection = await createAdapterFromConfig(config);
89
+ console.log('āœ… Connected\n');
90
+ }
91
+ catch (e) {
92
+ console.error('āŒ Failed to connect to database:', e.message);
93
+ console.log('\nšŸ’” Tip: Make sure your database is running and connection details are correct');
94
+ process.exitCode = 1;
95
+ return;
96
+ }
97
+ try {
98
+ // Initialize adapter
99
+ await connection.adapter.initialize();
100
+ // Introspect current database schema
101
+ console.log('šŸ” Introspecting database schema...');
102
+ const rawConn = getRawConnection(connection);
103
+ let currentTables;
104
+ if (connection.dialect === 'postgres') {
105
+ currentTables = await introspectPostgres(rawConn, 'public');
106
+ }
107
+ else if (connection.dialect === 'mysql') {
108
+ const dbName = config.adapter?.drizzle?.connectionString?.split('/').pop()?.split('?')[0] ?? 'database';
109
+ currentTables = await introspectMySQL(rawConn, dbName);
110
+ }
111
+ else if (connection.dialect === 'sqlite') {
112
+ currentTables = await introspectSQLite(rawConn);
113
+ }
114
+ else {
115
+ throw new Error(`Unsupported dialect: ${connection.dialect}`);
116
+ }
117
+ console.log(` Found ${currentTables.length} existing tables\n`);
118
+ // Generate migrations for each library
119
+ const generatedFiles = [];
120
+ for (const lib of librarySchemas) {
121
+ console.log(`šŸ“ Analyzing ${lib.namespace}...`);
122
+ // Get current version from database
123
+ const currentVersion = await connection.adapter.getSchemaVersion(lib.namespace);
124
+ console.log(` Current version: ${currentVersion === 0 ? 'not installed' : `v${currentVersion}`}`);
125
+ console.log(` Target version: v${lib.version}`);
126
+ if (currentVersion >= lib.version) {
127
+ console.log(` āœ… Already up-to-date\n`);
128
+ continue;
129
+ }
130
+ // Compare schemas
131
+ const tableDiffs = diffTables(lib.tables, currentTables);
132
+ if (tableDiffs.length === 0) {
133
+ console.log(` ā„¹ļø No schema changes detected\n`);
134
+ continue;
135
+ }
136
+ console.log(` Found ${tableDiffs.length} change(s):`);
137
+ for (const diff of tableDiffs) {
138
+ if (diff.action === 'create') {
139
+ console.log(` - CREATE table ${diff.tableName}`);
140
+ }
141
+ else if (diff.action === 'alter') {
142
+ console.log(` - ALTER table ${diff.tableName}`);
143
+ if (diff.missingColumns && diff.missingColumns.length > 0) {
144
+ console.log(` + Add columns: ${diff.missingColumns.join(', ')}`);
145
+ }
146
+ if (diff.extraColumns && diff.extraColumns.length > 0) {
147
+ console.log(` - Extra columns: ${diff.extraColumns.join(', ')}`);
148
+ }
149
+ }
150
+ else if (diff.action === 'drop') {
151
+ console.log(` - DROP table ${diff.tableName}`);
152
+ }
153
+ }
154
+ // Create migration plan
155
+ const plan = createMigrationPlan(lib.namespace, currentVersion, lib.version, tableDiffs);
156
+ // Generate migration file based on adapter type
157
+ let migrationFile;
158
+ if (adapterType === 'drizzle') {
159
+ migrationFile = generateDrizzleMigration(plan, lib.tables, connection.dialect);
160
+ }
161
+ else if (adapterType === 'prisma') {
162
+ migrationFile = generatePrismaMigration(plan, lib.tables, connection.dialect);
163
+ }
164
+ else if (adapterType === 'kysely') {
165
+ migrationFile = generateKyselyMigration(plan, lib.tables, connection.dialect);
166
+ }
167
+ else {
168
+ console.log(` āš ļø Unsupported adapter type: ${adapterType}`);
169
+ continue;
170
+ }
171
+ generatedFiles.push({
172
+ namespace: lib.namespace,
173
+ filename: migrationFile.filename,
174
+ content: migrationFile.content,
175
+ });
176
+ console.log(` āœ… Generated: ${migrationFile.filename}\n`);
177
+ }
178
+ if (generatedFiles.length === 0) {
179
+ console.log('✨ No migrations needed - all schemas are up-to-date!');
180
+ return;
181
+ }
182
+ // Write files (unless dry run)
183
+ if (dryRun) {
184
+ console.log('šŸ“„ Dry run - showing generated files:\n');
185
+ for (const file of generatedFiles) {
186
+ console.log(`\n${'='.repeat(60)}`);
187
+ console.log(`File: ${file.filename}`);
188
+ console.log('='.repeat(60));
189
+ console.log(file.content);
190
+ }
191
+ console.log(`\n${'='.repeat(60)}\n`);
192
+ console.log('šŸ’” Run without --dry-run to write these files');
193
+ }
194
+ else {
195
+ // Ensure migrations directory exists
196
+ if (!fs.existsSync(migrationsDir)) {
197
+ fs.mkdirSync(migrationsDir, { recursive: true });
198
+ console.log(`šŸ“ Created directory: ${migrationsDir}\n`);
199
+ }
200
+ console.log('šŸ’¾ Writing migration files...\n');
201
+ for (const file of generatedFiles) {
202
+ const fullPath = path.join(migrationsDir, file.filename);
203
+ // For Prisma, need to create directory for migration
204
+ if (adapterType === 'prisma') {
205
+ const migrationDir = path.dirname(fullPath);
206
+ if (!fs.existsSync(migrationDir)) {
207
+ fs.mkdirSync(migrationDir, { recursive: true });
208
+ }
209
+ }
210
+ fs.writeFileSync(fullPath, file.content, 'utf-8');
211
+ console.log(` āœ… ${fullPath}`);
212
+ }
213
+ console.log(`\n✨ Generated ${generatedFiles.length} migration file(s)`);
214
+ console.log('\nšŸ’” Next steps:');
215
+ console.log(' 1. Review the generated migration files');
216
+ console.log(' 2. Apply migrations using your ORM tool:');
217
+ if (adapterType === 'drizzle') {
218
+ console.log(' npx drizzle-kit push');
219
+ }
220
+ else if (adapterType === 'prisma') {
221
+ console.log(' npx prisma migrate deploy');
222
+ }
223
+ else if (adapterType === 'kysely') {
224
+ console.log(' npx kysely migrate latest');
225
+ }
226
+ console.log(' 3. (Optional) Run `superfunctions migrate` to apply via CLI');
227
+ }
228
+ }
229
+ finally {
230
+ await connection.close();
231
+ }
232
+ }
233
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,GAExB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,aAAsB,EACtB,SAAkB,KAAK;IAEvB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7C,cAAc;IACd,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;IACzC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,cAAc,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,aAAa,IAAI,CAAC,CAAC;IAErD,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,MAAM,sBAAsB,CACpD,OAAO,CAAC,GAAG,EAAE,EACb,MAAM,CAAC,eAAe,CACvB,CAAC;IAEF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,MAAM,gBAAgB,GAAG,aAAa;QACpC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,aAAa,CAAC;QAChE,CAAC,CAAC,iBAAiB,CAAC;IAEtB,OAAO,CAAC,GAAG,CAAC,YAAY,gBAAgB,CAAC,MAAM,qBAAqB,CAAC,CAAC;IACtE,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,4CAA4C;IAC5C,MAAM,cAAc,GAIf,EAAE,CAAC;IAER,KAAK,MAAM,UAAU,IAAI,gBAAgB,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,CAAC,WAAW,YAAY,CAAC,CAAC;YAE9D,uBAAuB;YACvB,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAErE,oCAAoC;YACpC,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAE5D,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,UAAU,UAAU,CAAC,WAAW,oCAAoC,CAAC,CAAC;gBAClF,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,8BAA8B;YAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAEvD,cAAc,CAAC,IAAI,CAAC;gBAClB,SAAS,EAAE,UAAU,CAAC,WAAW;gBACjC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,OAAO;aACvB,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;QAC/F,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,sBAAsB,UAAU,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,sBAAsB;IACtB,IAAI,UAAU,CAAC;IACf,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,UAAU,GAAG,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;QAC/F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAEtC,qCAAqC;QACrC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,aAAa,CAAC;QAElB,IAAI,UAAU,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACtC,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,UAAU,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;YACxG,aAAa,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3C,aAAa,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,aAAa,CAAC,MAAM,oBAAoB,CAAC,CAAC;QAElE,uCAAuC;QACvC,MAAM,cAAc,GAAoE,EAAE,CAAC;QAE3F,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,SAAS,KAAK,CAAC,CAAC;YAEhD,oCAAoC;YACpC,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,uBAAuB,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,EAAE,CAAC,CAAC;YACpG,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAElD,IAAI,cAAc,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBACzC,SAAS;YACX,CAAC;YAED,kBAAkB;YAClB,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAEzD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;gBACnD,SAAS;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,CAAC,MAAM,aAAa,CAAC,CAAC;YACxD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBACxD,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBACrD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC1D,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1E,CAAC;oBACD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtD,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1E,CAAC;gBACH,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEzF,gDAAgD;YAChD,IAAI,aAAoD,CAAC;YAEzD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,aAAa,GAAG,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAkB,CAAC,CAAC;YAC5F,CAAC;iBAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,aAAa,GAAG,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAkB,CAAC,CAAC;YAC3F,CAAC;iBAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,aAAa,GAAG,uBAAuB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAkB,CAAC,CAAC;YAC3F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;gBAC/D,SAAS;YACX,CAAC;YAED,cAAc,CAAC,IAAI,CAAC;gBAClB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,OAAO,EAAE,aAAa,CAAC,OAAO;aAC/B,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,mBAAmB,aAAa,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QAED,+BAA+B;QAC/B,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,qCAAqC;YACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,yBAAyB,aAAa,IAAI,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAEzD,qDAAqD;gBACrD,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;oBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBACjC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;gBAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,cAAc,CAAC,MAAM,oBAAoB,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAC3D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Status command - show current schema versions and migration status
3
+ */
4
+ export declare function showStatus(configPath: string): Promise<void>;
5
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkKlE"}