@foal/cli 4.6.0 → 5.0.1

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.
Files changed (44) hide show
  1. package/LICENSE +1 -1
  2. package/lib/create-secret/create-secret.js +1 -2
  3. package/lib/generate/file-system.js +4 -9
  4. package/lib/generate/generators/angular/connect-angular.js +1 -2
  5. package/lib/generate/generators/app/create-app.js +1 -2
  6. package/lib/generate/generators/controller/create-controller.js +1 -2
  7. package/lib/generate/generators/entity/create-entity.js +1 -2
  8. package/lib/generate/generators/hook/create-hook.js +1 -2
  9. package/lib/generate/generators/react/connect-react.js +1 -2
  10. package/lib/generate/generators/rest-api/create-rest-api.js +1 -2
  11. package/lib/generate/generators/script/create-script.js +1 -2
  12. package/lib/generate/generators/service/create-service.js +1 -2
  13. package/lib/generate/generators/upgrade/upgrade.js +1 -4
  14. package/lib/generate/generators/vue/connect-vue.js +1 -2
  15. package/lib/generate/templates/app/config/default.json +0 -1
  16. package/lib/generate/templates/app/config/default.mongodb.json +0 -3
  17. package/lib/generate/templates/app/config/default.mongodb.yml +0 -3
  18. package/lib/generate/templates/app/config/default.yml +0 -1
  19. package/lib/generate/templates/app/config/e2e.json +3 -1
  20. package/lib/generate/templates/app/config/e2e.mongodb.json +3 -1
  21. package/lib/generate/templates/app/config/e2e.mongodb.yml +2 -1
  22. package/lib/generate/templates/app/config/e2e.yml +2 -1
  23. package/lib/generate/templates/app/package.json +11 -11
  24. package/lib/generate/templates/app/package.mongodb.json +10 -10
  25. package/lib/generate/templates/app/src/scripts/create-user.ts +7 -4
  26. package/lib/generate/templates/app/tsconfig.json +2 -2
  27. package/lib/generate/templates/script/script.ts +3 -1
  28. package/lib/generate/utils/get-names.js +1 -2
  29. package/lib/generate/utils/init-git-repo.js +1 -2
  30. package/lib/generate/utils/install-dependencies.js +1 -2
  31. package/lib/generate/utils/mkdir-if-does-not-exist.js +1 -2
  32. package/lib/generate/utils/rm-dir-and-files-if-exist.js +1 -2
  33. package/lib/index.d.ts +1 -1
  34. package/lib/index.js +3 -4
  35. package/lib/rmdir/rmdir.util.js +1 -2
  36. package/lib/{run-script → run}/get-command-line-arguments.util.js +1 -2
  37. package/lib/run/run-script.d.ts +7 -0
  38. package/lib/run/run-script.js +76 -0
  39. package/package.json +15 -15
  40. package/lib/run-script/run-script.d.ts +0 -6
  41. package/lib/run-script/run-script.js +0 -51
  42. /package/lib/{run-script → run}/get-command-line-arguments.util.d.ts +0 -0
  43. /package/lib/{run-script → run}/index.d.ts +0 -0
  44. /package/lib/{run-script → run}/index.js +0 -0
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017-2022 FoalTS
3
+ Copyright (c) 2017-2025 FoalTS
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSecret = void 0;
3
+ exports.createSecret = createSecret;
4
4
  const crypto_1 = require("crypto");
5
5
  const util_1 = require("util");
6
6
  /**
@@ -13,4 +13,3 @@ async function createSecret() {
13
13
  const buff = await (0, util_1.promisify)(crypto_1.randomBytes)(32);
14
14
  return buff.toString('base64');
15
15
  }
16
- exports.createSecret = createSecret;
@@ -29,10 +29,7 @@ function rmDirAndFiles(path) {
29
29
  * @extends {Error}
30
30
  */
31
31
  class ClientError extends Error {
32
- constructor() {
33
- super(...arguments);
34
- this.name = 'ClientError';
35
- }
32
+ name = 'ClientError';
36
33
  }
