langaro-api 1.0.1 → 1.0.3
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/bin/langaro-api.js +4 -0
- package/lib/cli/init.js +3 -2
- package/lib/cli/migrate.js +99 -0
- package/lib/cli/new.js +4 -1
- package/package.json +1 -1
package/bin/langaro-api.js
CHANGED
|
@@ -21,6 +21,10 @@ if (command === 'init') {
|
|
|
21
21
|
// Project scaffolding
|
|
22
22
|
const runInit = require('../lib/cli/init');
|
|
23
23
|
runInit();
|
|
24
|
+
} else if (command === 'migrate') {
|
|
25
|
+
// Migrate existing project to use langaro-api loaders
|
|
26
|
+
const runMigrate = require('../lib/cli/migrate');
|
|
27
|
+
runMigrate();
|
|
24
28
|
} else if (command === 'new') {
|
|
25
29
|
// Interactive resource generator
|
|
26
30
|
const runNew = require('../lib/cli/new');
|
package/lib/cli/init.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const readline = require('readline');
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
const OWN_VERSION = require('../../package.json').version;
|
|
5
6
|
|
|
6
7
|
function ask(rl, question, defaultVal) {
|
|
7
8
|
const suffix = defaultVal ? ` (${defaultVal})` : '';
|
|
@@ -75,7 +76,7 @@ function packageJson(name) {
|
|
|
75
76
|
'knex-extended-crud': '^2.0.31',
|
|
76
77
|
'knex-paginate': '3.2.0',
|
|
77
78
|
'knex-schema-inspector': '^3.0.0',
|
|
78
|
-
'langaro-api':
|
|
79
|
+
'langaro-api': `^${OWN_VERSION}`,
|
|
79
80
|
lodash: '^4.17.21',
|
|
80
81
|
morgan: '^1.10.0',
|
|
81
82
|
multer: '^1.4.5-lts.1',
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
const INDEX_REPLACEMENTS = {
|
|
5
|
+
'src/database/models/index.js': `const { loadModels } = require('langaro-api');
|
|
6
|
+
|
|
7
|
+
module.exports = (knexInstance) => loadModels(knexInstance, __dirname);
|
|
8
|
+
`,
|
|
9
|
+
'src/database/services/index.js': `const { loadServices } = require('langaro-api');
|
|
10
|
+
|
|
11
|
+
module.exports = (models, io) => loadServices(models, io, __dirname);
|
|
12
|
+
`,
|
|
13
|
+
'src/controllers/index.js': `const { loadControllers } = require('langaro-api');
|
|
14
|
+
|
|
15
|
+
module.exports = (services, Queue, io) => loadControllers(services, Queue, io, __dirname);
|
|
16
|
+
`,
|
|
17
|
+
'src/routes/index.js': `const { attachRouters } = require('langaro-api');
|
|
18
|
+
|
|
19
|
+
exports.attachRouters = (express, controllers, services) => {
|
|
20
|
+
attachRouters(express, controllers, services, __dirname);
|
|
21
|
+
};
|
|
22
|
+
`,
|
|
23
|
+
'src/jobs/index.js': `const { loadJobs } = require('langaro-api');
|
|
24
|
+
|
|
25
|
+
module.exports = (services) => loadJobs(services, __dirname);
|
|
26
|
+
`,
|
|
27
|
+
'src/tasks/index.js': `const { loadTasks } = require('langaro-api');
|
|
28
|
+
|
|
29
|
+
module.exports = (services, Queue) => loadTasks(services, Queue, __dirname);
|
|
30
|
+
`,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
function run() {
|
|
34
|
+
const root = process.cwd();
|
|
35
|
+
let replaced = 0;
|
|
36
|
+
let skipped = 0;
|
|
37
|
+
let missing = 0;
|
|
38
|
+
|
|
39
|
+
console.log('\n\x1b[36mlangaro-api migrate\x1b[0m — Replace index files with langaro-api loaders\n');
|
|
40
|
+
|
|
41
|
+
Object.entries(INDEX_REPLACEMENTS).forEach(([relPath, newContent]) => {
|
|
42
|
+
const fullPath = path.resolve(root, relPath);
|
|
43
|
+
|
|
44
|
+
if (!fs.existsSync(fullPath)) {
|
|
45
|
+
console.log(` \x1b[33mmissing\x1b[0m ${relPath} (file not found, skipping)`);
|
|
46
|
+
missing++;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const current = fs.readFileSync(fullPath, 'utf8');
|
|
51
|
+
|
|
52
|
+
// Already migrated — check if it already uses langaro-api
|
|
53
|
+
if (current.includes("require('langaro-api')")) {
|
|
54
|
+
console.log(` \x1b[90mskip\x1b[0m ${relPath} (already using langaro-api)`);
|
|
55
|
+
skipped++;
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Back up the original
|
|
60
|
+
const backupPath = `${fullPath}.bak`;
|
|
61
|
+
fs.writeFileSync(backupPath, current);
|
|
62
|
+
|
|
63
|
+
// Replace with the loader version
|
|
64
|
+
fs.writeFileSync(fullPath, newContent);
|
|
65
|
+
console.log(` \x1b[32mreplaced\x1b[0m ${relPath} (backup at ${path.basename(backupPath)})`);
|
|
66
|
+
replaced++;
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
console.log(`\n Replaced: ${replaced}, Skipped: ${skipped}, Missing: ${missing}\n`);
|
|
70
|
+
|
|
71
|
+
if (replaced > 0) {
|
|
72
|
+
console.log('\x1b[36mManual step required — update src/config/app.js:\x1b[0m\n');
|
|
73
|
+
console.log(' Replace these lines:');
|
|
74
|
+
console.log(" \x1b[31m- const { attachRouters } = require('@/routes');\x1b[0m");
|
|
75
|
+
console.log(" \x1b[31m- const models = await require('@/database/models')(this.knex);\x1b[0m");
|
|
76
|
+
console.log(" \x1b[31m- const services = this.services || require('@/database/services')(models.models, io);\x1b[0m");
|
|
77
|
+
console.log(" \x1b[31m- const controllers = require('@/controllers')(services, Queue, io);\x1b[0m");
|
|
78
|
+
console.log(" \x1b[31m- require('@/tasks')(services, Queue);\x1b[0m");
|
|
79
|
+
console.log('');
|
|
80
|
+
console.log(' With:');
|
|
81
|
+
console.log(" \x1b[32m+ const { loadModels, loadServices, loadControllers, attachRouters, loadTasks } = require('langaro-api');\x1b[0m");
|
|
82
|
+
console.log(' \x1b[32m+ const { models } = await loadModels(this.knex);\x1b[0m');
|
|
83
|
+
console.log(' \x1b[32m+ const services = this.services || loadServices(models, io);\x1b[0m');
|
|
84
|
+
console.log(' \x1b[32m+ const controllers = loadControllers(services, Queue, io);\x1b[0m');
|
|
85
|
+
console.log(' \x1b[32m+ loadTasks(services, Queue);\x1b[0m');
|
|
86
|
+
console.log('');
|
|
87
|
+
console.log(' And in queues.js replace:');
|
|
88
|
+
console.log(" \x1b[31m- const jobs = require('@/jobs/index')(services);\x1b[0m");
|
|
89
|
+
console.log(' With:');
|
|
90
|
+
console.log(" \x1b[32m+ const { loadJobs } = require('langaro-api');\x1b[0m");
|
|
91
|
+
console.log(' \x1b[32m+ const jobs = loadJobs(services);\x1b[0m');
|
|
92
|
+
console.log('');
|
|
93
|
+
console.log(' Then run \x1b[36mnpx langaro-api\x1b[0m to regenerate types.\n');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
process.exit(0);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
module.exports = run;
|
package/lib/cli/new.js
CHANGED
|
@@ -244,7 +244,10 @@ async function run(config = {}) {
|
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
if (created.length > 0) {
|
|
247
|
-
|
|
247
|
+
// Auto-regenerate types so the new resource gets IntelliSense immediately
|
|
248
|
+
const { generateTypes } = require('../index');
|
|
249
|
+
generateTypes(cfg);
|
|
250
|
+
console.log(`\n\x1b[32mDone!\x1b[0m Created ${created.length} file(s). Types regenerated.\n`);
|
|
248
251
|
} else {
|
|
249
252
|
console.log('\nNo files created (all already exist).\n');
|
|
250
253
|
}
|