@redocly/openapi-core 1.0.0-beta.125 → 1.0.0-beta.127
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/lib/bundle.js +5 -2
- package/lib/config/all.js +8 -1
- package/lib/resolve.js +5 -1
- package/lib/rules/common/required-string-property-missing-min-length.d.ts +1 -1
- package/lib/rules/common/required-string-property-missing-min-length.js +3 -3
- package/lib/rules/common/spec.js +1 -0
- package/lib/rules/oas2/index.js +1 -1
- package/lib/rules/oas2/request-mime-type.d.ts +1 -1
- package/lib/rules/oas2/response-mime-type.d.ts +1 -1
- package/lib/rules/oas3/index.js +1 -1
- package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +2 -2
- package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +3 -3
- package/lib/rules/oas3/request-mime-type.d.ts +1 -1
- package/lib/rules/oas3/response-mime-type.d.ts +1 -1
- package/lib/walk.d.ts +6 -5
- package/lib/walk.js +23 -27
- package/package.json +1 -1
- package/__tests__/utils.ts +0 -88
- package/src/__tests__/__snapshots__/bundle.test.ts.snap +0 -437
- package/src/__tests__/bundle.test.ts +0 -236
- package/src/__tests__/codeframes.test.ts +0 -530
- package/src/__tests__/fixtures/.redocly.lint-ignore.yaml +0 -5
- package/src/__tests__/fixtures/extension.js +0 -24
- package/src/__tests__/fixtures/refs/definitions.yaml +0 -3
- package/src/__tests__/fixtures/refs/examples.yaml +0 -8
- package/src/__tests__/fixtures/refs/external-request-body.yaml +0 -13
- package/src/__tests__/fixtures/refs/externalref.yaml +0 -35
- package/src/__tests__/fixtures/refs/hosted.yaml +0 -35
- package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
- package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
- package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +0 -18
- package/src/__tests__/fixtures/refs/param-b.yaml +0 -1
- package/src/__tests__/fixtures/refs/param-c.yaml +0 -1
- package/src/__tests__/fixtures/refs/rename.yaml +0 -1
- package/src/__tests__/fixtures/refs/requestBody.yaml +0 -9
- package/src/__tests__/fixtures/refs/schema-a.yaml +0 -1
- package/src/__tests__/fixtures/refs/simple.yaml +0 -1
- package/src/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
- package/src/__tests__/fixtures/resolve/External.yaml +0 -10
- package/src/__tests__/fixtures/resolve/External2.yaml +0 -4
- package/src/__tests__/fixtures/resolve/description.md +0 -3
- package/src/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
- package/src/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
- package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
- package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
- package/src/__tests__/fixtures/resolve/openapi.yaml +0 -28
- package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
- package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
- package/src/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
- package/src/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
- package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
- package/src/__tests__/format.test.ts +0 -76
- package/src/__tests__/js-yaml.test.ts +0 -73
- package/src/__tests__/lint.test.ts +0 -388
- package/src/__tests__/logger-browser.test.ts +0 -53
- package/src/__tests__/logger.test.ts +0 -47
- package/src/__tests__/login.test.ts +0 -17
- package/src/__tests__/normalizeVisitors.test.ts +0 -151
- package/src/__tests__/output-browser.test.ts +0 -18
- package/src/__tests__/output.test.ts +0 -15
- package/src/__tests__/ref-utils.test.ts +0 -120
- package/src/__tests__/resolve-http.test.ts +0 -77
- package/src/__tests__/resolve.test.ts +0 -408
- package/src/__tests__/utils-browser.test.ts +0 -11
- package/src/__tests__/utils.test.ts +0 -144
- package/src/__tests__/walk.test.ts +0 -1545
- package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
- package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
- package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
- package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -35
- package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
- package/src/benchmark/benches/rebilly.yaml +0 -32275
- package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
- package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
- package/src/benchmark/benchmark.js +0 -311
- package/src/benchmark/colors.js +0 -29
- package/src/benchmark/fork.js +0 -83
- package/src/benchmark/utils.ts +0 -36
- package/src/bundle.ts +0 -399
- package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -161
- package/src/config/__tests__/__snapshots__/config.test.ts.snap +0 -144
- package/src/config/__tests__/config-resolvers.test.ts +0 -491
- package/src/config/__tests__/config.test.ts +0 -307
- package/src/config/__tests__/fixtures/ingore-file.ts +0 -8
- package/src/config/__tests__/fixtures/load-redocly.yaml +0 -2
- package/src/config/__tests__/fixtures/plugin-config.yaml +0 -2
- package/src/config/__tests__/fixtures/plugin.js +0 -56
- package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -11
- package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -69
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -7
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-custom-function.yaml +0 -17
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -18
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-wrong-custom-function.yaml +0 -15
- package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -9
- package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -80
- package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -3
- package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -4
- package/src/config/__tests__/load.test.ts +0 -167
- package/src/config/__tests__/resolve-plugins.test.ts +0 -27
- package/src/config/__tests__/utils.test.ts +0 -204
- package/src/config/all.ts +0 -66
- package/src/config/builtIn.ts +0 -37
- package/src/config/config-resolvers.ts +0 -465
- package/src/config/config.ts +0 -330
- package/src/config/index.ts +0 -7
- package/src/config/load.ts +0 -144
- package/src/config/minimal.ts +0 -60
- package/src/config/recommended.ts +0 -60
- package/src/config/rules.ts +0 -54
- package/src/config/types.ts +0 -216
- package/src/config/utils.ts +0 -333
- package/src/decorators/__tests__/filter-in.test.ts +0 -310
- package/src/decorators/__tests__/filter-out.test.ts +0 -335
- package/src/decorators/__tests__/media-type-examples-override.test.ts +0 -665
- package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
- package/src/decorators/__tests__/resources/request.yaml +0 -3
- package/src/decorators/__tests__/resources/response.yaml +0 -3
- package/src/decorators/common/filters/filter-helper.ts +0 -72
- package/src/decorators/common/filters/filter-in.ts +0 -18
- package/src/decorators/common/filters/filter-out.ts +0 -18
- package/src/decorators/common/info-description-override.ts +0 -24
- package/src/decorators/common/info-override.ts +0 -15
- package/src/decorators/common/media-type-examples-override.ts +0 -79
- package/src/decorators/common/operation-description-override.ts +0 -30
- package/src/decorators/common/registry-dependencies.ts +0 -25
- package/src/decorators/common/remove-x-internal.ts +0 -59
- package/src/decorators/common/tag-description-override.ts +0 -25
- package/src/decorators/oas2/index.ts +0 -20
- package/src/decorators/oas3/index.ts +0 -22
- package/src/env.ts +0 -5
- package/src/format/codeframes.ts +0 -216
- package/src/format/format.ts +0 -375
- package/src/index.ts +0 -71
- package/src/js-yaml/index.ts +0 -14
- package/src/lint.ts +0 -130
- package/src/logger.ts +0 -34
- package/src/oas-types.ts +0 -57
- package/src/output.ts +0 -7
- package/src/redocly/__tests__/redocly-client.test.ts +0 -146
- package/src/redocly/index.ts +0 -187
- package/src/redocly/redocly-client-types.ts +0 -10
- package/src/redocly/registry-api-types.ts +0 -32
- package/src/redocly/registry-api.ts +0 -149
- package/src/ref-utils.ts +0 -85
- package/src/resolve.ts +0 -412
- package/src/rules/__tests__/fixtures/code-sample.php +0 -9
- package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
- package/src/rules/__tests__/fixtures/ref.yaml +0 -1
- package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -257
- package/src/rules/__tests__/utils.test.ts +0 -160
- package/src/rules/ajv.ts +0 -102
- package/src/rules/common/__tests__/info-license.test.ts +0 -62
- package/src/rules/common/__tests__/license-url.test.ts +0 -63
- package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
- package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -210
- package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
- package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
- package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -192
- package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -231
- package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
- package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
- package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
- package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
- package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
- package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
- package/src/rules/common/__tests__/path-params-defined.test.ts +0 -202
- package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
- package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +0 -264
- package/src/rules/common/__tests__/security-defined.test.ts +0 -175
- package/src/rules/common/__tests__/spec.test.ts +0 -555
- package/src/rules/common/__tests__/tag-description.test.ts +0 -65
- package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
- package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -869
- package/src/rules/common/assertions/__tests__/index.test.ts +0 -100
- package/src/rules/common/assertions/__tests__/utils.test.ts +0 -236
- package/src/rules/common/assertions/asserts.ts +0 -357
- package/src/rules/common/assertions/index.ts +0 -56
- package/src/rules/common/assertions/utils.ts +0 -331
- package/src/rules/common/info-contact.ts +0 -15
- package/src/rules/common/info-license-url.ts +0 -10
- package/src/rules/common/info-license.ts +0 -15
- package/src/rules/common/no-ambiguous-paths.ts +0 -50
- package/src/rules/common/no-enum-type-mismatch.ts +0 -52
- package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
- package/src/rules/common/no-identical-paths.ts +0 -24
- package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
- package/src/rules/common/no-invalid-schema-examples.ts +0 -27
- package/src/rules/common/no-path-trailing-slash.ts +0 -15
- package/src/rules/common/operation-2xx-response.ts +0 -24
- package/src/rules/common/operation-4xx-response.ts +0 -24
- package/src/rules/common/operation-description.ts +0 -13
- package/src/rules/common/operation-operationId-unique.ts +0 -21
- package/src/rules/common/operation-operationId-url-safe.ts +0 -19
- package/src/rules/common/operation-operationId.ts +0 -17
- package/src/rules/common/operation-parameters-unique.ts +0 -48
- package/src/rules/common/operation-singular-tag.ts +0 -17
- package/src/rules/common/operation-summary.ts +0 -13
- package/src/rules/common/operation-tag-defined.ts +0 -26
- package/src/rules/common/parameter-description.ts +0 -22
- package/src/rules/common/path-declaration-must-exist.ts +0 -15
- package/src/rules/common/path-excludes-patterns.ts +0 -23
- package/src/rules/common/path-http-verbs-order.ts +0 -30
- package/src/rules/common/path-not-include-query.ts +0 -17
- package/src/rules/common/path-params-defined.ts +0 -65
- package/src/rules/common/path-segment-plural.ts +0 -31
- package/src/rules/common/paths-kebab-case.ts +0 -19
- package/src/rules/common/required-string-property-missing-min-length.ts +0 -44
- package/src/rules/common/response-contains-header.ts +0 -35
- package/src/rules/common/scalar-property-missing-example.ts +0 -58
- package/src/rules/common/security-defined.ts +0 -65
- package/src/rules/common/spec.ts +0 -174
- package/src/rules/common/tag-description.ts +0 -10
- package/src/rules/common/tags-alphabetical.ts +0 -20
- package/src/rules/no-unresolved-refs.ts +0 -51
- package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
- package/src/rules/oas2/__tests__/response-contains-header.test.ts +0 -174
- package/src/rules/oas2/__tests__/response-contains-property.test.ts +0 -155
- package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
- package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
- package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
- package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
- package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -35
- package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
- package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
- package/src/rules/oas2/index.ts +0 -89
- package/src/rules/oas2/remove-unused-components.ts +0 -81
- package/src/rules/oas2/request-mime-type.ts +0 -17
- package/src/rules/oas2/response-contains-property.ts +0 -36
- package/src/rules/oas2/response-mime-type.ts +0 -17
- package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
- package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
- package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
- package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
- package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -473
- package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
- package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
- package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
- package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +0 -145
- package/src/rules/oas3/__tests__/response-contains-header.test.ts +0 -389
- package/src/rules/oas3/__tests__/response-contains-property.test.ts +0 -403
- package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
- package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
- package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
- package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
- package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
- package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
- package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -505
- package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -298
- package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
- package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +0 -305
- package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
- package/src/rules/oas3/index.ts +0 -109
- package/src/rules/oas3/no-empty-servers.ts +0 -22
- package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
- package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -49
- package/src/rules/oas3/no-server-example.com.ts +0 -14
- package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
- package/src/rules/oas3/no-server-variables-empty-enum.ts +0 -66
- package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
- package/src/rules/oas3/no-unused-components.ts +0 -75
- package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +0 -36
- package/src/rules/oas3/remove-unused-components.ts +0 -95
- package/src/rules/oas3/request-mime-type.ts +0 -31
- package/src/rules/oas3/response-contains-property.ts +0 -38
- package/src/rules/oas3/response-mime-type.ts +0 -31
- package/src/rules/oas3/spec-components-invalid-map-name.ts +0 -74
- package/src/rules/other/stats.ts +0 -73
- package/src/rules/utils.ts +0 -191
- package/src/types/index.ts +0 -149
- package/src/types/oas2.ts +0 -478
- package/src/types/oas3.ts +0 -597
- package/src/types/oas3_1.ts +0 -258
- package/src/types/redocly-yaml.ts +0 -1010
- package/src/typings/common.ts +0 -17
- package/src/typings/openapi.ts +0 -298
- package/src/typings/swagger.ts +0 -236
- package/src/utils.ts +0 -276
- package/src/visitors.ts +0 -491
- package/src/walk.ts +0 -453
- package/tsconfig.json +0 -8
- package/tsconfig.tsbuildinfo +0 -1
package/lib/bundle.js
CHANGED
|
@@ -148,6 +148,7 @@ exports.mapTypeToComponent = mapTypeToComponent;
|
|
|
148
148
|
// function oas3Move
|
|
149
149
|
function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDocument, resolvedRefMap, keepUrlRefs) {
|
|
150
150
|
let components;
|
|
151
|
+
let rootLocation;
|
|
151
152
|
const visitor = {
|
|
152
153
|
ref: {
|
|
153
154
|
leave(node, ctx, resolved) {
|
|
@@ -185,7 +186,8 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
|
|
|
185
186
|
},
|
|
186
187
|
},
|
|
187
188
|
Root: {
|
|
188
|
-
enter(root) {
|
|
189
|
+
enter(root, ctx) {
|
|
190
|
+
rootLocation = ctx.location;
|
|
189
191
|
if (version === oas_types_1.OasMajorVersion.Version3) {
|
|
190
192
|
components = root.components = root.components || {};
|
|
191
193
|
}
|
|
@@ -253,7 +255,8 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
|
|
|
253
255
|
function isEqualOrEqualRef(node, target, ctx) {
|
|
254
256
|
var _a;
|
|
255
257
|
if (ref_utils_1.isRef(node) &&
|
|
256
|
-
((_a = ctx.resolve(node).location) === null || _a === void 0 ? void 0 : _a.absolutePointer) ===
|
|
258
|
+
((_a = ctx.resolve(node, rootLocation.absolutePointer).location) === null || _a === void 0 ? void 0 : _a.absolutePointer) ===
|
|
259
|
+
target.location.absolutePointer) {
|
|
257
260
|
return true;
|
|
258
261
|
}
|
|
259
262
|
return isEqual(node, target.node);
|
package/lib/config/all.js
CHANGED
|
@@ -36,7 +36,14 @@ exports.default = {
|
|
|
36
36
|
severity: 'error',
|
|
37
37
|
patterns: [],
|
|
38
38
|
},
|
|
39
|
-
'request-mime-type':
|
|
39
|
+
'request-mime-type': {
|
|
40
|
+
severity: 'error',
|
|
41
|
+
allowedValues: ['application/json'],
|
|
42
|
+
},
|
|
43
|
+
'response-mime-type': {
|
|
44
|
+
severity: 'error',
|
|
45
|
+
allowedValues: ['application/json'],
|
|
46
|
+
},
|
|
40
47
|
spec: 'error',
|
|
41
48
|
'no-invalid-schema-examples': 'error',
|
|
42
49
|
'no-invalid-parameter-examples': 'error',
|
package/lib/resolve.js
CHANGED
|
@@ -110,12 +110,16 @@ class BaseResolver {
|
|
|
110
110
|
return new Source(absoluteRef, body, mimeType);
|
|
111
111
|
}
|
|
112
112
|
else {
|
|
113
|
+
if (fs.lstatSync(absoluteRef).isDirectory()) {
|
|
114
|
+
throw new Error(`Expected a file but received a folder at ${absoluteRef}`);
|
|
115
|
+
}
|
|
113
116
|
const content = yield fs.promises.readFile(absoluteRef, 'utf-8');
|
|
114
117
|
// In some cases file have \r\n line delimeters like on windows, we should skip it.
|
|
115
118
|
return new Source(absoluteRef, content.replace(/\r\n/g, '\n'));
|
|
116
119
|
}
|
|
117
120
|
}
|
|
118
121
|
catch (error) {
|
|
122
|
+
error.message = error.message.replace(', lstat', '');
|
|
119
123
|
throw new ResolveError(error);
|
|
120
124
|
}
|
|
121
125
|
});
|
|
@@ -204,7 +208,7 @@ function resolveDocument(opts) {
|
|
|
204
208
|
if (Array.isArray(node)) {
|
|
205
209
|
const itemsType = type.items;
|
|
206
210
|
// we continue resolving unknown types, but stop early on known scalars
|
|
207
|
-
if (type !== unknownType &&
|
|
211
|
+
if (itemsType === undefined && type !== unknownType && type !== types_1.SpecExtension) {
|
|
208
212
|
return;
|
|
209
213
|
}
|
|
210
214
|
for (let i = 0; i < node.length; i++) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Oas3Rule } from 'core/src/visitors';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const RequiredStringPropertyMissingMinLength: Oas3Rule;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
3
|
+
exports.RequiredStringPropertyMissingMinLength = void 0;
|
|
4
|
+
const RequiredStringPropertyMissingMinLength = () => {
|
|
5
5
|
let skipSchemaProperties;
|
|
6
6
|
let requiredPropertiesSet;
|
|
7
7
|
return {
|
|
@@ -34,4 +34,4 @@ const RequiredStringPropertyMissingMunLength = () => {
|
|
|
34
34
|
},
|
|
35
35
|
};
|
|
36
36
|
};
|
|
37
|
-
exports.
|
|
37
|
+
exports.RequiredStringPropertyMissingMinLength = RequiredStringPropertyMissingMinLength;
|
package/lib/rules/common/spec.js
CHANGED
|
@@ -122,6 +122,7 @@ const OasSpec = () => {
|
|
|
122
122
|
from: refLocation,
|
|
123
123
|
location: propLocation,
|
|
124
124
|
});
|
|
125
|
+
ignoreNextVisitorsOnNode();
|
|
125
126
|
}
|
|
126
127
|
else if (propValueType === 'array' && ((_e = propSchema.items) === null || _e === void 0 ? void 0 : _e.type)) {
|
|
127
128
|
const itemsType = (_f = propSchema.items) === null || _f === void 0 ? void 0 : _f.type;
|
package/lib/rules/oas2/index.js
CHANGED
|
@@ -84,6 +84,6 @@ exports.rules = {
|
|
|
84
84
|
'response-contains-header': response_contains_header_1.ResponseContainsHeader,
|
|
85
85
|
'response-contains-property': response_contains_property_1.ResponseContainsProperty,
|
|
86
86
|
'scalar-property-missing-example': scalar_property_missing_example_1.ScalarPropertyMissingExample,
|
|
87
|
-
'required-string-property-missing-min-length': required_string_property_missing_min_length_1.
|
|
87
|
+
'required-string-property-missing-min-length': required_string_property_missing_min_length_1.RequiredStringPropertyMissingMinLength,
|
|
88
88
|
};
|
|
89
89
|
exports.preprocessors = {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Oas2Rule } from '../../visitors';
|
|
1
|
+
import type { Oas2Rule } from '../../visitors';
|
|
2
2
|
export declare const RequestMimeType: Oas2Rule;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Oas2Rule } from '../../visitors';
|
|
1
|
+
import type { Oas2Rule } from '../../visitors';
|
|
2
2
|
export declare const ResponseMimeType: Oas2Rule;
|
package/lib/rules/oas3/index.js
CHANGED
|
@@ -104,6 +104,6 @@ exports.rules = {
|
|
|
104
104
|
'response-contains-property': response_contains_property_1.ResponseContainsProperty,
|
|
105
105
|
'scalar-property-missing-example': scalar_property_missing_example_1.ScalarPropertyMissingExample,
|
|
106
106
|
'spec-components-invalid-map-name': spec_components_invalid_map_name_1.SpecComponentsInvalidMapName,
|
|
107
|
-
'required-string-property-missing-min-length': required_string_property_missing_min_length_1.
|
|
107
|
+
'required-string-property-missing-min-length': required_string_property_missing_min_length_1.RequiredStringPropertyMissingMinLength,
|
|
108
108
|
};
|
|
109
109
|
exports.preprocessors = {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Oas3Rule } from '../../visitors';
|
|
1
|
+
import type { Oas3Rule } from '../../visitors';
|
|
2
2
|
/**
|
|
3
|
-
* Validation according rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
|
|
3
|
+
* Validation according to rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
|
|
4
4
|
*/
|
|
5
5
|
export declare const Operation4xxProblemDetailsRfc7807: Oas3Rule;
|
|
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Operation4xxProblemDetailsRfc7807 = void 0;
|
|
4
4
|
const utils_1 = require("../utils");
|
|
5
5
|
/**
|
|
6
|
-
* Validation according rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
|
|
6
|
+
* Validation according to rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
|
|
7
7
|
*/
|
|
8
8
|
const Operation4xxProblemDetailsRfc7807 = () => {
|
|
9
9
|
return {
|
|
10
10
|
Response: {
|
|
11
|
-
skip(
|
|
11
|
+
skip(_, key) {
|
|
12
12
|
return !/4[Xx0-9]{2}/.test(`${key}`);
|
|
13
13
|
},
|
|
14
14
|
enter(response, { report, location }) {
|
|
@@ -19,7 +19,7 @@ const Operation4xxProblemDetailsRfc7807 = () => {
|
|
|
19
19
|
});
|
|
20
20
|
},
|
|
21
21
|
MediaType: {
|
|
22
|
-
skip(
|
|
22
|
+
skip(_, key) {
|
|
23
23
|
return key !== 'application/problem+json';
|
|
24
24
|
},
|
|
25
25
|
enter(media, ctx) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Oas3Rule } from '../../visitors';
|
|
1
|
+
import type { Oas3Rule } from '../../visitors';
|
|
2
2
|
export declare const RequestMimeType: Oas3Rule;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Oas3Rule } from '../../visitors';
|
|
1
|
+
import type { Oas3Rule } from '../../visitors';
|
|
2
2
|
export declare const ResponseMimeType: Oas3Rule;
|
package/lib/walk.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Referenced } from './typings/openapi';
|
|
1
|
+
import type { Referenced } from './typings/openapi';
|
|
2
|
+
import type { NormalizedOasVisitors } from './visitors';
|
|
3
|
+
import type { ResolvedRefMap, Document } from './resolve';
|
|
4
|
+
import type { NormalizedNodeType } from './types';
|
|
5
|
+
import type { RuleSeverity } from './config';
|
|
2
6
|
import { Location } from './ref-utils';
|
|
3
|
-
import {
|
|
4
|
-
import { ResolvedRefMap, Document, ResolveError, YamlParseError, Source } from './resolve';
|
|
7
|
+
import { ResolveError, YamlParseError, Source } from './resolve';
|
|
5
8
|
import { OasVersion } from './oas-types';
|
|
6
|
-
import { NormalizedNodeType } from './types';
|
|
7
|
-
import type { RuleSeverity } from './config';
|
|
8
9
|
declare type NonUndefined = string | number | boolean | symbol | bigint | object | Record<string, any>;
|
|
9
10
|
export declare type ResolveResult<T extends NonUndefined> = {
|
|
10
11
|
node: T;
|
package/lib/walk.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.walkDocument = void 0;
|
|
4
4
|
const ref_utils_1 = require("./ref-utils");
|
|
5
|
-
const resolve_1 = require("./resolve");
|
|
6
5
|
const utils_1 = require("./utils");
|
|
6
|
+
const resolve_1 = require("./resolve");
|
|
7
7
|
const types_1 = require("./types");
|
|
8
8
|
function collectParents(ctx) {
|
|
9
9
|
var _a;
|
|
@@ -28,7 +28,7 @@ function collectParentsLocations(ctx) {
|
|
|
28
28
|
function walkDocument(opts) {
|
|
29
29
|
const { document, rootType, normalizedVisitors, resolvedRefMap, ctx } = opts;
|
|
30
30
|
const seenNodesPerType = {};
|
|
31
|
-
const
|
|
31
|
+
const ignoredNodes = new Set();
|
|
32
32
|
walkNode(document.parsed, rootType, new ref_utils_1.Location(document.source, '#/'), undefined, '');
|
|
33
33
|
function walkNode(node, type, location, parent, key) {
|
|
34
34
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
@@ -58,25 +58,23 @@ function walkDocument(opts) {
|
|
|
58
58
|
if (ref_utils_1.isRef(node)) {
|
|
59
59
|
const refEnterVisitors = normalizedVisitors.ref.enter;
|
|
60
60
|
for (const { visit: visitor, ruleId, severity, context } of refEnterVisitors) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
ctx.refTypes.set(resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source.absoluteRef, type);
|
|
79
|
-
}
|
|
61
|
+
enteredContexts.add(context);
|
|
62
|
+
const report = reportFn.bind(undefined, ruleId, severity);
|
|
63
|
+
visitor(node, {
|
|
64
|
+
report,
|
|
65
|
+
resolve,
|
|
66
|
+
rawNode: node,
|
|
67
|
+
rawLocation,
|
|
68
|
+
location,
|
|
69
|
+
type,
|
|
70
|
+
parent,
|
|
71
|
+
key,
|
|
72
|
+
parentLocations: {},
|
|
73
|
+
oasVersion: ctx.oasVersion,
|
|
74
|
+
getVisitorData: getVisitorDataFn.bind(undefined, ruleId),
|
|
75
|
+
}, { node: resolvedNode, location: resolvedLocation, error });
|
|
76
|
+
if ((resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source.absoluteRef) && ctx.refTypes) {
|
|
77
|
+
ctx.refTypes.set(resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source.absoluteRef, type);
|
|
80
78
|
}
|
|
81
79
|
}
|
|
82
80
|
}
|
|
@@ -88,6 +86,8 @@ function walkDocument(opts) {
|
|
|
88
86
|
const currentEnterVisitors = anyEnterVisitors.concat(((_c = normalizedVisitors[type.name]) === null || _c === void 0 ? void 0 : _c.enter) || []);
|
|
89
87
|
const activatedContexts = [];
|
|
90
88
|
for (const { context, visit, skip, ruleId, severity } of currentEnterVisitors) {
|
|
89
|
+
if (ignoredNodes.has(currentLocation.pointer))
|
|
90
|
+
break;
|
|
91
91
|
if (context.isSkippedLevel) {
|
|
92
92
|
if (context.parent.activatedOn &&
|
|
93
93
|
!context.parent.activatedOn.value.nextLevelTypeActivated &&
|
|
@@ -129,9 +129,7 @@ function walkDocument(opts) {
|
|
|
129
129
|
if (!activatedOn.skipped) {
|
|
130
130
|
visitedBySome = true;
|
|
131
131
|
enteredContexts.add(context);
|
|
132
|
-
|
|
133
|
-
if (ignoreNextVisitorsOnNode)
|
|
134
|
-
break;
|
|
132
|
+
visitWithContext(visit, resolvedNode, node, context, ruleId, severity);
|
|
135
133
|
}
|
|
136
134
|
}
|
|
137
135
|
}
|
|
@@ -238,7 +236,6 @@ function walkDocument(opts) {
|
|
|
238
236
|
// returns true ignores all the next visitors on the specific node
|
|
239
237
|
function visitWithContext(visit, resolvedNode, node, context, ruleId, severity) {
|
|
240
238
|
const report = reportFn.bind(undefined, ruleId, severity);
|
|
241
|
-
let ignoreNextVisitorsOnNode = false;
|
|
242
239
|
visit(resolvedNode, {
|
|
243
240
|
report,
|
|
244
241
|
resolve,
|
|
@@ -251,11 +248,10 @@ function walkDocument(opts) {
|
|
|
251
248
|
parentLocations: collectParentsLocations(context),
|
|
252
249
|
oasVersion: ctx.oasVersion,
|
|
253
250
|
ignoreNextVisitorsOnNode: () => {
|
|
254
|
-
|
|
251
|
+
ignoredNodes.add(currentLocation.pointer);
|
|
255
252
|
},
|
|
256
253
|
getVisitorData: getVisitorDataFn.bind(undefined, ruleId),
|
|
257
254
|
}, collectParents(context), context);
|
|
258
|
-
return { ignoreNextVisitorsOnNode };
|
|
259
255
|
}
|
|
260
256
|
function reportFn(ruleId, severity, opts) {
|
|
261
257
|
const loc = opts.location
|
package/package.json
CHANGED
package/__tests__/utils.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import * as path from 'path';
|
|
2
|
-
|
|
3
|
-
import { Document, Source, NormalizedProblem, parseYaml, stringifyYaml } from '../src';
|
|
4
|
-
import { StyleguideConfig, resolveStyleguideConfig, resolvePlugins } from '../src/config';
|
|
5
|
-
import { Oas3RuleSet } from '../src/oas-types';
|
|
6
|
-
|
|
7
|
-
import type { RuleConfig, Plugin, DecoratorConfig } from '../src/config';
|
|
8
|
-
|
|
9
|
-
export function parseYamlToDocument(body: string, absoluteRef: string = ''): Document {
|
|
10
|
-
return {
|
|
11
|
-
source: new Source(absoluteRef, body),
|
|
12
|
-
parsed: parseYaml(body, { filename: absoluteRef }),
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function replaceSourceWithRef(results: NormalizedProblem[], cwd?: string) {
|
|
17
|
-
const cwdRegexp = cwd ? new RegExp(cwd + path.sep, 'g') : /$^/;
|
|
18
|
-
return results.map((r) => {
|
|
19
|
-
const mapped = {
|
|
20
|
-
...r,
|
|
21
|
-
message: r.message.replace(cwdRegexp, ''),
|
|
22
|
-
location: r.location.map((l) => ({
|
|
23
|
-
...l,
|
|
24
|
-
source: cwd ? path.relative(cwd, l.source.absoluteRef) : l.source.absoluteRef,
|
|
25
|
-
})),
|
|
26
|
-
};
|
|
27
|
-
if (mapped.from) {
|
|
28
|
-
mapped.from = {
|
|
29
|
-
...mapped.from,
|
|
30
|
-
source: cwd
|
|
31
|
-
? path.relative(cwd, mapped.from.source.absoluteRef)
|
|
32
|
-
: (mapped.from.source.absoluteRef as any),
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
return mapped;
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const yamlSerializer = {
|
|
40
|
-
test: () => {
|
|
41
|
-
return true;
|
|
42
|
-
},
|
|
43
|
-
print: (val: any) => {
|
|
44
|
-
return stringifyYaml(val);
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
export function makeConfigForRuleset(
|
|
49
|
-
rules: Oas3RuleSet,
|
|
50
|
-
plugin?: Partial<Plugin>,
|
|
51
|
-
version: string = 'oas3'
|
|
52
|
-
) {
|
|
53
|
-
const rulesConf: Record<string, RuleConfig> = {};
|
|
54
|
-
const ruleId = 'test';
|
|
55
|
-
Object.keys(rules).forEach((name) => {
|
|
56
|
-
rulesConf[`${ruleId}/${name}`] = 'error';
|
|
57
|
-
});
|
|
58
|
-
const plugins = resolvePlugins([
|
|
59
|
-
{
|
|
60
|
-
...plugin,
|
|
61
|
-
id: ruleId,
|
|
62
|
-
rules: { [version]: rules },
|
|
63
|
-
},
|
|
64
|
-
]);
|
|
65
|
-
|
|
66
|
-
return new StyleguideConfig({
|
|
67
|
-
plugins,
|
|
68
|
-
rules: rulesConf,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export async function makeConfig(
|
|
73
|
-
rules: Record<string, RuleConfig>,
|
|
74
|
-
decorators?: Record<string, DecoratorConfig>,
|
|
75
|
-
configPath?: string
|
|
76
|
-
) {
|
|
77
|
-
return new StyleguideConfig(
|
|
78
|
-
await resolveStyleguideConfig({
|
|
79
|
-
styleguideConfig: {
|
|
80
|
-
plugins: [],
|
|
81
|
-
extends: [],
|
|
82
|
-
rules,
|
|
83
|
-
decorators,
|
|
84
|
-
},
|
|
85
|
-
}),
|
|
86
|
-
configPath
|
|
87
|
-
);
|
|
88
|
-
}
|