@redocly/cli 0.0.0-snapshot.1782157876 → 0.0.0-snapshot.1782483365
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -46
- package/bin/cli.js +1 -1
- package/lib/__mocks__/@redocly/openapi-core.d.ts +99 -0
- package/lib/__mocks__/@redocly/openapi-core.js +84 -0
- package/lib/__mocks__/documents.d.ts +150 -0
- package/lib/__mocks__/documents.js +123 -0
- package/lib/__mocks__/fs.d.ts +8 -0
- package/lib/__mocks__/fs.js +9 -0
- package/lib/__mocks__/perf_hooks.d.ts +3 -0
- package/lib/__mocks__/perf_hooks.js +6 -0
- package/lib/__mocks__/redoc.d.ts +6 -0
- package/lib/__mocks__/redoc.js +5 -0
- package/lib/__tests__/commands/build-docs.test.d.ts +1 -0
- package/lib/__tests__/commands/build-docs.test.js +54 -0
- package/lib/__tests__/commands/bundle.test.d.ts +1 -0
- package/lib/__tests__/commands/bundle.test.js +235 -0
- package/lib/__tests__/commands/join.test.d.ts +1 -0
- package/lib/__tests__/commands/join.test.js +274 -0
- package/lib/__tests__/commands/lint.test.d.ts +1 -0
- package/lib/__tests__/commands/lint.test.js +149 -0
- package/lib/__tests__/commands/push-region.test.d.ts +1 -0
- package/lib/__tests__/commands/push-region.test.js +90 -0
- package/lib/__tests__/commands/push.test.d.ts +1 -0
- package/lib/__tests__/commands/push.test.js +496 -0
- package/lib/__tests__/fetch-with-timeout.test.d.ts +1 -0
- package/lib/__tests__/fetch-with-timeout.test.js +64 -0
- package/lib/__tests__/fixtures/config.d.ts +21 -0
- package/lib/__tests__/fixtures/config.js +24 -0
- package/lib/__tests__/spinner.test.d.ts +1 -0
- package/lib/__tests__/spinner.test.js +43 -0
- package/lib/__tests__/utils.test.d.ts +1 -0
- package/lib/__tests__/utils.test.js +651 -0
- package/lib/__tests__/wrapper.test.d.ts +1 -0
- package/lib/__tests__/wrapper.test.js +76 -0
- package/lib/auth/__tests__/device-flow.test.d.ts +1 -0
- package/lib/auth/__tests__/device-flow.test.js +62 -0
- package/lib/auth/__tests__/oauth-client.test.d.ts +1 -0
- package/lib/auth/__tests__/oauth-client.test.js +93 -0
- package/lib/auth/device-flow.d.ts +26 -0
- package/lib/auth/device-flow.js +133 -0
- package/lib/auth/oauth-client.d.ts +14 -0
- package/lib/auth/oauth-client.js +93 -0
- package/lib/commands/auth.d.ts +13 -0
- package/lib/commands/auth.js +51 -0
- package/lib/commands/build-docs/index.d.ts +3 -0
- package/lib/commands/build-docs/index.js +39 -0
- package/lib/commands/build-docs/template.hbs +23 -0
- package/lib/commands/build-docs/types.d.ts +23 -0
- package/lib/commands/build-docs/types.js +2 -0
- package/lib/commands/build-docs/utils.d.ts +7 -0
- package/lib/commands/build-docs/utils.js +87 -0
- package/lib/commands/bundle.d.ts +14 -0
- package/lib/commands/bundle.js +91 -0
- package/lib/commands/eject.d.ts +9 -0
- package/lib/commands/eject.js +28 -0
- package/lib/commands/join.d.ts +11 -0
- package/lib/commands/join.js +566 -0
- package/lib/commands/lint.d.ts +13 -0
- package/lib/commands/lint.js +108 -0
- package/lib/commands/preview-docs/index.d.ts +12 -0
- package/lib/commands/preview-docs/index.js +127 -0
- package/lib/commands/preview-docs/preview-server/default.hbs +24 -0
- package/lib/commands/preview-docs/preview-server/hot.js +59 -0
- package/lib/commands/preview-docs/preview-server/oauth2-redirect.html +21 -0
- package/lib/commands/preview-docs/preview-server/preview-server.d.ts +5 -0
- package/lib/commands/preview-docs/preview-server/preview-server.js +113 -0
- package/lib/commands/preview-docs/preview-server/server.d.ts +22 -0
- package/lib/commands/preview-docs/preview-server/server.js +85 -0
- package/lib/commands/preview-project/constants.d.ts +14 -0
- package/lib/commands/preview-project/constants.js +22 -0
- package/lib/commands/preview-project/index.d.ts +3 -0
- package/lib/commands/preview-project/index.js +56 -0
- package/lib/commands/preview-project/types.d.ts +10 -0
- package/lib/commands/preview-project/types.js +2 -0
- package/lib/commands/push.d.ts +44 -0
- package/lib/commands/push.js +301 -0
- package/lib/commands/split/__tests__/index.test.d.ts +1 -0
- package/lib/commands/split/__tests__/index.test.js +91 -0
- package/lib/commands/split/index.d.ts +13 -0
- package/lib/commands/split/index.js +259 -0
- package/lib/commands/split/types.d.ts +36 -0
- package/lib/commands/split/types.js +51 -0
- package/lib/commands/stats.d.ts +8 -0
- package/lib/commands/stats.js +96 -0
- package/lib/commands/translations.d.ts +7 -0
- package/lib/commands/translations.js +20 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +710 -13631
- package/lib/otel.d.ts +10 -0
- package/lib/otel.js +47 -0
- package/lib/reunite/api/__tests__/api-keys.test.d.ts +1 -0
- package/lib/reunite/api/__tests__/api-keys.test.js +26 -0
- package/lib/reunite/api/__tests__/api.client.test.d.ts +1 -0
- package/lib/reunite/api/__tests__/api.client.test.js +363 -0
- package/lib/reunite/api/__tests__/domains.test.d.ts +1 -0
- package/lib/reunite/api/__tests__/domains.test.js +32 -0
- package/lib/reunite/api/api-client.d.ts +85 -0
- package/lib/reunite/api/api-client.js +236 -0
- package/lib/reunite/api/api-keys.d.ts +1 -0
- package/lib/reunite/api/api-keys.js +23 -0
- package/lib/reunite/api/domains.d.ts +4 -0
- package/lib/reunite/api/domains.js +22 -0
- package/lib/reunite/api/index.d.ts +3 -0
- package/lib/reunite/api/index.js +19 -0
- package/lib/reunite/api/types.d.ts +102 -0
- package/lib/reunite/api/types.js +2 -0
- package/lib/reunite/commands/__tests__/push-status.test.d.ts +1 -0
- package/lib/reunite/commands/__tests__/push-status.test.js +563 -0
- package/lib/reunite/commands/__tests__/push.test.d.ts +1 -0
- package/lib/reunite/commands/__tests__/push.test.js +315 -0
- package/lib/reunite/commands/__tests__/utils.test.d.ts +1 -0
- package/lib/reunite/commands/__tests__/utils.test.js +51 -0
- package/lib/reunite/commands/push-status.d.ts +23 -0
- package/lib/reunite/commands/push-status.js +206 -0
- package/lib/reunite/commands/push.d.ts +28 -0
- package/lib/reunite/commands/push.js +142 -0
- package/lib/reunite/commands/utils.d.ts +25 -0
- package/lib/reunite/commands/utils.js +46 -0
- package/lib/reunite/utils.d.ts +2 -0
- package/lib/reunite/utils.js +6 -0
- package/lib/types.d.ts +44 -0
- package/lib/types.js +5 -0
- package/lib/utils/__mocks__/miscellaneous.d.ts +43 -0
- package/lib/utils/__mocks__/miscellaneous.js +24 -0
- package/lib/utils/assert-node-version.d.ts +1 -0
- package/lib/utils/assert-node-version.js +16 -0
- package/lib/utils/fetch-with-timeout.d.ts +6 -0
- package/lib/utils/fetch-with-timeout.js +24 -0
- package/lib/utils/getCommandNameFromArgs.d.ts +2 -0
- package/lib/utils/getCommandNameFromArgs.js +6 -0
- package/lib/utils/js-utils.d.ts +5 -0
- package/lib/utils/js-utils.js +28 -0
- package/lib/utils/miscellaneous.d.ts +84 -0
- package/lib/utils/miscellaneous.js +563 -0
- package/lib/utils/platform.d.ts +16 -0
- package/lib/utils/platform.js +34 -0
- package/lib/utils/spinner.d.ts +10 -0
- package/lib/utils/spinner.js +42 -0
- package/lib/utils/update-version-notifier.d.ts +3 -0
- package/lib/utils/update-version-notifier.js +102 -0
- package/lib/wrapper.d.ts +11 -0
- package/lib/wrapper.js +67 -0
- package/package.json +50 -13
- package/LICENSE +0 -7
- package/THIRD_PARTY_NOTICES +0 -769
- package/lib/chunks/5ILQMFXK.js +0 -59
- package/lib/chunks/A6JSOHCP.js +0 -41
- package/lib/chunks/AIO2RJZJ.js +0 -17782
- package/lib/chunks/AIT3U3JT.js +0 -22
- package/lib/chunks/C4SG2WPV.js +0 -1133
- package/lib/chunks/DA6HPZQT.js +0 -13374
- package/lib/chunks/FO6BDVGE.js +0 -25
- package/lib/chunks/GGA7PAQ6.js +0 -3617
- package/lib/chunks/GMI6W26P.js +0 -19036
- package/lib/chunks/GSHKQMMA.js +0 -37533
- package/lib/chunks/ICAVAH7N.js +0 -387
- package/lib/chunks/LAGOR3AO.js +0 -90
- package/lib/chunks/PHUZ23OM.js +0 -23
- package/lib/chunks/R4VXAOCD.js +0 -92239
- package/lib/chunks/TS33ZDKX.js +0 -35
- package/lib/chunks/VUDTNFRL.js +0 -42
- package/lib/chunks/VXIQEZPR.js +0 -2564
- package/lib/chunks/W7G5WVPB.js +0 -44
- package/lib/chunks/XHPY6UJF.js +0 -1638
- package/lib/chunks/Y55HKMDX.js +0 -13
- package/lib/chunks/Y6DTFCLS.js +0 -15
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Redocly CLI
|
|
2
2
|
|
|
3
|
-
[@Redocly](https://redocly.com) CLI is your all-in-one
|
|
4
|
-
It builds, manages, improves, and quality-checks your
|
|
3
|
+
[@Redocly](https://redocly.com) CLI is your all-in-one OpenAPI utility.
|
|
4
|
+
It builds, manages, improves, and quality-checks your OpenAPI descriptions, all of which comes in handy for various phases of the API Lifecycle.
|
|
5
5
|
Create your own rulesets to make API governance easy, publish beautiful API reference documentation, and more.
|
|
6
|
-
Supports OpenAPI 3.
|
|
6
|
+
Supports OpenAPI 3.1, 3.0 and OpenAPI 2.0 (legacy Swagger), AsyncAPI 3.0 and 2.6, Arazzo 1.0.
|
|
7
7
|
|
|
8
8
|

|
|
9
9
|

|
|
@@ -11,23 +11,18 @@ Supports OpenAPI 3.2, 3.1, 3.0 and OpenAPI 2.0 (legacy Swagger), AsyncAPI 3.0 an
|
|
|
11
11
|
|
|
12
12
|

|
|
13
13
|
|
|
14
|
-
## Migration
|
|
15
|
-
|
|
16
|
-
Migrating from Redocly CLI v1 to v2?
|
|
17
|
-
Here's the [guide](https://redocly.com/docs/cli/guides/migrate-to-v2) to make the transition smoother.
|
|
18
|
-
|
|
19
14
|
## Usage
|
|
20
15
|
|
|
21
16
|
### Node
|
|
22
17
|
|
|
23
18
|
```sh
|
|
24
|
-
npx @redocly/cli@
|
|
19
|
+
npx @redocly/cli@v1-archive lint path-to-root-file.yaml
|
|
25
20
|
```
|
|
26
21
|
|
|
27
22
|
Alternatively, install it globally with `npm`:
|
|
28
23
|
|
|
29
24
|
```sh
|
|
30
|
-
npm install @redocly/cli -g
|
|
25
|
+
npm install @redocly/cli@v1-archive -g
|
|
31
26
|
```
|
|
32
27
|
|
|
33
28
|
Then you can use it as `redocly [command] [options]`, for example:
|
|
@@ -36,7 +31,7 @@ Then you can use it as `redocly [command] [options]`, for example:
|
|
|
36
31
|
redocly lint path-to-root-file.yaml
|
|
37
32
|
```
|
|
38
33
|
|
|
39
|
-
The minimum required versions of Node.js and NPM are
|
|
34
|
+
The minimum required versions of Node.js and NPM are 18.17.0 and 10.8.2 respectively.
|
|
40
35
|
|
|
41
36
|
### Docker
|
|
42
37
|
|
|
@@ -96,8 +91,8 @@ redocly lint openapi.yaml
|
|
|
96
91
|
```
|
|
97
92
|
|
|
98
93
|
**Configure the rules** as you wish.
|
|
99
|
-
Other API Linters use complicated identifiers like JSONPath, but Redocly makes life easy with simple expressions that understand the
|
|
100
|
-
You can either use the [built-in rules](https://redocly.com/docs/cli/rules) to mix-and-match your ideal API guidelines, or break out the tools to
|
|
94
|
+
Other API Linters use complicated identifiers like JSONPath, but Redocly makes life easy with simple expressions that understand the OpenAPI structure.
|
|
95
|
+
You can either use the [built-in rules](https://redocly.com/docs/cli/rules) to mix-and-match your ideal API guidelines, or break out the tools to build your own.
|
|
101
96
|
|
|
102
97
|
**Format the output** in whatever way you need.
|
|
103
98
|
The `stylish` output is as good as it sounds, but if you need JSON, Markdown, Checkstyle and other outputs to integrate with other tools, the `lint` command can output those too.
|
|
@@ -106,39 +101,6 @@ The `stylish` output is as good as it sounds, but if you need JSON, Markdown, Ch
|
|
|
106
101
|
|
|
107
102
|
[Learn more about API standards and configuring Redocly rules](https://redocly.com/docs/cli/api-standards).
|
|
108
103
|
|
|
109
|
-
Looking for more examples? Check out our [Cookbook](https://github.com/Redocly/redocly-cli-cookbook).
|
|
110
|
-
|
|
111
|
-
### API contract testing with Respect
|
|
112
|
-
|
|
113
|
-
Ensure your APIs match their OpenAPI descriptions with **Respect**, Redocly's API contract testing system. Respect sends real HTTP requests to your API server and validates that responses match the expectations defined in your OpenAPI description and Arazzo workflows.
|
|
114
|
-
|
|
115
|
-
- Verify API responses match your OpenAPI schema
|
|
116
|
-
- Test complex API sequences using OpenAPI Arazzo format
|
|
117
|
-
- Catch API drift early in development and CI/CD
|
|
118
|
-
- Ensure external APIs you depend on behave as expected
|
|
119
|
-
- Track response times and detect anomalies
|
|
120
|
-
|
|
121
|
-
#### Quick start
|
|
122
|
-
|
|
123
|
-
```sh
|
|
124
|
-
# Generate test workflows from your OpenAPI spec
|
|
125
|
-
redocly generate-arazzo openapi.yaml
|
|
126
|
-
|
|
127
|
-
# Run contract tests against your API
|
|
128
|
-
redocly respect auto-generated.arazzo.yaml --verbose
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
#### Respect vs. Respect Monitoring
|
|
132
|
-
|
|
133
|
-
Respect is Redocly's community-edition product. Looking for something more? We also offer continuous API monitoring with additional features including:
|
|
134
|
-
|
|
135
|
-
- Real-time insights
|
|
136
|
-
- Automated alerts via email or Slack
|
|
137
|
-
- Automated API checks
|
|
138
|
-
- Proactive API quality assurance
|
|
139
|
-
|
|
140
|
-
Learn more about [Respect](https://redocly.com/respect) and [get started with API contract testing](https://redocly.com/docs/respect/get-started).
|
|
141
|
-
|
|
142
104
|
### Transform an OpenAPI description
|
|
143
105
|
|
|
144
106
|
If your OpenAPI description isn't everything you hoped it would be, enhance it with the Redocly [decorators](https://redocly.com/docs/cli/decorators) feature.
|
package/bin/cli.js
CHANGED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { Document } from '@redocly/openapi-core';
|
|
2
|
+
export declare const __redoclyClient: {
|
|
3
|
+
isAuthorizedWithRedocly: jest.Mock<any, any>;
|
|
4
|
+
isAuthorizedWithRedoclyByRegion: jest.Mock<any, any>;
|
|
5
|
+
login: jest.Mock<any, any>;
|
|
6
|
+
registryApi: {
|
|
7
|
+
setAccessTokens: jest.Mock<any, any>;
|
|
8
|
+
authStatus: jest.Mock<any, any>;
|
|
9
|
+
prepareFileUpload: jest.Mock<any, any>;
|
|
10
|
+
pushApi: jest.Mock<any, any>;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export declare const RedoclyClient: jest.Mock<{
|
|
14
|
+
isAuthorizedWithRedocly: jest.Mock<any, any>;
|
|
15
|
+
isAuthorizedWithRedoclyByRegion: jest.Mock<any, any>;
|
|
16
|
+
login: jest.Mock<any, any>;
|
|
17
|
+
registryApi: {
|
|
18
|
+
setAccessTokens: jest.Mock<any, any>;
|
|
19
|
+
authStatus: jest.Mock<any, any>;
|
|
20
|
+
prepareFileUpload: jest.Mock<any, any>;
|
|
21
|
+
pushApi: jest.Mock<any, any>;
|
|
22
|
+
};
|
|
23
|
+
}, []>;
|
|
24
|
+
export declare const loadConfig: jest.Mock<{
|
|
25
|
+
configFile: null;
|
|
26
|
+
styleguide: {
|
|
27
|
+
addIgnore: jest.Mock<any, any>;
|
|
28
|
+
skipRules: jest.Mock<any, any>;
|
|
29
|
+
skipPreprocessors: jest.Mock<any, any>;
|
|
30
|
+
saveIgnore: jest.Mock<any, any>;
|
|
31
|
+
skipDecorators: jest.Mock<any, any>;
|
|
32
|
+
ignore: null;
|
|
33
|
+
decorators: {
|
|
34
|
+
oas2: {};
|
|
35
|
+
oas3_0: {};
|
|
36
|
+
oas3_1: {};
|
|
37
|
+
};
|
|
38
|
+
preprocessors: {
|
|
39
|
+
oas2: {};
|
|
40
|
+
oas3_0: {};
|
|
41
|
+
oas3_1: {};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
}, []>;
|
|
45
|
+
export declare const getMergedConfig: jest.Mock<any, any>;
|
|
46
|
+
export declare const getProxyAgent: jest.Mock<any, any>;
|
|
47
|
+
export declare const lint: jest.Mock<any, any>;
|
|
48
|
+
export declare const bundle: jest.Mock<{
|
|
49
|
+
bundle: {
|
|
50
|
+
parsed: null;
|
|
51
|
+
};
|
|
52
|
+
problems: null;
|
|
53
|
+
}, []>;
|
|
54
|
+
export declare const getTotals: jest.Mock<{
|
|
55
|
+
errors: number;
|
|
56
|
+
}, []>;
|
|
57
|
+
export declare const formatProblems: jest.Mock<any, any>;
|
|
58
|
+
export declare const slash: jest.Mock<any, any>;
|
|
59
|
+
export declare const findConfig: jest.Mock<any, any>;
|
|
60
|
+
export declare const doesYamlFileExist: jest.Mock<any, any>;
|
|
61
|
+
export declare const bundleDocument: jest.Mock<Promise<{
|
|
62
|
+
problems: {};
|
|
63
|
+
}>, []>;
|
|
64
|
+
export declare const detectSpec: jest.Mock<any, any>;
|
|
65
|
+
export declare const isAbsoluteUrl: jest.Mock<any, any>;
|
|
66
|
+
export declare const stringifyYaml: jest.Mock<any, [data: any]>;
|
|
67
|
+
export declare class BaseResolver {
|
|
68
|
+
cache: Map<string, Promise<Document | ResolveError>>;
|
|
69
|
+
getFiles: jest.Mock<any, any>;
|
|
70
|
+
resolveExternalRef: jest.Mock<any, any>;
|
|
71
|
+
loadExternalRef: typeof jest.fn;
|
|
72
|
+
parseDocument: jest.Mock<any, any>;
|
|
73
|
+
resolveDocument: jest.Mock<any, any>;
|
|
74
|
+
}
|
|
75
|
+
export declare class ResolveError extends Error {
|
|
76
|
+
originalError: Error;
|
|
77
|
+
constructor(originalError: Error);
|
|
78
|
+
}
|
|
79
|
+
export declare class YamlParseError extends Error {
|
|
80
|
+
originalError: Error;
|
|
81
|
+
constructor(originalError: Error);
|
|
82
|
+
}
|
|
83
|
+
export declare enum SpecVersion {
|
|
84
|
+
OAS2 = "oas2",
|
|
85
|
+
OAS3_0 = "oas3_0",
|
|
86
|
+
OAS3_1 = "oas3_1",
|
|
87
|
+
Async2 = "async2",
|
|
88
|
+
Async3 = "async3"
|
|
89
|
+
}
|
|
90
|
+
export declare enum Oas3Operations {
|
|
91
|
+
get = "get",
|
|
92
|
+
put = "put",
|
|
93
|
+
post = "post",
|
|
94
|
+
delete = "delete",
|
|
95
|
+
options = "options",
|
|
96
|
+
head = "head",
|
|
97
|
+
patch = "patch",
|
|
98
|
+
trace = "trace"
|
|
99
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Oas3Operations = exports.SpecVersion = exports.YamlParseError = exports.ResolveError = exports.BaseResolver = exports.stringifyYaml = exports.isAbsoluteUrl = exports.detectSpec = exports.bundleDocument = exports.doesYamlFileExist = exports.findConfig = exports.slash = exports.formatProblems = exports.getTotals = exports.bundle = exports.lint = exports.getProxyAgent = exports.getMergedConfig = exports.loadConfig = exports.RedoclyClient = exports.__redoclyClient = void 0;
|
|
4
|
+
const config_1 = require("./../../__tests__/fixtures/config");
|
|
5
|
+
const documents_1 = require("../documents");
|
|
6
|
+
exports.__redoclyClient = {
|
|
7
|
+
isAuthorizedWithRedocly: jest.fn().mockResolvedValue(true),
|
|
8
|
+
isAuthorizedWithRedoclyByRegion: jest.fn().mockResolvedValue(true),
|
|
9
|
+
login: jest.fn(),
|
|
10
|
+
registryApi: {
|
|
11
|
+
setAccessTokens: jest.fn(),
|
|
12
|
+
authStatus: jest.fn(),
|
|
13
|
+
prepareFileUpload: jest.fn().mockResolvedValue({
|
|
14
|
+
signedUploadUrl: 'signedUploadUrl',
|
|
15
|
+
filePath: 'filePath',
|
|
16
|
+
}),
|
|
17
|
+
pushApi: jest.fn(),
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
exports.RedoclyClient = jest.fn(() => exports.__redoclyClient);
|
|
21
|
+
exports.loadConfig = jest.fn(() => config_1.ConfigFixture);
|
|
22
|
+
exports.getMergedConfig = jest.fn();
|
|
23
|
+
exports.getProxyAgent = jest.fn();
|
|
24
|
+
exports.lint = jest.fn();
|
|
25
|
+
exports.bundle = jest.fn(() => ({ bundle: { parsed: null }, problems: null }));
|
|
26
|
+
exports.getTotals = jest.fn(() => ({ errors: 0 }));
|
|
27
|
+
exports.formatProblems = jest.fn();
|
|
28
|
+
exports.slash = jest.fn();
|
|
29
|
+
exports.findConfig = jest.fn();
|
|
30
|
+
exports.doesYamlFileExist = jest.fn();
|
|
31
|
+
exports.bundleDocument = jest.fn(() => Promise.resolve({ problems: {} }));
|
|
32
|
+
exports.detectSpec = jest.fn();
|
|
33
|
+
exports.isAbsoluteUrl = jest.fn();
|
|
34
|
+
exports.stringifyYaml = jest.fn((data) => data);
|
|
35
|
+
class BaseResolver {
|
|
36
|
+
constructor() {
|
|
37
|
+
this.cache = new Map();
|
|
38
|
+
this.getFiles = jest.fn();
|
|
39
|
+
this.resolveExternalRef = jest.fn();
|
|
40
|
+
this.loadExternalRef = jest.fn;
|
|
41
|
+
this.parseDocument = jest.fn();
|
|
42
|
+
this.resolveDocument = jest
|
|
43
|
+
.fn()
|
|
44
|
+
.mockImplementationOnce(() => Promise.resolve({ source: { absoluteRef: 'ref' }, parsed: documents_1.firstDocument }))
|
|
45
|
+
.mockImplementationOnce(() => Promise.resolve({ source: { absoluteRef: 'ref' }, parsed: documents_1.secondDocument }))
|
|
46
|
+
.mockImplementationOnce(() => Promise.resolve({ source: { absoluteRef: 'ref' }, parsed: documents_1.thirdDocument }));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.BaseResolver = BaseResolver;
|
|
50
|
+
class ResolveError extends Error {
|
|
51
|
+
constructor(originalError) {
|
|
52
|
+
super(originalError.message);
|
|
53
|
+
this.originalError = originalError;
|
|
54
|
+
Object.setPrototypeOf(this, ResolveError.prototype);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.ResolveError = ResolveError;
|
|
58
|
+
class YamlParseError extends Error {
|
|
59
|
+
constructor(originalError) {
|
|
60
|
+
super(originalError.message);
|
|
61
|
+
this.originalError = originalError;
|
|
62
|
+
Object.setPrototypeOf(this, YamlParseError.prototype);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.YamlParseError = YamlParseError;
|
|
66
|
+
var SpecVersion;
|
|
67
|
+
(function (SpecVersion) {
|
|
68
|
+
SpecVersion["OAS2"] = "oas2";
|
|
69
|
+
SpecVersion["OAS3_0"] = "oas3_0";
|
|
70
|
+
SpecVersion["OAS3_1"] = "oas3_1";
|
|
71
|
+
SpecVersion["Async2"] = "async2";
|
|
72
|
+
SpecVersion["Async3"] = "async3";
|
|
73
|
+
})(SpecVersion || (exports.SpecVersion = SpecVersion = {}));
|
|
74
|
+
var Oas3Operations;
|
|
75
|
+
(function (Oas3Operations) {
|
|
76
|
+
Oas3Operations["get"] = "get";
|
|
77
|
+
Oas3Operations["put"] = "put";
|
|
78
|
+
Oas3Operations["post"] = "post";
|
|
79
|
+
Oas3Operations["delete"] = "delete";
|
|
80
|
+
Oas3Operations["options"] = "options";
|
|
81
|
+
Oas3Operations["head"] = "head";
|
|
82
|
+
Oas3Operations["patch"] = "patch";
|
|
83
|
+
Oas3Operations["trace"] = "trace";
|
|
84
|
+
})(Oas3Operations || (exports.Oas3Operations = Oas3Operations = {}));
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
export declare const firstDocument: {
|
|
2
|
+
openapi: string;
|
|
3
|
+
servers: {
|
|
4
|
+
url: string;
|
|
5
|
+
}[];
|
|
6
|
+
info: {
|
|
7
|
+
description: string;
|
|
8
|
+
version: string;
|
|
9
|
+
title: string;
|
|
10
|
+
termsOfService: string;
|
|
11
|
+
license: {
|
|
12
|
+
name: string;
|
|
13
|
+
url: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
paths: {
|
|
17
|
+
'/GETUser/{userId}': {
|
|
18
|
+
summary: string;
|
|
19
|
+
description: string;
|
|
20
|
+
servers: ({
|
|
21
|
+
url: string;
|
|
22
|
+
description?: undefined;
|
|
23
|
+
} | {
|
|
24
|
+
url: string;
|
|
25
|
+
description: string;
|
|
26
|
+
})[];
|
|
27
|
+
get: {
|
|
28
|
+
tags: string[];
|
|
29
|
+
summary: string;
|
|
30
|
+
description: string;
|
|
31
|
+
operationId: string;
|
|
32
|
+
servers: {
|
|
33
|
+
url: string;
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
parameters: {
|
|
37
|
+
name: string;
|
|
38
|
+
in: string;
|
|
39
|
+
schema: {
|
|
40
|
+
description: string;
|
|
41
|
+
};
|
|
42
|
+
}[];
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
components: {};
|
|
46
|
+
};
|
|
47
|
+
export declare const secondDocument: {
|
|
48
|
+
openapi: string;
|
|
49
|
+
servers: {
|
|
50
|
+
url: string;
|
|
51
|
+
}[];
|
|
52
|
+
info: {
|
|
53
|
+
description: string;
|
|
54
|
+
version: string;
|
|
55
|
+
title: string;
|
|
56
|
+
termsOfService: string;
|
|
57
|
+
license: {
|
|
58
|
+
name: string;
|
|
59
|
+
url: string;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
post: {
|
|
63
|
+
'/GETUser/{userId}': {
|
|
64
|
+
summary: string;
|
|
65
|
+
description: string;
|
|
66
|
+
servers: ({
|
|
67
|
+
url: string;
|
|
68
|
+
description?: undefined;
|
|
69
|
+
} | {
|
|
70
|
+
url: string;
|
|
71
|
+
description: string;
|
|
72
|
+
})[];
|
|
73
|
+
get: {
|
|
74
|
+
tags: string[];
|
|
75
|
+
summary: string;
|
|
76
|
+
description: string;
|
|
77
|
+
operationId: string;
|
|
78
|
+
servers: {
|
|
79
|
+
url: string;
|
|
80
|
+
}[];
|
|
81
|
+
};
|
|
82
|
+
parameters: {
|
|
83
|
+
name: string;
|
|
84
|
+
in: string;
|
|
85
|
+
schema: {
|
|
86
|
+
description: string;
|
|
87
|
+
};
|
|
88
|
+
}[];
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
components: {};
|
|
92
|
+
};
|
|
93
|
+
export declare const thirdDocument: {
|
|
94
|
+
openapi: string;
|
|
95
|
+
info: {
|
|
96
|
+
title: string;
|
|
97
|
+
version: string;
|
|
98
|
+
};
|
|
99
|
+
servers: {
|
|
100
|
+
url: string;
|
|
101
|
+
}[];
|
|
102
|
+
paths: {};
|
|
103
|
+
components: {
|
|
104
|
+
schemas: {
|
|
105
|
+
SchemaWithNull: {
|
|
106
|
+
type: string;
|
|
107
|
+
default: null;
|
|
108
|
+
nullable: boolean;
|
|
109
|
+
};
|
|
110
|
+
SchemaWithRef: {
|
|
111
|
+
type: string;
|
|
112
|
+
properties: {
|
|
113
|
+
schemaType: {
|
|
114
|
+
type: string;
|
|
115
|
+
enum: string[];
|
|
116
|
+
};
|
|
117
|
+
foo: {
|
|
118
|
+
$ref: string;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
SchemaWithDiscriminator: {
|
|
123
|
+
discriminator: {
|
|
124
|
+
propertyName: string;
|
|
125
|
+
mapping: {
|
|
126
|
+
foo: string;
|
|
127
|
+
bar: string;
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
oneOf: ({
|
|
131
|
+
$ref: string;
|
|
132
|
+
type?: undefined;
|
|
133
|
+
properties?: undefined;
|
|
134
|
+
} | {
|
|
135
|
+
type: string;
|
|
136
|
+
properties: {
|
|
137
|
+
schemaType: {
|
|
138
|
+
type: string;
|
|
139
|
+
enum: string[];
|
|
140
|
+
};
|
|
141
|
+
bar: {
|
|
142
|
+
type: string;
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
$ref?: undefined;
|
|
146
|
+
})[];
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.thirdDocument = exports.secondDocument = exports.firstDocument = void 0;
|
|
4
|
+
exports.firstDocument = {
|
|
5
|
+
openapi: '3.0.0',
|
|
6
|
+
servers: [{ url: 'http://localhost:8080' }],
|
|
7
|
+
info: {
|
|
8
|
+
description: 'example test',
|
|
9
|
+
version: '1.0.0',
|
|
10
|
+
title: 'First API',
|
|
11
|
+
termsOfService: 'http://swagger.io/terms/',
|
|
12
|
+
license: {
|
|
13
|
+
name: 'Apache 2.0',
|
|
14
|
+
url: 'http://www.apache.org/licenses/LICENSE-2.0.html',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
paths: {
|
|
18
|
+
'/GETUser/{userId}': {
|
|
19
|
+
summary: 'get user by id',
|
|
20
|
+
description: 'user info',
|
|
21
|
+
servers: [{ url: '/user' }, { url: '/pet', description: 'pet server' }],
|
|
22
|
+
get: {
|
|
23
|
+
tags: ['pet'],
|
|
24
|
+
summary: 'Find pet by ID',
|
|
25
|
+
description: 'Returns a single pet',
|
|
26
|
+
operationId: 'getPetById',
|
|
27
|
+
servers: [{ url: '/pet' }],
|
|
28
|
+
},
|
|
29
|
+
parameters: [{ name: 'param1', in: 'header', schema: { description: 'string' } }],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
components: {},
|
|
33
|
+
};
|
|
34
|
+
exports.secondDocument = {
|
|
35
|
+
openapi: '3.0.0',
|
|
36
|
+
servers: [{ url: 'http://localhost:8080' }],
|
|
37
|
+
info: {
|
|
38
|
+
description: 'example test',
|
|
39
|
+
version: '1.0.0',
|
|
40
|
+
title: 'Second API',
|
|
41
|
+
termsOfService: 'http://swagger.io/terms/',
|
|
42
|
+
license: {
|
|
43
|
+
name: 'Apache 2.0',
|
|
44
|
+
url: 'http://www.apache.org/licenses/LICENSE-2.0.html',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
post: {
|
|
48
|
+
'/GETUser/{userId}': {
|
|
49
|
+
summary: 'get user',
|
|
50
|
+
description: 'user information',
|
|
51
|
+
servers: [{ url: '/user' }, { url: '/pet', description: '' }],
|
|
52
|
+
get: {
|
|
53
|
+
tags: ['pet'],
|
|
54
|
+
summary: 'Find pet by ID',
|
|
55
|
+
description: 'Returns a single pet',
|
|
56
|
+
operationId: 'getPetById',
|
|
57
|
+
servers: [{ url: '/pet' }],
|
|
58
|
+
},
|
|
59
|
+
parameters: [{ name: 'param1', in: 'header', schema: { description: 'string' } }],
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
components: {},
|
|
63
|
+
};
|
|
64
|
+
exports.thirdDocument = {
|
|
65
|
+
openapi: '3.0.0',
|
|
66
|
+
info: {
|
|
67
|
+
title: 'Third API',
|
|
68
|
+
version: '1.0',
|
|
69
|
+
},
|
|
70
|
+
servers: [
|
|
71
|
+
{
|
|
72
|
+
url: 'https://api.server.test/v1',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
paths: {},
|
|
76
|
+
components: {
|
|
77
|
+
schemas: {
|
|
78
|
+
SchemaWithNull: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
default: null,
|
|
81
|
+
nullable: true,
|
|
82
|
+
},
|
|
83
|
+
SchemaWithRef: {
|
|
84
|
+
type: 'object',
|
|
85
|
+
properties: {
|
|
86
|
+
schemaType: {
|
|
87
|
+
type: 'string',
|
|
88
|
+
enum: ['foo'],
|
|
89
|
+
},
|
|
90
|
+
foo: {
|
|
91
|
+
$ref: '#/components/schemas/SchemaWithNull',
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
SchemaWithDiscriminator: {
|
|
96
|
+
discriminator: {
|
|
97
|
+
propertyName: 'schemaType',
|
|
98
|
+
mapping: {
|
|
99
|
+
foo: '#/components/schemas/SchemaWithRef',
|
|
100
|
+
bar: '#/components/schemas/SchemaWithNull',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
oneOf: [
|
|
104
|
+
{
|
|
105
|
+
$ref: '#/components/schemas/SchemaWithRef',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
type: 'object',
|
|
109
|
+
properties: {
|
|
110
|
+
schemaType: {
|
|
111
|
+
type: 'string',
|
|
112
|
+
enum: ['bar'],
|
|
113
|
+
},
|
|
114
|
+
bar: {
|
|
115
|
+
type: 'string',
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const existsSync: jest.Mock<any, any>;
|
|
2
|
+
export declare const readFileSync: jest.Mock<string, []>;
|
|
3
|
+
export declare const statSync: jest.Mock<{
|
|
4
|
+
size: number;
|
|
5
|
+
}, []>;
|
|
6
|
+
export declare const createReadStream: jest.Mock<any, any>;
|
|
7
|
+
export declare const writeFileSync: jest.Mock<any, any>;
|
|
8
|
+
export declare const mkdirSync: jest.Mock<any, any>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mkdirSync = exports.writeFileSync = exports.createReadStream = exports.statSync = exports.readFileSync = exports.existsSync = void 0;
|
|
4
|
+
exports.existsSync = jest.fn();
|
|
5
|
+
exports.readFileSync = jest.fn(() => '');
|
|
6
|
+
exports.statSync = jest.fn(() => ({ size: 0 }));
|
|
7
|
+
exports.createReadStream = jest.fn();
|
|
8
|
+
exports.writeFileSync = jest.fn();
|
|
9
|
+
exports.mkdirSync = jest.fn();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createStore = exports.loadAndBundleSpec = void 0;
|
|
4
|
+
exports.loadAndBundleSpec = jest.fn(() => Promise.resolve({ openapi: '3.0.0' }));
|
|
5
|
+
exports.createStore = jest.fn(() => Promise.resolve({ toJS: jest.fn(() => '{}') }));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const redoc_1 = require("redoc");
|
|
4
|
+
const server_1 = require("react-dom/server");
|
|
5
|
+
const build_docs_1 = require("../../commands/build-docs");
|
|
6
|
+
const utils_1 = require("../../commands/build-docs/utils");
|
|
7
|
+
const miscellaneous_1 = require("../../utils/miscellaneous");
|
|
8
|
+
jest.mock('redoc');
|
|
9
|
+
jest.mock('fs');
|
|
10
|
+
jest.mock('../../utils/miscellaneous');
|
|
11
|
+
const config = {
|
|
12
|
+
output: '',
|
|
13
|
+
title: 'Test',
|
|
14
|
+
disableGoogleFont: false,
|
|
15
|
+
templateFileName: '',
|
|
16
|
+
templateOptions: {},
|
|
17
|
+
redocOptions: {},
|
|
18
|
+
};
|
|
19
|
+
jest.mock('react-dom/server', () => ({
|
|
20
|
+
renderToString: jest.fn(),
|
|
21
|
+
}));
|
|
22
|
+
jest.mock('handlebars', () => ({
|
|
23
|
+
compile: jest.fn(() => jest.fn(() => '<html></html>')),
|
|
24
|
+
}));
|
|
25
|
+
describe('build-docs', () => {
|
|
26
|
+
it('should return correct html and call function for ssr', async () => {
|
|
27
|
+
const result = await (0, utils_1.getPageHTML)({}, '../some-path/openapi.yaml', {
|
|
28
|
+
...config,
|
|
29
|
+
redocCurrentVersion: '2.0.0',
|
|
30
|
+
});
|
|
31
|
+
expect(server_1.renderToString).toBeCalledTimes(1);
|
|
32
|
+
expect(redoc_1.createStore).toBeCalledTimes(1);
|
|
33
|
+
expect(result).toBe('<html></html>');
|
|
34
|
+
});
|
|
35
|
+
it('should work correctly when calling handlerBuildCommand', async () => {
|
|
36
|
+
const processExitMock = jest.spyOn(process, 'exit').mockImplementation();
|
|
37
|
+
await (0, build_docs_1.handlerBuildCommand)({
|
|
38
|
+
argv: {
|
|
39
|
+
o: '',
|
|
40
|
+
title: 'test',
|
|
41
|
+
disableGoogleFont: false,
|
|
42
|
+
template: '',
|
|
43
|
+
templateOptions: {},
|
|
44
|
+
theme: { openapi: {} },
|
|
45
|
+
api: '../some-path/openapi.yaml',
|
|
46
|
+
},
|
|
47
|
+
config: {},
|
|
48
|
+
version: 'cli-version',
|
|
49
|
+
});
|
|
50
|
+
expect(redoc_1.loadAndBundleSpec).toBeCalledTimes(1);
|
|
51
|
+
expect(miscellaneous_1.getFallbackApisOrExit).toBeCalledTimes(1);
|
|
52
|
+
expect(processExitMock).toBeCalledTimes(0);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|