@ama-openapi/cli 14.1.0-prerelease.9 → 14.1.0-rc.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.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @ama-openapi/cli
2
2
 
3
3
  > [!WARNING]
4
- > [Experimental](https://github.com/AmadeusITGroup/otter/blob/main/README.md#experimental): This package is available in early access, it will be part of the v14 release.
4
+ > [Experimental](https://github.com/AmadeusITGroup/otter/blob/main/README.md#experimental): This package is available in early access, the final version will be released in v15.
5
5
 
6
6
  [![Stable Version](https://img.shields.io/npm/v/@ama-openapi/cli?style=for-the-badge)](https://www.npmjs.com/package/@ama-openapi/cli)
7
7
  [![Bundle Size](https://img.shields.io/bundlephobia/min/@ama-openapi/cli?color=green&style=for-the-badge)](https://www.npmjs.com/package/@ama-openapi/cli)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ama-openapi/cli",
3
- "version": "14.1.0-prerelease.9",
3
+ "version": "14.1.0-rc.1",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -32,47 +32,42 @@
32
32
  }
33
33
  },
34
34
  "dependencies": {
35
- "@ama-openapi/core": "~14.1.0-prerelease.9",
35
+ "@ama-openapi/core": "~14.1.0-rc.1",
36
+ "@o3r/telemetry": "~14.1.0-rc.1",
36
37
  "tslib": "^2.6.2",
37
38
  "yargs": "~18.0.0"
38
39
  },
39
40
  "peerDependencies": {
40
- "@o3r/telemetry": "~14.1.0-prerelease.9",
41
41
  "chokidar": "^4.0.0 || ^5.0.0"
42
42
  },
43
43
  "peerDependenciesMeta": {
44
- "@o3r/telemetry": {
45
- "optional": true
46
- },
47
44
  "chokidar": {
48
45
  "optional": true
49
46
  }
50
47
  },
51
48
  "devDependencies": {
52
- "@angular/cli": "~21.1.0",
49
+ "@angular/cli": "~21.2.0",
53
50
  "@babel/core": "~7.29.0",
54
51
  "@babel/preset-env": "~7.29.0",
55
52
  "@babel/preset-typescript": "~7.28.0",
56
53
  "@compodoc/compodoc": "^1.1.32",
57
54
  "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0",
58
- "@nx/eslint": "~22.4.0",
59
- "@nx/eslint-plugin": "~22.4.0",
60
- "@nx/jest": "~22.4.0",
61
- "@nx/js": "~22.4.0",
62
- "@o3r/build-helpers": "~14.1.0-prerelease.9",
63
- "@o3r/eslint-plugin": "~14.1.0-prerelease.9",
64
- "@o3r/telemetry": "~14.1.0-prerelease.9",
65
- "@o3r/test-helpers": "~14.1.0-prerelease.9",
66
- "@stylistic/eslint-plugin": "~5.7.0",
67
- "@types/jest": "~30.0.0",
55
+ "@nx/eslint": "~22.5.3",
56
+ "@nx/eslint-plugin": "~22.5.3",
57
+ "@nx/js": "~22.5.3",
58
+ "@nx/vitest": "~22.5.3",
59
+ "@o3r/build-helpers": "~14.1.0-rc.1",
60
+ "@o3r/eslint-plugin": "~14.1.0-rc.1",
61
+ "@o3r/test-helpers": "~14.1.0-rc.1",
62
+ "@stylistic/eslint-plugin": "~5.10.0",
68
63
  "@types/js-yaml": "^4.0.5",
69
64
  "@types/minimist": "^1.2.2",
70
- "@types/node": "~24.10.0",
65
+ "@types/node": "~24.12.0",
71
66
  "@types/semver": "^7.3.13",
72
67
  "@types/yargs": "~17.0.33",
73
- "@typescript-eslint/parser": "~8.54.0",
74
- "angular-eslint": "~21.2.0",
75
- "babel-jest": "^30.0.5",
68
+ "@typescript-eslint/parser": "~8.57.0",
69
+ "@vitest/coverage-istanbul": "^4.0.18",
70
+ "angular-eslint": "~21.3.0",
76
71
  "chokidar": "~5.0.0",
77
72
  "cpy-cli": "^6.0.0",
78
73
  "eslint": "~9.39.0",
@@ -80,24 +75,19 @@
80
75
  "eslint-import-resolver-typescript": "~4.4.0",
81
76
  "eslint-plugin-import": "~2.32.0",
82
77
  "eslint-plugin-import-newlines": "~1.4.0",
83
- "eslint-plugin-jest": "~29.12.0",
84
78
  "eslint-plugin-jsdoc": "~61.7.0",
85
79
  "eslint-plugin-prefer-arrow": "~1.2.3",
86
80
  "eslint-plugin-unicorn": "~62.0.0",
87
- "eslint-plugin-unused-imports": "~4.3.0",
81
+ "eslint-plugin-unused-imports": "~4.4.0",
88
82
  "globals": "^16.0.0",
89
- "jest": "~30.2.0",
90
- "jest-junit": "~16.0.0",
91
- "jest-resolve": "~30.2.0",
92
- "jest-util": "~30.2.0",
93
83
  "jsonc-eslint-parser": "~2.4.0",
94
- "nx": "~22.4.0",
95
- "ts-jest": "~29.4.0",
84
+ "nx": "~22.5.3",
96
85
  "typescript": "~5.9.2",
97
- "typescript-eslint": "~8.54.0"
86
+ "typescript-eslint": "~8.57.0",
87
+ "vitest": "~4.1.0"
98
88
  },
99
89
  "engines": {
100
- "node": "^20.19.0 || ^22.17.0 || ^24.0.0"
90
+ "node": "^22.17.0 || ^24.0.0"
101
91
  },
102
92
  "contributors": [
103
93
  {
package/src/main.mjs CHANGED
@@ -1,13 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  /* eslint-disable no-console -- required for CLI feedback */
3
- import { DEFAULT_MANIFEST_FILENAMES, generateValidationSchemaFiles, getLogger, installDependencies, OPENAPI_NPM_KEYWORDS,
3
+ import { existsSync, } from 'node:fs';
4
+ import { rm, } from 'node:fs/promises';
5
+ import { resolve, } from 'node:path';
6
+ import { DEFAULT_MANIFEST_FILENAMES, DEFAULT_SCHEMA_OUTPUT_DIRECTORY, generateValidationSchemaFiles, getLogger, installDependencies, OPENAPI_NPM_KEYWORDS,
4
7
  // eslint-disable-next-line import/no-unresolved -- Cannot resolve mjs file in current setup (see #3738)
5
8
  } from '@ama-openapi/core';
9
+ import { createCliWithMetrics, } from '@o3r/telemetry';
6
10
  import yargs from 'yargs';
7
11
  import { hideBin, } from 'yargs/helpers';
8
12
  /** Log levels for logger */
9
13
  const logLevels = ['silent', 'error', 'warn', 'info', 'debug'];
10
- void yargs(hideBin(process.argv))
14
+ const run = () => yargs(hideBin(process.argv))
11
15
  .option('log-level', {
12
16
  type: 'string',
13
17
  alias: 'l',
@@ -19,6 +23,7 @@ void yargs(hideBin(process.argv))
19
23
  return yargsInstance
20
24
  .option('output', {
21
25
  type: 'string',
26
+ default: DEFAULT_SCHEMA_OUTPUT_DIRECTORY,
22
27
  alias: 'o',
23
28
  description: 'Output directory where generating the schemas'
24
29
  })
@@ -28,11 +33,23 @@ void yargs(hideBin(process.argv))
28
33
  alias: 'k',
29
34
  default: OPENAPI_NPM_KEYWORDS,
30
35
  description: 'List of NPM Keywords to use when searching for packages exposing OpenAPI specifications'
36
+ })
37
+ .option('clean', {
38
+ type: 'boolean',
39
+ alias: 'c',
40
+ default: false,
41
+ description: 'Clean the output directory before generating the schemas'
31
42
  });
32
43
  }, async (args) => {
33
44
  const logger = args.logLevel === 'silent' ? undefined : getLogger(args.logLevel, console);
34
45
  try {
35
- await generateValidationSchemaFiles(process.cwd(), { logger, outputDirectory: args.output, keywordsWhitelist: args.keywords.map(String) });
46
+ const outputDirectory = args.output;
47
+ const outputDirectoryPath = resolve(process.cwd(), outputDirectory);
48
+ if (args.clean && existsSync(outputDirectoryPath)) {
49
+ logger?.info(`Cleaning output directory "${outputDirectory}"...`);
50
+ await rm(outputDirectoryPath, { recursive: true, force: true });
51
+ }
52
+ await generateValidationSchemaFiles(process.cwd(), { logger, outputDirectory, keywordsWhitelist: args.keywords.map(String) });
36
53
  }
37
54
  catch (e) {
38
55
  (logger?.error ?? console.error)(e);
@@ -71,4 +88,5 @@ void yargs(hideBin(process.argv))
71
88
  })
72
89
  .strictCommands()
73
90
  .parse();
91
+ void createCliWithMetrics(run, '@ama-openapi/cli')();
74
92
  //# sourceMappingURL=main.mjs.map
package/src/main.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.mjs","sourceRoot":"","sources":["../../src/main.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.mjs","sourceRoot":"","sources":["../../src/main.mts"],"names":[],"mappings":";AAEA,4DAA4D;AAE5D,OAAO,EACL,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,EAAE,GACH,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,GACR,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,6BAA6B,EAC7B,SAAS,EACT,mBAAmB,EAEnB,oBAAoB;AACpB,wGAAwG;EACzG,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,OAAO,GACR,MAAM,eAAe,CAAC;AAEvB,4BAA4B;AAC5B,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAA+B,CAAC;AAE7F,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC3C,MAAM,CAAC,WAAW,EAAE;IACnB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,wCAAwC;IACrD,OAAO,EAAE,OAAO;CACjB,CAAC;KAED,OAAO,CAAC,iBAAiB,EAAE,wEAAwE,EAAE,CAAC,aAAa,EAAE,EAAE;IACtH,OAAO,aAAa;SACjB,MAAM,CAAC,QAAQ,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,+BAA+B;QACxC,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,+CAA+C;KAC7D,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,oBAAoB;QAC7B,WAAW,EAAE,yFAAyF;KACvG,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,0DAA0D;KACxE,CAAC,CAAC;AACP,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAoB,EAAE,OAAO,CAAC,CAAC;IACtG,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;QACpC,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAClD,MAAM,EAAE,IAAI,CAAC,8BAA8B,eAAe,MAAM,CAAC,CAAC;YAClE,MAAM,EAAE,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,6BAA6B,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,CAAC,MAAM,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;KAED,OAAO,CAAC,SAAS,EAAE,wDAAwD,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IACrG,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAoB,EAAE,OAAO,CAAC,CAAC;IACtG,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,CAAC,MAAM,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;KAED,OAAO,CAAC,OAAO,EAAE,6EAA6E,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IACxH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAoB,EAAE,OAAO,CAAC,CAAC;IAEtG,OAAO,IAAI,OAAO,CAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QAC5C,KAAK,CAAC,CAAC,GAAG,0BAA0B,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;aACzG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACxB,MAAM,EAAE,IAAI,CAAC,sBAAsB,IAAI,8BAA8B,CAAC,CAAC;YACvE,IAAI,CAAC;gBACH,MAAM,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,EAAE,KAAK,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,MAAM,EAAE,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,CAAC,KAAc,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;KAED,cAAc,EAAE;KAChB,KAAK,EAAE,CAAC;AAEX,KAAK,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,CAAC"}