37
34
  exports.ClientError = ClientError;
38
35
  /**
@@ -43,11 +40,9 @@ exports.ClientError = ClientError;
43
40
  * @class FileSystem
44
41
  */
45
42
  class FileSystem {
46
- constructor() {
47
- this.currentDir = '';
48
- this.testDir = 'test-generators/subdir';
49
- this.logs = true;
50
- }
43
+ currentDir = '';
44
+ testDir = 'test-generators/subdir';
45
+ logs = true;
51
46
  /**
52
47
  * Do not show create and update logs.
53
48
  *
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.connectAngular = void 0;
3
+ exports.connectAngular = connectAngular;
4
4
  const path_1 = require("path");
5
5
  const safe_1 = require("colors/safe");
6
6
  const file_system_1 = require("../../file-system");
@@ -50,4 +50,3 @@ function connectAngular(path) {
50
50
  return JSON.stringify(config, null, 2);
51
51
  });
52
52
  }
53
- exports.connectAngular = connectAngular;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createApp = void 0;
3
+ exports.createApp = createApp;
4
4
  // 3p
5
5
  const safe_1 = require("colors/safe");
6
6
  // FoalTS
@@ -132,4 +132,3 @@ async function createApp({ name, autoInstall, initRepo, mongodb = false, yaml =
132
132
  utils_1.logger.logCommand('npm run dev');
133
133
  utils_1.logger.log();
134
134
  }
135
- exports.createApp = createApp;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createController = void 0;
3
+ exports.createController = createController;
4
4
  // std
5
5
  const path_1 = require("path");
6
6
  // FoalTS
@@ -37,4 +37,3 @@ function createController({ name, register }) {
37
37
  .addOrExtendClassArrayPropertyIn(parentControllerPath, 'subControllers', `controller('/${names.kebabName}', ${className})`);
38
38
  }
39
39
  }
40
- exports.createController = createController;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createEntity = void 0;
3
+ exports.createEntity = createEntity;
4
4
  // FoalTS
5
5
  const path_1 = require("path");
6
6
  const file_system_1 = require("../../file-system");
@@ -26,4 +26,3 @@ function createEntity({ name }) {
26
26
  .ensureFile('index.ts')
27
27
  .addNamedExportIn('index.ts', names.upperFirstCamelName, `./${names.kebabName}.entity`);
28
28
  }
29
- exports.createEntity = createEntity;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createHook = void 0;
3
+ exports.createHook = createHook;
4
4
  // FoalTS
5
5
  const path_1 = require("path");
6
6
  const file_system_1 = require("../../file-system");
@@ -24,4 +24,3 @@ function createHook({ name }) {
24
24
  .ensureFile('index.ts')
25
25
  .addNamedExportIn('index.ts', names.upperFirstCamelName, `./${names.kebabName}.hook`);
26
26
  }
27
- exports.createHook = createHook;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.connectReact = void 0;
3
+ exports.connectReact = connectReact;
4
4
  const path_1 = require("path");
5
5
  const safe_1 = require("colors/safe");
6
6
  const file_system_1 = require("../../file-system");
@@ -31,4 +31,3 @@ function connectReact(path) {
31
31
  .copy('react/env.development', '.env.development')
32
32
  .render('react/env', '.env', { path: outputPath });
33
33
  }
34
- exports.connectReact = connectReact;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRestApi = void 0;
3
+ exports.createRestApi = createRestApi;
4
4
  // std
5
5
  const path_1 = require("path");
6
6
  // 3p
@@ -61,4 +61,3 @@ function createRestApi({ name, register, auth }) {
61
61
  + ` and ${locals.camelName}Schema (${locals.kebabName}.controller).`);
62
62
  }
63
63
  }
64
- exports.createRestApi = createRestApi;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createScript = void 0;
3
+ exports.createScript = createScript;
4
4
  // FoalTS
5
5
  const file_system_1 = require("../../file-system");
6
6
  const utils_1 = require("../../utils");
@@ -13,4 +13,3 @@ function createScript({ name }) {
13
13
  .cd('src/scripts')
14
14
  .copy('script/script.ts', `${names.kebabName}.ts`);
15
15
  }
16
- exports.createScript = createScript;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createService = void 0;
3
+ exports.createService = createService;
4
4
  // FoalTS
5
5
  const path_1 = require("path");
6
6
  const file_system_1 = require("../../file-system");
@@ -24,4 +24,3 @@ function createService({ name }) {
24
24
  .ensureFile('index.ts')
25
25
  .addNamedExportIn('index.ts', names.upperFirstCamelName, `./${names.kebabName}.service`);
26
26
  }
27
- exports.createService = createService;
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.upgrade = void 0;
4
- // 3p
5
- const fetch = require("node-fetch");
3
+ exports.upgrade = upgrade;
6
4
  // FoalTS
7
5
  const file_system_1 = require("../../file-system");
8
6
  const utils_1 = require("../../utils");
@@ -34,4 +32,3 @@ async function upgrade({ version, autoInstall }, options = { getLatestVersion })
34
32
  utils_1.logger.log();
35
33
  }
36
34
  }
37
- exports.upgrade = upgrade;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.connectVue = void 0;
3
+ exports.connectVue = connectVue;
4
4
  const path_1 = require("path");
5
5
  const safe_1 = require("colors/safe");
6
6
  const file_system_1 = require("../../file-system");
@@ -35,4 +35,3 @@ function connectVue(path) {
35
35
  return JSON.stringify(pkg, null, 2);
36
36
  });
37
37
  }
38
- exports.connectVue = connectVue;
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "port": "env(PORT)",
3
3
  "settings": {
4
- "loggerFormat": "foal",
5
4
  "session": {
6
5
  "store": "@foal/typeorm"
7
6
  }
@@ -1,8 +1,5 @@
1
1
  {
2
2
  "port": "env(PORT)",
3
- "settings": {
4
- "loggerFormat": "foal"
5
- },
6
3
  "database": {
7
4
  "type": "mongodb",
8
5
  "url": "mongodb://localhost:27017//* kebabName */"
@@ -1,8 +1,5 @@
1
1
  port: env(PORT)
2
2
 
3
- settings:
4
- loggerFormat: foal
5
-
6
3
  database:
7
4
  type: mongodb
8
5
  url: mongodb://localhost:27017//* kebabName */
@@ -1,7 +1,6 @@
1
1
  port: env(PORT)
2
2
 
3
3
  settings:
4
- loggerFormat: foal
5
4
  session:
6
5
  store: '@foal/typeorm'
7
6
 
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "settings": {
3
- "loggerFormat": "none"
3
+ "logger": {
4
+ "logHttpRequests": false
5
+ }
4
6
  },
5
7
  "database": {
6
8
  "database": "./e2e_db.sqlite3",
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "settings": {
3
- "loggerFormat": "none"
3
+ "logger": {
4
+ "logHttpRequests": false
5
+ }
4
6
  },
5
7
  "database": {
6
8
  "url": "mongodb://localhost:27017/e2e-/* kebabName */"
@@ -1,5 +1,6 @@
1
1
  settings:
2
- loggerFormat: 'none'
2
+ logger:
3
+ logHttpRequests: false
3
4
 
4
5
  database:
5
6
  url: mongodb://localhost:27017/e2e-/* kebabName */
@@ -1,5 +1,6 @@
1
1
  settings:
2
- loggerFormat: 'none'
2
+ logger:
3
+ logHttpRequests: false
3
4
 
4
5
  database:
5
6
  database: './e2e_db.sqlite3'
@@ -21,26 +21,26 @@
21
21
  "revertmigration": "npx typeorm migration:revert -d build/db"
22
22
  },
23
23
  "engines": {
24
- "node": ">=18.0.0"
24
+ "node": ">=22.0.0"
25
25
  },
26
26
  "dependencies": {
27
- "@foal/core": "^4.0.0",
28
- "@foal/typeorm": "^4.0.0",
27
+ "@foal/core": "^5.0.0",
28
+ "@foal/typeorm": "^5.0.0",
29
29
  "source-map-support": "~0.5.21",
30
30
  "sqlite3": "~5.1.7",
31
- "typeorm": "0.3.17"
31
+ "typeorm": "0.3.24"
32
32
  },
33
33
  "devDependencies": {
34
- "@foal/cli": "^4.0.0",
35
- "@types/mocha": "10.0.7",
36
- "@types/node": "18.18.6",
37
- "concurrently": "~9.0.0",
38
- "mocha": "~10.7.2",
39
- "supertest": "~7.0.0",
34
+ "@foal/cli": "^5.0.0",
35
+ "@types/mocha": "10.0.10",
36
+ "@types/node": "22.15.21",
37
+ "concurrently": "~9.1.2",
38
+ "mocha": "~11.5.0",
39
+ "supertest": "~7.1.1",
40
40
  "supervisor": "~0.12.0",
41
41
  "eslint": "~8.48.0",
42
42
  "@typescript-eslint/eslint-plugin": "~6.5.0",
43
43
  "@typescript-eslint/parser": "~6.5.0",
44
- "typescript": "~4.9.5"
44
+ "typescript": "~5.5.4"
45
45
  }
46
46
  }
@@ -18,25 +18,25 @@
18
18
  "lint:fix": "eslint --ext ts --fix src"
19
19
  },
