├── .editorconfig
├── .github
└── workflows
│ └── Theneo.yml
├── .gitignore
├── LICENSE
├── README.md
├── action.yml
├── asset
└── logo.png
├── dist
└── index.js
├── package-lock.json
├── package.json
├── scripts
└── check-doc.sh
├── src
├── file.js
├── helpers.js
├── index.js
├── input.js
├── main.js
├── validate.js
└── version.js
└── test
├── petstore.yaml
└── sample.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
--------------------------------------------------------------------------------
/.github/workflows/Theneo.yml:
--------------------------------------------------------------------------------
1 | name: Update Documentation
2 | on:
3 | push:
4 | branches:
5 | - main
6 | jobs:
7 | update-doc:
8 | name: update theneo doc
9 | runs-on: ubuntu-latest
10 | steps:
11 | - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
12 | - name: Checkout
13 | uses: actions/checkout@v4
14 | - name: Setup Node.js
15 | uses: actions/setup-node@v4
16 | with:
17 | node-version: "18"
18 | - name: Process documentation on server
19 | uses: Theneo-Inc/api-documentation@main
20 | with:
21 | FILE_PATH: test/petstore.yaml
22 | PROJECT_KEY: ${{vars.PROJECT_KEY}}
23 | SECRET: ${{secrets.THENEO_ACCOUNT_SECRET}}
24 | IMPORT_OPTION: overwrite
25 | AUTO_PUBLISH: true
26 | INCLUDE_GITHUB_METADATA: true
27 | - name: check if documentation is updated
28 | run: |
29 | chmod +X ./scripts/check-doc.sh
30 | ./scripts/check-doc.sh ${{vars.THENEO_GITHUB_ACTION_TEST_PROJECT_URL}} "find Pets" "add Pet" "find pet by id" "delete Pet"
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # TypeScript v1 declaration files
46 | typings/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Microbundle cache
58 | .rpt2_cache/
59 | .rts2_cache_cjs/
60 | .rts2_cache_es/
61 | .rts2_cache_umd/
62 |
63 | # Optional REPL history
64 | .node_repl_history
65 |
66 | # Output of 'npm pack'
67 | *.tgz
68 |
69 | # Yarn Integrity file
70 | .yarn-integrity
71 |
72 | # dotenv environment variables file
73 | .env
74 | .env.test
75 |
76 | # parcel-bundler cache (https://parceljs.org/)
77 | .cache
78 |
79 | # Next.js build output
80 | .next
81 |
82 | # Nuxt.js build / generate output
83 | .nuxt
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 |
106 | .idea
107 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Theneo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Generate Stripe-like API Documentation
2 |
3 |

