@ama-openapi/cli 0.0.0-placeholder.8 → 13.5.0-prerelease.12

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/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright Amadeus SAS
2
+
3
+ Redistribution and use in source and binary forms, with or without modification,
4
+ are permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this
7
+ list of conditions and the following disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation and/or
11
+ other materials provided with the distribution.
12
+
13
+ 3. Neither the name of the copyright holder nor the names of its contributors
14
+ may be used to endorse or promote products derived from this software without
15
+ specific prior written permission.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
21
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
24
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package/README.md ADDED
@@ -0,0 +1,113 @@
1
+ # @ama-openapi/cli
2
+
3
+ [![Stable Version](https://img.shields.io/npm/v/@ama-openapi/cli?style=for-the-badge)](https://www.npmjs.com/package/@ama-openapi/cli)
4
+ [![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)
5
+
6
+ A command-line interface (CLI) tool for managing OpenAPI specifications and their dependencies through manifest files.
7
+
8
+ ## Description
9
+
10
+ The `@ama-openapi/cli` package provides a CLI tool to automate the installation and management of [OpenAPI specifications](https://redocly.com/) based on [manifest files](https://www.npmjs.com/package/@ama-openapi/core).\
11
+ It's part of the [AMA OpenAPI ecosystem](https://github.com/AmadeusITGroup/otter/tree/main/packages/@ama-openapi) that helps manage OpenAPI dependencies in your projects.
12
+
13
+ ## Installation
14
+
15
+ ### Global Installation
16
+
17
+ ```bash
18
+ npm install @ama-openapi/cli
19
+ ```
20
+
21
+ > [!INFO]
22
+ > The package needs to be installed as a `dependency` to allow [model sharing](https://github.com/AmadeusITGroup/otter/tree/main/docs/openapi/SHAREABLE_SPECIFICATION.md).
23
+
24
+ ## Usage
25
+
26
+ The CLI is available through the `ama-openapi` command and provides the following functionality:
27
+
28
+ ```bash
29
+ ama-openapi <command> [options]
30
+ ```
31
+
32
+ The following global options can be used with any command:
33
+
34
+ | Option | Type | Default | Description |
35
+ | --- | --- | --- | --- |
36
+ | `--log-level`, `-l` | `"silent" \| "error" \| "warning" \| "info" \| "debug"` | `error` | Define the specific level of logs to display in the console |
37
+ | `--help`, `-h` | | | Show help information |
38
+
39
+ ## Available Commands
40
+
41
+ ### Command `install`
42
+
43
+ This command scans for [manifest files](https://github.com/AmadeusITGroup/otter/tree/main/docs/openapi/MANIFEST_CONFIGURATION.md) in the current working directory and installs all [OpenAPI specifications](https://www.openapis.org/) specified in those files. The installation process will download and process the OpenAPI specifications according to the configuration in your manifest.
44
+
45
+ ```bash
46
+ ama-openapi install [options]
47
+ ```
48
+
49
+ **Examples:**
50
+
51
+ ```bash
52
+ # Install dependencies from manifest files
53
+ ama-openapi install
54
+
55
+ # Install with debug output
56
+ ama-openapi install --debug
57
+
58
+ # Install silently
59
+ ama-openapi install --silent
60
+ ```
61
+
62
+ ### Command `watch`
63
+
64
+ This command starts a file watcher that monitors manifest files for changes. When a manifest file is modified, it automatically triggers the installation process, ensuring your [OpenAPI specifications](https://www.openapis.org/) are always up to date during development.
65
+
66
+ ```bash
67
+ ama-openapi watch [options]
68
+ ```
69
+
70
+ **Examples:**
71
+
72
+ ```bash
73
+ # Start watching manifest files
74
+ ama-openapi watch
75
+
76
+ # Watch with debug output
77
+ ama-openapi watch --debug
78
+ ```
79
+
80
+ ## Expose shareable models
81
+
82
+ To expose models from the OpenAPI package, the following setups are required:
83
+
84
+ - The `models/` (or any shareable folder) should be listed in [package.json exports](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#exports) field.
85
+ - The `models_external/` should be should be listed in [package.json exposed](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#exports) folders.
86
+ - **The `models_external/` folder, with its content, must be present in the installed package**
87
+
88
+ To ensure the correct resolution of the dependencies with the versions required by the final specification, the presence of the `models_external/` can be achieved only through a [postinstall process](https://www.npmjs.com/package/postinstall).
89
+
90
+ ```json5
91
+ // package.json file
92
+ {
93
+ "name": "@my/spec",
94
+ "scripts": {
95
+ "postinstall": "ama-openapi install"
96
+ }
97
+ }
98
+
99
+ ```
100
+
101
+ > [!NOTE]
102
+ > Find more information regarding the model dependency resolution on [@ama-openapi/core documentation](https://github.com/AmadeusITGroup/otter/tree/main/packages/@ama-openapi/core).
103
+
104
+ > [!TIP]
105
+ > The repository generator from [@ama-openapi/create](https://www.npmjs.com/package/@ama-openapi/create) configures the package to allow the models exposition by default.
106
+
107
+ ## Integration
108
+
109
+ This CLI tool is designed to work seamlessly with:
110
+
111
+ - [@ama-openapi/core](https://www.npmjs.com/package/@ama-openapi/core): Core dependency management functionality
112
+ - [@ama-openapi/redocly-plugin](https://www.npmjs.com/package/@ama-openapi/redocly-plugin) - Redocly CLI integration
113
+ - [@ama-openapi/create](https://www.npmjs.com/package/@ama-openapi/create) - Project scaffolding tool
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ama-openapi/cli",
3
- "version": "0.0.0-placeholder.8",
3
+ "version": "13.5.0-prerelease.12",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -32,50 +32,54 @@
32
32
  }
33
33
  },
34
34
  "dependencies": {
35
- "@ama-openapi/core": "0.0.0-placeholder.8",
36
- "chokidar": "^4.0.3",
35
+ "@ama-openapi/core": "~13.5.0-prerelease.12",
37
36
  "tslib": "^2.6.2",
38
37
  "yargs": "~18.0.0"
39
38
  },
40
39
  "peerDependencies": {
41
- "@o3r/telemetry": "0.0.0-placeholder.8"
40
+ "@o3r/telemetry": "~13.5.0-prerelease.12",
41
+ "chokidar": "^4.0.3"
42
42
  },
43
43
  "peerDependenciesMeta": {
44
44
  "@o3r/telemetry": {
45
45
  "optional": true
46
+ },
47
+ "chokidar": {
48
+ "optional": true
46
49
  }
47
50
  },
48
51
  "devDependencies": {
49
52
  "@babel/core": "~7.28.0",
50
53
  "@babel/preset-env": "~7.28.0",
51
54
  "@babel/preset-typescript": "~7.28.0",
52
- "@compodoc/compodoc": "^1.1.19",
55
+ "@compodoc/compodoc": "^1.1.32",
53
56
  "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0",
54
57
  "@nx/eslint": "~21.6.0",
55
58
  "@nx/eslint-plugin": "~21.6.0",
56
59
  "@nx/jest": "~21.6.0",
57
60
  "@nx/js": "~21.6.0",
58
- "@o3r/build-helpers": "0.0.0-placeholder.8",
59
- "@o3r/eslint-plugin": "0.0.0-placeholder.8",
60
- "@o3r/telemetry": "0.0.0-placeholder.8",
61
- "@o3r/test-helpers": "0.0.0-placeholder.8",
62
- "@stylistic/eslint-plugin": "~5.5.0",
61
+ "@o3r/build-helpers": "~13.5.0-prerelease.12",
62
+ "@o3r/eslint-plugin": "~13.5.0-prerelease.12",
63
+ "@o3r/telemetry": "~13.5.0-prerelease.12",
64
+ "@o3r/test-helpers": "~13.5.0-prerelease.12",
65
+ "@stylistic/eslint-plugin": "~5.6.0",
63
66
  "@types/jest": "~29.5.2",
64
67
  "@types/js-yaml": "^4.0.5",
65
68
  "@types/minimist": "^1.2.2",
66
69
  "@types/node": "~22.18.0",
67
70
  "@types/semver": "^7.3.13",
68
71
  "@types/yargs": "~17.0.33",
69
- "@typescript-eslint/parser": "~8.46.0",
70
- "angular-eslint": "~20.5.0",
72
+ "@typescript-eslint/parser": "~8.47.0",
73
+ "angular-eslint": "~20.6.0",
71
74
  "babel-jest": "^29.7.0",
75
+ "chokidar": "^4.0.3",
72
76
  "cpy-cli": "^6.0.0",
73
- "eslint": "~9.38.0",
77
+ "eslint": "~9.39.0",
74
78
  "eslint-import-resolver-node": "~0.3.9",
75
79
  "eslint-import-resolver-typescript": "~4.4.0",
76
80
  "eslint-plugin-import": "~2.32.0",
77
81
  "eslint-plugin-import-newlines": "~1.4.0",
78
- "eslint-plugin-jest": "~29.0.0",
82
+ "eslint-plugin-jest": "~29.1.0",
79
83
  "eslint-plugin-jsdoc": "~54.7.0",
80
84
  "eslint-plugin-prefer-arrow": "~1.2.3",
81
85
  "eslint-plugin-unicorn": "~60.0.0",
@@ -87,12 +91,80 @@
87
91
  "jest-util": "~29.7.0",
88
92
  "jsonc-eslint-parser": "~2.4.0",
89
93
  "nx": "~21.6.0",
90
- "pid-from-port": "^1.1.3",
91
94
  "ts-jest": "~29.4.0",
92
95
  "typescript": "~5.9.2",
93
- "typescript-eslint": "~8.46.0"
96
+ "typescript-eslint": "~8.47.0"
94
97
  },
95
98
  "engines": {
96
99
  "node": "^20.19.0 || ^22.17.0 || ^24.0.0"
97
- }
98
- }
100
+ },
101
+ "contributors": [
102
+ {
103
+ "name": "Yannick Adam",
104
+ "url": "https://github.com/yannickadam",
105
+ "email": "yannickadam@users.noreply.github.com"
106
+ },
107
+ {
108
+ "name": "Kilian Panot",
109
+ "url": "https://github.com/kpanot",
110
+ "email": "kpanot@users.noreply.github.com"
111
+ },
112
+ {
113
+ "name": "Jeremy Bourgeois",
114
+ "url": "https://github.com/jbourgeois-1A",
115
+ "email": "jbourgeois-1A@users.noreply.github.com"
116
+ },
117
+ {
118
+ "name": "Pierre Henri Ginoux",
119
+ "url": "https://github.com/pginoux-1A",
120
+ "email": "pginoux-1A@users.noreply.github.com"
121
+ },
122
+ {
123
+ "name": "Mircea Vasile Rednic",
124
+ "url": "https://github.com/mrednic-1A",
125
+ "email": "mrednic-1A@users.noreply.github.com"
126
+ },
127
+ {
128
+ "name": "Stephane Dalle",
129
+ "url": "https://github.com/sdalle-1A",
130
+ "email": "sdalle-1A@users.noreply.github.com"
131
+ },
132
+ {
133
+ "name": "Nicolas Hoffmann",
134
+ "url": "https://github.com/nhoffmann-1A",
135
+ "email": "nhoffmann-1A@users.noreply.github.com"
136
+ },
137
+ {
138
+ "name": "Victor Scaiceanu",
139
+ "url": "https://github.com/vscaiceanu-1a",
140
+ "email": "vscaiceanu-1A@users.noreply.github.com"
141
+ },
142
+ {
143
+ "name": "Florian Paul",
144
+ "url": "https://github.com/fpaul-1A",
145
+ "email": "fpaul-1A@users.noreply.github.com"
146
+ },
147
+ {
148
+ "name": "Corinne Paulve",
149
+ "url": "https://github.com/cpaulve-1A",
150
+ "email": "cpaulve-1A@users.noreply.github.com"
151
+ },
152
+ {
153
+ "name": "Matthieu Crouzet",
154
+ "url": "https://github.com/matthieu-crouzet",
155
+ "email": "matthieu-crouzet@users.noreply.github.com"
156
+ },
157
+ {
158
+ "name": "Salome Do",
159
+ "url": "https://github.com/sdo-1A",
160
+ "email": "sdo-1A@users.noreply.github.com"
161
+ }
162
+ ],
163
+ "bugs": "https://github.com/AmadeusITGroup/otter/issues",
164
+ "repository": {
165
+ "type": "git",
166
+ "url": "git+https://github.com/AmadeusITGroup/otter.git"
167
+ },
168
+ "license": "BSD-3-Clause",
169
+ "homepage": "https://amadeusitgroup.github.io/otter/"
170
+ }
package/src/main.mjs CHANGED
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  /* eslint-disable no-console -- required for CLI feedback */
3
+ import { DEFAULT_MANIFEST_FILENAMES, getLogger, installDependencies,
4
+ // eslint-disable-next-line import/no-unresolved -- Cannot resolve mjs file in current setup (see #3738)
5
+ } from '@ama-openapi/core';
3
6
  import yargs from 'yargs';
4
7
  import { hideBin, } from 'yargs/helpers';
8
+ /** Log levels for logger */
9
+ const logLevels = ['silent', 'error', 'warn', 'info', 'debug'];
5
10
  void yargs(hideBin(process.argv))
6
- .option('silent', {
7
- type: 'boolean',
8
- description: 'Suppress all logs',
9
- default: false
10
- })
11
- .option('debug', {
12
- type: 'boolean',
13
- description: 'Display debug level logs',
14
- default: false
11
+ .option('log-level', {
12
+ type: 'string',
13
+ alias: 'l',
14
+ choices: logLevels,
15
+ description: 'Determine the level of logs to display',
16
+ default: 'error'
15
17
  })
16
18
  .command('install', 'Install the OpenAPI specifications from manifest files', () => { }, async (args) => {
17
- // eslint-disable-next-line import/no-unresolved -- Cannot resolve mjs file in current setup
18
- const { installDependencies } = await import('@ama-openapi/core');
19
19
  try {
20
- const logger = args.silent ? undefined : { ...console, debug: args.debug ? console.debug : undefined };
20
+ const logger = args.logLevel === 'silent' ? undefined : getLogger(args.logLevel, console);
21
21
  await installDependencies(process.cwd(), { logger });
22
22
  }
23
23
  catch (e) {
@@ -26,10 +26,8 @@ void yargs(hideBin(process.argv))
26
26
  }
27
27
  })
28
28
  .command('watch', 'Watch and install the OpenAPI specifications from manifest files on changes', () => { }, async (args) => {
29
- // eslint-disable-next-line import/no-unresolved -- Cannot resolve mjs file in current setup
30
- const { DEFAULT_MANIFEST_FILENAMES, installDependencies } = await import('@ama-openapi/core');
31
29
  const { watch } = await import('chokidar');
32
- const logger = args.silent ? undefined : { ...console, debug: args.debug ? console.debug : undefined };
30
+ const logger = args.logLevel === 'silent' ? undefined : getLogger(args.logLevel, console);
33
31
  return new Promise((_resolve, reject) => {
34
32
  watch([...DEFAULT_MANIFEST_FILENAMES], { awaitWriteFinish: true, ignoreInitial: false, cwd: process.cwd() })
35
33
  .on('all', async (path) => {
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,0BAA0B,EAC1B,SAAS,EACT,mBAAmB;AAEnB,wGAAwG;EACzG,MAAM,mBAAmB,CAAC;AAC3B,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,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9B,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;KACD,OAAO,CAAC,SAAS,EAAE,wDAAwD,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IACrG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAoB,EAAE,OAAO,CAAC,CAAC;QACtG,MAAM,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;KACD,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;KACD,KAAK,EAAE,CAAC"}