@toonstore/torm 0.2.0 ā 0.3.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 +353 -76
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +210 -0
- package/dist/cli.js.map +1 -0
- package/dist/studio-server.d.ts +23 -0
- package/dist/studio-server.d.ts.map +1 -0
- package/dist/studio-server.js +302 -0
- package/dist/studio-server.js.map +1 -0
- package/package.json +12 -4
- package/studio/index.html +631 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
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 command = process.argv[2];
|
|
45
|
+
const args = process.argv.slice(3);
|
|
46
|
+
function printHelp() {
|
|
47
|
+
console.log(`
|
|
48
|
+
TORM CLI - ToonStoreDB ORM Tools
|
|
49
|
+
|
|
50
|
+
Usage:
|
|
51
|
+
torm <command> [options]
|
|
52
|
+
|
|
53
|
+
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
|
|
58
|
+
|
|
59
|
+
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
|
+
|
|
65
|
+
Config:
|
|
66
|
+
Create torm.config.ts in your project root with DB credentials
|
|
67
|
+
|
|
68
|
+
For more info, visit: https://github.com/toonstore/torm
|
|
69
|
+
`);
|
|
70
|
+
}
|
|
71
|
+
function findConfig() {
|
|
72
|
+
const configPaths = [
|
|
73
|
+
path.join(process.cwd(), 'torm.config.ts'),
|
|
74
|
+
path.join(process.cwd(), 'torm.config.js'),
|
|
75
|
+
];
|
|
76
|
+
for (const configPath of configPaths) {
|
|
77
|
+
if (fs.existsSync(configPath)) {
|
|
78
|
+
console.log(`š Found config: ${configPath}\n`);
|
|
79
|
+
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')) {
|
|
83
|
+
const config = require(configPath);
|
|
84
|
+
return config.default || config;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.error(`ā ļø Error loading config: ${err.message}\n`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
async function studio() {
|
|
95
|
+
console.log('š Starting TORM Studio...\n');
|
|
96
|
+
// Load config
|
|
97
|
+
const config = findConfig();
|
|
98
|
+
if (!config) {
|
|
99
|
+
console.log('ā ļø No torm.config.ts found in current directory\n');
|
|
100
|
+
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');
|
|
125
|
+
console.log(' Edit this file with your database credentials\n');
|
|
126
|
+
console.log(' Then run `torm studio` again\n');
|
|
127
|
+
process.exit(0);
|
|
128
|
+
}
|
|
129
|
+
// Get port from args or config or default
|
|
130
|
+
let port = 4983; // Drizzle uses 4983
|
|
131
|
+
if (args.includes('--port')) {
|
|
132
|
+
port = parseInt(args[args.indexOf('--port') + 1]);
|
|
133
|
+
}
|
|
134
|
+
else if (config.studio?.port) {
|
|
135
|
+
port = config.studio.port;
|
|
136
|
+
}
|
|
137
|
+
// Check if studio-server.js exists
|
|
138
|
+
const serverPath = path.join(__dirname, 'studio-server.js');
|
|
139
|
+
if (!fs.existsSync(serverPath)) {
|
|
140
|
+
console.error('ā Studio server not found!');
|
|
141
|
+
console.error(' Expected at:', serverPath);
|
|
142
|
+
console.error('\nš” Run `npm run build` first\n');
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
console.log('š Starting TORM Studio server...\n');
|
|
146
|
+
// Pass config to server via environment
|
|
147
|
+
const env = {
|
|
148
|
+
...process.env,
|
|
149
|
+
PORT: port.toString(),
|
|
150
|
+
TOONSTORE_HOST: config.dbCredentials?.host || 'localhost',
|
|
151
|
+
TOONSTORE_PORT: (config.dbCredentials?.port || 6379).toString(),
|
|
152
|
+
TOONSTORE_URL: config.dbCredentials?.url || '',
|
|
153
|
+
TOONSTORE_PASSWORD: config.dbCredentials?.password || '',
|
|
154
|
+
};
|
|
155
|
+
const server = (0, child_process_1.spawn)('node', [serverPath], {
|
|
156
|
+
stdio: 'inherit',
|
|
157
|
+
env,
|
|
158
|
+
});
|
|
159
|
+
server.on('error', (err) => {
|
|
160
|
+
console.error('\nā Error starting TORM Studio:');
|
|
161
|
+
console.error(' ', err.message);
|
|
162
|
+
process.exit(1);
|
|
163
|
+
});
|
|
164
|
+
server.on('close', (code) => {
|
|
165
|
+
if (code !== 0) {
|
|
166
|
+
console.log(`\nā ļø TORM Studio exited with code ${code}`);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
// Handle Ctrl+C gracefully
|
|
170
|
+
process.on('SIGINT', () => {
|
|
171
|
+
console.log('\n\nš Shutting down TORM Studio...');
|
|
172
|
+
server.kill('SIGINT');
|
|
173
|
+
process.exit(0);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
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);
|
|
181
|
+
}
|
|
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);
|
|
187
|
+
}
|
|
188
|
+
// 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);
|
|
209
|
+
}
|
|
210
|
+
//# 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,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TORM Studio Server (Node.js)
|
|
3
|
+
* Web-based visual database manager for ToonStoreDB
|
|
4
|
+
*/
|
|
5
|
+
export interface StudioServerOptions {
|
|
6
|
+
port?: number;
|
|
7
|
+
host?: string;
|
|
8
|
+
redisUrl?: string;
|
|
9
|
+
redisHost?: string;
|
|
10
|
+
redisPort?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class StudioServer {
|
|
13
|
+
private app;
|
|
14
|
+
private redis;
|
|
15
|
+
private port;
|
|
16
|
+
private host;
|
|
17
|
+
constructor(options?: StudioServerOptions);
|
|
18
|
+
private setupMiddleware;
|
|
19
|
+
private setupRoutes;
|
|
20
|
+
start(): Promise<void>;
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=studio-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-server.d.ts","sourceRoot":"","sources":["../src/studio-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;gBAET,OAAO,GAAE,mBAAwB;IAyB7C,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,WAAW;IAgMb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TORM Studio Server (Node.js)
|
|
4
|
+
* Web-based visual database manager for ToonStoreDB
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.StudioServer = void 0;
|
|
44
|
+
const express_1 = __importDefault(require("express"));
|
|
45
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
const fs = __importStar(require("fs"));
|
|
48
|
+
class StudioServer {
|
|
49
|
+
constructor(options = {}) {
|
|
50
|
+
this.app = (0, express_1.default)();
|
|
51
|
+
this.port = options.port || 4983; // Drizzle Studio uses 4983
|
|
52
|
+
this.host = options.host || 'localhost';
|
|
53
|
+
// Connect to ToonStoreDB from environment or options
|
|
54
|
+
const redisUrl = process.env.TOONSTORE_URL || options.redisUrl;
|
|
55
|
+
const redisHost = process.env.TOONSTORE_HOST || options.redisHost || 'localhost';
|
|
56
|
+
const redisPort = Number(process.env.TOONSTORE_PORT) || options.redisPort || 6379;
|
|
57
|
+
const redisPassword = process.env.TOONSTORE_PASSWORD || undefined;
|
|
58
|
+
if (redisUrl) {
|
|
59
|
+
this.redis = new ioredis_1.default(redisUrl);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.redis = new ioredis_1.default({
|
|
63
|
+
host: redisHost,
|
|
64
|
+
port: redisPort,
|
|
65
|
+
password: redisPassword,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
this.setupMiddleware();
|
|
69
|
+
this.setupRoutes();
|
|
70
|
+
}
|
|
71
|
+
setupMiddleware() {
|
|
72
|
+
this.app.use(express_1.default.json());
|
|
73
|
+
this.app.use(express_1.default.urlencoded({ extended: true }));
|
|
74
|
+
// CORS
|
|
75
|
+
this.app.use((req, res, next) => {
|
|
76
|
+
res.header('Access-Control-Allow-Origin', '*');
|
|
77
|
+
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
|
|
78
|
+
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
79
|
+
if (req.method === 'OPTIONS') {
|
|
80
|
+
return res.sendStatus(200);
|
|
81
|
+
}
|
|
82
|
+
next();
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
setupRoutes() {
|
|
86
|
+
// Serve Studio UI
|
|
87
|
+
this.app.get('/', (req, res) => {
|
|
88
|
+
const htmlPath = path.join(__dirname, '..', 'studio', 'index.html');
|
|
89
|
+
if (fs.existsSync(htmlPath)) {
|
|
90
|
+
let html = fs.readFileSync(htmlPath, 'utf-8');
|
|
91
|
+
// Replace the title to show "local.torm.studio"
|
|
92
|
+
html = html.replace('<title>TORM Studio - ToonStore Database Manager</title>', '<title>local.torm.studio - TORM Studio</title>');
|
|
93
|
+
res.send(html);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
res.status(500).send('Studio UI not found');
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// API: Get all keys (collections)
|
|
100
|
+
this.app.get('/api/keys', async (req, res) => {
|
|
101
|
+
try {
|
|
102
|
+
const pattern = req.query.pattern || '*';
|
|
103
|
+
const keys = await this.redis.keys(pattern);
|
|
104
|
+
// Group keys by collection
|
|
105
|
+
const collections = new Map();
|
|
106
|
+
keys.forEach(key => {
|
|
107
|
+
const parts = key.split(':');
|
|
108
|
+
if (parts.length >= 2 && parts[0] === 'toonstore') {
|
|
109
|
+
const collection = parts[1];
|
|
110
|
+
if (!collections.has(collection)) {
|
|
111
|
+
collections.set(collection, []);
|
|
112
|
+
}
|
|
113
|
+
collections.get(collection).push(key);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
res.json({
|
|
117
|
+
total: keys.length,
|
|
118
|
+
collections: Array.from(collections.entries()).map(([name, keys]) => ({
|
|
119
|
+
name,
|
|
120
|
+
count: keys.length,
|
|
121
|
+
keys,
|
|
122
|
+
})),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
res.status(500).json({ error: error.message });
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
// API: Get value by key
|
|
130
|
+
this.app.get('/api/key/:key', async (req, res) => {
|
|
131
|
+
try {
|
|
132
|
+
const key = decodeURIComponent(req.params.key);
|
|
133
|
+
const value = await this.redis.get(key);
|
|
134
|
+
if (value === null) {
|
|
135
|
+
return res.status(404).json({ error: 'Key not found' });
|
|
136
|
+
}
|
|
137
|
+
// Try to parse as JSON
|
|
138
|
+
let parsedValue;
|
|
139
|
+
try {
|
|
140
|
+
parsedValue = JSON.parse(value);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
parsedValue = value;
|
|
144
|
+
}
|
|
145
|
+
res.json({
|
|
146
|
+
key,
|
|
147
|
+
value: parsedValue,
|
|
148
|
+
type: typeof parsedValue,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
res.status(500).json({ error: error.message });
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
// API: Set value
|
|
156
|
+
this.app.post('/api/key/:key', async (req, res) => {
|
|
157
|
+
try {
|
|
158
|
+
const key = decodeURIComponent(req.params.key);
|
|
159
|
+
const { value } = req.body;
|
|
160
|
+
const stringValue = typeof value === 'string'
|
|
161
|
+
? value
|
|
162
|
+
: JSON.stringify(value);
|
|
163
|
+
await this.redis.set(key, stringValue);
|
|
164
|
+
res.json({
|
|
165
|
+
success: true,
|
|
166
|
+
key,
|
|
167
|
+
message: 'Key set successfully'
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
res.status(500).json({ error: error.message });
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
// API: Delete key
|
|
175
|
+
this.app.delete('/api/key/:key', async (req, res) => {
|
|
176
|
+
try {
|
|
177
|
+
const key = decodeURIComponent(req.params.key);
|
|
178
|
+
const result = await this.redis.del(key);
|
|
179
|
+
res.json({
|
|
180
|
+
success: result > 0,
|
|
181
|
+
deleted: result,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
res.status(500).json({ error: error.message });
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
// API: Database stats
|
|
189
|
+
this.app.get('/api/stats', async (req, res) => {
|
|
190
|
+
try {
|
|
191
|
+
const info = await this.redis.info();
|
|
192
|
+
const dbsize = await this.redis.dbsize();
|
|
193
|
+
// Parse info string
|
|
194
|
+
const lines = info.split('\r\n');
|
|
195
|
+
const stats = {};
|
|
196
|
+
lines.forEach(line => {
|
|
197
|
+
if (line.includes(':')) {
|
|
198
|
+
const [key, value] = line.split(':');
|
|
199
|
+
stats[key.trim()] = value.trim();
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
res.json({
|
|
203
|
+
total_keys: dbsize,
|
|
204
|
+
used_memory: stats.used_memory_human || 'N/A',
|
|
205
|
+
connected_clients: stats.connected_clients || 'N/A',
|
|
206
|
+
uptime_days: stats.uptime_in_days || 'N/A',
|
|
207
|
+
redis_version: stats.redis_version || 'N/A',
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
res.status(500).json({ error: error.message });
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
// API: Get collection data
|
|
215
|
+
this.app.get('/api/collection/:name', async (req, res) => {
|
|
216
|
+
try {
|
|
217
|
+
const collection = req.params.name;
|
|
218
|
+
const pattern = `toonstore:${collection}:*`;
|
|
219
|
+
const keys = await this.redis.keys(pattern);
|
|
220
|
+
const documents = [];
|
|
221
|
+
for (const key of keys) {
|
|
222
|
+
const value = await this.redis.get(key);
|
|
223
|
+
if (value) {
|
|
224
|
+
try {
|
|
225
|
+
documents.push(JSON.parse(value));
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
documents.push({ _raw: value });
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
res.json({
|
|
233
|
+
collection,
|
|
234
|
+
count: documents.length,
|
|
235
|
+
documents,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
res.status(500).json({ error: error.message });
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
// API: Health check
|
|
243
|
+
this.app.get('/api/health', async (req, res) => {
|
|
244
|
+
try {
|
|
245
|
+
await this.redis.ping();
|
|
246
|
+
res.json({
|
|
247
|
+
status: 'ok',
|
|
248
|
+
database: 'connected',
|
|
249
|
+
timestamp: new Date().toISOString(),
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
res.status(500).json({
|
|
254
|
+
status: 'error',
|
|
255
|
+
error: error.message
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
async start() {
|
|
261
|
+
return new Promise(async (resolve, reject) => {
|
|
262
|
+
// Test connection first
|
|
263
|
+
console.log('š Testing database connection...');
|
|
264
|
+
try {
|
|
265
|
+
await this.redis.ping();
|
|
266
|
+
console.log('ā
Connected to ToonStoreDB\n');
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
console.error('ā Failed to connect to ToonStoreDB:');
|
|
270
|
+
console.error(' ', error.message);
|
|
271
|
+
console.error('\nš” Check your torm.config.ts credentials');
|
|
272
|
+
console.error(' or make sure ToonStoreDB is running\n');
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
275
|
+
this.app.listen(this.port, '127.0.0.1', () => {
|
|
276
|
+
console.log(`\nšØ TORM Studio running at:`);
|
|
277
|
+
console.log(` ā http://localhost:${this.port}\n`);
|
|
278
|
+
console.log(`š” Press Ctrl+C to stop\n`);
|
|
279
|
+
resolve();
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
async stop() {
|
|
284
|
+
await this.redis.quit();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
exports.StudioServer = StudioServer;
|
|
288
|
+
// CLI usage
|
|
289
|
+
if (require.main === module) {
|
|
290
|
+
const port = process.env.PORT ? parseInt(process.env.PORT) : 4983;
|
|
291
|
+
const server = new StudioServer({ port });
|
|
292
|
+
server.start().catch((err) => {
|
|
293
|
+
console.error('Failed to start studio server:', err);
|
|
294
|
+
process.exit(1);
|
|
295
|
+
});
|
|
296
|
+
process.on('SIGINT', async () => {
|
|
297
|
+
console.log('\n\nš Shutting down TORM Studio...');
|
|
298
|
+
await server.stop();
|
|
299
|
+
process.exit(0);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=studio-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"studio-server.js","sourceRoot":"","sources":["../src/studio-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toonstore/torm",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "ToonStoreDB ORM client for Node.js",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
@@ -9,24 +9,32 @@
|
|
|
9
9
|
"dev": "npx tsc --watch",
|
|
10
10
|
"example": "node examples/basic-usage.js",
|
|
11
11
|
"test": "echo \"No tests yet\" && exit 0",
|
|
12
|
-
"prepublishOnly": "npm run build"
|
|
12
|
+
"prepublishOnly": "npm run build",
|
|
13
|
+
"studio": "node dist/cli.js studio",
|
|
14
|
+
"generate": "node dist/cli.js generate",
|
|
15
|
+
"migrate": "node dist/cli.js migrate"
|
|
16
|
+
},
|
|
17
|
+
"bin": {
|
|
18
|
+
"torm": "dist/cli.js"
|
|
13
19
|
},
|
|
14
20
|
"publishConfig": {
|
|
15
21
|
"access": "public"
|
|
16
22
|
},
|
|
17
23
|
"keywords": [
|
|
24
|
+
"toonstoredb",
|
|
18
25
|
"toonstore",
|
|
19
26
|
"orm",
|
|
20
27
|
"database",
|
|
21
|
-
"redis",
|
|
22
28
|
"toon"
|
|
23
29
|
],
|
|
24
30
|
"author": "ToonStore Team",
|
|
25
31
|
"license": "MIT",
|
|
26
32
|
"dependencies": {
|
|
33
|
+
"express": "^4.18.2",
|
|
27
34
|
"ioredis": "^5.3.0"
|
|
28
35
|
},
|
|
29
36
|
"devDependencies": {
|
|
37
|
+
"@types/express": "^4.17.21",
|
|
30
38
|
"@types/node": "^20.19.27",
|
|
31
39
|
"typescript": "^5.9.3"
|
|
32
40
|
}
|