4 | Get Started Today
5 |
6 | ## Table of contents
7 |
8 | - [Usage](#usage)
9 | - [Inputs](#inputs)
10 | - [Contributing](#contributing)
11 | - [Licence](#license)
12 |
13 | ## Usage
14 |
15 | Start by creating a documentation on [Theneo](https://theneo.io). Then add following workflow file to your GitHub project `.github/workflows/Theneo.yml`. On every push request theneo documentation will be updated.
16 |
17 | ### Update documentation on pull request
18 |
19 | Update api documentation on push.
20 |
21 | ```
22 | name: Update documention
23 | on:
24 | pull_request:
25 | branches:
26 | - main
27 | jobs:
28 | update-doc:
29 | name: update theneo doc
30 | runs-on: ubuntu-latest
31 | steps:
32 | - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
33 | - name: Checkout
34 | uses: actions/checkout@v4
35 | - name: Setup Node.js
36 | uses: actions/setup-node@v4
37 | with:
38 | node-version: "18"
39 | - name: Import documentation in Theneo
40 | uses: Theneo-Inc/api-documentation@1.8.0
41 | with:
42 | FILE_PATH: doc/api.yml
43 | PROJECT_KEY:
44 | SECRET: ${{secrets.SECRET}}
45 | IMPORT_OPTION: overwrite
46 | AUTO_PUBLISH: false
47 | INCLUDE_GITHUB_METADATA: true
48 | ```
49 |
50 | _make sure to update path with your document path, PROJECT_KEY with project key, SECRET with GitHub secret_
51 |
52 | ## Inputs
53 |
54 | - `FILE_PATH` (required): path to your documentation file within repository.
55 | - `PROJECT_SLUG` (required): unique identifier of project, it can be found under project settings for existing project.
56 | - `VERSION_SLUG` (optional): Project version slug to import documentation under a specific version, otherwise default version will be used.
57 | - `WORKSPACE_SLUG` (optional): Project workspace slug to import documentation under specific workspace.
58 | - `SECRET` (required): Theneo API token to authenticate GitHub request, displayed under user profile.
59 | - `IMPORT_OPTION` (optional): import option should be one of (`overwrite`, `merge`, `endpoints`, `append`), by default `overwrite` will be used.
60 | - `AUTO_PUBLISH` (optional): Indicates if the documentation should be published automatically or not after importing.
61 | - `INCLUDE_GITHUB_METADATA` (optional): Indicates if the imported documentation should include GitHub metadata (such as GitHub actor) or not - only visible in Theneo's editor.
62 | - `SECTION_DESCRIPTION_MERGE_STRATEGY` (optional): Merging strategy for section descriptions to keep old descriptions from theneo editor if needed, valid values are keep_new or keep_old.
63 | - `PARAMETER_DESCRIPTION_MERGE_STRATEGY` (optional): Merging strategy for parameter descriptions to keep old descriptions from theneo editor if needed, valid values are keep_new or keep_old.
64 |
65 | ### deprecated inputs
66 | - `PROJECT_KEY` - instead use `PROJECT_SLUG`
67 | - `PATH` - instead use `FILE_PATH`
68 |
69 | ## Note
70 | you can find your project/version/workspace slugs upon publishing the project:
71 |
72 | `https://app.theneo.io///`
73 |
74 |
75 | ### Example using `merge` import option
76 | ```yaml
77 | - name: Import documentation in Theneo
78 | uses: Theneo-Inc/api-documentation@1.8.0
79 | with:
80 | FILE_PATH: doc/api.yml
81 |
82 | PROJECT_KEY:
83 | VERSION_SLUG:
84 | WORKSPACE_SLUG:
85 |
86 | SECRET: ${{secrets.SECRET}}
87 |
88 | AUTO_PUBLISH: true
89 |
90 | IMPORT_OPTION: merge
91 | PARAMETER_DESCRIPTION_MERGE_STRATEGY: keep_new
92 | SECTION_DESCRIPTION_MERGE_STRATEGY: keep_old
93 |
94 | INCLUDE_GITHUB_METADATA: true
95 | ```
96 |
97 | ## Release
98 | 1. Update version in `package.json`
99 | 2. run `npm run build`
100 | 3. commit changes and add tag:
101 | ```bash
102 | git tag
103 | git push origin main --tags
104 | ```
105 | 4. Create a release on GitHub with the same version
106 | 5. Update the version in the [usage](#usage) section of this README
107 |
108 | ## Contributing
109 |
110 | Bug reports and pull requests are welcome on GitHub at https://github.com/theneoAPIDoc/api-documentation. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org/) code of conduct.
111 |
112 | ## License
113 |
114 | The scripts and documentation in this project are released under the [MIT License](https://github.com/theneoAPIDoc/api-documentation/blob/main/LICENSE).
115 |
--------------------------------------------------------------------------------
/action.yml:
--------------------------------------------------------------------------------
1 | name: Theneo API Documentation
2 | description: Generate Stripe-like API Documentation
3 | inputs:
4 | FILE_PATH:
5 | description: "API documentation file path"
6 | required: true
7 | PATH:
8 | description: "API documentation file path (deprecated)"
9 | deprecationMessage: "Use FILE_PATH instead"
10 | required: false
11 | PROJECT_KEY:
12 | description: "Unique Key for the project"
13 | deprecationMessage: "Use PROJECT_SLUG instead"
14 | required: false
15 | PROJECT_SLUG:
16 | description: "Unique Key for the project"
17 | required: false
18 | VERSION_SLUG:
19 | description: "Project version slug to import the update data into, if not provided, the default version will be used"
20 | required: false
21 | WORKSPACE_SLUG:
22 | description: "Workspace slug where project is located, if not provided it will search for the project in all workspaces"
23 | required: false
24 | SECRET:
25 | description: "API Key from Theneo website"
26 | required: true
27 | IMPORT_OPTION:
28 | description: "Import option should be one of (overwrite, merge, endpoints, append)"
29 | required: false
30 | default: "overwrite"
31 | AUTO_PUBLISH:
32 | description: "Indicates if the documentation should be published automatically or not after importing"
33 | required: false
34 | default: "true"
35 | INCLUDE_GITHUB_METADATA:
36 | description: "Include GitHub metadata - such as GitHub actor username for import metadata"
37 | required: false
38 | default: "false"
39 | PARAMETER_DESCRIPTION_MERGE_STRATEGY:
40 | description: "Merging strategy for parameter descriptions to keep old descriptions from theneo editor if needed, valid values are keep_new or keep_old"
41 | required: false
42 |
43 | SECTION_DESCRIPTION_MERGE_STRATEGY:
44 | description: "Merging strategy for section descriptions to keep old descriptions from theneo editor if needed, valid values are keep_new or keep_old"
45 | required: false
46 |
47 | runs:
48 | using: "node16"
49 | main: "dist/index.js"
50 | branding:
51 | icon: "book-open"
52 | color: "orange"
53 |
--------------------------------------------------------------------------------
/asset/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Theneo-Inc/api-documentation/2b72e0e61bacade748fad9f998848e1fa518345b/asset/logo.png
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "api-documentation",
3 | "version": "1.8.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "api-documentation",
9 | "version": "1.8.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "@actions/core": "^1.10.1",
13 | "@theneo/sdk": "^0.9.0",
14 | "@vercel/ncc": "^0.38.1",
15 | "yaml-lint": "^1.7.0"
16 | }
17 | },
18 | "node_modules/@actions/core": {
19 | "version": "1.10.1",
20 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz",
21 | "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==",
22 | "dependencies": {
23 | "@actions/http-client": "^2.0.1",
24 | "uuid": "^8.3.2"
25 | }
26 | },
27 | "node_modules/@actions/http-client": {
28 | "version": "2.0.1",
29 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
30 | "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
31 | "dependencies": {
32 | "tunnel": "^0.0.6"
33 | }
34 | },
35 | "node_modules/@nodelib/fs.scandir": {
36 | "version": "2.1.5",
37 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
38 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
39 | "dependencies": {
40 | "@nodelib/fs.stat": "2.0.5",
41 | "run-parallel": "^1.1.9"
42 | },
43 | "engines": {
44 | "node": ">= 8"
45 | }
46 | },
47 | "node_modules/@nodelib/fs.stat": {
48 | "version": "2.0.5",
49 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
50 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
51 | "engines": {
52 | "node": ">= 8"
53 | }
54 | },
55 | "node_modules/@nodelib/fs.walk": {
56 | "version": "1.2.8",
57 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
58 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
59 | "dependencies": {
60 | "@nodelib/fs.scandir": "2.1.5",
61 | "fastq": "^1.6.0"
62 | },
63 | "engines": {
64 | "node": ">= 8"
65 | }
66 | },
67 | "node_modules/@theneo/sdk": {
68 | "version": "0.9.0",
69 | "resolved": "https://registry.npmjs.org/@theneo/sdk/-/sdk-0.9.0.tgz",
70 | "integrity": "sha512-CGtpQOfxPb6P1b0St+Zsz8pRkTZp9YY6dZQOQcIw5w0wZDXiRUca1sBbZOp2GVN/JH6iDpWyD0NVblyy70iXeA==",
71 | "dependencies": {
72 | "axios": "^1.7.2",
73 | "form-data": "^4.0.0",
74 | "fs-extra": "^11.2.0"
75 | },
76 | "engines": {
77 | "node": ">=16.0"
78 | }
79 | },
80 | "node_modules/@vercel/ncc": {
81 | "version": "0.38.1",
82 | "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.1.tgz",
83 | "integrity": "sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==",
84 | "bin": {
85 | "ncc": "dist/ncc/cli.js"
86 | }
87 | },
88 | "node_modules/ansi-regex": {
89 | "version": "5.0.1",
90 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
91 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
92 | "engines": {
93 | "node": ">=8"
94 | }
95 | },
96 | "node_modules/ansi-styles": {
97 | "version": "4.3.0",
98 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
99 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
100 | "dependencies": {
101 | "color-convert": "^2.0.1"
102 | },
103 | "engines": {
104 | "node": ">=8"
105 | },
106 | "funding": {
107 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
108 | }
109 | },
110 | "node_modules/argparse": {
111 | "version": "2.0.1",
112 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
113 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
114 | },
115 | "node_modules/array-union": {
116 | "version": "2.1.0",
117 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
118 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
119 | "engines": {
120 | "node": ">=8"
121 | }
122 | },
123 | "node_modules/async": {
124 | "version": "3.2.4",
125 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
126 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
127 | },
128 | "node_modules/asynckit": {
129 | "version": "0.4.0",
130 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
131 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
132 | },
133 | "node_modules/axios": {
134 | "version": "1.7.2",
135 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
136 | "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
137 | "dependencies": {
138 | "follow-redirects": "^1.15.6",
139 | "form-data": "^4.0.0",
140 | "proxy-from-env": "^1.1.0"
141 | }
142 | },
143 | "node_modules/braces": {
144 | "version": "3.0.3",
145 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
146 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
147 | "dependencies": {
148 | "fill-range": "^7.1.1"
149 | },
150 | "engines": {
151 | "node": ">=8"
152 | }
153 | },
154 | "node_modules/cliui": {
155 | "version": "7.0.4",
156 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
157 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
158 | "dependencies": {
159 | "string-width": "^4.2.0",
160 | "strip-ansi": "^6.0.0",
161 | "wrap-ansi": "^7.0.0"
162 | }
163 | },
164 | "node_modules/color-convert": {
165 | "version": "2.0.1",
166 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
167 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
168 | "dependencies": {
169 | "color-name": "~1.1.4"
170 | },
171 | "engines": {
172 | "node": ">=7.0.0"
173 | }
174 | },
175 | "node_modules/color-name": {
176 | "version": "1.1.4",
177 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
178 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
179 | },
180 | "node_modules/combined-stream": {
181 | "version": "1.0.8",
182 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
183 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
184 | "dependencies": {
185 | "delayed-stream": "~1.0.0"
186 | },
187 | "engines": {
188 | "node": ">= 0.8"
189 | }
190 | },
191 | "node_modules/consola": {
192 | "version": "2.15.3",
193 | "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
194 | "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw=="
195 | },
196 | "node_modules/delayed-stream": {
197 | "version": "1.0.0",
198 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
199 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
200 | "engines": {
201 | "node": ">=0.4.0"
202 | }
203 | },
204 | "node_modules/dir-glob": {
205 | "version": "3.0.1",
206 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
207 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
208 | "dependencies": {
209 | "path-type": "^4.0.0"
210 | },
211 | "engines": {
212 | "node": ">=8"
213 | }
214 | },
215 | "node_modules/emoji-regex": {
216 | "version": "8.0.0",
217 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
218 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
219 | },
220 | "node_modules/escalade": {
221 | "version": "3.1.1",
222 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
223 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
224 | "engines": {
225 | "node": ">=6"
226 | }
227 | },
228 | "node_modules/fast-glob": {
229 | "version": "3.2.12",
230 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
231 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
232 | "dependencies": {
233 | "@nodelib/fs.stat": "^2.0.2",
234 | "@nodelib/fs.walk": "^1.2.3",
235 | "glob-parent": "^5.1.2",
236 | "merge2": "^1.3.0",
237 | "micromatch": "^4.0.4"
238 | },
239 | "engines": {
240 | "node": ">=8.6.0"
241 | }
242 | },
243 | "node_modules/fastq": {
244 | "version": "1.15.0",
245 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
246 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
247 | "dependencies": {
248 | "reusify": "^1.0.4"
249 | }
250 | },
251 | "node_modules/fill-range": {
252 | "version": "7.1.1",
253 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
254 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
255 | "dependencies": {
256 | "to-regex-range": "^5.0.1"
257 | },
258 | "engines": {
259 | "node": ">=8"
260 | }
261 | },
262 | "node_modules/follow-redirects": {
263 | "version": "1.15.6",
264 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
265 | "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
266 | "funding": [
267 | {
268 | "type": "individual",
269 | "url": "https://github.com/sponsors/RubenVerborgh"
270 | }
271 | ],
272 | "engines": {
273 | "node": ">=4.0"
274 | },
275 | "peerDependenciesMeta": {
276 | "debug": {
277 | "optional": true
278 | }
279 | }
280 | },
281 | "node_modules/form-data": {
282 | "version": "4.0.0",
283 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
284 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
285 | "dependencies": {
286 | "asynckit": "^0.4.0",
287 | "combined-stream": "^1.0.8",
288 | "mime-types": "^2.1.12"
289 | },
290 | "engines": {
291 | "node": ">= 6"
292 | }
293 | },
294 | "node_modules/fs-extra": {
295 | "version": "11.2.0",
296 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
297 | "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
298 | "dependencies": {
299 | "graceful-fs": "^4.2.0",
300 | "jsonfile": "^6.0.1",
301 | "universalify": "^2.0.0"
302 | },
303 | "engines": {
304 | "node": ">=14.14"
305 | }
306 | },
307 | "node_modules/get-caller-file": {
308 | "version": "2.0.5",
309 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
310 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
311 | "engines": {
312 | "node": "6.* || 8.* || >= 10.*"
313 | }
314 | },
315 | "node_modules/glob-parent": {
316 | "version": "5.1.2",
317 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
318 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
319 | "dependencies": {
320 | "is-glob": "^4.0.1"
321 | },
322 | "engines": {
323 | "node": ">= 6"
324 | }
325 | },
326 | "node_modules/globby": {
327 | "version": "11.1.0",
328 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
329 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
330 | "dependencies": {
331 | "array-union": "^2.1.0",
332 | "dir-glob": "^3.0.1",
333 | "fast-glob": "^3.2.9",
334 | "ignore": "^5.2.0",
335 | "merge2": "^1.4.1",
336 | "slash": "^3.0.0"
337 | },
338 | "engines": {
339 | "node": ">=10"
340 | },
341 | "funding": {
342 | "url": "https://github.com/sponsors/sindresorhus"
343 | }
344 | },
345 | "node_modules/graceful-fs": {
346 | "version": "4.2.11",
347 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
348 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
349 | },
350 | "node_modules/ignore": {
351 | "version": "5.2.4",
352 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
353 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
354 | "engines": {
355 | "node": ">= 4"
356 | }
357 | },
358 | "node_modules/ini": {
359 | "version": "2.0.0",
360 | "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
361 | "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
362 | "engines": {
363 | "node": ">=10"
364 | }
365 | },
366 | "node_modules/is-extglob": {
367 | "version": "2.1.1",
368 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
369 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
370 | "engines": {
371 | "node": ">=0.10.0"
372 | }
373 | },
374 | "node_modules/is-fullwidth-code-point": {
375 | "version": "3.0.0",
376 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
377 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
378 | "engines": {
379 | "node": ">=8"
380 | }
381 | },
382 | "node_modules/is-glob": {
383 | "version": "4.0.3",
384 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
385 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
386 | "dependencies": {
387 | "is-extglob": "^2.1.1"
388 | },
389 | "engines": {
390 | "node": ">=0.10.0"
391 | }
392 | },
393 | "node_modules/is-number": {
394 | "version": "7.0.0",
395 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
396 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
397 | "engines": {
398 | "node": ">=0.12.0"
399 | }
400 | },
401 | "node_modules/js-yaml": {
402 | "version": "4.1.0",
403 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
404 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
405 | "dependencies": {
406 | "argparse": "^2.0.1"
407 | },
408 | "bin": {
409 | "js-yaml": "bin/js-yaml.js"
410 | }
411 | },
412 | "node_modules/jsonfile": {
413 | "version": "6.1.0",
414 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
415 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
416 | "dependencies": {
417 | "universalify": "^2.0.0"
418 | },
419 | "optionalDependencies": {
420 | "graceful-fs": "^4.1.6"
421 | }
422 | },
423 | "node_modules/merge2": {
424 | "version": "1.4.1",
425 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
426 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
427 | "engines": {
428 | "node": ">= 8"
429 | }
430 | },
431 | "node_modules/micromatch": {
432 | "version": "4.0.5",
433 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
434 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
435 | "dependencies": {
436 | "braces": "^3.0.2",
437 | "picomatch": "^2.3.1"
438 | },
439 | "engines": {
440 | "node": ">=8.6"
441 | }
442 | },
443 | "node_modules/mime-db": {
444 | "version": "1.52.0",
445 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
446 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
447 | "engines": {
448 | "node": ">= 0.6"
449 | }
450 | },
451 | "node_modules/mime-types": {
452 | "version": "2.1.35",
453 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
454 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
455 | "dependencies": {
456 | "mime-db": "1.52.0"
457 | },
458 | "engines": {
459 | "node": ">= 0.6"
460 | }
461 | },
462 | "node_modules/nconf": {
463 | "version": "0.12.0",
464 | "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz",
465 | "integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==",
466 | "dependencies": {
467 | "async": "^3.0.0",
468 | "ini": "^2.0.0",
469 | "secure-keys": "^1.0.0",
470 | "yargs": "^16.1.1"
471 | },
472 | "engines": {
473 | "node": ">= 0.4.0"
474 | }
475 | },
476 | "node_modules/path-type": {
477 | "version": "4.0.0",
478 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
479 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
480 | "engines": {
481 | "node": ">=8"
482 | }
483 | },
484 | "node_modules/picomatch": {
485 | "version": "2.3.1",
486 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
487 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
488 | "engines": {
489 | "node": ">=8.6"
490 | },
491 | "funding": {
492 | "url": "https://github.com/sponsors/jonschlinkert"
493 | }
494 | },
495 | "node_modules/proxy-from-env": {
496 | "version": "1.1.0",
497 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
498 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
499 | },
500 | "node_modules/queue-microtask": {
501 | "version": "1.2.3",
502 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
503 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
504 | "funding": [
505 | {
506 | "type": "github",
507 | "url": "https://github.com/sponsors/feross"
508 | },
509 | {
510 | "type": "patreon",
511 | "url": "https://www.patreon.com/feross"
512 | },
513 | {
514 | "type": "consulting",
515 | "url": "https://feross.org/support"
516 | }
517 | ]
518 | },
519 | "node_modules/require-directory": {
520 | "version": "2.1.1",
521 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
522 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
523 | "engines": {
524 | "node": ">=0.10.0"
525 | }
526 | },
527 | "node_modules/reusify": {
528 | "version": "1.0.4",
529 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
530 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
531 | "engines": {
532 | "iojs": ">=1.0.0",
533 | "node": ">=0.10.0"
534 | }
535 | },
536 | "node_modules/run-parallel": {
537 | "version": "1.2.0",
538 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
539 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
540 | "funding": [
541 | {
542 | "type": "github",
543 | "url": "https://github.com/sponsors/feross"
544 | },
545 | {
546 | "type": "patreon",
547 | "url": "https://www.patreon.com/feross"
548 | },
549 | {
550 | "type": "consulting",
551 | "url": "https://feross.org/support"
552 | }
553 | ],
554 | "dependencies": {
555 | "queue-microtask": "^1.2.2"
556 | }
557 | },
558 | "node_modules/secure-keys": {
559 | "version": "1.0.0",
560 | "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz",
561 | "integrity": "sha512-nZi59hW3Sl5P3+wOO89eHBAAGwmCPd2aE1+dLZV5MO+ItQctIvAqihzaAXIQhvtH4KJPxM080HsnqltR2y8cWg=="
562 | },
563 | "node_modules/slash": {
564 | "version": "3.0.0",
565 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
566 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
567 | "engines": {
568 | "node": ">=8"
569 | }
570 | },
571 | "node_modules/string-width": {
572 | "version": "4.2.3",
573 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
574 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
575 | "dependencies": {
576 | "emoji-regex": "^8.0.0",
577 | "is-fullwidth-code-point": "^3.0.0",
578 | "strip-ansi": "^6.0.1"
579 | },
580 | "engines": {
581 | "node": ">=8"
582 | }
583 | },
584 | "node_modules/strip-ansi": {
585 | "version": "6.0.1",
586 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
587 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
588 | "dependencies": {
589 | "ansi-regex": "^5.0.1"
590 | },
591 | "engines": {
592 | "node": ">=8"
593 | }
594 | },
595 | "node_modules/to-regex-range": {
596 | "version": "5.0.1",
597 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
598 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
599 | "dependencies": {
600 | "is-number": "^7.0.0"
601 | },
602 | "engines": {
603 | "node": ">=8.0"
604 | }
605 | },
606 | "node_modules/tunnel": {
607 | "version": "0.0.6",
608 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
609 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
610 | "engines": {
611 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
612 | }
613 | },
614 | "node_modules/universalify": {
615 | "version": "2.0.1",
616 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
617 | "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
618 | "engines": {
619 | "node": ">= 10.0.0"
620 | }
621 | },
622 | "node_modules/uuid": {
623 | "version": "8.3.2",
624 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
625 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
626 | "bin": {
627 | "uuid": "dist/bin/uuid"
628 | }
629 | },
630 | "node_modules/wrap-ansi": {
631 | "version": "7.0.0",
632 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
633 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
634 | "dependencies": {
635 | "ansi-styles": "^4.0.0",
636 | "string-width": "^4.1.0",
637 | "strip-ansi": "^6.0.0"
638 | },
639 | "engines": {
640 | "node": ">=10"
641 | },
642 | "funding": {
643 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
644 | }
645 | },
646 | "node_modules/y18n": {
647 | "version": "5.0.8",
648 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
649 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
650 | "engines": {
651 | "node": ">=10"
652 | }
653 | },
654 | "node_modules/yaml-lint": {
655 | "version": "1.7.0",
656 | "resolved": "https://registry.npmjs.org/yaml-lint/-/yaml-lint-1.7.0.tgz",
657 | "integrity": "sha512-zeBC/kskKQo4zuoGQ+IYjw6C9a/YILr2SXoEZA9jM0COrSwvwVbfTiFegT8qYBSBgOwLMWGL8sY137tOmFXGnQ==",
658 | "dependencies": {
659 | "consola": "^2.15.3",
660 | "globby": "^11.1.0",
661 | "js-yaml": "^4.1.0",
662 | "nconf": "^0.12.0"
663 | },
664 | "bin": {
665 | "yamllint": "dist/cli.js"
666 | }
667 | },
668 | "node_modules/yargs": {
669 | "version": "16.2.0",
670 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
671 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
672 | "dependencies": {
673 | "cliui": "^7.0.2",
674 | "escalade": "^3.1.1",
675 | "get-caller-file": "^2.0.5",
676 | "require-directory": "^2.1.1",
677 | "string-width": "^4.2.0",
678 | "y18n": "^5.0.5",
679 | "yargs-parser": "^20.2.2"
680 | },
681 | "engines": {
682 | "node": ">=10"
683 | }
684 | },
685 | "node_modules/yargs-parser": {
686 | "version": "20.2.9",
687 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
688 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
689 | "engines": {
690 | "node": ">=10"
691 | }
692 | }
693 | },
694 | "dependencies": {
695 | "@actions/core": {
696 | "version": "1.10.1",
697 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz",
698 | "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==",
699 | "requires": {
700 | "@actions/http-client": "^2.0.1",
701 | "uuid": "^8.3.2"
702 | }
703 | },
704 | "@actions/http-client": {
705 | "version": "2.0.1",
706 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
707 | "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
708 | "requires": {
709 | "tunnel": "^0.0.6"
710 | }
711 | },
712 | "@nodelib/fs.scandir": {
713 | "version": "2.1.5",
714 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
715 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
716 | "requires": {
717 | "@nodelib/fs.stat": "2.0.5",
718 | "run-parallel": "^1.1.9"
719 | }
720 | },
721 | "@nodelib/fs.stat": {
722 | "version": "2.0.5",
723 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
724 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
725 | },
726 | "@nodelib/fs.walk": {
727 | "version": "1.2.8",
728 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
729 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
730 | "requires": {
731 | "@nodelib/fs.scandir": "2.1.5",
732 | "fastq": "^1.6.0"
733 | }
734 | },
735 | "@theneo/sdk": {
736 | "version": "0.9.0",
737 | "resolved": "https://registry.npmjs.org/@theneo/sdk/-/sdk-0.9.0.tgz",
738 | "integrity": "sha512-CGtpQOfxPb6P1b0St+Zsz8pRkTZp9YY6dZQOQcIw5w0wZDXiRUca1sBbZOp2GVN/JH6iDpWyD0NVblyy70iXeA==",
739 | "requires": {
740 | "axios": "^1.7.2",
741 | "form-data": "^4.0.0",
742 | "fs-extra": "^11.2.0"
743 | }
744 | },
745 | "@vercel/ncc": {
746 | "version": "0.38.1",
747 | "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.1.tgz",
748 | "integrity": "sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw=="
749 | },
750 | "ansi-regex": {
751 | "version": "5.0.1",
752 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
753 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
754 | },
755 | "ansi-styles": {
756 | "version": "4.3.0",
757 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
758 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
759 | "requires": {
760 | "color-convert": "^2.0.1"
761 | }
762 | },
763 | "argparse": {
764 | "version": "2.0.1",
765 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
766 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
767 | },
768 | "array-union": {
769 | "version": "2.1.0",
770 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
771 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
772 | },
773 | "async": {
774 | "version": "3.2.4",
775 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
776 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
777 | },
778 | "asynckit": {
779 | "version": "0.4.0",
780 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
781 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
782 | },
783 | "axios": {
784 | "version": "1.7.2",
785 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
786 | "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
787 | "requires": {
788 | "follow-redirects": "^1.15.6",
789 | "form-data": "^4.0.0",
790 | "proxy-from-env": "^1.1.0"
791 | }
792 | },
793 | "braces": {
794 | "version": "3.0.3",
795 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
796 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
797 | "requires": {
798 | "fill-range": "^7.1.1"
799 | }
800 | },
801 | "cliui": {
802 | "version": "7.0.4",
803 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
804 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
805 | "requires": {
806 | "string-width": "^4.2.0",
807 | "strip-ansi": "^6.0.0",
808 | "wrap-ansi": "^7.0.0"
809 | }
810 | },
811 | "color-convert": {
812 | "version": "2.0.1",
813 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
814 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
815 | "requires": {
816 | "color-name": "~1.1.4"
817 | }
818 | },
819 | "color-name": {
820 | "version": "1.1.4",
821 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
822 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
823 | },
824 | "combined-stream": {
825 | "version": "1.0.8",
826 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
827 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
828 | "requires": {
829 | "delayed-stream": "~1.0.0"
830 | }
831 | },
832 | "consola": {
833 | "version": "2.15.3",
834 | "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
835 | "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw=="
836 | },
837 | "delayed-stream": {
838 | "version": "1.0.0",
839 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
840 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
841 | },
842 | "dir-glob": {
843 | "version": "3.0.1",
844 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
845 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
846 | "requires": {
847 | "path-type": "^4.0.0"
848 | }
849 | },
850 | "emoji-regex": {
851 | "version": "8.0.0",
852 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
853 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
854 | },
855 | "escalade": {
856 | "version": "3.1.1",
857 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
858 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
859 | },
860 | "fast-glob": {
861 | "version": "3.2.12",
862 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
863 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
864 | "requires": {
865 | "@nodelib/fs.stat": "^2.0.2",
866 | "@nodelib/fs.walk": "^1.2.3",
867 | "glob-parent": "^5.1.2",
868 | "merge2": "^1.3.0",
869 | "micromatch": "^4.0.4"
870 | }
871 | },
872 | "fastq": {
873 | "version": "1.15.0",
874 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
875 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
876 | "requires": {
877 | "reusify": "^1.0.4"
878 | }
879 | },
880 | "fill-range": {
881 | "version": "7.1.1",
882 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
883 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
884 | "requires": {
885 | "to-regex-range": "^5.0.1"
886 | }
887 | },
888 | "follow-redirects": {
889 | "version": "1.15.6",
890 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
891 | "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
892 | },
893 | "form-data": {
894 | "version": "4.0.0",
895 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
896 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
897 | "requires": {
898 | "asynckit": "^0.4.0",
899 | "combined-stream": "^1.0.8",
900 | "mime-types": "^2.1.12"
901 | }
902 | },
903 | "fs-extra": {
904 | "version": "11.2.0",
905 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
906 | "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
907 | "requires": {
908 | "graceful-fs": "^4.2.0",
909 | "jsonfile": "^6.0.1",
910 | "universalify": "^2.0.0"
911 | }
912 | },
913 | "get-caller-file": {
914 | "version": "2.0.5",
915 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
916 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
917 | },
918 | "glob-parent": {
919 | "version": "5.1.2",
920 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
921 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
922 | "requires": {
923 | "is-glob": "^4.0.1"
924 | }
925 | },
926 | "globby": {
927 | "version": "11.1.0",
928 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
929 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
930 | "requires": {
931 | "array-union": "^2.1.0",
932 | "dir-glob": "^3.0.1",
933 | "fast-glob": "^3.2.9",
934 | "ignore": "^5.2.0",
935 | "merge2": "^1.4.1",
936 | "slash": "^3.0.0"
937 | }
938 | },
939 | "graceful-fs": {
940 | "version": "4.2.11",
941 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
942 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
943 | },
944 | "ignore": {
945 | "version": "5.2.4",
946 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
947 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ=="
948 | },
949 | "ini": {
950 | "version": "2.0.0",
951 | "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
952 | "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="
953 | },
954 | "is-extglob": {
955 | "version": "2.1.1",
956 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
957 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
958 | },
959 | "is-fullwidth-code-point": {
960 | "version": "3.0.0",
961 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
962 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
963 | },
964 | "is-glob": {
965 | "version": "4.0.3",
966 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
967 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
968 | "requires": {
969 | "is-extglob": "^2.1.1"
970 | }
971 | },
972 | "is-number": {
973 | "version": "7.0.0",
974 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
975 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
976 | },
977 | "js-yaml": {
978 | "version": "4.1.0",
979 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
980 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
981 | "requires": {
982 | "argparse": "^2.0.1"
983 | }
984 | },
985 | "jsonfile": {
986 | "version": "6.1.0",
987 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
988 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
989 | "requires": {
990 | "graceful-fs": "^4.1.6",
991 | "universalify": "^2.0.0"
992 | }
993 | },
994 | "merge2": {
995 | "version": "1.4.1",
996 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
997 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
998 | },
999 | "micromatch": {
1000 | "version": "4.0.5",
1001 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1002 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1003 | "requires": {
1004 | "braces": "^3.0.2",
1005 | "picomatch": "^2.3.1"
1006 | }
1007 | },
1008 | "mime-db": {
1009 | "version": "1.52.0",
1010 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1011 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
1012 | },
1013 | "mime-types": {
1014 | "version": "2.1.35",
1015 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1016 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1017 | "requires": {
1018 | "mime-db": "1.52.0"
1019 | }
1020 | },
1021 | "nconf": {
1022 | "version": "0.12.0",
1023 | "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz",
1024 | "integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==",
1025 | "requires": {
1026 | "async": "^3.0.0",
1027 | "ini": "^2.0.0",
1028 | "secure-keys": "^1.0.0",
1029 | "yargs": "^16.1.1"
1030 | }
1031 | },
1032 | "path-type": {
1033 | "version": "4.0.0",
1034 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
1035 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
1036 | },
1037 | "picomatch": {
1038 | "version": "2.3.1",
1039 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1040 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
1041 | },
1042 | "proxy-from-env": {
1043 | "version": "1.1.0",
1044 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
1045 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
1046 | },
1047 | "queue-microtask": {
1048 | "version": "1.2.3",
1049 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1050 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
1051 | },
1052 | "require-directory": {
1053 | "version": "2.1.1",
1054 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1055 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
1056 | },
1057 | "reusify": {
1058 | "version": "1.0.4",
1059 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1060 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
1061 | },
1062 | "run-parallel": {
1063 | "version": "1.2.0",
1064 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1065 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1066 | "requires": {
1067 | "queue-microtask": "^1.2.2"
1068 | }
1069 | },
1070 | "secure-keys": {
1071 | "version": "1.0.0",
1072 | "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz",
1073 | "integrity": "sha512-nZi59hW3Sl5P3+wOO89eHBAAGwmCPd2aE1+dLZV5MO+ItQctIvAqihzaAXIQhvtH4KJPxM080HsnqltR2y8cWg=="
1074 | },
1075 | "slash": {
1076 | "version": "3.0.0",
1077 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
1078 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
1079 | },
1080 | "string-width": {
1081 | "version": "4.2.3",
1082 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1083 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1084 | "requires": {
1085 | "emoji-regex": "^8.0.0",
1086 | "is-fullwidth-code-point": "^3.0.0",
1087 | "strip-ansi": "^6.0.1"
1088 | }
1089 | },
1090 | "strip-ansi": {
1091 | "version": "6.0.1",
1092 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1093 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1094 | "requires": {
1095 | "ansi-regex": "^5.0.1"
1096 | }
1097 | },
1098 | "to-regex-range": {
1099 | "version": "5.0.1",
1100 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1101 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1102 | "requires": {
1103 | "is-number": "^7.0.0"
1104 | }
1105 | },
1106 | "tunnel": {
1107 | "version": "0.0.6",
1108 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
1109 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
1110 | },
1111 | "universalify": {
1112 | "version": "2.0.1",
1113 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
1114 | "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="
1115 | },
1116 | "uuid": {
1117 | "version": "8.3.2",
1118 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
1119 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
1120 | },
1121 | "wrap-ansi": {
1122 | "version": "7.0.0",
1123 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
1124 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
1125 | "requires": {
1126 | "ansi-styles": "^4.0.0",
1127 | "string-width": "^4.1.0",
1128 | "strip-ansi": "^6.0.0"
1129 | }
1130 | },
1131 | "y18n": {
1132 | "version": "5.0.8",
1133 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
1134 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
1135 | },
1136 | "yaml-lint": {
1137 | "version": "1.7.0",
1138 | "resolved": "https://registry.npmjs.org/yaml-lint/-/yaml-lint-1.7.0.tgz",
1139 | "integrity": "sha512-zeBC/kskKQo4zuoGQ+IYjw6C9a/YILr2SXoEZA9jM0COrSwvwVbfTiFegT8qYBSBgOwLMWGL8sY137tOmFXGnQ==",
1140 | "requires": {
1141 | "consola": "^2.15.3",
1142 | "globby": "^11.1.0",
1143 | "js-yaml": "^4.1.0",
1144 | "nconf": "^0.12.0"
1145 | }
1146 | },
1147 | "yargs": {
1148 | "version": "16.2.0",
1149 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
1150 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
1151 | "requires": {
1152 | "cliui": "^7.0.2",
1153 | "escalade": "^3.1.1",
1154 | "get-caller-file": "^2.0.5",
1155 | "require-directory": "^2.1.1",
1156 | "string-width": "^4.2.0",
1157 | "y18n": "^5.0.5",
1158 | "yargs-parser": "^20.2.2"
1159 | }
1160 | },
1161 | "yargs-parser": {
1162 | "version": "20.2.9",
1163 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
1164 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
1165 | }
1166 | }
1167 | }
1168 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "api-documentation",
3 | "version": "1.8.0",
4 | "description": "GitHub Action to Import documentation into Theneo",
5 | "main": "src/index.js",
6 | "scripts": {
7 | "build": "ncc build src/index.js -m -o dist",
8 | "start": "node src/index.js",
9 | "test": "FILE_PATH=test/petstore.yaml SECRET=test PROJECT_SLUG=test VERSION_SLUG=test WORKSPACE_SLUG=theneo-testing IMPORT_OPTION=merge AUTO_PUBLISH=true PARAMETER_DESCRIPTION_MERGE_STRATEGY=keep_new SECTION_DESCRIPTION_MERGE_STRATEGY=keep_old npm run start"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/Theneo-Inc/api-documentation.git"
14 | },
15 | "keywords": [
16 | "API",
17 | "Documetation",
18 | "Theneo"
19 | ],
20 | "author": "",
21 | "license": "ISC",
22 | "bugs": {
23 | "url": "https://github.com/Theneo-Inc/api-documentation/issues"
24 | },
25 | "homepage": "https://github.com/Theneo-Inc/api-documentation#readme",
26 | "dependencies": {
27 | "@actions/core": "^1.10.1",
28 | "@theneo/sdk": "^0.9.0",
29 | "@vercel/ncc": "^0.38.1",
30 | "yaml-lint": "^1.7.0"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/scripts/check-doc.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Check if URL and at least one search string are provided
4 | if [ -z "$1" ] || [ "$#" -lt 2 ]; then
5 | echo "Usage: $0 [search_string2 ...]"
6 | exit 1
7 | fi
8 |
9 | url=$1
10 | shift
11 | search_strings=("$@")
12 |
13 | # Make a curl request and capture the HTTP status code and HTML content
14 | http_status=$(curl -s -o /dev/null -w "%{http_code}" "$url")
15 | html_content=$(curl -s "$url")
16 |
17 | # Check if the HTTP status code is 200
18 | if [ "$http_status" -eq 200 ]; then
19 | echo "Request successful! HTTP Status Code: $http_status"
20 |
21 | # Check if each search string is present in the HTML content
22 | for search_string in "${search_strings[@]}"; do
23 | if [[ "$html_content" =~ "$search_string" ]]; then
24 | echo "String '$search_string' found in the HTML content."
25 | else
26 | echo "String '$search_string' not found in the HTML content."
27 | exit 1
28 | fi
29 | done
30 |
31 | exit 0
32 | else
33 | echo "Request failed! HTTP Status Code: $http_status"
34 | exit 1
35 | fi
36 |
--------------------------------------------------------------------------------
/src/file.js:
--------------------------------------------------------------------------------
1 | const {lintFile} = require("yaml-lint");
2 |
3 | async function checkDocumentationFile(path) {
4 | if (path.includes(".")) {
5 | const extension = path.split(".").pop();
6 | if (extension === "yaml" || extension === "yml") {
7 | await lintFile(path).catch((err) => {
8 | throw new Error(err);
9 | });
10 | }
11 | // TODO ADD checks for other type of files
12 | }
13 | }
14 |
15 |
16 | module.exports = {
17 | checkDocumentationFile
18 | }
19 |
--------------------------------------------------------------------------------
/src/helpers.js:
--------------------------------------------------------------------------------
1 |
2 | function getProjectId(projects, projectKey, workspaceSlug) {
3 | const project = projects.find((project) => {
4 | if (project.key !== projectKey) {
5 | return false
6 | }
7 | if (!workspaceSlug) {
8 | return true
9 | }
10 | return project.company?.slug === workspaceSlug;
11 | });
12 | if (!project) {
13 | throw new Error(`Could not find projects using slug: ${projectKey}`)
14 | }
15 | return project.id;
16 | }
17 |
18 |
19 | function getVersionId(versions, versionSlug) {
20 | const version = versions.find((version) => version.slug === versionSlug);
21 | if (!version) {
22 | throw new Error(`Could not find Project version using slug: ${versionSlug}`)
23 | }
24 | return version.id;
25 | }
26 |
27 |
28 | module.exports = {
29 | getProjectId,
30 | getVersionId
31 | }
32 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | const {setFailed} = require("@actions/core");
2 | const {getInputOptions} = require("./input.js");
3 | const {main} = require("./main");
4 |
5 |
6 | main(getInputOptions())
7 | .catch(setFailed);
8 |
--------------------------------------------------------------------------------
/src/input.js:
--------------------------------------------------------------------------------
1 | const {getInput} = require("@actions/core");
2 | const {validateMergingStrategy} = require("./validate");
3 |
4 | function getInputOption(name) {
5 | if (!name) {
6 | throw new Error('name is required');
7 | }
8 | return getInput(name) || process.env[name];
9 | }
10 |
11 |
12 | function getInputOptions() {
13 | const path = getInputOption("FILE_PATH") || getInputOption("PATH");
14 | const projectKey = getInputOption("PROJECT_KEY") || getInputOption("PROJECT_SLUG");
15 | const versionSlug = getInputOption("VERSION_SLUG");
16 | const workspaceSlug = getInputOption("WORKSPACE_SLUG");
17 | const secret = getInputOption("SECRET");
18 | const importOption = getInputOption("IMPORT_OPTION");
19 | const autoPublish = getInputOption("AUTO_PUBLISH") === "true";
20 | const includeGithubMetadata = getInputOption("INCLUDE_GITHUB_METADATA") === "true";
21 | const parameterDescriptionMergeStrategy = getInputOption("PARAMETER_DESCRIPTION_MERGE_STRATEGY");
22 | const sectionDescriptionMergeStrategy = getInputOption("SECTION_DESCRIPTION_MERGE_STRATEGY");
23 | return {
24 | path,
25 | projectKey,
26 | versionSlug,
27 | workspaceSlug,
28 | secret,
29 | importOption,
30 | autoPublish,
31 | includeGithubMetadata,
32 | parameterDescriptionMergeStrategy,
33 | sectionDescriptionMergeStrategy
34 | };
35 | }
36 |
37 |
38 | module.exports = {
39 | getInputOptions
40 | }
41 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | const {validateInputOptions} = require("./validate");
2 | const {Theneo, ImportOption} = require("@theneo/sdk");
3 | const {GITHUB_ACTION_VERSION} = require("./version");
4 | const {setFailed} = require("@actions/core");
5 | const {getVersionId, getProjectId} = require("./helpers");
6 |
7 |
8 |
9 | async function main(options) {
10 | await validateInputOptions(options);
11 | const {
12 | path,
13 | projectKey,
14 | secret,
15 | importOption,
16 | autoPublish,
17 | includeGithubMetadata,
18 | versionSlug,
19 | workspaceSlug,
20 | parameterDescriptionMergeStrategy,
21 | sectionDescriptionMergeStrategy
22 | } = options
23 |
24 | const theneo = new Theneo({
25 | apiKey: secret,
26 | apiClientMetadata: {
27 | apiClientName: "github-action",
28 | apiClientVersion: GITHUB_ACTION_VERSION
29 | }
30 | })
31 |
32 |
33 | const projectsResult = await theneo.listProjects();
34 | if (projectsResult.err) {
35 | setFailed(projectsResult.error.message);
36 | return;
37 | }
38 | const projectId = getProjectId(projectsResult.unwrap(), projectKey, workspaceSlug);
39 |
40 | const importProjectData = {
41 | projectId: projectId,
42 | publish: autoPublish,
43 | data: {
44 | file: path
45 | },
46 | importOption: importOption,
47 | };
48 |
49 | if (includeGithubMetadata) {
50 | const authorName = process.env.GITHUB_ACTOR ?? process.env.GITHUB_TRIGGERING_ACTOR;
51 | importProjectData.importMetadata = {
52 | authorName: authorName,
53 | }
54 | }
55 |
56 | if (versionSlug) {
57 | const versionsResult = await theneo.listProjectVersions(projectId);
58 | if (versionsResult.err) {
59 | setFailed(versionsResult.error.message)
60 | return;
61 | }
62 | importProjectData.versionId = getVersionId(versionsResult.unwrap(), versionSlug)
63 | }
64 |
65 | if (importOption === ImportOption.MERGE) {
66 | if (parameterDescriptionMergeStrategy || sectionDescriptionMergeStrategy) {
67 | importProjectData.importOptionAdditionalData = {
68 | parameterDescriptionMergeStrategy,
69 | sectionDescriptionMergeStrategy
70 | }
71 | }
72 | }
73 |
74 | const result = await theneo.importProjectDocument(importProjectData);
75 |
76 | if (result.err) {
77 | setFailed(result.error.message);
78 | return;
79 | }
80 | if (result.value.publishData) {
81 | console.log(`API Documentation was published, you can see it here: ${result.value.publishData.publishedPageUrl}`)
82 | } else {
83 | console.log("API Documentation was updated successfully")
84 | }
85 | }
86 |
87 | module.exports = {
88 | main
89 | }
90 |
--------------------------------------------------------------------------------
/src/validate.js:
--------------------------------------------------------------------------------
1 | const {ImportOption, MergingStrategy} = require("@theneo/sdk");
2 | const {checkDocumentationFile} = require("./file");
3 |
4 |
5 | async function validateInputOptions(options) {
6 | if (!options.path) {
7 | throw new Error("Add API documentation FILE_PATH in workflow file");
8 | }
9 | if (!options.projectKey) {
10 | throw new Error("PROJECT_SLUG is missing");
11 | }
12 | if (!options.secret) {
13 | throw new Error("Add SECRET - Theneo API token, you can get it from: https://app.theneo.io/account-settings/toolsandintegrations");
14 | }
15 |
16 | const importOptions = Object.values(ImportOption);
17 | if (options.importOption && !importOptions.includes(options.importOption)) {
18 | throw new Error(`import option should be one of ${options.importOption}`);
19 | }
20 |
21 | await checkDocumentationFile(options.path);
22 |
23 | validateMergingStrategy(options.parameterDescriptionMergeStrategy, "PARAMETER_DESCRIPTION_MERGE_STRATEGY")
24 | validateMergingStrategy(options.sectionDescriptionMergeStrategy, "SECTION_DESCRIPTION_MERGE_STRATEGY")
25 |
26 | }
27 |
28 | function validateMergingStrategy(strategy, parameterName) {
29 | if (strategy) {
30 | let mergingStrategies = [MergingStrategy.KEEP_NEW, MergingStrategy.KEEP_OLD];
31 | if (!mergingStrategies.includes(strategy)) {
32 | throw new Error(`Invalid merging strategy ${strategy} for ${parameterName}, should be one of this ${mergingStrategies}`);
33 | }
34 | }
35 | }
36 |
37 |
38 | module.exports = {
39 | validateInputOptions,
40 | validateMergingStrategy
41 | }
42 |
--------------------------------------------------------------------------------
/src/version.js:
--------------------------------------------------------------------------------
1 | const packageJson = require('../package.json');
2 | // const fs = require("fs");
3 | // const packageJson = JSON.parse(fs.readFileSync(__dirname + "/../package.json", "utf8").toString());
4 |
5 | const GITHUB_ACTION_VERSION = packageJson.version;
6 |
7 | module.exports = {
8 | GITHUB_ACTION_VERSION
9 | }
10 |
--------------------------------------------------------------------------------
/test/petstore.yaml:
--------------------------------------------------------------------------------
1 | openapi: "3.0.0"
2 | info:
3 | version: 1.0.0
4 | title: Swagger Petstore
5 | description: A sample API that uses a petstore as an example to demonstrate features in the OpenAPI 3.0 specification
6 | termsOfService: http://swagger.io/terms/
7 | contact:
8 | name: Swagger API Team
9 | email: apiteam@swagger.io
10 | url: http://swagger.io
11 | license:
12 | name: Apache 2.0
13 | url: https://www.apache.org/licenses/LICENSE-2.0.html
14 | servers:
15 | - url: https://petstore.swagger.io/v2
16 | paths:
17 | /pets:
18 | get:
19 | description: |
20 | Returns all pets from the system that the user has access to
21 | Nam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia.
22 |
23 | Sed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien.
24 | operationId: findPets
25 | parameters:
26 | - name: tags
27 | in: query
28 | description: tags to filter by
29 | required: false
30 | style: form
31 | schema:
32 | type: array
33 | items:
34 | type: string
35 | - name: limit
36 | in: query
37 | description: maximum number of results to return
38 | required: false
39 | schema:
40 | type: integer
41 | format: int32
42 | responses:
43 | '200':
44 | description: pet response
45 | content:
46 | application/json:
47 | schema:
48 | type: array
49 | items:
50 | $ref: '#/components/schemas/Pet'
51 | default:
52 | description: unexpected error
53 | content:
54 | application/json:
55 | schema:
56 | $ref: '#/components/schemas/Error'
57 | post:
58 | description: Creates a new pet in the store. Duplicates are allowed
59 | operationId: addPet
60 | requestBody:
61 | description: Pet to add to the store
62 | required: true
63 | content:
64 | application/json:
65 | schema:
66 | $ref: '#/components/schemas/NewPet'
67 | responses:
68 | '200':
69 | description: pet response
70 | content:
71 | application/json:
72 | schema:
73 | $ref: '#/components/schemas/Pet'
74 | default:
75 | description: unexpected error
76 | content:
77 | application/json:
78 | schema:
79 | $ref: '#/components/schemas/Error'
80 | /pets/{id}:
81 | get:
82 | description: Returns a user based on a single ID, if the user does not have access to the pet
83 | operationId: find pet by id
84 | parameters:
85 | - name: id
86 | in: path
87 | description: ID of pet to fetch
88 | required: true
89 | schema:
90 | type: integer
91 | format: int64
92 | responses:
93 | '200':
94 | description: pet response
95 | content:
96 | application/json:
97 | schema:
98 | $ref: '#/components/schemas/Pet'
99 | default:
100 | description: unexpected error
101 | content:
102 | application/json:
103 | schema:
104 | $ref: '#/components/schemas/Error'
105 | delete:
106 | description: deletes a single pet based on the ID supplied
107 | operationId: deletePet
108 | parameters:
109 | - name: id
110 | in: path
111 | description: ID of pet to delete
112 | required: true
113 | schema:
114 | type: integer
115 | format: int64
116 | responses:
117 | '204':
118 | description: pet deleted
119 | default:
120 | description: unexpected error
121 | content:
122 | application/json:
123 | schema:
124 | $ref: '#/components/schemas/Error'
125 | components:
126 | schemas:
127 | Pet:
128 | allOf:
129 | - $ref: '#/components/schemas/NewPet'
130 | - type: object
131 | required:
132 | - id
133 | properties:
134 | id:
135 | type: integer
136 | format: int64
137 |
138 | NewPet:
139 | type: object
140 | required:
141 | - name
142 | properties:
143 | name:
144 | type: string
145 | tag:
146 | type: string
147 |
148 | Error:
149 | type: object
150 | required:
151 | - code
152 | - message
153 | properties:
154 | code:
155 | type: integer
156 | format: int32
157 | message:
158 | type: string
159 |
--------------------------------------------------------------------------------
/test/sample.json:
--------------------------------------------------------------------------------
1 | {
2 | "info": {
3 | "_postman_id": "7b93e5d9-ff17-4cdc-8fdc-5de864ffa471",
4 | "name": "Theneo Sample OpenGMAPI Doc",
5 | "description": "Theneo APIs enable you to generate beautiful API documentations effortlessly. Why should only top companies like Stripe, Square, and Twilio have gorgeous documentations? With Theneo you can also generate API documents that you could be proud of. The Theneo API follows the general patterns of REST Please note: All the endpoints and API references discussed here are just for demo purposes, they are not functional\n\n\nContact Support:\n Email: hello@theneo.io",
6 | "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json"
7 | },
8 | "item": [
9 | {
10 | "name": "retrieves super duper mock-documentations",
11 | "request": {
12 | "method": "GET",
13 | "header": [],
14 | "url": {
15 | "raw": "{{baseUrl}}/documentation?searchString=&numberofDocs=25&category=&sortBy=&sortOrder=",
16 | "host": [
17 | "{{baseUrl}}"
18 | ],
19 | "path": [
20 | "documentation"
21 | ],
22 | "query": [
23 | {
24 | "key": "searchString",
25 | "value": "",
26 | "description": "pass an optional search string for looking up inventory"
27 | },
28 | {
29 | "key": "numberofDocs",
30 | "value": "25",
31 | "description": "number of documentations to return"
32 | },
33 | {
34 | "key": "category",
35 | "value": "",
36 | "description": "category of documentations to return"
37 | },
38 | {
39 | "key": "sortBy",
40 | "value": "",
41 | "description": "Allowed: dateUpdated, dateAdded."
42 | },
43 | {
44 | "key": "sortOrder",
45 | "value": "",
46 | "description": "Allowed: asc, desc. asc is ascending and sorts from A to Z. desc is descending and sorts from Z to A."
47 | }
48 | ]
49 | },
50 | "description": "By passing in the appropriate options, you can search for\navailable API documentations\n"
51 | },
52 | "response": [
53 | {
54 | "name": "bad input parameter",
55 | "originalRequest": {
56 | "method": "GET",
57 | "header": [],
58 | "url": {
59 | "raw": "{{baseUrl}}/documentation?searchString=&numberofDocs=25&category=publicAPI&sortBy=key&sortOrder=desc",
60 | "host": [
61 | "{{baseUrl}}"
62 | ],
63 | "path": [
64 | "documentation"
65 | ],
66 | "query": [
67 | {
68 | "key": "searchString",
69 | "value": ""
70 | },
71 | {
72 | "key": "numberofDocs",
73 | "value": "25"
74 | },
75 | {
76 | "key": "category",
77 | "value": "publicAPI"
78 | },
79 | {
80 | "key": "sortBy",
81 | "value": "key"
82 | },
83 | {
84 | "key": "sortOrder",
85 | "value": "desc"
86 | }
87 | ]
88 | }
89 | },
90 | "status": "Bad Request",
91 | "code": 400,
92 | "_postman_previewlanguage": "text",
93 | "header": [
94 | {
95 | "key": "Content-Type",
96 | "value": "text/plain"
97 | }
98 | ],
99 | "cookie": [],
100 | "body": ""
101 | },
102 | {
103 | "name": "search results matching criteria",
104 | "originalRequest": {
105 | "method": "GET",
106 | "header": [],
107 | "url": {
108 | "raw": "{{baseUrl}}/documentation?searchString=&numberofDocs=25&category=publicAPI&sortBy=key&sortOrder=desc",
109 | "host": [
110 | "{{baseUrl}}"
111 | ],
112 | "path": [
113 | "documentation"
114 | ],
115 | "query": [
116 | {
117 | "key": "searchString",
118 | "value": ""
119 | },
120 | {
121 | "key": "numberofDocs",
122 | "value": "25"
123 | },
124 | {
125 | "key": "category",
126 | "value": "publicAPI"
127 | },
128 | {
129 | "key": "sortBy",
130 | "value": "key"
131 | },
132 | {
133 | "key": "sortOrder",
134 | "value": "desc"
135 | }
136 | ]
137 | }
138 | },
139 | "status": "OK",
140 | "code": 200,
141 | "_postman_previewlanguage": "json",
142 | "header": [
143 | {
144 | "key": "Content-Type",
145 | "value": "application/json"
146 | }
147 | ],
148 | "cookie": [],
149 | "body": "[\n {\n \"id\": \"demo\",\n \"dateAdded\": \"2016-08-29T09:12:33.001Z\",\n \"documentation\": \"Theneo Sample API Doc\",\n \"category\": \"OpenAPI\",\n \"key\": \"demo\"\n },\n {\n \"id\": \"demo\",\n \"dateAdded\": \"2016-08-29T09:12:33.001Z\",\n \"documentation\": \"Theneo Sample API Doc\",\n \"category\": \"OpenAPI\",\n \"key\": \"demo\"\n }\n]"
150 | }
151 | ]
152 | },
153 | {
154 | "name": "adds a documentation",
155 | "request": {
156 | "method": "POST",
157 | "header": [
158 | {
159 | "key": "Content-Type",
160 | "value": "application/json"
161 | }
162 | ],
163 | "body": {
164 | "mode": "raw",
165 | "raw": "{\n \"documentation\": \"\",\n \"key\": \"\",\n \"category\": \"\"\n}",
166 | "options": {
167 | "raw": {
168 | "language": "json"
169 | }
170 | }
171 | },
172 | "url": "{{baseUrl}}/documentation",
173 | "description": "Adds a documentation to the system"
174 | },
175 | "response": [
176 | {
177 | "name": "invalid input, object invalid",
178 | "originalRequest": {
179 | "method": "POST",
180 | "header": [],
181 | "body": {
182 | "mode": "raw",
183 | "raw": "{\n \"documentation\": \"Theneo Sample API Doc\",\n \"key\": \"demo\",\n \"category\": \"knockKnock\"\n}",
184 | "options": {
185 | "raw": {
186 | "language": "json"
187 | }
188 | }
189 | },
190 | "url": "{{baseUrl}}/documentation"
191 | },
192 | "status": "Bad Request",
193 | "code": 400,
194 | "_postman_previewlanguage": "text",
195 | "header": [
196 | {
197 | "key": "Content-Type",
198 | "value": "text/plain"
199 | }
200 | ],
201 | "cookie": [],
202 | "body": ""
203 | },
204 | {
205 | "name": "an existing item already exists",
206 | "originalRequest": {
207 | "method": "POST",
208 | "header": [],
209 | "body": {
210 | "mode": "raw",
211 | "raw": "{\n \"documentation\": \"Theneo Sample API Doc\",\n \"key\": \"demo\",\n \"category\": \"knockKnock\"\n}",
212 | "options": {
213 | "raw": {
214 | "language": "json"
215 | }
216 | }
217 | },
218 | "url": "{{baseUrl}}/documentation"
219 | },
220 | "status": "Conflict",
221 | "code": 409,
222 | "_postman_previewlanguage": "text",
223 | "header": [
224 | {
225 | "key": "Content-Type",
226 | "value": "text/plain"
227 | }
228 | ],
229 | "cookie": [],
230 | "body": ""
231 | },
232 | {
233 | "name": "item created",
234 | "originalRequest": {
235 | "method": "POST",
236 | "header": [],
237 | "body": {
238 | "mode": "raw",
239 | "raw": "{\n \"documentation\": \"Theneo Sample API Doc\",\n \"key\": \"demo\",\n \"category\": \"knockKnock\"\n}",
240 | "options": {
241 | "raw": {
242 | "language": "json"
243 | }
244 | }
245 | },
246 | "url": "{{baseUrl}}/documentation"
247 | },
248 | "status": "Created",
249 | "code": 201,
250 | "_postman_previewlanguage": "text",
251 | "header": [
252 | {
253 | "key": "Content-Type",
254 | "value": "application/vnd.json"
255 | }
256 | ],
257 | "cookie": [],
258 | "body": ""
259 | }
260 | ]
261 | },
262 | {
263 | "name": "Deletes an API Doc",
264 | "request": {
265 | "method": "DELETE",
266 | "header": [],
267 | "url": {
268 | "raw": "{{baseUrl}}/documentation/:id",
269 | "host": [
270 | "{{baseUrl}}"
271 | ],
272 | "path": [
273 | "documentation",
274 | ":id"
275 | ],
276 | "variable": [
277 | {
278 | "key": "id",
279 | "value": "",
280 | "description": "(Required) The documentation ID for the documentation you want to delete"
281 | }
282 | ]
283 | },
284 | "description": "Delete the API Doc from the system"
285 | },
286 | "response": [
287 | {
288 | "name": "Documentation was successfully deleted",
289 | "originalRequest": {
290 | "method": "DELETE",
291 | "header": [],
292 | "url": {
293 | "raw": "{{baseUrl}}/documentation/:id",
294 | "host": [
295 | "{{baseUrl}}"
296 | ],
297 | "path": [
298 | "documentation",
299 | ":id"
300 | ],
301 | "variable": [
302 | {
303 | "key": "id",
304 | "value": "",
305 | "description": "(Required) The documentation ID for the documentation you want to delete"
306 | }
307 | ]
308 | }
309 | },
310 | "status": "OK",
311 | "code": 200,
312 | "_postman_previewlanguage": "text",
313 | "header": [
314 | {
315 | "key": "Content-Type",
316 | "value": "text/plain"
317 | }
318 | ],
319 | "cookie": [],
320 | "body": ""
321 | }
322 | ]
323 | },
324 | {
325 | "name": "Invite users to the document",
326 | "request": {
327 | "method": "POST",
328 | "header": [
329 | {
330 | "key": "Content-Type",
331 | "value": "application/json"
332 | }
333 | ],
334 | "body": {
335 | "mode": "raw",
336 | "raw": "{\n \"useremail\": \"\",\n \"documentatId\": \"\",\n \"permission\": \"\"\n}",
337 | "options": {
338 | "raw": {
339 | "language": "json"
340 | }
341 | }
342 | },
343 | "url": "{{baseUrl}}/doumentation/invitatation",
344 | "description": "Invite users to the document"
345 | },
346 | "response": [
347 | {
348 | "name": "invalid input, object invalid",
349 | "originalRequest": {
350 | "method": "POST",
351 | "header": [],
352 | "body": {
353 | "mode": "raw",
354 | "raw": "{\n \"useremail\": \"arobakid@theneo.io\",\n \"documentatId\": \"theneo-demo\",\n \"permission\": \"editor\"\n}",
355 | "options": {
356 | "raw": {
357 | "language": "json"
358 | }
359 | }
360 | },
361 | "url": "{{baseUrl}}/doumentation/invitatation"
362 | },
363 | "status": "Bad Request",
364 | "code": 400,
365 | "_postman_previewlanguage": "text",
366 | "header": [
367 | {
368 | "key": "Content-Type",
369 | "value": "text/plain"
370 | }
371 | ],
372 | "cookie": [],
373 | "body": ""
374 | },
375 | {
376 | "name": "item created",
377 | "originalRequest": {
378 | "method": "POST",
379 | "header": [],
380 | "body": {
381 | "mode": "raw",
382 | "raw": "{\n \"useremail\": \"arobakid@theneo.io\",\n \"documentatId\": \"theneo-demo\",\n \"permission\": \"editor\"\n}",
383 | "options": {
384 | "raw": {
385 | "language": "json"
386 | }
387 | }
388 | },
389 | "url": "{{baseUrl}}/doumentation/invitatation"
390 | },
391 | "status": "Created",
392 | "code": 201,
393 | "_postman_previewlanguage": "text",
394 | "header": [
395 | {
396 | "key": "Content-Type",
397 | "value": "application/vnd.json"
398 | }
399 | ],
400 | "cookie": [],
401 | "body": ""
402 | },
403 | {
404 | "name": "an existing item already exists",
405 | "originalRequest": {
406 | "method": "POST",
407 | "header": [],
408 | "body": {
409 | "mode": "raw",
410 | "raw": "{\n \"useremail\": \"arobakid@theneo.io\",\n \"documentatId\": \"theneo-demo\",\n \"permission\": \"editor\"\n}",
411 | "options": {
412 | "raw": {
413 | "language": "json"
414 | }
415 | }
416 | },
417 | "url": "{{baseUrl}}/doumentation/invitatation"
418 | },
419 | "status": "Conflict",
420 | "code": 409,
421 | "_postman_previewlanguage": "text",
422 | "header": [
423 | {
424 | "key": "Content-Type",
425 | "value": "text/plain"
426 | }
427 | ],
428 | "cookie": [],
429 | "body": ""
430 | }
431 | ]
432 | },
433 | {
434 | "name": "Updates the API Doc",
435 | "request": {
436 | "method": "PUT",
437 | "header": [],
438 | "url": {
439 | "raw": "{{baseUrl}}/doumentation/:id",
440 | "host": [
441 | "{{baseUrl}}"
442 | ],
443 | "path": [
444 | "doumentation",
445 | ":id"
446 | ],
447 | "variable": [
448 | {
449 | "key": "id",
450 | "value": "",
451 | "description": "(Required) The documentation ID for the documentation you want to update"
452 | }
453 | ]
454 | },
455 | "description": "Update the API documentation details"
456 | },
457 | "response": [
458 | {
459 | "name": "invalid input, object invalid",
460 | "originalRequest": {
461 | "method": "PUT",
462 | "header": [],
463 | "url": {
464 | "raw": "{{baseUrl}}/doumentation/:id",
465 | "host": [
466 | "{{baseUrl}}"
467 | ],
468 | "path": [
469 | "doumentation",
470 | ":id"
471 | ],
472 | "variable": [
473 | {
474 | "key": "id",
475 | "value": "",
476 | "description": "(Required) The documentation ID for the documentation you want to update"
477 | }
478 | ]
479 | }
480 | },
481 | "status": "Bad Request",
482 | "code": 400,
483 | "_postman_previewlanguage": "text",
484 | "header": [
485 | {
486 | "key": "Content-Type",
487 | "value": "text/plain"
488 | }
489 | ],
490 | "cookie": [],
491 | "body": ""
492 | },
493 | {
494 | "name": "Documentation was successfully updated",
495 | "originalRequest": {
496 | "method": "PUT",
497 | "header": [],
498 | "url": {
499 | "raw": "{{baseUrl}}/doumentation/:id",
500 | "host": [
501 | "{{baseUrl}}"
502 | ],
503 | "path": [
504 | "doumentation",
505 | ":id"
506 | ],
507 | "variable": [
508 | {
509 | "key": "id",
510 | "value": "",
511 | "description": "(Required) The documentation ID for the documentation you want to update"
512 | }
513 | ]
514 | }
515 | },
516 | "status": "Created",
517 | "code": 201,
518 | "_postman_previewlanguage": "json",
519 | "header": [
520 | {
521 | "key": "Content-Type",
522 | "value": "application/json"
523 | }
524 | ],
525 | "cookie": [],
526 | "body": "{\n \"key\": \"demo\"\n}"
527 | }
528 | ]
529 | }
530 | ],
531 | "variable": [
532 | {
533 | "key": "baseUrl",
534 | "value": "https://app.theneo.io",
535 | "type": "string"
536 | }
537 | ]
538 | }
539 |
--------------------------------------------------------------------------------