@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.
- package/README.md +248 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +114 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/generate.d.ts +5 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +233 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +148 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/types/library-schema.d.ts +24 -0
- package/dist/types/library-schema.d.ts.map +1 -0
- package/dist/types/library-schema.js +2 -0
- package/dist/types/library-schema.js.map +1 -0
- package/dist/utils/adapter-helper.d.ts +21 -0
- package/dist/utils/adapter-helper.d.ts.map +1 -0
- package/dist/utils/adapter-helper.js +217 -0
- package/dist/utils/adapter-helper.js.map +1 -0
- package/dist/utils/config.d.ts +4 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +31 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/discover-configs.d.ts +11 -0
- package/dist/utils/discover-configs.d.ts.map +1 -0
- package/dist/utils/discover-configs.js +76 -0
- package/dist/utils/discover-configs.js.map +1 -0
- package/dist/utils/generators.d.ts +31 -0
- package/dist/utils/generators.d.ts.map +1 -0
- package/dist/utils/generators.js +302 -0
- package/dist/utils/generators.js.map +1 -0
- package/dist/utils/introspection.d.ts +55 -0
- package/dist/utils/introspection.d.ts.map +1 -0
- package/dist/utils/introspection.js +263 -0
- package/dist/utils/introspection.js.map +1 -0
- package/dist/utils/libraries.d.ts +7 -0
- package/dist/utils/libraries.d.ts.map +1 -0
- package/dist/utils/libraries.js +28 -0
- package/dist/utils/libraries.js.map +1 -0
- package/dist/utils/load-library-config.d.ts +6 -0
- package/dist/utils/load-library-config.d.ts.map +1 -0
- package/dist/utils/load-library-config.js +34 -0
- package/dist/utils/load-library-config.js.map +1 -0
- package/dist/utils/schema-diff.d.ts +48 -0
- package/dist/utils/schema-diff.d.ts.map +1 -0
- package/dist/utils/schema-diff.js +105 -0
- package/dist/utils/schema-diff.js.map +1 -0
- 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 @@
|
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|