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.
@@ -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
- const { execSync } = require('child_process');
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': '^2.0.0',
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
- console.log(`\n\x1b[32mDone!\x1b[0m Created ${created.length} file(s). Run \x1b[36mlangaro-api\x1b[0m to regenerate types.\n`);
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "langaro-api",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Auto-generate TypeScript types, JSDoc annotations, and boilerplate loaders for knex-extended-crud projects",
5
5
  "main": "lib/index.js",
6
6
  "bin": {