20
20
  "engines": {
21
- "node": ">=18.0.0"
21
+ "node": ">=22.0.0"
22
22
  },
23
23
  "dependencies": {
24
- "@foal/core": "^4.0.0",
24
+ "@foal/core": "^5.0.0",
25
25
  "mongodb": "~5.9.2",
26
26
  "source-map-support": "~0.5.21",
27
- "typeorm": "0.3.17"
27
+ "typeorm": "0.3.24"
28
28
  },
29
29
  "devDependencies": {
30
- "@foal/cli": "^4.0.0",
31
- "@types/mocha": "10.0.7",
32
- "@types/node": "18.18.6",
33
- "concurrently": "~9.0.0",
34
- "mocha": "~10.7.2",
35
- "supertest": "~7.0.0",
30
+ "@foal/cli": "^5.0.0",
31
+ "@types/mocha": "10.0.10",
32
+ "@types/node": "22.15.21",
33
+ "concurrently": "~9.1.2",
34
+ "mocha": "~11.5.0",
35
+ "supertest": "~7.1.1",
36
36
  "supervisor": "~0.12.0",
37
37
  "eslint": "~8.48.0",
38
38
  "@typescript-eslint/eslint-plugin": "~6.5.0",
39
39
  "@typescript-eslint/parser": "~6.5.0",
40
- "typescript": "~4.9.5"
40
+ "typescript": "~5.5.4"
41
41
  }
