Start annotating which version of the spec added a thing (#3425)

* Introduce a new "added-in" template and use it on endpoints

* Use "added-in" on schema properties too

* Annotate sections of the spec with their added versions

* Demo of "added-in" on a room version (to be fleshed out)

* Use clearer versioning semantics

* Update and fix validator for Swagger custom properties

* Fix docs
pull/977/head
Travis Ralston 3 years ago committed by GitHub
parent 649fc2bdd2
commit 5be0df02c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

3
.gitignore vendored

@ -1,9 +1,8 @@
/api/node_modules node_modules
/assets /assets
/assets.tar.gz /assets.tar.gz
/data/msc /data/msc
/env* /env*
/node_modules
/resources /resources
/scripts/gen /scripts/gen
/scripts/continuserv/continuserv /scripts/continuserv/continuserv

@ -1039,9 +1039,9 @@ This returns an HTML and JavaScript page which can perform the entire
login process. The page will attempt to call the JavaScript function login process. The page will attempt to call the JavaScript function
`window.onLogin` when login has been successfully completed. `window.onLogin` when login has been successfully completed.
Non-credential parameters valid for the `/login` endpoint can be {{% added-in v="1.1" %}} Non-credential parameters valid for the `/login`
provided as query string parameters here. These are to be forwarded to endpoint can be provided as query string parameters here. These are to be
the login endpoint during the login process. For example: forwarded to the login endpoint during the login process. For example:
GET /_matrix/static/client/login/?device_id=GHTYAJCE GET /_matrix/static/client/login/?device_id=GHTYAJCE
@ -1746,6 +1746,8 @@ The allowable state transitions of membership are:
##### Knocking on rooms ##### Knocking on rooms
{{% added-in v="1.1" %}}
<!-- <!--
This section is here because it's most similar to being invited/joining a This section is here because it's most similar to being invited/joining a
room, though has added complexity which needs to be explained. Otherwise room, though has added complexity which needs to be explained. Otherwise

@ -992,6 +992,8 @@ user-signing keys.
##### QR codes ##### QR codes
{{% added-in v="1.1" %}}
Verifying by QR codes provides a quick way to verify when one of the parties Verifying by QR codes provides a quick way to verify when one of the parties
has a device capable of scanning a QR code. The QR code encodes both parties' has a device capable of scanning a QR code. The QR code encodes both parties'
master signing keys as well as a random shared secret that is used to allow master signing keys as well as a random shared secret that is used to allow

@ -44,7 +44,7 @@ for retrieving events:
- [GET /rooms/:room\_id/event/:event\_id](#get_matrixclientv3roomsroomideventeventid) - [GET /rooms/:room\_id/event/:event\_id](#get_matrixclientv3roomsroomideventeventid)
- [GET /rooms/:room\_id/state/:event\_type/:state\_key](#get_matrixclientv3roomsroomidstateeventtypestatekey) - [GET /rooms/:room\_id/state/:event\_type/:state\_key](#get_matrixclientv3roomsroomidstateeventtypestatekey)
- [GET /rooms/:room\_id/messages](#get_matrixclientv3roomsroomidmessages) - [GET /rooms/:room\_id/messages](#get_matrixclientv3roomsroomidmessages)
- [GET /rooms/:room\_id/members](#get_matrixclientv3roomsroomidmembers) - {{% added-in v="1.1" %}} [GET /rooms/:room\_id/members](#get_matrixclientv3roomsroomidmembers)
- [GET /rooms/:room\_id/initialSync](#get_matrixclientv3roomsroomidinitialsync) - [GET /rooms/:room\_id/initialSync](#get_matrixclientv3roomsroomidinitialsync)
- [GET /sync](#get_matrixclientv3sync) - [GET /sync](#get_matrixclientv3sync)
- [GET /events](#get_matrixclientv3events) as used for room previews. - [GET /events](#get_matrixclientv3events) as used for room previews.

@ -464,6 +464,8 @@ text should be `"sent a video."`. For `m.audio`, the text should be
##### Spoiler messages ##### Spoiler messages
{{% added-in v="1.1" %}}
Parts of a message can be hidden visually from the user through use of spoilers. Parts of a message can be hidden visually from the user through use of spoilers.
This does not affect the server's representation of the event content - it This does not affect the server's representation of the event content - it
is simply a visual cue to the user that the message may reveal important is simply a visual cue to the user that the message may reveal important

@ -5,6 +5,8 @@ weight: 110
### Secrets ### Secrets
{{% added-in v="1.1" %}}
Clients may have secret information that they wish to be made available Clients may have secret information that they wish to be made available
to other authorised clients, but that the server should not be able to to other authorised clients, but that the server should not be able to
see, so the information must be encrypted as it passes through the see, so the information must be encrypted as it passes through the

@ -26,7 +26,7 @@ Room version 7 adds new authorization rules for events to support knocking.
[Room version 6](/rooms/v6) has details of other authorization rule changes, [Room version 6](/rooms/v6) has details of other authorization rule changes,
as do the versions v6 is based upon. as do the versions v6 is based upon.
For checks perfomed upon `m.room.member` events, the following conditions {{% added-in this=true %}} For checks perfomed upon `m.room.member` events, the following conditions
are added in context: are added in context:
If type is `m.room.member`: If type is `m.room.member`:

@ -60,6 +60,7 @@ paths:
type: string type: string
description: The fully qualified user ID of the user being banned. description: The fully qualified user ID of the user being banned.
reason: reason:
x-addedInMatrixVersion: "1.1"
type: string type: string
description: The reason the user has been banned. This will be supplied as the description: The reason the user has been banned. This will be supplied as the
`reason` on the target's updated [`m.room.member`](/client-server-api/#mroommember) event. `reason` on the target's updated [`m.room.member`](/client-server-api/#mroommember) event.
@ -119,6 +120,7 @@ paths:
type: string type: string
description: The fully qualified user ID of the user being unbanned. description: The fully qualified user ID of the user being unbanned.
reason: reason:
x-addedInMatrixVersion: "1.1"
type: string type: string
description: |- description: |-
Optional reason to be included as the `reason` on the subsequent Optional reason to be included as the `reason` on the subsequent

@ -29,6 +29,7 @@ securityDefinitions:
paths: paths:
"/keys/device_signing/upload": "/keys/device_signing/upload":
post: post:
x-addedInMatrixVersion: "1.1"
summary: Upload cross-signing keys. summary: Upload cross-signing keys.
description: |- description: |-
Publishes cross-signing keys for the user. Publishes cross-signing keys for the user.
@ -140,6 +141,7 @@ paths:
- End-to-end encryption - End-to-end encryption
"/keys/signatures/upload": "/keys/signatures/upload":
post: post:
x-addedInMatrixVersion: "1.1"
summary: Upload cross-signing signatures. summary: Upload cross-signing signatures.
description: |- description: |-
Publishes cross-signing signatures for the user. The request body is a Publishes cross-signing signatures for the user. The request body is a

@ -72,6 +72,7 @@ paths:
type: string type: string
description: The fully qualified user ID of the invitee. description: The fully qualified user ID of the invitee.
reason: reason:
x-addedInMatrixVersion: "1.1"
type: string type: string
description: |- description: |-
Optional reason to be included as the `reason` on the subsequent Optional reason to be included as the `reason` on the subsequent

@ -66,6 +66,7 @@ paths:
`m.room.third_party_invite` event in the room, and perform `m.room.third_party_invite` event in the room, and perform
key validity checking if required by the event. key validity checking if required by the event.
reason: reason:
x-addedInMatrixVersion: "1.1"
type: string type: string
description: |- description: |-
Optional reason to be included as the `reason` on the subsequent Optional reason to be included as the `reason` on the subsequent
@ -152,6 +153,7 @@ paths:
that it matches a pending `m.room.third_party_invite` event in the that it matches a pending `m.room.third_party_invite` event in the
room, and perform key validity checking if required by the event. room, and perform key validity checking if required by the event.
reason: reason:
x-addedInMatrixVersion: "1.1"
type: string type: string
description: |- description: |-
Optional reason to be included as the `reason` on the subsequent Optional reason to be included as the `reason` on the subsequent

@ -29,6 +29,7 @@ securityDefinitions:
paths: paths:
"/room_keys/version": "/room_keys/version":
post: post:
x-addedInMatrixVersion: "1.1"
summary: Create a new backup. summary: Create a new backup.
description: |- description: |-
Creates a new backup. Creates a new backup.
@ -157,6 +158,7 @@ paths:
- End-to-end encryption - End-to-end encryption
"/room_keys/version/{version}": "/room_keys/version/{version}":
get: get:
x-addedInMatrixVersion: "1.1"
summary: Get information about an existing backup. summary: Get information about an existing backup.
description: |- description: |-
Get information about an existing backup. Get information about an existing backup.
@ -734,6 +736,7 @@ paths:
- End-to-end encryption - End-to-end encryption
"/room_keys/keys": "/room_keys/keys":
put: put:
x-addedInMatrixVersion: "1.1"
summary: Store several keys in the backup. summary: Store several keys in the backup.
description: |- description: |-
Store several keys in the backup. Store several keys in the backup.

@ -238,6 +238,7 @@ paths:
} }
} }
master_keys: master_keys:
x-addedInMatrixVersion: "1.1"
type: object type: object
description: |- description: |-
Information on the master cross-signing keys of the queried users. Information on the master cross-signing keys of the queried users.
@ -259,6 +260,7 @@ paths:
} }
} }
self_signing_keys: self_signing_keys:
x-addedInMatrixVersion: "1.1"
type: object type: object
description: |- description: |-
Information on the self-signing keys of the queried users. A map Information on the self-signing keys of the queried users. A map

@ -29,6 +29,7 @@ securityDefinitions:
paths: paths:
"/knock/{roomIdOrAlias}": "/knock/{roomIdOrAlias}":
post: post:
x-addedInMatrixVersion: "1.1"
summary: Knock on a room, requesting permission to join. summary: Knock on a room, requesting permission to join.
description: |- description: |-
*Note that this API takes either a room ID or alias, unlike other membership APIs.* *Note that this API takes either a room ID or alias, unlike other membership APIs.*

@ -62,6 +62,7 @@ paths:
} }
properties: properties:
reason: reason:
x-addedInMatrixVersion: "1.1"
type: string type: string
description: |- description: |-
Optional reason to be included as the `reason` on the subsequent Optional reason to be included as the `reason` on the subsequent

