@onurege3467/zerohelper 10.2.6 → 11.0.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 +9 -704
- package/dist/index.js +19 -44
- package/package.json +21 -70
- package/dist/bin/commands/cache.d.ts +0 -2
- package/dist/bin/commands/cache.js +0 -92
- package/dist/bin/commands/db-backup.d.ts +0 -3
- package/dist/bin/commands/db-backup.js +0 -118
- package/dist/bin/commands/db.d.ts +0 -2
- package/dist/bin/commands/db.js +0 -334
- package/dist/bin/commands/import-export.d.ts +0 -3
- package/dist/bin/commands/import-export.js +0 -123
- package/dist/bin/commands/init.d.ts +0 -2
- package/dist/bin/commands/init.js +0 -85
- package/dist/bin/commands/migrate.d.ts +0 -3
- package/dist/bin/commands/migrate.js +0 -167
- package/dist/bin/commands/repl.d.ts +0 -2
- package/dist/bin/commands/repl.js +0 -96
- package/dist/bin/commands/seed.d.ts +0 -2
- package/dist/bin/commands/seed.js +0 -76
- package/dist/bin/commands/zpack.d.ts +0 -2
- package/dist/bin/commands/zpack.js +0 -36
- package/dist/bin/index.d.ts +0 -2
- package/dist/bin/index.js +0 -28
- package/dist/bin/types.d.ts +0 -22
- package/dist/bin/types.js +0 -2
- package/dist/bin/utils/config.d.ts +0 -3
- package/dist/bin/utils/config.js +0 -78
- package/dist/bin/utils/prompts.d.ts +0 -3
- package/dist/bin/utils/prompts.js +0 -115
- package/dist/bin/zero.d.ts +0 -2
- package/dist/bin/zero.js +0 -849
- package/dist/database/IDatabase.d.ts +0 -71
- package/dist/database/IDatabase.js +0 -48
- package/dist/database/cacheWrapper.d.ts +0 -34
- package/dist/database/cacheWrapper.js +0 -214
- package/dist/database/index.d.ts +0 -12
- package/dist/database/index.js +0 -100
- package/dist/database/json.d.ts +0 -32
- package/dist/database/json.js +0 -208
- package/dist/database/migration.d.ts +0 -21
- package/dist/database/migration.js +0 -97
- package/dist/database/mongodb.d.ts +0 -26
- package/dist/database/mongodb.js +0 -145
- package/dist/database/mysql.d.ts +0 -29
- package/dist/database/mysql.js +0 -282
- package/dist/database/pg.d.ts +0 -28
- package/dist/database/pg.js +0 -200
- package/dist/database/redis.d.ts +0 -31
- package/dist/database/redis.js +0 -176
- package/dist/database/seeder.d.ts +0 -20
- package/dist/database/seeder.js +0 -37
- package/dist/database/sqlite.d.ts +0 -26
- package/dist/database/sqlite.js +0 -211
- package/dist/database/telemetry.d.ts +0 -35
- package/dist/database/telemetry.js +0 -41
- package/dist/database/toon.d.ts +0 -33
- package/dist/database/toon.js +0 -244
- package/dist/database/types.d.ts +0 -71
- package/dist/database/types.js +0 -2
- package/dist/database/zpack.d.ts +0 -75
- package/dist/database/zpack.js +0 -616
- package/dist/functions/index.d.ts +0 -199
- package/dist/functions/index.js +0 -682
- package/dist/functions/security.d.ts +0 -15
- package/dist/functions/security.js +0 -46
- package/dist/functions/toon.d.ts +0 -10
- package/dist/functions/toon.js +0 -214
- package/dist/functions/worker.d.ts +0 -5
- package/dist/functions/worker.js +0 -35
- package/dist/index.d.ts +0 -8
- package/dist/migrations/1767521950635_test_migration.d.ts +0 -3
- package/dist/migrations/1767521950635_test_migration.js +0 -11
- package/dist/migrations/1767522158826_create_users_table.d.ts +0 -2
- package/dist/migrations/1767522158826_create_users_table.js +0 -11
- package/dist/package.json +0 -79
- package/dist/tests/test.d.ts +0 -1
- package/dist/tests/test.js +0 -26
- package/dist/zero.config.d.ts +0 -10
- package/dist/zero.config.js +0 -13
package/dist/index.js
CHANGED
|
@@ -1,45 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.functions = exports.database = void 0;
|
|
37
|
-
const database = __importStar(require("./database"));
|
|
38
|
-
exports.database = database;
|
|
39
|
-
const functions = __importStar(require("./functions"));
|
|
40
|
-
exports.functions = functions;
|
|
41
|
-
// For backward compatibility with require
|
|
42
|
-
exports.default = {
|
|
43
|
-
database,
|
|
44
|
-
functions,
|
|
1
|
+
const core = require('@onurege3467/zerohelper-core');
|
|
2
|
+
const utils = require('zerohelper-utils');
|
|
3
|
+
const security = require('zerohelper-security');
|
|
4
|
+
const ai = require('zerohelper-ai');
|
|
5
|
+
const worker = require('zerohelper-worker');
|
|
6
|
+
const toon = require('zerohelper-toon');
|
|
7
|
+
|
|
8
|
+
module.exports = {
|
|
9
|
+
database: {
|
|
10
|
+
createDatabase: core.createDatabase,
|
|
11
|
+
IDatabase: core.IDatabase,
|
|
12
|
+
},
|
|
13
|
+
functions: {
|
|
14
|
+
...utils,
|
|
15
|
+
...security,
|
|
16
|
+
...ai,
|
|
17
|
+
...worker,
|
|
18
|
+
...toon,
|
|
19
|
+
},
|
|
45
20
|
};
|
package/package.json
CHANGED
|
@@ -1,79 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onurege3467/zerohelper",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "ZeroHelper
|
|
3
|
+
"version": "11.0.0",
|
|
4
|
+
"description": "ZeroHelper - Meta package re-exporting all modules",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"build": "tsc",
|
|
12
|
-
"prepublishOnly": "npm run build",
|
|
13
|
-
"test": "jest"
|
|
14
|
-
},
|
|
15
|
-
"files": [
|
|
16
|
-
"dist"
|
|
17
|
-
],
|
|
18
|
-
"keywords": [
|
|
19
|
-
"helper",
|
|
20
|
-
"zerohelper",
|
|
21
|
-
"database",
|
|
22
|
-
"uuid",
|
|
23
|
-
"mongodb",
|
|
24
|
-
"mysql",
|
|
25
|
-
"jsondatabase",
|
|
26
|
-
"sqlite3",
|
|
27
|
-
"quick.db",
|
|
28
|
-
"postgresql",
|
|
29
|
-
"utility",
|
|
30
|
-
"functions",
|
|
31
|
-
"nodejs",
|
|
32
|
-
"validation",
|
|
33
|
-
"logger",
|
|
34
|
-
"migration",
|
|
35
|
-
"increment",
|
|
36
|
-
"decrement",
|
|
37
|
-
"zpack",
|
|
38
|
-
"typescript",
|
|
39
|
-
"cli",
|
|
40
|
-
"worker"
|
|
41
|
-
],
|
|
7
|
+
"scripts": {},
|
|
8
|
+
"keywords": ["zerohelper", "database", "utility"],
|
|
42
9
|
"author": "Onure9e",
|
|
43
10
|
"license": "ISC",
|
|
44
11
|
"dependencies": {
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"ora": "^5.4.1",
|
|
60
|
-
"path": "^0.12.7",
|
|
61
|
-
"pg": "^8.14.1",
|
|
62
|
-
"promise-mysql": "^5.2.0",
|
|
63
|
-
"redis": "^4.7.0",
|
|
64
|
-
"sqlite3": "^5.1.7"
|
|
12
|
+
"@onurege3467/zerohelper-core": "^11.0.0",
|
|
13
|
+
"zerohelper-mysql-adapter": "^11.0.0",
|
|
14
|
+
"zerohelper-postgres-adapter": "^11.0.0",
|
|
15
|
+
"zerohelper-sqlite-adapter": "^11.0.0",
|
|
16
|
+
"zerohelper-mongodb-adapter": "^11.0.0",
|
|
17
|
+
"zerohelper-redis-adapter": "^11.0.0",
|
|
18
|
+
"zerohelper-json-adapter": "^11.0.0",
|
|
19
|
+
"zerohelper-zpack-adapter": "^11.0.0",
|
|
20
|
+
"zerohelper-toon-adapter": "^11.0.0",
|
|
21
|
+
"zerohelper-utils": "^11.0.0",
|
|
22
|
+
"zerohelper-security": "^11.0.0",
|
|
23
|
+
"zerohelper-ai": "^11.0.0",
|
|
24
|
+
"zerohelper-worker": "^11.0.0",
|
|
25
|
+
"zerohelper-toon": "^11.0.0"
|
|
65
26
|
},
|
|
66
|
-
"devDependencies": {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"@types/jest": "^29.5.14",
|
|
70
|
-
"@types/js-yaml": "^4.0.9",
|
|
71
|
-
"@types/jsonwebtoken": "^9.0.7",
|
|
72
|
-
"@types/lodash": "^4.17.13",
|
|
73
|
-
"@types/node": "^22.10.2",
|
|
74
|
-
"@types/pg": "^8.11.10",
|
|
75
|
-
"jest": "^29.7.0",
|
|
76
|
-
"ts-jest": "^29.2.5",
|
|
77
|
-
"typescript": "^5.7.2"
|
|
78
|
-
}
|
|
27
|
+
"devDependencies": {},
|
|
28
|
+
"files": ["dist", "README.md"],
|
|
29
|
+
"publishConfig": { "access": "public" }
|
|
79
30
|
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.cacheCommand = void 0;
|
|
7
|
-
const commander_1 = require("commander");
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const ora_1 = __importDefault(require("ora"));
|
|
10
|
-
const config_1 = require("../utils/config");
|
|
11
|
-
exports.cacheCommand = new commander_1.Command().name('cache');
|
|
12
|
-
exports.cacheCommand
|
|
13
|
-
.command('clear')
|
|
14
|
-
.description('Clear all cache')
|
|
15
|
-
.option('-c, --config <path>', 'Path to config file', 'zero.config.ts')
|
|
16
|
-
.action(async (options) => {
|
|
17
|
-
const spinner = (0, ora_1.default)('Clearing cache...').start();
|
|
18
|
-
try {
|
|
19
|
-
const db = await (0, config_1.getDatabase)(options.config);
|
|
20
|
-
const metrics = db.getMetrics();
|
|
21
|
-
const beforeHits = metrics.cache?.hits || 0;
|
|
22
|
-
const beforeMisses = metrics.cache?.misses || 0;
|
|
23
|
-
await db.insert('_cache_clear', { timestamp: Date.now() });
|
|
24
|
-
await db.delete('_cache_clear', { timestamp: Date.now() });
|
|
25
|
-
const afterMetrics = db.getMetrics();
|
|
26
|
-
const afterHits = afterMetrics.cache?.hits || 0;
|
|
27
|
-
const afterMisses = afterMetrics.cache?.misses || 0;
|
|
28
|
-
spinner.succeed(chalk_1.default.green('✅ Cache cleared'));
|
|
29
|
-
console.log(chalk_1.default.gray(` Previous hits: ${beforeHits}`));
|
|
30
|
-
console.log(chalk_1.default.gray(` Previous misses: ${beforeMisses}`));
|
|
31
|
-
await db.close();
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
spinner.fail(chalk_1.default.red('❌ Cache clear failed'));
|
|
35
|
-
console.error(chalk_1.default.red(error.message));
|
|
36
|
-
process.exit(1);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
exports.cacheCommand
|
|
40
|
-
.command('stats')
|
|
41
|
-
.description('Show detailed cache statistics')
|
|
42
|
-
.option('-c, --config <path>', 'Path to config file', 'zero.config.ts')
|
|
43
|
-
.action(async (options) => {
|
|
44
|
-
try {
|
|
45
|
-
const db = await (0, config_1.getDatabase)(options.config);
|
|
46
|
-
const metrics = db.getMetrics();
|
|
47
|
-
console.log(chalk_1.default.bold('\n📊 Cache Statistics'));
|
|
48
|
-
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
49
|
-
if (!metrics.cache) {
|
|
50
|
-
console.log(chalk_1.default.yellow(' No cache statistics available'));
|
|
51
|
-
console.log(chalk_1.default.gray(' Cache may not be enabled for this adapter'));
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
const hits = metrics.cache.hits || 0;
|
|
55
|
-
const misses = metrics.cache.misses || 0;
|
|
56
|
-
const total = hits + misses;
|
|
57
|
-
const hitRate = total > 0 ? (hits / total) * 100 : 0;
|
|
58
|
-
console.log(chalk_1.default.cyan(' Cache Hits:'), chalk_1.default.green(hits.toLocaleString()));
|
|
59
|
-
console.log(chalk_1.default.cyan(' Cache Misses:'), chalk_1.default.red(misses.toLocaleString()));
|
|
60
|
-
console.log(chalk_1.default.cyan(' Total Requests:'), chalk_1.default.white(total.toLocaleString()));
|
|
61
|
-
console.log(chalk_1.default.cyan(' Hit Rate:'), chalk_1.default.white(`${hitRate.toFixed(2)}%`));
|
|
62
|
-
let healthStatus = '❌';
|
|
63
|
-
let healthColor = chalk_1.default.red;
|
|
64
|
-
if (hitRate >= 90) {
|
|
65
|
-
healthStatus = '✅ Excellent';
|
|
66
|
-
healthColor = chalk_1.default.green;
|
|
67
|
-
}
|
|
68
|
-
else if (hitRate >= 70) {
|
|
69
|
-
healthStatus = '⚠️ Good';
|
|
70
|
-
healthColor = chalk_1.default.yellow;
|
|
71
|
-
}
|
|
72
|
-
else if (hitRate >= 50) {
|
|
73
|
-
healthStatus = '⚠️ Fair';
|
|
74
|
-
healthColor = chalk_1.default.yellow;
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
healthStatus = '❌ Poor';
|
|
78
|
-
healthColor = chalk_1.default.red;
|
|
79
|
-
}
|
|
80
|
-
console.log(chalk_1.default.cyan(' Health:'), healthColor(healthStatus));
|
|
81
|
-
if (hitRate < 70) {
|
|
82
|
-
console.log(chalk_1.default.gray('\n 💡 Tip: Consider increasing cache TTL for better hit rate'));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
console.log(chalk_1.default.gray('\n' + '─'.repeat(50)));
|
|
86
|
-
await db.close();
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
console.error(chalk_1.default.red(`Error: ${error.message}`));
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.dbRestoreCommand = exports.dbBackupCommand = void 0;
|
|
7
|
-
const commander_1 = require("commander");
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const ora_1 = __importDefault(require("ora"));
|
|
10
|
-
const fs_1 = __importDefault(require("fs"));
|
|
11
|
-
const path_1 = __importDefault(require("path"));
|
|
12
|
-
const config_1 = require("../utils/config");
|
|
13
|
-
const prompts_1 = require("../utils/prompts");
|
|
14
|
-
exports.dbBackupCommand = new commander_1.Command().name('db');
|
|
15
|
-
exports.dbBackupCommand
|
|
16
|
-
.command('backup')
|
|
17
|
-
.description('Backup database to timestamped file')
|
|
18
|
-
.option('-c, --config <path>', 'Path to config file', 'zero.config.ts')
|
|
19
|
-
.option('-o, --output <dir>', 'Output directory for backups', './backups')
|
|
20
|
-
.action(async (options) => {
|
|
21
|
-
const spinner = (0, ora_1.default)('Creating backup...').start();
|
|
22
|
-
try {
|
|
23
|
-
const db = await (0, config_1.getDatabase)(options.config);
|
|
24
|
-
const config = (0, config_1.loadConfig)(options.config);
|
|
25
|
-
const backupDir = path_1.default.resolve(process.cwd(), options.output);
|
|
26
|
-
if (!fs_1.default.existsSync(backupDir)) {
|
|
27
|
-
fs_1.default.mkdirSync(backupDir, { recursive: true });
|
|
28
|
-
}
|
|
29
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
|
|
30
|
-
const backupFile = path_1.default.join(backupDir, `backup_${timestamp}.zerohelper.json`);
|
|
31
|
-
let tables = [];
|
|
32
|
-
if (config.adapter === 'json' && config.config.path) {
|
|
33
|
-
const dbPath = path_1.default.resolve(process.cwd(), config.config.path);
|
|
34
|
-
if (fs_1.default.existsSync(dbPath)) {
|
|
35
|
-
const dbContent = JSON.parse(fs_1.default.readFileSync(dbPath, 'utf-8'));
|
|
36
|
-
tables = Object.keys(dbContent);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
else if (config.adapter === 'sqlite' && config.config.path) {
|
|
40
|
-
tables = await db.tables?.() || [];
|
|
41
|
-
}
|
|
42
|
-
else if (config.adapter === 'zpack' && config.config.path) {
|
|
43
|
-
tables = await db.tables?.() || [];
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
tables = ['users', 'products', 'orders', 'migrations', 'migration_test', 'test_backup'];
|
|
47
|
-
}
|
|
48
|
-
const backupData = {
|
|
49
|
-
version: '10.2.5',
|
|
50
|
-
timestamp: new Date().toISOString(),
|
|
51
|
-
config: config,
|
|
52
|
-
data: {}
|
|
53
|
-
};
|
|
54
|
-
for (const table of tables) {
|
|
55
|
-
try {
|
|
56
|
-
const records = await db.select(table);
|
|
57
|
-
if (records.length > 0) {
|
|
58
|
-
backupData.data[table] = records;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
// Table doesn't exist or can't be accessed
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
fs_1.default.writeFileSync(backupFile, JSON.stringify(backupData, null, 2));
|
|
66
|
-
const fileSize = fs_1.default.statSync(backupFile).size;
|
|
67
|
-
spinner.succeed(chalk_1.default.green(`✅ Backup created: ${backupFile}`));
|
|
68
|
-
console.log(chalk_1.default.gray(` Size: ${(0, config_1.formatBytes)(fileSize)}`));
|
|
69
|
-
console.log(chalk_1.default.gray(` Tables: ${Object.keys(backupData.data).join(', ') || 'none'}`));
|
|
70
|
-
await db.close();
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
spinner.fail(chalk_1.default.red('❌ Backup failed'));
|
|
74
|
-
console.error(chalk_1.default.red(error.message));
|
|
75
|
-
process.exit(1);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
exports.dbRestoreCommand = new commander_1.Command().name('db');
|
|
79
|
-
exports.dbRestoreCommand
|
|
80
|
-
.command('restore')
|
|
81
|
-
.description('Restore database from backup file')
|
|
82
|
-
.argument('<backup-file>', 'Path to backup file')
|
|
83
|
-
.option('-c, --config <path>', 'Path to config file', 'zero.config.ts')
|
|
84
|
-
.action(async (backupFile, options) => {
|
|
85
|
-
if (!fs_1.default.existsSync(backupFile)) {
|
|
86
|
-
console.error(chalk_1.default.red(`Error: Backup file not found: ${backupFile}`));
|
|
87
|
-
process.exit(1);
|
|
88
|
-
}
|
|
89
|
-
const backupData = JSON.parse(fs_1.default.readFileSync(backupFile, 'utf-8'));
|
|
90
|
-
const confirmed = await (0, prompts_1.confirmAction)(chalk_1.default.yellow(`⚠️ This will restore data from backup. Are you sure?`));
|
|
91
|
-
if (!confirmed) {
|
|
92
|
-
console.log(chalk_1.default.yellow('Restore cancelled'));
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const spinner = (0, ora_1.default)('Restoring database...').start();
|
|
96
|
-
try {
|
|
97
|
-
const db = await (0, config_1.getDatabase)(options.config);
|
|
98
|
-
for (const [table, records] of Object.entries(backupData.data)) {
|
|
99
|
-
const rows = records;
|
|
100
|
-
if (Array.isArray(rows) && rows.length > 0) {
|
|
101
|
-
try {
|
|
102
|
-
await db.bulkInsert(table, rows);
|
|
103
|
-
spinner.text = `✅ ${table}: ${rows.length} records`;
|
|
104
|
-
}
|
|
105
|
-
catch (err) {
|
|
106
|
-
spinner.text = `⚠️ ${table}: failed`;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
spinner.succeed(chalk_1.default.green(`✅ Database restored from ${backupFile}`));
|
|
111
|
-
await db.close();
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
spinner.fail(chalk_1.default.red('❌ Restore failed'));
|
|
115
|
-
console.error(chalk_1.default.red(error.message));
|
|
116
|
-
process.exit(1);
|
|
117
|
-
}
|
|
118
|
-
});
|