42
42
  }
@@ -1,3 +1,6 @@
1
+ // 3p
2
+ import { Logger, ServiceManager } from '@foal/core';
3
+
1
4
  // App
2
5
  import { User } from '../app/entities';
3
6
  import { dataSource } from '../db';
@@ -13,15 +16,15 @@ export const schema = {
13
16
  type: 'object',
14
17
  };
15
18
 
16
- export async function main() {
19
+ export async function main(args: any, services: ServiceManager, logger: Logger) {
17
20
  await dataSource.initialize();
18
21
 
19
22
  try {
20
23
  const user = new User();
21
24
 
22
- console.log(await user.save());
23
- } catch (error: any) {
24
- console.error(error.message);
25
+ await user.save();
26
+
27
+ logger.info(`User created: ${JSON.stringify(user, null, 2)}`);
25
28
  } finally {
26
29
  await dataSource.destroy();
27
30
  }
@@ -8,10 +8,10 @@
8
8
  "noImplicitAny": false,
9
9
  "strictPropertyInitialization": false,
10
10
  "module": "commonjs",
11
- "target": "es2021",
11
+ "target": "es2023",
12
12
  "rootDir": "src",
13
13
  "lib": [
14
- "es2021",
14
+ "es2023",
15
15
  "dom"
16
16
  ]
17
17
  },
@@ -1,3 +1,5 @@
1
+ import { Logger, ServiceManager } from '@foal/core';
2
+
1
3
  export const schema = {
2
4
  additionalProperties: false,
3
5
  properties: {
@@ -9,6 +11,6 @@ export const schema = {
9
11
  type: 'object',
10
12
  };
11
13
 
12
- export async function main(args: any) {
14
+ export async function main(args: any, services: ServiceManager, logger: Logger) {
13
15
 
14
16
  }
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getNames = void 0;
3
+ exports.getNames = getNames;
4
4
  function getNames(name) {
5
5
  const camelName = name.replace(/-([a-z])/gi, g => g[1].toUpperCase());
6
6
  const kebabName = name.replace(/([a-z][A-Z])/g, g => `${g[0]}-${g[1].toLowerCase()}`);
7
7
  const upperFirstCamelName = camelName.charAt(0).toUpperCase() + camelName.slice(1);
8
8
  return { camelName, kebabName, upperFirstCamelName };
9
9
  }
10
- exports.getNames = getNames;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.initGitRepo = void 0;
3
+ exports.initGitRepo = initGitRepo;
4
4
  const child_process_1 = require("child_process");
5
5
  // This file is inspired by the Angular CLI (MIT License: https://angular.io/license).
6
6
  // See https://github.com/angular/angular-cli/blob/master/packages/angular_devkit/schematics/tasks/repo-init/executor.ts
@@ -31,4 +31,3 @@ async function initGitRepo(root) {
31
31
  console.log(' Initialization of git failed.');
32
32
  }
33
33
  }
34
- exports.initGitRepo = initGitRepo;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.installDependencies = void 0;
3
+ exports.installDependencies = installDependencies;
4
4
  // std
5
5
  const child_process_1 = require("child_process");
6
6
  const safe_1 = require("colors/safe");
@@ -49,4 +49,3 @@ async function installDependencies(cwd = '') {
49
49
  return { failed: false };
50
50
  }
51
51
  }
52
- exports.installDependencies = installDependencies;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mkdirIfDoesNotExist = void 0;
3
+ exports.mkdirIfDoesNotExist = mkdirIfDoesNotExist;
4
4
  // std
5
5
  const fs_1 = require("fs");
6
6
  function mkdirIfDoesNotExist(path) {
@@ -13,4 +13,3 @@ function mkdirIfDoesNotExist(path) {
13
13
  }
14
14
  }
15
15
  }
16
- exports.mkdirIfDoesNotExist = mkdirIfDoesNotExist;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rmDirAndFilesIfExist = void 0;
3
+ exports.rmDirAndFilesIfExist = rmDirAndFilesIfExist;
4
4
  // std
5
5
  const fs_1 = require("fs");
6
6
  const path_1 = require("path");
@@ -20,4 +20,3 @@ function rmDirAndFilesIfExist(path) {
20
20
  }
21
21
  (0, fs_1.rmdirSync)(path);
22
22
  }
