@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
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TORM Migration System
|
|
4
|
+
* Handles data-shape migrations for schemaless 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.MigrationRunner = void 0;
|
|
44
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
45
|
+
const fs = __importStar(require("fs"));
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
class MigrationRunner {
|
|
48
|
+
constructor(redisOptions, migrationsDir) {
|
|
49
|
+
this.migrationKey = 'toonstore:_migrations';
|
|
50
|
+
if (redisOptions.url) {
|
|
51
|
+
this.redis = new ioredis_1.default(redisOptions.url);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.redis = new ioredis_1.default({
|
|
55
|
+
host: redisOptions.host || 'localhost',
|
|
56
|
+
port: redisOptions.port || 6379,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
this.migrationsDir = migrationsDir || path.join(process.cwd(), 'migrations');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get list of applied migrations from database
|
|
63
|
+
*/
|
|
64
|
+
async getAppliedMigrations() {
|
|
65
|
+
const data = await this.redis.get(this.migrationKey);
|
|
66
|
+
return data ? JSON.parse(data) : [];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Save applied migrations to database
|
|
70
|
+
*/
|
|
71
|
+
async saveAppliedMigrations(migrations) {
|
|
72
|
+
await this.redis.set(this.migrationKey, JSON.stringify(migrations));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get list of migration files from directory
|
|
76
|
+
*/
|
|
77
|
+
getMigrationFiles() {
|
|
78
|
+
if (!fs.existsSync(this.migrationsDir)) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
return fs
|
|
82
|
+
.readdirSync(this.migrationsDir)
|
|
83
|
+
.filter(file => file.endsWith('.js') || file.endsWith('.ts'))
|
|
84
|
+
.sort();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Load a migration module
|
|
88
|
+
*/
|
|
89
|
+
async loadMigration(filename) {
|
|
90
|
+
const filePath = path.join(this.migrationsDir, filename);
|
|
91
|
+
const module = require(filePath);
|
|
92
|
+
const migration = module.default || module;
|
|
93
|
+
if (!migration.up || !migration.down) {
|
|
94
|
+
throw new Error(`Migration ${filename} must export up() and down() functions`);
|
|
95
|
+
}
|
|
96
|
+
const timestamp = filename.split('_')[0];
|
|
97
|
+
const name = filename.replace(/\.(js|ts)$/, '');
|
|
98
|
+
return {
|
|
99
|
+
name,
|
|
100
|
+
timestamp,
|
|
101
|
+
up: migration.up,
|
|
102
|
+
down: migration.down,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get pending migrations that haven't been applied yet
|
|
107
|
+
*/
|
|
108
|
+
async getPendingMigrations() {
|
|
109
|
+
const applied = await this.getAppliedMigrations();
|
|
110
|
+
const files = this.getMigrationFiles();
|
|
111
|
+
const pending = [];
|
|
112
|
+
for (const file of files) {
|
|
113
|
+
const migration = await this.loadMigration(file);
|
|
114
|
+
if (!applied.includes(migration.name)) {
|
|
115
|
+
pending.push(migration);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return pending;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Run pending migrations
|
|
122
|
+
*/
|
|
123
|
+
async up(count) {
|
|
124
|
+
const pending = await this.getPendingMigrations();
|
|
125
|
+
if (pending.length === 0) {
|
|
126
|
+
console.log('✅ No pending migrations');
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const toRun = count ? pending.slice(0, count) : pending;
|
|
130
|
+
const applied = await this.getAppliedMigrations();
|
|
131
|
+
console.log(`\n📦 Running ${toRun.length} migration(s)...\n`);
|
|
132
|
+
for (const migration of toRun) {
|
|
133
|
+
try {
|
|
134
|
+
console.log(`⏳ Running: ${migration.name}`);
|
|
135
|
+
await migration.up(this.redis);
|
|
136
|
+
applied.push(migration.name);
|
|
137
|
+
await this.saveAppliedMigrations(applied);
|
|
138
|
+
console.log(`✅ Applied: ${migration.name}\n`);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
console.error(`❌ Failed: ${migration.name}`);
|
|
142
|
+
console.error(` ${error.message}\n`);
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
console.log(`✅ All migrations applied successfully!\n`);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Rollback last migration
|
|
150
|
+
*/
|
|
151
|
+
async down(count = 1) {
|
|
152
|
+
const applied = await this.getAppliedMigrations();
|
|
153
|
+
if (applied.length === 0) {
|
|
154
|
+
console.log('⚠️ No migrations to rollback');
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const toRollback = applied.slice(-count);
|
|
158
|
+
console.log(`\n📦 Rolling back ${toRollback.length} migration(s)...\n`);
|
|
159
|
+
for (let i = toRollback.length - 1; i >= 0; i--) {
|
|
160
|
+
const name = toRollback[i];
|
|
161
|
+
const filename = this.getMigrationFiles().find(f => f.includes(name));
|
|
162
|
+
if (!filename) {
|
|
163
|
+
console.error(`❌ Migration file not found: ${name}`);
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
const migration = await this.loadMigration(filename);
|
|
168
|
+
console.log(`⏳ Rolling back: ${migration.name}`);
|
|
169
|
+
await migration.down(this.redis);
|
|
170
|
+
const index = applied.indexOf(name);
|
|
171
|
+
applied.splice(index, 1);
|
|
172
|
+
await this.saveAppliedMigrations(applied);
|
|
173
|
+
console.log(`✅ Rolled back: ${migration.name}\n`);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
console.error(`❌ Failed to rollback: ${name}`);
|
|
177
|
+
console.error(` ${error.message}\n`);
|
|
178
|
+
throw error;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
console.log(`✅ Rollback completed!\n`);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Show migration status
|
|
185
|
+
*/
|
|
186
|
+
async status() {
|
|
187
|
+
const applied = await this.getAppliedMigrations();
|
|
188
|
+
const files = this.getMigrationFiles();
|
|
189
|
+
console.log('\n📋 Migration Status:\n');
|
|
190
|
+
if (files.length === 0) {
|
|
191
|
+
console.log(' No migration files found\n');
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
for (const file of files) {
|
|
195
|
+
const migration = await this.loadMigration(file);
|
|
196
|
+
const isApplied = applied.includes(migration.name);
|
|
197
|
+
const status = isApplied ? '✅' : '⏸️ ';
|
|
198
|
+
const label = isApplied ? 'Applied' : 'Pending';
|
|
199
|
+
console.log(` ${status} ${migration.name} - ${label}`);
|
|
200
|
+
}
|
|
201
|
+
console.log();
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Create a new migration file
|
|
205
|
+
*/
|
|
206
|
+
async create(name) {
|
|
207
|
+
if (!fs.existsSync(this.migrationsDir)) {
|
|
208
|
+
fs.mkdirSync(this.migrationsDir, { recursive: true });
|
|
209
|
+
}
|
|
210
|
+
const timestamp = new Date().toISOString().replace(/[-:]/g, '').split('.')[0];
|
|
211
|
+
const filename = `${timestamp}_${name}.ts`;
|
|
212
|
+
const filepath = path.join(this.migrationsDir, filename);
|
|
213
|
+
const template = `/**
|
|
214
|
+
* Migration: ${name}
|
|
215
|
+
* Created: ${new Date().toISOString()}
|
|
216
|
+
*/
|
|
217
|
+
|
|
218
|
+
import { Redis } from 'ioredis';
|
|
219
|
+
|
|
220
|
+
export default {
|
|
221
|
+
async up(client: Redis) {
|
|
222
|
+
// TODO: Implement forward migration
|
|
223
|
+
// Example: Add a field to all documents
|
|
224
|
+
/*
|
|
225
|
+
const pattern = 'toonstore:User:*';
|
|
226
|
+
const keys = await client.keys(pattern);
|
|
227
|
+
|
|
228
|
+
for (const key of keys) {
|
|
229
|
+
const data = JSON.parse(await client.get(key) || '{}');
|
|
230
|
+
|
|
231
|
+
// Add new field with default value
|
|
232
|
+
data.newField = data.newField ?? 'default';
|
|
233
|
+
|
|
234
|
+
await client.set(key, JSON.stringify(data));
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
console.log(\`Updated \${keys.length} documents\`);
|
|
238
|
+
*/
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
async down(client: Redis) {
|
|
242
|
+
// TODO: Implement rollback migration
|
|
243
|
+
// Example: Remove the field
|
|
244
|
+
/*
|
|
245
|
+
const pattern = 'toonstore:User:*';
|
|
246
|
+
const keys = await client.keys(pattern);
|
|
247
|
+
|
|
248
|
+
for (const key of keys) {
|
|
249
|
+
const data = JSON.parse(await client.get(key) || '{}');
|
|
250
|
+
|
|
251
|
+
// Remove the field
|
|
252
|
+
delete data.newField;
|
|
253
|
+
|
|
254
|
+
await client.set(key, JSON.stringify(data));
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
console.log(\`Rolled back \${keys.length} documents\`);
|
|
258
|
+
*/
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
`;
|
|
262
|
+
fs.writeFileSync(filepath, template);
|
|
263
|
+
console.log(`\n✅ Created migration: ${filename}`);
|
|
264
|
+
console.log(` Location: ${filepath}\n`);
|
|
265
|
+
console.log(`📝 Edit the migration file and implement up() and down()\n`);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Close Redis connection
|
|
269
|
+
*/
|
|
270
|
+
async close() {
|
|
271
|
+
await this.redis.quit();
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
exports.MigrationRunner = MigrationRunner;
|
|
275
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sDAA4B;AAC5B,uCAAyB;AACzB,2CAA6B;AAS7B,MAAa,eAAe;IAK1B,YAAY,YAA4D,EAAE,aAAsB;QAFxF,iBAAY,GAAG,uBAAuB,CAAC;QAG7C,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAK,CAAC;gBACrB,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,WAAW;gBACtC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,IAAI;aAChC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,UAAoB;QAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,EAAE;aACN,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC;aAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC5D,IAAI,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;QAE3C,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,wCAAwC,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAEhD,OAAO;YACL,IAAI;YACJ,SAAS;YACT,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,IAAI,EAAE,SAAS,CAAC,IAAI;SACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB;QACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEvC,MAAM,OAAO,GAAgB,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,KAAc;QACrB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAElD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAElD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,MAAM,oBAAoB,CAAC,CAAC;QAE9D,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,MAAM,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,aAAa,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;gBACvC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,QAAgB,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAElD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QAEzC,OAAO,CAAC,GAAG,CAAC,qBAAqB,UAAU,CAAC,MAAM,oBAAoB,CAAC,CAAC;QAExE,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAEtE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;gBACrD,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEjC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACpC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACzB,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBAE1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;gBAC/C,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;gBACvC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEvC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAExC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YACvC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAEhD,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,IAAI,SAAS,CAAC,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,IAAI,KAAK,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG;gBACL,IAAI;cACN,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CrC,CAAC;QAEE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAErC,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,IAAI,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF;AA3QD,0CA2QC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
private inferType;
|
|
21
|
+
start(): Promise<void>;
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# 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;IA+enB,OAAO,CAAC,SAAS;IAyBX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|