@toonstore/torm 0.2.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/README.md +809 -78
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +549 -0
- package/dist/cli.js.map +1 -0
- package/dist/migrations.d.ts +62 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +275 -0
- package/dist/migrations.js.map +1 -0
- package/dist/studio-server.d.ts +24 -0
- package/dist/studio-server.d.ts.map +1 -0
- package/dist/studio-server.js +586 -0
- package/dist/studio-server.js.map +1 -0
- package/package.json +12 -4
- package/studio/index.html +663 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* TORM CLI
|
|
5
|
+
* Command-line interface for ToonStoreDB ORM
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
const child_process_1 = require("child_process");
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const migrations_1 = require("./migrations");
|
|
45
|
+
const command = process.argv[2];
|
|
46
|
+
const subcommand = process.argv[3];
|
|
47
|
+
const args = process.argv.slice(3);
|
|
48
|
+
function printHelp() {
|
|
49
|
+
console.log(`
|
|
50
|
+
TORM CLI - ToonStoreDB ORM Tools
|
|
51
|
+
|
|
52
|
+
Usage:
|
|
53
|
+
torm <command> [options]
|
|
54
|
+
|
|
55
|
+
Commands:
|
|
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
|
|
62
|
+
|
|
63
|
+
Examples:
|
|
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
|
|
73
|
+
|
|
74
|
+
Config:
|
|
75
|
+
Create torm.config.ts in your project root with DB credentials
|
|
76
|
+
|
|
77
|
+
For more info, visit: https://github.com/toonstore/torm
|
|
78
|
+
`);
|
|
79
|
+
}
|
|
80
|
+
function findConfig() {
|
|
81
|
+
const configPaths = [
|
|
82
|
+
path.join(process.cwd(), 'torm.config.ts'),
|
|
83
|
+
path.join(process.cwd(), 'torm.config.js'),
|
|
84
|
+
];
|
|
85
|
+
for (const configPath of configPaths) {
|
|
86
|
+
if (fs.existsSync(configPath)) {
|
|
87
|
+
console.log(`📝 Found config: ${configPath}\n`);
|
|
88
|
+
try {
|
|
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')) {
|
|
114
|
+
const config = require(configPath);
|
|
115
|
+
return config.default || config;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
console.error(`⚠️ Error loading config: ${err.message}\n`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
async function studio() {
|
|
126
|
+
console.log('🚀 Starting TORM Studio...\n');
|
|
127
|
+
// Load config
|
|
128
|
+
const config = findConfig();
|
|
129
|
+
// If no config found, create one based on project type
|
|
130
|
+
if (!config) {
|
|
131
|
+
console.log('⚠️ No torm.config found in current directory\n');
|
|
132
|
+
console.log('Creating a default config for you...\n');
|
|
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');
|
|
164
|
+
console.log(' Edit this file with your database credentials\n');
|
|
165
|
+
console.log(' Then run `torm studio` again\n');
|
|
166
|
+
process.exit(0);
|
|
167
|
+
}
|
|
168
|
+
// Get port from args or config or default
|
|
169
|
+
let port = 4983; // Drizzle uses 4983
|
|
170
|
+
if (args.includes('--port')) {
|
|
171
|
+
port = parseInt(args[args.indexOf('--port') + 1]);
|
|
172
|
+
}
|
|
173
|
+
else if (config.studio?.port) {
|
|
174
|
+
port = config.studio.port;
|
|
175
|
+
}
|
|
176
|
+
// Check if studio-server.js exists
|
|
177
|
+
const serverPath = path.join(__dirname, 'studio-server.js');
|
|
178
|
+
if (!fs.existsSync(serverPath)) {
|
|
179
|
+
console.error('❌ Studio server not found!');
|
|
180
|
+
console.error(' Expected at:', serverPath);
|
|
181
|
+
console.error('\n💡 Run `npm run build` first\n');
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
console.log('📍 Starting TORM Studio server...\n');
|
|
185
|
+
// Pass config to server via environment
|
|
186
|
+
const env = {
|
|
187
|
+
...process.env,
|
|
188
|
+
PORT: port.toString(),
|
|
189
|
+
TOONSTORE_HOST: config.dbCredentials?.host || 'localhost',
|
|
190
|
+
TOONSTORE_PORT: (config.dbCredentials?.port || 6379).toString(),
|
|
191
|
+
TOONSTORE_URL: config.dbCredentials?.url || '',
|
|
192
|
+
TOONSTORE_PASSWORD: config.dbCredentials?.password || '',
|
|
193
|
+
};
|
|
194
|
+
const server = (0, child_process_1.spawn)('node', [serverPath], {
|
|
195
|
+
stdio: 'inherit',
|
|
196
|
+
env,
|
|
197
|
+
});
|
|
198
|
+
server.on('error', (err) => {
|
|
199
|
+
console.error('\n❌ Error starting TORM Studio:');
|
|
200
|
+
console.error(' ', err.message);
|
|
201
|
+
process.exit(1);
|
|
202
|
+
});
|
|
203
|
+
server.on('close', (code) => {
|
|
204
|
+
if (code !== 0) {
|
|
205
|
+
console.log(`\n⚠️ TORM Studio exited with code ${code}`);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
// Handle Ctrl+C gracefully
|
|
209
|
+
process.on('SIGINT', () => {
|
|
210
|
+
console.log('\n\n👋 Shutting down TORM Studio...');
|
|
211
|
+
server.kill('SIGINT');
|
|
212
|
+
process.exit(0);
|
|
213
|
+
});
|
|
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
|
+
}
|
|
270
|
+
async function generate() {
|
|
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
|
+
}
|
|
389
|
+
}
|
|
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');
|
|
523
|
+
}
|
|
524
|
+
// Main CLI logic
|
|
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
|
+
}
|
|
548
|
+
}
|
|
549
|
+
//# 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,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"}
|