23
- exports.rmDirAndFilesIfExist = rmDirAndFilesIfExist;
package/lib/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * FoalTS
4
- * Copyright(c) 2017-2022 Loïc Poullain <loic.poullain@centraliens.net>
4
+ * Copyright(c) 2017-2025 Loïc Poullain
5
5
  * Released under the MIT License.
6
6
  */
7
7
  export {};
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  /**
4
4
  * FoalTS
5
- * Copyright(c) 2017-2022 Loïc Poullain <loic.poullain@centraliens.net>
5
+ * Copyright(c) 2017-2025 Loïc Poullain
6
6
  * Released under the MIT License.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -14,7 +14,7 @@ const create_secret_1 = require("./create-secret");
14
14
  const generate_1 = require("./generate");
15
15
  const file_system_1 = require("./generate/file-system");
16
16
  const rmdir_1 = require("./rmdir");
17
- const run_script_1 = require("./run-script");
17
+ const run_1 = require("./run");
18
18
  function displayError(...lines) {
19
19
  console.error();
20
20
  lines.forEach(line => console.error((0, safe_1.red)(line)));
@@ -49,10 +49,9 @@ commander_1.program
49
49
  commander_1.program
50
50
  .command('run')
51
51
  .argument('<name>', 'Name of the script to run')
52
- .alias('run-script')
53
52
  .description('Run a shell script.')
54
53
  .action((name) => {
55
- (0, run_script_1.runScript)({ name }, process.argv);
54
+ (0, run_1.runScript)({ name }, process.argv);
56
55
  });
57
56
  commander_1.program
58
57
  .command('connect')
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rmdir = void 0;
3
+ exports.rmdir = rmdir;
4
4
  // std
5
5
  const promises_1 = require("node:fs/promises");
6
6
  /**
@@ -22,4 +22,3 @@ async function rmdir(path) {
22
22
  }
23
23
  await (0, promises_1.rm)(path, { recursive: true });
24
24
  }
25
- exports.rmdir = rmdir;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCommandLineArguments = void 0;
3
+ exports.getCommandLineArguments = getCommandLineArguments;
4
4
  function getCommandLineArguments(argv) {
5
5
  const args = argv.splice(4);
6
6
  const result = {};
@@ -19,4 +19,3 @@ function getCommandLineArguments(argv) {
19
19
  });
20
20
  return result;
21
21
  }
22
- exports.getCommandLineArguments = getCommandLineArguments;
@@ -0,0 +1,7 @@
1
+ import type { Logger, ServiceManager } from '@foal/core';
2
+ export declare function runScript({ name }: {
3
+ name: string;
4
+ }, argv: string[]): Promise<void>;
5
+ export declare function execScript({ name }: {
6
+ name: string;
7
+ }, argv: string[], services: ServiceManager, logger: Logger): Promise<void>;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runScript = runScript;
4
+ exports.execScript = execScript;
5
+ // std
6
+ const fs_1 = require("fs");
7
+ const crypto_1 = require("crypto");
8
+ // 3p
9
+ const ajv_1 = require("ajv");
10
+ const ajv_formats_1 = require("ajv-formats");
11
+ // FoalTS
12
+ const get_command_line_arguments_util_1 = require("./get-command-line-arguments.util");
13
+ // TODO: test this function
14
+ async function runScript({ name }, argv) {
15
+ try {
16
+ const { Logger, ServiceManager } = require(require.resolve('@foal/core', {
17
+ paths: [process.cwd()],
18
+ }));
19
+ const services = new ServiceManager();
20
+ const logger = services.get(Logger);
21
+ logger.initLogContext(() => execScript({ name }, argv, services, logger).catch(error => console.error(error)));
22
+ }
23
+ catch (error) {
24
+ if (error.code === 'MODULE_NOT_FOUND') {
25
+ console.error('@foal/core module not found. Are you sure you are in a FoalTS project?');
26
+ return;
27
+ }
28
+ throw error;
29
+ }
30
+ }
31
+ async function execScript({ name }, argv, services, logger) {
32
+ logger.addLogContext({
33
+ scriptId: (0, crypto_1.randomUUID)(),
34
+ scriptName: name
35
+ });
36
+ if (!(0, fs_1.existsSync)(`build/scripts/${name}.js`)) {
37
+ if ((0, fs_1.existsSync)(`src/scripts/${name}.ts`)) {
38
+ logger.error(`Script "${name}" not found in build/scripts/ but found in src/scripts/. Did you forget to build it?`);
39
+ }
40
+ else {
41
+ logger.error(`Script "${name}" not found.`);
42
+ }
43
+ return;
44
+ }
45
+ const { main, schema } = require(require.resolve(`./build/scripts/${name}`, {
46
+ paths: [process.cwd()],
47
+ }));
48
+ if (!main) {
49
+ logger.error(`No "main" function found in script "${name}".`);
50
+ return;
51
+ }
52
+ const args = (0, get_command_line_arguments_util_1.getCommandLineArguments)(argv);
53
+ if (schema) {
54
+ const ajv = new ajv_1.default({ useDefaults: true, allErrors: true });
55
+ (0, ajv_formats_1.default)(ajv);
56
+ if (!ajv.validate(schema, args)) {
57
+ ajv.errors.forEach(err => {
58
+ if (err.instancePath) {
59
+ logger.error(`Script argument "${err.instancePath.split('/')[1]}" ${err.message}.`);
60
+ }
61
+ else {
62
+ logger.error(`Script arguments ${err.message}.`);
63
+ }
64
+ });
65
+ return;
66
+ }
67
+ }
68
+ try {
69
+ await main(args, services, logger);
70
+ logger.info(`Script "${name}" completed.`);
71
+ }
72
+ catch (error) {
73
+ logger.error(error.message, { error });
74
+ logger.error(`Script "${name}" failed.`);
75
+ }
76
+ }
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@foal/cli",
3
- "version": "4.6.0",
3
+ "version": "5.0.1",
4
4
  "description": "CLI tool for FoalTS",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
7
7
  "scripts": {
8
- "test": "npm run test:generators && npm run test:run-script && npm run test:create-secret && npm run test:rmdir && npm run test:fs",
8
+ "test": "npm run test:generators && npm run test:run && npm run test:create-secret && npm run test:rmdir && npm run test:fs",
9
9
  "test:fs": "mocha --file \"./src/test.ts\" --require ts-node/register \"./src/generate/file-system.spec.ts\"",
10
10
  "dev:test:fs": "mocha --file \"./src/test.ts\" --require ts-node/register --watch --extension ts \"./src/generate/file-system.spec.ts\"",
11
11
  "test:generators": "mocha --file \"./src/test.ts\" --require ts-node/register \"./src/generate/generators/**/*.spec.ts\"",
