@redocly/openapi-core 1.18.1 → 1.20.0
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/CHANGELOG.md +22 -0
- package/__tests__/utils.ts +14 -7
- package/lib/benchmark/benches/lint-with-many-rules.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-many-rules.bench.js +7 -3
- package/lib/benchmark/benches/lint-with-nested-rule.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-nested-rule.bench.js +7 -3
- package/lib/benchmark/benches/lint-with-no-rules.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-no-rules.bench.js +7 -3
- package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +19 -15
- package/lib/benchmark/benches/lint-with-top-level-rule.bench.d.ts +1 -0
- package/lib/benchmark/benches/lint-with-top-level-rule.bench.js +18 -14
- package/lib/benchmark/benches/recommended-oas3.bench.js +2 -2
- package/lib/benchmark/benches/resolve-with-no-external.bench.js +2 -2
- package/lib/benchmark/utils.d.ts +3 -3
- package/lib/benchmark/utils.js +10 -7
- package/lib/bundle.d.ts +2 -2
- package/lib/bundle.js +127 -120
- package/lib/config/all.js +13 -1
- package/lib/config/builtIn.js +18 -17
- package/lib/config/config-resolvers.d.ts +1 -1
- package/lib/config/config-resolvers.js +241 -158
- package/lib/config/config.d.ts +4 -3
- package/lib/config/config.js +53 -34
- package/lib/config/load.d.ts +1 -1
- package/lib/config/load.js +105 -117
- package/lib/config/minimal.js +13 -0
- package/lib/config/recommended-strict.js +14 -1
- package/lib/config/recommended.js +14 -1
- package/lib/config/rules.d.ts +3 -3
- package/lib/config/rules.js +1 -2
- package/lib/config/types.d.ts +17 -4
- package/lib/config/utils.d.ts +3 -1
- package/lib/config/utils.js +78 -49
- package/lib/decorators/async3/index.d.ts +1 -0
- package/lib/decorators/async3/index.js +4 -0
- package/lib/decorators/common/filters/filter-helper.d.ts +1 -1
- package/lib/decorators/common/filters/filter-helper.js +2 -3
- package/lib/decorators/common/filters/filter-in.d.ts +1 -1
- package/lib/decorators/common/filters/filter-in.js +1 -1
- package/lib/decorators/common/filters/filter-out.d.ts +1 -1
- package/lib/decorators/common/filters/filter-out.js +1 -1
- package/lib/decorators/common/info-description-override.d.ts +1 -1
- package/lib/decorators/common/info-override.d.ts +1 -1
- package/lib/decorators/common/info-override.js +1 -12
- package/lib/decorators/common/media-type-examples-override.d.ts +1 -1
- package/lib/decorators/common/media-type-examples-override.js +8 -2
- package/lib/decorators/common/operation-description-override.d.ts +1 -1
- package/lib/decorators/common/registry-dependencies.d.ts +1 -1
- package/lib/decorators/common/remove-x-internal.d.ts +1 -1
- package/lib/decorators/common/remove-x-internal.js +4 -5
- package/lib/decorators/common/tag-description-override.d.ts +1 -1
- package/lib/decorators/oas2/index.d.ts +1 -1
- package/lib/decorators/oas2/remove-unused-components.js +1 -2
- package/lib/decorators/oas3/index.d.ts +1 -1
- package/lib/decorators/oas3/remove-unused-components.js +1 -2
- package/lib/env.d.ts +0 -1
- package/lib/env.js +1 -1
- package/lib/format/codeframes.d.ts +1 -1
- package/lib/format/codeframes.js +10 -8
- package/lib/format/format.d.ts +1 -1
- package/lib/format/format.js +24 -16
- package/lib/index.d.ts +2 -1
- package/lib/index.js +6 -4
- package/lib/js-yaml/index.d.ts +1 -1
- package/lib/js-yaml/index.js +1 -1
- package/lib/lint.d.ts +3 -1
- package/lib/lint.js +92 -99
- package/lib/logger.js +2 -2
- package/lib/oas-types.d.ts +9 -5
- package/lib/oas-types.js +22 -12
- package/lib/redocly/domains.d.ts +1 -1
- package/lib/redocly/domains.js +6 -6
- package/lib/redocly/index.d.ts +1 -1
- package/lib/redocly/index.js +60 -73
- package/lib/redocly/registry-api.js +64 -82
- package/lib/ref-utils.d.ts +2 -2
- package/lib/ref-utils.js +14 -13
- package/lib/resolve.d.ts +2 -2
- package/lib/resolve.js +186 -205
- package/lib/rules/ajv.d.ts +1 -1
- package/lib/rules/ajv.js +10 -8
- package/lib/rules/arazzo/index.js +2 -0
- package/lib/rules/async2/channels-kebab-case.d.ts +1 -1
- package/lib/rules/async2/index.js +2 -0
- package/lib/rules/async2/no-channel-trailing-slash.d.ts +1 -1
- package/lib/rules/async3/channels-kebab-case.d.ts +2 -0
- package/lib/rules/async3/channels-kebab-case.js +19 -0
- package/lib/rules/async3/index.d.ts +3 -0
- package/lib/rules/async3/index.js +24 -0
- package/lib/rules/async3/no-channel-trailing-slash.d.ts +2 -0
- package/lib/rules/async3/no-channel-trailing-slash.js +16 -0
- package/lib/rules/common/assertions/asserts.d.ts +2 -2
- package/lib/rules/common/assertions/asserts.js +5 -5
- package/lib/rules/common/assertions/index.d.ts +4 -4
- package/lib/rules/common/assertions/utils.d.ts +1 -1
- package/lib/rules/common/assertions/utils.js +43 -28
- package/lib/rules/common/info-contact.d.ts +1 -1
- package/lib/rules/common/info-license-strict.d.ts +2 -0
- package/lib/rules/common/info-license-strict.js +26 -0
- package/lib/rules/common/info-license-url.d.ts +1 -1
- package/lib/rules/common/info-license.d.ts +1 -1
- package/lib/rules/common/no-ambiguous-paths.d.ts +1 -1
- package/lib/rules/common/no-enum-type-mismatch.d.ts +1 -1
- package/lib/rules/common/no-http-verbs-in-paths.d.ts +1 -1
- package/lib/rules/common/no-identical-paths.d.ts +1 -1
- package/lib/rules/common/no-invalid-parameter-examples.js +1 -2
- package/lib/rules/common/no-invalid-schema-examples.js +1 -2
- package/lib/rules/common/no-path-trailing-slash.d.ts +1 -1
- package/lib/rules/common/no-required-schema-properties-undefined.d.ts +1 -1
- package/lib/rules/common/no-required-schema-properties-undefined.js +1 -2
- package/lib/rules/common/operation-2xx-response.d.ts +1 -1
- package/lib/rules/common/operation-4xx-response.d.ts +1 -1
- package/lib/rules/common/operation-description.d.ts +1 -1
- package/lib/rules/common/operation-operationId-unique.d.ts +1 -1
- package/lib/rules/common/operation-operationId-url-safe.d.ts +1 -1
- package/lib/rules/common/operation-operationId-url-safe.js +1 -0
- package/lib/rules/common/operation-operationId.d.ts +1 -1
- package/lib/rules/common/operation-parameters-unique.d.ts +1 -1
- package/lib/rules/common/operation-singular-tag.d.ts +1 -1
- package/lib/rules/common/operation-summary.d.ts +1 -1
- package/lib/rules/common/operation-tag-defined.d.ts +1 -1
- package/lib/rules/common/operation-tag-defined.js +1 -2
- package/lib/rules/common/parameter-description.d.ts +1 -1
- package/lib/rules/common/path-declaration-must-exist.d.ts +1 -1
- package/lib/rules/common/path-excludes-patterns.d.ts +1 -1
- package/lib/rules/common/path-http-verbs-order.d.ts +1 -1
- package/lib/rules/common/path-http-verbs-order.js +1 -1
- package/lib/rules/common/path-not-include-query.d.ts +1 -1
- package/lib/rules/common/path-params-defined.d.ts +1 -1
- package/lib/rules/common/path-segment-plural.d.ts +1 -1
- package/lib/rules/common/paths-kebab-case.d.ts +1 -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 +2 -2
- package/lib/rules/common/response-contains-header.d.ts +1 -1
- package/lib/rules/common/response-contains-header.js +2 -2
- package/lib/rules/common/security-defined.d.ts +1 -1
- package/lib/rules/common/security-defined.js +3 -7
- package/lib/rules/common/spec-strict-refs.d.ts +1 -1
- package/lib/rules/common/spec.d.ts +2 -2
- package/lib/rules/common/spec.js +6 -7
- package/lib/rules/common/tag-description.d.ts +1 -1
- package/lib/rules/common/tags-alphabetical.d.ts +1 -1
- package/lib/rules/no-unresolved-refs.d.ts +3 -3
- package/lib/rules/no-unresolved-refs.js +3 -4
- package/lib/rules/oas2/boolean-parameter-prefixes.d.ts +1 -1
- package/lib/rules/oas2/index.d.ts +1 -1
- package/lib/rules/oas2/index.js +2 -0
- package/lib/rules/oas2/response-contains-property.d.ts +1 -1
- package/lib/rules/oas2/response-contains-property.js +1 -2
- package/lib/rules/oas3/array-parameter-serialization.d.ts +1 -1
- package/lib/rules/oas3/array-parameter-serialization.js +1 -2
- package/lib/rules/oas3/boolean-parameter-prefixes.d.ts +1 -1
- package/lib/rules/oas3/component-name-unique.d.ts +1 -1
- package/lib/rules/oas3/component-name-unique.js +2 -4
- package/lib/rules/oas3/index.d.ts +1 -1
- package/lib/rules/oas3/index.js +2 -0
- package/lib/rules/oas3/no-empty-servers.d.ts +1 -1
- package/lib/rules/oas3/no-example-value-and-externalValue.d.ts +1 -1
- package/lib/rules/oas3/no-invalid-media-type-examples.d.ts +1 -1
- package/lib/rules/oas3/no-invalid-media-type-examples.js +1 -2
- package/lib/rules/oas3/no-server-example.com.d.ts +1 -1
- package/lib/rules/oas3/no-server-example.com.js +1 -0
- package/lib/rules/oas3/no-server-trailing-slash.d.ts +1 -1
- package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +1 -1
- package/lib/rules/oas3/no-server-variables-empty-enum.js +1 -2
- package/lib/rules/oas3/no-undefined-server-variable.d.ts +1 -1
- package/lib/rules/oas3/no-undefined-server-variable.js +2 -3
- package/lib/rules/oas3/no-unused-components.d.ts +1 -1
- package/lib/rules/oas3/no-unused-components.js +1 -2
- package/lib/rules/oas3/response-contains-property.d.ts +1 -1
- package/lib/rules/oas3/response-contains-property.js +1 -2
- package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +1 -1
- package/lib/rules/other/stats.d.ts +3 -3
- package/lib/rules/other/stats.js +5 -3
- package/lib/rules/spot/parameters-no-body-inside-in.d.ts +2 -0
- package/lib/rules/spot/parameters-no-body-inside-in.js +18 -0
- package/lib/rules/utils.d.ts +4 -2
- package/lib/rules/utils.js +41 -13
- package/lib/types/arazzo.d.ts +1 -2275
- package/lib/types/arazzo.js +246 -309
- package/lib/types/asyncapi2.d.ts +17 -0
- package/lib/types/{asyncapi.js → asyncapi2.js} +59 -53
- package/lib/types/asyncapi3.d.ts +2 -0
- package/lib/types/asyncapi3.js +347 -0
- package/lib/types/index.js +19 -10
- package/lib/types/json-schema-adapter.d.ts +1 -1
- package/lib/types/json-schema-adapter.js +4 -18
- package/lib/types/oas2.js +6 -6
- package/lib/types/oas3.d.ts +4 -0
- package/lib/types/oas3.js +19 -19
- package/lib/types/oas3_1.d.ts +3 -0
- package/lib/types/oas3_1.js +20 -14
- package/lib/types/redocly-yaml.d.ts +8 -6
- package/lib/types/redocly-yaml.js +135 -36
- package/lib/typings/arazzo.d.ts +145 -27
- package/lib/typings/asyncapi3.d.ts +53 -0
- package/lib/typings/asyncapi3.js +2 -0
- package/lib/typings/common.d.ts +1 -1
- package/lib/typings/swagger.d.ts +2 -2
- package/lib/utils.d.ts +4 -3
- package/lib/utils.js +55 -72
- package/lib/visitors.d.ts +29 -1
- package/lib/visitors.js +21 -8
- package/lib/walk.d.ts +3 -3
- package/lib/walk.js +30 -23
- package/package.json +3 -3
- package/src/__tests__/bundle.test.ts +144 -2
- package/src/__tests__/lint.test.ts +29 -21
- package/src/__tests__/walk.test.ts +25 -25
- package/src/benchmark/benches/lint-with-many-rules.bench.ts +7 -1
- package/src/benchmark/benches/lint-with-nested-rule.bench.ts +7 -1
- package/src/benchmark/benches/lint-with-no-rules.bench.ts +8 -1
- package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +18 -13
- package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +17 -11
- package/src/benchmark/fork.js +4 -0
- package/src/benchmark/utils.ts +6 -5
- package/src/bundle.ts +19 -4
- package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +32 -2
- package/src/config/__tests__/__snapshots__/config.test.ts.snap +24 -0
- package/src/config/__tests__/config-resolvers.test.ts +82 -0
- package/src/config/__tests__/config.test.ts +11 -0
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-commonjs-export-function.yaml +2 -0
- package/src/config/__tests__/fixtures/resolve-config/local-config-with-esm.yaml +2 -0
- package/src/config/__tests__/fixtures/resolve-config/plugin-esm.mjs +10 -0
- package/src/config/__tests__/fixtures/resolve-config/plugin-with-export-function.cjs +10 -0
- package/src/config/__tests__/resolve-plugins.test.ts +4 -1
- package/src/config/all.ts +13 -1
- package/src/config/builtIn.ts +9 -8
- package/src/config/config-resolvers.ts +92 -21
- package/src/config/config.ts +31 -13
- package/src/config/load.ts +2 -2
- package/src/config/minimal.ts +13 -0
- package/src/config/recommended-strict.ts +14 -1
- package/src/config/recommended.ts +14 -1
- package/src/config/rules.ts +12 -4
- package/src/config/types.ts +34 -5
- package/src/config/utils.ts +28 -2
- package/src/decorators/__tests__/filter-in.test.ts +29 -26
- package/src/decorators/__tests__/filter-out.test.ts +32 -23
- package/src/decorators/__tests__/media-type-examples-override.test.ts +45 -45
- package/src/decorators/__tests__/remove-x-internal.test.ts +8 -5
- package/src/decorators/async3/index.ts +1 -0
- package/src/decorators/common/filters/filter-helper.ts +2 -1
- package/src/decorators/common/filters/filter-in.ts +2 -1
- package/src/decorators/common/filters/filter-out.ts +2 -1
- package/src/decorators/common/info-description-override.ts +3 -2
- package/src/decorators/common/info-override.ts +1 -1
- package/src/decorators/common/media-type-examples-override.ts +4 -3
- package/src/decorators/common/operation-description-override.ts +5 -4
- package/src/decorators/common/registry-dependencies.ts +2 -2
- package/src/decorators/common/remove-x-internal.ts +5 -4
- package/src/decorators/common/tag-description-override.ts +3 -2
- package/src/decorators/oas2/__tests__/remove-unused-components.test.ts +3 -3
- package/src/decorators/oas2/index.ts +2 -1
- package/src/decorators/oas2/remove-unused-components.ts +1 -1
- package/src/decorators/oas3/__tests__/remove-unused-components.test.ts +4 -4
- package/src/decorators/oas3/index.ts +2 -1
- package/src/decorators/oas3/remove-unused-components.ts +1 -1
- package/src/format/codeframes.ts +2 -1
- package/src/format/format.ts +9 -4
- package/src/index.ts +2 -1
- package/src/js-yaml/index.ts +3 -1
- package/src/lint.ts +28 -4
- package/src/logger.ts +2 -2
- package/src/oas-types.ts +41 -22
- package/src/redocly/domains.ts +1 -1
- package/src/redocly/index.ts +3 -3
- package/src/redocly/registry-api.ts +5 -3
- package/src/ref-utils.ts +4 -2
- package/src/resolve.ts +6 -4
- package/src/rules/__tests__/no-unresolved-refs.test.ts +21 -7
- package/src/rules/ajv.ts +2 -1
- package/src/rules/arazzo/__tests__/parameters-no-body-inside-in.test.ts +76 -0
- package/src/rules/arazzo/index.ts +6 -3
- package/src/rules/async2/__tests__/channels-kebab-case.test.ts +9 -5
- package/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts +3 -3
- package/src/rules/async2/channels-kebab-case.ts +2 -2
- package/src/rules/async2/index.ts +9 -6
- package/src/rules/async2/no-channel-trailing-slash.ts +2 -2
- package/src/rules/async3/__tests__/channels-kebab-case.test.ts +145 -0
- package/src/rules/async3/__tests__/no-channel-trailing-slash.test.ts +96 -0
- package/src/rules/async3/channels-kebab-case.ts +19 -0
- package/src/rules/async3/index.ts +26 -0
- package/src/rules/async3/no-channel-trailing-slash.ts +16 -0
- package/src/rules/common/__tests__/info-license-strict.test.ts +141 -0
- package/src/rules/common/__tests__/info-license.test.ts +2 -2
- package/src/rules/common/__tests__/license-url.test.ts +2 -2
- package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +1 -1
- package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +5 -5
- package/src/rules/common/__tests__/no-identical-paths.test.ts +1 -1
- package/src/rules/common/__tests__/no-invalid-parameter-examples.test.ts +1 -1
- package/src/rules/common/__tests__/no-invalid-schema-examples.test.ts +1 -1
- package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +4 -4
- package/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts +11 -11
- package/src/rules/common/__tests__/operation-2xx-response.test.ts +8 -6
- package/src/rules/common/__tests__/operation-4xx-response.test.ts +9 -7
- package/src/rules/common/__tests__/operation-operationId-unique.test.ts +2 -2
- package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +1 -1
- package/src/rules/common/__tests__/operation-parameters-unique.test.ts +4 -4
- package/src/rules/common/__tests__/operation-singular-tag.test.ts +2 -2
- package/src/rules/common/__tests__/path-http-verbs-order.test.ts +2 -2
- package/src/rules/common/__tests__/path-not-include-query.test.ts +2 -2
- package/src/rules/common/__tests__/path-params-defined.test.ts +5 -5
- package/src/rules/common/__tests__/paths-kebab-case.test.ts +6 -4
- package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +8 -8
- package/src/rules/common/__tests__/security-defined.test.ts +14 -8
- package/src/rules/common/__tests__/spec-strict-refs.test.ts +1 -1
- package/src/rules/common/__tests__/spec.test.ts +10 -10
- package/src/rules/common/__tests__/tag-description.test.ts +2 -2
- package/src/rules/common/__tests__/tags-alphabetical.test.ts +6 -4
- package/src/rules/common/assertions/asserts.ts +5 -9
- package/src/rules/common/assertions/index.ts +12 -4
- package/src/rules/common/assertions/utils.ts +4 -2
- package/src/rules/common/info-contact.ts +2 -1
- package/src/rules/common/info-license-strict.ts +24 -0
- package/src/rules/common/info-license-url.ts +2 -1
- package/src/rules/common/info-license.ts +2 -1
- package/src/rules/common/no-ambiguous-paths.ts +4 -4
- package/src/rules/common/no-enum-type-mismatch.ts +5 -4
- package/src/rules/common/no-http-verbs-in-paths.ts +5 -4
- package/src/rules/common/no-identical-paths.ts +4 -4
- package/src/rules/common/no-invalid-parameter-examples.ts +3 -2
- package/src/rules/common/no-path-trailing-slash.ts +2 -2
- package/src/rules/common/no-required-schema-properties-undefined.ts +5 -4
- package/src/rules/common/operation-2xx-response.ts +3 -2
- package/src/rules/common/operation-4xx-response.ts +3 -2
- package/src/rules/common/operation-description.ts +5 -4
- package/src/rules/common/operation-operationId-unique.ts +4 -4
- package/src/rules/common/operation-operationId-url-safe.ts +5 -4
- package/src/rules/common/operation-operationId.ts +5 -4
- package/src/rules/common/operation-parameters-unique.ts +4 -4
- package/src/rules/common/operation-singular-tag.ts +4 -4
- package/src/rules/common/operation-summary.ts +5 -4
- package/src/rules/common/operation-tag-defined.ts +4 -4
- package/src/rules/common/parameter-description.ts +4 -4
- package/src/rules/common/path-declaration-must-exist.ts +2 -2
- package/src/rules/common/path-excludes-patterns.ts +4 -4
- package/src/rules/common/path-http-verbs-order.ts +4 -4
- package/src/rules/common/path-not-include-query.ts +2 -2
- package/src/rules/common/path-params-defined.ts +4 -4
- package/src/rules/common/path-segment-plural.ts +3 -2
- package/src/rules/common/paths-kebab-case.ts +2 -2
- package/src/rules/common/required-string-property-missing-min-length.ts +4 -4
- package/src/rules/common/response-contains-header.ts +5 -4
- package/src/rules/common/scalar-property-missing-example.ts +2 -1
- package/src/rules/common/security-defined.ts +5 -5
- package/src/rules/common/spec-strict-refs.ts +2 -1
- package/src/rules/common/spec.ts +4 -3
- package/src/rules/common/tag-description.ts +2 -1
- package/src/rules/common/tags-alphabetical.ts +4 -4
- package/src/rules/no-unresolved-refs.ts +4 -3
- package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +7 -5
- package/src/rules/oas2/__tests__/response-contains-header.test.ts +14 -8
- package/src/rules/oas2/__tests__/response-contains-property.test.ts +14 -8
- package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +3 -1
- package/src/rules/oas2/boolean-parameter-prefixes.ts +1 -1
- package/src/rules/oas2/index.ts +8 -6
- package/src/rules/oas2/request-mime-type.ts +2 -1
- package/src/rules/oas2/response-contains-property.ts +3 -2
- package/src/rules/oas2/response-mime-type.ts +2 -1
- package/src/rules/oas3/__tests__/array-parameter-serialization.test.ts +18 -6
- package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +7 -5
- package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +6 -6
- package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +2 -2
- package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +34 -24
- package/src/rules/oas3/__tests__/no-server-example.com.test.ts +3 -3
- package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +3 -3
- package/src/rules/oas3/__tests__/no-unused-components.test.ts +1 -1
- package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +3 -3
- package/src/rules/oas3/__tests__/response-contains-header.test.ts +34 -22
- package/src/rules/oas3/__tests__/response-contains-property.test.ts +34 -20
- package/src/rules/oas3/__tests__/spec/spec.test.ts +12 -3
- package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +9 -3
- package/src/rules/oas3/__tests__/utils/lint-document-for-test.ts +1 -1
- package/src/rules/oas3/array-parameter-serialization.ts +3 -2
- package/src/rules/oas3/boolean-parameter-prefixes.ts +1 -1
- package/src/rules/oas3/component-name-unique.ts +3 -3
- package/src/rules/oas3/index.ts +42 -38
- package/src/rules/oas3/no-empty-servers.ts +1 -1
- package/src/rules/oas3/no-example-value-and-externalValue.ts +1 -1
- package/src/rules/oas3/no-invalid-media-type-examples.ts +6 -4
- package/src/rules/oas3/no-server-example.com.ts +2 -1
- package/src/rules/oas3/no-server-trailing-slash.ts +1 -1
- package/src/rules/oas3/no-server-variables-empty-enum.ts +2 -2
- package/src/rules/oas3/no-undefined-server-variable.ts +1 -1
- package/src/rules/oas3/no-unused-components.ts +2 -2
- package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +2 -1
- package/src/rules/oas3/request-mime-type.ts +2 -1
- package/src/rules/oas3/response-contains-property.ts +3 -2
- package/src/rules/oas3/response-mime-type.ts +2 -1
- package/src/rules/oas3/spec-components-invalid-map-name.ts +3 -3
- package/src/rules/other/stats.ts +8 -6
- package/src/rules/spot/parameters-no-body-inside-in.ts +17 -0
- package/src/rules/utils.ts +41 -4
- package/src/types/arazzo.ts +257 -334
- package/src/types/{asyncapi.ts → asyncapi2.ts} +41 -35
- package/src/types/asyncapi3.ts +383 -0
- package/src/types/json-schema-adapter.ts +2 -2
- package/src/types/oas3.ts +4 -4
- package/src/types/oas3_1.ts +5 -4
- package/src/types/redocly-yaml.ts +21 -4
- package/src/typings/arazzo.ts +169 -41
- package/src/typings/asyncapi3.ts +61 -0
- package/src/typings/common.ts +1 -0
- package/src/typings/swagger.ts +2 -2
- package/src/utils.ts +5 -3
- package/src/visitors.ts +58 -1
- package/src/walk.ts +3 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/lib/types/asyncapi.d.ts +0 -2
|
@@ -164,7 +164,7 @@ describe('bundle', () => {
|
|
|
164
164
|
''
|
|
165
165
|
);
|
|
166
166
|
|
|
167
|
-
const config = await makeConfig({}, { 'registry-dependencies': 'on' });
|
|
167
|
+
const config = await makeConfig({ rules: {}, decorators: { 'registry-dependencies': 'on' } });
|
|
168
168
|
|
|
169
169
|
const {
|
|
170
170
|
bundle: result,
|
|
@@ -205,7 +205,7 @@ describe('bundle', () => {
|
|
|
205
205
|
''
|
|
206
206
|
);
|
|
207
207
|
|
|
208
|
-
const config = await makeConfig({});
|
|
208
|
+
const config = await makeConfig({ rules: {} });
|
|
209
209
|
|
|
210
210
|
const {
|
|
211
211
|
bundle: { parsed },
|
|
@@ -274,3 +274,145 @@ describe('bundleFromString', () => {
|
|
|
274
274
|
expect(rest.source.body).toEqual(stringDocument);
|
|
275
275
|
});
|
|
276
276
|
});
|
|
277
|
+
|
|
278
|
+
describe('bundle async', () => {
|
|
279
|
+
it('should bundle async of version 2.x', async () => {
|
|
280
|
+
const testDocument = parseYamlToDocument(
|
|
281
|
+
outdent`
|
|
282
|
+
asyncapi: '2.6.0'
|
|
283
|
+
info:
|
|
284
|
+
title: Account Service
|
|
285
|
+
version: 1.0.0
|
|
286
|
+
description: This service is in charge of processing user signups
|
|
287
|
+
channels:
|
|
288
|
+
user/signedup:
|
|
289
|
+
subscribe:
|
|
290
|
+
message:
|
|
291
|
+
$ref: '#/components/messages/UserSignedUp'
|
|
292
|
+
components:
|
|
293
|
+
schemas:
|
|
294
|
+
UserSignedUp:
|
|
295
|
+
type: object
|
|
296
|
+
properties:
|
|
297
|
+
displayName:
|
|
298
|
+
type: string
|
|
299
|
+
description: Name of the user
|
|
300
|
+
messages:
|
|
301
|
+
UserSignedUp:
|
|
302
|
+
payload:
|
|
303
|
+
$ref: '#/components/schemas/UserSignedUp'
|
|
304
|
+
`,
|
|
305
|
+
''
|
|
306
|
+
);
|
|
307
|
+
|
|
308
|
+
const config = await makeConfig({ rules: {} });
|
|
309
|
+
|
|
310
|
+
const {
|
|
311
|
+
bundle: { parsed },
|
|
312
|
+
problems,
|
|
313
|
+
} = await bundleDocument({
|
|
314
|
+
document: testDocument,
|
|
315
|
+
config: config,
|
|
316
|
+
externalRefResolver: new BaseResolver(),
|
|
317
|
+
dereference: true,
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
expect(problems).toHaveLength(0);
|
|
321
|
+
expect(parsed).toMatchInlineSnapshot(`
|
|
322
|
+
asyncapi: 2.6.0
|
|
323
|
+
info:
|
|
324
|
+
title: Account Service
|
|
325
|
+
version: 1.0.0
|
|
326
|
+
description: This service is in charge of processing user signups
|
|
327
|
+
channels:
|
|
328
|
+
user/signedup:
|
|
329
|
+
subscribe:
|
|
330
|
+
message:
|
|
331
|
+
payload: &ref_1
|
|
332
|
+
type: object
|
|
333
|
+
properties: &ref_0
|
|
334
|
+
displayName:
|
|
335
|
+
type: string
|
|
336
|
+
description: Name of the user
|
|
337
|
+
components:
|
|
338
|
+
schemas:
|
|
339
|
+
UserSignedUp:
|
|
340
|
+
type: object
|
|
341
|
+
properties: *ref_0
|
|
342
|
+
messages:
|
|
343
|
+
UserSignedUp:
|
|
344
|
+
payload: *ref_1
|
|
345
|
+
|
|
346
|
+
`);
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
it('should bundle async of version 3.0', async () => {
|
|
350
|
+
const testDocument = parseYamlToDocument(
|
|
351
|
+
outdent`
|
|
352
|
+
asyncapi: 3.0.0
|
|
353
|
+
info:
|
|
354
|
+
title: Account Service
|
|
355
|
+
version: 1.0.0
|
|
356
|
+
description: This service is in charge of processing user signups
|
|
357
|
+
operations:
|
|
358
|
+
sendUserSignedup:
|
|
359
|
+
action: send
|
|
360
|
+
messages:
|
|
361
|
+
- $ref: '#/components/messages/UserSignedUp'
|
|
362
|
+
components:
|
|
363
|
+
schemas:
|
|
364
|
+
UserSignedUp:
|
|
365
|
+
type: object
|
|
366
|
+
properties:
|
|
367
|
+
displayName:
|
|
368
|
+
type: string
|
|
369
|
+
description: Name of the user
|
|
370
|
+
messages:
|
|
371
|
+
UserSignedUp:
|
|
372
|
+
payload:
|
|
373
|
+
$ref: '#/components/schemas/UserSignedUp'
|
|
374
|
+
`,
|
|
375
|
+
''
|
|
376
|
+
);
|
|
377
|
+
|
|
378
|
+
const config = await makeConfig({ rules: {} });
|
|
379
|
+
|
|
380
|
+
const {
|
|
381
|
+
bundle: { parsed },
|
|
382
|
+
problems,
|
|
383
|
+
} = await bundleDocument({
|
|
384
|
+
document: testDocument,
|
|
385
|
+
config: config,
|
|
386
|
+
externalRefResolver: new BaseResolver(),
|
|
387
|
+
dereference: true,
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
expect(problems).toHaveLength(0);
|
|
391
|
+
expect(parsed).toMatchInlineSnapshot(`
|
|
392
|
+
asyncapi: 3.0.0
|
|
393
|
+
info:
|
|
394
|
+
title: Account Service
|
|
395
|
+
version: 1.0.0
|
|
396
|
+
description: This service is in charge of processing user signups
|
|
397
|
+
operations:
|
|
398
|
+
sendUserSignedup:
|
|
399
|
+
action: send
|
|
400
|
+
messages:
|
|
401
|
+
- payload: &ref_1
|
|
402
|
+
type: object
|
|
403
|
+
properties: &ref_0
|
|
404
|
+
displayName:
|
|
405
|
+
type: string
|
|
406
|
+
description: Name of the user
|
|
407
|
+
components:
|
|
408
|
+
schemas:
|
|
409
|
+
UserSignedUp:
|
|
410
|
+
type: object
|
|
411
|
+
properties: *ref_0
|
|
412
|
+
messages:
|
|
413
|
+
UserSignedUp:
|
|
414
|
+
payload: *ref_1
|
|
415
|
+
|
|
416
|
+
`);
|
|
417
|
+
});
|
|
418
|
+
});
|
|
@@ -127,7 +127,7 @@ const testPortalConfig = parseYamlToDocument(
|
|
|
127
127
|
# serviceAccountPrivateKey: Must be reported as a missing required prop
|
|
128
128
|
serviceAccountEmail: 789 # Must be a string
|
|
129
129
|
|
|
130
|
-
|
|
130
|
+
l10n:
|
|
131
131
|
defaultLocale: en-US
|
|
132
132
|
locales:
|
|
133
133
|
- code: 123 # Must be a string
|
|
@@ -201,18 +201,14 @@ const testPortalConfig = parseYamlToDocument(
|
|
|
201
201
|
graphql:
|
|
202
202
|
pagination: section
|
|
203
203
|
menu:
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
},
|
|
213
|
-
],
|
|
214
|
-
otherItemsGroupName: 'Other',
|
|
215
|
-
}
|
|
204
|
+
requireExactGroups: false
|
|
205
|
+
groups:
|
|
206
|
+
- name: 'GraphQL custom group'
|
|
207
|
+
directives:
|
|
208
|
+
includeByName:
|
|
209
|
+
- cacheControl
|
|
210
|
+
- typeDirective
|
|
211
|
+
otherItemsGroupName: 'Other'
|
|
216
212
|
sidebar:
|
|
217
213
|
separatorLine: true
|
|
218
214
|
linePosition: top
|
|
@@ -1048,7 +1044,7 @@ describe('lint', () => {
|
|
|
1048
1044
|
"from": undefined,
|
|
1049
1045
|
"location": [
|
|
1050
1046
|
{
|
|
1051
|
-
"pointer": "#/
|
|
1047
|
+
"pointer": "#/l10n/locales/0/code",
|
|
1052
1048
|
"reportOnKey": false,
|
|
1053
1049
|
"source": "",
|
|
1054
1050
|
},
|
|
@@ -1252,12 +1248,12 @@ describe('lint', () => {
|
|
|
1252
1248
|
"from": undefined,
|
|
1253
1249
|
"location": [
|
|
1254
1250
|
{
|
|
1255
|
-
"pointer": "#/
|
|
1251
|
+
"pointer": "#/l10n",
|
|
1256
1252
|
"reportOnKey": true,
|
|
1257
1253
|
"source": "",
|
|
1258
1254
|
},
|
|
1259
1255
|
],
|
|
1260
|
-
"message": "Property \`
|
|
1256
|
+
"message": "Property \`l10n\` is not expected here.",
|
|
1261
1257
|
"ruleId": "configuration spec",
|
|
1262
1258
|
"severity": "error",
|
|
1263
1259
|
"suggest": [],
|
|
@@ -1413,7 +1409,7 @@ describe('lint', () => {
|
|
|
1413
1409
|
const results = await lintDocument({
|
|
1414
1410
|
externalRefResolver: new BaseResolver(),
|
|
1415
1411
|
document,
|
|
1416
|
-
config: await makeConfig({ spec: 'error' }),
|
|
1412
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
1417
1413
|
});
|
|
1418
1414
|
|
|
1419
1415
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -1492,7 +1488,7 @@ describe('lint', () => {
|
|
|
1492
1488
|
const results = await lintDocument({
|
|
1493
1489
|
externalRefResolver: new BaseResolver(),
|
|
1494
1490
|
document,
|
|
1495
|
-
config: await makeConfig({ spec: 'error' }),
|
|
1491
|
+
config: await makeConfig({ rules: { spec: 'error' } }),
|
|
1496
1492
|
});
|
|
1497
1493
|
|
|
1498
1494
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -1528,7 +1524,11 @@ describe('lint', () => {
|
|
|
1528
1524
|
const result = await lintDocument({
|
|
1529
1525
|
externalRefResolver: new BaseResolver(),
|
|
1530
1526
|
document,
|
|
1531
|
-
config: await makeConfig({
|
|
1527
|
+
config: await makeConfig({
|
|
1528
|
+
rules: { 'operation-operationId': 'error' },
|
|
1529
|
+
decorators: undefined,
|
|
1530
|
+
configPath: configFilePath,
|
|
1531
|
+
}),
|
|
1532
1532
|
});
|
|
1533
1533
|
expect(result).toHaveLength(1);
|
|
1534
1534
|
expect(result).toMatchObject([
|
|
@@ -1590,7 +1590,11 @@ describe('lint', () => {
|
|
|
1590
1590
|
const results = await lintDocument({
|
|
1591
1591
|
externalRefResolver: new BaseResolver(),
|
|
1592
1592
|
document,
|
|
1593
|
-
config: await makeConfig({
|
|
1593
|
+
config: await makeConfig({
|
|
1594
|
+
rules: { spec: 'error' },
|
|
1595
|
+
decorators: undefined,
|
|
1596
|
+
configPath: configFilePath,
|
|
1597
|
+
}),
|
|
1594
1598
|
});
|
|
1595
1599
|
|
|
1596
1600
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
|
|
@@ -1662,7 +1666,11 @@ describe('lint', () => {
|
|
|
1662
1666
|
const results = await lintDocument({
|
|
1663
1667
|
externalRefResolver: new BaseResolver(),
|
|
1664
1668
|
document,
|
|
1665
|
-
config: await makeConfig({
|
|
1669
|
+
config: await makeConfig({
|
|
1670
|
+
rules: { spec: 'error' },
|
|
1671
|
+
decorators: undefined,
|
|
1672
|
+
configPath: configFilePath,
|
|
1673
|
+
}),
|
|
1666
1674
|
});
|
|
1667
1675
|
|
|
1668
1676
|
expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
|
|
@@ -53,7 +53,7 @@ describe('walk order', () => {
|
|
|
53
53
|
await lintDocument({
|
|
54
54
|
externalRefResolver: new BaseResolver(),
|
|
55
55
|
document,
|
|
56
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
56
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
57
57
|
});
|
|
58
58
|
|
|
59
59
|
expect(testRuleSet.test).toBeCalledTimes(1);
|
|
@@ -100,12 +100,12 @@ describe('walk order', () => {
|
|
|
100
100
|
const document = parseYamlToDocument(
|
|
101
101
|
outdent`
|
|
102
102
|
openapi: 3.0.0
|
|
103
|
-
servers:
|
|
103
|
+
servers:
|
|
104
104
|
- url: http://{test}.url
|
|
105
105
|
variables:
|
|
106
106
|
test: test
|
|
107
|
-
paths:
|
|
108
|
-
/test-path:
|
|
107
|
+
paths:
|
|
108
|
+
/test-path:
|
|
109
109
|
get:
|
|
110
110
|
responses:
|
|
111
111
|
200:
|
|
@@ -121,7 +121,7 @@ describe('walk order', () => {
|
|
|
121
121
|
await lintDocument({
|
|
122
122
|
externalRefResolver: new BaseResolver(),
|
|
123
123
|
document,
|
|
124
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
124
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
125
125
|
});
|
|
126
126
|
|
|
127
127
|
expect(testRuleSet.test).toBeCalledTimes(1);
|
|
@@ -184,7 +184,7 @@ describe('walk order', () => {
|
|
|
184
184
|
await lintDocument({
|
|
185
185
|
externalRefResolver: new BaseResolver(),
|
|
186
186
|
document,
|
|
187
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
187
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
188
188
|
});
|
|
189
189
|
|
|
190
190
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -264,7 +264,7 @@ describe('walk order', () => {
|
|
|
264
264
|
await lintDocument({
|
|
265
265
|
externalRefResolver: new BaseResolver(),
|
|
266
266
|
document,
|
|
267
|
-
config: makeConfigForRuleset(testRuleSet, undefined, 'oas2'),
|
|
267
|
+
config: await makeConfigForRuleset(testRuleSet, undefined, 'oas2'),
|
|
268
268
|
});
|
|
269
269
|
|
|
270
270
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -345,7 +345,7 @@ describe('walk order', () => {
|
|
|
345
345
|
await lintDocument({
|
|
346
346
|
externalRefResolver: new BaseResolver(),
|
|
347
347
|
document,
|
|
348
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
348
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
349
349
|
});
|
|
350
350
|
|
|
351
351
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -417,7 +417,7 @@ describe('walk order', () => {
|
|
|
417
417
|
await lintDocument({
|
|
418
418
|
externalRefResolver: new BaseResolver(),
|
|
419
419
|
document,
|
|
420
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
420
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
421
421
|
});
|
|
422
422
|
|
|
423
423
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -489,7 +489,7 @@ describe('walk order', () => {
|
|
|
489
489
|
await lintDocument({
|
|
490
490
|
externalRefResolver: new BaseResolver(),
|
|
491
491
|
document,
|
|
492
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
492
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
493
493
|
});
|
|
494
494
|
|
|
495
495
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -556,7 +556,7 @@ describe('walk order', () => {
|
|
|
556
556
|
await lintDocument({
|
|
557
557
|
externalRefResolver: new BaseResolver(),
|
|
558
558
|
document,
|
|
559
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
559
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
560
560
|
});
|
|
561
561
|
|
|
562
562
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -610,7 +610,7 @@ describe('walk order', () => {
|
|
|
610
610
|
await lintDocument({
|
|
611
611
|
externalRefResolver: new BaseResolver(),
|
|
612
612
|
document,
|
|
613
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
613
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
614
614
|
});
|
|
615
615
|
|
|
616
616
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -666,7 +666,7 @@ describe('walk order', () => {
|
|
|
666
666
|
await lintDocument({
|
|
667
667
|
externalRefResolver: new BaseResolver(),
|
|
668
668
|
document,
|
|
669
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
669
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
670
670
|
});
|
|
671
671
|
|
|
672
672
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -708,7 +708,7 @@ describe('walk order', () => {
|
|
|
708
708
|
await lintDocument({
|
|
709
709
|
externalRefResolver: new BaseResolver(),
|
|
710
710
|
document,
|
|
711
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
711
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
712
712
|
});
|
|
713
713
|
|
|
714
714
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -763,7 +763,7 @@ describe('walk order', () => {
|
|
|
763
763
|
await lintDocument({
|
|
764
764
|
externalRefResolver: new BaseResolver(),
|
|
765
765
|
document,
|
|
766
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
766
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
767
767
|
});
|
|
768
768
|
|
|
769
769
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -849,7 +849,7 @@ describe('walk order', () => {
|
|
|
849
849
|
await lintDocument({
|
|
850
850
|
externalRefResolver: new BaseResolver(),
|
|
851
851
|
document,
|
|
852
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
852
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
853
853
|
});
|
|
854
854
|
|
|
855
855
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -928,7 +928,7 @@ describe('walk order', () => {
|
|
|
928
928
|
await lintDocument({
|
|
929
929
|
externalRefResolver: new BaseResolver(),
|
|
930
930
|
document,
|
|
931
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
931
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
932
932
|
});
|
|
933
933
|
|
|
934
934
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -1000,7 +1000,7 @@ describe('walk order', () => {
|
|
|
1000
1000
|
await lintDocument({
|
|
1001
1001
|
externalRefResolver: new BaseResolver(),
|
|
1002
1002
|
document,
|
|
1003
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1003
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1004
1004
|
});
|
|
1005
1005
|
|
|
1006
1006
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -1044,7 +1044,7 @@ describe('walk order', () => {
|
|
|
1044
1044
|
await lintDocument({
|
|
1045
1045
|
externalRefResolver: new BaseResolver(),
|
|
1046
1046
|
document,
|
|
1047
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1047
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1048
1048
|
});
|
|
1049
1049
|
|
|
1050
1050
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -1109,7 +1109,7 @@ describe('walk order', () => {
|
|
|
1109
1109
|
await lintDocument({
|
|
1110
1110
|
externalRefResolver: new BaseResolver(),
|
|
1111
1111
|
document,
|
|
1112
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1112
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1113
1113
|
});
|
|
1114
1114
|
|
|
1115
1115
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -1197,7 +1197,7 @@ describe('context.report', () => {
|
|
|
1197
1197
|
const results = await lintDocument({
|
|
1198
1198
|
externalRefResolver: new BaseResolver(),
|
|
1199
1199
|
document,
|
|
1200
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1200
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1201
1201
|
});
|
|
1202
1202
|
|
|
1203
1203
|
expect(results).toHaveLength(3);
|
|
@@ -1277,7 +1277,7 @@ describe('context.report', () => {
|
|
|
1277
1277
|
const results = await lintDocument({
|
|
1278
1278
|
externalRefResolver: new BaseResolver(),
|
|
1279
1279
|
document,
|
|
1280
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1280
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1281
1281
|
});
|
|
1282
1282
|
|
|
1283
1283
|
expect(results).toHaveLength(4);
|
|
@@ -1385,7 +1385,7 @@ describe('context.resolve', () => {
|
|
|
1385
1385
|
await lintDocument({
|
|
1386
1386
|
externalRefResolver: new BaseResolver(),
|
|
1387
1387
|
document,
|
|
1388
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1388
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1389
1389
|
});
|
|
1390
1390
|
});
|
|
1391
1391
|
});
|
|
@@ -1434,7 +1434,7 @@ describe('type extensions', () => {
|
|
|
1434
1434
|
await lintDocument({
|
|
1435
1435
|
externalRefResolver: new BaseResolver(),
|
|
1436
1436
|
document,
|
|
1437
|
-
config: makeConfigForRuleset(testRuleSet, {
|
|
1437
|
+
config: await makeConfigForRuleset(testRuleSet, {
|
|
1438
1438
|
typeExtension: {
|
|
1439
1439
|
oas3(types, version) {
|
|
1440
1440
|
expect(version).toEqual(oas);
|
|
@@ -1528,7 +1528,7 @@ describe('ignoreNextRules', () => {
|
|
|
1528
1528
|
await lintDocument({
|
|
1529
1529
|
externalRefResolver: new BaseResolver(),
|
|
1530
1530
|
document,
|
|
1531
|
-
config: makeConfigForRuleset(testRuleSet),
|
|
1531
|
+
config: await makeConfigForRuleset(testRuleSet),
|
|
1532
1532
|
});
|
|
1533
1533
|
|
|
1534
1534
|
expect(calls).toMatchInlineSnapshot(`
|
|
@@ -4,6 +4,8 @@ import { lintDocument } from '../../lint';
|
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
6
|
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
7
9
|
export const name = 'Validate with 50 top-level rules';
|
|
8
10
|
export const count = 10;
|
|
9
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -25,7 +27,11 @@ for (let i = 0; i < 50; i++) {
|
|
|
25
27
|
};
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
let config: StyleguideConfig;
|
|
31
|
+
export async function setupAsync() {
|
|
32
|
+
config = await makeConfigForRuleset(ruleset);
|
|
33
|
+
}
|
|
34
|
+
|
|
29
35
|
export function measureAsync() {
|
|
30
36
|
return lintDocument({
|
|
31
37
|
externalRefResolver: new BaseResolver(),
|
|
@@ -4,6 +4,8 @@ import { lintDocument } from '../../lint';
|
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
6
|
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
7
9
|
export const name = 'Validate with single nested rule';
|
|
8
10
|
export const count = 10;
|
|
9
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -29,7 +31,11 @@ const visitor = {
|
|
|
29
31
|
};
|
|
30
32
|
},
|
|
31
33
|
};
|
|
32
|
-
|
|
34
|
+
let config: StyleguideConfig;
|
|
35
|
+
export async function setupAsync() {
|
|
36
|
+
config = await makeConfigForRuleset(visitor);
|
|
37
|
+
}
|
|
38
|
+
|
|
33
39
|
export function measureAsync() {
|
|
34
40
|
return lintDocument({
|
|
35
41
|
externalRefResolver: new BaseResolver(),
|
|
@@ -3,6 +3,9 @@ import { join as pathJoin, resolve as pathResolve } from 'path';
|
|
|
3
3
|
import { lintDocument } from '../../lint';
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
|
+
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
6
9
|
export const name = 'Validate with no rules';
|
|
7
10
|
export const count = 10;
|
|
8
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -10,7 +13,11 @@ const rebillyDocument = parseYamlToDocument(
|
|
|
10
13
|
readFileSync(rebillyDefinitionRef, 'utf-8'),
|
|
11
14
|
rebillyDefinitionRef
|
|
12
15
|
);
|
|
13
|
-
|
|
16
|
+
|
|
17
|
+
let config: StyleguideConfig;
|
|
18
|
+
export async function setupAsync() {
|
|
19
|
+
config = await makeConfigForRuleset({});
|
|
20
|
+
}
|
|
14
21
|
export function measureAsync() {
|
|
15
22
|
return lintDocument({
|
|
16
23
|
externalRefResolver: new BaseResolver(),
|
|
@@ -4,6 +4,8 @@ import { lintDocument } from '../../lint';
|
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
6
|
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
7
9
|
export const name = 'Validate with single top-level rule and report';
|
|
8
10
|
export const count = 10;
|
|
9
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -12,19 +14,22 @@ const rebillyDocument = parseYamlToDocument(
|
|
|
12
14
|
rebillyDefinitionRef
|
|
13
15
|
);
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
17
|
+
let config: StyleguideConfig;
|
|
18
|
+
export async function setupAsync() {
|
|
19
|
+
config = await makeConfigForRuleset({
|
|
20
|
+
test: () => {
|
|
21
|
+
return {
|
|
22
|
+
Schema(schema, ctx) {
|
|
23
|
+
if (schema.type === 'number') {
|
|
24
|
+
ctx.report({
|
|
25
|
+
message: 'type number is not allowed',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
28
33
|
|
|
29
34
|
export function measureAsync() {
|
|
30
35
|
return lintDocument({
|
|
@@ -3,6 +3,9 @@ import { join as pathJoin, resolve as pathResolve } from 'path';
|
|
|
3
3
|
import { lintDocument } from '../../lint';
|
|
4
4
|
import { BaseResolver } from '../../resolve';
|
|
5
5
|
import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
|
|
6
|
+
|
|
7
|
+
import type { StyleguideConfig } from '../../config';
|
|
8
|
+
|
|
6
9
|
export const name = 'Validate with single top-level rule';
|
|
7
10
|
export const count = 10;
|
|
8
11
|
const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
|
|
@@ -11,17 +14,20 @@ const rebillyDocument = parseYamlToDocument(
|
|
|
11
14
|
rebillyDefinitionRef
|
|
12
15
|
);
|
|
13
16
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
17
|
+
let config: StyleguideConfig;
|
|
18
|
+
export async function setupAsync() {
|
|
19
|
+
config = await makeConfigForRuleset({
|
|
20
|
+
test: () => {
|
|
21
|
+
let count = 0;
|
|
22
|
+
return {
|
|
23
|
+
Schema() {
|
|
24
|
+
count++;
|
|
25
|
+
if (count === -1) throw new Error('Disable optimization');
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
25
31
|
|
|
26
32
|
export function measureAsync() {
|
|
27
33
|
return lintDocument({
|
package/src/benchmark/fork.js
CHANGED
|
@@ -26,6 +26,10 @@ if (require.main === module) {
|
|
|
26
26
|
assert(process.send);
|
|
27
27
|
const module = require(modulePath);
|
|
28
28
|
|
|
29
|
+
if (module.setupAsync) {
|
|
30
|
+
await module.setupAsync();
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
if (module.measureAsync) {
|
|
30
34
|
async function run() {
|
|
31
35
|
await clockAsync(7, module.measureAsync); // warm up
|
package/src/benchmark/utils.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { parseYaml } from '../js-yaml';
|
|
2
|
-
import {
|
|
3
|
-
import { Oas3RuleSet } from '../oas-types';
|
|
2
|
+
import { Source } from '../resolve';
|
|
4
3
|
import { StyleguideConfig, mergeExtends, resolvePlugins } from '../config';
|
|
5
4
|
|
|
5
|
+
import type { Document } from '../resolve';
|
|
6
|
+
import type { Oas3RuleSet } from '../oas-types';
|
|
6
7
|
import type { RuleConfig, Plugin, ResolvedStyleguideConfig } from '../config/types';
|
|
7
8
|
|
|
8
9
|
export function parseYamlToDocument(body: string, absoluteRef: string = ''): Document {
|
|
@@ -12,20 +13,20 @@ export function parseYamlToDocument(body: string, absoluteRef: string = ''): Doc
|
|
|
12
13
|
};
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
export function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>) {
|
|
16
|
+
export async function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>) {
|
|
16
17
|
const rulesConf: Record<string, RuleConfig> = {};
|
|
17
18
|
const ruleId = 'test';
|
|
18
19
|
Object.keys(rules).forEach((name) => {
|
|
19
20
|
rulesConf[`${ruleId}/${name}`] = 'error';
|
|
20
21
|
});
|
|
21
22
|
const extendConfigs = [
|
|
22
|
-
resolvePlugins([
|
|
23
|
+
(await resolvePlugins([
|
|
23
24
|
{
|
|
24
25
|
...plugin,
|
|
25
26
|
id: ruleId,
|
|
26
27
|
rules: { oas3: rules },
|
|
27
28
|
},
|
|
28
|
-
]) as ResolvedStyleguideConfig,
|
|
29
|
+
])) as ResolvedStyleguideConfig,
|
|
29
30
|
];
|
|
30
31
|
if (rules) {
|
|
31
32
|
extendConfigs.push({ rules });
|