@ -23,6 +23,7 @@ basePath: /_matrix/client/v3
paths: paths:
"/login/sso/redirect": "/login/sso/redirect":
get: get:
x-addedInMatrixVersion: "1.1"
summary: Redirect the user's browser to the SSO interface. summary: Redirect the user's browser to the SSO interface.
description: |- description: |-
A web-based Matrix client should instruct the user's browser to A web-based Matrix client should instruct the user's browser to
@ -50,6 +51,7 @@ paths:
- Session management - Session management
"/login/sso/redirect/{idpId}": "/login/sso/redirect/{idpId}":
get: get:
x-addedInMatrixVersion: "1.1"
summary: Redirect the user's browser to the SSO interface for an IdP. summary: Redirect the user's browser to the SSO interface for an IdP.
description: |- description: |-
This endpoint is the same as `/login/sso/redirect`, though with an This endpoint is the same as `/login/sso/redirect`, though with an

@ -58,6 +58,7 @@ paths:
type: string type: string
description: The user ID that owns the access token. description: The user ID that owns the access token.
device_id: device_id:
x-addedInMatrixVersion: "1.1"
type: string type: string
description: |- description: |-
Device ID associated with the access token. If no device Device ID associated with the access token. If no device

@ -24,6 +24,7 @@ produces:
paths: paths:
"/versions": "/versions":
get: get:
x-addedInMatrixVersion: "1.1"
summary: Gets the versions of the specification supported by the server. summary: Gets the versions of the specification supported by the server.
description: |- description: |-
Gets the versions of the specification supported by the server. Gets the versions of the specification supported by the server.

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
x-addedInMatrixVersion: "1.1"
type: object type: object
title: m.device_list_update title: m.device_list_update
description: |- description: |-