12
12
  "dev:test:generators": "mocha --file \"./src/test.ts\" --require ts-node/register --watch --extension ts \"./src/generate/generators/**/*.spec.ts\"",
13
13
  "test:rmdir": "mocha --file \"./src/test.ts\" --require ts-node/register \"./src/rmdir/**/*.spec.ts\"",
14
14
  "dev:test:rmdir": "mocha --file \"./src/test.ts\" --require ts-node/register --watch --extension ts \"./src/rmdir/**/*.spec.ts\"",
15
- "test:run-script": "mocha --file \"./src/test.ts\" --require ts-node/register \"./src/run-script/**/*.spec.ts\"",
16
- "dev:test:run-script": "mocha --file \"./src/test.ts\" --require ts-node/register --watch --extension ts \"./src/run-script/**/*.spec.ts\"",
15
+ "test:run": "mocha --file \"./src/test.ts\" --require ts-node/register \"./src/run/**/*.spec.ts\"",
16
+ "dev:test:run": "mocha --file \"./src/test.ts\" --require ts-node/register --watch --extension ts \"./src/run/**/*.spec.ts\"",
17
17
  "test:create-secret": "mocha --file \"./src/test.ts\" --require ts-node/register \"./src/create-secret/**/*.spec.ts\"",
18
18
  "dev:test:create-secret": "mocha --file \"./src/test.ts\" --require ts-node/register --watch --extension ts \"./src/create-secret/**/*.spec.ts\"",
