@ama-openapi/cli 0.0.0-placeholder.9 → 13.5.0-prerelease.13
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 +26 -0
- package/README.md +113 -0
- package/package.json +90 -18
- package/src/main.mjs +13 -15
- package/src/main.mjs.map +1 -1
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
|
+
[](https://www.npmjs.com/package/@ama-openapi/cli)
|
|
4
|
+
[](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": "
|
|
3
|
+
"version": "13.5.0-prerelease.13",
|
|
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": "
|
|
36
|
-
"chokidar": "^4.0.3",
|
|
35
|
+
"@ama-openapi/core": "~13.5.0-prerelease.13",
|
|
37
36
|
"tslib": "^2.6.2",
|
|
38
37
|
"yargs": "~18.0.0"
|
|
39
38
|
},
|
|
40
39
|
"peerDependencies": {
|
|
41
|
-
"@o3r/telemetry": "
|
|
40
|
+
"@o3r/telemetry": "~13.5.0-prerelease.13",
|
|
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.
|
|
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": "
|
|
59
|
-
"@o3r/eslint-plugin": "
|
|
60
|
-
"@o3r/telemetry": "
|
|
61
|
-
"@o3r/test-helpers": "
|
|
62
|
-
"@stylistic/eslint-plugin": "~5.
|
|
61
|
+
"@o3r/build-helpers": "~13.5.0-prerelease.13",
|
|
62
|
+
"@o3r/eslint-plugin": "~13.5.0-prerelease.13",
|
|
63
|
+
"@o3r/telemetry": "~13.5.0-prerelease.13",
|
|
64
|
+
"@o3r/test-helpers": "~13.5.0-prerelease.13",
|
|
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.
|
|
70
|
-
"angular-eslint": "~20.
|
|
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.
|
|
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.
|
|
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.
|
|
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('
|
|
7
|
-
type: '
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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 :
|
|
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 :
|
|
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":";AAEA,4DAA4D;
|
|
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"}
|