@edgebasejs/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 (81) hide show
  1. package/dist/cli/src/cli.d.ts +3 -0
  2. package/dist/cli/src/cli.d.ts.map +1 -0
  3. package/dist/cli/src/cli.js +58 -0
  4. package/dist/cli/src/cli.js.map +1 -0
  5. package/dist/cli/src/commands/generate.d.ts +5 -0
  6. package/dist/cli/src/commands/generate.d.ts.map +1 -0
  7. package/dist/cli/src/commands/generate.js +89 -0
  8. package/dist/cli/src/commands/generate.js.map +1 -0
  9. package/dist/cli/src/commands/index.d.ts +4 -0
  10. package/dist/cli/src/commands/index.d.ts.map +1 -0
  11. package/dist/cli/src/commands/index.js +4 -0
  12. package/dist/cli/src/commands/index.js.map +1 -0
  13. package/dist/cli/src/commands/init.d.ts +5 -0
  14. package/dist/cli/src/commands/init.d.ts.map +1 -0
  15. package/dist/cli/src/commands/init.js +96 -0
  16. package/dist/cli/src/commands/init.js.map +1 -0
  17. package/dist/cli/src/commands/migrate.d.ts +5 -0
  18. package/dist/cli/src/commands/migrate.d.ts.map +1 -0
  19. package/dist/cli/src/commands/migrate.js +114 -0
  20. package/dist/cli/src/commands/migrate.js.map +1 -0
  21. package/dist/cli/src/generators/index.d.ts +4 -0
  22. package/dist/cli/src/generators/index.d.ts.map +1 -0
  23. package/dist/cli/src/generators/index.js +4 -0
  24. package/dist/cli/src/generators/index.js.map +1 -0
  25. package/dist/cli/src/generators/migration-generator.d.ts +16 -0
  26. package/dist/cli/src/generators/migration-generator.d.ts.map +1 -0
  27. package/dist/cli/src/generators/migration-generator.js +118 -0
  28. package/dist/cli/src/generators/migration-generator.js.map +1 -0
  29. package/dist/cli/src/generators/migration-sql-generator.d.ts +26 -0
  30. package/dist/cli/src/generators/migration-sql-generator.d.ts.map +1 -0
  31. package/dist/cli/src/generators/migration-sql-generator.js +253 -0
  32. package/dist/cli/src/generators/migration-sql-generator.js.map +1 -0
  33. package/dist/cli/src/generators/schema-loader.d.ts +22 -0
  34. package/dist/cli/src/generators/schema-loader.d.ts.map +1 -0
  35. package/dist/cli/src/generators/schema-loader.js +72 -0
  36. package/dist/cli/src/generators/schema-loader.js.map +1 -0
  37. package/dist/cli/src/generators/sdk-generator.d.ts +10 -0
  38. package/dist/cli/src/generators/sdk-generator.d.ts.map +1 -0
  39. package/dist/cli/src/generators/sdk-generator.js +185 -0
  40. package/dist/cli/src/generators/sdk-generator.js.map +1 -0
  41. package/dist/cli/src/generators/sdk-ts-generator.d.ts +6 -0
  42. package/dist/cli/src/generators/sdk-ts-generator.d.ts.map +1 -0
  43. package/dist/cli/src/generators/sdk-ts-generator.js +105 -0
  44. package/dist/cli/src/generators/sdk-ts-generator.js.map +1 -0
  45. package/dist/cli/src/index.d.ts +3 -0
  46. package/dist/cli/src/index.d.ts.map +1 -0
  47. package/dist/cli/src/index.js +3 -0
  48. package/dist/cli/src/index.js.map +1 -0
  49. package/dist/schema/src/builder/index.d.ts +3 -0
  50. package/dist/schema/src/builder/index.d.ts.map +1 -0
  51. package/dist/schema/src/builder/index.js +3 -0
  52. package/dist/schema/src/builder/index.js.map +1 -0
  53. package/dist/schema/src/builder/schema-builder.d.ts +54 -0
  54. package/dist/schema/src/builder/schema-builder.d.ts.map +1 -0
  55. package/dist/schema/src/builder/schema-builder.js +144 -0
  56. package/dist/schema/src/builder/schema-builder.js.map +1 -0
  57. package/dist/schema/src/index.d.ts +3 -0
  58. package/dist/schema/src/index.d.ts.map +1 -0
  59. package/dist/schema/src/index.js +3 -0
  60. package/dist/schema/src/index.js.map +1 -0
  61. package/dist/shared-types/src/admin.d.ts +101 -0
  62. package/dist/shared-types/src/admin.d.ts.map +1 -0
  63. package/dist/shared-types/src/admin.js +3 -0
  64. package/dist/shared-types/src/admin.js.map +1 -0
  65. package/dist/shared-types/src/auth.d.ts +27 -0
  66. package/dist/shared-types/src/auth.d.ts.map +1 -0
  67. package/dist/shared-types/src/auth.js +2 -0
  68. package/dist/shared-types/src/auth.js.map +1 -0
  69. package/dist/shared-types/src/index.d.ts +5 -0
  70. package/dist/shared-types/src/index.d.ts.map +1 -0
  71. package/dist/shared-types/src/index.js +5 -0
  72. package/dist/shared-types/src/index.js.map +1 -0
  73. package/dist/shared-types/src/schema.d.ts +34 -0
  74. package/dist/shared-types/src/schema.d.ts.map +1 -0
  75. package/dist/shared-types/src/schema.js +2 -0
  76. package/dist/shared-types/src/schema.js.map +1 -0
  77. package/dist/shared-types/src/sync.d.ts +37 -0
  78. package/dist/shared-types/src/sync.d.ts.map +1 -0
  79. package/dist/shared-types/src/sync.js +2 -0
  80. package/dist/shared-types/src/sync.js.map +1 -0
  81. package/package.json +31 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env node