19
19
  "build": "rimraf lib && tsc -p tsconfig-build.json && copyfiles -a -u 3 \"src/generate/templates/**/*\" lib/generate/templates",
@@ -23,7 +23,7 @@
23
23
  "url": "https://github.com/sponsors/LoicPoullain"
24
24
  },
25
25
  "engines": {
26
- "node": ">=18.0.0"
26
+ "node": ">=22.0.0"
27
27
  },
28
28
  "bin": {
29
29
  "foal": "./lib/index.js"
@@ -49,7 +49,7 @@
49
49
  },
50
50
  "homepage": "https://github.com/FoalTS",
51
51
  "contributors": [
52
- "Loïc Poullain <loic.poullain@centraliens.net>"
52
+ "Loïc Poullain"
53
53
  ],
54
54
  "license": "MIT",
55
55
  "files": [
@@ -57,21 +57,21 @@
57
57
  "bin/"
58
58
  ],
59
59
  "dependencies": {
60
- "ajv": "~8.17.0",
60
+ "ajv": "~8.17.1",
61
61
  "ajv-formats": "~2.1.1",
62
62
  "cli-spinner": "~0.2.10",
63
63
  "colors": "1.4.0",
64
- "commander": "~12.1.0",
65
- "node-fetch": "~2.7.0"
64
+ "commander": "~12.1.0"
66
65
  },