@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
x-addedInMatrixVersion: "1.1"
type: object type: object
title: m.signing_key_update title: m.signing_key_update
description: |- description: |-

@ -29,6 +29,7 @@ securityDefinitions:
paths: paths:
"/make_knock/{roomId}/{userId}": "/make_knock/{roomId}/{userId}":
get: get:
x-addedInMatrixVersion: "1.1"
summary: Get information required to make a knock event for a room. summary: Get information required to make a knock event for a room.
description: |- description: |-
Asks the receiving server to return information that the sending Asks the receiving server to return information that the sending
@ -190,6 +191,7 @@ paths:
"/send_knock/{roomId}/{eventId}": "/send_knock/{roomId}/{eventId}":
put: put:
x-addedInMatrixVersion: "1.1"
summary: Submit a signed knock event to a resident server. summary: Submit a signed knock event to a resident server.
description: |- description: |-
Submits a signed knock event to the resident server for it to Submits a signed knock event to the resident server for it to

@ -178,6 +178,7 @@ paths:
description: description:
The display name which the user set on the device. The display name which the user set on the device.
master_keys: master_keys:
x-addedInMatrixVersion: "1.1"
type: object type: object
description: |- description: |-
Information on the master cross-signing keys of the queried users. Information on the master cross-signing keys of the queried users.
@ -199,6 +200,7 @@ paths:
} }
} }
self_signing_keys: self_signing_keys:
x-addedInMatrixVersion: "1.1"
type: object type: object
description: |- description: |-
Information on the self-signing keys of the queried users. A map Information on the self-signing keys of the queried users. A map

