@redocly/openapi-core 1.0.0-beta.126 → 1.0.0-beta.128
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 +21 -4
- package/lib/config/all.js +1 -0
- package/lib/config/config-resolvers.js +8 -2
- package/lib/config/minimal.js +1 -0
- package/lib/config/recommended.js +1 -0
- package/lib/config/types.d.ts +1 -1
- package/lib/config/utils.js +15 -1
- package/lib/lint.js +17 -2
- package/lib/rules/common/spec-strict-refs.d.ts +2 -0
- package/lib/rules/common/spec-strict-refs.js +30 -0
- package/lib/rules/common/spec.js +1 -0
- package/lib/rules/oas2/index.d.ts +1 -0
- package/lib/rules/oas2/index.js +2 -0
- 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 +2 -0
- 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/rules/oas3/spec-components-invalid-map-name.js +0 -5
- package/lib/types/redocly-yaml.js +6 -1
- package/lib/walk.d.ts +6 -5
- package/lib/walk.js +26 -31
- 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 -430
- 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 -73
- 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 -417
- 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
|
@@ -74,13 +74,27 @@ function bundleDocument(opts) {
|
|
|
74
74
|
: remove_unused_components_2.RemoveUnusedComponents({}),
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
|
-
|
|
77
|
+
let resolvedRefMap = yield resolve_1.resolveDocument({
|
|
78
78
|
rootDocument: document,
|
|
79
79
|
rootType: types.Root,
|
|
80
80
|
externalRefResolver,
|
|
81
81
|
});
|
|
82
|
+
if (preprocessors.length > 0) {
|
|
83
|
+
// Make additional pass to resolve refs defined in preprocessors.
|
|
84
|
+
walk_1.walkDocument({
|
|
85
|
+
document,
|
|
86
|
+
rootType: types.Root,
|
|
87
|
+
normalizedVisitors: visitors_1.normalizeVisitors(preprocessors, types),
|
|
88
|
+
resolvedRefMap,
|
|
89
|
+
ctx,
|
|
90
|
+
});
|
|
91
|
+
resolvedRefMap = yield resolve_1.resolveDocument({
|
|
92
|
+
rootDocument: document,
|
|
93
|
+
rootType: types.Root,
|
|
94
|
+
externalRefResolver,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
82
97
|
const bundleVisitor = visitors_1.normalizeVisitors([
|
|
83
|
-
...preprocessors,
|
|
84
98
|
{
|
|
85
99
|
severity: 'error',
|
|
86
100
|
ruleId: 'bundler',
|
|
@@ -148,6 +162,7 @@ exports.mapTypeToComponent = mapTypeToComponent;
|
|
|
148
162
|
// function oas3Move
|
|
149
163
|
function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDocument, resolvedRefMap, keepUrlRefs) {
|
|
150
164
|
let components;
|
|
165
|
+
let rootLocation;
|
|
151
166
|
const visitor = {
|
|
152
167
|
ref: {
|
|
153
168
|
leave(node, ctx, resolved) {
|
|
@@ -185,7 +200,8 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
|
|
|
185
200
|
},
|
|
186
201
|
},
|
|
187
202
|
Root: {
|
|
188
|
-
enter(root) {
|
|
203
|
+
enter(root, ctx) {
|
|
204
|
+
rootLocation = ctx.location;
|
|
189
205
|
if (version === oas_types_1.OasMajorVersion.Version3) {
|
|
190
206
|
components = root.components = root.components || {};
|
|
191
207
|
}
|
|
@@ -253,7 +269,8 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
|
|
|
253
269
|
function isEqualOrEqualRef(node, target, ctx) {
|
|
254
270
|
var _a;
|
|
255
271
|
if (ref_utils_1.isRef(node) &&
|
|
256
|
-
((_a = ctx.resolve(node).location) === null || _a === void 0 ? void 0 : _a.absolutePointer) ===
|
|
272
|
+
((_a = ctx.resolve(node, rootLocation.absolutePointer).location) === null || _a === void 0 ? void 0 : _a.absolutePointer) ===
|
|
273
|
+
target.location.absolutePointer) {
|
|
257
274
|
return true;
|
|
258
275
|
}
|
|
259
276
|
return isEqual(node, target.node);
|
package/lib/config/all.js
CHANGED
|
@@ -75,6 +75,9 @@ function resolvePlugins(plugins, configPath = '') {
|
|
|
75
75
|
: require(absoltePluginPath);
|
|
76
76
|
}
|
|
77
77
|
catch (e) {
|
|
78
|
+
if (e instanceof SyntaxError) {
|
|
79
|
+
throw e;
|
|
80
|
+
}
|
|
78
81
|
throw new Error(`Failed to load plugin "${plugin}". Please provide a valid path`);
|
|
79
82
|
}
|
|
80
83
|
}
|
|
@@ -253,7 +256,10 @@ function groupStyleguideAssertionRules({ rules, plugins, }) {
|
|
|
253
256
|
// Collect assertion rules
|
|
254
257
|
const assertions = [];
|
|
255
258
|
for (const [ruleKey, rule] of Object.entries(rules)) {
|
|
256
|
-
|
|
259
|
+
// keep the old assert/ syntax as an alias
|
|
260
|
+
if ((ruleKey.startsWith('rule/') || ruleKey.startsWith('assert/')) &&
|
|
261
|
+
typeof rule === 'object' &&
|
|
262
|
+
rule !== null) {
|
|
257
263
|
const assertion = rule;
|
|
258
264
|
if (plugins) {
|
|
259
265
|
registerCustomAssertions(plugins, assertion);
|
|
@@ -262,7 +268,7 @@ function groupStyleguideAssertionRules({ rules, plugins, }) {
|
|
|
262
268
|
registerCustomAssertions(plugins, context);
|
|
263
269
|
}
|
|
264
270
|
}
|
|
265
|
-
assertions.push(Object.assign(Object.assign({}, assertion), { assertionId: ruleKey.replace(
|
|
271
|
+
assertions.push(Object.assign(Object.assign({}, assertion), { assertionId: ruleKey.replace(/rule\/|assert\//, '') }));
|
|
266
272
|
}
|
|
267
273
|
else {
|
|
268
274
|
// If it's not an assertion, keep it as is
|
package/lib/config/minimal.js
CHANGED
package/lib/config/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { ProblemSeverity, UserContext } from '../walk';
|
|
|
2
2
|
import type { Oas3PreprocessorsSet, OasMajorVersion, Oas3DecoratorsSet, Oas2RuleSet, Oas2PreprocessorsSet, Oas2DecoratorsSet, Oas3RuleSet, OasVersion } from '../oas-types';
|
|
3
3
|
import type { NodeType } from '../types';
|
|
4
4
|
import { Location } from '../ref-utils';
|
|
5
|
-
import { SkipFunctionContext } from '../visitors';
|
|
5
|
+
import type { SkipFunctionContext } from '../visitors';
|
|
6
6
|
export declare type RuleSeverity = ProblemSeverity | 'off';
|
|
7
7
|
export declare type RuleSettings = {
|
|
8
8
|
severity: RuleSeverity;
|
package/lib/config/utils.js
CHANGED
|
@@ -191,12 +191,26 @@ function transformConfig(rawConfig) {
|
|
|
191
191
|
}
|
|
192
192
|
const { apis, apiDefinitions, referenceDocs, lint } = rawConfig, rest = __rest(rawConfig, ["apis", "apiDefinitions", "referenceDocs", "lint"]);
|
|
193
193
|
const { styleguideConfig, rawConfigRest } = extractFlatConfig(rest);
|
|
194
|
-
|
|
194
|
+
const transformedConfig = Object.assign({ theme: {
|
|
195
195
|
openapi: Object.assign(Object.assign(Object.assign({}, referenceDocs), rawConfig['features.openapi']), (_a = rawConfig.theme) === null || _a === void 0 ? void 0 : _a.openapi),
|
|
196
196
|
mockServer: Object.assign(Object.assign({}, rawConfig['features.mockServer']), (_b = rawConfig.theme) === null || _b === void 0 ? void 0 : _b.mockServer),
|
|
197
197
|
}, apis: transformApis(apis) || transformApiDefinitionsToApis(apiDefinitions), styleguide: styleguideConfig || lint }, rawConfigRest);
|
|
198
|
+
showDeprecationMessages(transformedConfig);
|
|
199
|
+
return transformedConfig;
|
|
198
200
|
}
|
|
199
201
|
exports.transformConfig = transformConfig;
|
|
202
|
+
function showDeprecationMessages(config) {
|
|
203
|
+
var _a, _b;
|
|
204
|
+
let allRules = Object.assign({}, (_a = config.styleguide) === null || _a === void 0 ? void 0 : _a.rules);
|
|
205
|
+
for (const api of Object.values(config.apis || {})) {
|
|
206
|
+
allRules = Object.assign(Object.assign({}, allRules), (_b = api === null || api === void 0 ? void 0 : api.styleguide) === null || _b === void 0 ? void 0 : _b.rules);
|
|
207
|
+
}
|
|
208
|
+
for (const ruleKey of Object.keys(allRules)) {
|
|
209
|
+
if (ruleKey.startsWith('assert/')) {
|
|
210
|
+
logger_1.logger.warn(`\nThe 'assert/' syntax in ${ruleKey} is deprecated. Update your configuration to use 'rule/' instead. Examples and more information: https://redocly.com/docs/cli/rules/configurable-rules/\n`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
200
214
|
function getResolveConfig(resolve) {
|
|
201
215
|
var _a, _b;
|
|
202
216
|
return {
|
package/lib/lint.js
CHANGED
|
@@ -57,12 +57,27 @@ function lintDocument(opts) {
|
|
|
57
57
|
};
|
|
58
58
|
const preprocessors = config_1.initRules(rules, config, 'preprocessors', oasVersion);
|
|
59
59
|
const regularRules = config_1.initRules(rules, config, 'rules', oasVersion);
|
|
60
|
-
|
|
61
|
-
const resolvedRefMap = yield resolve_1.resolveDocument({
|
|
60
|
+
let resolvedRefMap = yield resolve_1.resolveDocument({
|
|
62
61
|
rootDocument: document,
|
|
63
62
|
rootType: types.Root,
|
|
64
63
|
externalRefResolver,
|
|
65
64
|
});
|
|
65
|
+
if (preprocessors.length > 0) {
|
|
66
|
+
// Make additional pass to resolve refs defined in preprocessors.
|
|
67
|
+
walk_1.walkDocument({
|
|
68
|
+
document,
|
|
69
|
+
rootType: types.Root,
|
|
70
|
+
normalizedVisitors: visitors_1.normalizeVisitors(preprocessors, types),
|
|
71
|
+
resolvedRefMap,
|
|
72
|
+
ctx,
|
|
73
|
+
});
|
|
74
|
+
resolvedRefMap = yield resolve_1.resolveDocument({
|
|
75
|
+
rootDocument: document,
|
|
76
|
+
rootType: types.Root,
|
|
77
|
+
externalRefResolver,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
const normalizedVisitors = visitors_1.normalizeVisitors(regularRules, types);
|
|
66
81
|
walk_1.walkDocument({
|
|
67
82
|
document,
|
|
68
83
|
rootType: types.Root,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SpecStrictRefs = void 0;
|
|
4
|
+
const ref_utils_1 = require("../../ref-utils");
|
|
5
|
+
const SpecStrictRefs = () => {
|
|
6
|
+
const nodesToSkip = [
|
|
7
|
+
'Schema',
|
|
8
|
+
'Response',
|
|
9
|
+
'Parameter',
|
|
10
|
+
'RequestBody',
|
|
11
|
+
'Example',
|
|
12
|
+
'Header',
|
|
13
|
+
'SecurityScheme',
|
|
14
|
+
'Link',
|
|
15
|
+
'Callback',
|
|
16
|
+
'PathItem',
|
|
17
|
+
];
|
|
18
|
+
return {
|
|
19
|
+
any(_node, { report, rawNode, rawLocation, type }) {
|
|
20
|
+
const shouldCheck = !nodesToSkip.includes(type.name);
|
|
21
|
+
if (shouldCheck && ref_utils_1.isRef(rawNode)) {
|
|
22
|
+
report({
|
|
23
|
+
message: 'Field $ref is not expected here.',
|
|
24
|
+
location: rawLocation.child('$ref').key(),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
exports.SpecStrictRefs = SpecStrictRefs;
|
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;
|
|
@@ -42,5 +42,6 @@ export declare const rules: {
|
|
|
42
42
|
'response-contains-property': Oas2Rule;
|
|
43
43
|
'scalar-property-missing-example': import("../../visitors").Oas3Rule | Oas2Rule;
|
|
44
44
|
'required-string-property-missing-min-length': import("../../visitors").Oas3Rule;
|
|
45
|
+
'spec-strict-refs': import("../../visitors").Oas3Rule | Oas2Rule;
|
|
45
46
|
};
|
|
46
47
|
export declare const preprocessors: {};
|
package/lib/rules/oas2/index.js
CHANGED
|
@@ -42,6 +42,7 @@ const response_contains_header_1 = require("../common/response-contains-header")
|
|
|
42
42
|
const response_contains_property_1 = require("./response-contains-property");
|
|
43
43
|
const scalar_property_missing_example_1 = require("../common/scalar-property-missing-example");
|
|
44
44
|
const required_string_property_missing_min_length_1 = require("../common/required-string-property-missing-min-length");
|
|
45
|
+
const spec_strict_refs_1 = require("../common/spec-strict-refs");
|
|
45
46
|
exports.rules = {
|
|
46
47
|
spec: spec_1.OasSpec,
|
|
47
48
|
'no-invalid-schema-examples': no_invalid_schema_examples_1.NoInvalidSchemaExamples,
|
|
@@ -85,5 +86,6 @@ exports.rules = {
|
|
|
85
86
|
'response-contains-property': response_contains_property_1.ResponseContainsProperty,
|
|
86
87
|
'scalar-property-missing-example': scalar_property_missing_example_1.ScalarPropertyMissingExample,
|
|
87
88
|
'required-string-property-missing-min-length': required_string_property_missing_min_length_1.RequiredStringPropertyMissingMinLength,
|
|
89
|
+
'spec-strict-refs': spec_strict_refs_1.SpecStrictRefs,
|
|
88
90
|
};
|
|
89
91
|
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
|
@@ -52,6 +52,7 @@ const scalar_property_missing_example_1 = require("../common/scalar-property-mis
|
|
|
52
52
|
const spec_components_invalid_map_name_1 = require("./spec-components-invalid-map-name");
|
|
53
53
|
const operation_4xx_problem_details_rfc7807_1 = require("./operation-4xx-problem-details-rfc7807");
|
|
54
54
|
const required_string_property_missing_min_length_1 = require("../common/required-string-property-missing-min-length");
|
|
55
|
+
const spec_strict_refs_1 = require("../common/spec-strict-refs");
|
|
55
56
|
exports.rules = {
|
|
56
57
|
spec: spec_1.OasSpec,
|
|
57
58
|
'info-contact': info_contact_1.InfoContact,
|
|
@@ -105,5 +106,6 @@ exports.rules = {
|
|
|
105
106
|
'scalar-property-missing-example': scalar_property_missing_example_1.ScalarPropertyMissingExample,
|
|
106
107
|
'spec-components-invalid-map-name': spec_components_invalid_map_name_1.SpecComponentsInvalidMapName,
|
|
107
108
|
'required-string-property-missing-min-length': required_string_property_missing_min_length_1.RequiredStringPropertyMissingMinLength,
|
|
109
|
+
'spec-strict-refs': spec_strict_refs_1.SpecStrictRefs,
|
|
108
110
|
};
|
|
109
111
|
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;
|
|
@@ -57,11 +57,6 @@ const SpecComponentsInvalidMapName = () => {
|
|
|
57
57
|
validateKey(key, report, location, 'callbacks');
|
|
58
58
|
},
|
|
59
59
|
},
|
|
60
|
-
ExampleMap: {
|
|
61
|
-
Example(_node, { key, report, location }) {
|
|
62
|
-
validateKey(key, report, location, 'examples');
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
60
|
};
|
|
66
61
|
};
|
|
67
62
|
exports.SpecComponentsInvalidMapName = SpecComponentsInvalidMapName;
|
|
@@ -56,6 +56,7 @@ const builtInRulesList = [
|
|
|
56
56
|
'scalar-property-missing-example',
|
|
57
57
|
'spec-components-invalid-map-name',
|
|
58
58
|
'required-string-property-missing-min-length',
|
|
59
|
+
'spec-strict-refs',
|
|
59
60
|
];
|
|
60
61
|
const nodeTypesList = [
|
|
61
62
|
'any',
|
|
@@ -196,7 +197,11 @@ const ConfigRootTheme = {
|
|
|
196
197
|
const Rules = {
|
|
197
198
|
properties: {},
|
|
198
199
|
additionalProperties: (value, key) => {
|
|
199
|
-
if (key.startsWith('
|
|
200
|
+
if (key.startsWith('rule/')) {
|
|
201
|
+
return 'Assert';
|
|
202
|
+
}
|
|
203
|
+
else if (key.startsWith('assert/')) {
|
|
204
|
+
// keep the old assert/ prefix as an alias
|
|
200
205
|
return 'Assert';
|
|
201
206
|
}
|
|
202
207
|
else if (builtInRulesList.includes(key) || utils_1.isCustomRuleId(key)) {
|
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,23 +248,21 @@ 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
|
-
const
|
|
257
|
+
const normalizedLocation = opts.location
|
|
262
258
|
? Array.isArray(opts.location)
|
|
263
259
|
? opts.location
|
|
264
260
|
: [opts.location]
|
|
265
261
|
: [Object.assign(Object.assign({}, currentLocation), { reportOnKey: false })];
|
|
262
|
+
const location = normalizedLocation.map((l) => (Object.assign(Object.assign(Object.assign({}, currentLocation), { reportOnKey: false }), l)));
|
|
266
263
|
const ruleSeverity = opts.forceSeverity || severity;
|
|
267
264
|
if (ruleSeverity !== 'off') {
|
|
268
|
-
ctx.problems.push(Object.assign(Object.assign({ ruleId: opts.ruleId || ruleId, severity: ruleSeverity }, opts), { suggest: opts.suggest || [], location
|
|
269
|
-
return Object.assign(Object.assign(Object.assign({}, currentLocation), { reportOnKey: false }), loc);
|
|
270
|
-
}) }));
|
|
265
|
+
ctx.problems.push(Object.assign(Object.assign({ ruleId: opts.ruleId || ruleId, severity: ruleSeverity }, opts), { suggest: opts.suggest || [], location }));
|
|
271
266
|
}
|
|
272
267
|
}
|
|
273
268
|
function getVisitorDataFn(ruleId) {
|
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
|
-
}
|