67
66
  "devDependencies": {
68
- "@types/mocha": "10.0.7",
69
- "@types/node": "18.18.6",
67
+ "@foal/core": "^5.0.1",
68
+ "@types/mocha": "10.0.10",
69
+ "@types/node": "22.15.21",
70
70
  "copyfiles": "~2.4.1",
71
- "mocha": "~10.7.2",
72
- "rimraf": "~5.0.5",
71
+ "mocha": "~11.5.0",
72
+ "rimraf": "~6.0.1",
73
73
  "ts-node": "~10.9.2",
74
- "typescript": "~4.9.5"
74
+ "typescript": "~5.5.4"
75
75
  },
76
- "gitHead": "fa98f651f9b210cd7961150d79c4ca6c6eb489b3"
76
+ "gitHead": "5f11c13a8e546361616034eaaa6e8c3096b8d9a5"
77
77
  }
@@ -1,6 +0,0 @@
1
- export declare function runScript({ name }: {
2
- name: string;
3
- }, argv: string[], log?: {
4
- (...data: any[]): void;
5
- (message?: any, ...optionalParams: any[]): void;
6
- }): Promise<void>;
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runScript = void 0;
4
- // std
5
- const fs_1 = require("fs");
6
- const path_1 = require("path");
7
- // 3p
8
- const ajv_1 = require("ajv");
9
- const ajv_formats_1 = require("ajv-formats");
10
- // FoalTS
11
- const get_command_line_arguments_util_1 = require("./get-command-line-arguments.util");
12
- async function runScript({ name }, argv, log = console.log) {
13
- if (!(0, fs_1.existsSync)(`build/scripts/${name}.js`)) {
14
- if ((0, fs_1.existsSync)(`src/scripts/${name}.ts`)) {
15
- log(`The script "${name}" does not exist in build/scripts/. But it exists in src/scripts/.`
16
- + ' Please build your script by running the command "npm run build" or using "npm run dev".');
17
- }
18
- else {
19
- log(`The script "${name}" does not exist. You can create it by running the command "npx foal g script ${name}".`);
20
- }
21
- return;
22
- }
23
- const { main, schema } = require((0, path_1.join)(process.cwd(), `./build/scripts/${name}`));
24
- if (!main) {
25
- log(`Error: No "main" function was found in build/scripts/${name}.js.`);
26
- return;
27
- }
28
- const args = (0, get_command_line_arguments_util_1.getCommandLineArguments)(argv);
29
- if (schema) {
30
- const ajv = new ajv_1.default({ useDefaults: true, allErrors: true });
31
- (0, ajv_formats_1.default)(ajv);
32
- if (!ajv.validate(schema, args)) {
33
- ajv.errors.forEach(err => {
34
- if (err.instancePath) {
35
- log(`Script error: the value of "${err.instancePath.split('/')[1]}" ${err.message}.`);
36
- }
37
- else {
38
- log(`Script error: arguments ${err.message}.`);
39
- }
40
- });
41
- return;
42
- }
43
- }
44
- try {
45
- await main(args);
46
- }
47
- catch (error) {
48
- log(error);
49
- }
50
- }
51
- exports.runScript = runScript;
File without changes
File without changes