2
+ import { initProject } from './commands/init.js';
3
+ import { generate } from './commands/generate.js';
4
+ import { migrate } from './commands/migrate.js';
5
+ const args = process.argv.slice(2);
6
+ const command = args[0];
7
+ const projectDir = process.cwd();
8
+ async function main() {
9
+ try {
10
+ switch (command) {
11
+ case 'init':
12
+ await initProject(projectDir);
13
+ break;
14
+ case 'generate':
15
+ await generate(projectDir);
16
+ break;
17
+ case 'migrate':
18
+ await migrate(projectDir);
19
+ break;
20
+ case '--version':
21
+ case '-v':
22
+ console.log('EdgeBase CLI v0.1.0');
23
+ break;
24
+ case '--help':
25
+ case '-h':
26
+ case undefined:
27
+ console.log(`
28
+ EdgeBase CLI v0.1.0
29
+
30
+ Usage: edgebase <command>
31
+
32
+ Commands:
33
+ init Initialize a new EdgeBase project
34
+ generate Generate migrations and SDK from schema
35
+ migrate Run pending database migrations
36
+
37
+ Options:
38
+ -h, --help Show this help message
39
+ -v, --version Show version
40
+
41
+ Examples:
42
+ edgebase init
43
+ edgebase generate
44
+ edgebase migrate
45
+ `);
46
+ break;
47
+ default:
48
+ console.error(`Unknown command: ${command}`);
49
+ process.exit(1);
50
+ }
51
+ }
52
+ catch (error) {
53
+ console.error('Error:', error instanceof Error ? error.message : error);
54
+ process.exit(1);
55
+ }
56
+ }
57
+ main();
58
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAEjC,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM;gBACT,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC1B,MAAM;YACR,KAAK,WAAW,CAAC;YACjB,KAAK,IAAI;gBACP,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI,CAAC;YACV,KAAK,SAAS;gBACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBnB,CAAC,CAAC;gBACK,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generate migrations and SDK from schema
3
+ */
4
+ export declare function generate(projectDir: string): 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;AACH,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FhE"}
@@ -0,0 +1,89 @@
1
+ // Generate migrations and SDK from schema
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { loadSchema, loadSchemaHistory, saveSchemaHistory } from '../generators/schema-loader.js';
5
+ import { diffSchemas, generateMigrationSQL, generateMigrationFilename, } from '../generators/migration-sql-generator.js';
6
+ import { generateSDK } from '../generators/sdk-ts-generator.js';
7
+ import { validateSchema } from '@edgebasejs/schema';
8
+ /**
9
+ * Generate migrations and SDK from schema
10
+ */
11
+ export async function generate(projectDir) {
12
+ console.log('📝 Generating migrations and SDK...');
13
+ try {
14
+ const schemaFile = path.join(projectDir, 'edgebase.schema.ts');
15
+ if (!fs.existsSync(schemaFile)) {
16
+ throw new Error('edgebase.schema.ts not found. Run: npx edgebase init');
17
+ }
18
+ // Step 1: Load current schema
19
+ console.log(' • Loading schema...');
20
+ const currentSchema = await loadSchema(projectDir);
21
+ // Step 2: Validate schema
22
+ console.log(' • Validating schema...');
23
+ validateSchema(currentSchema);
24
+ // Step 3: Load schema history
25
+ const history = loadSchemaHistory(projectDir);
26
+ const previousSchema = history.schema;
27
+ // Step 4: Diff schemas
28
+ console.log(' • Comparing with previous schema...');
29
+ const diff = diffSchemas(previousSchema, currentSchema);
30
+ const hasChanges = Object.keys(diff.newEntities).length > 0 ||
31
+ Object.keys(diff.modifiedEntities).length > 0 ||
32
+ Object.keys(diff.deletedEntities).length > 0;
33
+ if (!hasChanges) {
34
+ console.log('✓ Schema validation passed');
35
+ console.log('✓ No schema changes detected');
36
+ return;
37
+ }
38
+ // Step 5: Generate migration
39
+ console.log(' • Generating migration SQL...');
40
+ const { up, down } = generateMigrationSQL(diff);
41
+ const nextVersion = history.version + 1;
42
+ const migrationFilename = generateMigrationFilename('schema changes', nextVersion);
43
+ const migrationsDir = path.join(projectDir, 'migrations');
44
+ if (!fs.existsSync(migrationsDir)) {
45
+ fs.mkdirSync(migrationsDir, { recursive: true });
46
+ }
47
+ const migrationPath = path.join(migrationsDir, migrationFilename);
48
+ fs.writeFileSync(migrationPath, up);
49
+ console.log(` ✓ Generated migration: ${migrationFilename}`);
50
+ // Step 6: Generate SDK
51
+ console.log(' • Generating TypeScript SDK...');
52
+ const sdk = generateSDK(currentSchema);
53
+ const generatedDir = path.join(projectDir, '.edgebase', 'generated');
54
+ if (!fs.existsSync(generatedDir)) {
55
+ fs.mkdirSync(generatedDir, { recursive: true });
56
+ }
57
+ const sdkPath = path.join(generatedDir, 'sdk.ts');
58
+ fs.writeFileSync(sdkPath, sdk);
59
+ console.log(' ✓ Generated SDK: .edgebase/generated/sdk.ts');
60
+ // Step 7: Update schema history
61
+ console.log(' • Updating schema history...');
62
+ saveSchemaHistory(projectDir, {
63
+ version: nextVersion,
64
+ timestamp: Date.now(),
65
+ schema: currentSchema,
66
+ });
67
+ console.log('');
68
+ console.log('✅ Generation complete!');
69
+ console.log('');
70
+ console.log('Generated files:');
71
+ console.log(` - migrations/${migrationFilename}`);
72
+ console.log(' - .edgebase/generated/sdk.ts');
73
+ console.log('');
74
+ console.log('Summary of changes:');
75
+ console.log(` • New entities: ${Object.keys(diff.newEntities).length}`);
76
+ console.log(` • Modified entities: ${Object.keys(diff.modifiedEntities).length}`);
77
+ console.log(` • Deleted entities: ${Object.keys(diff.deletedEntities).length}`);
78
+ console.log('');
79
+ console.log('Next steps:');
80
+ console.log(' 1. Review the generated migration file');
81
+ console.log(' 2. Run: npx edgebase migrate');
82
+ console.log(' 3. Commit generated files to git');
83
+ }
84
+ catch (error) {
85
+ console.error('❌ Generation failed:', error instanceof Error ? error.message : error);
86
+ throw error;
87
+ }
88
+ }
89
+ //# 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,4 @@
1
+ export * from './init.js';
2
+ export * from './generate.js';
3
+ export * from './migrate.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './init.js';
2
+ export * from './generate.js';
3
+ export * from './migrate.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Initialize a new EdgeBase project
3
+ */
4
+ export declare function initProject(projectDir: string): Promise<void>;
5
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/commands/init.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4GnE"}
@@ -0,0 +1,96 @@
1
+ // Initialize new EdgeBase project
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ /**
5
+ * Initialize a new EdgeBase project
6
+ */
7
+ export async function initProject(projectDir) {
8
+ console.log('🚀 Initializing EdgeBase project...');
9
+ // Create .edgebase directory
10
+ const edgebaseDir = path.join(projectDir, '.edgebase');
11
+ if (!fs.existsSync(edgebaseDir)) {
12
+ fs.mkdirSync(edgebaseDir, { recursive: true });
13
+ console.log(`✓ Created .edgebase directory`);
14
+ }
15
+ // Create migrations directory
16
+ const migrationsDir = path.join(projectDir, 'migrations');
17
+ if (!fs.existsSync(migrationsDir)) {
18
+ fs.mkdirSync(migrationsDir, { recursive: true });
19
+ console.log(`✓ Created migrations directory`);
20
+ }
21
+ // Create schema template if doesn't exist
22
+ const schemaFile = path.join(projectDir, 'edgebase.schema.ts');
23
+ if (!fs.existsSync(schemaFile)) {
24
+ const schemaTemplate = `// EdgeBase schema definition
25
+ import type { DatabaseSchema } from '@edgebasejs/types';
26
+
27
+ const schema: DatabaseSchema = {
28
+ entities: {
29
+ todos: {
30
+ fields: {
31
+ id: {
32
+ type: 'string',
33
+ required: true,
34
+ primary: true,
35
+ description: 'Unique identifier for todo',
36
+ },
37
+ title: {
38
+ type: 'string',
39
+ required: true,
40
+ description: 'Todo title',
41
+ },
42
+ completed: {
43
+ type: 'boolean',
44
+ required: true,
45
+ default: false,
46
+ description: 'Whether todo is completed',
47
+ },
48
+ createdAt: {
49
+ type: 'timestamp',
50
+ required: true,
51
+ description: 'When todo was created',
52
+ },
53
+ updatedAt: {
54
+ type: 'timestamp',
55
+ required: true,
56
+ description: 'When todo was last updated',
57
+ },
58
+ },
59
+ },
60
+ },
61
+ };
62
+
63
+ export default schema;
64
+ `;
65
+ fs.writeFileSync(schemaFile, schemaTemplate);
66
+ console.log(`✓ Created edgebase.schema.ts template`);
67
+ }
68
+ // Create schema history
69
+ const historyFile = path.join(edgebaseDir, 'schema-history.json');
70
+ if (!fs.existsSync(historyFile)) {
71
+ fs.writeFileSync(historyFile, JSON.stringify({
72
+ version: 0,
73
+ timestamp: Date.now(),
74
+ schema: { entities: {} },
75
+ }, null, 2));
76
+ console.log(`✓ Created schema-history.json`);
77
+ }
78
+ // Create config file
79
+ const configFile = path.join(edgebaseDir, 'config.json');
80
+ if (!fs.existsSync(configFile)) {
81
+ fs.writeFileSync(configFile, JSON.stringify({
82
+ projectName: 'my-project',
83
+ version: '0.1.0',
84
+ createdAt: new Date().toISOString(),
85
+ }, null, 2));
86
+ console.log(`✓ Created config.json`);
87
+ }
88
+ console.log('');
89
+ console.log('✅ EdgeBase project initialized!');
90
+ console.log('');
91
+ console.log('Next steps:');
92
+ console.log(' 1. Update edgebase.schema.ts with your entities');
93
+ console.log(' 2. Run: npx edgebase generate');
94
+ console.log(' 3. Commit generated files to git');
95
+ }
96
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Run pending migrations
3
+ */
4
+ export declare function migrate(projectDir: string): Promise<void>;
5
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../../src/commands/migrate.ts"],"names":[],"mappings":"AA0CA;;GAEG;AACH,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiG/D"}
@@ -0,0 +1,114 @@
1
+ // Run database migrations
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { execSync } from 'child_process';
5
+ /**
6
+ * Load applied migrations
7
+ */
8
+ function loadAppliedMigrations(projectDir) {
9
+ const historyPath = path.join(projectDir, '.edgebase', 'migrations-applied.json');
10
+ if (!fs.existsSync(historyPath)) {
11
+ return [];
12
+ }
13
+ const content = fs.readFileSync(historyPath, 'utf-8');
14
+ return JSON.parse(content);
15
+ }
16
+ /**
17
+ * Save applied migrations
18
+ */
19
+ function saveAppliedMigrations(projectDir, migrations) {
20
+ const historyPath = path.join(projectDir, '.edgebase', 'migrations-applied.json');
21
+ fs.writeFileSync(historyPath, JSON.stringify(migrations, null, 2));
22
+ }
23
+ /**
24
+ * Extract version from migration filename
25
+ */
26
+ function extractVersion(filename) {
27
+ const match = filename.match(/^(\d+)_/);
28
+ return match ? parseInt(match[1], 10) : 0;
29
+ }
30
+ /**
31
+ * Run pending migrations
32
+ */
33
+ export async function migrate(projectDir) {
34
+ console.log('🗄️ Running migrations...');
35
+ try {
36
+ const migrationsDir = path.join(projectDir, 'migrations');
37
+ if (!fs.existsSync(migrationsDir)) {
38
+ throw new Error('migrations directory not found. Run: npx edgebase init');
39
+ }
40
+ // Get all migration files
41
+ const migrationFiles = fs
42
+ .readdirSync(migrationsDir)
43
+ .filter((f) => f.endsWith('.sql'))
44
+ .sort();
45
+ if (migrationFiles.length === 0) {
46
+ console.log('ℹ️ No migrations found');
47
+ return;
48
+ }
49
+ // Load applied migrations
50
+ const appliedMigrations = loadAppliedMigrations(projectDir);
51
+ const appliedVersions = new Set(appliedMigrations.map((m) => m.version));
52
+ // Find pending migrations
53
+ const pendingMigrations = migrationFiles.filter((file) => {
54
+ const version = extractVersion(file);
55
+ return !appliedVersions.has(version);
56
+ });
57
+ if (pendingMigrations.length === 0) {
58
+ console.log('✓ All migrations already applied');
59
+ return;
60
+ }
61
+ console.log(`Found ${pendingMigrations.length} pending migration(s):`);
62
+ for (const migration of pendingMigrations) {
63
+ console.log(` - ${migration}`);
64
+ }
65
+ // Find worker directory
66
+ const workerDir = path.join(projectDir, 'apps', 'worker');
67
+ if (!fs.existsSync(workerDir)) {
68
+ console.log('');
69
+ console.log('⚠️ Worker directory not found. Please run migrations manually:');
70
+ console.log('');
71
+ for (const migration of pendingMigrations) {
72
+ const migrationPath = path.join('migrations', migration);
73
+ console.log(` wrangler d1 execute edgebase --file="${migrationPath}"`);
74
+ }
75
+ console.log('');
76
+ console.log('Then update .edgebase/migrations-applied.json with applied migrations.');
77
+ return;
78
+ }
79
+ // Run migrations
80
+ console.log('');
81
+ console.log('Running migrations...');
82
+ for (const migration of pendingMigrations) {
83
+ try {
84
+ const migrationPath = path.relative(workerDir, path.join(migrationsDir, migration));
85
+ console.log(` • Applying: ${migration}`);
86
+ // Execute migration via wrangler
87
+ execSync(`cd "${workerDir}" && npx wrangler d1 execute edgebase --file="${migrationPath}"`, {
88
+ stdio: 'pipe',
89
+ });
90
+ // Record as applied
91
+ const version = extractVersion(migration);
92
+ appliedMigrations.push({
93
+ version,
94
+ name: migration,
95
+ appliedAt: Date.now(),
96
+ });
97
+ console.log(` ✓ Applied`);
98
+ }
99
+ catch (error) {
100
+ console.error(` ✗ Failed: ${error instanceof Error ? error.message : String(error)}`);
101
+ throw error;
102
+ }
103
+ }
104
+ // Save applied migrations
105
+ saveAppliedMigrations(projectDir, appliedMigrations);
106
+ console.log('');
107
+ console.log('✅ All migrations applied successfully!');
108
+ }
109
+ catch (error) {
110
+ console.error('❌ Migration failed:', error instanceof Error ? error.message : error);
111
+ throw error;
112
+ }
113
+ }
114
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './migration-sql-generator.js';
2
+ export * from './sdk-ts-generator.js';
3
+ export * from './schema-loader.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './migration-sql-generator.js';
2
+ export * from './sdk-ts-generator.js';
3
+ export * from './schema-loader.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { DatabaseSchema } from '@edgebasejs/types';
2
+ export interface GeneratedMigration {
3
+ version: number;
4
+ name: string;
5
+ up: string;
6
+ down: string;
7
+ }
8
+ /**
9
+ * Generate migration from schema
10
+ */
11
+ export declare function generateMigration(schema: DatabaseSchema, version: number, name: string): GeneratedMigration;
12
+ /**
13
+ * Format migration for file output
14
+ */
15
+ export declare function formatMigrationFile(migration: GeneratedMigration): string;
16
+ //# sourceMappingURL=migration-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-generator.d.ts","sourceRoot":"","sources":["../../../../src/generators/migration-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAuGD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,kBAAkB,CAsBpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM,CASzE"}
@@ -0,0 +1,118 @@
1
+ // SQL Migration generator from schema definitions
2
+ /**
3
+ * Convert field type to SQL type
4
+ */
5
+ function getSQLType(fieldType) {
6
+ switch (fieldType) {
7
+ case 'string':
8
+ return 'TEXT';
9
+ case 'integer':
10
+ return 'INTEGER';
11
+ case 'number':
12
+ return 'REAL';
13
+ case 'boolean':
14
+ return 'INTEGER'; // SQLite uses 0/1 for boolean
15
+ case 'text':
16
+ return 'TEXT';
17
+ case 'timestamp':
18
+ return 'INTEGER'; // Unix timestamp in milliseconds
19
+ case 'json':
20
+ return 'TEXT'; // JSON stored as text
21
+ case 'reference':
22
+ return 'TEXT'; // Foreign key ID
23
+ default:
24
+ return 'TEXT';
25
+ }
26
+ }
27
+ /**
28
+ * Generate CREATE TABLE statement
29
+ */
30
+ function generateCreateTableSQL(entityName, schema, includeConstraints = true) {
31
+ const columns = [];
32
+ for (const [fieldName, field] of Object.entries(schema.fields)) {
33
+ let column = `${fieldName} ${getSQLType(field.type)}`;
34
+ if (field.primary) {
35
+ column += ' PRIMARY KEY';
36
+ }
37
+ if (field.required && !field.primary) {
38
+ column += ' NOT NULL';
39
+ }
40
+ if (field.default !== undefined) {
41
+ if (typeof field.default === 'string') {
42
+ column += ` DEFAULT '${field.default.replace(/'/g, "''")}'`;
43
+ }
44
+ else {
45
+ column += ` DEFAULT ${field.default}`;
46
+ }
47
+ }
48
+ if (field.reference && includeConstraints) {
49
+ column += ` REFERENCES ${field.reference}(id) ON DELETE CASCADE`;
50
+ }
51
+ columns.push(column);
52
+ }
53
+ // Add composite primary key if needed
54
+ const primaryKeys = Object.entries(schema.fields)
55
+ .filter(([, f]) => f.primary)
56
+ .map(([name]) => name);
57
+ if (primaryKeys.length > 1) {
58
+ columns.push(`PRIMARY KEY (${primaryKeys.join(', ')})`);
59
+ }
60
+ return `CREATE TABLE IF NOT EXISTS ${entityName} (\n ${columns.join(',\n ')}\n);`;
61
+ }
62
+ /**
63
+ * Generate indexes
64
+ */
65
+ function generateIndexesSQL(entityName, schema) {
66
+ const sqls = [];
67
+ if (schema.indexes) {
68
+ for (const index of schema.indexes) {
69
+ const indexName = `idx_${entityName}_${index.fields.join('_')}`;
70
+ const uniqueKeyword = index.unique ? 'UNIQUE' : '';
71
+ sqls.push(`CREATE ${uniqueKeyword} INDEX IF NOT EXISTS ${indexName} ON ${entityName}(${index.fields.join(', ')});`);
72
+ }
73
+ }
74
+ // Add default indexes for foreign keys
75
+ for (const [fieldName, field] of Object.entries(schema.fields)) {
76
+ if (field.reference && !schema.indexes?.some((idx) => idx.fields.includes(fieldName))) {
77
+ const indexName = `idx_${entityName}_${fieldName}`;
78
+ sqls.push(`CREATE INDEX IF NOT EXISTS ${indexName} ON ${entityName}(${fieldName});`);
79
+ }
80
+ }
81
+ return sqls;
82
+ }
83
+ /**
84
+ * Generate migration from schema
85
+ */
86
+ export function generateMigration(schema, version, name) {
87
+ const upStatements = [];
88
+ const downStatements = [];
89
+ // Generate CREATE TABLE statements
90
+ for (const [entityName, entitySchema] of Object.entries(schema.entities)) {
91
+ upStatements.push(generateCreateTableSQL(entityName, entitySchema));
92
+ // Generate indexes
93
+ const indexes = generateIndexesSQL(entityName, entitySchema);
94
+ upStatements.push(...indexes);
95
+ // Generate DROP TABLE for down migration
96
+ downStatements.unshift(`DROP TABLE IF EXISTS ${entityName};`);
97
+ }
98
+ return {
99
+ version,
100
+ name,
101
+ up: upStatements.join('\n\n'),
102
+ down: downStatements.join('\n'),
103
+ };
104
+ }
105
+ /**
106
+ * Format migration for file output
107
+ */
108
+ export function formatMigrationFile(migration) {
109
+ return `-- Migration ${migration.version}: ${migration.name}
110
+
111
+ -- Up migration
112
+ ${migration.up}
113
+
114
+ -- Down migration (for rollback)
115
+ -- ${migration.down}
116
+ `;
117
+ }
118
+ //# sourceMappingURL=migration-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-generator.js","sourceRoot":"","sources":["../../../../src/generators/migration-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { DatabaseSchema, EntitySchema } from '@edgebasejs/types';
2
+ interface SchemaDiff {
3
+ newEntities: Record<string, EntitySchema>;
4
+ modifiedEntities: Record<string, {
5
+ oldSchema: EntitySchema;
6
+ newSchema: EntitySchema;
7
+ }>;
8
+ deletedEntities: Record<string, EntitySchema>;
9
+ }
10
+ /**
11
+ * Compare two schemas and generate diff
12
+ */
13
+ export declare function diffSchemas(oldSchema: DatabaseSchema, newSchema: DatabaseSchema): SchemaDiff;
14
+ /**
15
+ * Generate migration SQL
16
+ */
17
+ export declare function generateMigrationSQL(diff: SchemaDiff): {
18
+ up: string;
19
+ down: string;
20
+ };
21
+ /**
22
+ * Generate migration filename
23
+ */
24
+ export declare function generateMigrationFilename(description: string, version: number): string;
25
+ export {};
26
+ //# sourceMappingURL=migration-sql-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-sql-generator.d.ts","sourceRoot":"","sources":["../../../../src/generators/migration-sql-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAa,MAAM,mBAAmB,CAAC;AAEjF,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,YAAY,CAAC;QAAC,SAAS,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IACvF,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,GAAG,UAAU,CA6B5F;AA6ND;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAyCnF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAStF"}