@toonstore/torm 0.3.0 → 0.4.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/dist/cli.js CHANGED
@@ -41,7 +41,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
41
41
  const child_process_1 = require("child_process");
42
42
  const path = __importStar(require("path"));
43
43
  const fs = __importStar(require("fs"));
44
+ const migrations_1 = require("./migrations");
44
45
  const command = process.argv[2];
46
+ const subcommand = process.argv[3];
45
47
  const args = process.argv.slice(3);
46
48
  function printHelp() {
47
49
  console.log(`
@@ -51,16 +53,23 @@ Usage:
51
53
  torm <command> [options]
52
54
 
53
55
  Commands:
54
- studio Launch TORM Studio (visual database manager)
55
- generate Generate TypeScript types from your schema
56
- migrate Run database migrations
57
- help Show this help message
56
+ studio Launch TORM Studio (visual database manager)
57
+ migrate:create <name> Create a new migration file
58
+ migrate:up [count] Run pending migrations (optional: number to run)
59
+ migrate:down [count] Rollback migrations (default: 1)
60
+ migrate:status Show migration status
61
+ help Show this help message
58
62
 
59
63
  Examples:
60
- torm studio # Start TORM Studio at http://localhost:4983
61
- torm studio --port 8080 # Start on custom port
62
- torm generate # Generate types from schema
63
- torm migrate # Run pending migrations
64
+ torm studio # Start TORM Studio at http://localhost:4983
65
+ torm studio --port 8080 # Start on custom port
66
+
67
+ torm migrate:create add_age # Create migration file
68
+ torm migrate:up # Run all pending migrations
69
+ torm migrate:up 1 # Run 1 migration
70
+ torm migrate:down # Rollback last migration
71
+ torm migrate:down 2 # Rollback last 2 migrations
72
+ torm migrate:status # Show applied/pending migrations
64
73
 
65
74
  Config:
66
75
  Create torm.config.ts in your project root with DB credentials
@@ -77,9 +86,31 @@ function findConfig() {
77
86
  if (fs.existsSync(configPath)) {
78
87
  console.log(`📝 Found config: ${configPath}\n`);
79
88
  try {
80
- // For TS files, we'd need to compile them first
81
- // For now, suggest JS or use default config
82
- if (configPath.endsWith('.js')) {
89
+ if (configPath.endsWith('.ts')) {
90
+ // Check if TypeScript loader is available
91
+ const hasLoader = checkTypeScriptLoader();
92
+ if (!hasLoader) {
93
+ console.error('⚠️ TypeScript config found but tsx/ts-node not installed');
94
+ console.error(' Install with: npm install -D tsx');
95
+ console.error(' Or use torm.config.js instead\n');
96
+ continue;
97
+ }
98
+ // Try to register TypeScript loader
99
+ try {
100
+ require('tsx/cjs');
101
+ }
102
+ catch {
103
+ try {
104
+ require('ts-node/register');
105
+ }
106
+ catch {
107
+ // Loader exists but can't register - try direct require anyway
108
+ }
109
+ }
110
+ const config = require(configPath);
111
+ return config.default || config;
112
+ }
113
+ else if (configPath.endsWith('.js')) {
83
114
  const config = require(configPath);
84
115
  return config.default || config;
85
116
  }
@@ -95,33 +126,41 @@ async function studio() {
95
126
  console.log('🚀 Starting TORM Studio...\n');
96
127
  // Load config
97
128
  const config = findConfig();
129
+ // If no config found, create one based on project type
98
130
  if (!config) {
99
- console.log('⚠️ No torm.config.ts found in current directory\n');
131
+ console.log('⚠️ No torm.config found in current directory\n');
100
132
  console.log('Creating a default config for you...\n');
101
- // Create example config
102
- const exampleConfig = `/**
103
- * TORM Configuration
104
- * Define your ToonStoreDB connection here
105
- */
106
-
107
- export default {
108
- // ToonStoreDB connection
109
- dbCredentials: {
110
- host: 'localhost',
111
- port: 6379,
112
- // For cloud/remote databases:
113
- // password: process.env.TOONSTORE_PASSWORD,
114
- // url: 'redis://user:pass@host:port',
115
- },
116
-
117
- // Studio configuration
118
- studio: {
119
- port: 4983, // Studio port (like Drizzle)
120
- },
121
- };
122
- `;
123
- fs.writeFileSync(path.join(process.cwd(), 'torm.config.ts'), exampleConfig);
124
- console.log('✅ Created torm.config.ts');
133
+ // Detect project type
134
+ const isTypeScriptProject = detectTypeScriptProject();
135
+ if (isTypeScriptProject) {
136
+ console.log('📦 TypeScript project detected');
137
+ // Check for TypeScript loaders
138
+ const hasTsxOrTsNode = checkTypeScriptLoader();
139
+ if (!hasTsxOrTsNode) {
140
+ console.log('⚠️ TypeScript runtime not found');
141
+ console.log(' Installing tsx for TypeScript support...\n');
142
+ // Try to install tsx
143
+ try {
144
+ const { execSync } = require('child_process');
145
+ execSync('npm install -D tsx', { stdio: 'inherit' });
146
+ console.log('\n✅ Installed tsx\n');
147
+ createTypeScriptConfig();
148
+ }
149
+ catch (e) {
150
+ console.log('\n⚠️ Could not auto-install tsx');
151
+ console.log(' Creating .js config instead\n');
152
+ createJavaScriptConfig();
153
+ }
154
+ }
155
+ else {
156
+ createTypeScriptConfig();
157
+ }
158
+ }
159
+ else {
160
+ console.log('📦 JavaScript project detected');
161
+ createJavaScriptConfig();
162
+ }
163
+ console.log('✅ Created config file');
125
164
  console.log(' Edit this file with your database credentials\n');
126
165
  console.log(' Then run `torm studio` again\n');
127
166
  process.exit(0);
@@ -173,38 +212,338 @@ export default {
173
212
  process.exit(0);
174
213
  });
175
214
  }
215
+ async function migrate() {
216
+ const action = command.split(':')[1]; // migrate:create, migrate:up, etc.
217
+ const config = findConfig();
218
+ if (!config) {
219
+ console.error('❌ No torm.config.ts found');
220
+ console.error(' Create one first by running: torm studio\n');
221
+ process.exit(1);
222
+ }
223
+ const dbOptions = {
224
+ host: config.dbCredentials?.host || process.env.TOONSTORE_HOST || 'localhost',
225
+ port: config.dbCredentials?.port || Number(process.env.TOONSTORE_PORT) || 6379,
226
+ url: config.dbCredentials?.url || process.env.TOONSTORE_URL,
227
+ };
228
+ const migrationsDir = config.migrations?.directory || path.join(process.cwd(), 'migrations');
229
+ const runner = new migrations_1.MigrationRunner(dbOptions, migrationsDir);
230
+ try {
231
+ switch (action) {
232
+ case 'create': {
233
+ const name = subcommand;
234
+ if (!name) {
235
+ console.error('❌ Migration name required');
236
+ console.error(' Usage: torm migrate:create <name>\n');
237
+ process.exit(1);
238
+ }
239
+ await runner.create(name);
240
+ break;
241
+ }
242
+ case 'up': {
243
+ const count = subcommand ? parseInt(subcommand) : undefined;
244
+ await runner.up(count);
245
+ break;
246
+ }
247
+ case 'down': {
248
+ const count = subcommand ? parseInt(subcommand) : 1;
249
+ await runner.down(count);
250
+ break;
251
+ }
252
+ case 'status': {
253
+ await runner.status();
254
+ break;
255
+ }
256
+ default:
257
+ console.error(`❌ Unknown migration command: ${action}`);
258
+ console.error(' Use: create, up, down, or status\n');
259
+ process.exit(1);
260
+ }
261
+ }
262
+ catch (error) {
263
+ console.error(`\n❌ Migration error: ${error.message}\n`);
264
+ process.exit(1);
265
+ }
266
+ finally {
267
+ await runner.close();
268
+ }
269
+ }
176
270
  async function generate() {
177
- console.log('🔧 Generating TypeScript types from schema...\n');
178
- console.log('⚠️ This feature is coming soon!');
179
- console.log('💡 For now, define types manually in your code.\n');
180
- process.exit(0);
271
+ console.log('🔧 Generating TypeScript types from database...\n');
272
+ const config = findConfig();
273
+ if (!config) {
274
+ console.error('❌ No torm.config found');
275
+ console.error(' Create torm.config.js first\n');
276
+ process.exit(1);
277
+ }
278
+ const dbOptions = {
279
+ host: config.dbCredentials?.host || process.env.TOONSTORE_HOST || 'localhost',
280
+ port: config.dbCredentials?.port || Number(process.env.TOONSTORE_PORT) || 6379,
281
+ url: config.dbCredentials?.url || process.env.TOONSTORE_URL,
282
+ };
283
+ const Redis = require('ioredis');
284
+ const redis = dbOptions.url ? new Redis(dbOptions.url) : new Redis(dbOptions);
285
+ try {
286
+ console.log('📊 Scanning database for collections...\n');
287
+ // Get all keys
288
+ const allKeys = await redis.keys('toonstore:*');
289
+ if (allKeys.length === 0) {
290
+ console.log('⚠️ No data found in database');
291
+ console.log('💡 Create some models and data first, then run generate\n');
292
+ await redis.quit();
293
+ process.exit(0);
294
+ }
295
+ // Group keys by model name
296
+ const modelMap = {};
297
+ for (const key of allKeys) {
298
+ // Key format: toonstore:ModelName:id
299
+ const parts = key.split(':');
300
+ if (parts.length >= 3 && parts[0] === 'toonstore') {
301
+ const modelName = parts[1];
302
+ if (modelName === '_migrations')
303
+ continue; // Skip internal keys
304
+ if (!modelMap[modelName]) {
305
+ modelMap[modelName] = [];
306
+ }
307
+ const data = await redis.get(key);
308
+ if (data) {
309
+ try {
310
+ const parsed = JSON.parse(data);
311
+ modelMap[modelName].push(parsed);
312
+ }
313
+ catch (e) {
314
+ // Skip invalid JSON
315
+ }
316
+ }
317
+ }
318
+ }
319
+ const modelNames = Object.keys(modelMap);
320
+ if (modelNames.length === 0) {
321
+ console.log('⚠️ No valid models found in database\n');
322
+ await redis.quit();
323
+ process.exit(0);
324
+ }
325
+ console.log(`✅ Found ${modelNames.length} model(s): ${modelNames.join(', ')}\n`);
326
+ // Generate TypeScript interfaces
327
+ let output = `/**
328
+ * Auto-generated TypeScript types from ToonStoreDB
329
+ * Generated: ${new Date().toISOString()}
330
+ *
331
+ * ⚠️ DO NOT EDIT MANUALLY - This file is auto-generated
332
+ * Run 'npx torm generate' to regenerate
333
+ */
334
+
335
+ `;
336
+ for (const modelName of modelNames) {
337
+ const documents = modelMap[modelName];
338
+ console.log(`📝 Analyzing ${modelName} (${documents.length} document${documents.length > 1 ? 's' : ''})...`);
339
+ // Infer types from all documents
340
+ const fieldTypes = {};
341
+ for (const doc of documents) {
342
+ for (const [field, value] of Object.entries(doc)) {
343
+ if (!fieldTypes[field]) {
344
+ fieldTypes[field] = new Set();
345
+ }
346
+ fieldTypes[field].add(inferType(value));
347
+ }
348
+ }
349
+ // Generate interface - capitalize first letter for TypeScript convention
350
+ const interfaceName = modelName.charAt(0).toUpperCase() + modelName.slice(1);
351
+ output += `export interface ${interfaceName} {\n`;
352
+ // Sort fields: _id and metadata first, then alphabetically
353
+ const fields = Object.keys(fieldTypes).sort((a, b) => {
354
+ if (a.startsWith('_') && !b.startsWith('_'))
355
+ return -1;
356
+ if (!a.startsWith('_') && b.startsWith('_'))
357
+ return 1;
358
+ return a.localeCompare(b);
359
+ });
360
+ for (const field of fields) {
361
+ const types = Array.from(fieldTypes[field]);
362
+ const typeStr = types.length > 1 ? types.join(' | ') : types[0];
363
+ // Check if field is optional (not present in all documents)
364
+ const isOptional = documents.some(doc => !(field in doc));
365
+ const optionalMarker = isOptional ? '?' : '';
366
+ output += ` ${field}${optionalMarker}: ${typeStr};\n`;
367
+ }
368
+ output += `}\n\n`;
369
+ }
370
+ // Write to file
371
+ const outputDir = path.join(process.cwd(), 'src', 'generated');
372
+ const outputFile = path.join(outputDir, 'torm-types.ts');
373
+ if (!fs.existsSync(outputDir)) {
374
+ fs.mkdirSync(outputDir, { recursive: true });
375
+ }
376
+ fs.writeFileSync(outputFile, output);
377
+ console.log(`\n✅ Generated types for ${modelNames.length} model(s)`);
378
+ console.log(`📄 Output: ${outputFile}\n`);
379
+ console.log('💡 Usage:');
380
+ const interfaceNames = modelNames.map(name => name.charAt(0).toUpperCase() + name.slice(1));
381
+ console.log(` import { ${interfaceNames.join(', ')} } from './generated/torm-types';\n`);
382
+ await redis.quit();
383
+ }
384
+ catch (error) {
385
+ console.error(`\n❌ Error: ${error.message}\n`);
386
+ await redis.quit();
387
+ process.exit(1);
388
+ }
181
389
  }
182
- async function migrate() {
183
- console.log('🔄 Running database migrations...\n');
184
- console.log('⚠️ This feature is coming soon!');
185
- console.log('💡 For now, manage schema changes manually.\n');
186
- process.exit(0);
390
+ function inferType(value) {
391
+ if (value === null)
392
+ return 'null';
393
+ if (value === undefined)
394
+ return 'undefined';
395
+ const type = typeof value;
396
+ if (type === 'string')
397
+ return 'string';
398
+ if (type === 'number')
399
+ return 'number';
400
+ if (type === 'boolean')
401
+ return 'boolean';
402
+ if (Array.isArray(value)) {
403
+ if (value.length === 0)
404
+ return 'any[]';
405
+ // Infer array element types
406
+ const elementTypes = new Set(value.map(inferType));
407
+ if (elementTypes.size === 1) {
408
+ return `${Array.from(elementTypes)[0]}[]`;
409
+ }
410
+ return `(${Array.from(elementTypes).join(' | ')})[]`;
411
+ }
412
+ if (type === 'object')
413
+ return 'any'; // Could be more sophisticated
414
+ return 'any';
415
+ }
416
+ function detectTypeScriptProject() {
417
+ const cwd = process.cwd();
418
+ // Check for tsconfig.json
419
+ if (fs.existsSync(path.join(cwd, 'tsconfig.json'))) {
420
+ return true;
421
+ }
422
+ // Check package.json for TypeScript
423
+ const pkgPath = path.join(cwd, 'package.json');
424
+ if (fs.existsSync(pkgPath)) {
425
+ try {
426
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
427
+ // Check dependencies
428
+ const allDeps = {
429
+ ...pkg.dependencies,
430
+ ...pkg.devDependencies,
431
+ };
432
+ if (allDeps['typescript'] || allDeps['@types/node']) {
433
+ return true;
434
+ }
435
+ // Check if main/types field points to .ts files
436
+ if (pkg.main?.endsWith('.ts') || pkg.types?.endsWith('.ts')) {
437
+ return true;
438
+ }
439
+ }
440
+ catch (e) {
441
+ // Invalid package.json, assume JS
442
+ }
443
+ }
444
+ // Default to JavaScript
445
+ return false;
446
+ }
447
+ function checkTypeScriptLoader() {
448
+ const pkgPath = path.join(process.cwd(), 'package.json');
449
+ if (fs.existsSync(pkgPath)) {
450
+ try {
451
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
452
+ const allDeps = {
453
+ ...pkg.dependencies,
454
+ ...pkg.devDependencies,
455
+ };
456
+ return !!(allDeps['tsx'] || allDeps['ts-node']);
457
+ }
458
+ catch (e) {
459
+ return false;
460
+ }
461
+ }
462
+ return false;
463
+ }
464
+ function createTypeScriptConfig() {
465
+ const config = `/**
466
+ * TORM Configuration
467
+ * Define your ToonStoreDB connection here
468
+ */
469
+
470
+ export default {
471
+ // ToonStoreDB connection
472
+ dbCredentials: {
473
+ host: 'localhost',
474
+ port: 6379,
475
+ // For cloud/remote databases:
476
+ // password: process.env.TOONSTORE_PASSWORD,
477
+ // url: 'redis://user:pass@host:port',
478
+ },
479
+
480
+ // Studio configuration
481
+ studio: {
482
+ port: 4983,
483
+ },
484
+
485
+ // Migrations directory (optional)
486
+ migrations: {
487
+ directory: './migrations',
488
+ },
489
+ };
490
+ `;
491
+ fs.writeFileSync(path.join(process.cwd(), 'torm.config.ts'), config);
492
+ console.log('📄 Created: torm.config.ts');
493
+ }
494
+ function createJavaScriptConfig() {
495
+ const config = `/**
496
+ * TORM Configuration
497
+ * Define your ToonStoreDB connection here
498
+ */
499
+
500
+ module.exports = {
501
+ // ToonStoreDB connection
502
+ dbCredentials: {
503
+ host: 'localhost',
504
+ port: 6379,
505
+ // For cloud/remote databases:
506
+ // password: process.env.TOONSTORE_PASSWORD,
507
+ // url: 'redis://user:pass@host:port',
508
+ },
509
+
510
+ // Studio configuration
511
+ studio: {
512
+ port: 4983,
513
+ },
514
+
515
+ // Migrations directory (optional)
516
+ migrations: {
517
+ directory: './migrations',
518
+ },
519
+ };
520
+ `;
521
+ fs.writeFileSync(path.join(process.cwd(), 'torm.config.js'), config);
522
+ console.log('📄 Created: torm.config.js');
187
523
  }
188
524
  // Main CLI logic
189
- switch (command) {
190
- case 'studio':
191
- studio();
192
- break;
193
- case 'generate':
194
- generate();
195
- break;
196
- case 'migrate':
197
- migrate();
198
- break;
199
- case 'help':
200
- case '--help':
201
- case '-h':
202
- case undefined:
203
- printHelp();
204
- break;
205
- default:
206
- console.error(`❌ Unknown command: ${command}\n`);
207
- printHelp();
208
- process.exit(1);
525
+ const fullCommand = command || '';
526
+ if (fullCommand.startsWith('migrate:')) {
527
+ migrate();
528
+ }
529
+ else {
530
+ switch (command) {
531
+ case 'studio':
532
+ studio();
533
+ break;
534
+ case 'generate':
535
+ generate();
536
+ break;
537
+ case 'help':
538
+ case '--help':
539
+ case '-h':
540
+ case undefined:
541
+ printHelp();
542
+ break;
543
+ default:
544
+ console.error(`❌ Unknown command: ${command}\n`);
545
+ printHelp();
546
+ process.exit(1);
547
+ }
209
548
  }
210
549
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * TORM Migration System
3
+ * Handles data-shape migrations for schemaless ToonStoreDB
4
+ */
5
+ import Redis from 'ioredis';
6
+ export interface Migration {
7
+ name: string;
8
+ timestamp: string;
9
+ up: (client: Redis) => Promise<void>;
10
+ down: (client: Redis) => Promise<void>;
11
+ }
12
+ export declare class MigrationRunner {
13
+ private redis;
14
+ private migrationsDir;
15
+ private migrationKey;
16
+ constructor(redisOptions: {
17
+ host?: string;
18
+ port?: number;
19
+ url?: string;
20
+ }, migrationsDir?: string);
21
+ /**
22
+ * Get list of applied migrations from database
23
+ */
24
+ getAppliedMigrations(): Promise<string[]>;
25
+ /**
26
+ * Save applied migrations to database
27
+ */
28
+ saveAppliedMigrations(migrations: string[]): Promise<void>;
29
+ /**
30
+ * Get list of migration files from directory
31
+ */
32
+ getMigrationFiles(): string[];
33
+ /**
34
+ * Load a migration module
35
+ */
36
+ loadMigration(filename: string): Promise<Migration>;
37
+ /**
38
+ * Get pending migrations that haven't been applied yet
39
+ */
40
+ getPendingMigrations(): Promise<Migration[]>;
41
+ /**
42
+ * Run pending migrations
43
+ */
44
+ up(count?: number): Promise<void>;
45
+ /**
46
+ * Rollback last migration
47
+ */
48
+ down(count?: number): Promise<void>;
49
+ /**
50
+ * Show migration status
51
+ */
52
+ status(): Promise<void>;
53
+ /**
54
+ * Create a new migration file
55
+ */
56
+ create(name: string): Promise<void>;
57
+ /**
58
+ * Close Redis connection
59
+ */
60
+ close(): Promise<void>;
61
+ }
62
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,SAAS,CAAC;AAI5B,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAA2B;gBAEnC,YAAY,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,aAAa,CAAC,EAAE,MAAM;IAahG;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK/C;;OAEG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAW7B;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAoBzD;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAgBlD;;OAEG;IACG,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BvC;;OAEG;IACG,IAAI,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC5C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB7B;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}