@ -64,6 +64,7 @@ properties:
description: Flag indicating if the room containing this event was created with the intention of being a direct chat. See [Direct Messaging](/client-server-api/#direct-messaging). description: Flag indicating if the room containing this event was created with the intention of being a direct chat. See [Direct Messaging](/client-server-api/#direct-messaging).
type: boolean type: boolean
reason: reason:
x-addedInMatrixVersion: "1.1"
type: string type: string
description: |- description: |-
Optional user-supplied text for why their membership has changed. For kicks and bans, this is typically the reason for the kick or ban. Optional user-supplied text for why their membership has changed. For kicks and bans, this is typically the reason for the kick or ban.

@ -0,0 +1,13 @@
{{ $ver := .v }}
{{ $this := .this }}
{{/*
This differs from the shortcode added-in by wanting to be a block instead of inline
and by slightly altering the rendered text as a result.
*/}}
{{ if $this }}
**New in this version.**
{{ else }}
**Added in `v{{ $ver }}`**
{{ end }}

@ -25,6 +25,10 @@
<hr/> <hr/>
{{ if (index $event_data "x-addedInMatrixVersion") }}
{{ partial "added-in" (dict "v" (index $event_data "x-addedInMatrixVersion")) }}
{{ end }}
{{ $event_data.description | markdownify }} {{ $event_data.description | markdownify }}
</summary> </summary>

@ -82,7 +82,7 @@
<tr> <tr>
<td><code>{{ $property_name }}</code></td> <td><code>{{ $property_name }}</code></td>
<td><code>{{ $type }}</code></td> <td><code>{{ $type }}</code></td>
<td>{{ if $required }}<strong>Required: </strong>{{end}}{{ $property.description | markdownify }}{{ if eq $type "enum"}}<p>One of: <code>{{ $property.enum }}</code>.</p>{{ end }}</td> <td>{{ if $required }}<strong>Required: </strong>{{end}}{{ $property.description | markdownify }}{{ if eq $type "enum"}}<p>One of: <code>{{ $property.enum }}</code>.</p>{{ end }}{{ if (index $property "x-addedInMatrixVersion") }}{{ partial "added-in" (dict "v" (index $property "x-addedInMatrixVersion")) }}{{ end }}</td>
</tr> </tr>
{{ end }} {{ end }}

@ -39,6 +39,10 @@
{{ partial "alert" (dict "type" "warning" "omit_title" "true" "content" "This API is deprecated and will be removed from a future release.") }} {{ partial "alert" (dict "type" "warning" "omit_title" "true" "content" "This API is deprecated and will be removed from a future release.") }}
{{ end }} {{ end }}
{{ if (index $operation_data "x-addedInMatrixVersion") }}
{{ partial "added-in" (dict "v" (index $operation_data "x-addedInMatrixVersion")) }}
{{ end }}
<p>{{ $operation_data.description | markdownify }}</p> <p>{{ $operation_data.description | markdownify }}</p>
</summary> </summary>

@ -0,0 +1,8 @@
{{ $ver := .Params.v }}
{{ $this := .Params.this }}
{{ if $this }}
<span>**[New in this version]**</span>
{{ else }}
<span>**[Added in `v{{ $ver }}`]**</span>
{{ end }} {{/* Do not leave an empty line at the end of this file otherwise the inline behaviour breaks. */}}

@ -37,6 +37,10 @@
<hr/> <hr/>
{{ if (index $definition "x-addedInMatrixVersion") }}
{{ partial "added-in" (dict "v" (index $definition "x-addedInMatrixVersion")) }}
{{ end }}
{{ $definition.description | markdownify }} {{ $definition.description | markdownify }}
</summary> </summary>

@ -62,3 +62,9 @@ doesn't work, as in the following example:
In some cases, the schema will have HTTP response code definitions like In some cases, the schema will have HTTP response code definitions like
`2xx`, `3xx`, and `4xx`. These indicate that a response code within those `2xx`, `3xx`, and `4xx`. These indicate that a response code within those
ranges (`2xx` = `200` to `299`) is valid for the schema. ranges (`2xx` = `200` to `299`) is valid for the schema.
## Custom `x-addedInMatrixVersion` key
This property is added throughout the OpenAPI schemas to denote which version
of the Matrix specification added the associated object (endpoint, parameter,
property, etc).

@ -0,0 +1,287 @@
{
"name": "swagger-cli-validator",
"version": "0.0.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "swagger-cli-validator",
"version": "0.0.1",
"license": "ISC",
"dependencies": {
"nopt": "^3.0.2",
"swagger-parser": "^10.0.3"
}
},
"node_modules/@apidevtools/json-schema-ref-parser": {
"version": "9.0.9",
"resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz",
"integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==",
"dependencies": {
"@jsdevtools/ono": "^7.1.3",
"@types/json-schema": "^7.0.6",
"call-me-maybe": "^1.0.1",
"js-yaml": "^4.1.0"
}
},
"node_modules/@apidevtools/openapi-schemas": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz",
"integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==",
"engines": {
"node": ">=10"
}
},
"node_modules/@apidevtools/swagger-methods": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz",
"integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg=="
},
"node_modules/@apidevtools/swagger-parser": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz",
"integrity": "sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==",
"dependencies": {
"@apidevtools/json-schema-ref-parser": "^9.0.6",
"@apidevtools/openapi-schemas": "^2.0.4",
"@apidevtools/swagger-methods": "^3.0.2",
"@jsdevtools/ono": "^7.1.3",
"call-me-maybe": "^1.0.1",
"z-schema": "^5.0.1"
},
"peerDependencies": {
"openapi-types": ">=7"
}
},
"node_modules/@jsdevtools/ono": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
"integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="
},
"node_modules/@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ=="
},
"node_modules/abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"node_modules/call-me-maybe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
"integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
},
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"optional": true
},
"node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"node_modules/lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
},
"node_modules/nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dependencies": {
"abbrev": "1"
},
"bin": {
"nopt": "bin/nopt.js"
}
},
"node_modules/openapi-types": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-9.3.0.tgz",
"integrity": "sha512-sR23YjmuwDSMsQVZDHbV9mPgi0RyniQlqR0AQxTC2/F3cpSjRFMH3CFPjoWvNqhC4OxPkDYNb2l8Mc1Me6D/KQ==",
"peer": true
},
"node_modules/swagger-parser": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz",
"integrity": "sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==",
"dependencies": {
"@apidevtools/swagger-parser": "10.0.3"
},
"engines": {
"node": ">=10"
}
},
"node_modules/validator": {
"version": "13.6.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz",
"integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/z-schema": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.1.tgz",
"integrity": "sha512-Gp8xU2lULhREqTWj9t4BEAeA7M835n4fWJ9KjGWksV3wmLUdOJo2hAr+QYvkVZIGOOTyeN274g1f95dKRsgYgQ==",
"dependencies": {
"lodash.get": "^4.4.2",
"lodash.isequal": "^4.5.0",
"validator": "^13.6.0"
},
"bin": {
"z-schema": "bin/z-schema"
},
"engines": {
"node": ">=8.0.0"
},
"optionalDependencies": {
"commander": "^2.7.1"
}
}
},
"dependencies": {
"@apidevtools/json-schema-ref-parser": {
"version": "9.0.9",
"resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz",
"integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==",
"requires": {
"@jsdevtools/ono": "^7.1.3",
"@types/json-schema": "^7.0.6",
"call-me-maybe": "^1.0.1",
"js-yaml": "^4.1.0"
}
},
"@apidevtools/openapi-schemas": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz",
"integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ=="
},
"@apidevtools/swagger-methods": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz",
"integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg=="
},
"@apidevtools/swagger-parser": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz",
"integrity": "sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==",
"requires": {
"@apidevtools/json-schema-ref-parser": "^9.0.6",
"@apidevtools/openapi-schemas": "^2.0.4",
"@apidevtools/swagger-methods": "^3.0.2",
"@jsdevtools/ono": "^7.1.3",
"call-me-maybe": "^1.0.1",
"z-schema": "^5.0.1"
}
},
"@jsdevtools/ono": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
"integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="
},
"@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ=="
},
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"call-me-maybe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
"integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
},
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"optional": true
},
"js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"requires": {
"argparse": "^2.0.1"
}
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
},
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"requires": {
"abbrev": "1"
}
},
"openapi-types": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-9.3.0.tgz",
"integrity": "sha512-sR23YjmuwDSMsQVZDHbV9mPgi0RyniQlqR0AQxTC2/F3cpSjRFMH3CFPjoWvNqhC4OxPkDYNb2l8Mc1Me6D/KQ==",
"peer": true
},
"swagger-parser": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz",
"integrity": "sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==",
"requires": {
"@apidevtools/swagger-parser": "10.0.3"
}
},
"validator": {
"version": "13.6.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz",
"integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg=="
},
"z-schema": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.1.tgz",
"integrity": "sha512-Gp8xU2lULhREqTWj9t4BEAeA7M835n4fWJ9KjGWksV3wmLUdOJo2hAr+QYvkVZIGOOTyeN274g1f95dKRsgYgQ==",
"requires": {
"commander": "^2.7.1",
"lodash.get": "^4.4.2",
"lodash.isequal": "^4.5.0",
"validator": "^13.6.0"
}
}
}
}

@ -10,6 +10,6 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"nopt": "^3.0.2", "nopt": "^3.0.2",
"swagger-parser": "^3.2.1" "swagger-parser": "^10.0.3"
} }
} }

Loading…
Cancel
Save