Repository: Redocly/redocly-cli
Pull request #1601 (2024-06-26 12:31:55)

feat: lint arazzo test descriptions
## What/Why/How?

Add Arazzo validation to the `lint` cli command.
Now it is possible to lint Arazzo description file by running `redocly lint museum.yaml`

## Reference

## Testing

## Screenshots (optional)

## Check yourself

- [ ] Code changed? - Tested with redoc/reference-docs/workflows (internal)
- [x] All new/updated code is covered with tests
- [ ] New package installed? - Tested in different environments (browser/node)

## Security

- [x] Security impact of change has been considered
- [x] Code follows company security practices and guidelines


changeset-bot[bot]: ###  ⚠️  No Changeset found

Latest commit: db382a9112c81a4a5d15843d631a620608edba8e

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. **If these changes should result in a version bump, you need to add a changeset.**

<details><summary>This PR includes no changesets</summary>

  When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

</details>

[Click here to learn what changesets are, and how to add one](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md).

[Click here if you're a maintainer who wants to add a changeset to this PR](https://github.com/Redocly/redocly-cli/new/feat/linting-arazzo-files?filename=.changeset/gorgeous-dryers-chew.md&value=---%0A%22%40redocly%2Fcli%22%3A%20patch%0A%22%40redocly%2Fopenapi-core%22%3A%20patch%0A---%0A%0Afeat%3A%20lint%20arazzo%20test%20descriptions%0A)


github-actions[bot]: | Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|:---|---:|---:|---:|---:|
| `redocly lint packages/core/src/benchmark/benches/rebilly.yaml` | 994.4 ± 24.3 | 963.6 | 1033.8 | 1.01 ± 0.03 |
| `redocly-next lint packages/core/src/benchmark/benches/rebilly.yaml` | 986.1 ± 19.9 | 943.9 | 1020.3 | 1.00 |

<!-- thollander/actions-comment-pull-request "latest-vs-next-comparison" -->
github-actions[bot]: <!-- jest coverage report action for options with hash 3339ae53a38c44382c0fb4491bdb282d -->

## Coverage report 

❌ An unexpected error occurred. For more details, [check console](https://github.com/Redocly/redocly-cli/actions/runs/9679737846) 
```
Error: The process '/opt/hostedtoolcache/node/20.14.0/x64/bin/npm' failed with exit code 1
```

| <div title="Status of coverage:&#10; 🟢 - ok&#10; 🟡 - slightly more than threshold&#10; 🔴 - under the threshold">St.<sup>:grey_question:</sup></div> | Category   | Percentage | Covered / Total |
| :----------------------------------------------------------------------------------------------------------------------------------------------------: | :--------- | :--------- | :-------------: |
|                                                                           🟡                                                                           | Statements | 77.31%     |    4536/5867    |
|                                                                           🟡                                                                           | Branches   | 67.67%     |    2493/3684    |
|                                                                           🟡                                                                           | Functions  | 70.92%     |     751/1059    |
|                                                                           🟡                                                                           | Lines      | 77.52%     |    4272/5511    |

<details><summary>Show new covered files 🐣</summary>
<br/>

| <div title="Status of coverage:&#10; 🟢 - ok&#10; 🟡 - slightly more than threshold&#10; 🔴 - under the threshold">St.<sup>:grey_question:</sup></div> | File                                                          | Statements | Branches | Functions | Lines |
| :----------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------ | :--------- | :------- | :-------- | :---- |
|                                                                           🟢                                                                           | <div title="core/src/types/arazzo.ts">`...` / arazzo.ts</div> | 100%       | 100%     | 100%      | 100%  |

</details>


<details><summary>Show files with reduced coverage 🔻</summary>
<br/>

| <div title="Status of coverage:&#10; 🟢 - ok&#10; 🟡 - slightly more than threshold&#10; 🔴 - under the threshold">St.<sup>:grey_question:</sup></div> | File                                                                       | Statements                                                    | Branches                                                        | Functions | Lines                                                          |
| :----------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------- | :------------------------------------------------------------ | :-------------------------------------------------------------- | :-------- | :------------------------------------------------------------- |
|                                                                           🟢                                                                           | core/src/index.ts                                                          | 100%                                                          | 100%                                                            | 8.93%     | 100%                                                           |
|                                                                           🟢                                                                           | <div title="core/src/oas-types.ts">`...` / oas-types.ts</div>              | <div title="Base coverage is: 97.5%">95.45% (-2.05% 🔻)</div> | <div title="Base coverage is: 93.33%">90.32% (-3.01% 🔻)</div>  | 100%      | <div title="Base coverage is: 97.5%">95.45% (-2.05% 🔻)</div>  |
|                                                                           🟡                                                                           | <div title="cli/src/utils/miscellaneous.ts">`...` / miscellaneous.ts</div> | 64.63%                                                        | 51.08%                                                          | 75.47%    | 64.05%                                                         |
|                                                                           🟢                                                                           | <div title="cli/src/commands/lint.ts">`...` / lint.ts</div>                | <div title="Base coverage is: 84.75%">80% (-4.75% 🔻)</div>   | <div title="Base coverage is: 64.71%">52.94% (-11.76% 🔻)</div> | 50%       | <div title="Base coverage is: 86.21%">81.36% (-4.85% 🔻)</div> |

</details>

## Test suite run failed

<details><summary>Failed tests: 279/750. Failed suites: 60/106.</summary>
<br/>

```
  ● Oas3 component-name-unique › schema › should report on multiple schemas with same name

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:42:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › schema › should report on multiple schemas with same name - filename

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:97:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › schema › should not report on multiple schemas with different names

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:153:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › parameter › should report if multiple parameters have same component name

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:200:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › parameter › should report on multiple parameters with same component name - filename

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:259:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › parameter › should not report on multiple parameters with different component names

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:322:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › response › should report if multiple responses have same component name

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:376:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › response › should report on multiple responses with same component name - filename

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:442:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › response › should not report on multiple responses with different component names

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:512:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › request-body › should report if multiple request bodies have same component name

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:563:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › request-body › should report on multiple responses with same component name - filename

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:630:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › request-body › should not report on multiple responses with different component names

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:697:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › different severities › should report both schema and request body

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:759:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

  ● Oas3 component-name-unique › different severities › should not report if severity is off for specific component type

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:802:34
      at fulfilled (packages/core/src/rules/oas3/__tests__/component-name-unique.test.ts:5:58)

```
---
```
  ● context.report › should report errors correctly

    expect(received).toHaveLength(expected)

    Matcher error: received value must have a length property whose value must be a number

    Received has type:  object
    Received has value: {"problems": [{"location": [{"pointer": "#/paths/~1pet/get/parameters/0", "reportOnKey": false, "source": {"absoluteRef": "foobar.yaml", "body": "openapi: 3.0.0
    info:
      contact: {}
      license: {}
    paths:
      /pet:
        parameters:
          - name: path-param
        get:
          operationId: get
          parameters:
            - name: get_a
            - name: get_b
        post:
          operationId: post
          parameters:
            - $ref: '#/components/parameters/shared_a'
    components:
      parameters:
        shared_a:
          name: shared_a", "mimeType": undefined}}], "message": "Parameter name shouldn't contain '_: get_a", "ruleId": "test/test", "severity": "error", "suggest": []}, {"location": [{"pointer": "#/paths/~1pet/get/parameters/1", "reportOnKey": false, "source": {"absoluteRef": "foobar.yaml", "body": "openapi: 3.0.0
    info:
      contact: {}
      license: {}
    paths:
      /pet:
        parameters:
          - name: path-param
        get:
          operationId: get
          parameters:
            - name: get_a
            - name: get_b
        post:
          operationId: post
          parameters:
            - $ref: '#/components/parameters/shared_a'
    components:
      parameters:
        shared_a:
          name: shared_a", "mimeType": undefined}}], "message": "Parameter name shouldn't contain '_: get_b", "ruleId": "test/test", "severity": "error", "suggest": []}, {"location": [{"pointer": "#/components/parameters/shared_a", "reportOnKey": false, "source": {"absoluteRef": "foobar.yaml", "body": "openapi: 3.0.0
    info:
      contact: {}
      license: {}
    paths:
      /pet:
        parameters:
          - name: path-param
        get:
          operationId: get
          parameters:
            - name: get_a
            - name: get_b
        post:
          operationId: post
          parameters:
            - $ref: '#/components/parameters/shared_a'
    components:
      parameters:
        shared_a:
          name: shared_a", "mimeType": undefined}}], "message": "Parameter name shouldn't contain '_: shared_a", "ruleId": "test/test", "severity": "error", "suggest": []}], "specVersion": "oas3_0"}

      1201 |     });
      1202 |
    > 1203 |     expect(results).toHaveLength(3);
           |                     ^
      1204 |     expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
      1205 |       [
      1206 |         {

      at packages/core/src/__tests__/walk.test.ts:1203:21
      at fulfilled (packages/core/src/__tests__/walk.test.ts:5:58)

  ● context.report › should report errors correctly

    expect(received).toHaveLength(expected)

    Matcher error: received value must have a length property whose value must be a number

    Received has type:  object
    Received has value: {"problems": [{"location": [{"pointer": "#/components/parameters/path-param", "reportOnKey": false, "source": {"absoluteRef": "/home/runner/work/redocly-cli/redocly-cli/packages/core/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml", "body": "openapi: 3.0.0
    paths:
      /pet:
        parameters:
          - $ref: '#/components/parameters/path-param'
        put:
          parameters:
            - $ref: '#/components/parameters/param-a'
            - $ref: ./param-b.yaml
            - name: test
        get:
          parameters:
            - $ref: '#/components/parameters/param-a'
            - $ref: ./param-c.yaml
        post:
          parameters:
            - $ref: '#/paths/~1pet/put/parameters/2'
    components:
      parameters:
        param-a:
          name: param_a
          schema:
            $ref: ./schema-a.yaml
          examples:
            first:
              $ref: ./examples.yaml#/param-a/first
            second:
              $ref: ./examples.yaml#/param-a/second
        path-param:
          name: path_param
          examples:
            first:
              $ref: ./examples.yaml#/path-param/first
    ", "mimeType": undefined}}], "message": "Parameter name shouldn't contain '_: path_param", "ruleId": "test/test", "severity": "error", "suggest": []}, {"location": [{"pointer": "#/components/parameters/param-a", "reportOnKey": false, "source": {"absoluteRef": "/home/runner/work/redocly-cli/redocly-cli/packages/core/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml", "body": "openapi: 3.0.0
    paths:
      /pet:
        parameters:
          - $ref: '#/components/parameters/path-param'
        put:
          parameters:
            - $ref: '#/components/parameters/param-a'
            - $ref: ./param-b.yaml
            - name: test
        get:
          parameters:
            - $ref: '#/components/parameters/param-a'
            - $ref: ./param-c.yaml
        post:
          parameters:
            - $ref: '#/paths/~1pet/put/parameters/2'
    components:
      parameters:
        param-a:
          name: param_a
          schema:
            $ref: ./schema-a.yaml
          examples:
            first:
              $ref: ./examples.yaml#/param-a/first
            second:
              $ref: ./examples.yaml#/param-a/second
        path-param:
          name: path_param
          examples:
            first:
              $ref: ./examples.yaml#/path-param/first
    ", "mimeType": undefined}}], "message": "Parameter name shouldn't contain '_: param_a", "ruleId": "test/test", "severity": "error", "suggest": []}, {"location": [{"pointer": "#/", "reportOnKey": false, "source": {"absoluteRef": "/home/runner/work/redocly-cli/redocly-cli/packages/core/src/__tests__/fixtures/refs/param-c.yaml", "body": "name: param_c
    ", "mimeType": undefined}}], "message": "Parameter name shouldn't contain '_: param_c", "ruleId": "test/test", "severity": "error", "suggest": []}, {"location": [{"pointer": "#/", "reportOnKey": false, "source": {"absoluteRef": "/home/runner/work/redocly-cli/redocly-cli/packages/core/src/__tests__/fixtures/refs/param-b.yaml", "body": "name: param_b
    ", "mimeType": undefined}}], "message": "Parameter name shouldn't contain '_: param_b", "ruleId": "test/test", "severity": "error", "suggest": []}], "specVersion": "oas3_0"}

      1281 |     });
      1282 |
    > 1283 |     expect(results).toHaveLength(4);
           |                     ^
      1284 |     expect(replaceSourceWithRef(results, cwd)).toMatchInlineSnapshot(`
      1285 |       [
      1286 |         {

      at packages/core/src/__tests__/walk.test.ts:1283:21
      at fulfilled (packages/core/src/__tests__/walk.test.ts:5:58)

```
---
```
  ● lint › lintFromString should work

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/__tests__/lint.test.ts:299:32
      at fulfilled (packages/core/src/__tests__/lint.test.ts:5:58)

  ● lint › lint should work

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/__tests__/lint.test.ts:327:32
      at fulfilled (packages/core/src/__tests__/lint.test.ts:5:58)

  ● lint › 'const' can have any type

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/__tests__/lint.test.ts:1469:32
      at fulfilled (packages/core/src/__tests__/lint.test.ts:5:58)

  ● lint › spec rule shouldn't throw an error for named callback

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/__tests__/lint.test.ts:1548:32
      at fulfilled (packages/core/src/__tests__/lint.test.ts:5:58)

  ● lint › should ignore error because ignore file passed

    expect(received).toHaveLength(expected)

    Matcher error: received value must have a length property whose value must be a number

    Received has type:  object
    Received has value: {"problems": [{"ignored": true, "location": [{"pointer": "#/paths/~1pets~1{petId}/post/operationId", "reportOnKey": true, "source": {"absoluteRef": "/home/runner/work/redocly-cli/redocly-cli/packages/core/src/__tests__/fixtures/openapi.yaml", "body": "openapi: 3.0.0
    info:
      version: 1.0.0
      title: Example OpenAPI 3 definition.
      description: Information about API
      license:
        name: MIT
        url: 'https://opensource.org/licenses/MIT'
    servers:
      - url: 'https://redocly.com/v1'
    paths:
      '/pets/{petId}':
        post:
          responses:
            '201':
              summary: Exist
              description: example description", "mimeType": undefined}}], "message": "Operation object should contain `operationId` field.", "ruleId": "operation-operationId", "severity": "error", "suggest": []}], "specVersion": "oas3_0"}

      1581 |       config: await makeConfig({ 'operation-operationId': 'error' }, undefined, configFilePath),
      1582 |     });
    > 1583 |     expect(result).toHaveLength(1);
           |                    ^
      1584 |     expect(result).toMatchObject([
      1585 |       {
      1586 |         ignored: true,

      at packages/core/src/__tests__/lint.test.ts:1583:20
      at fulfilled (packages/core/src/__tests__/lint.test.ts:5:58)

```
---
```
  ● no-invalid-media-type-examples › should report on invalid example

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:39:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should report on invalid example with allowAdditionalProperties

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:117:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should report on invalid example with a falsy value

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:169:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should not report on valid example with allowAdditionalProperties

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:229:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should not report on valid example with allowAdditionalProperties and allOf and $ref

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:278:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should not on invalid examples

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:328:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should not report if no examples

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:376:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should not report if no schema

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:408:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should work with cross-file $ref

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:443:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should not throw for ajv throw

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:471:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should not report if allOf used with discriminator

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:523:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should not report if only externalValue is set

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:557:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should not report if value is valid and externalValue is also set

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:594:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

  ● no-invalid-media-type-examples › should report invalid value when externalValue is also set

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:631:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts:5:58)

```
---
```
  ● no-required-schema-properties-undefined › should report if one or more of the required properties are undefined

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:36:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should report if one or more of the required properties are undefined, including allOf nested schemas

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:85:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should report if one or more of the required properties are undefined when used in schema with allOf keyword

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:140:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should not report required properties are present after resolving $refs when used in schema with allOf keyword

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:196:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should report with few messages if more than one of the required properties are undefined

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:229:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should not report if all of the required properties are present

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:292:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should not cause stack overflow when there are circular references in schemas

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:335:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should report if there is any required schema that is undefined, including checking nested allOf schemas

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:384:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should not report if required property is present in one of the nested reference schemas

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:453:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should report if one or more of the required properties are undefined when used in schema with anyOf keyword

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:492:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

  ● no-required-schema-properties-undefined › should report if one or more of the required properties are undefined when used in schema with allOf keyword

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:548:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts:5:58)

```
---
```
  ● Oas3 spec › should report missing schema property

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec.test.ts:31:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec.test.ts:5:58)

  ● Oas3 spec › should report with "referenced from"

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec.test.ts:91:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec.test.ts:5:58)

  ● Oas3 spec › should report on nullable without type

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec.test.ts:163:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec.test.ts:5:58)

  ● Oas3 spec › should report on nullable with type defined in allOf

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec.test.ts:237:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec.test.ts:5:58)

  ● Oas3 spec › should not report on SpecExtension with additionalProperties

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec.test.ts:328:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec.test.ts:5:58)

  ● Oas3.1 spec › should report with "type can be one of the following only"

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec.test.ts:390:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec.test.ts:5:58)

  ● Oas3.1 spec › should report with unknown type in type`s list

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec.test.ts:438:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec.test.ts:5:58)

  ● Oas3.1 spec › should report about `type: null` and not report `type: "null"`

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec.test.ts:492:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec.test.ts:5:58)

  ● Oas3.1 spec › should not report on SpecExtension with additionalProperties

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec.test.ts:563:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec.test.ts:5:58)

```
---
```
  ● Oas3 response-contains-property › should report a response object not containing the property

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-property should report a response object not containing the property 1`

    - Snapshot  - 18
    + Received  + 21

    @@ -1,14 +1,15 @@
    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1store~1subscribe/post/responses/201/content/application~1json/schema/properties",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.3
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1store~1subscribe/post/responses/201/content/application~1json/schema/properties",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.3
      info:
        version: 3.0.0
      paths:
        /store/subscribe:
          post:
    @@ -20,15 +21,17 @@
                      type: object
                      properties:
                        subscriptionId:
                          type: string
                          example: AAA-123-BBB-456",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a top-level "id" property.",
    -     "ruleId": "response-contains-property",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "Response object must contain a top-level "id" property.",
    +       "ruleId": "response-contains-property",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas3_0",
    + }

      34 |       }),
      35 |     });
    > 36 |     expect(results).toMatchInlineSnapshot(`
         |                     ^
      37 |       [
      38 |         {
      39 |           "location": [

      at packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:36:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:5:58)

  ● Oas3 response-contains-property › should report response objects not containing props for a subset of status codes

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-property should report response objects not containing props for a subset of status codes 1`

    - Snapshot  - 34
    + Received  + 37

    @@ -1,14 +1,15 @@
    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1store~1subscribe/post/responses/201/content/application~1json/schema/properties",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.3
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1store~1subscribe/post/responses/201/content/application~1json/schema/properties",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.3
      info:
        version: 3.0.0
      paths:
        /store/subscribe:
          post:
    @@ -29,27 +30,27 @@
                      type: object
                      properties:
                        status:
                          type: integer
                description: error",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a top-level "id" property.",
    -     "ruleId": "response-contains-property",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1store~1subscribe/post/responses/400/content/application~1json/schema/properties",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.3
    +       ],
    +       "message": "Response object must contain a top-level "id" property.",
    +       "ruleId": "response-contains-property",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1store~1subscribe/post/responses/400/content/application~1json/schema/properties",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.3
      info:
        version: 3.0.0
      paths:
        /store/subscribe:
          post:
    @@ -70,15 +71,17 @@
                      type: object
                      properties:
                        status:
                          type: integer
                description: error",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a top-level "error" property.",
    -     "ruleId": "response-contains-property",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "Response object must contain a top-level "error" property.",
    +       "ruleId": "response-contains-property",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas3_0",
    + }

      110 |       }),
      111 |     });
    > 112 |     expect(results).toMatchInlineSnapshot(`
          |                     ^
      113 |       [
      114 |         {
      115 |           "location": [

      at packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:112:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:5:58)

  ● Oas3 response-contains-property › should not report response objects containing specified properties

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-property should not report response objects containing specified properties 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas3_0",
    + }

      238 |       }),
      239 |     });
    > 240 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      241 |   });
      242 |
      243 |   it('should not report a response object when schema type is not object', async () => {

      at packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:240:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:5:58)

  ● Oas3 response-contains-property › should not report a response object when schema type is not object

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-property should not report a response object when schema type is not object 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas3_0",
    + }

      266 |       }),
      267 |     });
    > 268 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      269 |   });
      270 |
      271 |   it('should not report response objects when there is no `names` field specified', async () => {

      at packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:268:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:5:58)

  ● Oas3 response-contains-property › should not report response objects when there is no `names` field specified

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-property should not report response objects when there is no \`names\` field specified 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas3_0",
    + }

      306 |       }),
      307 |     });
    > 308 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      309 |   });
      310 |
      311 |   it('should not report response objects for 204 status code', async () => {

      at packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:308:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:5:58)

  ● Oas3 response-contains-property › should not report response objects for 204 status code

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-property should not report response objects for 204 status code 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas3_0",
    + }

      338 |       }),
      339 |     });
    > 340 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      341 |   });
      342 |
      343 |   it('should report response objects when there are no properties', async () => {

      at packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:340:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:5:58)

  ● Oas3 response-contains-property › should report response objects when there are no properties

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-property should report response objects when there are no properties 1`

    - Snapshot  - 18
    + Received  + 21

    @@ -1,14 +1,15 @@
    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1store~1subscribe/post/responses/200/content/application~1json/schema/properties",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.3
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1store~1subscribe/post/responses/200/content/application~1json/schema/properties",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.3
      info:
        version: 3.0.0
      paths:
        /store/subscribe:
          post:
    @@ -17,15 +18,17 @@
                content:
                  application/json:
                    schema:
                      type: object
                                      ",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a top-level "id" property.",
    -     "ruleId": "response-contains-property",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "Response object must contain a top-level "id" property.",
    +       "ruleId": "response-contains-property",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas3_0",
    + }

      367 |       }),
      368 |     });
    > 369 |     expect(results).toMatchInlineSnapshot(`
          |                     ^
      370 |       [
      371 |         {
      372 |           "location": [

      at packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:369:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-property.test.ts:5:58)

```
---
```
  ● Oas3 response-contains-header › should report a response object not containing the header

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-header should report a response object not containing the header 1`

    - Snapshot  - 18
    + Received  + 21

    @@ -1,14 +1,15 @@
    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1store~1subscribe/post/responses/200/headers",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.3
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1store~1subscribe/post/responses/200/headers",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.3
      info:
        version: 3.0.0
      paths:
        /store/subscribe:
          post:
    @@ -19,15 +20,17 @@
                  X-Rate-Limit:
                    description: calls per hour allowed by the user
                    schema:
                      type: integer
                      format: int32",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a "Content-Length" header.",
    -     "ruleId": "response-contains-header",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "Response object must contain a "Content-Length" header.",
    +       "ruleId": "response-contains-header",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas3_0",
    + }

      34 |       }),
      35 |     });
    > 36 |     expect(results).toMatchInlineSnapshot(`
         |                     ^
      37 |       [
      38 |         {
      39 |           "location": [

      at packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:36:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:5:58)

  ● Oas3 response-contains-header › should report response objects not containing headers for a subset of status codes

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-header should report response objects not containing headers for a subset of status codes 1`

    - Snapshot  - 34
    + Received  + 37

    @@ -1,14 +1,15 @@
    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1store~1subscribe/post/responses/200/headers",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.3
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1store~1subscribe/post/responses/200/headers",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.3
      info:
        version: 3.0.0
      paths:
        /store/subscribe:
          post:
    @@ -34,27 +35,27 @@
                            status:
                              type: integer
                              description: The HTTP status code.
                            error:
                              type: string",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a "x-request-id" header.",
    -     "ruleId": "response-contains-header",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1store~1subscribe/post/responses/400/headers",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.3
    +       ],
    +       "message": "Response object must contain a "x-request-id" header.",
    +       "ruleId": "response-contains-header",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1store~1subscribe/post/responses/400/headers",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.3
      info:
        version: 3.0.0
      paths:
        /store/subscribe:
          post:
    @@ -80,15 +81,17 @@
                            status:
                              type: integer
                              description: The HTTP status code.
                            error:
                              type: string",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a "Content-Length" header.",
    -     "ruleId": "response-contains-header",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "Response object must contain a "Content-Length" header.",
    +       "ruleId": "response-contains-header",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas3_0",
    + }

      117 |       }),
      118 |     });
    > 119 |     expect(results).toMatchInlineSnapshot(`
          |                     ^
      120 |       [
      121 |         {
      122 |           "location": [

      at packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:119:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:5:58)

  ● Oas3 response-contains-header › should not report response objects containing specified headers

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-header should not report response objects containing specified headers 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas3_0",
    + }

      269 |       }),
      270 |     });
    > 271 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      272 |   });
      273 |
      274 |   it('should not report response object containing header name upper cased', async () => {

      at packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:271:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:5:58)

  ● Oas3 response-contains-header › should not report response object containing header name upper cased

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-header should not report response object containing header name upper cased 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas3_0",
    + }

      301 |       }),
      302 |     });
    > 303 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      304 |   });
      305 |
      306 |   it('should not report response object containing header name in the rule upper cased', async () => {

      at packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:303:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:5:58)

  ● Oas3 response-contains-header › should not report response object containing header name in the rule upper cased

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-header should not report response object containing header name in the rule upper cased 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas3_0",
    + }

      333 |       }),
      334 |     });
    > 335 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      336 |   });
      337 |
      338 |   it('should report even if the response is null', async () => {

      at packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:335:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:5:58)

  ● Oas3 response-contains-header › should report even if the response is null

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 response-contains-header should report even if the response is null 1`

    - Snapshot  - 18
    + Received  + 21

    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1test~1/put/responses/200/headers",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "foobar.yaml",
    -           "body": "openapi: 3.0.0
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1test~1/put/responses/200/headers",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "foobar.yaml",
    +             "body": "openapi: 3.0.0
      paths:
        '/test/':
          put:
            responses: 
              '200': null",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a "X-Test-Header" header.",
    -     "ruleId": "response-contains-header",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "Response object must contain a "X-Test-Header" header.",
    +       "ruleId": "response-contains-header",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas3_0",
    + }

      360 |     });
      361 |
    > 362 |     expect(results).toMatchInlineSnapshot(`
          |                     ^
      363 |       [
      364 |         {
      365 |           "location": [

      at packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:362:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/response-contains-header.test.ts:5:58)

```
---
```
  ● OpenAPI Schema › should not report on valid Server Object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report on empty server URL

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report on missing server URL

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report on empty description field

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if description field is missing

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if fields type in servers are not array

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report on multiple servers

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if variables are used for a server configuration

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if array in enum is empty

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if some variable is not defined

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if default value is not provided in variables

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if default value in variables is empty

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if description in variable is not a string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if servers property is not provided

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if servers property is an empty array

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

```
---
```
  ● getMergedConfig › should get styleguide defined in "apis" section

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `getMergedConfig should get styleguide defined in "apis" section 1`

    - Snapshot  - 0
    + Received  + 5

    @@ -45,10 +45,11 @@
        "styleguide": StyleguideConfig {
          "_usedRules": Set {},
          "_usedVersions": Set {},
          "configFile": "redocly.yaml",
          "decorators": {
    +       "arazzo": {},
            "async2": {},
            "oas2": {},
            "oas3_0": {},
            "oas3_1": {},
          },
    @@ -56,10 +57,11 @@
          "extendPaths": [],
          "ignore": {},
          "pluginPaths": [],
          "plugins": [],
          "preprocessors": {
    +       "arazzo": {},
            "async2": {},
            "oas2": {},
            "oas3_0": {},
            "oas3_1": {},
          },
    @@ -70,10 +72,13 @@
              "operation-summary": "warn",
            },
          },
          "recommendedFallback": false,
          "rules": {
    +       "arazzo": {
    +         "operation-summary": "warn",
    +       },
            "async2": {
              "operation-summary": "warn",
            },
            "oas2": {
              "operation-summary": "warn",

      68 | describe('getMergedConfig', () => {
      69 |   it('should get styleguide defined in "apis" section', () => {
    > 70 |     expect(getMergedConfig(testConfig, 'test@v1')).toMatchInlineSnapshot(`
         |                                                    ^
      71 |       Config {
      72 |         "apis": {
      73 |           "test@v1": {

      at Object.<anonymous> (packages/core/src/config/__tests__/config.test.ts:70:52)

  ● getMergedConfig › should handle wrong alias - return the same styleguide, empty features

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `getMergedConfig should handle wrong alias - return the same styleguide, empty features 1`

    - Snapshot  - 0
    + Received  + 6

    @@ -47,10 +47,11 @@
        "styleguide": StyleguideConfig {
          "_usedRules": Set {},
          "_usedVersions": Set {},
          "configFile": "redocly.yaml",
          "decorators": {
    +       "arazzo": {},
            "async2": {},
            "oas2": {},
            "oas3_0": {},
            "oas3_1": {},
          },
    @@ -58,10 +59,11 @@
          "extendPaths": [],
          "ignore": {},
          "pluginPaths": [],
          "plugins": [],
          "preprocessors": {
    +       "arazzo": {},
            "async2": {},
            "oas2": {},
            "oas3_0": {},
            "oas3_1": {},
          },
    @@ -74,10 +76,14 @@
              "operation-summary": "error",
            },
          },
          "recommendedFallback": false,
          "rules": {
    +       "arazzo": {
    +         "no-empty-servers": "error",
    +         "operation-summary": "error",
    +       },
            "async2": {
              "no-empty-servers": "error",
              "operation-summary": "error",
            },
            "oas2": {

      171 |   });
      172 |   it('should handle wrong alias - return the same styleguide, empty features', () => {
    > 173 |     expect(getMergedConfig(testConfig, 'wrong-alias')).toMatchInlineSnapshot(`
          |                                                        ^
      174 |       Config {
      175 |         "apis": {
      176 |           "test@v1": {

      at Object.<anonymous> (packages/core/src/config/__tests__/config.test.ts:173:56)

  ● generation ignore object › should generate config with absoluteUri for ignore

    expect(received).toMatchSnapshot()

    Snapshot name: `generation ignore object should generate config with absoluteUri for ignore 1`

    - Snapshot  -  0
    + Received  + 24

    @@ -1,10 +1,15 @@
      StyleguideConfig {
        "_usedRules": Set {},
        "_usedVersions": Set {},
        "configFile": undefined,
        "decorators": {
    +     "arazzo": {
    +       "oas2": {},
    +       "oas3_0": {},
    +       "oas3_1": {},
    +     },
          "async2": {
            "oas2": {},
            "oas3_0": {},
            "oas3_1": {},
          },
    @@ -39,10 +44,15 @@
          },
        },
        "pluginPaths": [],
        "plugins": [],
        "preprocessors": {
    +     "arazzo": {
    +       "oas2": {},
    +       "oas3_0": {},
    +       "oas3_1": {},
    +     },
          "async2": {
            "oas2": {},
            "oas3_0": {},
            "oas3_1": {},
          },
    @@ -102,10 +112,24 @@
            },
          },
        },
        "recommendedFallback": false,
        "rules": {
    +     "arazzo": {
    +       "oas2": {
    +         "no-empty-servers": "error",
    +         "operation-summary": "error",
    +       },
    +       "oas3_0": {
    +         "no-empty-servers": "error",
    +         "operation-summary": "error",
    +       },
    +       "oas3_1": {
    +         "no-empty-servers": "error",
    +         "operation-summary": "error",
    +       },
    +     },
          "async2": {
            "oas2": {
              "no-empty-servers": "error",
              "operation-summary": "error",
            },

      319 |     const styleguideConfig = new StyleguideConfig(testConfig.styleguide);
      320 |
    > 321 |     expect(styleguideConfig).toMatchSnapshot();
          |                              ^
      322 |   });
      323 | });
      324 |

      at Object.<anonymous> (packages/core/src/config/__tests__/config.test.ts:321:30)

```
---
```
  ● OpenAPI Schema › should report if the title of the API is empty 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if in the description field is not string.

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if in the termsOfService field is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if the Contact Object is valid

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if in the Contact Object in URL field is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if in the Contact Object in email field is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if the License Object is valid

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if the License Object missing field Name

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if in the URL field of the License Object is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if the URL field of the License Object is not provided

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if the Version field is not provided

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if in the Version field is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

```
---
```
  ● Oas3 Structural visitor basic › should report wrong types

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/spec/spec.test.ts:47:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/spec.test.ts:5:58)

  ● Oas3 Structural visitor basic › should report unexpected properties

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/spec/spec.test.ts:181:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/spec.test.ts:5:58)

  ● Oas3 Structural visitor basic › should report required properties missing

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/spec/spec.test.ts:252:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/spec.test.ts:5:58)

```
---
```
  ● OpenAPI Schema 2.0 › should report if the title of the API is empty 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should report if in the description field is not string.

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should report if in the termsOfService field is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should not report if the Contact Object is valid

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should report if in the Contact Object in URL field is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should report if in the Contact Object in email field is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should not report if the License Object is valid

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should report if the License Object missing field Name

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should report if in the URL field of the License Object is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should not report if the URL field of the License Object is not provided

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should report if the Version field is not provided

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should report if in the Version field is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

```
---
```
  ● Oas3 spec-components-invalid-map-name › should report about invalid keys inside components

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 spec-components-invalid-map-name should report about invalid keys inside components 1`

    - Snapshot  - 66
    + Received  + 69

    @@ -1,14 +1,15 @@
    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/components/parameters/my Param",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.0
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/components/parameters/my Param",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.0
      info:
        version: 3.0.0
      components:
        parameters:
          my Param:
    @@ -24,27 +25,27 @@
            description: bad request   
        schemas: 
          first schema:
            type: integer
            format: int64     ",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "The map key in parameters "my Param" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    -     "ruleId": "spec-components-invalid-map-name",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/components/schemas/first schema",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.0
    +       ],
    +       "message": "The map key in parameters "my Param" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    +       "ruleId": "spec-components-invalid-map-name",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/components/schemas/first schema",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.0
      info:
        version: 3.0.0
      components:
        parameters:
          my Param:
    @@ -60,27 +61,27 @@
            description: bad request   
        schemas: 
          first schema:
            type: integer
            format: int64     ",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "The map key in schemas "first schema" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    -     "ruleId": "spec-components-invalid-map-name",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/components/responses/400 status",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.0
    +       ],
    +       "message": "The map key in schemas "first schema" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    +       "ruleId": "spec-components-invalid-map-name",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/components/responses/400 status",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.0
      info:
        version: 3.0.0
      components:
        parameters:
          my Param:
    @@ -96,27 +97,27 @@
            description: bad request   
        schemas: 
          first schema:
            type: integer
            format: int64     ",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "The map key in responses "400 status" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    -     "ruleId": "spec-components-invalid-map-name",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/components/examples/invalid identifier",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.0
    +       ],
    +       "message": "The map key in responses "400 status" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    +       "ruleId": "spec-components-invalid-map-name",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/components/examples/invalid identifier",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.0
      info:
        version: 3.0.0
      components:
        parameters:
          my Param:
    @@ -132,15 +133,17 @@
            description: bad request   
        schemas: 
          first schema:
            type: integer
            format: int64     ",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "The map key in examples "invalid identifier" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    -     "ruleId": "spec-components-invalid-map-name",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "The map key in examples "invalid identifier" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    +       "ruleId": "spec-components-invalid-map-name",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas3_0",
    + }

      36 |     });
      37 |
    > 38 |     expect(results).toMatchInlineSnapshot(`
         |                     ^
      39 |       [
      40 |         {
      41 |           "location": [

      at packages/core/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts:38:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts:5:58)

  ● Oas3 spec-components-invalid-map-name › should not report a key of the example does not match the regular expression

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 spec-components-invalid-map-name should not report a key of the example does not match the regular expression 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas3_0",
    + }

      213 |     });
      214 |
    > 215 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      216 |   });
      217 |
      218 |   it('should not report invalid keys inside nested examples', async () => {

      at packages/core/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts:215:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts:5:58)

  ● Oas3 spec-components-invalid-map-name › should not report invalid keys inside nested examples

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas3 spec-components-invalid-map-name should not report invalid keys inside nested examples 1`

    - Snapshot  - 18
    + Received  + 21

    @@ -1,14 +1,15 @@
    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/components/parameters/my Param",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "openapi: 3.0.0
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/components/parameters/my Param",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "openapi: 3.0.0
      info:
        version: 3.0.0
      components:
        parameters:
          my Param:
    @@ -17,15 +18,17 @@
            in: path
            examples:
              valid identifier:
                description: 'Some description'
                value: 21 ",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "The map key in parameters "my Param" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    -     "ruleId": "spec-components-invalid-map-name",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "The map key in parameters "my Param" does not match the regular expression "^[a-zA-Z0-9\.\-_]+$"",
    +       "ruleId": "spec-components-invalid-map-name",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas3_0",
    + }

      240 |     });
      241 |
    > 242 |     expect(results).toMatchInlineSnapshot(`
          |                     ^
      243 |       [
      244 |         {
      245 |           "location": [

      at packages/core/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts:242:21
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts:5:58)

```
---
```
  ● Oas3 security-defined › should report on securityRequirements object if security scheme is not defined in components

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/security-defined.test.ts:25:32
      at fulfilled (packages/core/src/rules/common/__tests__/security-defined.test.ts:5:58)

  ● Oas3 security-defined › should not report if security defined with an empty array

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/security-defined.test.ts:59:32
      at fulfilled (packages/core/src/rules/common/__tests__/security-defined.test.ts:5:58)

  ● Oas3 security-defined › should report if security not defined at all

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/security-defined.test.ts:79:32
      at fulfilled (packages/core/src/rules/common/__tests__/security-defined.test.ts:5:58)

  ● Oas3 security-defined › should report if security not defined for each operation

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/security-defined.test.ts:118:32
      at fulfilled (packages/core/src/rules/common/__tests__/security-defined.test.ts:5:58)

  ● Oas3 security-defined › should not report on securityRequirements object if security scheme is defined in components

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/security-defined.test.ts:173:32
      at fulfilled (packages/core/src/rules/common/__tests__/security-defined.test.ts:5:58)

  ● Oas3 security-defined › should not report if a pathItem is explicitly excluded in the option

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/security-defined.test.ts:197:32
      at fulfilled (packages/core/src/rules/common/__tests__/security-defined.test.ts:5:58)

  ● Oas3 security-defined › should report only those operations without security defined that are not excluded in the options

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/security-defined.test.ts:224:32
      at fulfilled (packages/core/src/rules/common/__tests__/security-defined.test.ts:5:58)

  ● Oas3 security-defined › should report operations from path items that are not excluded

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/security-defined.test.ts:260:32
      at fulfilled (packages/core/src/rules/common/__tests__/security-defined.test.ts:5:58)

```
---
```
  ● oas3 array-parameter-serialization › should report on array parameter without style and explode

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:36:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:5:58)

  ● oas3 array-parameter-serialization › should report on array parameter with style but without explode

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:79:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:5:58)

  ● oas3 array-parameter-serialization › should report on parameter without type but with items

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:132:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:5:58)

  ● oas3 array-parameter-serialization › should not report on array parameter with style and explode

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:176:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:5:58)

  ● oas3 array-parameter-serialization › should not report non-array parameter without style and explode

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:200:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:5:58)

  ● oas3 array-parameter-serialization › should report all array parameter without style and explode if property 'in' not defined 

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:232:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/array-parameter-serialization.test.ts:5:58)

```
---
```
  ● Oas3 scalar-property-missing-example › should report on a scalar property missing example

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:30:32
      at fulfilled (packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:5:58)

  ● Oas3.1 scalar-property-missing-example › should report on a scalar property missing example

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:74:32
      at fulfilled (packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:5:58)

  ● Oas3.1 scalar-property-missing-example › should not report on a scalar property with an example

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:117:32
      at fulfilled (packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:5:58)

  ● Oas3.1 scalar-property-missing-example › should not report on a scalar property with an examples

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:146:32
      at fulfilled (packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:5:58)

  ● Oas3.1 scalar-property-missing-example › should not report on a non-scalar property missing an example

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:180:32
      at fulfilled (packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:5:58)

  ● Oas3.1 scalar-property-missing-example › should not report on a scalar property of binary format missing an example

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:205:32
      at fulfilled (packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:5:58)

  ● Oas3.1 scalar-property-missing-example › should not report on a scalar property of falsy values

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:236:32
      at fulfilled (packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:5:58)

  ● Oas3.1 scalar-property-missing-example › should not report on a nullable scalar property values

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:262:32
      at fulfilled (packages/core/src/rules/common/__tests__/scalar-property-missing-example.test.ts:5:58)

```
---
```
  ● oas3 boolean-parameter-prefixes › should report on unresolved $ref

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:29:32
      at fulfilled (packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:5:58)

  ● oas3 boolean-parameter-prefixes › should report on unresolved $ref yaml error

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:69:32
      at fulfilled (packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:5:58)

  ● oas3 boolean-parameter-prefixes › should report on unresolved $ref yaml error

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:126:32
      at fulfilled (packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:5:58)

  ● oas3 boolean-parameter-prefixes › should report on unresolved localr ref

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:150:32
      at fulfilled (packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:5:58)

  ● oas3 boolean-parameter-prefixes › should not report on refs inside specification extensions

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:197:32
      at fulfilled (packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:5:58)

  ● oas3 boolean-parameter-prefixes › should not report on nested refs inside specification extensions

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:226:32
      at fulfilled (packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:5:58)

  ● oas3 boolean-parameter-prefixes › should not report on nested refs inside specification extensions for 3.1

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:255:32
      at fulfilled (packages/core/src/rules/__tests__/no-unresolved-refs.test.ts:5:58)

```
---
```
  ● handleLint › loop through entrypoints and lint stage › should call formatProblems and getExecutionTime with argv

    expect(jest.fn()).toHaveBeenCalledWith(...expected)

    Expected: ["problem"]
    Received: undefined

    Number of calls: 1

      130 |       (lint as jest.Mock<any, any>).mockResolvedValueOnce(['problem']);
      131 |       await commandWrapper(handleLint)({ ...argvMock, 'max-problems': 2, format: 'stylish' });
    > 132 |       expect(getTotals).toHaveBeenCalledWith(['problem']);
          |                         ^
      133 |       expect(formatProblems).toHaveBeenCalledWith(['problem'], {
      134 |         format: 'stylish',
      135 |         maxProblems: 2,

      at packages/cli/src/__tests__/commands/lint.test.ts:132:25
      at fulfilled (packages/cli/src/__tests__/commands/lint.test.ts:5:58)

  ● handleLint › erros and warning handle after lint stage › should exit with 1 if total errors > 0

    expect(jest.fn()).toHaveBeenCalledWith(...expected)

    Expected: 1
    Received: 0

    Number of calls: 1

      166 |       await commandWrapper(handleLint)(argvMock);
      167 |       await exitCb?.();
    > 168 |       expect(processExitMock).toHaveBeenCalledWith(1);
          |                               ^
      169 |     });
      170 |
      171 |     it('should use recommended fallback if no config', async () => {

      at packages/cli/src/__tests__/commands/lint.test.ts:168:31
      at fulfilled (packages/cli/src/__tests__/commands/lint.test.ts:5:58)

```
---
```
  ● Oas3 operation-4xx-response › should report missing 4xx response

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:27:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:5:58)

  ● Oas3 operation-4xx-response › should not report for present 400 response

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:66:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:5:58)

  ● Oas3 operation-4xx-response › should not report for present 4XX response

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:89:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:5:58)

  ● Oas3 operation-4xx-response › should report if default is present but missing 4xx response

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:112:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:5:58)

  ● Oas3 operation-4xx-response › should report even if the responses are null

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:149:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:5:58)

  ● Oas3 operation-4xx-response › should report missing 4xx response in webhooks when enabled

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:190:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:5:58)

  ● Oas3 operation-4xx-response › should not report missing 4xx response in webhooks when not enabled

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:229:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-4xx-response.test.ts:5:58)

```
---
```
  ● Oas3 typed enum › should not report on enum object if all items match type

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:35:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:5:58)

  ● Oas3 typed enum › should not report on enum object if all items match type and enum is nullable

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:68:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:5:58)

  ● Oas3 typed enum › should report on enum object if not all items match type

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:98:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:5:58)

  ● Oas3 typed enum › should report on enum object, 'string' value in enum does not have allowed types

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:146:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:5:58)

  ● Oas3 typed enum › should not crash on null schema when there is spec rule

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:191:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-enum-type-mismatch.test.ts:5:58)

```
---
```
  ● OpenAPI Schema › should not report if Path object is valid 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if Path object is empty 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if Path object is not present 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if Path object is empty 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if the field name is not begin with a forward slash (/) 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if paths are considered identical and invalid

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report valid matching URLs

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report in case of ambiguous matching 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if Path Item is empty 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report of a valid Parameter Object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

```
---
```
  ● Oas3 as3-no-server-variables-empty-enum › oas3-no-server-variables-empty-enum: should report on server object with empty enum and unknown enum value

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:30:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:5:58)

  ● Oas3 as3-no-server-variables-empty-enum › oas3-no-server-variables-empty-enum: should report on server object with empty enum

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:84:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:5:58)

  ● Oas3 as3-no-server-variables-empty-enum › oas3-no-server-variables-empty-enum: should be success because variables is empty object

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:123:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:5:58)

  ● Oas3 as3-no-server-variables-empty-enum › oas3-no-server-variables-empty-enum: should be success because variable is empty object

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:147:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:5:58)

  ● Oas3 as3-no-server-variables-empty-enum › oas3-no-server-variables-empty-enum: should be success because enum contains default value

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:174:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:5:58)

  ● Oas3 as3-no-server-variables-empty-enum › oas3-no-server-variables-empty-enum: should be success because enum contains default value

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:203:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts:5:58)

```
---
```
  ● Oas3 path-params-defined › should not report on defined params

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/path-params-defined.test.ts:30:32
      at fulfilled (packages/core/src/rules/common/__tests__/path-params-defined.test.ts:5:58)

  ● Oas3 path-params-defined › should report on undefined param params

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/path-params-defined.test.ts:58:32
      at fulfilled (packages/core/src/rules/common/__tests__/path-params-defined.test.ts:5:58)

  ● Oas3 path-params-defined › should report on undeclared param

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/path-params-defined.test.ts:102:32
      at fulfilled (packages/core/src/rules/common/__tests__/path-params-defined.test.ts:5:58)

  ● Oas3 path-params-defined › should fail cause POST has no parameters

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/path-params-defined.test.ts:156:32
      at fulfilled (packages/core/src/rules/common/__tests__/path-params-defined.test.ts:5:58)

  ● Oas3 path-params-defined › should apply parameters for POST operation from path parameters

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/path-params-defined.test.ts:200:32
      at fulfilled (packages/core/src/rules/common/__tests__/path-params-defined.test.ts:5:58)

```
---
```
  ● Oas2 response-contains-header › should report a response object not containing the header

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas2 response-contains-header should report a response object not containing the header 1`

    - Snapshot  - 34
    + Received  + 37

    @@ -1,14 +1,15 @@
    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1accounts~1{accountId}/get/responses/201/headers",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "swagger: '2.0'
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1accounts~1{accountId}/get/responses/201/headers",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "swagger: '2.0'
      schemes:
        - https
      basePath: /v2
      paths:
        '/accounts/{accountId}':
    @@ -22,27 +23,27 @@
                  Content-Location:
                    description: Location of created Account
                    type: string
              '404':
                description: User not found",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a "Content-Length" header.",
    -     "ruleId": "response-contains-header",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1accounts~1{accountId}/get/responses/404/headers",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "swagger: '2.0'
    +       ],
    +       "message": "Response object must contain a "Content-Length" header.",
    +       "ruleId": "response-contains-header",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1accounts~1{accountId}/get/responses/404/headers",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "swagger: '2.0'
      schemes:
        - https
      basePath: /v2
      paths:
        '/accounts/{accountId}':
    @@ -56,15 +57,17 @@
                  Content-Location:
                    description: Location of created Account
                    type: string
              '404':
                description: User not found",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a "Content-Length" header.",
    -     "ruleId": "response-contains-header",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "Response object must contain a "Content-Length" header.",
    +       "ruleId": "response-contains-header",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas2",
    + }

      36 |       }),
      37 |     });
    > 38 |     expect(results).toMatchInlineSnapshot(`
         |                     ^
      39 |       [
      40 |         {
      41 |           "location": [

      at packages/core/src/rules/oas2/__tests__/response-contains-header.test.ts:38:21
      at fulfilled (packages/core/src/rules/oas2/__tests__/response-contains-header.test.ts:5:58)

  ● Oas2 response-contains-header › should not report a response object containing the header nor not applicable

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas2 response-contains-header should not report a response object containing the header nor not applicable 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas2",
    + }

      143 |       }),
      144 |     });
    > 145 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      146 |   });
      147 |
      148 |   it('should not report a response object when there is no `names` section defined', async () => {

      at packages/core/src/rules/oas2/__tests__/response-contains-header.test.ts:145:21
      at fulfilled (packages/core/src/rules/oas2/__tests__/response-contains-header.test.ts:5:58)

  ● Oas2 response-contains-header › should not report a response object when there is no `names` section defined

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas2 response-contains-header should not report a response object when there is no \`names\` section defined 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas2",
    + }

      170 |       }),
      171 |     });
    > 172 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      173 |   });
      174 | });
      175 |

      at packages/core/src/rules/oas2/__tests__/response-contains-header.test.ts:172:21
      at fulfilled (packages/core/src/rules/oas2/__tests__/response-contains-header.test.ts:5:58)

```
---
```
  ● Oas3 operation-2xx-response › should report missing 2xx response

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:27:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:5:58)

  ● Oas3 operation-2xx-response › should not report for present 2xx response

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:66:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:5:58)

  ● Oas3 operation-2xx-response › should not report for present default

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:89:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:5:58)

  ● Oas3 operation-2xx-response › should report even if the responses are null

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:110:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:5:58)

  ● Oas3 operation-2xx-response › should report missing 2xx response in webhooks when enabled

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:151:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:5:58)

  ● Oas3 operation-2xx-response › should not report missing 2xx response in webhooks when not enabled

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:190:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-2xx-response.test.ts:5:58)

```
---
```
  ● OpenAPI Schema › should not report if Path object is valid 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if Path object is empty 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if Path object is not present 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if Path object is empty 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if the field name is not begin with a forward slash (/) 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should report if paths are considered identical and invalid

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report valid matching URLs

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report in case of ambiguous matching 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report if Path Item is empty 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema › should not report of a valid Parameter Object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

```
---
```
  ● should not report if summary field is valid

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● should report if summary field is not string 

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● should not report if description field is valid

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● should report if description field is not string

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● should not report of a valid GET operation object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● should not report of a valid PUT operation object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● should not report of a valid Post operation object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

  ● should not report of a valid delete operation object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

```
---
```
  ● Oas2 response-contains-property › should report a response object not containing the property

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas2 response-contains-property should report a response object not containing the property 1`

    - Snapshot  - 18
    + Received  + 21

    @@ -1,14 +1,15 @@
    - [
    -   {
    -     "location": [
    -       {
    -         "pointer": "#/paths/~1accounts~1{accountId}/get/responses/200/schema/properties",
    -         "reportOnKey": true,
    -         "source": Source {
    -           "absoluteRef": "",
    -           "body": "swagger: '2.0'
    + {
    +   "problems": [
    +     {
    +       "location": [
    +         {
    +           "pointer": "#/paths/~1accounts~1{accountId}/get/responses/200/schema/properties",
    +           "reportOnKey": true,
    +           "source": Source {
    +             "absoluteRef": "",
    +             "body": "swagger: '2.0'
      schemes:
        - https
      basePath: /v2
      paths:
        '/accounts/{accountId}':
    @@ -28,15 +29,17 @@
                    owner_email:
                      description: Account Owner email
                      type: string
              '404':
                description: User not found",
    -           "mimeType": undefined,
    +             "mimeType": undefined,
    +           },
              },
    -       },
    -     ],
    -     "message": "Response object must contain a top-level "id" property.",
    -     "ruleId": "response-contains-property",
    -     "severity": "error",
    -     "suggest": [],
    -   },
    - ]
    +       ],
    +       "message": "Response object must contain a top-level "id" property.",
    +       "ruleId": "response-contains-property",
    +       "severity": "error",
    +       "suggest": [],
    +     },
    +   ],
    +   "specVersion": "oas2",
    + }

      42 |       }),
      43 |     });
    > 44 |     expect(results).toMatchInlineSnapshot(`
         |                     ^
      45 |       [
      46 |         {
      47 |           "location": [

      at packages/core/src/rules/oas2/__tests__/response-contains-property.test.ts:44:21
      at fulfilled (packages/core/src/rules/oas2/__tests__/response-contains-property.test.ts:5:58)

  ● Oas2 response-contains-property › should not report a response object containing the expected property

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas2 response-contains-property should not report a response object containing the expected property 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas2",
    + }

      124 |       }),
      125 |     });
    > 126 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      127 |   });
      128 |
      129 |   it('should not report a response object when there is no `names` section defined', async () => {

      at packages/core/src/rules/oas2/__tests__/response-contains-property.test.ts:126:21
      at fulfilled (packages/core/src/rules/oas2/__tests__/response-contains-property.test.ts:5:58)

  ● Oas2 response-contains-property › should not report a response object when there is no `names` section defined

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `Oas2 response-contains-property should not report a response object when there is no \`names\` section defined 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas2",
    + }

      151 |       }),
      152 |     });
    > 153 |     expect(results).toMatchInlineSnapshot(`[]`);
          |                     ^
      154 |   });
      155 | });
      156 |

      at packages/core/src/rules/oas2/__tests__/response-contains-property.test.ts:153:21
      at fulfilled (packages/core/src/rules/oas2/__tests__/response-contains-property.test.ts:5:58)

```
---
```
  ● Oas3 operation-parameters-unique › should report on duplicated path params

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-parameters-unique.test.ts:28:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-parameters-unique.test.ts:5:58)

  ● Oas3 operation-parameters-unique › should not report when operation overwrites path param

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-parameters-unique.test.ts:71:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-parameters-unique.test.ts:5:58)

  ● Oas3 operation-parameters-unique › should report when operation with duplicated params

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-parameters-unique.test.ts:101:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-parameters-unique.test.ts:5:58)

  ● Oas3 operation-parameters-unique › should report when operation with duplicated params via $ref

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-parameters-unique.test.ts:149:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-parameters-unique.test.ts:5:58)

```
---
```
  ● Oas3 operation-4xx-problem-details-rfc7807 › should report `4xx` must have content type `application/problem+json` 

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts:37:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts:5:58)

  ● Oas3 operation-4xx-problem-details-rfc7807 › should report `application/problem+json` must have `type` property

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts:84:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts:5:58)

  ● Oas3 operation-4xx-problem-details-rfc7807 › should report `application/problem+json` must have `schema` property

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts:127:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts:5:58)

```
---
```
  ● ref-utils › should validate definition with urlencoded paths

    expect(received).toMatchInlineSnapshot(snapshot)

    Snapshot name: `ref-utils should validate definition with urlencoded paths 1`

    - Snapshot  - 1
    + Received  + 4

    - []
    + {
    +   "problems": [],
    +   "specVersion": "oas3_0",
    + }

      94 |     });
      95 |
    > 96 |     expect(result).toMatchInlineSnapshot(`[]`);
         |                    ^
      97 |   });
      98 |
      99 |   it('should parse a ref correctly', () => {

      at packages/core/src/__tests__/ref-utils.test.ts:96:20
      at fulfilled (packages/core/src/__tests__/ref-utils.test.ts:5:58)

```
---
```
  ● Oas3 no-unused-components › should report unused components

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-unused-components.test.ts:48:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-unused-components.test.ts:5:58)

```
---
```
  ● Async2 channels-kebab-case › should report on no kebab-case channel path

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/async2/__tests__/channels-kebab-case.test.ts:29:32
      at fulfilled (packages/core/src/rules/async2/__tests__/channels-kebab-case.test.ts:5:58)

  ● Async2 channels-kebab-case › should report on snake_case in channel path

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/async2/__tests__/channels-kebab-case.test.ts:70:32
      at fulfilled (packages/core/src/rules/async2/__tests__/channels-kebab-case.test.ts:5:58)

  ● Async2 channels-kebab-case › should allow trailing slash in channel path with "channels-kebab-case" rule

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/async2/__tests__/channels-kebab-case.test.ts:113:32
      at fulfilled (packages/core/src/rules/async2/__tests__/channels-kebab-case.test.ts:5:58)

  ● Async2 channels-kebab-case › words with hyphens are allowed with "channels-kebab-case" rule

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/async2/__tests__/channels-kebab-case.test.ts:139:32
      at fulfilled (packages/core/src/rules/async2/__tests__/channels-kebab-case.test.ts:5:58)

```
---
```
  ● no-path-trailing-slash › should report on trailing slash in path

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-path-trailing-slash.test.ts:25:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-path-trailing-slash.test.ts:5:58)

  ● no-path-trailing-slash › should report on trailing slash in path on key when referencing

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-path-trailing-slash.test.ts:66:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-path-trailing-slash.test.ts:5:58)

  ● no-path-trailing-slash › should not report on if no trailing slash in path

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-path-trailing-slash.test.ts:103:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-path-trailing-slash.test.ts:5:58)

  ● no-path-trailing-slash › should not report on trailing slash in path if the path is root

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-path-trailing-slash.test.ts:124:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-path-trailing-slash.test.ts:5:58)

```
---
```
  ● Oas3 tags-alphabetical › should report on tags object if not sorted alphabetically

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/tags-alphabetical.test.ts:25:32
      at fulfilled (packages/core/src/rules/common/__tests__/tags-alphabetical.test.ts:5:58)

  ● Oas3 tags-alphabetical › should not report on tags object if sorted alphabetically

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/tags-alphabetical.test.ts:62:32
      at fulfilled (packages/core/src/rules/common/__tests__/tags-alphabetical.test.ts:5:58)

  ● Oas3 tags-alphabetical › should report on tags object if not sorted alphabetically not ignoring case

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/tags-alphabetical.test.ts:83:32
      at fulfilled (packages/core/src/rules/common/__tests__/tags-alphabetical.test.ts:5:58)

  ● Oas3 tags-alphabetical › should not report on tags object if sorted alphabetically ignoring case

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/tags-alphabetical.test.ts:120:32
      at fulfilled (packages/core/src/rules/common/__tests__/tags-alphabetical.test.ts:5:58)

```
---
```
  ● oas3 boolean-parameter-prefixes › should report on boolean param without prefix

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts:28:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts:5:58)

  ● oas3 boolean-parameter-prefixes › should not report on boolean param with prefix

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts:80:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts:5:58)

  ● oas3 boolean-parameter-prefixes › should not report on boolean param with custom prefix

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts:109:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts:5:58)

```
---
```
  ● oas2 boolean-parameter-prefixes › should report on boolean param without prefix

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts:27:32
      at fulfilled (packages/core/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts:5:58)

  ● oas2 boolean-parameter-prefixes › should not report on boolean param with prefix

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts:79:32
      at fulfilled (packages/core/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts:5:58)

  ● oas2 boolean-parameter-prefixes › should not report on boolean param with custom prefix

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts:108:32
      at fulfilled (packages/core/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts:5:58)

```
---
```
  ● OpenAPI Schema 2.0 › should not report of a valid GET operation object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should not report of a valid PUT operation object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should not report of a valid Post operation object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

  ● OpenAPI Schema 2.0 › should not report of a valid delete operation object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas2/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/utils.ts:5:58)

```
---
```
  ● no-ambiguous-paths › should report on ambiguous paths

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-ambiguous-paths.test.ts:52:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-ambiguous-paths.test.ts:5:58)

```
---
```
  ● Oas3 paths-kebab-case › should report on no kebab-case path

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/paths-kebab-case.test.ts:28:32
      at fulfilled (packages/core/src/rules/common/__tests__/paths-kebab-case.test.ts:5:58)

  ● Oas3 paths-kebab-case › should report when snake_case is used

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/paths-kebab-case.test.ts:67:32
      at fulfilled (packages/core/src/rules/common/__tests__/paths-kebab-case.test.ts:5:58)

  ● Oas3 paths-kebab-case › should allow trailing slash in path with "paths-kebab-case" rule

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/paths-kebab-case.test.ts:106:32
      at fulfilled (packages/core/src/rules/common/__tests__/paths-kebab-case.test.ts:5:58)

```
---
```
  ● Oas3 oas3-no-server-example.com › oas3-no-server-example.com: should report on server object with "example.com" url

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-server-example.com.test.ts:23:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-server-example.com.test.ts:5:58)

  ● Oas3 oas3-no-server-example.com › oas3-no-server-example.com: should not report on server object with not "example.com" url

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-server-example.com.test.ts:58:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-server-example.com.test.ts:5:58)

  ● Oas3 oas3-no-server-example.com › oas3-no-server-example.com: should report on server object with "foo.example.com" url

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-server-example.com.test.ts:77:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-server-example.com.test.ts:5:58)

```
---
```
  ● no-channel-trailing-slash › should report on trailing slash in a channel path

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts:29:32
      at fulfilled (packages/core/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts:5:58)

  ● no-channel-trailing-slash › should not report on if no trailing slash in path

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts:70:32
      at fulfilled (packages/core/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts:5:58)

  ● no-channel-trailing-slash › should not report on trailing slash in path if the path is root

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts:95:32
      at fulfilled (packages/core/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts:5:58)

```
---
```
  ● Common path-http-verbs-order › should report on invalid order

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/path-http-verbs-order.test.ts:29:32
      at fulfilled (packages/core/src/rules/common/__tests__/path-http-verbs-order.test.ts:5:58)

  ● Common path-http-verbs-order › should not report valid order

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/path-http-verbs-order.test.ts:93:32
      at fulfilled (packages/core/src/rules/common/__tests__/path-http-verbs-order.test.ts:5:58)

```
---
```
  ● Oas3 oas3-no-server-trailing-slash › oas3-no-server-trailing-slash: should report on server object with trailing slash

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts:23:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts:5:58)

  ● Oas3 oas3-no-server-trailing-slash › oas3-no-server-trailing-slash: should not report on server object with no trailing slash

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts:58:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts:5:58)

  ● Oas3 oas3-no-server-trailing-slash › oas3-no-server-trailing-slash: should not report on server object with no trailing slash if the url is root

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts:77:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts:5:58)

```
---
```
  ● Oas3 operation-operationId-unique › should report on for non-unique opid

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-operationId-unique.test.ts:32:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-operationId-unique.test.ts:5:58)

  ● Oas3 operation-operationId-unique › should not report on operation object if only one tag

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-operationId-unique.test.ts:74:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-operationId-unique.test.ts:5:58)

```
---
```
  ● Referenceable scalars › should not report $ref description

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts:38:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts:5:58)

  ● Referenceable scalars › should not report invalid $ref on example with doNotResolveExamples

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts:75:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts:5:58)

```
---
```
  ● Oas3 spec-strict-refs › should report about invalid usage of $ref

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/spec-strict-refs.test.ts:38:32
      at fulfilled (packages/core/src/rules/common/__tests__/spec-strict-refs.test.ts:5:58)

```
---
```
  ● Oas3 oas3-no-example-value-and-externalValue › oas3-no-example-value-and-externalValue: should report on example object with both value and external value

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts:26:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts:5:58)

  ● Oas3 oas3-no-example-value-and-externalValue › oas3-no-example-value-and-externalValue: should not report on example object with value OR external value

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts:63:32
      at fulfilled (packages/core/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts:5:58)

```
---
```
  ● Oas3 operation-singular-tag › should report on operation object if more than one tag

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-singular-tag.test.ts:30:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-singular-tag.test.ts:5:58)

  ● Oas3 operation-singular-tag › should not report on operation object if only one tag

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-singular-tag.test.ts:70:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-singular-tag.test.ts:5:58)

```
---
```
  ● Oas3 tag-description › should report on tags with no description

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/tag-description.test.ts:25:32
      at fulfilled (packages/core/src/rules/common/__tests__/tag-description.test.ts:5:58)

  ● Oas3 tag-description › should not report on tags with description

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/tag-description.test.ts:63:32
      at fulfilled (packages/core/src/rules/common/__tests__/tag-description.test.ts:5:58)

```
---
```
  ● Oas3 path-not-include-query › should report on path object if query params in pathitem

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/path-not-include-query.test.ts:25:32
      at fulfilled (packages/core/src/rules/common/__tests__/path-not-include-query.test.ts:5:58)

  ● Oas3 path-not-include-query › should not report on path object if no query params in pathitem

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/path-not-include-query.test.ts:62:32
      at fulfilled (packages/core/src/rules/common/__tests__/path-not-include-query.test.ts:5:58)

```
---
```
  ● Oas3 license-url › should report on info.license with no url

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/license-url.test.ts:24:32
      at fulfilled (packages/core/src/rules/common/__tests__/license-url.test.ts:5:58)

  ● Oas3 license-url › should not report on info.license with url

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/license-url.test.ts:61:32
      at fulfilled (packages/core/src/rules/common/__tests__/license-url.test.ts:5:58)

```
---
```
  ● no-identical-paths › should report on identical paths

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-identical-paths.test.ts:40:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-identical-paths.test.ts:5:58)

```
---
```
  ● Oas3 info-license › should report on info with no license

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/info-license.test.ts:23:32
      at fulfilled (packages/core/src/rules/common/__tests__/info-license.test.ts:5:58)

  ● Oas3 info-license › should not report on info with license

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/info-license.test.ts:60:32
      at fulfilled (packages/core/src/rules/common/__tests__/info-license.test.ts:5:58)

```
---
```
  ● no-invalid-parameter-examples › should report on invalid falsy example

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-invalid-parameter-examples.test.ts:31:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-invalid-parameter-examples.test.ts:5:58)

```
---
```
  ● no-invalid-schema-examples › should report on invalid falsy example

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/no-invalid-schema-examples.test.ts:29:32
      at fulfilled (packages/core/src/rules/common/__tests__/no-invalid-schema-examples.test.ts:5:58)

```
---
```
  ● Oas3 operation-operationId-url-safe › should report on invalid operationIds

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/common/__tests__/operation-operationId-url-safe.test.ts:27:32
      at fulfilled (packages/core/src/rules/common/__tests__/operation-operationId-url-safe.test.ts:5:58)

```
---
```
  ● should not fail on valid callbacks object

    TypeError: results.map is not a function

      24 |   });
      25 |
    > 26 |   return results.map((res) => {
         |                  ^
      27 |     return {
      28 |       message: res.message,
      29 |       location: res.location[0].pointer || '',

      at packages/core/src/rules/oas3/__tests__/spec/utils.ts:26:18
      at fulfilled (packages/core/src/rules/oas3/__tests__/spec/utils.ts:5:58)

```
---
```
  ● Referenceable scalars › should not report $ref description

    TypeError: results.map is not a function

      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, ''),

      at replaceSourceWithRef (packages/core/__tests__/utils.ts:18:18)
      at packages/core/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts:33:32
      at fulfilled (packages/core/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts:5:58)

```

</details>


<p align="right">Report generated by <a href="https://github.com/ArtiomTr/jest-coverage-report-action">🧪jest coverage report action</a> from c0a709e1742e962cedfc324c44d1df7d414ad5bc</p>

DmitryAnansky: > It's a small thing, but we should also update the CLI help output to add arazzo to the lint command description.
> 
> Linting some of the Arazzo examples from the main project, I get some errors "The field `in` must be present on this level." but the entry looks like this:
> 
> ```
> workflowId: place-order
> parameters:
>   - name: pet_id
>     value: $steps.find-pet.outputs.my_pet_id
> ```
> 
> Looking at the [spec document for parameters](https://github.com/OAI/Arazzo-Specification/blob/main/versions/1.0.0.md#parameter-object), I think the "in" isn't required when it's a reference to something that's already in the scope of an Arazzo workflow.

Thanks Lorna,
We have a task for this issue => https://github.com/orgs/Redocly/projects/51/views/1?pane=issue&itemId=65948722
lornajane: We don't have support for references in step parameters (or I'm doing something wrong! Testing [the pet coupons example](https://github.com/OAI/Arazzo-Specification/blob/main/examples/1.0.0/pet-coupons.arazzo.yaml#L73) ), will we list that as not supported, or should we add it? https://github.com/OAI/Arazzo-Specification/blob/main/versions/1.0.0.md#step-object

Patch:
diff --git a/.changeset/green-worms-vanish.md b/.changeset/green-worms-vanish.md
new file mode 100644
index 00000000..4a713cd5
--- /dev/null
+++ b/.changeset/green-worms-vanish.md
@@ -0,0 +1,6 @@
+---
+"@redocly/openapi-core": minor
+"@redocly/cli": minor
+---
+
+Added support for Arazzo description linting.
diff --git a/docs/commands/lint.md b/docs/commands/lint.md
index 8cb882ac..55d9c4e2 100644
--- a/docs/commands/lint.md
+++ b/docs/commands/lint.md
@@ -2,7 +2,7 @@
 
 ## Introduction
 
-Redocly CLI can identify and report on problems found in OpenAPI descriptions. This helps you avoid bugs and make API descriptions more consistent.
+Redocly CLI can identify and report on problems found in OpenAPI or Arazzo descriptions. This helps you avoid bugs and make API or Arazzo descriptions more consistent.
 
 The `lint` command reports on problems and executes preprocessors and rules. Unlike the `bundle` command, `lint` doesn't execute decorators.
 
@@ -22,19 +22,19 @@ redocly lint --version
 
 ## Options
 
-| Option                 | Type     | Description                                                                                                                                                                                              |
-| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| apis                   | [string] | Array of API description filenames that need to be linted. Refer to [the API section](#specify-api) for more details.                                                                                    |
-| --config               | string   | Specify path to the [configuration file](#use-custom-configuration-file).                                                                                                                                |
-| --extends              | [string] | [Extend a specific configuration](#extend-configuration) (defaults or config file settings). **Possible values:** `minimal`, `recommended`, `recommended-strict`, `all`. Default value is `recommended`. |
-| --format               | string   | Format for the output.<br />**Possible values:** `codeframe`, `stylish`, `json`, `checkstyle`, `codeclimate`, `github-actions`, `markdown`, `summary`. Default value is `codeframe`.                     |
-| --generate-ignore-file | boolean  | [Generate ignore file](#generate-ignore-file).                                                                                                                                                           |
-| --help                 | boolean  | Show help.                                                                                                                                                                                               |
-| --lint-config          | string   | Specify the severity level for the configuration file. <br/> **Possible values:** `warn`, `error`, `off`. Default value is `warn`.                                                                       |
-| --max-problems         | integer  | Truncate output to display the specified [maximum number of problems](#limit-the-displayed-problems-count). Default value is `100`.                                                                      |
-| --skip-preprocessor    | [string] | Ignore certain preprocessors. See the [Skip preprocessor or rule section](#skip-preprocessor-or-rule) below.                                                                                             |
-| --skip-rule            | [string] | Ignore certain rules. See the [Skip preprocessor or rule section](#skip-preprocessor-or-rule) below.                                                                                                     |
-| --version              | boolean  | Show version number.                                                                                                                                                                                     |
+| Option                 | Type     | Description                                                                                                                                                                                         |
+| ---------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| apis                   | [string] | Array of API or Arazzo description filenames that need to be linted. See [the API section](#specify-api) for more options.                                                                          |
+| --config               | string   | Specify path to the [configuration file](#use-custom-configuration-file).                                                                                                                           |
+| --extends              | [string] | [Extend a specific configuration](#extend-configuration) (defaults or config file settings). Build-in rulesets are: `minimal`, `recommended`, `recommended-strict`. Default value is `recommended`. |
+| --format               | string   | Format for the output.<br />**Possible values:** `codeframe`, `stylish`, `json`, `checkstyle`, `codeclimate`, `github-actions`, `markdown`, `summary`. Default value is `codeframe`.                |
+| --generate-ignore-file | boolean  | [Generate ignore file](#generate-ignore-file).                                                                                                                                                      |
+| --help                 | boolean  | Show help.                                                                                                                                                                                          |
+| --lint-config          | string   | Specify the severity level for the configuration file. <br/> **Possible values:** `warn`, `error`, `off`. Default value is `warn`.                                                                  |
+| --max-problems         | integer  | Truncate output to display the specified [maximum number of problems](#limit-the-displayed-problems-count). Default value is 100.                                                                   |
+| --skip-preprocessor    | [string] | Ignore certain preprocessors. See the [Skip preprocessor or rule section](#skip-preprocessor-or-rule) below.                                                                                        |
+| --skip-rule            | [string] | Ignore certain rules. See the [Skip preprocessor or rule section](#skip-preprocessor-or-rule) below.                                                                                                |
+| --version              | boolean  | Show version number.                                                                                                                                                                                |
 
 ## Examples
 
@@ -48,7 +48,7 @@ The `lint` command behaves differently depending on how you pass the API(s) to i
 redocly lint openapi/openapi.yaml
 ```
 
-In this case, `lint` validates the API description(s) passed to the command. If you have no configuration file defined, the [recommended ruleset](../rules/recommended.md) is used. If you have `extends` or `rules` defined in `redocly.yaml`, then those are used when linting.
+In this case, `lint` validates the API or Arazzo description(s) passed to the command. If you have no configuration file defined, the [recommended ruleset](../rules/recommended.md) is used. If you have `extends` or `rules` defined in `redocly.yaml`, those are used when linting.
 
 The `apis` argument can also use any glob format supported by your file system. For example:
 
@@ -387,3 +387,9 @@ The `lint` command also validates the configuration file. You may want to set se
 ```bash
 redocly lint --lint-config=off
 ```
+
+### Lint Arazzo description file
+
+The `lint` command also validates [The Arazzo](https://spec.openapis.org/arazzo/latest.html) description files. You can pass the Arazzo description file to the `lint` command as shown below:
+
+`redocly lint arazzo.yaml`
diff --git a/package-lock.json b/package-lock.json
index fde60ce7..474e6aa3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8911,14 +8911,13 @@
       }
     },
     "node_modules/json-schema-to-ts": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.0.0.tgz",
-      "integrity": "sha512-2adDesYifYEXYxNySx3gG0RR69rDWIjqAFzK/JPXdOvjHLZ/UP6d2rkpy6a+AxyhtRp2SvFPZ4+EW36jBinUbA==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.0.tgz",
+      "integrity": "sha512-UeVN/ery4/JeXI8h4rM8yZPxsH+KqPi/84qFxHfTGHZnWnK9D0UU9ZGYO+6XAaJLqCWMiks+ARuFOKAiSxJCHA==",
       "dev": true,
       "dependencies": {
         "@babel/runtime": "^7.18.3",
-        "@types/json-schema": "^7.0.9",
-        "ts-algebra": "^1.2.2"
+        "ts-algebra": "^2.0.0"
       },
       "engines": {
         "node": ">=16"
@@ -12363,9 +12362,9 @@
       }
     },
     "node_modules/ts-algebra": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-1.2.2.tgz",
-      "integrity": "sha512-kloPhf1hq3JbCPOTYoOWDKxebWjNb2o/LKnNfkWhxVVisFFmMJPPdJeGoGmM+iRLyoXAR61e08Pb+vUXINg8aA==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz",
+      "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==",
       "dev": true
     },
     "node_modules/ts-api-utils": {
@@ -13571,6 +13570,7 @@
         "@types/node": "^20.11.5",
         "@types/node-fetch": "^2.5.7",
         "@types/pluralize": "^0.0.29",
+        "json-schema-to-ts": "^3.1.0",
         "typescript": "^5.2.2"
       },
       "engines": {
@@ -16271,6 +16271,7 @@
         "https-proxy-agent": "^7.0.4",
         "js-levenshtein": "^1.1.6",
         "js-yaml": "^4.1.0",
+        "json-schema-to-ts": "^3.1.0",
         "lodash.isequal": "^4.5.0",
         "minimatch": "^5.0.1",
         "node-fetch": "^2.6.1",
@@ -20357,14 +20358,13 @@
       }
     },
     "json-schema-to-ts": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.0.0.tgz",
-      "integrity": "sha512-2adDesYifYEXYxNySx3gG0RR69rDWIjqAFzK/JPXdOvjHLZ/UP6d2rkpy6a+AxyhtRp2SvFPZ4+EW36jBinUbA==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.0.tgz",
+      "integrity": "sha512-UeVN/ery4/JeXI8h4rM8yZPxsH+KqPi/84qFxHfTGHZnWnK9D0UU9ZGYO+6XAaJLqCWMiks+ARuFOKAiSxJCHA==",
       "dev": true,
       "requires": {
         "@babel/runtime": "^7.18.3",
-        "@types/json-schema": "^7.0.9",
-        "ts-algebra": "^1.2.2"
+        "ts-algebra": "^2.0.0"
       }
     },
     "json-schema-traverse": {
@@ -22909,9 +22909,9 @@
       "dev": true
     },
     "ts-algebra": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-1.2.2.tgz",
-      "integrity": "sha512-kloPhf1hq3JbCPOTYoOWDKxebWjNb2o/LKnNfkWhxVVisFFmMJPPdJeGoGmM+iRLyoXAR61e08Pb+vUXINg8aA==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz",
+      "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==",
       "dev": true
     },
     "ts-api-utils": {
diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts
index a3e5b2fe..4e847b57 100644
--- a/packages/cli/src/index.ts
+++ b/packages/cli/src/index.ts
@@ -396,7 +396,7 @@ yargs
   )
   .command(
     'lint [apis...]',
-    'Lint an API description.',
+    'Lint an API or Arazzo description.',
     (yargs) =>
       yargs.positional('apis', { array: true, type: 'string', demandOption: true }).option({
         format: {
diff --git a/packages/cli/src/utils/miscellaneous.ts b/packages/cli/src/utils/miscellaneous.ts
index 4ae5f2b2..fb531c16 100644
--- a/packages/cli/src/utils/miscellaneous.ts
+++ b/packages/cli/src/utils/miscellaneous.ts
@@ -523,7 +523,9 @@ export function checkIfRulesetExist(rules: typeof StyleguideConfig.prototype.rul
   const ruleset = {
     ...rules.oas2,
     ...rules.oas3_0,
-    ...rules.oas3_0,
+    ...rules.oas3_1,
+    ...rules.async2,
+    ...rules.arazzo,
   };
 
   if (isEmptyObject(ruleset)) {
diff --git a/packages/core/package.json b/packages/core/package.json
index 6085c68f..7e5f5740 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -55,6 +55,7 @@
     "@types/node": "^20.11.5",
     "@types/node-fetch": "^2.5.7",
     "@types/pluralize": "^0.0.29",
+    "json-schema-to-ts": "^3.1.0",
     "typescript": "^5.2.2"
   }
 }
diff --git a/packages/core/src/bundle.ts b/packages/core/src/bundle.ts
index df6b358b..81906870 100755
--- a/packages/core/src/bundle.ts
+++ b/packages/core/src/bundle.ts
@@ -293,6 +293,15 @@ export function mapTypeToComponent(typeName: string, version: SpecMajorVersion)
         default:
           return null;
       }
+    case SpecMajorVersion.Arazzo:
+      switch (typeName) {
+        case 'Root.x-parameters_items':
+        case 'Root.workflows_items.parameters_items':
+        case 'Root.workflows_items.steps_items.parameters_items':
+          return 'parameters';
+        default:
+          return null;
+      }
   }
 }
 
@@ -367,6 +376,10 @@ function makeBundleVisitor(
           components = root.components = root.components || {};
         } else if (version === SpecMajorVersion.OAS2) {
           components = root;
+        } else if (version === SpecMajorVersion.Async2) {
+          components = root.components = root.components || {};
+        } else if (version === SpecMajorVersion.Arazzo) {
+          components = root.components = root.components || {};
         }
       },
     },
diff --git a/packages/core/src/config/all.ts b/packages/core/src/config/all.ts
index 33593373..6a5c0cc9 100644
--- a/packages/core/src/config/all.ts
+++ b/packages/core/src/config/all.ts
@@ -106,9 +106,15 @@ const all: PluginStyleguideConfig<'built-in'> = {
     'array-parameter-serialization': 'error',
   },
   async2Rules: {
+    spec: 'error',
+    'info-contact': 'error',
+    'operation-operationId': 'error',
+    'tag-description': 'error',
+    'tags-alphabetical': 'error',
     'channels-kebab-case': 'error',
     'no-channel-trailing-slash': 'error',
   },
+  arazzoRules: { spec: 'error' },
 };
 
 export default all;
diff --git a/packages/core/src/config/builtIn.ts b/packages/core/src/config/builtIn.ts
index 40a7ecdd..d7a4db65 100644
--- a/packages/core/src/config/builtIn.ts
+++ b/packages/core/src/config/builtIn.ts
@@ -5,10 +5,15 @@ import minimal from './minimal';
 import { rules as oas3Rules } from '../rules/oas3';
 import { rules as oas2Rules } from '../rules/oas2';
 import { rules as async2Rules } from '../rules/async2';
+import { rules as arazzoRules } from '../rules/arazzo';
 import { preprocessors as oas3Preprocessors } from '../rules/oas3';
 import { preprocessors as oas2Preprocessors } from '../rules/oas2';
+import { preprocessors as async2Preprocessors } from '../rules/async2';
+import { preprocessors as arazzoPreprocessors } from '../rules/arazzo';
 import { decorators as oas3Decorators } from '../decorators/oas3';
 import { decorators as oas2Decorators } from '../decorators/oas2';
+import { decorators as async2Decorators } from '../decorators/async2';
+import { decorators as arazzoDecorators } from '../decorators/arazzo';
 
 import type { CustomRulesConfig, StyleguideRawConfig, Plugin } from './types';
 
@@ -28,16 +33,19 @@ export const defaultPlugin: Plugin = {
     oas3: oas3Rules,
     oas2: oas2Rules,
     async2: async2Rules,
+    arazzo: arazzoRules,
   } as CustomRulesConfig,
   preprocessors: {
     oas3: oas3Preprocessors,
     oas2: oas2Preprocessors,
-    async2: {},
+    async2: async2Preprocessors,
+    arazzo: arazzoPreprocessors,
   },
   decorators: {
     oas3: oas3Decorators,
     oas2: oas2Decorators,
-    async2: {},
+    async2: async2Decorators,
+    arazzo: arazzoDecorators,
   },
   configs: builtInConfigs,
 };
diff --git a/packages/core/src/config/config-resolvers.ts b/packages/core/src/config/config-resolvers.ts
index 257ac08f..ff4d3dbf 100644
--- a/packages/core/src/config/config-resolvers.ts
+++ b/packages/core/src/config/config-resolvers.ts
@@ -180,7 +180,9 @@ export function resolvePlugins(
 
       if (pluginModule.rules) {
         if (!pluginModule.rules.oas3 && !pluginModule.rules.oas2 && !pluginModule.rules.async2) {
-          throw new Error(`Plugin rules must have \`oas3\`, \`oas2\` or \`async2\` rules "${p}.`);
+          throw new Error(
+            `Plugin rules must have \`oas3\`, \`oas2\`, \`async2\`, or \`arazzo\` rules "${p}.`
+          );
         }
         plugin.rules = {};
         if (pluginModule.rules.oas3) {
@@ -192,12 +194,16 @@ export function resolvePlugins(
         if (pluginModule.rules.async2) {
           plugin.rules.async2 = prefixRules(pluginModule.rules.async2, id);
         }
+        if (pluginModule.rules.arazzo) {
+          plugin.rules.arazzo = prefixRules(pluginModule.rules.arazzo, id);
+        }
       }
       if (pluginModule.preprocessors) {
         if (
           !pluginModule.preprocessors.oas3 &&
           !pluginModule.preprocessors.oas2 &&
-          !pluginModule.preprocessors.async2
+          !pluginModule.preprocessors.async2 &&
+          !pluginModule.preprocessors.arazzo
         ) {
           throw new Error(
             `Plugin \`preprocessors\` must have \`oas3\`, \`oas2\` or \`async2\` preprocessors "${p}.`
@@ -213,13 +219,17 @@ export function resolvePlugins(
         if (pluginModule.preprocessors.async2) {
           plugin.preprocessors.async2 = prefixRules(pluginModule.preprocessors.async2, id);
         }
+        if (pluginModule.preprocessors.arazzo) {
+          plugin.preprocessors.arazzo = prefixRules(pluginModule.preprocessors.arazzo, id);
+        }
       }
 
       if (pluginModule.decorators) {
         if (
           !pluginModule.decorators.oas3 &&
           !pluginModule.decorators.oas2 &&
-          !pluginModule.decorators.async2
+          !pluginModule.decorators.async2 &&
+          !pluginModule.decorators.arazzo
         ) {
           throw new Error(
             `Plugin \`decorators\` must have \`oas3\`, \`oas2\` or \`async2\` decorators "${p}.`
@@ -235,6 +245,9 @@ export function resolvePlugins(
         if (pluginModule.decorators.async2) {
           plugin.decorators.async2 = prefixRules(pluginModule.decorators.async2, id);
         }
+        if (pluginModule.decorators.arazzo) {
+          plugin.decorators.arazzo = prefixRules(pluginModule.decorators.arazzo, id);
+        }
       }
 
       if (pluginModule.assertions) {
@@ -419,6 +432,7 @@ function getMergedRawStyleguideConfig(
     oas2Rules: { ...rootStyleguideConfig?.oas2Rules, ...apiStyleguideConfig?.oas2Rules },
     oas3_0Rules: { ...rootStyleguideConfig?.oas3_0Rules, ...apiStyleguideConfig?.oas3_0Rules },
     oas3_1Rules: { ...rootStyleguideConfig?.oas3_1Rules, ...apiStyleguideConfig?.oas3_1Rules },
+    arazzoRules: { ...rootStyleguideConfig?.arazzoRules, ...apiStyleguideConfig?.arazzoRules },
     preprocessors: {
       ...rootStyleguideConfig?.preprocessors,
       ...apiStyleguideConfig?.preprocessors,
diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts
index cda45c6c..32db1754 100755
--- a/packages/core/src/config/config.ts
+++ b/packages/core/src/config/config.ts
@@ -9,6 +9,7 @@ import {
   Oas2RuleSet,
   Oas3RuleSet,
   Async2RuleSet,
+  ArazzoRuleSet,
 } from '../oas-types';
 import { isBrowser } from '../env';
 
@@ -71,6 +72,7 @@ export class StyleguideConfig {
       [SpecVersion.OAS3_0]: { ...rawConfig.rules, ...rawConfig.oas3_0Rules },
       [SpecVersion.OAS3_1]: { ...rawConfig.rules, ...rawConfig.oas3_1Rules },
       [SpecVersion.Async2]: { ...rawConfig.rules, ...rawConfig.async2Rules },
+      [SpecVersion.Arazzo]: { ...rawConfig.arazzoRules },
     };
 
     this.preprocessors = {
@@ -78,6 +80,7 @@ export class StyleguideConfig {
       [SpecVersion.OAS3_0]: { ...rawConfig.preprocessors, ...rawConfig.oas3_0Preprocessors },
       [SpecVersion.OAS3_1]: { ...rawConfig.preprocessors, ...rawConfig.oas3_1Preprocessors },
       [SpecVersion.Async2]: { ...rawConfig.preprocessors, ...rawConfig.async2Preprocessors },
+      [SpecVersion.Arazzo]: { ...rawConfig.arazzoPreprocessors },
     };
 
     this.decorators = {
@@ -85,6 +88,7 @@ export class StyleguideConfig {
       [SpecVersion.OAS3_0]: { ...rawConfig.decorators, ...rawConfig.oas3_0Decorators },
       [SpecVersion.OAS3_1]: { ...rawConfig.decorators, ...rawConfig.oas3_1Decorators },
       [SpecVersion.Async2]: { ...rawConfig.decorators, ...rawConfig.async2Decorators },
+      [SpecVersion.Arazzo]: { ...rawConfig.arazzoDecorators },
     };
 
     this.extendPaths = rawConfig.extendPaths || [];
@@ -178,6 +182,10 @@ export class StyleguideConfig {
             if (!plugin.typeExtension.async2) continue;
             extendedTypes = plugin.typeExtension.async2(extendedTypes, version);
             break;
+          case SpecVersion.Arazzo:
+            if (!plugin.typeExtension.arazzo) continue;
+            extendedTypes = plugin.typeExtension.arazzo(extendedTypes, version);
+            break;
           default:
             throw new Error('Not implemented');
         }
@@ -277,6 +285,15 @@ export class StyleguideConfig {
           (p) => p.decorators?.async2 && asyncApiRules.push(p.decorators.async2)
         );
         return asyncApiRules;
+      case SpecMajorVersion.Arazzo:
+        // eslint-disable-next-line no-case-declarations
+        const arazzoRules: ArazzoRuleSet[] = []; // default ruleset
+        this.plugins.forEach(
+          (p) => p.preprocessors?.arazzo && arazzoRules.push(p.preprocessors.arazzo)
+        );
+        this.plugins.forEach((p) => p.rules?.arazzo && arazzoRules.push(p.rules.arazzo));
+        this.plugins.forEach((p) => p.decorators?.arazzo && arazzoRules.push(p.decorators.arazzo));
+        return arazzoRules;
     }
   }
 
diff --git a/packages/core/src/config/minimal.ts b/packages/core/src/config/minimal.ts
index 950dde9e..6d780e3a 100644
--- a/packages/core/src/config/minimal.ts
+++ b/packages/core/src/config/minimal.ts
@@ -88,9 +88,17 @@ const minimal: PluginStyleguideConfig<'built-in'> = {
     'array-parameter-serialization': 'off',
   },
   async2Rules: {
+    spec: 'error',
+    'info-contact': 'off',
+    'operation-operationId': 'warn',
+    'tag-description': 'warn',
+    'tags-alphabetical': 'off',
     'channels-kebab-case': 'off',
     'no-channel-trailing-slash': 'off',
   },
+  arazzoRules: {
+    spec: 'error',
+  },
 };
 
 export default minimal;
diff --git a/packages/core/src/config/recommended-strict.ts b/packages/core/src/config/recommended-strict.ts
index aee887be..ac03221a 100644
--- a/packages/core/src/config/recommended-strict.ts
+++ b/packages/core/src/config/recommended-strict.ts
@@ -88,9 +88,17 @@ const recommendedStrict: PluginStyleguideConfig<'built-in'> = {
     'array-parameter-serialization': 'off',
   },
   async2Rules: {
+    spec: 'error',
+    'info-contact': 'off',
+    'operation-operationId': 'error',
+    'tag-description': 'error',
+    'tags-alphabetical': 'off',
     'channels-kebab-case': 'off',
     'no-channel-trailing-slash': 'off',
   },
+  arazzoRules: {
+    spec: 'error',
+  },
 };
 
 export default recommendedStrict;
diff --git a/packages/core/src/config/recommended.ts b/packages/core/src/config/recommended.ts
index f24c39b5..6b615409 100644
--- a/packages/core/src/config/recommended.ts
+++ b/packages/core/src/config/recommended.ts
@@ -88,9 +88,17 @@ const recommended: PluginStyleguideConfig<'built-in'> = {
     'array-parameter-serialization': 'off',
   },
   async2Rules: {
+    spec: 'error',
+    'info-contact': 'off',
+    'operation-operationId': 'warn',
+    'tag-description': 'warn',
+    'tags-alphabetical': 'off',
     'channels-kebab-case': 'off',
     'no-channel-trailing-slash': 'off',
   },
+  arazzoRules: {
+    spec: 'error',
+  },
 };
 
 export default recommended;
diff --git a/packages/core/src/config/types.ts b/packages/core/src/config/types.ts
index 828c17b6..778ec7d6 100644
--- a/packages/core/src/config/types.ts
+++ b/packages/core/src/config/types.ts
@@ -11,6 +11,9 @@ import type {
   Async2PreprocessorsSet,
   Async2DecoratorsSet,
   Async2RuleSet,
+  ArazzoRuleSet,
+  ArazzoPreprocessorsSet,
+  ArazzoDecoratorsSet,
   RuleMap,
 } from '../oas-types';
 
@@ -20,9 +23,9 @@ import type { SkipFunctionContext } from '../visitors';
 import {
   BuiltInAsync2RuleId,
   BuiltInCommonOASRuleId,
-  BuiltInCommonRuleId,
   BuiltInOAS2RuleId,
   BuiltInOAS3RuleId,
+  BuiltInArazzoRuleId,
 } from '../types/redocly-yaml';
 
 export type RuleSeverity = ProblemSeverity | 'off';
@@ -51,23 +54,26 @@ export type StyleguideRawConfig<T = undefined> = {
   doNotResolveExamples?: boolean;
   recommendedFallback?: boolean;
 
-  rules?: RuleMap<BuiltInCommonRuleId | BuiltInCommonOASRuleId, RuleConfig, T>;
+  rules?: RuleMap<BuiltInCommonOASRuleId, RuleConfig, T>;
   oas2Rules?: RuleMap<BuiltInOAS2RuleId, RuleConfig, T>;
   oas3_0Rules?: RuleMap<BuiltInOAS3RuleId, RuleConfig, T>;
   oas3_1Rules?: RuleMap<BuiltInOAS3RuleId, RuleConfig, T>;
   async2Rules?: RuleMap<BuiltInAsync2RuleId, RuleConfig, T>;
+  arazzoRules?: RuleMap<BuiltInArazzoRuleId, RuleConfig, T>;
 
   preprocessors?: Record<string, PreprocessorConfig>;
   oas2Preprocessors?: Record<string, PreprocessorConfig>;
   oas3_0Preprocessors?: Record<string, PreprocessorConfig>;
   oas3_1Preprocessors?: Record<string, PreprocessorConfig>;
   async2Preprocessors?: Record<string, PreprocessorConfig>;
+  arazzoPreprocessors?: Record<string, PreprocessorConfig>;
 
   decorators?: Record<string, DecoratorConfig>;
   oas2Decorators?: Record<string, DecoratorConfig>;
   oas3_0Decorators?: Record<string, DecoratorConfig>;
   oas3_1Decorators?: Record<string, DecoratorConfig>;
   async2Decorators?: Record<string, DecoratorConfig>;
+  arazzoDecorators?: Record<string, DecoratorConfig>;
 };
 
 export type ApiStyleguideRawConfig = Omit<StyleguideRawConfig, 'plugins'>;
@@ -84,12 +90,14 @@ export type PreprocessorsConfig = {
   oas3?: Oas3PreprocessorsSet;
   oas2?: Oas2PreprocessorsSet;
   async2?: Async2PreprocessorsSet;
+  arazzo?: ArazzoPreprocessorsSet;
 };
 
 export type DecoratorsConfig = {
   oas3?: Oas3DecoratorsSet;
   oas2?: Oas2DecoratorsSet;
   async2?: Async2DecoratorsSet;
+  arazzo?: ArazzoDecoratorsSet;
 };
 
 export type TypesExtensionFn = (
@@ -103,6 +111,7 @@ export type CustomRulesConfig = {
   oas3?: Oas3RuleSet;
   oas2?: Oas2RuleSet;
   async2?: Async2RuleSet;
+  arazzo?: ArazzoRuleSet;
 };
 
 export type AssertionContext = Partial<UserContext> & SkipFunctionContext & { node: any };
@@ -227,19 +236,23 @@ export type ThemeRawConfig = {
   mockServer?: Record<string, any>;
 };
 
+// TODO: sync types
 export type RulesFields =
   | 'rules'
   | 'oas2Rules'
   | 'oas3_0Rules'
   | 'oas3_1Rules'
   | 'async2Rules'
+  | 'arazzoRules'
   | 'preprocessors'
   | 'oas2Preprocessors'
   | 'oas3_0Preprocessors'
   | 'oas3_1Preprocessors'
   | 'async2Preprocessors'
+  | 'arazzoPreprocessors'
   | 'decorators'
   | 'oas2Decorators'
   | 'oas3_0Decorators'
   | 'oas3_1Decorators'
+  | 'arazzoDecorators'
   | 'async2Decorators';
diff --git a/packages/core/src/config/utils.ts b/packages/core/src/config/utils.ts
index cb86144f..d19ef66b 100644
--- a/packages/core/src/config/utils.ts
+++ b/packages/core/src/config/utils.ts
@@ -56,18 +56,21 @@ function extractFlatConfig<
   oas3_0Rules,
   oas3_1Rules,
   async2Rules,
+  arazzoRules,
 
   preprocessors,
   oas2Preprocessors,
   oas3_0Preprocessors,
   oas3_1Preprocessors,
   async2Preprocessors,
+  arazzoPreprocessors,
 
   decorators,
   oas2Decorators,
   oas3_0Decorators,
   oas3_1Decorators,
   async2Decorators,
+  arazzoDecorators,
 
   ...rawConfigRest
 }: T): {
@@ -83,18 +86,21 @@ function extractFlatConfig<
     oas3_0Rules,
     oas3_1Rules,
     async2Rules,
+    arazzoRules,
 
     preprocessors,
     oas2Preprocessors,
     oas3_0Preprocessors,
     oas3_1Preprocessors,
     async2Preprocessors,
+    arazzoPreprocessors,
 
     decorators,
     oas2Decorators,
     oas3_0Decorators,
     oas3_1Decorators,
     async2Decorators,
+    arazzoDecorators,
 
     doNotResolveExamples: rawConfigRest.resolve?.doNotResolveExamples,
   };
@@ -152,18 +158,21 @@ export function mergeExtends(rulesConfList: ResolvedStyleguideConfig[]) {
     oas3_0Rules: {},
     oas3_1Rules: {},
     async2Rules: {},
+    arazzoRules: {},
 
     preprocessors: {},
     oas2Preprocessors: {},
     oas3_0Preprocessors: {},
     oas3_1Preprocessors: {},
     async2Preprocessors: {},
+    arazzoPreprocessors: {},
 
     decorators: {},
     oas2Decorators: {},
     oas3_0Decorators: {},
     oas3_1Decorators: {},
     async2Decorators: {},
+    arazzoDecorators: {},
 
     plugins: [],
     pluginPaths: [],
@@ -186,6 +195,8 @@ export function mergeExtends(rulesConfList: ResolvedStyleguideConfig[]) {
     assignExisting(result.oas3_1Rules, rulesConf.rules || {});
     Object.assign(result.async2Rules, rulesConf.async2Rules);
     assignExisting(result.async2Rules, rulesConf.rules || {});
+    Object.assign(result.arazzoRules, rulesConf.arazzoRules);
+    assignExisting(result.arazzoRules, rulesConf.rules || {});
 
     Object.assign(result.preprocessors, rulesConf.preprocessors);
     Object.assign(result.oas2Preprocessors, rulesConf.oas2Preprocessors);
@@ -196,6 +207,8 @@ export function mergeExtends(rulesConfList: ResolvedStyleguideConfig[]) {
     assignExisting(result.oas3_1Preprocessors, rulesConf.preprocessors || {});
     Object.assign(result.async2Preprocessors, rulesConf.async2Preprocessors);
     assignExisting(result.async2Preprocessors, rulesConf.preprocessors || {});
+    Object.assign(result.arazzoPreprocessors, rulesConf.arazzoPreprocessors);
+    assignExisting(result.arazzoPreprocessors, rulesConf.preprocessors || {});
 
     Object.assign(result.decorators, rulesConf.decorators);
     Object.assign(result.oas2Decorators, rulesConf.oas2Decorators);
@@ -206,6 +219,8 @@ export function mergeExtends(rulesConfList: ResolvedStyleguideConfig[]) {
     assignExisting(result.oas3_1Decorators, rulesConf.decorators || {});
     Object.assign(result.async2Decorators, rulesConf.async2Decorators);
     assignExisting(result.async2Decorators, rulesConf.decorators || {});
+    Object.assign(result.arazzoDecorators, rulesConf.arazzoDecorators);
+    assignExisting(result.arazzoDecorators, rulesConf.decorators || {});
 
     result.plugins!.push(...(rulesConf.plugins || []));
     result.pluginPaths!.push(...(rulesConf.pluginPaths || []));
diff --git a/packages/core/src/decorators/arazzo/index.ts b/packages/core/src/decorators/arazzo/index.ts
new file mode 100644
index 00000000..6ebd5e11
--- /dev/null
+++ b/packages/core/src/decorators/arazzo/index.ts
@@ -0,0 +1,1 @@
+export const decorators = {};
diff --git a/packages/core/src/decorators/async2/index.ts b/packages/core/src/decorators/async2/index.ts
new file mode 100644
index 00000000..6ebd5e11
--- /dev/null
+++ b/packages/core/src/decorators/async2/index.ts
@@ -0,0 +1,1 @@
+export const decorators = {};
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
index c67e79a3..a4a23ed8 100644
--- a/packages/core/src/index.ts
+++ b/packages/core/src/index.ts
@@ -8,6 +8,7 @@ export {
   pause,
 } from './utils';
 export { Oas3_1Types } from './types/oas3_1';
+export { ArazzoTypes } from './types/arazzo';
 export { Oas3Types } from './types/oas3';
 export { Oas2Types } from './types/oas2';
 export { AsyncApi2Types } from './types/asyncapi';
diff --git a/packages/core/src/oas-types.ts b/packages/core/src/oas-types.ts
index 339b3b78..07b1dda1 100644
--- a/packages/core/src/oas-types.ts
+++ b/packages/core/src/oas-types.ts
@@ -5,15 +5,18 @@ import {
   Oas2Preprocessor,
   Async2Preprocessor,
   Async2Rule,
+  ArazzoPreprocessor,
+  ArazzoRule,
 } from './visitors';
 import { Oas2Types } from './types/oas2';
 import { Oas3Types } from './types/oas3';
 import { Oas3_1Types } from './types/oas3_1';
 import { AsyncApi2Types } from './types/asyncapi';
+import { ArazzoTypes } from './types/arazzo';
 import {
   BuiltInAsync2RuleId,
   BuiltInCommonOASRuleId,
-  BuiltInCommonRuleId,
+  BuiltInArazzoRuleId,
   BuiltInOAS2RuleId,
   BuiltInOAS3RuleId,
 } from './types/redocly-yaml';
@@ -25,12 +28,14 @@ export enum SpecVersion {
   OAS3_0 = 'oas3_0',
   OAS3_1 = 'oas3_1',
   Async2 = 'async2', // todo split into 2.x maybe?
+  Arazzo = 'arazzo',
 }
 
 export enum SpecMajorVersion {
   OAS2 = 'oas2',
   OAS3 = 'oas3',
   Async2 = 'async2',
+  Arazzo = 'arazzo',
 }
 
 const typesMap = {
@@ -38,6 +43,7 @@ const typesMap = {
   [SpecVersion.OAS3_0]: Oas3Types,
   [SpecVersion.OAS3_1]: Oas3_1Types,
   [SpecVersion.Async2]: AsyncApi2Types,
+  [SpecVersion.Arazzo]: ArazzoTypes,
 };
 
 export type RuleMap<Key extends string, RuleConfig, T> = Record<
@@ -45,26 +51,35 @@ export type RuleMap<Key extends string, RuleConfig, T> = Record<
   RuleConfig
 >;
 export type Oas3RuleSet<T = undefined> = RuleMap<
-  BuiltInCommonRuleId | BuiltInCommonOASRuleId | BuiltInOAS3RuleId | 'assertions',
+  BuiltInCommonOASRuleId | BuiltInOAS3RuleId | 'assertions',
   Oas3Rule,
   T
 >;
 export type Oas2RuleSet<T = undefined> = RuleMap<
-  BuiltInCommonRuleId | BuiltInCommonOASRuleId | BuiltInOAS2RuleId | 'assertions',
+  BuiltInCommonOASRuleId | BuiltInOAS2RuleId | 'assertions',
   Oas2Rule,
   T
 >;
 export type Async2RuleSet<T = undefined> = RuleMap<
-  BuiltInCommonRuleId | BuiltInAsync2RuleId | 'assertions',
+  BuiltInAsync2RuleId | 'assertions',
   Async2Rule,
   T
 >;
+export type ArazzoRuleSet<T = undefined> = RuleMap<
+  BuiltInArazzoRuleId | 'assertions',
+  ArazzoRule,
+  T
+>;
+
 export type Oas3PreprocessorsSet = Record<string, Oas3Preprocessor>;
 export type Oas2PreprocessorsSet = Record<string, Oas2Preprocessor>;
 export type Async2PreprocessorsSet = Record<string, Async2Preprocessor>;
+export type ArazzoPreprocessorsSet = Record<string, ArazzoPreprocessor>;
+
 export type Oas3DecoratorsSet = Record<string, Oas3Preprocessor>;
 export type Oas2DecoratorsSet = Record<string, Oas2Preprocessor>;
 export type Async2DecoratorsSet = Record<string, Async2Preprocessor>;
+export type ArazzoDecoratorsSet = Record<string, ArazzoPreprocessor>;
 
 export function detectSpec(root: any): SpecVersion {
   if (typeof root !== 'object') {
@@ -100,6 +115,10 @@ export function detectSpec(root: any): SpecVersion {
     throw new Error(`Unsupported AsyncAPI version: ${root.asyncapi}`);
   }
 
+  if (root.arazzo && root.arazzo.startsWith('1.')) {
+    return SpecVersion.Arazzo;
+  }
+
   throw new Error(`Unsupported specification`);
 }
 
@@ -108,6 +127,8 @@ export function getMajorSpecVersion(version: SpecVersion): SpecMajorVersion {
     return SpecMajorVersion.OAS2;
   } else if (version === SpecVersion.Async2) {
     return SpecMajorVersion.Async2;
+  } else if (version === SpecVersion.Arazzo) {
+    return SpecMajorVersion.Arazzo;
   } else {
     return SpecMajorVersion.OAS3;
   }
diff --git a/packages/core/src/rules/arazzo/index.ts b/packages/core/src/rules/arazzo/index.ts
new file mode 100644
index 00000000..0d6e94a8
--- /dev/null
+++ b/packages/core/src/rules/arazzo/index.ts
@@ -0,0 +1,11 @@
+import { ArazzoRule } from '../../visitors';
+import { Spec } from '../common/spec';
+import type { ArazzoRuleSet } from '../../oas-types';
+import { Assertions } from '../common/assertions';
+
+export const rules: ArazzoRuleSet<'built-in'> = {
+  spec: Spec as ArazzoRule,
+  assertions: Assertions,
+};
+
+export const preprocessors = {};
diff --git a/packages/core/src/rules/common/spec.ts b/packages/core/src/rules/common/spec.ts
index 80a55960..eec0691f 100644
--- a/packages/core/src/rules/common/spec.ts
+++ b/packages/core/src/rules/common/spec.ts
@@ -1,11 +1,11 @@
-import type { Oas3Rule, Oas2Rule, Async2Rule } from '../../visitors';
+import type { Oas3Rule, Oas2Rule, Async2Rule, ArazzoRule } from '../../visitors';
 import { isNamedType, SpecExtension } from '../../types';
 import { oasTypeOf, matchesJsonSchemaType, getSuggest, validateSchemaEnumType } from '../utils';
 import { isRef } from '../../ref-utils';
 import { isPlainObject } from '../../utils';
 import { UserContext } from '../../walk';
 
-export const Spec: Oas3Rule | Oas2Rule | Async2Rule = () => {
+export const Spec: Oas3Rule | Oas2Rule | Async2Rule | ArazzoRule = () => {
   return {
     any(
       node: any,
diff --git a/packages/core/src/types/arazzo.ts b/packages/core/src/types/arazzo.ts
new file mode 100755
index 00000000..d73b194f
--- /dev/null
+++ b/packages/core/src/types/arazzo.ts
@@ -0,0 +1,386 @@
+import type { NodeType } from '.';
+
+import { getNodeTypesFromJSONSchema } from './json-schema-adapter';
+
+export const ARAZZO_ROOT_TYPE = 'Root';
+
+const operationMethod = {
+  type: 'string',
+  enum: ['get', 'post', 'put', 'delete', 'patch'],
+} as const;
+const expectSchema = {
+  type: 'object',
+  properties: {
+    statusCode: { type: 'number' },
+    mimeType: { type: 'string' },
+    body: {},
+    schema: {
+      type: 'object',
+      additionalProperties: true,
+    },
+  },
+  additionalProperties: false,
+  oneOf: [
+    { required: ['statusCode'] },
+    { required: ['mimeType'] },
+    { required: ['body'] },
+    { required: ['schema'] },
+  ],
+} as const;
+const openAPISourceDescriptionSchema = {
+  type: 'object',
+  properties: {
+    name: { type: 'string' },
+    type: { type: 'string', enum: ['openapi'] },
+    url: { type: 'string' },
+    'x-serverUrl': { type: 'string' },
+  },
+  additionalProperties: false,
+  required: ['name', 'type', 'url'],
+} as const;
+const noneSourceDescriptionSchema = {
+  type: 'object',
+  properties: {
+    name: { type: 'string' },
+    type: { type: 'string', enum: ['none'] },
+    'x-serverUrl': { type: 'string' },
+  },
+  additionalProperties: false,
+  required: ['name', 'type', 'x-serverUrl'],
+} as const;
+const arazzoSourceDescriptionSchema = {
+  type: 'object',
+  properties: {
+    name: { type: 'string' },
+    type: { type: 'string', enum: ['arazzo'] },
+    url: { type: 'string' },
+  },
+  additionalProperties: false,
+  required: ['name', 'type', 'url'],
+} as const;
+const sourceDescriptionSchema = {
+  type: 'object',
+  oneOf: [
+    openAPISourceDescriptionSchema,
+    noneSourceDescriptionSchema,
+    arazzoSourceDescriptionSchema,
+  ],
+} as const;
+const sourceDescriptionsSchema = {
+  type: 'array',
+  items: sourceDescriptionSchema,
+} as const;
+const extendedOperation = {
+  type: 'object',
+  properties: {
+    path: { type: 'string' },
+    method: operationMethod,
+    sourceDescriptionName: { type: 'string' },
+    serverUrl: { type: 'string' },
+  },
+  additionalProperties: false,
+  required: ['path', 'method'],
+} as const;
+const parameter = {
+  type: 'object',
+  oneOf: [
+    {
+      type: 'object',
+      properties: {
+        in: { type: 'string', enum: ['header', 'query', 'path', 'cookie'] },
+        name: { type: 'string' },
+        value: {
+          oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],
+        },
+      },
+      required: ['name', 'value'],
+      additionalProperties: false,
+    },
+    {
+      type: 'object',
+      properties: {
+        $ref: { type: 'string' },
+        value: {
+          oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],
+        },
+      },
+      required: ['$ref'],
+      additionalProperties: false,
+    },
+    {
+      type: 'object',
+      properties: {
+        reference: { type: 'string' },
+        value: {
+          oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],
+        },
+      },
+      required: ['reference'],
+      additionalProperties: false,
+    },
+  ],
+} as const;
+const parameters = {
+  type: 'array',
+  items: parameter,
+} as const;
+const infoObject = {
+  type: 'object',
+  properties: {
+    title: { type: 'string' },
+    description: { type: 'string' },
+    summary: { type: 'string' },
+    version: { type: 'string' },
+  },
+  additionalProperties: false,
+  required: ['title', 'version'],
+} as const;
+const replacement = {
+  type: 'object',
+  properties: {
+    target: { type: 'string' },
+    value: {
+      oneOf: [
+        { type: 'string' },
+        { type: 'object' },
+        { type: 'array' },
+        { type: 'number' },
+        { type: 'boolean' },
+      ],
+    },
+  },
+} as const;
+const requestBody = {
+  type: 'object',
+  properties: {
+    contentType: { type: 'string' },
+    payload: {
+      oneOf: [
+        { type: 'string' },
+        { type: 'object', additionalProperties: true },
+        { type: 'array' },
+        { type: 'number' },
+        { type: 'boolean' },
+      ],
+    },
+    encoding: { type: 'string' },
+    replacements: {
+      type: 'array',
+      items: replacement,
+    },
+  },
+  additionalProperties: false,
+  required: ['payload'],
+} as const;
+const criteriaObject = {
+  type: 'object',
+  properties: {
+    condition: { type: 'string' },
+    context: { type: 'string' },
+    type: {
+      oneOf: [
+        { type: 'string', enum: ['regex', 'jsonpath', 'simple', 'xpath'] },
+        {
+          type: 'object',
+          properties: {
+            type: { type: 'string', enum: ['jsonpath'] },
+            version: { type: 'string', enum: ['draft-goessner-dispatch-jsonpath-00'] },
+          },
+        },
+        {
+          type: 'object',
+          properties: {
+            type: { type: 'string', enum: ['xpath'] },
+            version: { type: 'string', enum: ['xpath-30', 'xpath-20', 'xpath-10'] },
+          },
+        },
+      ],
+    },
+  },
+  required: ['condition'],
+  additionalProperties: false,
+} as const;
+const criteriaObjects = {
+  type: 'array',
+  items: criteriaObject,
+} as const;
+const inherit = {
+  type: 'string',
+  enum: ['auto', 'none'],
+} as const;
+const onSuccessObject = {
+  type: 'object',
+  properties: {
+    name: { type: 'string' },
+    type: { type: 'string', enum: ['goto', 'end'] },
+    stepId: { type: 'string' },
+    workflowId: { type: 'string' },
+    criteria: criteriaObjects,
+  },
+  additionalProperties: false,
+  required: ['type', 'name'],
+} as const;
+const onSuccessList = {
+  type: 'array',
+  items: onSuccessObject,
+} as const;
+const onFailureObject = {
+  type: 'object',
+  properties: {
+    name: { type: 'string' },
+    type: { type: 'string', enum: ['goto', 'retry', 'end'] },
+    workflowId: { type: 'string' },
+    stepId: { type: 'string' },
+    retryAfter: { type: 'number' },
+    retryLimit: { type: 'number' },
+    criteria: criteriaObjects,
+  },
+  additionalProperties: false,
+  required: ['type', 'name'],
+} as const;
+const onFailureList = {
+  type: 'array',
+  items: onFailureObject,
+} as const;
+const step = {
+  type: 'object',
+  properties: {
+    stepId: { type: 'string' },
+    description: { type: 'string' },
+    operationId: { type: 'string' },
+    operationPath: { type: 'string' },
+    workflowId: { type: 'string' },
+    parameters: parameters,
+    successCriteria: criteriaObjects,
+    onSuccess: onSuccessList,
+    onFailure: onFailureList,
+    outputs: {
+      type: 'object',
+      additionalProperties: {
+        type: 'string',
+      },
+    },
+    'x-inherit': inherit,
+    'x-expect': expectSchema,
+    'x-assert': { type: 'string' },
+    'x-operation': extendedOperation,
+    requestBody: requestBody,
+  },
+  required: ['stepId'],
+  oneOf: [
+    { required: ['x-operation'] },
+    { required: ['operationId'] },
+    { required: ['operationPath'] },
+    { required: ['workflowId'] },
+  ],
+} as const;
+const steps = {
+  type: 'array',
+  items: step,
+} as const;
+const JSONSchema = {
+  type: 'object',
+  properties: {
+    type: {
+      type: 'string',
+      enum: ['object', 'array', 'string', 'number', 'integer', 'boolean', 'null'],
+    },
+    properties: {
+      type: 'object',
+      additionalProperties: true,
+    },
+    required: {
+      type: 'array',
+      items: { type: 'string' },
+    },
+    items: {
+      type: 'object',
+      additionalProperties: true,
+    },
+  },
+  required: ['type'],
+  additionalProperties: true,
+} as const;
+const workflow = {
+  type: 'object',
+  properties: {
+    workflowId: { type: 'string' },
+    summary: { type: 'string' },
+    description: { type: 'string' },
+    parameters: parameters,
+    dependsOn: { type: 'array', items: { type: 'string' } },
+    inputs: JSONSchema,
+    outputs: {
+      type: 'object',
+      additionalProperties: {
+        type: 'string',
+      },
+    },
+    steps: steps,
+    successActions: {
+      type: 'array',
+      items: onSuccessObject,
+    },
+    failureActions: {
+      type: 'array',
+      items: onFailureObject,
+    },
+  },
+  additionalProperties: false,
+  required: ['workflowId', 'steps'],
+} as const;
+const workflows = {
+  type: 'array',
+  items: workflow,
+} as const;
+export const arazzoSchema = {
+  type: 'object',
+  properties: {
+    arazzo: { type: 'string', enum: ['1.0.0'] },
+    info: infoObject,
+    sourceDescriptions: sourceDescriptionsSchema,
+    'x-parameters': parameters,
+    workflows: workflows,
+    components: {
+      type: 'object',
+      properties: {
+        inputs: {
+          type: 'object',
+          additionalProperties: {
+            type: 'object',
+            additionalProperties: true,
+            properties: {
+              type: {
+                type: 'string',
+              },
+              properties: {
+                type: 'object',
+                additionalProperties: true,
+              },
+            },
+            required: ['type'],
+          },
+        },
+        parameters: {
+          type: 'object',
+          additionalProperties: parameter,
+        },
+        successActions: {
+          type: 'object',
+          additionalProperties: onSuccessObject,
+        },
+        failureActions: {
+          type: 'object',
+          additionalProperties: onFailureObject,
+        },
+      },
+    },
+  },
+  additionalProperties: false,
+  required: ['arazzo', 'info', 'sourceDescriptions', 'workflows'],
+} as const;
+
+export const ArazzoTypes: Record<string, NodeType> = getNodeTypesFromJSONSchema(
+  ARAZZO_ROOT_TYPE,
+  arazzoSchema
+);
diff --git a/packages/core/src/types/redocly-yaml.ts b/packages/core/src/types/redocly-yaml.ts
index 260c9af5..30cf5ae2 100644
--- a/packages/core/src/types/redocly-yaml.ts
+++ b/packages/core/src/types/redocly-yaml.ts
@@ -8,17 +8,12 @@ import type { JSONSchema } from 'json-schema-to-ts';
 import { SpecVersion, getTypes } from '../oas-types';
 import { Config } from '../config';
 
-const builtInCommonRules = [
+const builtInCommonOASRules = [
   'spec',
   'info-contact',
   'operation-operationId',
   'tag-description',
   'tags-alphabetical',
-] as const;
-
-export type BuiltInCommonRuleId = typeof builtInCommonRules[number];
-
-const builtInCommonOASRules = [
   'info-license-url',
   'info-license',
   'no-ambiguous-paths',
@@ -87,16 +82,28 @@ const builtInOAS3Rules = [
 
 export type BuiltInOAS3RuleId = typeof builtInOAS3Rules[number];
 
-const builtInAsync2Rules = ['channels-kebab-case', 'no-channel-trailing-slash'] as const;
+const builtInAsync2Rules = [
+  'spec',
+  'info-contact',
+  'operation-operationId',
+  'tag-description',
+  'tags-alphabetical',
+  'channels-kebab-case',
+  'no-channel-trailing-slash',
+] as const;
 
 export type BuiltInAsync2RuleId = typeof builtInAsync2Rules[number];
 
+const builtInArazzoRules = ['spec'] as const;
+
+export type BuiltInArazzoRuleId = typeof builtInArazzoRules[number];
+
 const builtInRules = [
-  ...builtInCommonRules,
   ...builtInCommonOASRules,
   ...builtInOAS2Rules,
   ...builtInOAS3Rules,
   ...builtInAsync2Rules,
+  ...builtInArazzoRules,
 ] as const;
 
 type BuiltInRuleId = typeof builtInRules[number];
@@ -238,16 +245,19 @@ const ConfigStyleguide: NodeType = {
     oas3_0Rules: 'Rules',
     oas3_1Rules: 'Rules',
     async2Rules: 'Rules',
+    arazzoRules: 'Rules',
     preprocessors: { type: 'object' },
     oas2Preprocessors: { type: 'object' },
     oas3_0Preprocessors: { type: 'object' },
     oas3_1Preprocessors: { type: 'object' },
     async2Preprocessors: { type: 'object' },
+    arazzoPreprocessors: { type: 'object' },
     decorators: { type: 'object' },
     oas2Decorators: { type: 'object' },
     oas3_0Decorators: { type: 'object' },
     oas3_1Decorators: { type: 'object' },
     async2Decorators: { type: 'object' },
+    arazzoDecorators: { type: 'object' },
   },
 };
 
diff --git a/packages/core/src/typings/arazzo.ts b/packages/core/src/typings/arazzo.ts
new file mode 100644
index 00000000..230d561b
--- /dev/null
+++ b/packages/core/src/typings/arazzo.ts
@@ -0,0 +1,4 @@
+import type { FromSchema } from 'json-schema-to-ts';
+import type { arazzoSchema } from '../types/arazzo';
+
+export type ArazzoDefinition = FromSchema<typeof arazzoSchema>;
diff --git a/packages/core/src/visitors.ts b/packages/core/src/visitors.ts
index 3493117f..71d2b7fb 100644
--- a/packages/core/src/visitors.ts
+++ b/packages/core/src/visitors.ts
@@ -50,6 +50,7 @@ import type {
   Oas2SecurityScheme,
 } from './typings/swagger';
 import type { Async2Definition } from './typings/asyncapi';
+import type { ArazzoDefinition } from './typings/arazzo';
 
 export type SkipFunctionContext = Pick<
   UserContext,
@@ -212,6 +213,10 @@ type Async2FlatVisitor = {
   Root?: VisitFunctionOrObject<Async2Definition>;
 };
 
+type ArazzoFlatVisitor = {
+  Root?: VisitFunctionOrObject<ArazzoDefinition>;
+};
+
 const legacyTypesMap = {
   Root: 'DefinitionRoot',
   ServerVariablesMap: 'ServerVariableMap',
@@ -244,6 +249,12 @@ type Async2NestedVisitor = {
     : Async2FlatVisitor[T] & NestedVisitor<Async2NestedVisitor>;
 };
 
+type ArazzoNestedVisitor = {
+  [T in keyof ArazzoFlatVisitor]: ArazzoFlatVisitor[T] extends Function
+    ? ArazzoFlatVisitor[T]
+    : ArazzoFlatVisitor[T] & NestedVisitor<ArazzoNestedVisitor>;
+};
+
 export type Oas3Visitor = BaseVisitor &
   Oas3NestedVisitor &
   Record<string, VisitFunction<any> | NestedVisitObject<any, Oas3NestedVisitor>>;
@@ -256,6 +267,10 @@ export type Async2Visitor = BaseVisitor &
   Async2NestedVisitor &
   Record<string, VisitFunction<any> | NestedVisitObject<any, Async2NestedVisitor>>;
 
+export type ArazzoVisitor = BaseVisitor &
+  ArazzoNestedVisitor &
+  Record<string, VisitFunction<any> | NestedVisitObject<any, ArazzoNestedVisitor>>;
+
 export type NestedVisitor<T> = Exclude<T, 'any' | 'ref' | 'Root'>;
 
 export type NormalizedOasVisitors<T extends BaseVisitor> = {
@@ -278,12 +293,15 @@ export type NormalizedOasVisitors<T extends BaseVisitor> = {
 export type Oas3Rule = (options: Record<string, any>) => Oas3Visitor | Oas3Visitor[];
 export type Oas2Rule = (options: Record<string, any>) => Oas2Visitor | Oas2Visitor[];
 export type Async2Rule = (options: Record<string, any>) => Async2Visitor | Async2Visitor[];
+export type ArazzoRule = (options: Record<string, any>) => ArazzoVisitor | ArazzoVisitor[];
 export type Oas3Preprocessor = (options: Record<string, any>) => Oas3Visitor;
 export type Oas2Preprocessor = (options: Record<string, any>) => Oas2Visitor;
 export type Async2Preprocessor = (options: Record<string, any>) => Async2Visitor;
+export type ArazzoPreprocessor = (options: Record<string, any>) => ArazzoVisitor;
 export type Oas3Decorator = (options: Record<string, any>) => Oas3Visitor;
 export type Oas2Decorator = (options: Record<string, any>) => Oas2Visitor;
 export type Async2Decorator = (options: Record<string, any>) => Async2Visitor;
+export type ArazzoDecorator = (options: Record<string, any>) => ArazzoVisitor;
 
 // alias for the latest version supported
 // every time we update it - consider semver


Test patch:
diff --git a/__tests__/bundle/bundle-arazzo-valid-test-description/museum.yaml b/__tests__/bundle/bundle-arazzo-valid-test-description/museum.yaml
new file mode 100644
index 00000000..d98913b4
--- /dev/null
+++ b/__tests__/bundle/bundle-arazzo-valid-test-description/museum.yaml
@@ -0,0 +1,32 @@
+arazzo: 1.0.0
+info:
+  title: Redocly Museum API Tickets
+  description: >-
+    A part of imaginary, but delightful Museum API for interacting with museum services
+    and information. Built with love by Redocly.
+  version: 1.0.0
+
+sourceDescriptions:
+  - name: museum-api
+    type: openapi
+    url: museum-api.yaml
+
+workflows:
+  - workflowId: get-museum-tickets
+    description: >-
+      This workflow demonstrates how to buy tickets for the museum.
+    parameters:
+      - $ref: './parameter.yaml'
+    steps:
+      - stepId: buy-tickets
+        description: >-
+          Buy museum tickets resolving request details with buyMuseumTickets operationId from museum-api.yaml description.
+        operationId: buyMuseumTickets
+        requestBody:
+          $ref: './request-body.yaml#/requestBody'
+        successCriteria:
+          - condition: $statusCode == 201
+        outputs:
+          ticketId: $response.body.ticketId
+    outputs:
+      ticketId: $steps.buy-tickets.outputs.ticketId
diff --git a/__tests__/bundle/bundle-arazzo-valid-test-description/parameter.yaml b/__tests__/bundle/bundle-arazzo-valid-test-description/parameter.yaml
new file mode 100644
index 00000000..33bd876c
--- /dev/null
+++ b/__tests__/bundle/bundle-arazzo-valid-test-description/parameter.yaml
@@ -0,0 +1,3 @@
+in: header
+name: Authorization
+value: Basic Og==
diff --git a/__tests__/bundle/bundle-arazzo-valid-test-description/request-body.yaml b/__tests__/bundle/bundle-arazzo-valid-test-description/request-body.yaml
new file mode 100644
index 00000000..5d1f4815
--- /dev/null
+++ b/__tests__/bundle/bundle-arazzo-valid-test-description/request-body.yaml
@@ -0,0 +1,5 @@
+requestBody:
+  payload:
+    ticketType: general
+    ticketDate: 2023-09-07
+    email: todd@example.com
diff --git a/__tests__/bundle/bundle-arazzo-valid-test-description/snapshot.js b/__tests__/bundle/bundle-arazzo-valid-test-description/snapshot.js
new file mode 100644
index 00000000..b0193374
--- /dev/null
+++ b/__tests__/bundle/bundle-arazzo-valid-test-description/snapshot.js
@@ -0,0 +1,40 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`E2E bundle bundle-arazzo-valid-test-description 1`] = `
+info:
+  title: Redocly Museum API Tickets
+  description: A part of imaginary, but delightful Museum API for interacting with museum services and information. Built with love by Redocly.
+  version: 1.0.0
+components: {}
+arazzo: 1.0.0
+sourceDescriptions:
+  - name: museum-api
+    type: openapi
+    url: museum-api.yaml
+workflows:
+  - workflowId: get-museum-tickets
+    description: This workflow demonstrates how to buy tickets for the museum.
+    parameters:
+      - in: header
+        name: Authorization
+        value: Basic Og==
+    steps:
+      - stepId: buy-tickets
+        description: Buy museum tickets resolving request details with buyMuseumTickets operationId from museum-api.yaml description.
+        operationId: buyMuseumTickets
+        requestBody:
+          payload:
+            ticketType: general
+            ticketDate: '2023-09-07'
+            email: todd@example.com
+        successCriteria:
+          - condition: $statusCode == 201
+        outputs:
+          ticketId: $response.body.ticketId
+    outputs:
+      ticketId: $steps.buy-tickets.outputs.ticketId
+
+bundling museum.yaml...
+📦 Created a bundle for museum.yaml at stdout <test>ms.
+
+`;
diff --git a/__tests__/check-config/wrong-config-type-extensions-in-assertions/snapshot.js b/__tests__/check-config/wrong-config-type-extensions-in-assertions/snapshot.js
index 0316180f..e090c862 100644
--- a/__tests__/check-config/wrong-config-type-extensions-in-assertions/snapshot.js
+++ b/__tests__/check-config/wrong-config-type-extensions-in-assertions/snapshot.js
@@ -4,7 +4,7 @@ exports[`E2E check-config wrong config type extension in assertions 1`] = `
 
 [1] redocly.yaml:10:13 at #/rules/rule~1metadata-lifecycle/subject/type
 
-\`type\` can be one of the following only: "any", "Root", "Tag", "TagList", "TagGroups", "TagGroup", "ExternalDocs", "Example", "ExamplesMap", "EnumDescriptions", "SecurityRequirement", "SecurityRequirementList", "Info", "Contact", "License", "Logo", "Paths", "PathItem", "Parameter", "ParameterItems", "ParameterList", "Operation", "Examples", "Header", "Responses", "Response", "Schema", "Xml", "SchemaProperties", "NamedSchemas", "NamedResponses", "NamedParameters", "NamedSecuritySchemes", "SecurityScheme", "XCodeSample", "XCodeSampleList", "XServerList", "XServer", "Server", "ServerList", "ServerVariable", "ServerVariablesMap", "Callback", "CallbacksMap", "RequestBody", "MediaTypesMap", "MediaType", "Encoding", "EncodingMap", "HeadersMap", "Link", "DiscriminatorMapping", "Discriminator", "Components", "LinksMap", "NamedExamples", "NamedRequestBodies", "NamedHeaders", "NamedLinks", "NamedCallbacks", "ImplicitFlow", "PasswordFlow", "ClientCredentials", "AuthorizationCode", "OAuth2Flows", "XUsePkce", "WebhooksMap", "XMetaData", "NamedPathItems", "DependentRequired", "ServerMap", "HttpServerBinding", "HttpChannelBinding", "HttpMessageBinding", "HttpOperationBinding", "WsServerBinding", "WsChannelBinding", "WsMessageBinding", "WsOperationBinding", "KafkaServerBinding", "KafkaTopicConfiguration", "KafkaChannelBinding", "KafkaMessageBinding", "KafkaOperationBinding", "AnypointmqServerBinding", "AnypointmqChannelBinding", "AnypointmqMessageBinding", "AnypointmqOperationBinding", "AmqpServerBinding", "AmqpChannelBinding", "AmqpMessageBinding", "AmqpOperationBinding", "Amqp1ServerBinding", "Amqp1ChannelBinding", "Amqp1MessageBinding", "Amqp1OperationBinding", "MqttServerBindingLastWill", "MqttServerBinding", "MqttChannelBinding", "MqttMessageBinding", "MqttOperationBinding", "Mqtt5ServerBinding", "Mqtt5ChannelBinding", "Mqtt5MessageBinding", "Mqtt5OperationBinding", "NatsServerBinding", "NatsChannelBinding", "NatsMessageBinding", "NatsOperationBinding", "JmsServerBinding", "JmsChannelBinding", "JmsMessageBinding", "JmsOperationBinding", "SolaceServerBinding", "SolaceChannelBinding", "SolaceMessageBinding", "SolaceDestination", "SolaceOperationBinding", "StompServerBinding", "StompChannelBinding", "StompMessageBinding", "StompOperationBinding", "RedisServerBinding", "RedisChannelBinding", "RedisMessageBinding", "RedisOperationBinding", "MercureServerBinding", "MercureChannelBinding", "MercureMessageBinding", "MercureOperationBinding", "ServerBindings", "ChannelBindings", "ChannelMap", "Channel", "ParametersMap", "MessageExample", "NamedMessages", "NamedMessageTraits", "NamedOperationTraits", "NamedCorrelationIds", "NamedStreamHeaders", "SecuritySchemeFlows", "Message", "MessageBindings", "OperationBindings", "OperationTrait", "OperationTraitList", "MessageTrait", "MessageTraitList", "CorrelationId", "SpecExtension".
+\`type\` can be one of the following only: "any", "Root", "Tag", "TagList", "TagGroups", "TagGroup", "ExternalDocs", "Example", "ExamplesMap", "EnumDescriptions", "SecurityRequirement", "SecurityRequirementList", "Info", "Contact", "License", "Logo", "Paths", "PathItem", "Parameter", "ParameterItems", "ParameterList", "Operation", "Examples", "Header", "Responses", "Response", "Schema", "Xml", "SchemaProperties", "NamedSchemas", "NamedResponses", "NamedParameters", "NamedSecuritySchemes", "SecurityScheme", "XCodeSample", "XCodeSampleList", "XServerList", "XServer", "Server", "ServerList", "ServerVariable", "ServerVariablesMap", "Callback", "CallbacksMap", "RequestBody", "MediaTypesMap", "MediaType", "Encoding", "EncodingMap", "HeadersMap", "Link", "DiscriminatorMapping", "Discriminator", "Components", "LinksMap", "NamedExamples", "NamedRequestBodies", "NamedHeaders", "NamedLinks", "NamedCallbacks", "ImplicitFlow", "PasswordFlow", "ClientCredentials", "AuthorizationCode", "OAuth2Flows", "XUsePkce", "WebhooksMap", "XMetaData", "NamedPathItems", "DependentRequired", "ServerMap", "HttpServerBinding", "HttpChannelBinding", "HttpMessageBinding", "HttpOperationBinding", "WsServerBinding", "WsChannelBinding", "WsMessageBinding", "WsOperationBinding", "KafkaServerBinding", "KafkaTopicConfiguration", "KafkaChannelBinding", "KafkaMessageBinding", "KafkaOperationBinding", "AnypointmqServerBinding", "AnypointmqChannelBinding", "AnypointmqMessageBinding", "AnypointmqOperationBinding", "AmqpServerBinding", "AmqpChannelBinding", "AmqpMessageBinding", "AmqpOperationBinding", "Amqp1ServerBinding", "Amqp1ChannelBinding", "Amqp1MessageBinding", "Amqp1OperationBinding", "MqttServerBindingLastWill", "MqttServerBinding", "MqttChannelBinding", "MqttMessageBinding", "MqttOperationBinding", "Mqtt5ServerBinding", "Mqtt5ChannelBinding", "Mqtt5MessageBinding", "Mqtt5OperationBinding", "NatsServerBinding", "NatsChannelBinding", "NatsMessageBinding", "NatsOperationBinding", "JmsServerBinding", "JmsChannelBinding", "JmsMessageBinding", "JmsOperationBinding", "SolaceServerBinding", "SolaceChannelBinding", "SolaceMessageBinding", "SolaceDestination", "SolaceOperationBinding", "StompServerBinding", "StompChannelBinding", "StompMessageBinding", "StompOperationBinding", "RedisServerBinding", "RedisChannelBinding", "RedisMessageBinding", "RedisOperationBinding", "MercureServerBinding", "MercureChannelBinding", "MercureMessageBinding", "MercureOperationBinding", "ServerBindings", "ChannelBindings", "ChannelMap", "Channel", "ParametersMap", "MessageExample", "NamedMessages", "NamedMessageTraits", "NamedOperationTraits", "NamedCorrelationIds", "NamedStreamHeaders", "SecuritySchemeFlows", "Message", "MessageBindings", "OperationBindings", "OperationTrait", "OperationTraitList", "MessageTrait", "MessageTraitList", "CorrelationId", "Root.info", "Root.sourceDescriptions_items_0", "Root.sourceDescriptions_items_1", "Root.sourceDescriptions_items_2", "Root.sourceDescriptions", "Root.x-parameters_items_0", "Root.x-parameters_items_1", "Root.x-parameters_items_2", "Root.x-parameters", "Root.workflows_items.parameters_items_0", "Root.workflows_items.parameters_items_1", "Root.workflows_items.parameters_items_2", "Root.workflows_items.parameters", "Root.workflows_items.inputs", "Root.workflows_items.outputs", "Root.workflows_items.steps_items.parameters_items_0", "Root.workflows_items.steps_items.parameters_items_1", "Root.workflows_items.steps_items.parameters_items_2", "Root.workflows_items.steps_items.parameters", "Root.workflows_items.steps_items.successCriteria_items.type_1", "Root.workflows_items.steps_items.successCriteria_items.type_2", "Root.workflows_items.steps_items.successCriteria_items", "Root.workflows_items.steps_items.successCriteria", "Root.workflows_items.steps_items.onSuccess_items.criteria_items.type_1", "Root.workflows_items.steps_items.onSuccess_items.criteria_items.type_2", "Root.workflows_items.steps_items.onSuccess_items.criteria_items", "Root.workflows_items.steps_items.onSuccess_items.criteria", "Root.workflows_items.steps_items.onSuccess_items", "Root.workflows_items.steps_items.onSuccess", "Root.workflows_items.steps_items.onFailure_items.criteria_items.type_1", "Root.workflows_items.steps_items.onFailure_items.criteria_items.type_2", "Root.workflows_items.steps_items.onFailure_items.criteria_items", "Root.workflows_items.steps_items.onFailure_items.criteria", "Root.workflows_items.steps_items.onFailure_items", "Root.workflows_items.steps_items.onFailure", "Root.workflows_items.steps_items.outputs", "Root.workflows_items.steps_items.x-expect", "Root.workflows_items.steps_items.x-operation", "Root.workflows_items.steps_items.requestBody.replacements_items", "Root.workflows_items.steps_items.requestBody.replacements", "Root.workflows_items.steps_items.requestBody", "Root.workflows_items.steps_items", "Root.workflows_items.steps", "Root.workflows_items.successActions_items.criteria_items.type_1", "Root.workflows_items.successActions_items.criteria_items.type_2", "Root.workflows_items.successActions_items.criteria_items", "Root.workflows_items.successActions_items.criteria", "Root.workflows_items.successActions_items", "Root.workflows_items.successActions", "Root.workflows_items.failureActions_items.criteria_items.type_1", "Root.workflows_items.failureActions_items.criteria_items.type_2", "Root.workflows_items.failureActions_items.criteria_items", "Root.workflows_items.failureActions_items.criteria", "Root.workflows_items.failureActions_items", "Root.workflows_items.failureActions", "Root.workflows_items", "Root.workflows", "Root.components.inputs_additionalProperties", "Root.components.inputs", "Root.components.parameters_additionalProperties_0", "Root.components.parameters_additionalProperties_1", "Root.components.parameters_additionalProperties_2", "Root.components.parameters", "Root.components.successActions_additionalProperties.criteria_items.type_1", "Root.components.successActions_additionalProperties.criteria_items.type_2", "Root.components.successActions_additionalProperties.criteria_items", "Root.components.successActions_additionalProperties.criteria", "Root.components.successActions_additionalProperties", "Root.components.successActions", "Root.components.failureActions_additionalProperties.criteria_items.type_1", "Root.components.failureActions_additionalProperties.criteria_items.type_2", "Root.components.failureActions_additionalProperties.criteria_items", "Root.components.failureActions_additionalProperties.criteria", "Root.components.failureActions_additionalProperties", "Root.components.failureActions", "Root.components", "SpecExtension".
 
  8 | rule/metadata-lifecycle:
  9 |   subject:
diff --git a/__tests__/commands.test.ts b/__tests__/commands.test.ts
index cf53ed93..ad83820e 100644
--- a/__tests__/commands.test.ts
+++ b/__tests__/commands.test.ts
@@ -22,8 +22,14 @@ callSerializer();
 
 describe('E2E', () => {
   describe('lint', () => {
+    const excludeFolders = [
+      'arazzo-type-extensions-with-plugin',
+      'arazzo-not-valid-test-description',
+      'arazzo-valid-test-description',
+    ];
     const folderPath = join(__dirname, 'lint');
-    const contents = readdirSync(folderPath);
+    const contents = readdirSync(folderPath).filter((folder) => !excludeFolders.includes(folder));
+
     for (const file of contents) {
       const testPath = join(folderPath, file);
       if (statSync(testPath).isFile()) continue;
@@ -31,11 +37,50 @@ describe('E2E', () => {
 
       const args = getParams('../../../packages/cli/src/index.ts', 'lint');
 
-      it(file, () => {
+      test(file, () => {
         const result = getCommandOutput(args, testPath);
         (<any>expect(cleanupOutput(result))).toMatchSpecificSnapshot(join(testPath, 'snapshot.js'));
       });
     }
+
+    test('lint valid Arazzo description', () => {
+      const dirName = 'arazzo-valid-test-description';
+      const folderPath = join(__dirname, `lint/${dirName}`);
+
+      const args = getParams('../../../packages/cli/src/index.ts', 'lint', ['museum.yaml']);
+
+      const result = getCommandOutput(args, folderPath);
+      (expect(cleanupOutput(result)) as any).toMatchSpecificSnapshot(
+        join(folderPath, 'snapshot.js')
+      );
+    });
+
+    test('lint not valid Arazzo description', () => {
+      const dirName = 'arazzo-not-valid-test-description';
+      const folderPath = join(__dirname, `lint/${dirName}`);
+
+      const args = getParams('../../../packages/cli/src/index.ts', 'lint', ['museum.yaml']);
+
+      const result = getCommandOutput(args, folderPath);
+      (expect(cleanupOutput(result)) as any).toMatchSpecificSnapshot(
+        join(folderPath, 'snapshot.js')
+      );
+    });
+
+    test('arazzo-type-extensions-with-plugin', () => {
+      const dirName = 'arazzo-type-extensions-with-plugin';
+      const folderPath = join(__dirname, `lint/${dirName}`);
+
+      const args = getParams('../../../packages/cli/src/index.ts', 'lint', [
+        'museum.yaml',
+        '--config=redocly.yaml',
+      ]);
+
+      const result = getCommandOutput(args, folderPath);
+      (expect(cleanupOutput(result)) as any).toMatchSpecificSnapshot(
+        join(folderPath, 'snapshot.js')
+      );
+    });
   });
 
   describe('zero-config', () => {
@@ -389,6 +434,7 @@ describe('E2E', () => {
     const excludeFolders = [
       'bundle-remove-unused-components',
       'bundle-remove-unused-components-from-config',
+      'bundle-arazzo-valid-test-description',
     ];
     const folderPath = join(__dirname, 'bundle');
     const contents = readdirSync(folderPath).filter((folder) => !excludeFolders.includes(folder));
@@ -403,11 +449,19 @@ describe('E2E', () => {
 
       const args = getParams('../../../packages/cli/src/index.ts', 'bundle', [...entryPoints]);
 
-      it(file, () => {
+      test(file, () => {
         const result = getCommandOutput(args, testPath);
         (<any>expect(cleanupOutput(result))).toMatchSpecificSnapshot(join(testPath, 'snapshot.js'));
       });
     }
+
+    test('bundle-arazzo-valid-test-description', () => {
+      const testPath = join(folderPath, 'bundle-arazzo-valid-test-description');
+      const args = getParams('../../../packages/cli/src/index.ts', 'bundle', ['museum.yaml']);
+
+      const result = getCommandOutput(args, testPath);
+      (<any>expect(cleanupOutput(result))).toMatchSpecificSnapshot(join(testPath, 'snapshot.js'));
+    });
   });
 
   describe('bundle with option: remove-unused-components', () => {
diff --git a/__tests__/lint-config/invalid-config-assertation-config-type/snapshot.js b/__tests__/lint-config/invalid-config-assertation-config-type/snapshot.js
index 857e0346..fea9a42a 100644
--- a/__tests__/lint-config/invalid-config-assertation-config-type/snapshot.js
+++ b/__tests__/lint-config/invalid-config-assertation-config-type/snapshot.js
@@ -6,7 +6,7 @@ exports[`E2E lint-config test with option: { dirName: 'invalid-config-assertatio
 The 'assert/' syntax in assert/path-item-mutually-required is deprecated. Update your configuration to use 'rule/' instead. Examples and more information: https://redocly.com/docs/cli/rules/configurable-rules/
 [1] .redocly.yaml:9:17 at #/rules/assert~1path-item-mutually-required/where/0/subject/type
 
-\`type\` can be one of the following only: "any", "Root", "Tag", "TagList", "TagGroups", "TagGroup", "ExternalDocs", "Example", "ExamplesMap", "EnumDescriptions", "SecurityRequirement", "SecurityRequirementList", "Info", "Contact", "License", "Logo", "Paths", "PathItem", "Parameter", "ParameterItems", "ParameterList", "Operation", "Examples", "Header", "Responses", "Response", "Schema", "Xml", "SchemaProperties", "NamedSchemas", "NamedResponses", "NamedParameters", "NamedSecuritySchemes", "SecurityScheme", "XCodeSample", "XCodeSampleList", "XServerList", "XServer", "Server", "ServerList", "ServerVariable", "ServerVariablesMap", "Callback", "CallbacksMap", "RequestBody", "MediaTypesMap", "MediaType", "Encoding", "EncodingMap", "HeadersMap", "Link", "DiscriminatorMapping", "Discriminator", "Components", "LinksMap", "NamedExamples", "NamedRequestBodies", "NamedHeaders", "NamedLinks", "NamedCallbacks", "ImplicitFlow", "PasswordFlow", "ClientCredentials", "AuthorizationCode", "OAuth2Flows", "XUsePkce", "WebhooksMap", "NamedPathItems", "DependentRequired", "ServerMap", "HttpServerBinding", "HttpChannelBinding", "HttpMessageBinding", "HttpOperationBinding", "WsServerBinding", "WsChannelBinding", "WsMessageBinding", "WsOperationBinding", "KafkaServerBinding", "KafkaTopicConfiguration", "KafkaChannelBinding", "KafkaMessageBinding", "KafkaOperationBinding", "AnypointmqServerBinding", "AnypointmqChannelBinding", "AnypointmqMessageBinding", "AnypointmqOperationBinding", "AmqpServerBinding", "AmqpChannelBinding", "AmqpMessageBinding", "AmqpOperationBinding", "Amqp1ServerBinding", "Amqp1ChannelBinding", "Amqp1MessageBinding", "Amqp1OperationBinding", "MqttServerBindingLastWill", "MqttServerBinding", "MqttChannelBinding", "MqttMessageBinding", "MqttOperationBinding", "Mqtt5ServerBinding", "Mqtt5ChannelBinding", "Mqtt5MessageBinding", "Mqtt5OperationBinding", "NatsServerBinding", "NatsChannelBinding", "NatsMessageBinding", "NatsOperationBinding", "JmsServerBinding", "JmsChannelBinding", "JmsMessageBinding", "JmsOperationBinding", "SolaceServerBinding", "SolaceChannelBinding", "SolaceMessageBinding", "SolaceDestination", "SolaceOperationBinding", "StompServerBinding", "StompChannelBinding", "StompMessageBinding", "StompOperationBinding", "RedisServerBinding", "RedisChannelBinding", "RedisMessageBinding", "RedisOperationBinding", "MercureServerBinding", "MercureChannelBinding", "MercureMessageBinding", "MercureOperationBinding", "ServerBindings", "ChannelBindings", "ChannelMap", "Channel", "ParametersMap", "MessageExample", "NamedMessages", "NamedMessageTraits", "NamedOperationTraits", "NamedCorrelationIds", "NamedStreamHeaders", "SecuritySchemeFlows", "Message", "MessageBindings", "OperationBindings", "OperationTrait", "OperationTraitList", "MessageTrait", "MessageTraitList", "CorrelationId", "SpecExtension".
+\`type\` can be one of the following only: "any", "Root", "Tag", "TagList", "TagGroups", "TagGroup", "ExternalDocs", "Example", "ExamplesMap", "EnumDescriptions", "SecurityRequirement", "SecurityRequirementList", "Info", "Contact", "License", "Logo", "Paths", "PathItem", "Parameter", "ParameterItems", "ParameterList", "Operation", "Examples", "Header", "Responses", "Response", "Schema", "Xml", "SchemaProperties", "NamedSchemas", "NamedResponses", "NamedParameters", "NamedSecuritySchemes", "SecurityScheme", "XCodeSample", "XCodeSampleList", "XServerList", "XServer", "Server", "ServerList", "ServerVariable", "ServerVariablesMap", "Callback", "CallbacksMap", "RequestBody", "MediaTypesMap", "MediaType", "Encoding", "EncodingMap", "HeadersMap", "Link", "DiscriminatorMapping", "Discriminator", "Components", "LinksMap", "NamedExamples", "NamedRequestBodies", "NamedHeaders", "NamedLinks", "NamedCallbacks", "ImplicitFlow", "PasswordFlow", "ClientCredentials", "AuthorizationCode", "OAuth2Flows", "XUsePkce", "WebhooksMap", "NamedPathItems", "DependentRequired", "ServerMap", "HttpServerBinding", "HttpChannelBinding", "HttpMessageBinding", "HttpOperationBinding", "WsServerBinding", "WsChannelBinding", "WsMessageBinding", "WsOperationBinding", "KafkaServerBinding", "KafkaTopicConfiguration", "KafkaChannelBinding", "KafkaMessageBinding", "KafkaOperationBinding", "AnypointmqServerBinding", "AnypointmqChannelBinding", "AnypointmqMessageBinding", "AnypointmqOperationBinding", "AmqpServerBinding", "AmqpChannelBinding", "AmqpMessageBinding", "AmqpOperationBinding", "Amqp1ServerBinding", "Amqp1ChannelBinding", "Amqp1MessageBinding", "Amqp1OperationBinding", "MqttServerBindingLastWill", "MqttServerBinding", "MqttChannelBinding", "MqttMessageBinding", "MqttOperationBinding", "Mqtt5ServerBinding", "Mqtt5ChannelBinding", "Mqtt5MessageBinding", "Mqtt5OperationBinding", "NatsServerBinding", "NatsChannelBinding", "NatsMessageBinding", "NatsOperationBinding", "JmsServerBinding", "JmsChannelBinding", "JmsMessageBinding", "JmsOperationBinding", "SolaceServerBinding", "SolaceChannelBinding", "SolaceMessageBinding", "SolaceDestination", "SolaceOperationBinding", "StompServerBinding", "StompChannelBinding", "StompMessageBinding", "StompOperationBinding", "RedisServerBinding", "RedisChannelBinding", "RedisMessageBinding", "RedisOperationBinding", "MercureServerBinding", "MercureChannelBinding", "MercureMessageBinding", "MercureOperationBinding", "ServerBindings", "ChannelBindings", "ChannelMap", "Channel", "ParametersMap", "MessageExample", "NamedMessages", "NamedMessageTraits", "NamedOperationTraits", "NamedCorrelationIds", "NamedStreamHeaders", "SecuritySchemeFlows", "Message", "MessageBindings", "OperationBindings", "OperationTrait", "OperationTraitList", "MessageTrait", "MessageTraitList", "CorrelationId", "Root.info", "Root.sourceDescriptions_items_0", "Root.sourceDescriptions_items_1", "Root.sourceDescriptions_items_2", "Root.sourceDescriptions", "Root.x-parameters_items_0", "Root.x-parameters_items_1", "Root.x-parameters_items_2", "Root.x-parameters", "Root.workflows_items.parameters_items_0", "Root.workflows_items.parameters_items_1", "Root.workflows_items.parameters_items_2", "Root.workflows_items.parameters", "Root.workflows_items.inputs", "Root.workflows_items.outputs", "Root.workflows_items.steps_items.parameters_items_0", "Root.workflows_items.steps_items.parameters_items_1", "Root.workflows_items.steps_items.parameters_items_2", "Root.workflows_items.steps_items.parameters", "Root.workflows_items.steps_items.successCriteria_items.type_1", "Root.workflows_items.steps_items.successCriteria_items.type_2", "Root.workflows_items.steps_items.successCriteria_items", "Root.workflows_items.steps_items.successCriteria", "Root.workflows_items.steps_items.onSuccess_items.criteria_items.type_1", "Root.workflows_items.steps_items.onSuccess_items.criteria_items.type_2", "Root.workflows_items.steps_items.onSuccess_items.criteria_items", "Root.workflows_items.steps_items.onSuccess_items.criteria", "Root.workflows_items.steps_items.onSuccess_items", "Root.workflows_items.steps_items.onSuccess", "Root.workflows_items.steps_items.onFailure_items.criteria_items.type_1", "Root.workflows_items.steps_items.onFailure_items.criteria_items.type_2", "Root.workflows_items.steps_items.onFailure_items.criteria_items", "Root.workflows_items.steps_items.onFailure_items.criteria", "Root.workflows_items.steps_items.onFailure_items", "Root.workflows_items.steps_items.onFailure", "Root.workflows_items.steps_items.outputs", "Root.workflows_items.steps_items.x-expect", "Root.workflows_items.steps_items.x-operation", "Root.workflows_items.steps_items.requestBody.replacements_items", "Root.workflows_items.steps_items.requestBody.replacements", "Root.workflows_items.steps_items.requestBody", "Root.workflows_items.steps_items", "Root.workflows_items.steps", "Root.workflows_items.successActions_items.criteria_items.type_1", "Root.workflows_items.successActions_items.criteria_items.type_2", "Root.workflows_items.successActions_items.criteria_items", "Root.workflows_items.successActions_items.criteria", "Root.workflows_items.successActions_items", "Root.workflows_items.successActions", "Root.workflows_items.failureActions_items.criteria_items.type_1", "Root.workflows_items.failureActions_items.criteria_items.type_2", "Root.workflows_items.failureActions_items.criteria_items", "Root.workflows_items.failureActions_items.criteria", "Root.workflows_items.failureActions_items", "Root.workflows_items.failureActions", "Root.workflows_items", "Root.workflows", "Root.components.inputs_additionalProperties", "Root.components.inputs", "Root.components.parameters_additionalProperties_0", "Root.components.parameters_additionalProperties_1", "Root.components.parameters_additionalProperties_2", "Root.components.parameters", "Root.components.successActions_additionalProperties.criteria_items.type_1", "Root.components.successActions_additionalProperties.criteria_items.type_2", "Root.components.successActions_additionalProperties.criteria_items", "Root.components.successActions_additionalProperties.criteria", "Root.components.successActions_additionalProperties", "Root.components.successActions", "Root.components.failureActions_additionalProperties.criteria_items.type_1", "Root.components.failureActions_additionalProperties.criteria_items.type_2", "Root.components.failureActions_additionalProperties.criteria_items", "Root.components.failureActions_additionalProperties.criteria", "Root.components.failureActions_additionalProperties", "Root.components.failureActions", "Root.components", "SpecExtension".
 
  7 | where:
  8 |   - subject:
diff --git a/__tests__/lint-config/invalid-lint-config-severity/snapshot.js b/__tests__/lint-config/invalid-lint-config-severity/snapshot.js
index 03282423..93d939d5 100644
--- a/__tests__/lint-config/invalid-lint-config-severity/snapshot.js
+++ b/__tests__/lint-config/invalid-lint-config-severity/snapshot.js
@@ -4,7 +4,7 @@ exports[`E2E lint-config test with option: { dirName: 'invalid-lint-config-sever
 
 index.ts lint [apis...]
 
-Lint an API description.
+Lint an API or Arazzo description.
 
 Positionals:
   apis                                                     [array] [default: []]
diff --git a/__tests__/lint/arazzo-not-valid-test-description/museum.yaml b/__tests__/lint/arazzo-not-valid-test-description/museum.yaml
new file mode 100644
index 00000000..aee814ea
--- /dev/null
+++ b/__tests__/lint/arazzo-not-valid-test-description/museum.yaml
@@ -0,0 +1,17 @@
+arazzo: 1.0.0
+
+sourceDescriptions:
+  - name: museum-api
+    type: openapi
+    url: museum-api.yaml
+
+workflows:
+  - workflowId: get-museum-tickets
+    description: >-
+      This workflow demonstrates how to buy tickets for the museum.
+    parameters:
+      - in: header
+        name: Authorization
+        value: Basic Og==
+    outputs:
+      ticketId: $steps.buy-tickets.outputs.ticketId
diff --git a/__tests__/lint/arazzo-not-valid-test-description/snapshot.js b/__tests__/lint/arazzo-not-valid-test-description/snapshot.js
new file mode 100644
index 00000000..acf09920
--- /dev/null
+++ b/__tests__/lint/arazzo-not-valid-test-description/snapshot.js
@@ -0,0 +1,48 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`E2E lint lint not valid Arazzo description 1`] = `
+
+No configurations were provided -- using built in recommended configuration by default.
+
+validating museum.yaml...
+[1] museum.yaml:1:1 at #/
+
+The field \`info\` must be present on this level.
+
+ 1 | arazzo: 1.0.0
+   | ^^^^^^^^^^^^^
+ 2 |
+   | ^
+ … | < 14 more lines >
+17 |       ticketId: $steps.buy-tickets.outputs.ticketId
+   |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+18 |
+
+Error was generated by the spec rule.
+
+
+[2] museum.yaml:9:5 at #/workflows/0
+
+The field \`steps\` must be present on this level.
+
+ 7 |
+ 8 | workflows:
+ 9 |   - workflowId: get-museum-tickets
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+10 |     description: >-
+   |     ^^^^^^^^^^^^^^^
+ … |     < 6 more lines >
+17 |       ticketId: $steps.buy-tickets.outputs.ticketId
+   |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+18 |
+
+Error was generated by the spec rule.
+
+
+museum.yaml: validated in <test>ms
+
+❌ Validation failed with 2 errors.
+run \`redocly lint --generate-ignore-file\` to add all problems to the ignore file.
+
+
+`;
diff --git a/__tests__/lint/arazzo-type-extensions-with-plugin/museum.yaml b/__tests__/lint/arazzo-type-extensions-with-plugin/museum.yaml
new file mode 100644
index 00000000..a516fdc0
--- /dev/null
+++ b/__tests__/lint/arazzo-type-extensions-with-plugin/museum.yaml
@@ -0,0 +1,40 @@
+arazzo: 1.0.0
+info:
+  title: Redocly Museum API Tickets
+  description: >-
+    A part of imaginary, but delightful Museum API for interacting with museum services
+    and information. Built with love by Redocly.
+  version: 1.0.0
+  wrong-key: wrong-value
+  metadata:
+    lifecycle: production
+    owner-team: Engineering/Integrations
+sourceDescriptions:
+  - name: museum-api
+    type: openapi
+    url: museum-api.yaml
+
+workflows:
+  - workflowId: get-museum-tickets
+    description: >-
+      This workflow demonstrates how to buy tickets for the museum.
+    parameters:
+      - in: header
+        name: Authorization
+        value: Basic Og==
+    steps:
+      - stepId: buy-tickets
+        description: >-
+          Buy museum tickets resolving request details with buyMuseumTickets operationId from museum-api.yaml description.
+        operationId: buyMuseumTickets
+        requestBody:
+          payload:
+            ticketType: general
+            ticketDate: 2023-09-07
+            email: todd@example.com
+        successCriteria:
+          - condition: $statusCode == 201
+        outputs:
+          ticketId: $response.body.ticketId
+    outputs:
+      ticketId: $steps.buy-tickets.outputs.ticketId
diff --git a/__tests__/lint/arazzo-type-extensions-with-plugin/plugins/type-extention.js b/__tests__/lint/arazzo-type-extensions-with-plugin/plugins/type-extention.js
new file mode 100644
index 00000000..b5972d57
--- /dev/null
+++ b/__tests__/lint/arazzo-type-extensions-with-plugin/plugins/type-extention.js
@@ -0,0 +1,28 @@
+const XMetaData = {
+  properties: {
+    lifecycle: { type: 'string', enum: ['development', 'staging', 'production'] },
+    'owner-team': { type: 'string' },
+  },
+  required: ['lifecycle'],
+};
+
+module.exports = {
+  id: 'type-extension',
+  typeExtension: {
+    arazzo(types) {
+      newTypes = {
+        ...types,
+        XMetaData: XMetaData,
+        'Root.info': {
+          ...types['Root.info'],
+          properties: {
+            ...types['Root.info'].properties,
+            metadata: 'XMetaData',
+          },
+        },
+      };
+
+      return newTypes;
+    },
+  },
+};
diff --git a/__tests__/lint/arazzo-type-extensions-with-plugin/redocly.yaml b/__tests__/lint/arazzo-type-extensions-with-plugin/redocly.yaml
new file mode 100644
index 00000000..ae54d08d
--- /dev/null
+++ b/__tests__/lint/arazzo-type-extensions-with-plugin/redocly.yaml
@@ -0,0 +1,5 @@
+plugins:
+  - plugins/type-extention.js
+
+arazzoRules:
+  spec: error
diff --git a/__tests__/lint/arazzo-type-extensions-with-plugin/snapshot.js b/__tests__/lint/arazzo-type-extensions-with-plugin/snapshot.js
new file mode 100644
index 00000000..51b2066a
--- /dev/null
+++ b/__tests__/lint/arazzo-type-extensions-with-plugin/snapshot.js
@@ -0,0 +1,26 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`E2E lint arazzo-type-extensions-with-plugin 1`] = `
+
+validating museum.yaml...
+[1] museum.yaml:8:3 at #/info/wrong-key
+
+Property \`wrong-key\` is not expected here.
+
+ 6 |   and information. Built with love by Redocly.
+ 7 | version: 1.0.0
+ 8 | wrong-key: wrong-value
+   | ^^^^^^^^^
+ 9 | metadata:
+10 |   lifecycle: production
+
+Error was generated by the spec rule.
+
+
+museum.yaml: validated in <test>ms
+
+❌ Validation failed with 1 error.
+run \`redocly lint --generate-ignore-file\` to add all problems to the ignore file.
+
+
+`;
diff --git a/__tests__/lint/arazzo-valid-test-description/museum.yaml b/__tests__/lint/arazzo-valid-test-description/museum.yaml
new file mode 100644
index 00000000..5ed360bb
--- /dev/null
+++ b/__tests__/lint/arazzo-valid-test-description/museum.yaml
@@ -0,0 +1,37 @@
+arazzo: 1.0.0
+info:
+  title: Redocly Museum API Tickets
+  description: >-
+    A part of imaginary, but delightful Museum API for interacting with museum services
+    and information. Built with love by Redocly.
+  version: 1.0.0
+
+sourceDescriptions:
+  - name: museum-api
+    type: openapi
+    url: museum-api.yaml
+
+workflows:
+  - workflowId: get-museum-tickets
+    description: >-
+      This workflow demonstrates how to buy tickets for the museum.
+    parameters:
+      - in: header
+        name: Authorization
+        value: Basic Og==
+    steps:
+      - stepId: buy-tickets
+        description: >-
+          Buy museum tickets resolving request details with buyMuseumTickets operationId from museum-api.yaml description.
+        operationId: buyMuseumTickets
+        requestBody:
+          payload:
+            ticketType: general
+            ticketDate: 2023-09-07
+            email: todd@example.com
+        successCriteria:
+          - condition: $statusCode == 201
+        outputs:
+          ticketId: $response.body.ticketId
+    outputs:
+      ticketId: $steps.buy-tickets.outputs.ticketId
diff --git a/__tests__/lint/arazzo-valid-test-description/snapshot.js b/__tests__/lint/arazzo-valid-test-description/snapshot.js
new file mode 100644
index 00000000..f2836919
--- /dev/null
+++ b/__tests__/lint/arazzo-valid-test-description/snapshot.js
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`E2E lint lint valid Arazzo description 1`] = `
+
+No configurations were provided -- using built in recommended configuration by default.
+
+validating museum.yaml...
+museum.yaml: validated in <test>ms
+
+Woohoo! Your API description is valid. 🎉
+
+
+`;
diff --git a/packages/cli/src/__tests__/utils.test.ts b/packages/cli/src/__tests__/utils.test.ts
index a38ba160..7a99bbd8 100644
--- a/packages/cli/src/__tests__/utils.test.ts
+++ b/packages/cli/src/__tests__/utils.test.ts
@@ -474,6 +474,7 @@ describe('checkIfRulesetExist', () => {
       oas3_0: {},
       oas3_1: {},
       async2: {},
+      arazzo: {},
     };
     expect(() => checkIfRulesetExist(rules)).toThrowError(
       '⚠️ No rules were configured. Learn how to configure rules: https://redocly.com/docs/cli/rules/'
diff --git a/packages/core/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap b/packages/core/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap
index e2b88b23..e6bf5edc 100644
--- a/packages/core/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap
+++ b/packages/core/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap
@@ -2,11 +2,21 @@
 
 exports[`resolveConfig should ignore minimal from the root and read local file 1`] = `
 {
+  "arazzoDecorators": {},
+  "arazzoPreprocessors": {},
+  "arazzoRules": {
+    "spec": "error",
+  },
   "async2Decorators": {},
   "async2Preprocessors": {},
   "async2Rules": {
     "channels-kebab-case": "off",
+    "info-contact": "off",
     "no-channel-trailing-slash": "off",
+    "operation-operationId": "warn",
+    "spec": "error",
+    "tag-description": "warn",
+    "tags-alphabetical": "off",
   },
   "decorators": {},
   "doNotResolveExamples": undefined,
@@ -109,11 +119,21 @@ exports[`resolveConfig should ignore minimal from the root and read local file 1
 
 exports[`resolveStyleguideConfig should resolve extends with local file config which contains path to nested config 1`] = `
 {
+  "arazzoDecorators": {},
+  "arazzoPreprocessors": {},
+  "arazzoRules": {
+    "spec": "error",
+  },
   "async2Decorators": {},
   "async2Preprocessors": {},
   "async2Rules": {
     "channels-kebab-case": "off",
+    "info-contact": "off",
     "no-channel-trailing-slash": "off",
+    "operation-operationId": "warn",
+    "spec": "error",
+    "tag-description": "warn",
+    "tags-alphabetical": "off",
   },
   "decorators": {},
   "doNotResolveExamples": undefined,
diff --git a/packages/core/src/config/__tests__/__snapshots__/config.test.ts.snap b/packages/core/src/config/__tests__/__snapshots__/config.test.ts.snap
index 5565e0fd..233ae25d 100644
--- a/packages/core/src/config/__tests__/__snapshots__/config.test.ts.snap
+++ b/packages/core/src/config/__tests__/__snapshots__/config.test.ts.snap
@@ -6,6 +6,7 @@ StyleguideConfig {
   "_usedVersions": Set {},
   "configFile": undefined,
   "decorators": {
+    "arazzo": {},
     "async2": {
       "oas2": {},
       "oas3_0": {},
@@ -44,6 +45,7 @@ StyleguideConfig {
   "pluginPaths": [],
   "plugins": [],
   "preprocessors": {
+    "arazzo": {},
     "async2": {
       "oas2": {},
       "oas3_0": {},
@@ -107,6 +109,7 @@ StyleguideConfig {
   },
   "recommendedFallback": false,
   "rules": {
+    "arazzo": {},
     "async2": {
       "oas2": {
         "no-empty-servers": "error",
diff --git a/packages/core/src/config/__tests__/config.test.ts b/packages/core/src/config/__tests__/config.test.ts
index 7cea7c70..a83f6b04 100644
--- a/packages/core/src/config/__tests__/config.test.ts
+++ b/packages/core/src/config/__tests__/config.test.ts
@@ -117,6 +117,7 @@ describe('getMergedConfig', () => {
           "_usedVersions": Set {},
           "configFile": "redocly.yaml",
           "decorators": {
+            "arazzo": {},
             "async2": {},
             "oas2": {},
             "oas3_0": {},
@@ -128,6 +129,7 @@ describe('getMergedConfig', () => {
           "pluginPaths": [],
           "plugins": [],
           "preprocessors": {
+            "arazzo": {},
             "async2": {},
             "oas2": {},
             "oas3_0": {},
@@ -142,6 +144,7 @@ describe('getMergedConfig', () => {
           },
           "recommendedFallback": false,
           "rules": {
+            "arazzo": {},
             "async2": {
               "operation-summary": "warn",
             },
@@ -222,6 +225,7 @@ describe('getMergedConfig', () => {
           "_usedVersions": Set {},
           "configFile": "redocly.yaml",
           "decorators": {
+            "arazzo": {},
             "async2": {},
             "oas2": {},
             "oas3_0": {},
@@ -233,6 +237,7 @@ describe('getMergedConfig', () => {
           "pluginPaths": [],
           "plugins": [],
           "preprocessors": {
+            "arazzo": {},
             "async2": {},
             "oas2": {},
             "oas3_0": {},
@@ -249,6 +254,7 @@ describe('getMergedConfig', () => {
           },
           "recommendedFallback": false,
           "rules": {
+            "arazzo": {},
             "async2": {
               "no-empty-servers": "error",
               "operation-summary": "error",