diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 43847f00ae..e230d2ff90 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -2,15 +2,14 @@
Thank you for contributing to the OpenAPI Specification!
Please make certain you are submitting your PR on the correct
-branch and file:
+branch, to the files under the "src/" directory (which is not
+present on the main branch, only on the development branches).
-* 3.0.x spec: v3.0.4-dev branch, versions/3.0.4.md
-* 3.1.x spec: v3.1.1-dev branch, versions/3.1.1.md
-* 3.2.0 spec: v3.2.0-dev branch, versions/3.2.0.md
-* 3.0 schema: main branch, schemas/v3.0/...
-* 3.1 schema: main branch, schemas/v3.1/...
+* 3.1.x spec and schemas: v3.1-dev branch
+* 3.2.x spec and schemas: v3.2-dev branch
* registry templates: gh-pages branch, registry/...
* registry contents: gh-pages branch, registries/...
+* process documentation and build infrastructure: main
Note that we do not accept changes to published specifications.
-->
diff --git a/.github/templates/agenda.md b/.github/templates/agenda.md
index 0b65e594ab..5faa181e88 100644
--- a/.github/templates/agenda.md
+++ b/.github/templates/agenda.md
@@ -7,7 +7,7 @@ Whether attending or not, **anyone can comment on this issue prior to the meetin
Meetings take place over Zoom: [https://zoom.us/j/975841675](https://zoom.us/j/975841675?pwd=SUh4MjRLaEFKNlI3RElpWTdhRDVVUT09), dial-in passcode: 763054
### Accessibility & Etiquette
-* Participants must abide by our [Code-of-Conduct](https://github.com/OAI/OpenAPI-Specification/blob/main/CODE_OF_CONDUCT.md#code-of-conduct).
+* Participants must abide by our [Code-of-Conduct](https://github.com/OAI/OpenAPI-Specification?tab=coc-ov-file).
* Meetings are recorded for future reference, and for those who are not able to attend in-person.
diff --git a/.github/workflows/schema-publish.yaml b/.github/workflows/schema-publish.yaml
index 4b336542ad..0206ef56fa 100644
--- a/.github/workflows/schema-publish.yaml
+++ b/.github/workflows/schema-publish.yaml
@@ -49,8 +49,8 @@ jobs:
path: deploy
labels: Housekeeping,Schema
reviewers: darrelmiller,webron,earth2marsh,webron,lornajane,mikekistler,miqui,ralfhandl,handrews,karenetheridge
- title: Publish OpenAPI Metaschema Iterations
- commit-message: New OpenAPI metaschema iterations
+ title: Publish OpenAPI Schema Iterations
+ commit-message: New OpenAPI schema iterations
signoff: true
body: |
This pull request is automatically triggered by GitHub action `schema-publish`.
diff --git a/.github/workflows/validate-markdown.yaml b/.github/workflows/validate-markdown.yaml
index cd9d503ae4..577a16c8e6 100644
--- a/.github/workflows/validate-markdown.yaml
+++ b/.github/workflows/validate-markdown.yaml
@@ -28,6 +28,6 @@ jobs:
with:
node-version: '20.x'
- name: Validate markdown
- run: npx --yes mdv versions/3.*.md
+ run: npx --yes mdv versions/3.*.md src/oas.md
- name: Lint markdown 3.0.4, 3.1.1, and later
- run: npx --yes markdownlint-cli --config .markdownlint.yaml versions/3.0.4.md versions/3.1.[^0].md versions/3.[2-9].*.md
+ run: npx --yes markdownlint-cli --config .markdownlint.yaml versions/3.0.4.md versions/3.1.[^0].md versions/3.[2-9].*.md src/oas.md
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
deleted file mode 100644
index a87b404e6d..0000000000
--- a/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,155 +0,0 @@
-Code of Conduct
-===============
-
-OpenAPI Initiative Code of Conduct
-
-*The Linux Foundation*
-
-*Effective November 24, 2020*
-
-The OpenAPI Initiative (OAI) is an open source Linux Foundation project
-and home of the OpenAPI Specification (OAS) released under the Apache
-2.0 license. As contributors, maintainers, and participants in this
-project, we want to foster an open and welcoming environment. We pledge
-to make participation in our project and our community a harassment-free
-experience for everyone, regardless of age, body size, disability,
-ethnicity, gender identity and expression, level of experience,
-education, socio-economic status, nationality, personal appearance,
-race, religion, or sexual identity and orientation.
-
-Our Standards
--------------
-
-Examples of behaviors that contribute to creating a positive environment
-include:
-
-- Using welcoming and inclusive language
-
-- Being respectful of differing viewpoints and experiences
-
-- Gracefully accepting constructive criticism
-
-- Focusing on what is best for the community
-
-- Showing empathy towards other community members
-
-- Assuming the best intent from others
-
-Examples of unacceptable behavior by participants include:
-
-- The use of sexualized language or imagery and unwelcome sexual attention or advances
-
-- Making unsolicited, insulting or derogatory comments, including personal (i.e., ad hominem) or political attacks to create conflict (e.g., trolling)
-
-- Public or private harassment
-
-- Publishing others' private information, such as a physical or electronic address, without explicit permission (e.g., doxxing)
-
-- Threatening, offensive, harmful comments, or behavior
-
-- Other conduct which could reasonably be considered inappropriate in a professional setting
-
-Our Responsibilities
---------------------
-
-The Code of Conduct Committee is responsible for clarifying the
-standards of acceptable behavior and is expected to take appropriate and
-fair corrective action in response to any instances of unacceptable
-behavior.
-
-Scope
------
-
-This Code of Conduct applies to OAI project spaces, as well as
-interactions in public spaces. Project spaces include, but are not
-limited to, official OAI code repositories, Slack, mailing lists,
-meetings, and events. Public spaces may include venues where an
-individual is representing the project or its community. Examples of
-this include a community member's email communication, forum posts,
-social media activity, or acting as a representative at an online or
-offline event. In addition, violations of this code of conduct outside
-of these spaces may affect a person's ability to participate in them.
-
-Enforcement
------------
-
-To report instances of abuse, harassment, or otherwise unacceptable
-behavior, contact
-[conduct\@openapis.org](mailto:conduct@openapis.org). **We
-are committed to maintaining the confidentiality of anyone reporting an
-incident**. The Code of Conduct Committee will review and investigate
-all complaints, responding as deemed necessary and appropriate to the
-circumstances. For incidents relating to offline events, we aim to
-respond to reports within 24 hours, and for incidents relating to online
-activities, we aim to respond to reports within 7 days.
-
-The Code of Conduct Committee has the right and responsibility to
-remove, edit, or reject comments, commits, code, wiki edits, issues, and
-other contributions that are not aligned to this Code of Conduct, or
-take other appropriate action as deemed necessary for behaviors contrary
-to the standards listed above. In the case of offline or in-person
-events, if a participant engages in behavior that is not aligned to this
-Code of Conduct, the committee may take action, such as warning the
-offender, banning the offender from various online spaces (temporary or
-permanent), removing the offender from an event with no refund, or other
-options deemed appropriate.
-
-Enforcement Guidelines
-----------------------
-
-The Code of Conduct committee will follow these Enforcement Guidelines in
-determining the consequences for any action they deem in violation of this
-Code of Conduct:
-
-#### 1. Correction
-Community Impact: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-Consequence: A private, written warning from the Code of Conduct committee,
-providing clarity around the nature of the violation and an explanation of
-why the behavior was inappropriate. A public apology may be requested.
-
-#### 2. Warning
-Community Impact: A violation through a single incident or series of
-actions.
-
-Consequence: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction
-with the Code of Conduct committee, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external
-channels like social media. Violating these terms may lead to a temporary
-or permanent ban.
-
-#### 3. Temporary Ban
-Community Impact: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-Consequence: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No
-public or private interaction with the people involved, including
-unsolicited interaction with the Code of Conduct committee, is allowed
-during this period. Violating these terms may lead to a permanent ban.
-
-#### 4. Permanent Ban
-Community Impact: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of
-an individual, or aggression toward or disparagement of classes of
-individuals.
-
-Consequence: A permanent ban from any sort of public interaction
-within the community.
-
-### Events
-
-Some OpenAPI events are governed by the [Linux Foundation Code of
-Conduct](https://events.linuxfoundation.org/about/code-of-conduct/)
-(E.g. API Specifications Conference) and will be listed on the event
-page. The OAI Code of Conduct is designed to be compatible with the
-above policy and also includes more details on responding to incidents.
-
-### Attribution
-
-This code of conduct is adapted from the [Contributor Covenant, version
-1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct)
-and the [PyCon 2019 Code of
-Conduct](https://us.pycon.org/2019/about/code-of-conduct/).
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 31b8de369c..7cc369eb4e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -14,52 +14,81 @@ If in doubt about a policy, please [ask on our Slack](https://communityinviter.c
No changes, ***no matter how trivial***, are ever made to the contents of published specifications. The only potential changes to those documents are updates to link URLs _if and only if_ the targeted document is moved by a 3rd party. Other changes to link URLs are not allowed.
-### Changing the schemas
-
-Schemas are only changed _after_ the specification is changed.
-Changes are made to the YAML versions on the `main` branch.
-The JSON versions are generated when published to the [spec site](https://spec.openapis.org/), at which time the `WORK-IN-PROGRESS` URI placeholders are replaced with the publication date.
-
### Authoritative source of truth
The [spec site](https://spec.openapis.org) is the source of truth.
This changed in 2024, as the markdown files on `main` do not include certain credits and citations.
-## Development and publication process
+## Development process
-As of October 2024 (post-OAS 3.0.4 and 3.1.1), the OAS is developed in the `src/oas.md` file on minor release `X.Y-dev` branches that are derived from the baseline `dev` branch.
+As of October 2024 (post-OAS 3.0.4 and 3.1.1), the OAS is developed in the `src/oas.md` file on minor release `vX.Y-dev` branches that are derived from the baseline `dev` branch.
-All work **MUST be done on a fork**, using a branch from the _earliest relevant and [active](#active-branches)_ `X.Y-dev` branch, and then submitted as a PR to that `X.Y-dev` branch.
-For example, if a change in November 2024 apples to both 3.1 and 3.2, the PR would go to the `v3.1-dev` branch, which will be merged up to `v3.2-dev` before the next 3.2 release.
+Schema changes are made on the same branch, but can be released independently. When making a specification change for a new minor or major release that has a schema impact, including the schema change in the PR is preferred. Patch releases cannot contain changes that _require_ a schema update.
-Releases are published to the [spec site](https://spec.opanapis.org) by creating an `X.Y.Z-rel` branch where `src/oas.md` is renamed to the appropriate `versions/X.Y.Z.md` file and them merged to `main`. The HTML versions of the OAS are automatically generated from the `versions` directory on `main`. This renaming on the `X.Y.Z-rel` branch preserves the commit history for the published file on `main` when using `git log --follow` (as is the case for all older published files).
+### Branch roles
-For information on the branch and release strategy for OAS 3.0.4 and 3.1.1 and earlier, see the comments in [issue #3677](https://github.com/OAI/OpenAPI-Specification/issues/3677).
+* `main` is used to publish finished work and hold the authoritative versions of general documentation such as this document, which can be merged out to other branches as needed. The `src` tree is ***not*** present on `main`.
+* `dev` is the primary branch for working with the `src` tree, which is kept up-to-date with the most recent release on the most recent minor (X.Y) release line, and serves as the base for each new minor release line. Development infrastructure that is not needed on `main` is maintained here, and can be merged out to other non-`main` branches as needed.
+* `vX.Y-dev` is the minor release line development branch for X.Y, including both the initial X.Y.0 minor version and all subsequent X.Y.Z patch versions. All PRs are made to oldest active `vX.Y-dev` branch to which the change is relevant, and then merged forward as shown in the diagram further down in this document.
+* `vX.Y.Z-rel` is the release branch for an X.Y.Z release (including when Z == 0). It exists primarily for `git mv`-ing `src/oas.md` to the appropriate `versions/X.Y.Z.md` location before merging back to `main`, and can also be used for any emergency post-release fixes that come up, such as when a 3rd party changes URLs in a way that breaks published links.
-### Branch diagram (3.1.2, 3.2.0, and later)
+### Using forks
-Initial steps:
+All work **MUST be done on a fork**, using a branch from the _earliest relevant and [active](#active-branches)_ `vX.Y-dev` branch, and then submitted as a PR to that `vX.Y-dev` branch.
+For example, if a change in November 2024 apples to both 3.1 and 3.2, the PR would go to the `v3.1-dev` branch, which will be merged up to `v3.2-dev` before the next 3.2 release.
-* `dev` branches from `main` at the 3.1.1 release commit
-* Each `X.Y-dev` branches from `dev`
+## Publishing
-Upon release:
+The specification and schemas are published to the [spec site](https://spec.openapis.org) by creating an `vX.Y.Z-rel` branch where `src/oas.md` is renamed to the appropriate `versions/X.Y.Z.md` file and then merged to `main`. The HTML versions of the OAS are automatically generated from the `versions` directory on `main`. This renaming on the `vX.Y.Z-rel` branch preserves the commit history for the published file on `main` when using `git log --follow` (as is the case for all older published files).
-* Each `X.Y.Z-rel` branches from the corresponding `X.Y-dev`
-* After renaming `src/oas.md`, `X.Y.Z-rel` merges to `main`
-* Publishing to the [spec site](https://spec.openapis.org) is triggered by the merge to `main`
+The publishing process for schemas is still under discussion (see issues [#3715](https://github.com/OAI/OpenAPI-Specification/issues/3715) and [#3716](https://github.com/OAI/OpenAPI-Specification/issues/3716)), with the current proposal being to release them directly from the `vX.Y-dev` branch without merging to `main`, as the schemas in source control have placeholder identifiers and are not intended to be used as-is.
-Initiating the next minor release after releasing `X.Y.0`:
+### Historical branch strategy
-* The same `X.Y-dev` commit that is the base of `X.Y.0-rel` is merged back to `dev` to keep `src/oas.md` on `dev` in sync with the last minor release
-* This `X.Y.0` commit on `dev` is the base of `X.Y+1-dev`
+For information on the branch and release strategy for OAS 3.0.4 and 3.1.1 and earlier, see the comments in [issue #3677](https://github.com/OAI/OpenAPI-Specification/issues/3677).
-Other notes:
+### Branching and merging (3.1.2, 3.2.0, and later)
-* Patch releases are _not_ merged to `dev`
+Upon release:
+
+* Pre-release steps:
+ * The most recent _published_ patch release from the previoius line is merged up to `vX.Y-dev`, if relevant
+ * If doing simultaneous releases on multiple lines, do them from the oldest to newest line
+ * If the release is the most recent on the current line, merge `vX.Y-dev` to `dev`
+ * For example, if releasing 3.1.3 and 3.2.0:
+ * release 3.1.3 first, including merging `v3.1-dev` to `dev` as 3.1 is current at that moment
+ * release 3.2.0 second, also merging `v3.2-dev` to `dev` as 3.2 becomes current at that point
+ * any subsequent 3.1.4 would **_not_** trigger a merge of `v3.1-dev` to `dev`, as 3.1 would no longer be current
+* Release branching and merging:
+ * branch `vX.Y.Z-rel` from `vX.Y-dev` (same commit that was merged to `dev` if relevant)
+ * After renaming `src/oas.md` to `versions/X.Y.Z.md`, merge `vX.Y.Z-rel` to `main`
+* Publishing to the [spec site](https://spec.openapis.org) is triggered by the merge to `main`
+* Post-release steps:
+ * If this was a major or minor release (Z == 0), branch `vX.Y+1-dev` from `dev`, from the commit where `vX.Y-dev` was merged to `dev`
+
+_Release lines are grouped by color, although the colors of `dev` and `main` are not significant as these diagrams are limited to only 8 colors._
```mermaid
+---
+config:
+ themeVariables:
+ git0: "#5588bb"
+ git1: "#cc8899"
+ git2: "#eedd88"
+ git3: "#ccbb66"
+ git4: "#aa9944"
+ git5: "#887722"
+ git6: "#99ccff"
+ git7: "#77aadd"
+ gitBranchLabel1: "#000000"
+ gitBranchLabel2: "#000000"
+ gitBranchLabel3: "#000000"
+ gitBranchLabel4: "#000000"
+ gitBranchLabel5: "#ffffff"
+ gitBranchLabel6: "#000000"
+ gitBranchLabel7: "#000000"
+---
gitGraph TB:
commit id:"merge 3.1.1.md to main" tag:"3.1.1"
branch dev order:1
@@ -67,13 +96,18 @@ gitGraph TB:
branch v3.1-dev order:2
commit id:"update version in src/oas.md to 3.1.2"
checkout dev
- branch v3.2-dev order:5
+ branch v3.2-dev order:6
commit id:"update version in src/oas.md to 3.2.0"
commit id:"some 3.2.0 work"
checkout v3.1-dev
commit id:"a 3.1.x fix"
+ checkout v3.2-dev
+ merge v3.1-dev id:"merge 3.1.2 fixes"
+ checkout v3.1-dev
branch v3.1.2-rel order:3
commit id:"rename src/oas.md to versions/3.1.2.md"
+ checkout dev
+ merge v3.1-dev id:"update dev with active line patch release"
checkout main
merge v3.1.2-rel tag:"3.1.2"
checkout v3.2-dev
@@ -83,30 +117,51 @@ gitGraph TB:
commit id:"another 3.1.x fix"
checkout v3.2-dev
commit id:"still more 3.2.0 work"
- merge v3.1-dev id:"merge 3.1.x fixes before releasing"
+ merge v3.1-dev id:"merge 3.1.3 fixes before releasing"
+ checkout dev
+ merge v3.1-dev id:"update dev with last pre-minor release patch release"
+ merge v3.2-dev id:"update dev with minor release"
checkout v3.1-dev
branch v3.1.3-rel order:4
commit id:"rename src/oas.md to versions/3.1.3.md"
checkout v3.2-dev
- branch v3.2.0-rel order:6
+ branch v3.2.0-rel order:7
commit id:"rename src/oas.md to versions/3.2.0.md"
checkout main
merge v3.1.3-rel tag:"3.1.3"
merge v3.2.0-rel tag:"3.2.0"
checkout dev
- merge v3.2-dev id:"update dev with minor release"
- branch v3.3-dev order:7
+ branch v3.3-dev order:9
checkout v3.1-dev
commit id:"update version in src/oas.md to 3.1.4"
checkout v3.2-dev
commit id:"update version in src/oas.md to 3.2.1"
checkout v3.3-dev
commit id:"update version in src/oas.md to 3.3.0"
-```
-### Schema development
-
-Development of schemas [currently occurs on `main`](#changing-the-schemas), but the process is [being re-evaluated and is likely to change](https://github.com/OAI/OpenAPI-Specification/issues/3715).
+ checkout v3.1-dev
+ commit id:"a 3.1.4 fix"
+ checkout v3.2-dev
+ commit id:"a 3.2.1 fix"
+ merge v3.1-dev id:"merge 3.1.4 fixes before releasing"
+ checkout v3.3-dev
+ merge v3.2-dev id:"merge 3.1.4 / 3.2.1 fixes"
+ checkout dev
+ merge v3.2-dev id:"merge patch from active release line"
+ checkout v3.1-dev
+ branch v3.1.4-rel order:5
+ commit id:"rename src/oas.md to versions/3.1.4.md"
+ checkout v3.2-dev
+ branch v3.2.1-rel order:8
+ commit id:"rename src/oas.md to versions/3.2.1.md"
+ checkout main
+ merge v3.1.4-rel tag:"3.1.4"
+ merge v3.2.1-rel tag:"3.2.1"
+ checkout v3.2-dev
+ commit id:"update version in src/oas.md to 3.2.2"
+ checkout v3.3-dev
+ commit id:"3.3 work"
+```
#### Active branches
@@ -129,20 +184,28 @@ Contributions to this repository should follow the style guide as described in t
### Markdown
Markdown files in this project should follow the style enforced by the [markdownlint tool](https://www.npmjs.com/package/markdownlint),
-as configured by the `.markdownlint.json` file in the root of the project.
+as configured by the `.markdownlint.yaml` file in the root of the project.
+The `markdownlint` tool can also fix formatting, which can save time with tables in particular.
The following additional rules should be followed but currently are not enforced by tooling:
-1. The first mention of a normative reference or an OAS-defined Object in a (sub)*section is a link, additional mentions are not
-2. OAS-defined Foo Bar Objects are written in this style, and are not monospaced
-3. "example" instead of "sample" - this spec is not about statistics
-4. Use "OpenAPI Object" instead of "root"
-5. Fixed fields are monospaced
-6. Field values are monospaced in JSON notation: `true`, `false`, `null`, `"header"` (with double-quotes around string values), ...
-7. A combination of fixed field name with example value uses JS notation: `in: "header"`, combining rules 5 and 6
+1. The first mention of a normative reference or an OAS-defined Object in a (sub)*section is a link, additional mentions are not.
+2. OAS-defined Objects such as Schema Objects are written in this style, and are not monospaced.
+3. Use "example" instead of "sample" - this spec is not about statistics.
+4. Use "OpenAPI Object" instead of "root".
+5. Fixed fields are monospaced.
+6. Field values are monospaced in JSON notation: `true`, `false`, `null`, `"header"` (with double-quotes around string values).
+7. A combination of fixed field name with example value uses JS notation: `in: "header"`, combining rules 5 and 6.
8. An exception to 5-7 is colloquial use, for example "values of type `array` or `object`" - "type" is not monospaced, so the monospaced values aren't enclosed in double quotes.
9. Use Oxford commas, avoid Shatner commas.
10. Use `` for link anchors. The `` format has been deprecated.
+11. Headings use [title case](https://en.wikipedia.org/wiki/Title_case) and are followed by a blank line.
+
+Plus some suggestions, rather than rules:
+
+* Use one sentence per line in paragraphs and bullet points, to make diffs and edits easier to compare and understand.
+ A blank line is needed to cause a paragraph break in Markdown.
+* In examples, use realistic values rather than foo/bar.
### Use of "keyword", "field", "property", and "attribute"
@@ -153,10 +216,34 @@ The following additional rules should be followed but currently are not enforced
## Release Process and Scope
-* Issue #3528: [3.x.y patch release approach](https://github.com/OAI/OpenAPI-Specification/issues/3528)
-* Issue #3529: [3.x minor release approach](https://github.com/OAI/OpenAPI-Specification/issues/3529)
-* Issue #3715: [Define and document our schema publishing process](https://github.com/OAI/OpenAPI-Specification/issues/3715)
-* Issue #3785: [Style guide / release checklist for the specification](https://github.com/OAI/OpenAPI-Specification/issues/3785)
+This section relates to the 3.x versions only.
+
+### Minor Releases
+
+Our roadmap for 3.x releases is community-driven, meaning the specification is open for proposed additions by anyone (see [Proposals for Specification Changes](#proposals-for-specification-changes)), in addition to the issues already on the project backlog.
+
+Changes in minor releases (such as 3.2, 3.3) meet the following criteria:
+
+* Are **backwards-compatible** and be reasonably easy to implement in tooling that already supports the previous minor version.
+ For example, new optional fields can be added.
+* Drive quality-of-life improvements to support how OpenAPI is used by practitioners, so that OpenAPI evolves to continue to meet user needs.
+ For example, adding fields to support changes in other standards, or adopting common `x-*` extension fields into the specification.
+* Bring the future closer by making changes that are in line with future 3.x releases and the planned OpenAPI 4.x (Moonwalk) specification as the details of that become available.
+* Make the specification document clearer or easier to understand.
+
+A minor release is due when there are some meaningful features (including one or a small number of headline features).
+
+### Patch Releases
+
+Patch releases reflect a constant quest for improving the active minor versions of OpenAPI.
+Since we do not edit specification documents after publication, even the smallest change has to be in a new release.
+
+Changes in patch releases meet the following criteria:
+
+* Editorial changes such as spelling or formatting fixes, including link updates.
+* Clarifications or additions that do not change the meaning of the specification.
+
+Patch releases are created as often as there are changes to the specification worth releasing.
## Branching and Versioning
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
deleted file mode 100644
index 30b368d93a..0000000000
--- a/CONTRIBUTORS.md
+++ /dev/null
@@ -1,12 +0,0 @@
-* Darrel Miller [@darrelmiller](https://github.com/darrelmiller)
-* Henry Andrews [@handrews](https://github.com/handrews)
-* Jason Harmon [@jharmn](https://github.com/jharmn)
-* Jeremy Whitlock [@whitlockjc](https://github.com/whitlockjc)
-* Karen Etheridge [@karenetheridge](https://github.com/karenetheridge)
-* Kris Hahn [@KrisHahn](https://github.com/krishahn)
-* Marsh Gardiner [@earth2marsh](https://github.com/earth2marsh)
-* Mike Ralphson [@MikeRalphson](https://github.com/mikeralphson)
-* Ralf Handl [@ralfhandl](https://github.com/ralfhandl)
-* Rob Dolin [@RobDolinMS](https://github.com/robdolinms)
-* Ron Ratovsky [@webron](https://github.com/webron)
-* Tony Tam [@fehguy](https://github.com/fehguy)
diff --git a/package-lock.json b/package-lock.json
index f7d8ebf6f3..77c16be8d7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,12 +16,12 @@
"yargs": "^17.7.2"
},
"devDependencies": {
- "@hyperjump/json-schema": "^1.9.8",
+ "@hyperjump/json-schema": "^1.9.9",
"c8": "^10.1.2",
"markdownlint-cli": "^0.42.0",
"mdv": "^1.3.4",
- "vitest": "^2.1.4",
- "yaml": "^2.6.0"
+ "vitest": "^2.1.5",
+ "yaml": "^2.6.1"
}
},
"node_modules/@babel/code-frame": {
@@ -466,9 +466,9 @@
}
},
"node_modules/@hyperjump/json-schema": {
- "version": "1.9.8",
- "resolved": "https://registry.npmjs.org/@hyperjump/json-schema/-/json-schema-1.9.8.tgz",
- "integrity": "sha512-qmdMpYn8CpYR7z3fxkL6fgkDvMaAEFKtmYu3XDi6hWW2BT+rLl7T4Y4QpafEIR4wkcmCxcJf9me9FmxKpv3i9g==",
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/@hyperjump/json-schema/-/json-schema-1.9.9.tgz",
+ "integrity": "sha512-+3aN6GaJvRzQ3H5JxO4wIuYiw6/iQLJ260DvtlaY5DDK0ti4uPmmEg56ijGsyYABj00GVTxyOkFO1BH9AN707w==",
"dev": true,
"dependencies": {
"@hyperjump/json-pointer": "^1.1.0",
@@ -622,9 +622,9 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.2.tgz",
- "integrity": "sha512-ufoveNTKDg9t/b7nqI3lwbCG/9IJMhADBNjjz/Jn6LxIZxD7T5L8l2uO/wD99945F1Oo8FvgbbZJRguyk/BdzA==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.26.0.tgz",
+ "integrity": "sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==",
"cpu": [
"arm"
],
@@ -635,9 +635,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.2.tgz",
- "integrity": "sha512-iZoYCiJz3Uek4NI0J06/ZxUgwAfNzqltK0MptPDO4OR0a88R4h0DSELMsflS6ibMCJ4PnLvq8f7O1d7WexUvIA==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.26.0.tgz",
+ "integrity": "sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==",
"cpu": [
"arm64"
],
@@ -648,9 +648,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.2.tgz",
- "integrity": "sha512-/UhrIxobHYCBfhi5paTkUDQ0w+jckjRZDZ1kcBL132WeHZQ6+S5v9jQPVGLVrLbNUebdIRpIt00lQ+4Z7ys4Rg==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.26.0.tgz",
+ "integrity": "sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==",
"cpu": [
"arm64"
],
@@ -661,9 +661,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.2.tgz",
- "integrity": "sha512-1F/jrfhxJtWILusgx63WeTvGTwE4vmsT9+e/z7cZLKU8sBMddwqw3UV5ERfOV+H1FuRK3YREZ46J4Gy0aP3qDA==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.26.0.tgz",
+ "integrity": "sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==",
"cpu": [
"x64"
],
@@ -674,9 +674,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.2.tgz",
- "integrity": "sha512-1YWOpFcGuC6iGAS4EI+o3BV2/6S0H+m9kFOIlyFtp4xIX5rjSnL3AwbTBxROX0c8yWtiWM7ZI6mEPTI7VkSpZw==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.26.0.tgz",
+ "integrity": "sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==",
"cpu": [
"arm64"
],
@@ -687,9 +687,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.2.tgz",
- "integrity": "sha512-3qAqTewYrCdnOD9Gl9yvPoAoFAVmPJsBvleabvx4bnu1Kt6DrB2OALeRVag7BdWGWLhP1yooeMLEi6r2nYSOjg==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.26.0.tgz",
+ "integrity": "sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==",
"cpu": [
"x64"
],
@@ -700,9 +700,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.2.tgz",
- "integrity": "sha512-ArdGtPHjLqWkqQuoVQ6a5UC5ebdX8INPuJuJNWRe0RGa/YNhVvxeWmCTFQ7LdmNCSUzVZzxAvUznKaYx645Rig==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.26.0.tgz",
+ "integrity": "sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==",
"cpu": [
"arm"
],
@@ -713,9 +713,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.2.tgz",
- "integrity": "sha512-B6UHHeNnnih8xH6wRKB0mOcJGvjZTww1FV59HqJoTJ5da9LCG6R4SEBt6uPqzlawv1LoEXSS0d4fBlHNWl6iYw==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.26.0.tgz",
+ "integrity": "sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==",
"cpu": [
"arm"
],
@@ -726,9 +726,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.2.tgz",
- "integrity": "sha512-kr3gqzczJjSAncwOS6i7fpb4dlqcvLidqrX5hpGBIM1wtt0QEVtf4wFaAwVv8QygFU8iWUMYEoJZWuWxyua4GQ==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.26.0.tgz",
+ "integrity": "sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==",
"cpu": [
"arm64"
],
@@ -739,9 +739,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.2.tgz",
- "integrity": "sha512-TDdHLKCWgPuq9vQcmyLrhg/bgbOvIQ8rtWQK7MRxJ9nvaxKx38NvY7/Lo6cYuEnNHqf6rMqnivOIPIQt6H2AoA==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.26.0.tgz",
+ "integrity": "sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==",
"cpu": [
"arm64"
],
@@ -752,9 +752,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.2.tgz",
- "integrity": "sha512-xv9vS648T3X4AxFFZGWeB5Dou8ilsv4VVqJ0+loOIgDO20zIhYfDLkk5xoQiej2RiSQkld9ijF/fhLeonrz2mw==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.26.0.tgz",
+ "integrity": "sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==",
"cpu": [
"ppc64"
],
@@ -765,9 +765,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.2.tgz",
- "integrity": "sha512-tbtXwnofRoTt223WUZYiUnbxhGAOVul/3StZ947U4A5NNjnQJV5irKMm76G0LGItWs6y+SCjUn/Q0WaMLkEskg==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.26.0.tgz",
+ "integrity": "sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==",
"cpu": [
"riscv64"
],
@@ -778,9 +778,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.2.tgz",
- "integrity": "sha512-gc97UebApwdsSNT3q79glOSPdfwgwj5ELuiyuiMY3pEWMxeVqLGKfpDFoum4ujivzxn6veUPzkGuSYoh5deQ2Q==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.26.0.tgz",
+ "integrity": "sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==",
"cpu": [
"s390x"
],
@@ -791,9 +791,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.2.tgz",
- "integrity": "sha512-jOG/0nXb3z+EM6SioY8RofqqmZ+9NKYvJ6QQaa9Mvd3RQxlH68/jcB/lpyVt4lCiqr04IyaC34NzhUqcXbB5FQ==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.26.0.tgz",
+ "integrity": "sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==",
"cpu": [
"x64"
],
@@ -804,9 +804,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.2.tgz",
- "integrity": "sha512-XAo7cJec80NWx9LlZFEJQxqKOMz/lX3geWs2iNT5CHIERLFfd90f3RYLLjiCBm1IMaQ4VOX/lTC9lWfzzQm14Q==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.26.0.tgz",
+ "integrity": "sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==",
"cpu": [
"x64"
],
@@ -817,9 +817,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.2.tgz",
- "integrity": "sha512-A+JAs4+EhsTjnPQvo9XY/DC0ztaws3vfqzrMNMKlwQXuniBKOIIvAAI8M0fBYiTCxQnElYu7mLk7JrhlQ+HeOw==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.26.0.tgz",
+ "integrity": "sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==",
"cpu": [
"arm64"
],
@@ -830,9 +830,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.2.tgz",
- "integrity": "sha512-ZhcrakbqA1SCiJRMKSU64AZcYzlZ/9M5LaYil9QWxx9vLnkQ9Vnkve17Qn4SjlipqIIBFKjBES6Zxhnvh0EAEw==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.26.0.tgz",
+ "integrity": "sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==",
"cpu": [
"ia32"
],
@@ -843,9 +843,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.2.tgz",
- "integrity": "sha512-2mLH46K1u3r6uwc95hU+OR9q/ggYMpnS7pSp83Ece1HUQgF9Nh/QwTK5rcgbFnV9j+08yBrU5sA/P0RK2MSBNA==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.26.0.tgz",
+ "integrity": "sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==",
"cpu": [
"x64"
],
@@ -893,13 +893,13 @@
}
},
"node_modules/@vitest/expect": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.4.tgz",
- "integrity": "sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz",
+ "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==",
"dev": true,
"dependencies": {
- "@vitest/spy": "2.1.4",
- "@vitest/utils": "2.1.4",
+ "@vitest/spy": "2.1.5",
+ "@vitest/utils": "2.1.5",
"chai": "^5.1.2",
"tinyrainbow": "^1.2.0"
},
@@ -908,12 +908,12 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.4.tgz",
- "integrity": "sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz",
+ "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==",
"dev": true,
"dependencies": {
- "@vitest/spy": "2.1.4",
+ "@vitest/spy": "2.1.5",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.12"
},
@@ -934,9 +934,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.4.tgz",
- "integrity": "sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz",
+ "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==",
"dev": true,
"dependencies": {
"tinyrainbow": "^1.2.0"
@@ -946,12 +946,12 @@
}
},
"node_modules/@vitest/runner": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.4.tgz",
- "integrity": "sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz",
+ "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==",
"dev": true,
"dependencies": {
- "@vitest/utils": "2.1.4",
+ "@vitest/utils": "2.1.5",
"pathe": "^1.1.2"
},
"funding": {
@@ -959,12 +959,12 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.4.tgz",
- "integrity": "sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz",
+ "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==",
"dev": true,
"dependencies": {
- "@vitest/pretty-format": "2.1.4",
+ "@vitest/pretty-format": "2.1.5",
"magic-string": "^0.30.12",
"pathe": "^1.1.2"
},
@@ -973,9 +973,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.4.tgz",
- "integrity": "sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz",
+ "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==",
"dev": true,
"dependencies": {
"tinyspy": "^3.0.2"
@@ -985,12 +985,12 @@
}
},
"node_modules/@vitest/utils": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.4.tgz",
- "integrity": "sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz",
+ "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==",
"dev": true,
"dependencies": {
- "@vitest/pretty-format": "2.1.4",
+ "@vitest/pretty-format": "2.1.5",
"loupe": "^3.1.2",
"tinyrainbow": "^1.2.0"
},
@@ -1842,6 +1842,12 @@
"is-arrayish": "^0.2.1"
}
},
+ "node_modules/es-module-lexer": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+ "dev": true
+ },
"node_modules/esbuild": {
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
@@ -3386,14 +3392,14 @@
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
},
"node_modules/picocolors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
- "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw=="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"node_modules/postcss": {
- "version": "8.4.47",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
- "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
+ "version": "8.4.49",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
+ "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
"dev": true,
"funding": [
{
@@ -3411,7 +3417,7 @@
],
"dependencies": {
"nanoid": "^3.3.7",
- "picocolors": "^1.1.0",
+ "picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
"engines": {
@@ -3631,9 +3637,9 @@
}
},
"node_modules/rollup": {
- "version": "4.24.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.2.tgz",
- "integrity": "sha512-do/DFGq5g6rdDhdpPq5qb2ecoczeK6y+2UAjdJ5trjQJj5f1AiVdLRWRc9A9/fFukfvJRgM0UXzxBIYMovm5ww==",
+ "version": "4.26.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.26.0.tgz",
+ "integrity": "sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==",
"dev": true,
"dependencies": {
"@types/estree": "1.0.6"
@@ -3646,24 +3652,24 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.24.2",
- "@rollup/rollup-android-arm64": "4.24.2",
- "@rollup/rollup-darwin-arm64": "4.24.2",
- "@rollup/rollup-darwin-x64": "4.24.2",
- "@rollup/rollup-freebsd-arm64": "4.24.2",
- "@rollup/rollup-freebsd-x64": "4.24.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.24.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.24.2",
- "@rollup/rollup-linux-arm64-gnu": "4.24.2",
- "@rollup/rollup-linux-arm64-musl": "4.24.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.24.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.24.2",
- "@rollup/rollup-linux-s390x-gnu": "4.24.2",
- "@rollup/rollup-linux-x64-gnu": "4.24.2",
- "@rollup/rollup-linux-x64-musl": "4.24.2",
- "@rollup/rollup-win32-arm64-msvc": "4.24.2",
- "@rollup/rollup-win32-ia32-msvc": "4.24.2",
- "@rollup/rollup-win32-x64-msvc": "4.24.2",
+ "@rollup/rollup-android-arm-eabi": "4.26.0",
+ "@rollup/rollup-android-arm64": "4.26.0",
+ "@rollup/rollup-darwin-arm64": "4.26.0",
+ "@rollup/rollup-darwin-x64": "4.26.0",
+ "@rollup/rollup-freebsd-arm64": "4.26.0",
+ "@rollup/rollup-freebsd-x64": "4.26.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.26.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.26.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.26.0",
+ "@rollup/rollup-linux-arm64-musl": "4.26.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.26.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.26.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.26.0",
+ "@rollup/rollup-linux-x64-gnu": "4.26.0",
+ "@rollup/rollup-linux-x64-musl": "4.26.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.26.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.26.0",
+ "@rollup/rollup-win32-x64-msvc": "4.26.0",
"fsevents": "~2.3.2"
}
},
@@ -3915,11 +3921,10 @@
}
},
"node_modules/std-env": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
- "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
- "dev": true,
- "license": "MIT"
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz",
+ "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==",
+ "dev": true
},
"node_modules/streamx": {
"version": "2.20.0",
@@ -4258,9 +4263,9 @@
}
},
"node_modules/vite": {
- "version": "5.4.10",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz",
- "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==",
+ "version": "5.4.11",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz",
+ "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==",
"dev": true,
"dependencies": {
"esbuild": "^0.21.3",
@@ -4317,13 +4322,14 @@
}
},
"node_modules/vite-node": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.4.tgz",
- "integrity": "sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz",
+ "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==",
"dev": true,
"dependencies": {
"cac": "^6.7.14",
"debug": "^4.3.7",
+ "es-module-lexer": "^1.5.4",
"pathe": "^1.1.2",
"vite": "^5.0.0"
},
@@ -4361,30 +4367,30 @@
"dev": true
},
"node_modules/vitest": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.4.tgz",
- "integrity": "sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==",
- "dev": true,
- "dependencies": {
- "@vitest/expect": "2.1.4",
- "@vitest/mocker": "2.1.4",
- "@vitest/pretty-format": "^2.1.4",
- "@vitest/runner": "2.1.4",
- "@vitest/snapshot": "2.1.4",
- "@vitest/spy": "2.1.4",
- "@vitest/utils": "2.1.4",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz",
+ "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==",
+ "dev": true,
+ "dependencies": {
+ "@vitest/expect": "2.1.5",
+ "@vitest/mocker": "2.1.5",
+ "@vitest/pretty-format": "^2.1.5",
+ "@vitest/runner": "2.1.5",
+ "@vitest/snapshot": "2.1.5",
+ "@vitest/spy": "2.1.5",
+ "@vitest/utils": "2.1.5",
"chai": "^5.1.2",
"debug": "^4.3.7",
"expect-type": "^1.1.0",
"magic-string": "^0.30.12",
"pathe": "^1.1.2",
- "std-env": "^3.7.0",
+ "std-env": "^3.8.0",
"tinybench": "^2.9.0",
"tinyexec": "^0.3.1",
"tinypool": "^1.0.1",
"tinyrainbow": "^1.2.0",
"vite": "^5.0.0",
- "vite-node": "2.1.4",
+ "vite-node": "2.1.5",
"why-is-node-running": "^2.3.0"
},
"bin": {
@@ -4399,8 +4405,8 @@
"peerDependencies": {
"@edge-runtime/vm": "*",
"@types/node": "^18.0.0 || >=20.0.0",
- "@vitest/browser": "2.1.4",
- "@vitest/ui": "2.1.4",
+ "@vitest/browser": "2.1.5",
+ "@vitest/ui": "2.1.5",
"happy-dom": "*",
"jsdom": "*"
},
@@ -4669,9 +4675,9 @@
}
},
"node_modules/yaml": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
- "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
+ "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
"dev": true,
"bin": {
"yaml": "bin.mjs"
diff --git a/package.json b/package.json
index e8cdb13a86..7ca32dab47 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,8 @@
"license": "Apache-2.0",
"scripts": {
"build": "bash ./scripts/md2html/build.sh",
- "test": "c8 --100 vitest --watch=false"
+ "test": "c8 --100 vitest --watch=false && bash scripts/schema-test-coverage.sh",
+ "validate-markdown": "npx mdv src/oas.md && npx markdownlint-cli src/oas.md"
},
"readmeFilename": "README.md",
"files": [
@@ -29,12 +30,12 @@
"yargs": "^17.7.2"
},
"devDependencies": {
- "@hyperjump/json-schema": "^1.9.8",
+ "@hyperjump/json-schema": "^1.9.9",
"c8": "^10.1.2",
"markdownlint-cli": "^0.42.0",
"mdv": "^1.3.4",
- "vitest": "^2.1.4",
- "yaml": "^2.6.0"
+ "vitest": "^2.1.5",
+ "yaml": "^2.6.1"
},
"keywords": [
"OpenAPI",
diff --git a/schemas/v3.1/schema.yaml b/schemas/v3.1/schema.yaml
index dbb4c756ad..54c49a2f97 100644
--- a/schemas/v3.1/schema.yaml
+++ b/schemas/v3.1/schema.yaml
@@ -53,7 +53,7 @@ unevaluatedProperties: false
$defs:
info:
- $comment: https://spec.openapis.org/oas/v3.1.0#info-object
+ $comment: https://spec.openapis.org/oas/v3.1#info-object
type: object
properties:
title:
@@ -78,7 +78,7 @@ $defs:
unevaluatedProperties: false
contact:
- $comment: https://spec.openapis.org/oas/v3.1.0#contact-object
+ $comment: https://spec.openapis.org/oas/v3.1#contact-object
type: object
properties:
name:
@@ -93,7 +93,7 @@ $defs:
unevaluatedProperties: false
license:
- $comment: https://spec.openapis.org/oas/v3.1.0#license-object
+ $comment: https://spec.openapis.org/oas/v3.1#license-object
type: object
properties:
name:
@@ -114,7 +114,7 @@ $defs:
unevaluatedProperties: false
server:
- $comment: https://spec.openapis.org/oas/v3.1.0#server-object
+ $comment: https://spec.openapis.org/oas/v3.1#server-object
type: object
properties:
url:
@@ -131,7 +131,7 @@ $defs:
unevaluatedProperties: false
server-variable:
- $comment: https://spec.openapis.org/oas/v3.1.0#server-variable-object
+ $comment: https://spec.openapis.org/oas/v3.1#server-variable-object
type: object
properties:
enum:
@@ -149,7 +149,7 @@ $defs:
unevaluatedProperties: false
components:
- $comment: https://spec.openapis.org/oas/v3.1.0#components-object
+ $comment: https://spec.openapis.org/oas/v3.1#components-object
type: object
properties:
schemas:
@@ -201,7 +201,7 @@ $defs:
unevaluatedProperties: false
paths:
- $comment: https://spec.openapis.org/oas/v3.1.0#paths-object
+ $comment: https://spec.openapis.org/oas/v3.1#paths-object
type: object
patternProperties:
'^/':
@@ -210,7 +210,7 @@ $defs:
unevaluatedProperties: false
path-item:
- $comment: https://spec.openapis.org/oas/v3.1.0#path-item-object
+ $comment: https://spec.openapis.org/oas/v3.1#path-item-object
type: object
properties:
$ref:
@@ -248,7 +248,7 @@ $defs:
unevaluatedProperties: false
operation:
- $comment: https://spec.openapis.org/oas/v3.1.0#operation-object
+ $comment: https://spec.openapis.org/oas/v3.1#operation-object
type: object
properties:
tags:
@@ -290,7 +290,7 @@ $defs:
unevaluatedProperties: false
external-documentation:
- $comment: https://spec.openapis.org/oas/v3.1.0#external-documentation-object
+ $comment: https://spec.openapis.org/oas/v3.1#external-documentation-object
type: object
properties:
description:
@@ -304,7 +304,7 @@ $defs:
unevaluatedProperties: false
parameter:
- $comment: https://spec.openapis.org/oas/v3.1.0#parameter-object
+ $comment: https://spec.openapis.org/oas/v3.1#parameter-object
type: object
properties:
name:
@@ -444,7 +444,7 @@ $defs:
$ref: '#/$defs/parameter'
request-body:
- $comment: https://spec.openapis.org/oas/v3.1.0#request-body-object
+ $comment: https://spec.openapis.org/oas/v3.1#request-body-object
type: object
properties:
description:
@@ -470,7 +470,7 @@ $defs:
$ref: '#/$defs/request-body'
content:
- $comment: https://spec.openapis.org/oas/v3.1.0#fixed-fields-10
+ $comment: https://spec.openapis.org/oas/v3.1#fixed-fields-10
type: object
additionalProperties:
$ref: '#/$defs/media-type'
@@ -478,7 +478,7 @@ $defs:
format: media-range
media-type:
- $comment: https://spec.openapis.org/oas/v3.1.0#media-type-object
+ $comment: https://spec.openapis.org/oas/v3.1#media-type-object
type: object
properties:
schema:
@@ -493,7 +493,7 @@ $defs:
unevaluatedProperties: false
encoding:
- $comment: https://spec.openapis.org/oas/v3.1.0#encoding-object
+ $comment: https://spec.openapis.org/oas/v3.1#encoding-object
type: object
properties:
contentType:
@@ -521,7 +521,7 @@ $defs:
unevaluatedProperties: false
responses:
- $comment: https://spec.openapis.org/oas/v3.1.0#responses-object
+ $comment: https://spec.openapis.org/oas/v3.1#responses-object
type: object
properties:
default:
@@ -540,7 +540,7 @@ $defs:
required: [default]
response:
- $comment: https://spec.openapis.org/oas/v3.1.0#response-object
+ $comment: https://spec.openapis.org/oas/v3.1#response-object
type: object
properties:
description:
@@ -571,7 +571,7 @@ $defs:
$ref: '#/$defs/response'
callbacks:
- $comment: https://spec.openapis.org/oas/v3.1.0#callback-object
+ $comment: https://spec.openapis.org/oas/v3.1#callback-object
type: object
$ref: '#/$defs/specification-extensions'
additionalProperties:
@@ -588,7 +588,7 @@ $defs:
$ref: '#/$defs/callbacks'
example:
- $comment: https://spec.openapis.org/oas/v3.1.0#example-object
+ $comment: https://spec.openapis.org/oas/v3.1#example-object
type: object
properties:
summary:
@@ -617,7 +617,7 @@ $defs:
$ref: '#/$defs/example'
link:
- $comment: https://spec.openapis.org/oas/v3.1.0#link-object
+ $comment: https://spec.openapis.org/oas/v3.1#link-object
type: object
properties:
operationRef:
@@ -651,7 +651,7 @@ $defs:
$ref: '#/$defs/link'
header:
- $comment: https://spec.openapis.org/oas/v3.1.0#header-object
+ $comment: https://spec.openapis.org/oas/v3.1#header-object
type: object
properties:
description:
@@ -697,7 +697,7 @@ $defs:
$ref: '#/$defs/header'
tag:
- $comment: https://spec.openapis.org/oas/v3.1.0#tag-object
+ $comment: https://spec.openapis.org/oas/v3.1#tag-object
type: object
properties:
name:
@@ -712,7 +712,7 @@ $defs:
unevaluatedProperties: false
reference:
- $comment: https://spec.openapis.org/oas/v3.1.0#reference-object
+ $comment: https://spec.openapis.org/oas/v3.1#reference-object
type: object
properties:
$ref:
@@ -724,14 +724,14 @@ $defs:
type: string
schema:
- $comment: https://spec.openapis.org/oas/v3.1.0#schema-object
+ $comment: https://spec.openapis.org/oas/v3.1#schema-object
$dynamicAnchor: meta
type:
- object
- boolean
security-scheme:
- $comment: https://spec.openapis.org/oas/v3.1.0#security-scheme-object
+ $comment: https://spec.openapis.org/oas/v3.1#security-scheme-object
type: object
properties:
type:
@@ -932,7 +932,7 @@ $defs:
unevaluatedProperties: false
security-requirement:
- $comment: https://spec.openapis.org/oas/v3.1.0#security-requirement-object
+ $comment: https://spec.openapis.org/oas/v3.1#security-requirement-object
type: object
additionalProperties:
type: array
@@ -940,7 +940,7 @@ $defs:
type: string
specification-extensions:
- $comment: https://spec.openapis.org/oas/v3.1.0#specification-extensions
+ $comment: https://spec.openapis.org/oas/v3.1#specification-extensions
patternProperties:
'^x-': true
diff --git a/scripts/md2html/build.sh b/scripts/md2html/build.sh
index 766bd94855..f716e815bc 100755
--- a/scripts/md2html/build.sh
+++ b/scripts/md2html/build.sh
@@ -40,20 +40,33 @@ cp -p ../../node_modules/respec/builds/respec-w3c.* ../../deploy/js/
latest=`git describe --abbrev=0 --tags`
latestCopied=none
-for filename in ../../versions/[23456789].*.md ; do
+lastMinor="-"
+for filename in $(ls -1 ../../versions/[23456789].*.md | sort -r) ; do
version=$(basename "$filename" .md)
+ minorVersion=${version:0:3}
tempfile=../../deploy/oas/v$version-tmp.html
echo -e "\n=== v$version ==="
+
node md2html.js --maintainers ./history/MAINTAINERS_v$version.md ${filename} > $tempfile
npx respec --use-local --src $tempfile --out ../../deploy/oas/v$version.html
rm $tempfile
+
if [ $version = $latest ]; then
if [[ ${version} != *"rc"* ]];then
# version is not a Release Candidate
- cp -p ../../deploy/oas/v$version.html ../../deploy/oas/latest.html
+ pushd ../../deploy/oas
+ ln -sf v$version.html latest.html
+ popd
latestCopied=v$version
fi
fi
+
+ if [ ${minorVersion} != ${lastMinor} ] && [ ${minorVersion} != 2.0 ]; then
+ pushd ../../deploy/oas
+ ln -sf v$version.html v$minorVersion.html
+ popd
+ lastMinor=$minorVersion
+ fi
done
echo Latest tag is $latest, copied $latestCopied to latest.html
diff --git a/scripts/schema-test-coverage.mjs b/scripts/schema-test-coverage.mjs
new file mode 100644
index 0000000000..9953a5c291
--- /dev/null
+++ b/scripts/schema-test-coverage.mjs
@@ -0,0 +1,132 @@
+import { readdir, readFile } from "node:fs/promises";
+import YAML from "yaml";
+import { join } from "node:path";
+import { argv } from "node:process";
+import "@hyperjump/json-schema/draft-2020-12";
+import "@hyperjump/json-schema/draft-04";
+import {
+ compile,
+ getSchema,
+ interpret,
+ Validation,
+ BASIC,
+} from "@hyperjump/json-schema/experimental";
+import * as Instance from "@hyperjump/json-schema/instance/experimental";
+
+/**
+ * @import { AST } from "@hyperjump/json-schema/experimental"
+ * @import { Json } from "@hyperjump/json-schema"
+ */
+
+import contentTypeParser from "content-type";
+import { addMediaTypePlugin } from "@hyperjump/browser";
+import { buildSchemaDocument } from "@hyperjump/json-schema/experimental";
+
+addMediaTypePlugin("application/schema+yaml", {
+ parse: async (response) => {
+ const contentType = contentTypeParser.parse(
+ response.headers.get("content-type") ?? "",
+ );
+ const contextDialectId =
+ contentType.parameters.schema ?? contentType.parameters.profile;
+
+ const foo = YAML.parse(await response.text());
+ return buildSchemaDocument(foo, response.url, contextDialectId);
+ },
+ fileMatcher: (path) => path.endsWith(".yaml"),
+});
+
+/** @type (testDirectory: string) => AsyncGenerator<[string,Json]> */
+const tests = async function* (testDirectory) {
+ for (const file of await readdir(testDirectory, {
+ recursive: true,
+ withFileTypes: true,
+ })) {
+ if (!file.isFile() || !file.name.endsWith(".yaml")) {
+ continue;
+ }
+
+ const testPath = join(file.parentPath, file.name);
+ const testJson = await readFile(testPath, "utf8");
+
+ yield [testPath, YAML.parse(testJson)];
+ }
+};
+
+/** @type (testDirectory: string) => Promise */
+const runTests = async (testDirectory) => {
+ for await (const [name, test] of tests(testDirectory)) {
+ const instance = Instance.fromJs(test);
+
+ const result = interpret(compiled, instance, BASIC);
+
+ if (!result.valid) {
+ console.log("Failed:", name, result.errors);
+ }
+ }
+};
+
+/** @type (ast: AST) => string[] */
+const keywordLocations = (ast) => {
+ /** @type string[] */
+ const locations = [];
+ for (const schemaLocation in ast) {
+ if (schemaLocation === "metaData") {
+ continue;
+ }
+
+ if (Array.isArray(ast[schemaLocation])) {
+ for (const keyword of ast[schemaLocation]) {
+ if (Array.isArray(keyword)) {
+ locations.push(keyword[1]);
+ }
+ }
+ }
+ }
+
+ return locations;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+const schema = await getSchema(argv[2]);
+const compiled = await compile(schema);
+
+/** @type Set */
+const visitedLocations = new Set();
+const baseInterpret = Validation.interpret;
+Validation.interpret = (url, instance, ast, dynamicAnchors, quiet) => {
+ if (Array.isArray(ast[url])) {
+ for (const keywordNode of ast[url]) {
+ if (Array.isArray(keywordNode)) {
+ visitedLocations.add(keywordNode[1]);
+ }
+ }
+ }
+ return baseInterpret(url, instance, ast, dynamicAnchors, quiet);
+};
+
+await runTests(argv[3]);
+Validation.interpret = baseInterpret;
+
+// console.log("Covered:", visitedLocations);
+
+const allKeywords = keywordLocations(compiled.ast);
+const notCovered = allKeywords.filter(
+ (location) => !visitedLocations.has(location),
+);
+if (notCovered.length > 0) {
+ console.log("NOT Covered:", notCovered.length, "of", allKeywords.length);
+ const maxNotCovered = 20;
+ const firstNotCovered = notCovered.slice(0, maxNotCovered);
+ if (notCovered.length > maxNotCovered) firstNotCovered.push("...");
+ console.log(firstNotCovered);
+}
+
+console.log(
+ "Covered:",
+ visitedLocations.size,
+ "of",
+ allKeywords.length,
+ "(" + Math.floor((visitedLocations.size / allKeywords.length) * 100) + "%)",
+);
diff --git a/scripts/schema-test-coverage.sh b/scripts/schema-test-coverage.sh
new file mode 100755
index 0000000000..0e4ed3883e
--- /dev/null
+++ b/scripts/schema-test-coverage.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+
+# Author: @ralfhandl
+
+# Run this script from the root of the repo
+
+echo
+echo "Schema Test Coverage"
+echo
+
+for schemaDir in schemas/v3* ; do
+ version=$(basename "$schemaDir")
+ echo $version
+
+ node scripts/schema-test-coverage.mjs $schemaDir/schema.yaml tests/$version/pass
+
+ echo
+done
\ No newline at end of file
diff --git a/src/schemas/validation/schema.yaml b/src/schemas/validation/schema.yaml
index dbb4c756ad..54c49a2f97 100644
--- a/src/schemas/validation/schema.yaml
+++ b/src/schemas/validation/schema.yaml
@@ -53,7 +53,7 @@ unevaluatedProperties: false
$defs:
info:
- $comment: https://spec.openapis.org/oas/v3.1.0#info-object
+ $comment: https://spec.openapis.org/oas/v3.1#info-object
type: object
properties:
title:
@@ -78,7 +78,7 @@ $defs:
unevaluatedProperties: false
contact:
- $comment: https://spec.openapis.org/oas/v3.1.0#contact-object
+ $comment: https://spec.openapis.org/oas/v3.1#contact-object
type: object
properties:
name:
@@ -93,7 +93,7 @@ $defs:
unevaluatedProperties: false
license:
- $comment: https://spec.openapis.org/oas/v3.1.0#license-object
+ $comment: https://spec.openapis.org/oas/v3.1#license-object
type: object
properties:
name:
@@ -114,7 +114,7 @@ $defs:
unevaluatedProperties: false
server:
- $comment: https://spec.openapis.org/oas/v3.1.0#server-object
+ $comment: https://spec.openapis.org/oas/v3.1#server-object
type: object
properties:
url:
@@ -131,7 +131,7 @@ $defs:
unevaluatedProperties: false
server-variable:
- $comment: https://spec.openapis.org/oas/v3.1.0#server-variable-object
+ $comment: https://spec.openapis.org/oas/v3.1#server-variable-object
type: object
properties:
enum:
@@ -149,7 +149,7 @@ $defs:
unevaluatedProperties: false
components:
- $comment: https://spec.openapis.org/oas/v3.1.0#components-object
+ $comment: https://spec.openapis.org/oas/v3.1#components-object
type: object
properties:
schemas:
@@ -201,7 +201,7 @@ $defs:
unevaluatedProperties: false
paths:
- $comment: https://spec.openapis.org/oas/v3.1.0#paths-object
+ $comment: https://spec.openapis.org/oas/v3.1#paths-object
type: object
patternProperties:
'^/':
@@ -210,7 +210,7 @@ $defs:
unevaluatedProperties: false
path-item:
- $comment: https://spec.openapis.org/oas/v3.1.0#path-item-object
+ $comment: https://spec.openapis.org/oas/v3.1#path-item-object
type: object
properties:
$ref:
@@ -248,7 +248,7 @@ $defs:
unevaluatedProperties: false
operation:
- $comment: https://spec.openapis.org/oas/v3.1.0#operation-object
+ $comment: https://spec.openapis.org/oas/v3.1#operation-object
type: object
properties:
tags:
@@ -290,7 +290,7 @@ $defs:
unevaluatedProperties: false
external-documentation:
- $comment: https://spec.openapis.org/oas/v3.1.0#external-documentation-object
+ $comment: https://spec.openapis.org/oas/v3.1#external-documentation-object
type: object
properties:
description:
@@ -304,7 +304,7 @@ $defs:
unevaluatedProperties: false
parameter:
- $comment: https://spec.openapis.org/oas/v3.1.0#parameter-object
+ $comment: https://spec.openapis.org/oas/v3.1#parameter-object
type: object
properties:
name:
@@ -444,7 +444,7 @@ $defs:
$ref: '#/$defs/parameter'
request-body:
- $comment: https://spec.openapis.org/oas/v3.1.0#request-body-object
+ $comment: https://spec.openapis.org/oas/v3.1#request-body-object
type: object
properties:
description:
@@ -470,7 +470,7 @@ $defs:
$ref: '#/$defs/request-body'
content:
- $comment: https://spec.openapis.org/oas/v3.1.0#fixed-fields-10
+ $comment: https://spec.openapis.org/oas/v3.1#fixed-fields-10
type: object
additionalProperties:
$ref: '#/$defs/media-type'
@@ -478,7 +478,7 @@ $defs:
format: media-range
media-type:
- $comment: https://spec.openapis.org/oas/v3.1.0#media-type-object
+ $comment: https://spec.openapis.org/oas/v3.1#media-type-object
type: object
properties:
schema:
@@ -493,7 +493,7 @@ $defs:
unevaluatedProperties: false
encoding:
- $comment: https://spec.openapis.org/oas/v3.1.0#encoding-object
+ $comment: https://spec.openapis.org/oas/v3.1#encoding-object
type: object
properties:
contentType:
@@ -521,7 +521,7 @@ $defs:
unevaluatedProperties: false
responses:
- $comment: https://spec.openapis.org/oas/v3.1.0#responses-object
+ $comment: https://spec.openapis.org/oas/v3.1#responses-object
type: object
properties:
default:
@@ -540,7 +540,7 @@ $defs:
required: [default]
response:
- $comment: https://spec.openapis.org/oas/v3.1.0#response-object
+ $comment: https://spec.openapis.org/oas/v3.1#response-object
type: object
properties:
description:
@@ -571,7 +571,7 @@ $defs:
$ref: '#/$defs/response'
callbacks:
- $comment: https://spec.openapis.org/oas/v3.1.0#callback-object
+ $comment: https://spec.openapis.org/oas/v3.1#callback-object
type: object
$ref: '#/$defs/specification-extensions'
additionalProperties:
@@ -588,7 +588,7 @@ $defs:
$ref: '#/$defs/callbacks'
example:
- $comment: https://spec.openapis.org/oas/v3.1.0#example-object
+ $comment: https://spec.openapis.org/oas/v3.1#example-object
type: object
properties:
summary:
@@ -617,7 +617,7 @@ $defs:
$ref: '#/$defs/example'
link:
- $comment: https://spec.openapis.org/oas/v3.1.0#link-object
+ $comment: https://spec.openapis.org/oas/v3.1#link-object
type: object
properties:
operationRef:
@@ -651,7 +651,7 @@ $defs:
$ref: '#/$defs/link'
header:
- $comment: https://spec.openapis.org/oas/v3.1.0#header-object
+ $comment: https://spec.openapis.org/oas/v3.1#header-object
type: object
properties:
description:
@@ -697,7 +697,7 @@ $defs:
$ref: '#/$defs/header'
tag:
- $comment: https://spec.openapis.org/oas/v3.1.0#tag-object
+ $comment: https://spec.openapis.org/oas/v3.1#tag-object
type: object
properties:
name:
@@ -712,7 +712,7 @@ $defs:
unevaluatedProperties: false
reference:
- $comment: https://spec.openapis.org/oas/v3.1.0#reference-object
+ $comment: https://spec.openapis.org/oas/v3.1#reference-object
type: object
properties:
$ref:
@@ -724,14 +724,14 @@ $defs:
type: string
schema:
- $comment: https://spec.openapis.org/oas/v3.1.0#schema-object
+ $comment: https://spec.openapis.org/oas/v3.1#schema-object
$dynamicAnchor: meta
type:
- object
- boolean
security-scheme:
- $comment: https://spec.openapis.org/oas/v3.1.0#security-scheme-object
+ $comment: https://spec.openapis.org/oas/v3.1#security-scheme-object
type: object
properties:
type:
@@ -932,7 +932,7 @@ $defs:
unevaluatedProperties: false
security-requirement:
- $comment: https://spec.openapis.org/oas/v3.1.0#security-requirement-object
+ $comment: https://spec.openapis.org/oas/v3.1#security-requirement-object
type: object
additionalProperties:
type: array
@@ -940,7 +940,7 @@ $defs:
type: string
specification-extensions:
- $comment: https://spec.openapis.org/oas/v3.1.0#specification-extensions
+ $comment: https://spec.openapis.org/oas/v3.1#specification-extensions
patternProperties:
'^x-': true
diff --git a/tests/v3.1/schema.test.mjs b/tests/v3.1/schema.test.mjs
index ab56bbb754..17a8b8a18b 100644
--- a/tests/v3.1/schema.test.mjs
+++ b/tests/v3.1/schema.test.mjs
@@ -26,7 +26,7 @@ const parseYamlFromFile = (filePath) => {
setMetaSchemaOutputFormat(BASIC);
-const validateOpenApi = await validate("./schemas/v3.1/schema.yaml");
+const validateOpenApi = await validate("./src/schemas/validation/schema.yaml");
describe("v3.1", () => {
describe("Pass", () => {