From 6f6e76a1f9c748d0ccdeca68ca15157486a2d64f Mon Sep 17 00:00:00 2001 From: Phil Varner Date: Sun, 31 Jul 2022 13:50:47 -0400 Subject: [PATCH] initial move from stac-api-spec to transaction --- .circleci/.spectral.yml | 6 - .circleci/build-openapi.sh | 30 - .circleci/publish.js | 20 - CHANGELOG.md | 177 +- CODE_OF_CONDUCT.md | 76 - CONTRIBUTING.md | 135 - PRINCIPLES.md | 61 - README.md | 239 +- browseable/README.md | 106 - build/index.html | 25 - build/redoc_index.html | 32 - build/swagger-config.yaml | 13 - children/README.md | 206 - children/openapi.yaml | 116 - collections/README.md | 148 - collections/openapi.yaml | 177 - core/README.md | 320 - core/commons.yaml | 881 - core/openapi.yaml | 87 - extensions.md | 103 - fragments/README.md | 20 - fragments/context/README.md | 60 - fragments/context/examples/example.json | 55 - fragments/context/json-schema/schema.json | 42 - fragments/context/openapi.yaml | 34 - fragments/fields/README.md | 177 - fragments/fields/openapi.yaml | 57 - fragments/filter/README.md | 1086 -- fragments/filter/openapi.yaml | 171 - fragments/itemcollection/README.md | 33 - .../examples/itemcollection-sample-full.json | 89 - .../itemcollection-sample-minimal.json | 4 - fragments/itemcollection/openapi.yaml | 35 - fragments/query/README.md | 50 - fragments/query/openapi.yaml | 117 - fragments/sort/README.md | 86 - fragments/sort/openapi.yaml | 58 - implementation.md | 92 - item-search/README.md | 362 - item-search/examples.md | 145 - item-search/openapi.yaml | 312 - ogcapi-features/README.md | 421 - .../extensions/transaction/README.md | 93 - ogcapi-features/extensions/version/README.md | 176 - .../extensions/version/openapi.yaml | 86 - ogcapi-features/openapi.yaml | 428 - .../transaction/openapi.yaml => openapi.yaml | 78 +- overview.md | 225 - package-lock.json | 13697 ++++------------ package.json | 22 +- stac-api.gv | 110 - stac-api.png | Bin 138282 -> 0 bytes stac-spec/.circleci/config.yml | 66 - stac-spec/.circleci/publish-schemas.js | 40 - stac-spec/.circleci/rc.yaml | 43 - stac-spec/.github/pull_request_template.md | 16 - stac-spec/.gitignore | 69 - stac-spec/CHANGELOG.md | 474 - stac-spec/CODE_OF_CONDUCT.md | 76 - stac-spec/CONTRIBUTING.md | 83 - stac-spec/LICENSE | 201 - stac-spec/README.md | 106 - stac-spec/STAC-UML.drawio | 1 - stac-spec/STAC-UML.pdf | Bin 78979 -> 0 bytes stac-spec/best-practices.md | 754 - stac-spec/catalog-spec/README.md | 42 - stac-spec/catalog-spec/catalog-spec.md | 129 - .../catalog-spec/json-schema/catalog.json | 94 - stac-spec/collection-spec/README.md | 46 - stac-spec/collection-spec/collection-spec.md | 332 - .../json-schema/collection.json | 270 - stac-spec/examples/README.md | 91 - stac-spec/examples/catalog.json | 43 - .../collection-with-schemas.json | 277 - .../examples/collection-only/collection.json | 233 - stac-spec/examples/collection.json | 112 - stac-spec/examples/collectionless-item.json | 144 - stac-spec/examples/core-item.json | 125 - stac-spec/examples/extended-item.json | 199 - .../extensions-collection/collection.json | 68 - .../proj-example/proj-example.json | 285 - stac-spec/examples/simple-item.json | 81 - stac-spec/extensions/README.md | 225 - stac-spec/item-spec/README.md | 23 - stac-spec/item-spec/common-metadata.md | 193 - stac-spec/item-spec/item-spec.md | 324 - stac-spec/item-spec/json-schema/basics.json | 18 - stac-spec/item-spec/json-schema/datetime.json | 53 - .../item-spec/json-schema/instrument.json | 32 - stac-spec/item-spec/json-schema/item.json | 272 - .../item-spec/json-schema/licensing.json | 12 - stac-spec/item-spec/json-schema/provider.json | 47 - stac-spec/overview.md | 213 - stac-spec/package.json | 26 - stac-spec/principles.md | 45 - stac-spec/process.md | 120 - 96 files changed, 3769 insertions(+), 23713 deletions(-) delete mode 100644 .circleci/.spectral.yml delete mode 100755 .circleci/build-openapi.sh delete mode 100644 .circleci/publish.js delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 PRINCIPLES.md delete mode 100644 browseable/README.md delete mode 100644 build/index.html delete mode 100644 build/redoc_index.html delete mode 100644 build/swagger-config.yaml delete mode 100644 children/README.md delete mode 100644 children/openapi.yaml delete mode 100644 collections/README.md delete mode 100644 collections/openapi.yaml delete mode 100644 core/README.md delete mode 100644 core/commons.yaml delete mode 100644 core/openapi.yaml delete mode 100644 extensions.md delete mode 100644 fragments/README.md delete mode 100644 fragments/context/README.md delete mode 100644 fragments/context/examples/example.json delete mode 100644 fragments/context/json-schema/schema.json delete mode 100644 fragments/context/openapi.yaml delete mode 100644 fragments/fields/README.md delete mode 100644 fragments/fields/openapi.yaml delete mode 100644 fragments/filter/README.md delete mode 100644 fragments/filter/openapi.yaml delete mode 100644 fragments/itemcollection/README.md delete mode 100644 fragments/itemcollection/examples/itemcollection-sample-full.json delete mode 100644 fragments/itemcollection/examples/itemcollection-sample-minimal.json delete mode 100644 fragments/itemcollection/openapi.yaml delete mode 100644 fragments/query/README.md delete mode 100644 fragments/query/openapi.yaml delete mode 100644 fragments/sort/README.md delete mode 100644 fragments/sort/openapi.yaml delete mode 100644 implementation.md delete mode 100644 item-search/README.md delete mode 100644 item-search/examples.md delete mode 100644 item-search/openapi.yaml delete mode 100644 ogcapi-features/README.md delete mode 100644 ogcapi-features/extensions/transaction/README.md delete mode 100644 ogcapi-features/extensions/version/README.md delete mode 100644 ogcapi-features/extensions/version/openapi.yaml delete mode 100644 ogcapi-features/openapi.yaml rename ogcapi-features/extensions/transaction/openapi.yaml => openapi.yaml (66%) delete mode 100644 overview.md delete mode 100644 stac-api.gv delete mode 100644 stac-api.png delete mode 100644 stac-spec/.circleci/config.yml delete mode 100644 stac-spec/.circleci/publish-schemas.js delete mode 100644 stac-spec/.circleci/rc.yaml delete mode 100644 stac-spec/.github/pull_request_template.md delete mode 100644 stac-spec/.gitignore delete mode 100644 stac-spec/CHANGELOG.md delete mode 100644 stac-spec/CODE_OF_CONDUCT.md delete mode 100644 stac-spec/CONTRIBUTING.md delete mode 100644 stac-spec/LICENSE delete mode 100644 stac-spec/README.md delete mode 100644 stac-spec/STAC-UML.drawio delete mode 100644 stac-spec/STAC-UML.pdf delete mode 100644 stac-spec/best-practices.md delete mode 100644 stac-spec/catalog-spec/README.md delete mode 100644 stac-spec/catalog-spec/catalog-spec.md delete mode 100644 stac-spec/catalog-spec/json-schema/catalog.json delete mode 100644 stac-spec/collection-spec/README.md delete mode 100644 stac-spec/collection-spec/collection-spec.md delete mode 100644 stac-spec/collection-spec/json-schema/collection.json delete mode 100644 stac-spec/examples/README.md delete mode 100644 stac-spec/examples/catalog.json delete mode 100644 stac-spec/examples/collection-only/collection-with-schemas.json delete mode 100644 stac-spec/examples/collection-only/collection.json delete mode 100644 stac-spec/examples/collection.json delete mode 100644 stac-spec/examples/collectionless-item.json delete mode 100644 stac-spec/examples/core-item.json delete mode 100644 stac-spec/examples/extended-item.json delete mode 100644 stac-spec/examples/extensions-collection/collection.json delete mode 100644 stac-spec/examples/extensions-collection/proj-example/proj-example.json delete mode 100644 stac-spec/examples/simple-item.json delete mode 100644 stac-spec/extensions/README.md delete mode 100644 stac-spec/item-spec/README.md delete mode 100644 stac-spec/item-spec/common-metadata.md delete mode 100644 stac-spec/item-spec/item-spec.md delete mode 100644 stac-spec/item-spec/json-schema/basics.json delete mode 100644 stac-spec/item-spec/json-schema/datetime.json delete mode 100644 stac-spec/item-spec/json-schema/instrument.json delete mode 100644 stac-spec/item-spec/json-schema/item.json delete mode 100644 stac-spec/item-spec/json-schema/licensing.json delete mode 100644 stac-spec/item-spec/json-schema/provider.json delete mode 100644 stac-spec/overview.md delete mode 100644 stac-spec/package.json delete mode 100644 stac-spec/principles.md delete mode 100644 stac-spec/process.md diff --git a/.circleci/.spectral.yml b/.circleci/.spectral.yml deleted file mode 100644 index 03d52853..00000000 --- a/.circleci/.spectral.yml +++ /dev/null @@ -1,6 +0,0 @@ -extends: "spectral:oas" -rules: - oas3-api-servers: off - oas3-schema: warn - tag-description: true - oas3-parameter-description: true \ No newline at end of file diff --git a/.circleci/build-openapi.sh b/.circleci/build-openapi.sh deleted file mode 100755 index 55e555e6..00000000 --- a/.circleci/build-openapi.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -PATH=./node_modules/.bin:$PATH - -# find all OpenAPI docs that are not fragments -FNAMES=`find . -name "openapi.yaml" -not -path "./fragments/*" -not -path "./node_modules/*"` - -# use speccy to resolve -for fin in $FNAMES; do - fout=./build/$fin - mkdir -p ${fout%/*} - openapi bundle --ext yaml --output $fout $fin - cp build/redoc_index.html ${fout%/*}/index.html -done - -# use swagger-combine -#swagger-combine build/swagger-config.yaml --continueOnConflictingPaths -o build/openapi.yaml - -# use openapi-merge-cli -#openapi-merge-cli -c build/openapi-merge-config.json -#json2yaml build/openapi-merge.json > build/openapi-merge.yaml - -# use yq -#yq merge -a \ -# build/core/openapi.yaml \ -# build/item-search/openapi.yaml \ -# build/ogcapi-features/openapi.yaml \ -# build/ogcapi-features/extensions/transaction/openapi.yaml \ -# build/ogcapi-features/extensions/version/openapi.yaml \ -# | tee build/openapi-yq.yaml diff --git a/.circleci/publish.js b/.circleci/publish.js deleted file mode 100644 index 01f829e6..00000000 --- a/.circleci/publish.js +++ /dev/null @@ -1,20 +0,0 @@ -const ghpages = require('gh-pages'); - -let args = process.argv.slice(2); -let tag = 'dev'; -if (args.length && args[0].trim().length > 0) { - tag = args[0]; -} - -ghpages.publish('build/', { - src: '**', - dest: tag, - message: 'Publish JSON Schemas [ci skip]', - user: { - name: 'STAC CI', - email: 'ci@stacspec.org' - } -}, error => { - console.error(error ? error : 'Deployed to gh-pages'); - process.exit(error ? 1 : 0); -}); \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 39975cd2..bf0f507d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,193 +6,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [v1.0.0-rc.1] - 2022-03-17 -### Added - -- The CQL2 Accent and Case-insensitive Comparison - (`http://www.opengis.net/spec/cql2/1.0/conf/accent-case-insensitive-comparison`) conformance class - adds the ACCENTI and CASEI functions for case-insensitive comparison. These replace the UPPER and - LOWER psuedo-functions that were previously part of the Advanced Comparison Operators class. - ### Changed -- Query Extension is no longer deprecated. -- Children conformance class now requires the /children endpoint includes all child catalogs or collections - referenced via `child` link relations from the Landing Page - Clarified behavior of Transaction Extension endpoints: - PUT and PATCH of a body that changes the `collection` or `id` is disallowed. - POST, PUT, and PATCH do not need to include the `collection` attribute, as it should be derived from the URL. - POST and PUT can be used with a body that is at least a GeoJSON Feature, but does not have to be an Item, but for which the server can derive a valid Item, e.g., by populating the id and collection fields or adding links - Likewise, POST can be used with a body of a FeatureCollection that contains features that meet the same constraints. -- Specifications now use the term "must" instead of "shall". The semantics of these words are identical. -- Conformance class for Item Search Filter is now - `https://api.stacspec.org/v1.0.0-beta.5/item-search#filter`, whereas before it was incorrectly stated as - `https://api.stacspec.org/v1.0.0-beta.5/item-search#filter:item-search-filter` - -### Deprecated - -### Removed - -### Fixed - -## [v1.0.0-beta.5] - 2022-01-14 - -### Added - -- Added `STAC API - Browseable` conformance class -- Added `STAC API - Children` conformance class -- Added description of how to support both search and browse in an API. -- The paging mechanism via a Link with rel `next` or `prev` as defined for Item Search can also be used - for the STAC API - Features endpoint `/collections/{collection_id}/items`, as described in OAFeat. -- The paging mechanism via a Link with rel `next` or `prev` as defined for items can also be used - for the STAC API - Features and STAC API - Collections endpoint `/collections`. - -### Changed - -- Limit parameter semantics now match OAFeat. Previously, the behavior was not precisely defined. -- Filter Extension updates to align with changes to OAFeat CQL2 spec - - Updated all "CQL" usages to "CQL2" - - Most conformance class URIs are now prefixed with `http://www.opengis.net/spec/cql2/` instead - of `http://www.opengis.net/spec/ogcapi-features-3/` - - Conformance classes `http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/basic-cql`, - `http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/cql-text`, and - `http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/cql-json` have had `cql` replaced - with `cql2` (in addition to the prefix change) to - become `http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2`, - `http://www.opengis.net/spec/cql2/1.0/conf/cql2-text`, and - `http://www.opengis.net/spec/cql2/1.0/conf/cql2-json` - - Significant changes to CQL2 JSON format, now using `op` and `args` structure - - Spatial operator `INTERSECTS` is now `S_INTERSECTS` - - Temporal operator `ANYINTERACTS` is now `T_INTERSECTS` - - Updated Example 3 (now Example 5) to make it clear that property to property comparisons require the - Property-Property Comparisons conformance class - - The CQL2 Case-insensitive Comparison - (`http://www.opengis.net/spec/cql2/1.0/conf/case-insensitive-comparison`) conformance class - that adds UPPER/LOWER terms or function CASEI for case-insensitive comparison has not been added - to this spec yet, since the definition in CQL2 is in flux. -- `service-desc` endpoint may return any service description format, typically a - machine-consumable one (previous restricted required to be OpenAPI 3.0 JSON) -- `service-doc` endpoint may return any service description format, typically a - human-consumable one (previous restricted required to be HTML) - -### Deprecated - -### Removed - -### Fixed - -- Collection conformance class URI should be `https://api.stacspec.org/v1.0.0-beta.XXX/collections` instead - of `http://stacspec.org/spec/api/1.0.0-beta.XXX/extensions/collections` -- definition of Item object was missing `properties` as an attribute -- Filter Extension - examples of using intervals and timestamps in CQL2 were incorrect and have been fixed -- Filter Extension - examples are updated so that text and json examples are equivalent - -## [v1.0.0-beta.4] - 2021-10-05 - -### Added - -- Support binding Sort, Fields, and Context Extensions to STAC Features items resource - endpoint (`/collections/{collectionId}/items`) -- In Collections, added `canonical` rel type, added `/` and `/api` to list of endpoints -- In Item Search, added endpoint table - -### Changed - -- Filter Extension - query language is now referred to as "CQL2" rather than CQL -- Filter Extension now uses OAFeat Part 3 conformance class URIs -- Filter Extension - The following changes have been made to the Filter Extension conformance classes to align with changes to the OAFeat CQL draft. All classes - whose names have changed also have changed conformance URI strings. - - "Basic CQL" now includes the "not equal" operator (`<>`) - - "Basic CQL" has always supported datetime comparisons, but this is now explicitly mentioned - - "Enhanced Comparison Operators" has been renamed "Advanced Comparison Operators". This is the same as the OAFeat CQL definition, except - that it does not require the `upper` and `lower` functions. - - "Enhanced Spatial Operators" has been renamed to just "Spatial Operators" (not to be confused with Basic Spatial Operators) - - "Basic Temporal Operators" and "Enhanced Temporal Operators" have merged into "Temporal Operators" - - "Functions" has been renamed "Custom Functions" - - "Arithmetic" has been renamed "Arithmetic Expressions" - - "Arrays" has been renamed "Array Operators" - - "Queryable Second Operand" has been renamed "Property-Property Comparisons" -- The required Link Relations and endpoints for each conformance class now use the wording of 'shall' - instead of 'should'. While this technically changes the semantics, it was generally understood - previously the semantics were those of 'shall' (must). -- Explicitly state that the `/children` endpoint can return Catalog and Collection objects that have fewer - fields than are available through other endpoints. - -### Deprecated - -### Removed - -### Fixed - -## [v1.0.0-beta.3] - 2021-08-06 - -### Added -- Added STAC API - Collections definition (subset of STAC API - Features) -- More thorough definitions for valid `datetime` and `bbox` query parameter values. - -### Changed -- Query extension not deprecated; recommendation to use Filter (https://github.com/radiantearth/stac-api-spec/pull/157) -- Filter Extension conformance classes refactored to better align with STAC API use cases. -- Renamed conformance class "Queryable First Operand" - (https://api.stacspec.org/v1.0.0-beta.3/item-search#filter:queryable-first-operand) to - "Queryable Second Operand" - (https://api.stacspec.org/v1.0.0-beta.3/item-search#filter:queryable-second-operand) - -### Deprecated - -### Removed -- Remove stac_version and stac_extensions fields in ItemCollection - -### Fixed - -## [v1.0.0-beta.2] - 2021-06-01 - -### Added -- Added Filter extension to integrate OAFeat Part 3 CQL -- Catalog and Collection definitions now have required field "type" -- Added recommendation to enable CORS for public APIs - -### Changed -- Updated all STAC versions to 1.0.0 -- Passing the `ids` parameter to an item search does not deactivate other query parameters [#125](https://github.com/radiantearth/stac-api-spec/pull/125) -- The first extent in a Collection is always the overall extent, followed by more specific extents. [opengeospatial/ogcapi-features#520](https://github.com/opengeospatial/ogcapi-features/pull/520) - -### Deprecated -- Query extension is now deprecated. Replaced by the Filter extension using OGC CQL. - -### Removed - -### Fixed -- Updated text description of root ('/') endpoint (also called landing page) that the return type is a Catalog ## [v1.0.0-beta.1] - 2020-12-10 -### Added -- The landing page returns the conformance classes in a property `conformsTo`, which mirrors `GET /conformances` from OGC APIs. -- Conformance classes for all the major functionality and extensions, to be referenced in a new `conformsTo` JSON object in the landing page. -- Fragments: reusable OpenAPI documents for sort, filter, fields and context, along with explanation of how they work. -- ItemCollection moved from [STAC Core](https://github.com/radiantearth/stac-spec/blob/v0.9.0/item-spec/itemcollection-spec.md) to this repo. - ### Changed -- Major re-organization of the content and directory structure to make better conformance classes. - - STAC API Core is the landing page (a STAC catalog and conformance information). - - Item Search is the `search` cross-collection item search resource. - - STAC API - Features is the OGC API - Features standards to be used in a STAC API. - - Extensions are specified in the relevant functionality directory, though they can share openapi yaml's in the 'fragments' directory. -- Updated to STAC specification version 1.0.0-beta.2 -- Named explicit supported STAC core versions to be from 0.9.0 up to (and not including) 2.0.0 -- Context Extension OpenAPI spec was updated to remove the no longer used `next` attribute -- Added root endpoint Link `search` must have `type` of `application/geo+json` -- Corrected the description of endpoint `/collections` to say it returns an object per OAFeat, instead of an array of Collection -- Updated transaction extension so it aligns with OGC API - Features Part 4: Simple Transactions - -### Deprecated -### Removed - -### Fixed -- BBOX openapi yaml to only allow 4 or 6 element arrays -- Fixed invalid OpenAPI files +- Updated transaction extension so it aligns with OGC API - Features Part 4: Simple Transactions ## Older versions @@ -201,4 +28,4 @@ for STAC API releases prior to or equal to version 0.9.0. [Unreleased]: [v1.0.0-beta.1]: -[v1.0.0-beta.2]: +[v1.0.0-rc.1]: diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index f56c9682..00000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,76 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, 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 behavior that contributes 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 - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual attention or - advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or electronic - address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have 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 to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at [stac-spec-admins@googlegroups.com](mailto:stac-spec-admins@googlegroups.com). All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at - -For answers to common questions about this code of conduct, see - - -[homepage]: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 373ead77..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,135 +0,0 @@ -## Contributing - -Pull Requests are the primary method of contributing to the spec itself, and everyone is welcome to submit -changes. Suggestions for changes to the core will be taken with higher priority if a clear implementation -of STAC API has been built that can highlight the problem. - -We consider everyone using the specification to catalog their data to be a 'contributor', as STAC is -really about the end result of more interoperable data, not just creating a spec for the sake of it. -So if you want to help then the best thing you can do is make new catalogs or build software that uses -the spec. And please do give us feedback. The best place to do so is on our -[gitter channel](https://gitter.im/SpatioTemporal-Asset-Catalog/Lobby). If you are interested in helping -but aren't sure where to, then see the [stac-ecosystem](https://github.com/stac-utils/stac-ecosystem) repo -for ideas on projects to advance STAC. - -## Development Process - -The SpatioTemporal Asset Catalog API specification is under active development. - -The `main` branch is a place of active development, -where a new change in one part of the spec might not yet be fully updated everywhere else. Releases are tagged. The team uses the -[stac-api-spec issue tracker](https://github.com/radiantearth/stac-api-spec/issues) to identify and track all that will be done for -a release. Once all the major issues are resolved the core team makes sure everything is consistent across the spec and -examples. - -### Submitting Pull Requests - -Any proposed changes to the specification should be done as pull requests. Please make these -requests against the [main](https://github.com/radiantearth/stac-api-spec/tree/main) branch. - -Creating a Pull Request will show our PR template, which includes checkbox reminders for a number -of things, including adding an entry the [CHANGELOG](CHANGELOG.md) and making the PR against the `main` -branch. - -All pull requests should submit clean markdown, which is checked by the continuous integration -system. Please use `npm run check` locally, as described in the [next section](#check-files), -to ensure that the checks on the pull request succeed. If it does not then you can look at the -mistakes online, which are the same as running `npm run check` locally would surface. - -All pull requests that modify or create JSON schema files or examples should use -[JSON formatter](https://jsonformatter.org/) to keep files consistent across the repo. - -All pull requests additionally require a review of two STAC core team members. Releases are cut -from main and require 3 approvals. - -### Check files - -The same check-markdown and check-openapi programs that runs as a check on PR's is part of the repo and can be run locally. -To install you'll need npm, which is a standard part of any [node.js installation](https://nodejs.org/en/download/). -Any recent version of node/npm should work. - -If using nvm, run `nvm install`. - -Install the dependencies with npm: - -```bash -npm install -``` - -Then to do the check for markdown and examples you run: - -```bash -npm run check -``` - -This will spit out the same texts that you see online, and you can then go and fix your markdown or examples. - -To just check the markdown, run: - -```bash -npm run check-markdown -``` - -To just validate the OpenAPI definitions, run: - -```bash -npm run check-openapi -``` - -### Working with the OpenAPI files - -The definitive specification for STAC API is provided as an [OpenAPI](http://openapis.org/) 3.0 specification that is -contained within several YAML files in the various directories. These live in the same place as the markdown defining -various parts of the specification. Currently we expect developers to be up to speed with -OpenAPI and using their own tools to modify things. In the future we will provide tools to make it easier to work with. -There are html version of the OpenAPI files online at `https://api.stacspec.org/{version_number}` with `{version_number}` being the git tag or `dev`. - -Often, updating -the JSON Schema and OpenAPI files is one of the harder aspects of creating a change, so please, don't -hesitate to ask for help in doing this! - -## Release Process - -To release a new version of the STAC spec the following list of tasks must be done. - -- **Update Issue Tracker**: Each release has a [milestone](https://github.com/radiantearth/stac-spec/milestones) in the github -issue tracker, and before a release is done all open issues that are filed against it should be reviewed. All issues do not -need to be completed, but the core release team should all review the issues to make sure that the critical ones for the -release have been addressed. Issues that aren't seen as essential should be moved to future releases, so that there are no -open issues against the milestone. -- **Check dependencies**: STAC relies on OGC API - Features and STAC Core specifications at its core, and will likely rely -on additional Features API extensions as well as OGC API - Commons. We aim to always reference the latest version of these, -so before releasing we should check to make sure we are on the latest stable versions, and upgrade if it makes sense. We include -the latest stable STAC core spec version as a 'submodule', so before release we should update that to be the latest. -- **Agreement from core team**: The core STAC API team should meet (on video or on gitter) and decided that the release is ready. -This should include review of the issues, as well as looking at the spec holistically, to make sure the new changes keep -with a coherent whole. -- **Final Spec Read Through**: There should be a final read through of the core specification to make sure it makes sense -and there are no typos, errors, etc. -- **Update the Changelog**: The [changelog](CHANGELOG.md) should be reviewed to make sure it includes all major improvements -in the release. And anything in 'unreleased' section should move to the version of the spec to be released. -- **Check Online API Docs**: Check to make sure the online API docs reflect the release at -(this step may go away once we are confident this works well, as this publishing is in flux) -- **Release on Github**: The final step to create the release is to add a new 'release' on -. This should use a tag like the others, with a 'v' prefix and then the -release number, like v0.5.2. The changelog should be copied over to be the release notes, and then also include a link to -the full milestone of everything closed in the issue tracker. -- **Promote the release**: A blog post and tweet should be composed and sent out, and then inform those in the gitter channel -to post / promote it. - -### Release Candidates - -Before any release that has *major* changes (made as a judgement call by the core contributors) there should be a 'release -candidate' to ensure the wider community of implementors can try it out -and catch any errors *before* a full release. It is only through actual implementations that we can be sure the new spec -version is good, so this step is essential if there are major changes. The release should proceed as normal, but called -vX.Y.Z-RC.1. The core STAC community should be told and encouraged to update their implementations. At least 2 implementations -should be updated to the new specification before there is a real release. And ideally an API client is also -updated. This provides the core sanity check. If there are changes or fixes to the spec or -schemas needed from their feedback then make fixes and do RC2. If it is just fixes to the examples or tooling then no -additional RC is needed. After there is no more changes to spec or schemas then the release process should be done on `main`, -with no changes to the spec - just updating the version numbers. - -## Governance - -The STAC API spec follows the same governance as the [core STAC spec](https://github.com/radiantearth/stac-spec/blob/master/process.md#governance). diff --git a/PRINCIPLES.md b/PRINCIPLES.md deleted file mode 100644 index 4e53b807..00000000 --- a/PRINCIPLES.md +++ /dev/null @@ -1,61 +0,0 @@ -This project will be governed by a set of informal core principles. These principles are not set in stone, -and indeed they should evolve in the same manner that all specifications worked on should - proposed and -reviewed in pull requests, approved by consensus. The goal of the principles is to help avoid -[bikeshedding](http://bikeshed.org/) - lay down some meta-rules so we can focus on creating useful -core geospatial standards. - -- **Creation and evolution of specs in Github**, using Open Source principles -(please read [Producing OSS](http://producingoss.com/) if that phrase doesn't immediately make sense to you). -The collaboration facilities of Github should be used to their full extent. All proposed improvements and -changes should come in the form of pull requests, using code review functionality to discuss changes. - -- **Alignment with OGC standards** - The Open Geospatial Consortium publishes a large set of geospatial standards. - To the greatest extent possible, the STAC API should align with existing and in-progress OGC API standards. The - STAC API has a symbiotic relationship with these standards, as it seeks both to reuse their building blocks and - push them forward in a practical direction. Among the most important of these are: - - [OGC API - Common](https://ogcapi.ogc.org/common/) - - [OGC API - Features](https://ogcapi.ogc.org/features/), particularly [OGC API - Features - Part 1: Core](http://docs.ogc.org/is/17-069r3/17-069r3.html) - - [OGC API - Records](https://ogcapi.ogc.org/records/) - - [Common Query Language (CQL2)](https://docs.ogc.org/DRAFTS/21-065.html), formerly part of OGC - API - Features - Part 3: Filtering and the Common Query Language (CQL) - -- **Web API using JSON + HTTP at the core.** JSON has won over XML, and resource-centric over SOAP. We embrace them and -are not considering legacy options. Forward looking protocols can be considered as extensions, -but the default specifications should be in JSON, following best web API practices. HTTP caching and -error codes should be leveraged at the core. GeoJSON has already defined the core geospatial JSON response, -so it should also be core. As STAC APIs follow a resource-centric, hypermedia-driven model, a core principal -is the use of HTTP Request Methods ("verbs") and the `Content-Type` header to drive behavior on resources ("nouns"). - -- **Small Reusable Pieces Loosely Coupled** - Each specification should be as focused as possible, -defining one core concept and refraining from describing lots of options. Additional options can be made -as separate specifications that build on the core. But the core specs should be small and easily understandble, -with clear defaults for any choice. Handling complex cases should be possible by combining discrete pieces. -Implementors should not be forced to implement lots of options just for basic compliance - they should be -able to pick and choose which pieces are relevant to the problems they are trying to solve. - -- **Specify in OpenAPI 3.0 (formerly known as Swagger) specification.** All web interfaces should be -specified in [OpenAPI 3.0](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md). -This enables generation of live documentation, client libraries and test engines, and makes the spec less ambiguous. -Accompanying human readable specifications should be available in github and auto-built in to html. - -- **Focus on the developer**. Specifications should aim for implementability - any explanation or design choice -should be considered with a developer audience. And specifications should be accessible to developers who do not -have geospatial background. A developer should not need to understand 'projections' to implement a simple feature -access service. But we should think through the spec extensions they could use in the future when their client asks -for data in a different projection. - -- **Working code required.** Proposed changes should be accompanied by working code -(ideally with a link to an online service running the code). A reference implementation should be available -online to power the interactive documentation. Both core conformance classes and extensions follow the -[Maturity Classification](README.md#maturity-classification) model. - -- **Design for scale.** The design should work great with more data than can be imagined right now. -Ideally implementations are built with large test data sets to validate that they will work. -Everything should be compatible with content distribution network (CDN) caching. - -## Resources - -- Open Source Principles - [Producing Open Source Software](http://producingoss.org) by Karl Fogel. -- Best Practices JSON API Design - [JSON API](http://jsonapi.org/) best practices for making API's with JSON -- Pragmatic REST - [Web API Design: Crafting interfaces that developers love](https://pages.apigee.com/rs/apigee/images/api-design-ebook-2012-03.pdf) -- Open API Initiative - [OpenAPIs.org](https://openapis.org/) diff --git a/README.md b/README.md index f5f43502..2029b798 100644 --- a/README.md +++ b/README.md @@ -1,146 +1,93 @@ - -stac-logo - -# STAC API - -- [STAC API](#stac-api) - - [Releases (stable)](#releases-stable) - - [Development (unstable)](#development-unstable) - - [About](#about) - - [Stability Note](#stability-note) - - [Maturity Classification](#maturity-classification) - - [Communication](#communication) - - [In this repository](#in-this-repository) - - [Contributing](#contributing) - -## Releases (stable) - -- [v1.0.0-rc.1](https://github.com/radiantearth/stac-api-spec/tree/v1.0.0-rc.1) (latest) -- [v1.0.0-beta.5](https://github.com/radiantearth/stac-api-spec/tree/v1.0.0-beta.5) -- [v1.0.0-beta.4](https://github.com/radiantearth/stac-api-spec/tree/v1.0.0-beta.4) -- [v1.0.0-beta.3](https://github.com/radiantearth/stac-api-spec/tree/v1.0.0-beta.3) -- [v1.0.0-beta.2](https://github.com/radiantearth/stac-api-spec/tree/v1.0.0-beta.2) -- [v1.0.0-beta.1](https://github.com/radiantearth/stac-api-spec/tree/v1.0.0-beta.1) -- [v0.9.0](https://github.com/radiantearth/stac-api-spec/tree/v0.9.0) - -## Development (unstable) - -The [main](https://github.com/radiantearth/stac-api-spec/tree/main) branch in GitHub is -used for active development and may be unstable. Implementers should reference one of -the release branches above for a stable version of the specification. -**NOTE**: This means that if you are on github.com/radiantearth/stac-api-spec then you are looking at an unreleased, -unstable version of the specification. Use the first listed link on releases to read the current released, stable version -of the spec. -## About - -The SpatioTemporal Asset Catalog (STAC) family of specifications aim to standardize the way geospatial asset metadata is structured and queried. -A 'spatiotemporal asset' is any file that represents information about the earth captured in a certain space and -time. The core STAC specifications live in the GitHub repository [radiantearth/stac-spec](https://github.com/radiantearth/stac-spec). - -A STAC API is the dynamic version of a SpatioTemporal Asset Catalog. It returns a STAC [Catalog](stac-spec/catalog-spec/catalog-spec.md), -[Collection](stac-spec/collection-spec/collection-spec.md), [Item](stac-spec/item-spec/item-spec.md), -or a STAC API [ItemCollection](fragments/itemcollection/README.md), depending on the endpoint. -Catalog and Collection objects are JSON, while Item and ItemCollection objects are GeoJSON-compliant entities with foreign members. -Typically, a Feature is used when returning a single Item object, and FeatureCollection when multiple Item objects (rather than a -JSON array of Item entities). - -The API can be implemented in compliance with the *[OGC API - Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html)* standard -(OAFeat is a shorthand). In this case STAC API can be thought of as a specialized Features API - -to search STAC catalogs, where the features returned are STAC [Item](stac-spec/item-spec/item-spec.md) objects, -that have common properties, links to their assets and geometries that represent the footprints of the geospatial assets. - -The specification for STAC API is provided as files that follow the [OpenAPI](http://openapis.org/) 3.0 specification, -rendered online into HTML at , in addition to human-readable documentation. - -## Stability Note - -This specification has evolved over the past couple years, and is used in production in a variety of deployments. It is -currently in a 'beta' state, with no major changes anticipated. For 1.0.0-rc.1, we remain fully aligned with [OGC API - -Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) Version 1.0, and we are working to stay aligned -as the additional OGC API components mature. This may result in minor changes as things evolve. The STAC API -specification follows [Semantic Versioning](https://semver.org/), so once 1.0.0 is reached any breaking change -will require the spec to go to 2.0.0. - -## Maturity Classification - -Conformance classes and extensions are meant to evolve to maturity, and thus may be in different states -in terms of stability and number of implementations. All extensions must include a -maturity classification, so that STAC API spec users can easily get a sense of how much they can count -on the extension. - -| Maturity Classification | Min Impl # | Description | Stability | -| ----------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -| Proposal | 0 | An idea put forward by a community member to gather feedback | Not stable - breaking changes almost guaranteed as implementers try out the idea. | -| Pilot | 1 | Idea is fleshed out, with examples and a JSON schema, and implemented in one or more catalogs. Additional implementations encouraged to help give feedback | Approaching stability - breaking changes are not anticipated but can easily come from additional feedback | -| Candidate | 3 | A number of implementers are using it and are standing behind it as a solid extension. Can generally count on an extension at this maturity level | Mostly stable, breaking changes require a new version and minor changes are unlikely. | -| Stable | 6 | Highest current level of maturity. The community of extension maintainers commits to a STAC review process for any changes, which are not made lightly. | Completely stable, all changes require a new version number and review process. | -| Deprecated | N/A | A previous extension that has likely been superseded by a newer one or did not work out for some reason. | Will not be updated and may be removed in an upcoming major release. | - -Maturity mostly comes through diverse implementations, so the minimum number of implementations -column is the main gating function for an extension to mature. But extension authors can also -choose to hold back the maturity advancement if they don't feel they are yet ready to commit to -the less breaking changes of the next level. - -A 'mature' classification level will likely be added once there are extensions that have been -stable for over a year and are used in twenty or more implementations. - -## Communication - -For any questions feel free to jump on our [gitter channel](https://gitter.im/SpatioTemporal-Asset-Catalog/Lobby) or email -our [google group](https://groups.google.com/forum/#!forum/stac-spec). The majority of communication about the evolution of -the specification takes place in the [issue tracker](https://github.com/radiantearth/stac-api-spec/issues) and in -[pull requests](https://github.com/radiantearth/stac-api-spec/pulls). - -## In this repository - -The **[Overview](overview.md)** document describes all the various parts of the STAC API and how they fit together. - -**STAC API - Core Specification:** -The *[core](core/)* folder describes the core STAC API specification that enables browsing catalogs and -retrieving the API capabilities. This includes the OpenAPI schemas for STAC Item, Catalog and Collection objects. - -**STAC API - Collections:** -The *[collections](collections)* folder describes how a STAC API Catalog can advertise the Collections it contains. - -**STAC API - Features:** -The *[ogcapi-features](ogcapi-features)* folder describes how a STAC API can fully implement [OGC API - -Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) to expose individual `items` endpoints for search of -each STAC collection. It also includes extensions that can be used to further enhance OAFeat. - -**STAC API - Item Search Specification:** -The *[item-search](item-search)* folder contains the Item Search specification, which enables -cross-collection search of STAC Item objects at a `search` endpoint, as well as a number of extensions. - -**STAC API - Children:** -The *[children](children)* folder describes how a STAC API Catalog can advertise the children (child catalogs or child collections) -it contains. - -**STAC API - Browseable:** -The *[browseable](browseable)* folder describes how a STAC API Catalog can advertise that all Items can be accessed -by following through `child` and `item` link relations. - -**Extensions:** -The *[extensions](extensions.md) document* describes how STAC incubates new functionality, and it links to the existing -extensions that can be added to enrich the functionality of a STAC API. Each has an OpenAPI yaml, but some of the yaml -documents live as fragments in the [fragments/](fragments/) folder. - -**Fragments:** -The *[fragments/](fragments/)* folder contains re-usable building blocks to be used in a STAC API, including common OpenAPI -schemas and parameters for behavior like sorting and filtering. Most all of them are compatible with -OGC API - Features, and the plan is to fully align the relevant functionality and have it be useful for all OAFeat implementations. -OpenAPI YAML documents are provided for each extension with additional documentation and examples provided in a README. - -**STAC Specification:** This repository includes a '[sub-module](https://git-scm.com/book/en/v2/Git-Tools-Submodules)', which -is a copy of the [STAC specification](stac-spec/) tagged at the latest stable version. -Sub-modules aren't checked out by default, so to get the directory populated -either use `git submodule update --init --recursive` if you've already cloned it, -or clone from the start with `git clone --recursive git@github.com:radiantearth/stac-api-spec.git`. - -**Implementation Recommendations:** Recommendations for implementing a STAC API may be found [here](implementation.md). -These are mostly concerns that apply to an entire API implementation and are not part of the specification itself. - -## Contributing - -Anyone building software that catalogs imagery or other geospatial assets is welcome to collaborate. -Beforehand, please review our [guidelines for contributions and development process](CONTRIBUTING.md). +# STAC API - Transaction + +*based on [**OGC API - Features - Part 4: Simple Transactions**](https://www.ogc.org/standards/ogcapi-features)* + +- **OpenAPI specification:** [openapi.yaml](openapi.yaml) +- **Conformance URIs:** + - + - +- **Extension [Maturity Classification](https://github.com/radiantearth/stac-api-spec/README.md#maturity-classification):** Candidate +- **Dependencies**: [STAC API - Features](https://github.com/radiantearth/stac-api-spec/ogcapi-features/README.md) + +The core STAC API doesn't support adding, editing, or removing items. +The transaction API extension supports the creation, editing, and deleting of items through POST, PUT, PATCH, and DELETE requests. + +STAC Transactions are based on the [OGC API - Features](https://ogcapi.ogc.org/features/) transactions, as +specified in [Part 4: Simple Transactions](http://docs.opengeospatial.org/DRAFTS/20-002.html). The core +OGC standard lays out the end points for transactions, without specifying any content types. For STAC we +use STAC Item objects in our transactions, and those transaction must be done at the OGC API - Features endpoints, +under `/collections/{collectionID}/items`. The OpenAPI document (specified as an OpenAPI fragment that +gets build in the full STAC OpenAPI document) simply gives the STAC examples of using the +Simple Transactions API mechanism. + +OGC API [Simple Transactions](http://docs.opengeospatial.org/DRAFTS/20-002.html) is still a draft standard, so +once it is released STAC will align to a released one, but we anticipate few changes as it is a very simple document. + +STAC Transactions additionally support optimistic locking through use of the ETag header, as specified in the +OpenAPI document. This is not currently specified in *OGC API - Features*, but it is compatible and we will +work to get it incorporated. + +## Methods + +| Path | Content-Type Header | Body | Success Status | Description | +| ------------------------------------------------------ | ------------------- | -------------------------------------- | -------------- | ----------------------------------------------------------------- | +| `POST /collections/{collectionID}/items` | `application/json` | partial Item or partial ItemCollection | 201, 202 | Adds a new item to a collection. | +| `PUT /collections/{collectionId}/items/{featureId}` | `application/json` | partial Item | 200, 202, 204 | Updates an existing item by ID using a complete item description. | +| `PATCH /collections/{collectionId}/items/{featureId}` | `application/json` | partial Item | 200, 202, 204 | Updates an existing item by ID using a partial item description. | +| `DELETE /collections/{collectionID}/items/{featureId}` | n/a | n/a | 200, 202, 204 | Deletes an existing item by ID. | + +### POST + +When the body is a partial Item: + +- Must only create a new resource. +- Must have an id field. +- Must return 409 if an Item exists for the same collection and id field values. +- Must populate the `collection` field in the Item from the URI. +- Must return 201 and a Location header with the URI of the newly added resource for a successful operation. +- May return the content of the newly added resource for a successful operation. + +When the body is a partial ItemCollection: + +- Must only create a new resource. +- Each Item in the ItemCollection must have an id field. +- Must return 409 if an Item exists for any of the same collection and id values. +- Must populate the `collection` field in each Item from the URI. +- Must return 201 without a Location header. +- May create only some of the Items in the ItemCollection. Implementations are not + required to implement all-or-none sematics for this operation. For example, if an + ItemCollection contains two Items and one is successfully created and the other + fails to be created, the server is not required to then delete the successfully + created one. When only some of the Items in the ItemCollection are created, the + server should communicate this failure back to the client with an error status code. + +All cases: + +- Must return 202 if the operation is queued for asynchronous execution. + +### PUT + +- Must populate the `id` and `collection` fields in the Item from the URI. +- Must return 200 or 204 for a successful operation. +- If 200 status code is returned, the server shall return the content of the updated resource for a successful operation. +- Must return 202 if the operation is queued for asynchronous execution. +- Must return 404 if no Item exists for this resource URI. +- If the `id` or `collection` fields are different from those in the URI, status code 400 shall be returned. + +### PATCH + +- Must populate the `id` and `collection` fields in the Item from the URI. +- Must return 200 or 204 for a successful operation. +- If status code 200 is returned, the server shall return the content of the updated resource for a successful operation. +- May return the content of the updated resource for a successful operation. +- Must return 202 if the operation is queued for asynchronous execution. +- Must return 404 if no Item exists for this resource URI. +- If the `id` or `collection` fields are different from those in the URI, status code 400 shall be returned. + +PATCH is compliant with [RFC 7386](https://tools.ietf.org/html/rfc7386). + +### DELETE + +- Must return 200 or 204 for a successful operation. +- Must return a 202 if the operation is queued for asynchronous execution. +- May return a 404 if no Item existed prior to the delete operation. Returning a 200 or 204 is also valid in this situation. diff --git a/browseable/README.md b/browseable/README.md deleted file mode 100644 index 94e5ba3c..00000000 --- a/browseable/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# STAC API - Browseable Specification - -- [STAC API - Browseable Specification](#stac-api---browseable-specification) - - [Link Relations](#link-relations) - - [Endpoints](#endpoints) - - [Example Landing Page for STAC API - Browseable](#example-landing-page-for-stac-api---browseable) - - [Extensions](#extensions) - -- **OpenAPI specification:** none -- **Conformance URIs:** - - - - -- **[Maturity Classification](../README.md#maturity-classification):** Proposal -- **Dependencies**: [STAC API - Core](../core) - -A STAC API conforming to the *STAC API - Browseable* conformance class must be structured such that all -all Items in the catalog can be accessed by following `child` and `item` link relations. This is a more significant -constraint than a STAC API without this conformance class or a STAC Catalog that is available over HTTP but does not -implement STAC API, neither of which have any guarantee regarding the reachability of Items. This conformance -class is used to signal to users that they can fully navigate to all available Items using a UI (like [STAC Browser](https://github.com/radiantearth/stac-browser), -and also makes it clear to crawlers that they can reach everything by following catalog links. - -Recommendations for structuring Catalogs hierarchically can be found in -[Structuring Catalog Hierarchies](../core/README.md#structuring-catalog-hierarchies) from the *STAC API - Core* specification. - -## Link Relations - -This conformance class also requires implementation of the link relations in the [STAC API - Core](../core) conformance class. - -Additionally, `child` relations must exist to child Catalogs and Collections and `item` relations to Items, such that -every Item in the Catalog can be accessed by traversing these relations. - -| **rel** | **href** | **From** | **Description** | -| ------- | -------- | --------- | -------------------------------------- | -| `child` | various | STAC Core | The child STAC Catalogs & Collections. | -| `item` | various | STAC Core | The child STAC Items. | - -Note that there is a different link relation `items` (plural) -used by the *STAC API - Features* conformance class that links from a collection resource -(at the `/collections/{collectionId}` endpoint) to the items in -that collection (at the `/collections/{collectionId}/items` endpoint). Both of these endpoints are -[derived from OGC API - Features](https://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_items_). - -## Endpoints - -This conformance class also requires for the endpoints in the [STAC API - Core](../core) conformance class to be implemented. - -This conformance class adds no additional endpoints. - -## Example Landing Page for STAC API - Browseable - -This JSON is what would be expected from an API that implements *STAC API - Browseable*. Note that the -`conformsTo` array contains `https://api.stacspec.org/v1.0.0-rc.1/browseable` and the `links` array -contains `child` link relations. The semantics of this conformance class imply that the the catalogs -linked to by these `child` link relations then have further `child` or `item` link relations that -eventually reach all items in this catalog. - -```json -{ - "stac_version": "1.0.0", - "id": "example-stac", - "title": "A simple STAC API Example, implementing STAC API - Browseable", - "description": "This Catalog aims to demonstrate the a simple landing page", - "type": "Catalog", - "conformsTo" : [ - "https://api.stacspec.org/v1.0.0-rc.1/core", - "https://api.stacspec.org/v1.0.0-rc.1/browseable" - ], - "links": [ - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "service-desc", - "type": "application/vnd.oai.openapi+json;version=3.0", - "href": "https://stac-api.example.com/api" - }, - { - "rel": "service-doc", - "type": "text/html", - "href": "https://stac-api.example.com/api.html" - }, - { - "rel": "child", - "type": "application/json", - "href": "https://stac-api.example.com/catalogs/sentinel-2", - }, - { - "rel": "child", - "type": "application/json", - "href": "https://stac-api.example.com/catalogs/landsat-8", - } - ] -} -``` - -## Extensions - -None. diff --git a/build/index.html b/build/index.html deleted file mode 100644 index b721406b..00000000 --- a/build/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - STAC API - - - - - - - -

STAC API

-

Conformance Classes

- - - - diff --git a/build/redoc_index.html b/build/redoc_index.html deleted file mode 100644 index 9ba1d22a..00000000 --- a/build/redoc_index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - STAC API - - - - - - - - - - - - - - - diff --git a/build/swagger-config.yaml b/build/swagger-config.yaml deleted file mode 100644 index efe60fb9..00000000 --- a/build/swagger-config.yaml +++ /dev/null @@ -1,13 +0,0 @@ -openapi: 3.0.3 -info: - title: STAC API - Complete - version: 1.0.0-beta.5 -apis: - - url: 'build/core/openapi.yaml' - paths: - exclude: - - "^\/$" - - url: 'build/item-search/openapi.yaml' - - url: 'build/ogcapi-features/openapi.yaml' - - url: 'build/ogcapi-features/extensions/version/openapi.yaml' - - url: 'build/ogcapi-features/extensions/transaction/openapi.yaml' diff --git a/children/README.md b/children/README.md deleted file mode 100644 index a6f8b0bb..00000000 --- a/children/README.md +++ /dev/null @@ -1,206 +0,0 @@ -# STAC API - Children - -- [STAC API - Children](#stac-api---children) - - [Link Relations](#link-relations) - - [Endpoints](#endpoints) - - [Pagination](#pagination) - - [Example](#example) - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) ([rendered version](https://api.stacspec.org/v1.0.0-rc.1/children)) -- **Conformance URIs:** - - - - -- **[Maturity Classification](../README.md#maturity-classification):** Proposal -- **Dependencies**: [STAC API - Core](../core) - -A STAC API Landing Page (a Catalog) can return information about the Catalog and Collection child objects -it contains using the link relation `children` to an endpoint `/children`. The `/children` endpoint must -return the all the Catalog and Collection objects referenced by these `child` link relations. - -The purpose of this endpoint is to present a single resource from which clients can retrieve -the immediate children of a Catalog, which may be Catalog or Collection objects. -While the `child` link relations in a Catalog already allow for describing these -relationships, this scheme requires a client to retrieve each resource URL to find any information about -the children (e.g., title, description), which can cause significant performance issues in user-facing -applications. Implementers may choose to to return only a subset of fields for each Catalog or Collection, -but the objects must still be valid Catalogs and Collections. - -## Link Relations - -This conformance class also requires implementation of the link relations in the [STAC API - Core](../core) conformance class. - -The following Link relations must exist in the Landing Page (root). - -| **rel** | **href** | **From** | **Description** | -| ---------- | ----------- | ------------------- | -------------------------------- | -| `children` | `/children` | STAC API - Children | List of children of this catalog | - -The following Link relations must exist in the `/children` endpoint response. - -| **rel** | **href** | **From** | **Description** | -| ------- | ----------- | ------------------- | --------------- | -| `root` | `/` | STAC Core | The root URI | -| `self` | `/children` | STAC API - Children | Self reference | - -## Endpoints - -This conformance class also requires for the endpoints in the [STAC API - Core](../core) conformance class to be implemented. - -| Endpoint | Returns | Description | -| ----------- | ------- | ---------------------------------------------------- | -| `/children` | JSON | Object with a list of child Catalogs and Collections | - -STAC APIs implementing the *STAC API - Children* conformance class must support HTTP GET operation at -`/children`, with the return JSON document consisting of an array of all child Catalogs and Collections in a field `children` and an -array of Links in a field `links`. - -## Pagination - -The `/children` endpoint supports a pagination mechanism that aligns with pagination as described in the -OGC API - Common - Part 2: Geospatial Data specification. This is described in detail in -the [STAC - Features Collection Pagination section](../ogcapi-features/README.md#collection-pagination). -To the greatest extent possible, the catalog should be structured such that all children can be -retrieved from the endpoint in a single call. - -## Example - -Below is a minimal example, but captures the essence. Each object in the `children` array -must be a valid STAC [Collection](../stac-spec/collection-spec/README.md) or [Catalog](../stac-spec/catalog-spec/README.md), -and each must have a `self` link that communicates its canonical location. And then -the links section must include a `self` link, and it must also link to alternate representations -(like html) of the collection. - -The STAC API Landing Page should look like the following (note the `child` link relations): - -```json -{ - "stac_version": "1.0.0", - "id": "example-stac", - "title": "A simple STAC API Example, implementing STAC API - Children", - "description": "This Catalog aims to demonstrate the a simple landing page", - "type": "Catalog", - "conformsTo": [ - "https://api.stacspec.org/v1.0.0-rc.1/core", - "https://api.stacspec.org/v1.0.0-rc.1/children", - "https://api.stacspec.org/v1.0.0-rc.1/browseable" - ], - "links": [ - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "service-desc", - "type": "application/vnd.oai.openapi+json;version=3.0", - "href": "https://stac-api.example.com/api" - }, - { - "rel": "service-doc", - "type": "text/html", - "href": "https://stac-api.example.com/api.html" - }, - { - "rel": "children", - "type": "application/json", - "href": "https://stac-api.example.com/children" - }, - { - "rel": "child", - "type": "application/json", - "href": "https://stac-api.example.com/catalogs/cool-data" - }, - { - "rel": "child", - "type": "application/json", - "href": "https://stac-api.example.com/catalogs/some-other-data" - } - ] -} -``` - -The `/children` endpoint response object should look as follows: - -```json -{ - "children": [ - { - "stac_version": "1.0.0", - "stac_extensions": [ ], - "id": "cool-data", - "title": "Cool Data from X Satellite", - "description": "A lot of awesome words describing the data", - "type": "Catalog", - "license": "CC-BY", - "links": [ - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "parent", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com/catalogs/cool-data" - } - ] - }, - { - "stac_version": "1.0.0", - "stac_extensions": [ ], - "id": "some-other-data", - "title": "Some Other Data from Y Satellite", - "description": "More awesome words describing the data", - "type": "Collection", - "license": "CC-BY", - "extent": { - "spatial": { - "bbox": [[-135.17, 36.83, -51.24, 62.25]] - }, - "temporal": { - "interval": [["2009-01-01T00:00:00Z", null]] - } - }, - "links": [ - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "parent", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com/collections/some-other-data" - } - ] - } - ], - "links": [ - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com/children" - } - ] -} -``` diff --git a/children/openapi.yaml b/children/openapi.yaml deleted file mode 100644 index e46faa15..00000000 --- a/children/openapi.yaml +++ /dev/null @@ -1,116 +0,0 @@ -openapi: 3.0.3 -info: - title: STAC API - Children - version: '1.0.0-rc.1' - description: >- - This is an OpenAPI definition of the SpatioTemporal Asset Catalog API - Children - specification. - contact: - name: STAC Specification - url: 'http://stacspec.org' - license: - name: Apache License 2.0 - url: 'http://www.apache.org/licenses/LICENSE-2.0' -tags: - - name: Children - description: |- - All endpoints related to STAC API - Children -paths: - '/': - get: - tags: - - Children - summary: landing page - description: |- - The landing page provides links to the sub-resources. - operationId: getLandingPage - responses: - '200': - description: |- - The landing page provides links to the API definition - (link relations `service-desc` and `service-doc`), - the Conformance declaration (path `/conformance`, - link relation `conformance`), and the Feature - Collections (path `/collections`, link relation - `data`). - content: - application/json: - schema: - $ref: '../core/openapi.yaml#/components/schemas/landingPage' - example: - stac_version: '1.0.0' - type: Catalog - id: sentinel - title: Copernicus Sentinel Imagery - description: Catalog of Copernicus Sentinel 1 and 2 imagery. - conformsTo: - - 'https://api.stacspec.org/v1.0.0-rc.1/core' - - 'https://api.stacspec.org/v1.0.0-rc.1/children' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson' - links: - - href: 'http://data.example.org/' - rel: self - type: application/json - title: this document - - href: 'http://data.example.org/api' - rel: service-desc - type: application/vnd.oai.openapi+json;version=3.0 - title: the API definition - - href: 'http://data.example.org/api.html' - rel: service-doc - type: text/html - title: the API documentation - - href: 'http://data.example.org/conformance' - rel: conformance - type: application/json - title: OGC API conformance classes implemented by this server - - href: 'http://data.example.org/children' - rel: children - type: application/json - title: Child catalogs and collections of this root catalog - '/children': - get: - tags: - - Children - summary: the child catalogs and collections of the root catalog - description: |- - A body of Catalogs and Collections that are immediate children of this root Catalog. - operationId: getChildren - responses: - '200': - $ref: '#/components/responses/Children' - '500': - $ref: '#/components/responses/ServerError' -components: - schemas: - children: - type: object - required: - - links - - children - properties: - links: - $ref: '../core/commons.yaml#/components/schemas/links' - children: - type: array - items: - anyOf: - - $ref: '../core/commons.yaml#/components/schemas/catalog' - - $ref: '../core/commons.yaml#/components/schemas/collection' - responses: - Children: - description: |- - The child catalogs and collections of the root catalog this API represents. - content: - application/json: - schema: - $ref: '#/components/schemas/children' - ServerError: - description: |- - A server error occurred. - content: - application/json: - schema: - $ref: '../core/commons.yaml#/components/schemas/exception' diff --git a/collections/README.md b/collections/README.md deleted file mode 100644 index e8467c7e..00000000 --- a/collections/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# STAC API - Collections - -- [STAC API - Collections](#stac-api---collections) - - [Link Relations](#link-relations) - - [Endpoints](#endpoints) - - [Pagination](#pagination) - - [Example](#example) - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) ([rendered version](https://api.stacspec.org/v1.0.0-rc.1/collections)) -- **Conformance URIs:** - - - - -- **[Maturity Classification](../README.md#maturity-classification):** Candidate -- **Dependencies**: [STAC API - Core](../core) - -A STAC API can return information about all STAC [Collections](../stac-spec/collection-spec/collection-spec.md) available using a link -from the landing page that uses the link relation `data`, which links to an endpoint called `/collections`. -Individual STAC collections can be accessed -by providing the Collection `id` as a path past that endpoint: `/collections/{collectionId}`. - -**NOTE**: *This conformance class is directly based on the [Features Collection](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_collections_) -section of OAFeat, which is in the process of becoming a 'building block' in [OGC API - Common - Part 2: Geospatial -Data](http://docs.opengeospatial.org/DRAFTS/20-024.html) as the [Collections requirements -class](http://docs.opengeospatial.org/DRAFTS/20-024.html#rc_collections-section). Once the Common version is released we will -aim to align with it. But it still seems to be in flux.* - -## Link Relations - -This conformance class also requires implementation of the link relations in the [STAC API - Core](../core) conformance class. - -The following Link relations must exist in the Landing Page (root). - -| **rel** | **href** | **From** | **Description** | -| ------- | -------------- | -------- | ------------------- | -| `data` | `/collections` | OAFeat | List of Collections | - -Additionally, `child` relations may exist to child Catalogs and Collections. - -| **rel** | **href** | **From** | **Description** | -| ------- | -------- | --------- | -------------------------------------------------------------------------------------------------------- | -| `child` | various | STAC Core | The child STAC Catalogs & Collections. Provides curated paths to get to STAC Collection and Item objects | - -The following Link relations must exist in the `/collections` endpoint response. - -| **rel** | **href** | **From** | **Description** | -| ------- | -------------- | --------- | --------------- | -| `root` | `/` | STAC Core | The root URI | -| `self` | `/collections` | OAFeat | Self reference | - -The following Link relations must exist in the Collection object returned from the `/collections/{collectionId}` endpoint. - -| **rel** | **href** | **From** | **Description** | -| -------- | ----------------------------- | --------- | ------------------------------------------ | -| `root` | `/` | STAC Core | The root URI | -| `parent` | `/` | OAFeat | Parent reference, usually the root Catalog | -| `self` | `/collections/{collectionId}` | OAFeat | Self reference | - -Additionally, these relations may exist for the `/collections/{collectionId}` endpoint: - -| **rel** | **href** | **From** | **Description** | -| ----------- | -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `canonical` | various | STAC Core | Provides the preferred paths to get to STAC Collection and Item objects, if they differ from the URL that was used to retrieve the STAC object and thus duplicate other content. This can be useful in federated catalogs that present metadata that has a different location than the source metadata. | - -Usually, the `self` link in a Collection must link to the same URL that was used to request -it. However, implementations may choose to have the canonical location of the Collection be -elsewhere. If this is done, it is recommended to include a `rel` of `canonical` to that location. - -## Endpoints - -This conformance class also requires for the endpoints in the [STAC API - Core](../core) conformance class to be implemented. - -| Endpoint | Returns | Description | -| ----------------------------- | ---------- | -------------------------------------------------------------------- | -| `/collections` | JSON | Object with a list of Collections contained in the catalog and links | -| `/collections/{collectionId}` | Collection | Returns single Collection JSON | - -STAC API's implementing the Collections class must support HTTP GET operation at `/collections`, with the return JSON document consisting -of an array of all STAC Collections and an array of Links. - -## Pagination - -The `/collections` endpoint supports a pagination mechanism that aligns with pagination as described in the -OGC API - Common - Part 2: Geospatial Data specification. This is described in detail in -the [STAC - Features Collection Pagination section](../ogcapi-features/README.md#collection-pagination). - -## Example - -Below is a minimal example, but captures the essence. Each collection object must be a valid STAC -[Collection](../stac-spec/collection-spec/README.md), and each must have a `self` link that communicates its canonical location. And then -the links section must include a `self` link, and it must also link to alternate representations (like html) of the collection. - -```json -{ - "collections": [ - { - "stac_version": "1.0.0", - "stac_extensions": [ ], - "id": "cool-data", - "title": "Cool Data from X Satellite", - "description": "A lot of awesome words describing the data", - "type": "Collection", - "license": "CC-BY", - "extent": { - "spatial": { - "bbox": [[-135.17, 36.83, -51.24, 62.25]] - }, - "temporal": { - "interval": [["2009-01-01T00:00:00Z",null]] - } - }, - "links": [ - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "parent", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com/collections/cool-data" - }, - { - "rel": "items", - "type": "application/json", - "href": "https://stac-api.example.com/collections/cool-data/items" - } - ], - } - ], - "links": [ - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com/collections" - } - ] -} -``` diff --git a/collections/openapi.yaml b/collections/openapi.yaml deleted file mode 100644 index 9d0e1edb..00000000 --- a/collections/openapi.yaml +++ /dev/null @@ -1,177 +0,0 @@ -openapi: 3.0.3 -info: - title: STAC API - Collections - version: '1.0.0-rc.1' - description: >- - This is an OpenAPI definition of the SpatioTemporal Asset Catalog API - Collections - specification. This is a subset of the STAC API - Features specification. - contact: - name: STAC Specification - url: 'http://stacspec.org' - license: - name: Apache License 2.0 - url: 'http://www.apache.org/licenses/LICENSE-2.0' -tags: - - name: Core - description: essential characteristics of a STAC API - - name: Collections - description: All endpoints related to STAC API - Collections -paths: - '/': - get: - tags: - - Core - summary: landing page - description: |- - The landing page provides links to the sub-resources. - operationId: getLandingPage - responses: - '200': - description: |- - The landing page provides links to the API definition - (link relations `service-desc` and `service-doc`), - the Conformance declaration (path `/conformance`, - link relation `conformance`), and the Feature - Collections (path `/collections`, link relation - `data`). - content: - application/json: - schema: - $ref: '../core/openapi.yaml#/components/schemas/landingPage' - example: - stac_version: '1.0.0' - type: Catalog - id: sentinel - title: Copernicus Sentinel Imagery - description: Catalog of Copernicus Sentinel 1 and 2 imagery. - conformsTo: - - 'https://api.stacspec.org/v1.0.0-rc.1/core' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson' - links: - - href: 'http://data.example.org/' - rel: self - type: application/json - title: this document - - href: 'http://data.example.org/api' - rel: service-desc - type: application/vnd.oai.openapi+json;version=3.0 - title: the API definition - - href: 'http://data.example.org/api.html' - rel: service-doc - type: text/html - title: the API documentation - - href: 'http://data.example.org/conformance' - rel: conformance - type: application/json - title: OGC API conformance classes implemented by this server - - href: 'http://data.example.org/collections' - rel: data - type: application/json - title: Information about the feature collections - '/collections': - get: - tags: - - Collections - summary: the feature collections in the dataset - description: |- - A body of Feature Collections that belong or are used together with additional links. - Request may not return the full set of metadata per Feature Collection. - operationId: getCollections - responses: - '200': - $ref: '#/components/responses/Collections' - '500': - $ref: '#/components/responses/ServerError' - '/collections/{collectionId}': - get: - tags: - - Collections - summary: |- - describe the feature collection with id `collectionId` - description: |- - A single Feature Collection for the given if `collectionId`. - Request this endpoint to get a full list of metadata for the Feature Collection. - operationId: describeCollection - parameters: - - $ref: '#/components/parameters/collectionId' - responses: - '200': - $ref: '#/components/responses/Collection' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/ServerError' -components: - parameters: - collectionId: - name: collectionId - in: path - description: local identifier of a collection - required: true - schema: - type: string - schemas: - collections: - type: object - required: - - links - - collections - properties: - links: - $ref: '../core/commons.yaml#/components/schemas/links' - collections: - type: array - items: - $ref: '../core/commons.yaml#/components/schemas/collection' - responses: - Collections: - description: |- - The feature collections shared by this API. - - The dataset is organized as one or more feature collections. This resource - provides information about and access to the collections. - - The response contains the list of collections. For each collection, a link - to the items in the collection (path `/collections/{collectionId}/items`, - link relation `items`) as well as key information about the collection. - This information includes: - - * A local identifier for the collection that is unique for the dataset; - * A list of coordinate reference systems (CRS) in which geometries may be returned by the server. The first CRS is the default coordinate reference system (the default is always WGS 84 with axis order longitude/latitude); - * An optional title and description for the collection; - * An optional extent that can be used to provide an indication of the spatial and temporal extent of the collection - typically derived from the data; - * An optional indicator about the type of the items in the collection (the default value, if the indicator is not provided, is 'feature'). - content: - application/json: - schema: - $ref: '#/components/schemas/collections' - Collection: - description: |- - Information about the feature collection with id `collectionId`. - - The response contains a link to the items in the collection - (path `/collections/{collectionId}/items`, link relation `items`) - as well as key information about the collection. This information - includes: - - * A local identifier for the collection that is unique for the dataset; - * A list of coordinate reference systems (CRS) in which geometries may be returned by the server. The first CRS is the default coordinate reference system (the default is always WGS 84 with axis order longitude/latitude); - * An optional title and description for the collection; - * An optional extent that can be used to provide an indication of the spatial and temporal extent of the collection - typically derived from the data; - * An optional indicator about the type of the items in the collection (the default value, if the indicator is not provided, is 'feature'). - content: - application/json: - schema: - $ref: '../core/commons.yaml#/components/schemas/collection' - NotFound: - description: |- - The requested URI was not found. - ServerError: - description: |- - A server error occurred. - content: - application/json: - schema: - $ref: '../core/commons.yaml#/components/schemas/exception' diff --git a/core/README.md b/core/README.md deleted file mode 100644 index 09b3ea6b..00000000 --- a/core/README.md +++ /dev/null @@ -1,320 +0,0 @@ -# STAC API - Core Specification - -- [STAC API - Core Specification](#stac-api---core-specification) - - [Link Relations](#link-relations) - - [Endpoints](#endpoints) - - [Example Landing Page for STAC API - Core](#example-landing-page-for-stac-api---core) - - [Extensions](#extensions) - - [Structuring Catalog Hierarchies](#structuring-catalog-hierarchies) - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) ([rendered version](https://api.stacspec.org/v1.0.0-rc.1/core)), -- **Conformance URIs:** - - -- **[Maturity Classification](../README.md#maturity-classification):** Candidate -- **Dependencies**: None - and [commons.yaml](commons.yaml) is the OpenAPI version of the core [STAC spec](../stac-spec) JSON Schemas. - -All STAC API implementations must support the *STAC API - Core* conformance class. The only requirement of this class -is to provide a valid [STAC Catalog](../stac-spec/catalog-spec/catalog-spec.md) that also includes a `conformsTo` -attribute with a string array value. Any API implementing this is considered a valid STAC API. - -Even if a STAC catalog is simply files on a web server or objects in cloud storage, serving these files over HTTP -makes it into a defacto hypermedia-driven web API. Even if none of the -STAC API conformance classes are implemented, the catalog can be traversed from the root via `child` and `item` link relations (though it is not -required that all Items are reachable). Support for -this "browse" mode of interaction is complementary to the dynamic search capabilities defined in the -*STAC API - Features* and *STAC API - Item Search* conformance classes. -Conversely, STAC API implementations may not support browse, even though the root is a Catalog object, if they do not -have the appropriate `child` and `item` link relations to traverse over the objects in the catalog. STAC API -implementations may provide an even greater guarantee of Item reachability with the -[STAC API - Browseable](../browseable/README.md) conformance class. - -Providing these two complementary ways of interacting with the catalog allow users to iteratively interrogate the data -to discover what data is available through browse and filter the data to only what they are interested in -through search. Supporting both also opens up a catalog to -clients that are oriented towards reading non-API STAC catalogs -(e.g., [STAC Browser](https://github.com/radiantearth/stac-browser)) and those that are oriented towards -searchable STAC API catalogs -(e.g., [PySTAC Client](https://pystac-client.readthedocs.io/), [stac-nb](https://github.com/darrenwiens/stac-nb)). -Recommendations for supporting both of these discussed in [Structuring Catalog Hierarchies](#structuring-catalog-hierarchies). - -The root of a STAC API is the Landing Page. This resource is the starting point to determine what behaviors -the API supports via the `conformsTo` array and the URIs of resources via link relations. -Support for this type of behavior in a web API is known as -[Hypermedia as the Engine of Application State (HATEOAS)](https://en.wikipedia.org/wiki/HATEOAS). -A hypermedia-driven web API provides a robust, consistent, and flexible mechanism for interacting with remote resources. -STAC API relies heavily on hypermedia for API resource discovery and navigation. - -In a STAC API, the root endpoint (Landing Page) has the following characteristics: - -- The returned JSON is a [STAC Catalog](../stac-spec/catalog-spec/catalog-spec.md), and provides any number of 'child' links - to navigate to additional [Catalog](../stac-spec/catalog-spec/catalog-spec.md), - [Collection](../stac-spec/collection-spec/README.md), and [Item](../stac-spec/item-spec/README.md) objects. -- The `links` attribute is part of a STAC Catalog, and provides a list of relations to API endpoints. Some of these endpoints can - exist on any path (e.g., sub-catalogs) and some have a specified path (e.g., `/search`), - so the client must inspect the the `rel` (relationship) to understand what capabilities are offered at each location. -- The `conformsTo` section provides the capabilities of this service. This is the field - that indicates to clients that this is a STAC API and how to access conformance classes, including this - one. The relevant conformance URIs are listed in each part of the API specification. If a conformance URI is listed then - the service must implement all of the required capabilities. - -Note the `conformsTo` array follows the same structure of the OGC API - Features [declaration of conformance -classes](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_declaration_of_conformance_classes), except it is part of the -landing page instead of in the JSON response from the `/conformance` endpoint. This is different from how the OGC API advertises -conformance, as STAC feels it is important for clients -to understand conformance from a single request to the landing page. Implementers who implement the *OGC API - Features* and/or -*STAC API - Features* conformance classes must also implement the `/conformance` endpoint. - -The scope of the conformance classes declared in the `conformsTo` field and the `/conformance` endpoint are limited -to the STAC API Catalog that declares them. A STAC API Catalog may link to sub-catalogs within it via `child` links -that declare different conformance classes. This is useful when an entire catalog cannot be searched against to -support the *STAC API - Item Search* conformance class, perhaps because it uses multiple databases to store items, -but sub-catalogs whose items are all in one database can support search. - -## Link Relations - -The following Link relations must exist in the Landing Page (root). - -| **rel** | **href** | **From** | **Description** | -| -------------- | -------- | --------- | ---------------------------------------------------- | -| `root` | `/` | STAC Core | The root URI | -| `self` | `/` | OAFeat | Self reference, same as root URI | -| `service-desc` | `/api` | OAFeat | The service description in a machine-readable format | - -The path for the `service-desc` endpoint is recommended to be `/api`, but may be another path. Recommended to be -OpenAPI 3.0 or 3.1 with media types `application/vnd.oai.openapi` (YAML), -`application/vnd.oai.openapi+json;version=3.0` (3.0 JSON), or `application/vnd.oai.openapi+json;version=3.1` -(3.1 JSON). - -A `service-doc` endpoint is recommended, but not required. This commonly returns an HTML -page, for example, in the form of [Redoc](https://github.com/Redocly/redoc) interactive API -, but any format is allowed. The Link `type` field should correspond to whatever format or formats are -supported by this endpoint, e.g., `text/html`. - -| **rel** | **href** | **From** | **Description** | -| ------------- | ----------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- | -| `service-doc` | `/api.html` | OAFeat | A human-consumable service description. The path for this endpoint is only recommended to be `/api.html`, but may be another path. | - -Additionally, `child` relations may exist to child Catalogs and Collections and `item` relations to Items. These -relations form a directed graph that enables traversal from a root catalog or collection to items. - -| **rel** | **href** | **From** | **Description** | -| ------- | -------- | --------- | -------------------------------------- | -| `child` | various | STAC Core | The child STAC Catalogs & Collections. | -| `item` | various | STAC Core | The child STAC Items. | - -While it is valid to have `item` links from the landing page, most STAC API implementations -serve large numbers of features, so they will typically use several layers of intermediate `child` links before -getting to Item objects. These relations form a directed graph -of Catalogs and Collections, where interior nodes contain `child` relations, and the penultimate nodes will be -Catalogs with `item` relations to individual Items as leaf nodes. - -`child` link relations may point to another STAC Catalog that *also* acts as a STAC API root, which can support -search over only a sub-catalog. This is useful for very large or federated catalogs that cannot support searching -over the entire catalog, but can support searching over individual sub-catalogs within it. - -Note that there is a different link relation `items` (plural) -used by the *STAC API - Features* conformance class that links from a collection resource -(at the `/collections/{collectionId}` endpoint) to the items in -that collection (at the `/collections/{collectionId}/items` endpoint). Both of these endpoints are -[derived from OGC API - Features](https://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_items_). - -## Endpoints - -This conformance class also requires for the endpoints in the [STAC API - Core](../core) conformance class to be implemented. - -These endpoints are required, with details provided in this [OpenAPI specification document](openapi.yaml). - -| Endpoint | Returns | Description | -| -------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `/` | [Catalog](../stac-spec/catalog-spec/README.md) | Landing page, links to API capabilities | -| `/api` | any | The service description of the service from the `service-desc` link `rel`. The path is only recommended to be `/api`, and is at the discretion of the implementer. | - -The service description endpoint may return any specification format. It is recommended to use OpenAPI 3.0 or 3.1 -with media types `application/vnd.oai.openapi` (YAML), `application/vnd.oai.openapi+json;version=3.0` (3.0 JSON), -or `application/vnd.oai.openapi+json;version=3.1` (3.1 JSON). Whichever format or formats are used, the link -with relation `service-desc` must have a `type` field that matches an `Accept` header value to which the service -responds, and the `Content-Type` header in the response should contain the same media type. If the OpenAPI 3.0 -format is used, the conformance class `http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30` should be -advertised. All service descriptions provided as part of the STAC API spec use OpenAPI 3.0 YAML format, and can -easily be used to return either YAML or JSON from this endpoint. OAFeat does not currently define a conformance -class for OpenAPI 3.1, but may in the future. - -If sub-catalogs are used, it is **recommended** that these use the endpoint `/catalogs/{catalogId}` to avoid conflicting -with other endpoints from the root. - -| Endpoint | Returns | Description | -| ----------------------- | ---------------------------------------------- | -------------------- | -| `/catalogs/{catalogId}` | [Catalog](../stac-spec/catalog-spec/README.md) | child Catalog object | - -## Example Landing Page for STAC API - Core - -This JSON is what would be expected from an API that only implements *STAC API - Core*. It is a valid STAC Catalog -with additional Links and a `conformsTo` attribute. In practice, -most APIs will also implement other conformance classes, and those will be reflected in the `links` and -`conformsTo` attribute. A more typical Landing Page example is in -the [overview](../overview.md#example-landing-page) document. - -This particular catalog provides both the ability to browse down to child Catalog objects through its -`child` links, and also provides the search endpoint to be able to search across items in its collections. Note -that some of those links are not required and other servers may provide -different conformance classes and a different set of links. - -```json -{ - "stac_version": "1.0.0", - "id": "example-stac", - "title": "A simple STAC API Example", - "description": "This Catalog aims to demonstrate the a simple landing page", - "type": "Catalog", - "conformsTo" : [ - "https://api.stacspec.org/v1.0.0-rc.1/core" - ], - "links": [ - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "service-desc", - "type": "application/vnd.oai.openapi+json;version=3.0", - "href": "https://stac-api.example.com/api" - }, - { - "rel": "service-doc", - "type": "text/html", - "href": "https://stac-api.example.com/api.html" - }, - { - "rel": "child", - "type": "application/json", - "href": "https://stac-api.example.com/catalogs/sentinel-2", - }, - { - "rel": "child", - "type": "application/json", - "href": "https://stac-api.example.com/catalogs/landsat-8", - } - ] -} -``` - -## Extensions - -None. - -## Structuring Catalog Hierarchies - -A STAC API is more useful when it presents a complete `Catalog` representation of all the data contained in the -API, such that all `Item` objects can be reached by transitively traversing `child` and `item` link relations from -the root. This property of being able to reach all Items in this way is formalized in the -[*STAC API - Browseable* conformance class](../browseable/README.md), but any Catalog can be structured for hierarchical traversal. -Implementers who have search as their primary use case should consider also implementing this -alternate view over the data by presenting it as a directed graph of catalogs, where the `child` link relations typically -form a tree, and where each catalog can be retrieved with a single request (e.g., each Catalog JSON is small enough that -it does not require pagination). - -While OAFeat requires that all Items must be part of a Collection, this does not mean that the Collection needs to be -part of the browseable tree. If they are part of the tree, it is recommended that there only be one Collection in a -path through the tree, and that a collection never contain child collections. - -These are the two standard ways of structuring a browseable tree of catalogs, the only difference being -whether the Collection is used as part of the tree or not: - -- Catalog (root) -> Catalog* -> Item (recommended) -- Catalog (root) -> Collection -> Catalog* -> Item - -All items must be part of a Collection, but the Collection itself does not need to be part of the browsable graph. - -How you structure your graph of Catalogs can allow you to both group Collections together and create sub-groups -of items within a Collection. -For example, your collections may be grouped so each represent a data product. This might mean -you have a collection for each of Landsat 8 Collection 1, Landsat 8 Surface Reflectance, Sentinel-2 L1C, Sentinel-2 -L2A, Sentinel-5P UV Aerosol Index, Sentinel-5P Cloud, MODIS MCD43A4, MODIS MOD11A1, and MODIS MYD11A1. You can also -present each of these as a catalog, and create parent catalogs for them that allow you to group together all Landsat, Sentinel, and MODIS catalogs. - -- / root catalog - - child -> /catalogs/landsat - - child -> /catalogs/landsat_7 - - child -> /catalogs/landsat_8 - - child -> /catalogs/landsat_8_c1 - - child -> /catalogs/landsat_8_sr - - child -> /catalogs/sentinel - - child -> /catalogs/sentinel_2 - - child -> /catalogs/sentinel_2_l1c - - child -> /catalogs/sentinel_2_l2a - - child -> /catalogs/sentinel_5p - - child -> /catalogs/sentinel_5p_uvai - - child -> /catalogs/sentinel_5p_cloud - - child -> /catalogs/modis - - child -> /catalogs/modis_mcd43a4 - - child -> /catalogs/modis_mod11a1 - - child -> /catalogs/modis_myd11a1 - -Each of these catalog endpoints could in turn be its own STAC API root, allowing an interface where users can -search over arbitrary groups of collections without needing to explicitly know and name every collection in the -search `collection` query parameter. These catalogs-of-catalogs can be separated multiple ways, e.g. be -per provider (e.g., Sentinel-2), per domain (e.g., cloud data), or per form of data (electro-optical, LIDAR, SAR). - -Going the other direction, collections can be sub-grouped into smaller catalogs. For example, this example -groups a catalog of Landsat 8 Collection 1 items by path, row, and date (the path/row system is used by this -product for gridding). - -- / (root) - - /catalogs/landsat_8_c1 - - /catalogs/landsat_8_c1/139 - - /catalogs/landsat_8_c1/139_045 - - /catalogs/landsat_8_c1/139_045_20170304 - - /collections/landsat_8_c1/items/LC08_L1TP_139045_20170304_20170316_01_T1 - - /catalogs/landsat_8_c1/139_045_20170305 - - /collections/landsat_8_c1/items/LC08_L1TP_139045_20170305_20170317_01_T1 - - /catalogs/landsat_8_c1/139_046 - - /catalogs/landsat_8_c1/139_046_20170304 - - /collections/landsat_8_c1/items/LC08_L1TP_139046_20170304_20170316_01_T1 - - /catalogs/landsat_8_c1/139_046_20170305 - - /collections/landsat_8_c1/items/LC08_L1TP_139046_20170305_20170317_01_T1 - -If done in a consistent manner, these can also provide "templated" URIs, such that a user could directly request a -specific path, row, and date simply by replacing the values in `/catalogs/landsat_8_c1/{path}_{row}_{date}`. - -Similarly, a MODIS product using sinusoidal gridding could use paths of the form -`/{horizontal_grid}/{vertical_grid}/{date}`. Since only around 300 scenes produced every day for a MODIS product -and there is a 20 year history of production, these could be fit in a graph with path length 3 from the root -Catalog to each leaf Item. - -- / (root) - - `/catalogs/mcd43a4 (~7,000 `child` relation links, one to each date) - - `/catalogs/mcd43a4/{date}` (~300 `item` relation links to each Item) - - `/collections/mcd43a4/items/{itemId}` - - ... - -Catalogs can also group related products. For example, here we group together synthetic aperture radar (SAR) products -(Sentinel-1 and AfriSAR) and electro-optical (EO) bottom of atmosphere (BOA) products. - -- / root catalog - - child -> /catalogs/sar - - child -> /catalogs/sentinel_1_l2a - - child -> /catalogs/afrisar - - child -> /catalogs/eo_boa - - child -> /catalogs/landsat_8_sr - - child -> /catalogs/sentinel_2_l2a - -The catalogs structure is a directed graph that allows -you to provide numerous different Catalog and Collection graphs to reach leaf Items. For example, for a Landsat 8 data -product, you may want to allow browsing both by date then path then row, or by path then row then date: - -1. Catalog -> Catalog (product) -> Catalog (date) -> Catalog (path) -> Catalog (row) -2. Catalog -> Catalog (product) -> Catalog (path) -> Catalog (row) -> Catalog (date) - -When more than path to an Item is allowed, it is recommended that the final `item` link relation reference a -consistent, canonical URL for each item, instead of a URL that is specific to the path of Catalog that was followed -to reach it. - -There are many options for how to structure these catalog graphs, so it will take some analysis work to figure out -which one or ones best match the structure of your data and the needs of your consumers. diff --git a/core/commons.yaml b/core/commons.yaml deleted file mode 100644 index 75a628aa..00000000 --- a/core/commons.yaml +++ /dev/null @@ -1,881 +0,0 @@ -openapi: 3.0.3 -info: - title: The SpatioTemporal Asset Catalog API - Commons - description: This is the OpenAPI version of the core STAC spec JSON Schemas. - version: 1.0.0-rc.1 -paths: {} -components: - responses: - Error: - description: An error occurred. - content: - application/json: - schema: - $ref: '#/components/schemas/exception' - schemas: - exception: - type: object - description: |- - Information about the exception: an error code plus an optional description. - required: - - code - properties: - code: - type: string - description: - type: string - conformanceClasses: - type: object - required: - - conformsTo - properties: - conformsTo: - description: >- - A list of all conformance classes implemented by the server. - In addition to the STAC-specific conformance classes, all OGC-related - conformance classes listed at `GET /conformances` must be listed here. - This entry should mirror what `GET /conformances` returns, if implemented. - type: array - items: - type: string - catalog: - type: object - required: - - stac_version - - type - - id - - description - - links - properties: - stac_version: - $ref: '#/components/schemas/stac_version' - stac_extensions: - $ref: '#/components/schemas/stac_extensions' - type: - type: string - id: - type: string - title: - type: string - description: - type: string - links: - $ref: '#/components/schemas/links' - collection: - type: object - required: - - stac_version - - type - - id - - description - - license - - extent - - links - properties: - stac_version: - $ref: '#/components/schemas/stac_version' - stac_extensions: - $ref: '#/components/schemas/stac_extensions' - type: - type: string - id: - description: identifier of the collection used, for example, in URIs - type: string - title: - description: human readable title of the collection - type: string - description: - type: string - description: >- - Detailed multi-line description to fully explain the catalog or - collection. - - [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for - rich text representation. - keywords: - type: array - description: List of keywords describing the collection. - items: - type: string - license: - $ref: '#/components/schemas/license' - extent: - $ref: '#/components/schemas/extent' - providers: - $ref: '#/components/schemas/providers' - links: - $ref: '#/components/schemas/links' - summaries: - description: |- - Summaries are either a unique set of all available values *or* - statistics. Statistics by default only specify the range (minimum - and maximum values), but can optionally be accompanied by additional - statistical values. The range can specify the potential range of - values, but it is recommended to be as precise as possible. The set - of values must contain at least one element and it is strongly - recommended to list all values. It is recommended to list as many - properties as reasonable so that consumers get a full overview of - the Collection. Properties that are covered by the Collection - specification (e.g. `providers` and `license`) may not be repeated - in the summaries. - type: object - additionalProperties: - oneOf: - - type: array - title: Set of values - items: - description: A value of any type. - - type: object - title: Statistics - description: |- - By default, only ranges with a minimum and a maximum value can - be specified. Ranges can be specified for ordinal values only, - which means they need to have a rank order. Therefore, ranges - can only be specified for numbers and some special types of - strings. Examples: grades (A to F), dates or times. - Implementors are free to add other derived statistical values - to the object, for example `mean` or `stddev`. - required: - - min - - max - properties: - min: - anyOf: - - type: string - - type: number - max: - anyOf: - - type: string - - type: number - example: - stac_version: '1.0.0' - stac_extensions: [] - type: Collection - id: Sentinel-2 - title: 'Sentinel-2 MSI: MultiSpectral Instrument, Level-1C' - description: | - Sentinel-2 is a wide-swath, high-resolution, multi-spectral - imaging mission... - license: proprietary - keywords: - - copernicus - - esa - - eu - - msi - - radiance - - sentinel - providers: - - name: ESA - roles: - - producer - - licensor - url: 'https://sentinel.esa.int/web/sentinel/user-guides/sentinel-2-msi' - extent: - spatial: - bbox: - - - -180 - - -56 - - 180 - - 83 - temporal: - interval: - - - '2015-06-23T00:00:00Z' - - '2019-07-10T13:44:56Z' - summaries: - datetime: - min: '2015-06-23T00:00:00Z' - max: '2019-07-10T13:44:56Z' - 'sci:citation': - - 'Copernicus Sentinel data [Year]' - 'eo:gsd': - - 10 - - 30 - - 60 - 'platform': - - sentinel-2a - - sentinel-2b - 'constellation': - - sentinel-2 - 'instruments': - - msi - 'view:off_nadir': - min: 0 - max: 100 - 'view:sun_elevation': - min: 6.78 - max: 89.9 - 'eo:bands': - - - name: B1 - common_name: coastal - center_wavelength: 4.439 - - name: B2 - common_name: blue - center_wavelength: 4.966 - - name: B3 - common_name: green - center_wavelength: 5.6 - - name: B4 - common_name: red - center_wavelength: 6.645 - - name: B5 - center_wavelength: 7.039 - - name: B6 - center_wavelength: 7.402 - - name: B7 - center_wavelength: 7.825 - - name: B8 - common_name: nir - center_wavelength: 8.351 - - name: B8A - center_wavelength: 8.648 - - name: B9 - center_wavelength: 9.45 - - name: B10 - center_wavelength: 1.3735 - - name: B11 - common_name: swir16 - center_wavelength: 1.6137 - - name: B12 - common_name: swir22 - center_wavelength: 2.2024 - links: - - rel: self - href: 'http://cool-sat.com/collections/Sentinel-2' - - rel: root - href: 'http://cool-sat.com/collections' - - rel: license - href: 'https://scihub.copernicus.eu/twiki/pub/SciHubWebPortal/TermsConditions/Sentinel_Data_Terms_and_Conditions.pdf' - title: Legal notice on the use of Copernicus Sentinel Data and Service Information - extent: - type: object - description: |- - The extent of the features in the collection. In the Core only spatial and temporal - extents are specified. Extensions may add additional members to represent other - extents, for example, thermal or pressure ranges. - - The first item in the array describes the overall extent of - the data. All subsequent items describe more precise extents, - e.g., to identify clusters of data. - Clients only interested in the overall extent will only need to - access the first item in each array. - required: - - spatial - - temporal - properties: - spatial: - description: |- - The spatial extent of the features in the collection. - type: object - required: - - bbox - properties: - bbox: - description: |- - One or more bounding boxes that describe the spatial extent of the dataset. - - The first bounding box describes the overall spatial - extent of the data. All subsequent bounding boxes describe - more precise bounding boxes, e.g., to identify clusters of data. - Clients only interested in the overall spatial extent will - only need to access the first item in each array. - type: array - minItems: 1 - items: - description: |- - Each bounding box is provided as four or six numbers, depending on - whether the coordinate reference system includes a vertical axis - (height or depth): - - * Lower left corner, coordinate axis 1 - * Lower left corner, coordinate axis 2 - * Minimum value, coordinate axis 3 (optional) - * Upper right corner, coordinate axis 1 - * Upper right corner, coordinate axis 2 - * Maximum value, coordinate axis 3 (optional) - - The coordinate reference system of the values is WGS 84 longitude/latitude - (http://www.opengis.net/def/crs/OGC/1.3/CRS84) unless a different coordinate - reference system is specified in `crs`. - - For WGS 84 longitude/latitude the values are in most cases the sequence of - minimum longitude, minimum latitude, maximum longitude and maximum latitude. - However, in cases where the box spans the antimeridian the first value - (west-most box edge) is larger than the third value (east-most box edge). - - If the vertical axis is included, the third and the sixth number are - the bottom and the top of the 3-dimensional bounding box. - - If a feature has multiple spatial geometry properties, it is the decision of the - server whether only a single spatial geometry property is used to determine - the extent or all relevant geometries. - type: array - minItems: 4 - maxItems: 6 - items: - type: number - example: - - -180 - - -90 - - 180 - - 90 - crs: - description: |- - Coordinate reference system of the coordinates in the spatial extent - (property `bbox`). The default reference system is WGS 84 longitude/latitude. - In the Core this is the only supported coordinate reference system. - Extensions may support additional coordinate reference systems and add - additional enum values. - type: string - enum: - - 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' - default: 'http://www.opengis.net/def/crs/OGC/1.3/CRS84' - temporal: - description: |- - The temporal extent of the features in the collection. - type: object - required: - - interval - properties: - interval: - description: |- - One or more time intervals that describe the temporal extent of the dataset. - - The first time interval describes the overall - temporal extent of the data. All subsequent time intervals describe - more precise time intervals, e.g., to identify clusters of data. - Clients only interested in the overall extent will only need - to access the first item in each array. - type: array - minItems: 1 - items: - description: |- - Begin and end times of the time interval. The timestamps - are in the coordinate reference system specified in `trs`. By default - this is the Gregorian calendar. - - The value `null` is supported and indicates an open time interval. - type: array - minItems: 2 - maxItems: 2 - items: - type: string - format: date-time - nullable: true - example: - - '2011-11-11T12:22:11Z' - - null - trs: - description: |- - Coordinate reference system of the coordinates in the temporal extent - (property `interval`). The default reference system is the Gregorian calendar. - In the Core this is the only supported temporal reference system. - Extensions may support additional temporal reference systems and add - additional enum values. - type: string - enum: - - 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' - default: 'http://www.opengis.net/def/uom/ISO-8601/0/Gregorian' - links: - type: array - items: - $ref: '#/components/schemas/link' - link: - title: Link - type: object - required: - - href - - rel - properties: - href: - type: string - format: uri - description: The location of the resource - rel: - type: string - description: Relation type of the link - type: - type: string - description: The media type of the resource - title: - type: string - description: Title of the resource - method: - type: string - enum: - - GET - - POST - default: GET - description: Specifies the HTTP method that the resource expects - headers: - type: object - description: Object key values pairs they map to headers - example: - Accept: application/json - body: - type: object - description: For POST requests, the resource can specify the HTTP body as a JSON object. - merge: - type: boolean - default: false - description: |- - This is only valid when the server is responding to POST request. - - If merge is true, the client is expected to merge the body value - into the current request body before following the link. - This avoids passing large post bodies back and forth when following - links, particularly for navigating pages through the `POST /search` - endpoint. - - NOTE: To support form encoding it is expected that a client be able - to merge in the key value pairs specified as JSON - `{"next": "token"}` will become `&next=token`. - license: - type: string - description: |- - License(s) of the data as a SPDX - [License identifier](https://spdx.org/licenses/). Alternatively, use - `proprietary` if the license is not on the SPDX license list or - `various` if multiple licenses apply. In these two cases links to the - license texts SHOULD be added, see the `license` link relation type. - - Non-SPDX licenses SHOULD add a link to the license text with the - `license` relation in the links section. The license text MUST NOT be - provided as a value of this field. If there is no public license URL - available, it is RECOMMENDED to host the license text and - link to it. - example: Apache-2.0 - providers: - type: array - description: >- - A list of providers, which may include all organizations capturing or - processing the data or the hosting provider. Providers should be listed - in chronological order with the most recent provider being the last - element of the list. - items: - type: object - title: Provider - required: - - name - properties: - name: - description: The name of the organization or the individual. - type: string - description: - description: >- - Multi-line description to add further provider information such as - processing details for processors and producers, hosting details - for hosts or basic contact information. - - - [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for - rich text representation. - type: string - roles: - description: |- - Roles of the provider. - - The provider's role(s) can be one or more of the following - elements: - - * licensor: The organization that is licensing the dataset under - the license specified in the collection's license field. - * producer: The producer of the data is the provider that - initially captured and processed the source data, e.g. ESA for - Sentinel-2 data. - * processor: A processor is any provider who processed data to a - derived product. - * host: The host is the actual provider offering the data on their - storage. There should be no more than one host, specified as last - element of the list. - type: array - items: - type: string - enum: - - producer - - licensor - - processor - - host - url: - description: >- - Homepage on which the provider describes the dataset and publishes - contact information. - type: string - format: url - bbox: - description: |- - Only features that have a geometry that intersects the bounding box are - selected. The bounding box is provided as four or six numbers, - depending on whether the coordinate reference system includes a - vertical axis (elevation or depth): - - * Lower left corner, coordinate axis 1 - * Lower left corner, coordinate axis 2 - * Lower left corner, coordinate axis 3 (optional) - * Upper right corner, coordinate axis 1 - * Upper right corner, coordinate axis 2 - * Upper right corner, coordinate axis 3 (optional) - - The coordinate reference system of the values is WGS84 - longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84). - - For WGS84 longitude/latitude the values are in most cases the sequence - of minimum longitude, minimum latitude, maximum longitude and maximum - latitude. However, in cases where the box spans the antimeridian the - first value (west-most box edge) is larger than the third value - (east-most box edge). - - If a feature has multiple spatial geometry properties, it is the - decision of the server whether only a single spatial geometry property - is used to determine the extent or all relevant geometries. - - Example: The bounding box of the New Zealand Exclusive Economic Zone in - WGS 84 (from 160.6°E to 170°W and from 55.95°S to 25.89°S) would be - represented in JSON as `[160.6, -55.95, -170, -25.89]` and in a query as - `bbox=160.6,-55.95,-170,-25.89`. - type: array - minItems: 4 - maxItems: 6 - items: - type: number - example: - - -110 - - 39.5 - - -105 - - 40.5 - datetime: - type: string - format: date-time - nullable: true - description: |- - The searchable date and time of the assets, in UTC. - It is formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - `null` is allowed, but requires `start_datetime` and `end_datetime` from common metadata to be set. - example: '2018-02-12T00:00:00Z' - stac_version: - title: STAC version - type: string - example: 1.0.0 - stac_extensions: - title: STAC extensions - type: array - uniqueItems: true - items: - anyOf: - - title: Reference to a JSON Schema - type: string - format: uri - - title: Reference to a core extension - type: string - item: - description: A GeoJSON Feature augmented with foreign members that contain values relevant to a STAC entity - type: object - required: - - stac_version - - id - - type - - geometry - - bbox - - links - - properties - - assets - properties: - stac_version: - $ref: '#/components/schemas/stac_version' - stac_extensions: - $ref: '#/components/schemas/stac_extensions' - id: - $ref: '#/components/schemas/itemId' - bbox: - $ref: '#/components/schemas/bbox' - geometry: - $ref: '#/components/schemas/geometryGeoJSON' - type: - $ref: '#/components/schemas/itemType' - links: - $ref: '#/components/schemas/links' - properties: - $ref: '#/components/schemas/properties' - assets: - $ref: '#/components/schemas/assets' - example: - stac_version: '1.0.0' - stac_extensions: - - 'https://stac-extensions.github.io/eo/v1.0.0/schema.json' - - 'https://stac-extensions.github.io/view/v1.0.0/schema.json' - - 'https://example.com/cs-extension/1.0/schema.json' - type: Feature - id: CS3-20160503_132131_05 - bbox: - - -122.59750209 - - 37.48803556 - - -122.2880486 - - 37.613537207 - geometry: - type: Polygon - coordinates: - - - - -122.308150179 - - 37.488035566 - - - -122.597502109 - - 37.538869539 - - - -122.576687533 - - 37.613537207 - - - -122.2880486 - - 37.562818007 - - - -122.308150179 - - 37.488035566 - properties: - datetime: '2016-05-03T13:22:30.040Z' - title: A CS3 item - license: PDDL-1.0 - providers: - - name: CoolSat - roles: - - producer - - licensor - url: 'https://cool-sat.com/' - 'view:sun_azimuth': 168.7 - 'eo:cloud_cover': 0.12 - 'view:off_nadir': 1.4 - 'platform': coolsat2 - 'instruments': - - cool_sensor_v1 - 'eo:bands': [] - 'view:sun_elevation': 33.4 - 'eo:gsd': 0.512 - collection: CS3 - links: - - rel: self - href: 'http://cool-sat.com/collections/CS3/items/20160503_132130_04' - - rel: root - href: 'http://cool-sat.com/collections' - - rel: parent - href: 'http://cool-sat.com/collections/CS3' - - rel: collection - href: 'http://cool-sat.com/collections/CS3' - assets: - analytic: - href: 'http://cool-sat.com/static-catalog/CS3/20160503_132130_04/analytic.tif' - title: 4-Band Analytic - thumbnail: - href: 'http://cool-sat.com/static-catalog/CS3/20160503_132130_04/thumbnail.png' - title: Thumbnail - itemId: - type: string - description: Provider identifier, a unique ID. - itemType: - type: string - description: The GeoJSON type - enum: - - Feature - properties: - type: object - required: - - datetime - description: provides the core metadata fields plus extensions - properties: - datetime: - $ref: '#/components/schemas/datetime' - additionalProperties: - description: Any additional properties added in via Item specification or extensions. - assets: - type: object - additionalProperties: - type: object - required: - - href - properties: - href: - type: string - format: url - description: Link to the asset object - example: >- - http://cool-sat.com/catalog/collections/cs/items/CS3-20160503_132130_04/thumb.png - title: - type: string - description: Displayed title - example: Thumbnail - description: - type: string - description: >- - Multi-line description to explain the asset. - - - [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for - rich text representation. - example: Small 256x256px PNG thumbnail for a preview. - type: - type: string - description: Media type of the asset - example: image/png - roles: - type: array - items: - type: string - description: Purposes of the asset - example: - - thumbnail - geometryGeoJSON: - oneOf: - - $ref: '#/components/schemas/pointGeoJSON' - - $ref: '#/components/schemas/multipointGeoJSON' - - $ref: '#/components/schemas/linestringGeoJSON' - - $ref: '#/components/schemas/multilinestringGeoJSON' - - $ref: '#/components/schemas/polygonGeoJSON' - - $ref: '#/components/schemas/multipolygonGeoJSON' - - $ref: '#/components/schemas/geometrycollectionGeoJSON' - geometrycollectionGeoJSON: - type: object - required: - - type - - geometries - properties: - type: - type: string - enum: - - GeometryCollection - geometries: - type: array - items: - $ref: '#/components/schemas/geometryGeoJSON' - linestringGeoJSON: - type: object - required: - - type - - coordinates - properties: - type: - type: string - enum: - - LineString - coordinates: - type: array - minItems: 2 - items: - type: array - minItems: 2 - items: - type: number - multilinestringGeoJSON: - type: object - required: - - type - - coordinates - properties: - type: - type: string - enum: - - MultiLineString - coordinates: - type: array - items: - type: array - minItems: 2 - items: - type: array - minItems: 2 - items: - type: number - multipointGeoJSON: - type: object - required: - - type - - coordinates - properties: - type: - type: string - enum: - - MultiPoint - coordinates: - type: array - items: - type: array - minItems: 2 - items: - type: number - multipolygonGeoJSON: - type: object - required: - - type - - coordinates - properties: - type: - type: string - enum: - - MultiPolygon - coordinates: - type: array - items: - type: array - items: - type: array - minItems: 4 - items: - type: array - minItems: 2 - items: - type: number - pointGeoJSON: - type: object - required: - - type - - coordinates - properties: - type: - type: string - enum: - - Point - coordinates: - type: array - minItems: 2 - items: - type: number - polygonGeoJSON: - type: object - required: - - type - - coordinates - properties: - type: - type: string - enum: - - Polygon - coordinates: - type: array - items: - type: array - minItems: 4 - items: - type: array - minItems: 2 - items: - type: number - featureCollectionGeoJSON: - type: object - required: - - type - - features - properties: - type: - type: string - enum: - - FeatureCollection - features: - type: array - items: - $ref: '#/components/schemas/featureGeoJSON' - featureGeoJSON: - type: object - required: - - type - - geometry - - properties - properties: - type: - type: string - enum: - - Feature - geometry: - $ref: '#/components/schemas/geometryGeoJSON' - properties: - type: object - nullable: true diff --git a/core/openapi.yaml b/core/openapi.yaml deleted file mode 100644 index 3f5712dd..00000000 --- a/core/openapi.yaml +++ /dev/null @@ -1,87 +0,0 @@ -openapi: 3.0.3 -info: - title: STAC API - Core - version: 1.0.0-rc.1 - description: >- - This is an OpenAPI definition of the SpatioTemporal Asset Catalog API - Core - specification. Any service that implements this endpoint to allow discovery of - spatiotemporal assets can be considered a STAC API. - contact: - name: STAC Specification - url: 'http://stacspec.org' - license: - name: Apache License 2.0 - url: 'http://www.apache.org/licenses/LICENSE-2.0' -tags: - - name: Core - description: essential characteristics of a STAC API -paths: - '/': - get: - tags: - - Core - summary: landing page - description: |- - Returns the root STAC Catalog or STAC Collection that is the entry point - for users to browse with STAC Browser or for search engines to crawl. - This can either return a single STAC Collection or more commonly a STAC - catalog. - - The landing page provides links to the - API definition (link relations `service-desc` and `service-doc`) - and the STAC records such as collections/catalogs (link relation `child`) - or items (link relation `item`). - - Extensions may add additional links with new relation types. - operationId: getLandingPage - responses: - '200': - $ref: '#/components/responses/LandingPage' - '500': - $ref: 'commons.yaml#/components/responses/Error' -components: - schemas: - landingPage: - allOf: - - $ref: 'commons.yaml#/components/schemas/catalog' - - $ref: 'commons.yaml#/components/schemas/conformanceClasses' - responses: - LandingPage: - description: |- - The landing page provides links to the API definition - (link relations `service-desc` and `service-doc`) - and the Feature Collection (path `/collections`, link relation - `data`). - content: - application/json: - schema: - $ref: '#/components/schemas/landingPage' - example: - type: Catalog - stac_version: '1.0.0' - id: sentinel - title: Copernicus Sentinel Imagery - description: Catalog of Copernicus Sentinel 1 and 2 imagery. - conformsTo: - - 'https://api.stacspec.org/v1.0.0-rc.1/core' - links: - - href: 'http://data.example.org/' - rel: self - type: application/json - title: this document - - href: 'http://data.example.org/api' - rel: service-desc - type: application/vnd.oai.openapi+json;version=3.0 - title: the API definition - - href: 'http://data.example.org/api.html' - rel: service-doc - type: text/html - title: the API documentation - - href: 'http://data.example.org/catalogs/sentinel-1' - rel: child - type: application/json - title: Sentinel 1 Catalog - - href: 'http://data.example.org/catalogs/sentinel-2' - rel: child - type: application/json - title: Sentinel 2 Catalog diff --git a/extensions.md b/extensions.md deleted file mode 100644 index 7d7eef70..00000000 --- a/extensions.md +++ /dev/null @@ -1,103 +0,0 @@ -# API Extensions - -STAC API aims to define a core of functionality, with richer capabilities enabled by extensions. This document -lists the existing extensions, and explains the process of creating and maturing an extension. - -Anyone is welcome to create an extension (see [info on this](#creating-new-extensions) below), and is encouraged to at least -link to the extension from here. -The third-party / vendor extension section is for the sharing of extensions. As third parties create useful extensions for their implementation -it is expected that others will make use of it, and then evolve to make it a 'community extension', that several providers maintain together. -For now anyone from the community is welcome to use the appropriate parts of the stac-api-spec repository to collaborate. - -All extensions must include a [maturity classification](README.md#maturity-classification), so that STAC API -specification users can easily get a sense of how much they can count on the extension. - -## Extensions, Fragments, and Conformance - -Each extension has its own conformance class, which is specified with a 'conformance URI' that is defined for the extension, and listed in -the table below. These must be listed in the `conformsTo` JSON of the landing page, as specified by [STAC API Core](core/), to let clients -know that they can utilize the functionality. - -Each extension is defined to work against only one of the main API spec's conformance classes. A number of extensions define functionality -that could be used easily in a number of endpoints, such as additional parameters for search. For this repository we put those in the -[fragments](fragments/) directory. The main definition of the functionality lives there, but a fragment does not define a conformance class. -Only extensions have conformance classes, as they define the functionality along with the scope - where it is used. - -**NOTE**: *Currently the fragments are only used in item-search, but in the next release we will define extensions for all the fragments that -are scoped against ogcapi-features*. - -## List of Extensions - -This is the list of all extensions that are contained in the stac-api-spec repository. - -| Extension Name | Scope* | Description | Maturity | -| --------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | -| [Fields](item-search/README.md#fields-extension) | [Item Search](item-search/) request | Adds parameter to control which fields are returned in the response. | Candidate | -| [Filter](item-search/README.md#filter-extension) | [Item Search](item-search/) and [STAC API - Features](ogcapi-features) `/items` requests | Adds parameter to search Item and Collection properties. | Pilot | -| [Context](item-search/README.md#context-extension) | [Item Search](item-search/) response ([ItemCollection](fragments/itemcollection/README.md)) | Adds search related metadata (context) to ItemCollection. | Candidate | -| [Sort](item-search/README.md#sort-extension) | [Item Search](item-search/) request | Adds Parameter to control sorting of returns results. | Candidate | -| [Transaction](ogcapi-features/extensions/transaction/README.md) | [STAC API - Features](ogcapi-features) POST on `/items` endpoint, DELETE/PUT on `/items/{itemId}` endpoint | Adds PUT and DELETE endpoints for the creation, editing, and deleting of Item objects. | Candidate | -| [Items and Collections API Version](ogcapi-features/extensions/version/README.md) | [STAC API - Features](ogcapi-features) on `/items` endpoint | Adds GET versions resource to Collection and Item endpoints and provides semantics for a versioning scheme for Collection and Item objects. | *Proposal* | -| [Query](item-search/README.md#query-extension) | [Item Search](item-search/) request | Adds parameter to search Item and Collection properties. | Candidate | - -### Conformance classes of extensions - -Each extension has its own conformance URI, which is used in the `conformsTo` response of the landing page to let clients know what capabilities -the service supports. This are listed at the top of each extension description, but the full table is given here for ease of reference. - -- [Fields](item-search/README.md#fields-extension) - - - - -- [Filter](item-search/README.md#filter-extension) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- [Context](item-search/README.md#context-extension) - - - - -- [Sort](item-search/README.md#sort-extension) - - - - -- [Transaction](ogcapi-features/extensions/transaction/README.md) - - -- [Items and Collections API Version](ogcapi-features/extensions/version/README.md) - - -- [Query](item-search/README.md#query-extension) - - - -## Third-party / vendor extensions - -The following extensions are provided by third parties (vendors). They tackle very specific -use-cases and may be less stable than the official extensions. Once stable and adopted by multiple -parties, extensions may be made official and incorporated in the STAC repository. - -Please contact a STAC maintainer or open a Pull Request to add your extension to this table. - -| Name | Scope | Description | Vendor | -| -------------------------------------------------------------------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | -| [Free-text Search](https://github.com/cedadev/stac-freetext-search) | [Item Search](item-search/) request | Adds `q` parameter and free-text search against item properties | [CEDA, STFC, UKRI](https://github.com/cedadev) | -| [Context Collections](https://github.com/cedadev/stac-context-collections) | [Item Search](item-search/) request | Adds a `collections` keyword to the [context](https://github.com/radiantearth/stac-api-spec/tree/main/fragments/context) extension response. | [CEDA, STFC, UKRI](https://github.com/cedadev) | - -## Creating new extensions - -Creating new extensions requires creating an OpenAPI fragment to define it, along with a README markdown file that gives -an overview of the functionality. In the README, a conformance URI should be provided, so clients can use it to tell if -a service has the indicated functionality. It is also recommended to note the 'extension maturity', as defined above, -so others can know how widely it is used. - -The new extension can live anywhere online, with a recommendation of using a GitHub repository to be able to track changes. -The first step in sharing the extension is to add it to the third-party / vendor extension table above. If it is of something -that the wider community may be interested in then it should be added to the appropriate folder in the main repo as a pull -request. diff --git a/fragments/README.md b/fragments/README.md deleted file mode 100644 index a0b4549a..00000000 --- a/fragments/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# STAC API - Fragments - -This directory contains reusable OpenAPI fragments that are used by other capabilities. They tend to -be common API components such as parameters that get mixed in to various endpoints. -They are kept in this separate fragment directory as they are not specific to any extension and are meant -to be re-used when drafting new API extensions. - -For example '[sort](sort/)' introduces a parameter (`sortby`) that can be used by both [item-search](../item-search) -at the `/search` endpoint, and by [features](../ogcapi-features) in any of its `items` endpoints. To keep -things clean we specify a conformance class for each, so clients can know exactly what to expect. Each -conformance class is specified in the relevant folder as an 'extension' to the main capability. But their -semantics are exactly the same, so we put the shared openapi definition in this `fragments` directory. - -| Fragment Name | Description | -| ------------------------------------------ | -------------------------------------------------------------------------- | -| [Context](context/README.md) | Adds search related metadata (context) to GeoJSON Responses. | -| [Fields](fields/README.md) | Adds parameter to control which fields are returned in the response. | -| [ItemCollection](itemcollection/README.md) | The specification for a set of items, e.g. returned by a search. | -| [Query](query/README.md) | Adds parameter to compare properties and only return the items that match. | -| [Sort](sort/README.md) | Adds Parameter to control sorting of returns results. | diff --git a/fragments/context/README.md b/fragments/context/README.md deleted file mode 100644 index 449315f0..00000000 --- a/fragments/context/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# STAC API - Context Fragment - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) -- **Conformance Classes:** - - Item Search binding: - - STAC Features binding: -- **Fragment [Maturity Classification](../../README.md#maturity-classification):** Candidate -- **Dependents:** - - [Item Search](../../item-search) - -This extension is intended to augment the core [ItemCollection](../itemcollection/README.md) -object when the ItemCollection is the result of a search, for example, from calling the `/search` API endpoint. - -This fragment may be bound to either or both of -[Item Search](../../item-search) (`/search` endpoint) or -[STAC Features](../../ogcapi-features) (`/collections/{collectionId}/items` endpoint) by -advertising the relevant conformance class. - -**Note**: OGC API Features - Part 1 has its own way returning `numberMatched` and `numberReturned` at the top level, instead of in a context -object. We are hoping to [align](https://github.com/opengeospatial/ogcapi-common/issues/82), but until then, it -is required to implement both when implementing STAC Features. - -- [Example](examples/example.json) -- [JSON Schema](json-schema/schema.json) - -## ItemCollection fields - -| Element | Type | Description | -| --------- | --------------------------------- | ------------------------------------------------------------------------------------------------ | -| `context` | [Context Object](#context-object) | **REQUIRED.** The search-related metadata for the [ItemCollection](../itemcollection/README.md). | - -## Context Object - -| Element | Type | Description | -| -------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| returned | integer | **REQUIRED** The count of results returned by this response. Equal to the cardinality of features array. | -| limit | integer \| null | The maximum number of results to which the result was limited. | -| matched | integer | The count of total number of results that match for this query, possibly estimated, particularly in the context of NoSQL data stores. | - -The default sort of query results should be stable, but may not be depending on the data store's sorting performance. -It is recommended that the [Sort API Extension](../sort/README.md) be implemented in conjunction with this extension -and that fields conducive to stable sorting have sorting enabled over them. - -**limit** - The maximum number of results requested explicitly, the default limit used by the service implementation -if no parameter was provided, or the maximum limit used by the service implementation if the limit parameter was larger. -`null` if no limit was placed on the query that retrieved these results, which should be a rare case in practice. - -## Example ItemCollection augmented with Context field - -```json -{ - "type": "FeatureCollection", - "features": [ ], - "context": { - "returned": 9, - "limit": 10, - "matched": 1092873 - } -} -``` diff --git a/fragments/context/examples/example.json b/fragments/context/examples/example.json deleted file mode 100644 index fcb6809f..00000000 --- a/fragments/context/examples/example.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "type": "FeatureCollection", - "context": { - "returned": 1, - "limit": 1, - "matched": 1092873 - }, - "features": [ - { - "stac_version": "1.0.0", - "stac_extensions": [], - "type": "Feature", - "id": "CS3-20160503_132131_05", - "bbox": [ - -122.59750209, - 37.48803556, - -122.2880486, - 37.613537207 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -122.308150179, - 37.488035566 - ], - [ - -122.597502109, - 37.538869539 - ], - [ - -122.576687533, - 37.613537207 - ], - [ - -122.288048600, - 37.562818007 - ], - [ - -122.308150179, - 37.488035566 - ] - ] - ] - }, - "properties": { - "datetime": "2016-05-03T13:22:30.040Z" - }, - "collection": "CS3", - "links": [ ], - "assets": { } - } - ] -} \ No newline at end of file diff --git a/fragments/context/json-schema/schema.json b/fragments/context/json-schema/schema.json deleted file mode 100644 index f92061c1..00000000 --- a/fragments/context/json-schema/schema.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "schema.json#", - "title": "Context Extension", - "type": "object", - "description": "STAC context metadata", - "allOf": [ - { - "$ref": "#/definitions/context" - } - ], - "definitions": { - "context": { - "type": "object", - "required": [ - "context" - ], - "properties": { - "context": { - "type": "object", - "required": [ - "returned" - ], - "properties": { - "returned": { - "type": "integer", - "minimum": 0 - }, - "limit": { - "type": ["integer", "null"], - "minimum": 0 - }, - "matched": { - "type": "integer", - "minimum": 0 - } - } - } - } - } - } -} diff --git a/fragments/context/openapi.yaml b/fragments/context/openapi.yaml deleted file mode 100644 index 025d6c76..00000000 --- a/fragments/context/openapi.yaml +++ /dev/null @@ -1,34 +0,0 @@ -openapi: 3.0.3 -info: - title: The SpatioTemporal Asset Catalog API - Context - description: Adds search related metadata (context) to GeoJSON Responses. - version: 1.0.0-rc.1 -paths: {} -components: - schemas: - itemCollection: - type: object - description: |- - **Extension:** Context - - Augments lists of resources with the number of returned and matches resource and the given limit for the request. - x-stac-api-fragment: context - properties: - 'context': - type: object - required: - - returned - properties: - returned: - type: integer - minimum: 0 - example: 1 - limit: - type: integer - nullable: true - minimum: 0 - example: 5 - matched: - type: integer - minimum: 0 - example: 314159 diff --git a/fragments/fields/README.md b/fragments/fields/README.md deleted file mode 100644 index a41b3abd..00000000 --- a/fragments/fields/README.md +++ /dev/null @@ -1,177 +0,0 @@ -# STAC API - Fields Fragment - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) -- **Conformance Classes:** - - Item Search binding: - - STAC Features binding: -- **Fragment [Maturity Classification](../../README.md#maturity-classification):** Candidate -- **Dependents:** - - [Item Search](../../item-search) - - [STAC Features](../../ogcapi-features) - -STAC API by default returns every attribute in an item. However, Item objects can have hundreds of fields, or incredibly large -geometries, and even smaller Item objects can get big when millions are requested but not all information is used. This -fragment provides a mechanism for clients to request that servers to explicitly include or exclude certain fields. - -This fragment may be bound to either or both of -[Item Search](../../item-search) (`/search` endpoint) or -[STAC Features](../../ogcapi-features) (`/collections/{collectionId}/items` endpoint) by -advertising the relevant conformance class. - -When used in a POST request with `Content-Type: application/json`, this adds an attribute `fields` with -an object value to the core JSON search request body. The `fields` object contains two attributes with string array -values, `include` and `exclude`. - -When used with GET or POST with `Content-Type: application/x-www-form-urlencoded` or -`Content-Type: multipart/form-data`, the semantics are the same, except the syntax is a single parameter `fields` with -a comma-separated list of attribute names, where `exclude` values are those prefixed by a `-` and `include` values are -those with no prefix, e.g., `-geometry`, or `id,-geometry,properties`. - -It is recommended that implementations provide exactly the `include` and `exclude` sets specified by the request, -but this is not required. These values are only hints to the server as to the desires of the client, and not a -contract about what the response will be. Implementations are still considered compliant if fields not specified as part of `include` -are in the response or ones specified as part of `exclude` are. For example, implementations may choose to always -include simple string fields like `id` and `type` regardless of the `exclude` specification. However, it is recommended -that implementations honor excludes for attributes with more complex and arbitrarily large values -(e.g., `geometry`, `assets`). For example, some Item objects may have a geometry with a simple 5 point polygon, but these -polygons can be very large when reprojected to EPSG:4326, as in the case of a highly-decimated sinusoidal polygons. -Implementations are also not required to implement semantics for nested values whereby one can include an object, but -exclude attributes of that object, e.g., include `properties` but exclude `properties.datetime`. - -No error must be returned if a specified field has no value for it in the catalog. For example, if the attribute -"properties.eo:cloud_cover" is specified but there is no cloud cover value for an Item or the API does not even -support the EO Extension, a successful HTTP response must be returned and the Item entities will not contain that -attribute. - -If no `fields` are specified, the response is **must** be a valid [ItemCollection](../itemcollection/README.md). If a client excludes -attributes that are required in a STAC Item, the server may return an invalid STAC Item. For example, if `type` -and `geometry` are excluded, the entity will not even be a valid GeoJSON Feature, or if `bbox` is excluded then the entity -will not be a valid STAC Item. - -Implementations may return attributes not specified, e.g., id, but must avoid anything other than a minimal entity -representation. - -## Include/Exclude Semantics - -1. If `fields` attribute is specified with an empty object, or with both `include` and `exclude` set to null or an -empty array, the recommended behavior is as if `include` was set to -`["id", "type", "geometry", "bbox", "links", "assets", "properties.datetime"]`. This default is so that the entity -returned is a valid STAC Item. Implementations may choose to add other properties, e.g., `created`, but the number -of default properties attributes should be kept to a minimum. -2. If only `include` is specified, these attributes are added to the default set of attributes (set union operation). -3. If only `exclude` is specified, these attributes are subtracted from the union of the default set of attributes and -the `include` attributes (set difference operation). This will result in an entity that is not a valid Item if any -of the excluded attributes are in the default set of attributes. -4. If both `include` and `exclude` attributes are specified, semantics are that a field must be included and **not** -excluded. E.g., if `properties` is included and `properties.datetime` is excluded, then `datetime` must not appear -in the attributes of `properties`. - -## Examples - -Return baseline fields. This **must** return valid STAC Item entities. - -Query Parameters -```http -?fields= -``` - -JSON -```json -{ - "fields": { - } -} -``` - -This has a similar effect as an empty object for `fields`, but it is up to the discretion of the implementation - -Query Parameters -```http -?fields=id,type,geometry,bbox,properties,links,assets -``` - -JSON -```json -{ - "fields": { - "include": [ - "id", - "type", - "geometry", - "bbox", - "properties", - "links", - "assets" - ] - } -} -``` - -Exclude `geometry` from the baseline fields. This **must** return an entity that is not a valid GeoJSON Feature or a valid STAC Item. - -Query Parameters -```http -?fields=-geometry -``` - -JSON -```json -{ - "fields": { - "exclude": [ - "geometry" - ] - } -} -``` - -To return the `id`, `type`, `geometry`, and the Properties attribute `eo:cloud_cover`. -This **must** return a valid STAC Item, as the includes are added to the default includes. -Explicitly specifying `id`, `type`, and `geometry` has not effect as these are default fields, -but `properties.eo:cloud_cover` is not a default field and thereby should be in the response. - -Query Parameters -```http -?fields=id,type,geometry,properties.eo:cloud_cover -``` - -JSON -```json -{ - "fields": { - "include": [ - "id", - "type", - "geometry", - "properties.eo:cloud_cover" - ] - } -} -``` - -To include `id` and all the properties fields, except for the `foo` field. - -Query Parameters -```http -?fields=id,properties,-properties.foo -``` - -also valid: -```http -?fields=+id,+properties,-properties.foo -``` - -JSON -```json -{ - "fields": { - "include": [ - "id", - "properties" - ], - "exclude": [ - "properties.foo" - ] - } -} -``` diff --git a/fragments/fields/openapi.yaml b/fragments/fields/openapi.yaml deleted file mode 100644 index f772b435..00000000 --- a/fragments/fields/openapi.yaml +++ /dev/null @@ -1,57 +0,0 @@ -openapi: 3.0.3 -info: - title: The SpatioTemporal Asset Catalog API - Fields - description: Adds parameter to control which fields are returned in the response. - version: 1.0.0-rc.1 -paths: {} -components: - parameters: - fields: - name: fields - x-stac-api-fragment: fields - in: query - description: |- - **Extension:** Fields - - Determines the shape of the features in the response - required: false - schema: - type: string - example: 'id,type,-geometry,bbox,properties,-links,-assets' - style: form - explode: false - schemas: - searchBody: - type: object - x-stac-api-fragment: fields - description: |- - **Extension:** Fields - - Determines the shape of the features in the response - properties: - fields: - $ref: '#/components/schemas/fields' - fields: - description: | - The include and exclude members specify an array of - property names that are either included or excluded - from the result, respectively. If both include and - exclude are specified, include takes precedence. - Values should include the full JSON path of the property. - type: object - properties: - include: - type: array - items: - type: string - exclude: - type: array - items: - type: string - example: - include: - - id - - 'properties.eo:cloud_cover' - exclude: - - geometry - - properties.datetime diff --git a/fragments/filter/README.md b/fragments/filter/README.md deleted file mode 100644 index 73b50539..00000000 --- a/fragments/filter/README.md +++ /dev/null @@ -1,1086 +0,0 @@ -# STAC API - Filter Fragment - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) -- **Conformance Classes:** - - Item Search Filter: - - Filter: - - Features Filter: - - CQL2 Text: - - CQL2 JSON: - - Basic CQL2: - - Advanced Comparison Operators: - - Basic Spatial Operators: - - Spatial Operators: - - Temporal Operators: - - Custom Functions: - - Arithmetic Expressions: - - Array Operators: - - Property-Property Comparisons: - - Accent and Case-insensitive Comparison: -- **Extension [Maturity Classification](../../README.md#maturity-classification):** Pilot -- **Dependents:** - - [Item Search](../../item-search) - -- [STAC API - Filter Fragment](#stac-api---filter-fragment) - - [Overview](#overview) - - [Limitations of Item Search](#limitations-of-item-search) - - [Filter expressiveness](#filter-expressiveness) - - [Conformance Classes](#conformance-classes) - - [Getting Started with Implementation](#getting-started-with-implementation) - - [Queryables](#queryables) - - [GET Query Parameters and POST JSON fields](#get-query-parameters-and-post-json-fields) - - [Interaction with Endpoints](#interaction-with-endpoints) - - [Examples](#examples) - - [Example 1](#example-1) - - [Example 1: GET with cql2-text](#example-1-get-with-cql2-text) - - [Example 1: POST with cql2-json](#example-1-post-with-cql2-json) - - [Example 2](#example-2) - - [Example 2: GET with cql2-text](#example-2-get-with-cql2-text) - - [Example 2: POST with cql2-json](#example-2-post-with-cql2-json) - - [Example 3: Conjunction with AND](#example-3-conjunction-with-and) - - [Example 3: AND cql2-text (GET)](#example-3-and-cql2-text-get) - - [Example 3: AND cql2-json (POST)](#example-3-and-cql2-json-post) - - [Example 4: Disjunction with OR](#example-4-disjunction-with-or) - - [Example 4: OR cql2-text (GET)](#example-4-or-cql2-text-get) - - [Example 4: OR cql2-json (POST)](#example-4-or-cql2-json-post) - - [Example 5: Property-Property Comparisons](#example-5-property-property-comparisons) - - [Example 5: GET with cql2-text](#example-5-get-with-cql2-text) - - [Example 5: POST with cql2-json](#example-5-post-with-cql2-json) - - [Example 6: Temporal Intersection](#example-6-temporal-intersection) - - [Example 6: T_INTERSECTS cql2-text (GET)](#example-6-t_intersects-cql2-text-get) - - [Example 6: T_INTERSECTS cql2-json (POST)](#example-6-t_intersects-cql2-json-post) - - [Example 7: Spatial Intersection](#example-7-spatial-intersection) - - [Example 7: S_INTERSECTS cql2-text (GET)](#example-7-s_intersects-cql2-text-get) - - [Example 7: S_INTERSECTS cql2-json (POST)](#example-7-s_intersects-cql2-json-post) - - [Example 8: Spatial Intersection Disjunction](#example-8-spatial-intersection-disjunction) - - [Example 8: S_INTERSECTS cql2-text (GET)](#example-8-s_intersects-cql2-text-get) - - [Example 8: S_INTERSECTS cql2-json (POST)](#example-8-s_intersects-cql2-json-post) - - [Example 9: Using IS NULL](#example-9-using-is-null) - - [Example 9: cql2-text (GET)](#example-9-cql2-text-get) - - [Example 9: cql2-json (POST)](#example-9-cql2-json-post) - - [Example 10: Using BETWEEN](#example-10-using-between) - - [Example 10: cql2-text (GET)](#example-10-cql2-text-get) - - [Example 10: cql2-json (POST)](#example-10-cql2-json-post) - - [Example 11: Using LIKE](#example-11-using-like) - - [Example 11: cql2-text (GET)](#example-11-cql2-text-get) - - [Example 11: cql2-json (POST)](#example-11-cql2-json-post) - - [Example 12: Using the CASEI Case-insensitive Comparison Function](#example-12-using-the-casei-case-insensitive-comparison-function) - - [Example 12: cql2-text (GET)](#example-12-cql2-text-get) - - [Example 12: cql2-json (POST)](#example-12-cql2-json-post) - - [Example 13: Using the ACCENTI Accent-insensitive Comparison Function](#example-13-using-the-accenti-accent-insensitive-comparison-function) - - [Example 13: cql2-text (GET)](#example-13-cql2-text-get) - - [Example 13: cql2-json (POST)](#example-13-cql2-json-post) - -## Overview - -The Filter extension provides an expressive mechanism for searching based on Item attributes. - -This extension references behavior defined in the -[OGC API - Features - Part 3: Filtering and the Common Query Language (CQL2)](https://github.com/opengeospatial/ogcapi-features/tree/master/extensions/cql) and [Common Query Language (CQL2) -](https://github.com/opengeospatial/ogcapi-features/blob/master/cql2/README.md) -specifications. As of November 2021, these specifications are still in draft status, but rapidly converging on -finalized behavior. Several behaviors have changed since the -last published [draft](https://portal.ogc.org/files/96288), so this spec references the latest revision in the -[OAFeat Part 3 spec's GitHub repo](https://github.com/opengeospatial/ogcapi-features/tree/master/extensions/cql) -and [Common Query Language (CQL2)](https://github.com/opengeospatial/ogcapi-features/blob/master/cql2/README.md)). -Implementers should proceed with implementation, but must be aware that minor changes may be made -before these specs are final. - -OAFeat Part 3 CQL2 formally defines the syntax of "CQL2" as both a text format (cql2-text) as an ABNF grammar -(largely similar to the BNF grammar in the General Model for CQL) and a JSON format (cql2-json) as a JSON Schema and -OpenAPI schema. Additionally, it defines a natural -language description of the declarative semantics, which were never well-defined for the original CQL language. -The CQL2 Text format has had long-standing use within -geospatial software (e.g., GeoServer), is not expected to change before final. -OGC CQL2 Text has been previously described in [OGC Filter Encoding](https://www.ogc.org/standards/filter) and -[OGC Catalogue Services 3.0 - General Model](http://docs.opengeospatial.org/is/12-168r6/12-168r6.html#62) -(including a BNF grammar in Annex B). The CQL2 JSON format is newly-defined and has changed significantly during -the draft process, but is believed to be stable now. - -It should be noted that the "CQL" referred to here is "CQL2" defined in OGC API - Features - Part 3. This is a related, but -different language to the "classic" OGC CQL defined in the General Model. Relatedly, CQL is **not** -referencing or related two other "CQL" languages, -the [SRU (Search/Retrieve via URL) Contextual Query Language](https://www.loc.gov/standards/sru/cql/index.html) (formerly -known as Common Query Language) or the [Cassandra Query Language](https://cassandra.apache.org/doc/latest/cql/) used by the -Cassandra database. - -## Limitations of Item Search - -OAFeat defines a limited set of filtering capabilities. Filtering can only be done over a single collection and -with only a single `bbox` (rectangular spatial filter) parameter and a single datetime (instant or interval) parameter. - -The STAC Item Search specification extends the functionality of OAFeat in a few key ways: -- It allows cross-collection filtering, whereas OAFeat only allows filtering within a single collection. - (`collections` parameter, accepting 0 or more collections) -- It allows filtering by Item ID (`ids` parameter) -- It allows filtering based on a single GeoJSON Geometry, rather than only a bbox (`intersects` parameter) - -However, it does not contain a formalized way to filter based on arbitrary fields in an Item. For example, there is -no way to express the filter "item.properties.eo:cloud_cover is less than 10". It also does not have a way to logically combine -multiple spatial or temporal filters. - -## Filter expressiveness - -This extension expands the capabilities of Item Search and the OAFeat Items resource with -[OAFeat Part 3 CQL2](https://portal.ogc.org/files/96288) -by providing an expressive query language to construct more complex filter predicates using operators that are similar to -those provided by SQL. This extension also supports the Queryables mechanism that allows discovery of what Item fields can be used in -predicates. - -CQL2 enables more expressive queries than supported by STAC API Item Search. These include: -- Use of Item Property values in predicates (e.g., `item.properties.eo:cloud_cover`), using comparison operators -- Items whose `datetime` values are in the month of August of the years 2017-2021, using OR and datetime comparisons -- Items whose `geometry` values intersect any one of several Polygons, using `OR` and `S_INTERSECTS` -- Items whose `geometry` values intersect one Polygon, but do not intersect another one, using AND, NOT, and - S_INTERSECTS - -## Conformance Classes - -OAFeat Part 3 CQL2 defines several conformance classes that allow implementers to create compositions of -functionality that support whatever expressiveness they need. This allows implementers to incrementally support CQL -syntax, without needing to implement a huge spec all at once. Some implementers choose not to incur the cost of -implementing functionality they do not need or may not be able to implement functionality that is not supported by -their underlying datastore, e.g., Elasticsearch does not support the spatial predicates required by the -Spatial Operators conformance class, only the `S_INTERSECTS` operator in the Basic Spatial Operators class. - -The STAC API Filter Extension reuses the definitions and conformance classes in OAFeat CQL, -adding only the *Item Search Filter* conformance class -(`https://api.stacspec.org/v1.0.0-rc.1/item-search#filter`) to bind -the Filter behavior to the Item Search endpoint. - -The implementation **must** support these conformance classes: - -- Filter (`http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/filter`) defines the Queryables mechanism and - parameters `filter-lang`, `filter-crs`, and `filter`. -- Basic CQL2 (`http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2`) defines the basic operations allowed in - the query language used for the `filter` parameter defined by Filter. This includes logical operators (`AND`, `OR`, `NOT`), - comparison operators (`=`, `<>`, `<`, `<=`, `>`, `>=`), and `IS NULL`. The comparison operators are allowed against - string, numeric, boolean, date, and datetime types. -- Item Search Filter (`https://api.stacspec.org/v1.0.0-rc.1/item-search#filter`) binds the Filter and - Basic CQL2 conformance classes to apply to the Item Search endpoint (`/search`). This class is the correlate of the OAFeat CQL2 Features - Filter class that binds Filter and Basic CQL2 to the Features resource (`/collections/{cid}/items`). - -The implementation **must** support at least one of the "CQL2 Text" or "CQL2 JSON" conformance classes that -define the CQL2 format used in the filter parameter: - -- CQL2 Text (`http://www.opengis.net/spec/cql2/1.0/conf/cql2-text`) defines that the CQL2 Text format is supported by Item Search -- CQL2 JSON (`http://www.opengis.net/spec/cql2/1.0/conf/cql2-json`) defines that the CQL2 JSON format is supported by Item Search - -If both are advertised as being supported, it is only required that both be supported for GET query parameters, and that -only that CQL2 JSON be supported for POST JSON requests. It is recommended that clients use CQL2 Text in GET requests and -CQL2 JSON in POST requests. - -The implementation **may** support the OAFeat Part 3 *Features Filter* conformance classes: - -- Features Filter (`http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/features-filter`) binds the Filter and - CQL2 conformance classes to the Features resource(`/collections/{cid}/items`). - -For additional capabilities, the following classes may be implemented: -- Advanced Comparison Operators - (`http://www.opengis.net/spec/cql2/1.0/conf/advanced-comparison-operators`) defines the `LIKE`, - `BETWEEN`, and `IN` operators. **Note**: this conformance class no longer requires implementing the - `lower` and `upper` functions. -- Basic Spatial Operators (`http://www.opengis.net/spec/cql2/1.0/conf/basic-spatial-operators`) defines the intersects operator (`S_INTERSECTS`). -- Spatial Operators - (`http://www.opengis.net/spec/cql2/1.0/conf/spatial-operators`) defines a set of operators that - are part of the Dimensionally Extended Nine-intersection Model (DE-9IM) relation operators - (`S_CONTAINS`, `S_CROSSES`, `S_DISJOINT`, `S_EQUALS`, `S_INTERSECTS`, `S_OVERLAPS`, `S_TOUCHES`, and `S_WITHIN`) -- Temporal Operators - (`http://www.opengis.net/spec/cql2/1.0/conf/temporal-operators`) defines several temporal - operators that provide more expressivity with datetime types than the relative comparison - operators - in the Basic CQL2 class. -- Custom Functions (`http://www.opengis.net/spec/cql2/1.0/conf/functions`) defines support - for function definition and usage. -- Arithmetic Expressions: (`http://www.opengis.net/spec/cql2/1.0/conf/arithmetic`) defines - support for arithmetic expressions. -- Array Operators: (`http://www.opengis.net/spec/cql2/1.0/conf/array-operators`) - defines array operators (`A_EQUALS`, `A_CONTAINS`, `A_CONTAINED_BY`, and `A_OVERLAPS`). -- Property-Property Comparisons: (`http://www.opengis.net/spec/cql2/1.0/conf/property-property`) - allows the use of queryables (e.g., properties) in both positions of a clause, not just in the - first position. This allows predicates like `property1 = property2` be expressed, whereas the - Basic CQL2 conformance class only requires comparisons against right-hand-side literals. -- Accent and Case-insensitive Comparison: (`http://www.opengis.net/spec/cql2/1.0/conf/accent-case-insensitive-comparison`) - defines the UPPER and LOWER functions that can be used for case-insensitive comparison. - -Additionally, if an API implements the OGC API Features endpoint, it is **recommended** that the OAFeat Part 3 Filter, -Features Filter, and Basic CQL2 conformance classes be implemented, which allow use of CQL2 filters against the -OAFeat Part 1 Features endpoint (`/collections/{collectionId}/items`). Note that POST with a JSON body -to the Features resource is not supported, as POST is used by the -[Transaction Extension](../../ogcapi-features/extensions/transaction/README.md) for creating items. - -## Getting Started with Implementation - -It recommended that implementers start with fully implementing only a subset of functionality. A good place to start is -implementing only the Basic CQL2 conformance class of logical and comparison operators, defining a static Queryables -schema with no queryables advertised and the `additionalProperties` field set to `true`, and -only implementing CQL2 JSON. Following from that can be support for -S_INTERSECTS, defining a static Queryables schema with only the basic Item properties, and -implementing CQL2 Text. From there, other comparison operators can be implemented and a more -dynamic Queryables schema. - -Formal definitions and grammars for CQL2 can be found in the -[OAFeat CQL spec](https://github.com/opengeospatial/ogcapi-features/tree/master/cql2) includes a BNF grammar - for CQL2 Text and both a JSON Schema and an OpenAPI specification for CQL2 JSON. The standalone files are: -- [cql.bnf](https://github.com/opengeospatial/ogcapi-features/blob/master/extensions/cql/standard/schema/cql.bnf) -- [cql.json](https://github.com/opengeospatial/ogcapi-features/blob/master/extensions/cql/standard/schema/cql.json) -- [cql.yml](https://github.com/opengeospatial/ogcapi-features/blob/master/extensions/cql/standard/schema/cql.yml) - -These projects have or are developing CQL2 support: -- [pgstac](https://github.com/stac-utils/pgstac) supports CQL2 JSON -- [pygeofilter](https://github.com/geopython/pygeofilter) has support for CQL2 JSON and for the older ECQL standard that -- [xtraplatform-spatial](https://github.com/interactive-instruments/xtraplatform-spatial) has support for CQL2 Text and provides an [ANTLR 4 grammer](https://github.com/interactive-instruments/xtraplatform-spatial/tree/master/xtraplatform-cql/src/main/antlr/de/ii/xtraplatform/cql/infra) -- [Geotools](https://github.com/geotools/geotools) has support for [CQL2 text](https://github.com/geotools/geotools/tree/main/modules/library/cql/src/main/java/org/geotools/filter/text/cql2) -- [Franklin](https://github.com/azavea/franklin) is working on it in [this PR](https://github.com/azavea/franklin/pull/750). - -Note that the [xbib CQL library (JVM)](https://github.com/xbib/cql) is the OASIS Contextual Query Language, not -OGC CQL, and should not be used to implement this extension, as they are significantly different query languages. -[Stacatto](https://github.com/planetlabs/staccato) uses this for their query language implementation, but it is -not compliant with this extension. - -## Queryables - -The Queryables mechanism allows a client to discover what terms are available for use when writing filter -expressions. These terms can be defined per-collection, and the intersection of these terms over all collections is what -is available for filtering when there are no collection restrictions. By default, these queryables are the only terms that may be used -in filter expressions, and if any term is used in expression that is not defined as a queryable and error must be -returned according to OAFeat Part 3. It is recognized that this is a severe restriction in STAC APIs that have highly variable -and dynamic content, so this behavior may be modified by setting the `additionalProperties` attribute in the -queryables definition to `true`. As such, any syntactically-valid term for a property will be accepted, and the -matching semantics are such that, if an Item does not have an attribute by that name, the value is assumed to be -`null`. It is recommended to use fully-qualified property names (e.g., `properties.eo:cloud_cover`). - -Queryables are advertised via a JSON Schema document retrieved from the `/queryables` endpoint. This endpoint at the root -retrieves queryables that apply to all collections. When used as a subresource of the collection resource -(e.g. /collections/collection1/queryables), it returns queryables pertaining only to that single collection. - -It is required to implement both of these endpoints, but for a STAC API, this may simply be a static document of the -STAC-specific fields. A basic Queryables -definitions for STAC Items should include at least the fields id, collection, geometry, and datetime. - -```json -{ - "$schema" : "https://json-schema.org/draft/2019-09/schema", - "$id" : "https://stac-api.example.com/queryables", - "type" : "object", - "title" : "Queryables for Example STAC API", - "description" : "Queryable names for the example STAC API Item Search filter.", - "properties" : { - "id" : { - "description" : "ID", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/id" - }, - "collection" : { - "description" : "Collection", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/collection" - }, - "geometry" : { - "description" : "Geometry", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/geometry" - }, - "datetime" : { - "description" : "Datetime", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/datetime.json#/properties/datetime" - } - }, - "additionalProperties": true -} -``` - -Fields in Item Properties should be exposed with their un-prefixed names, and not require expressions to prefix them -with `properties`, e.g., `eo:cloud_cover` instead of `properties.eo:cloud_cover`. - -There may also be support for finding what queryables are available for a subset of collections, e.g., -`/queryables?collections=c1,c3`) as described in [this issue](https://github.com/opengeospatial/ogcapi-features/issues/576). - -The Landing Page endpoint (`/`) will have a Link with rel `http://www.opengis.net/def/rel/ogc/1.0/queryables` with an href to -the endpoint `/queryables`. Additionally, each Collection resource will have a Link to the queryables resource for that -collection, e.g., `/collections/collection1/queryables`. - -The queryables endpoint returns a JSON Schema describing the names and types of terms that may be used in filter expressions. -This response is defined in JSON Schema because it is a well-specified typed schema, but it is not used for validating a JSON -document derived from it. This schema defines the terms that may be used in a CQL2 filter. - -These queryable terms are mapped by the service to filter Items. For example, the service may define a queryable with the -name "eo:cloud_cover" that can be used in a CQL2 expression like `eo:cloud_cover <= 10`, with the semantics that only Items where the -`properties.eo:cloud_cover` value was <= 10 would match the filter. The server would then translate this into an appropriate -query for the data within its datastore. - -Queryables can be static or dynamically derived. For example, `cloud_cover` might be specified to have a value 0 to 100 or a field -may have a set of enumerated values dynamically determined by an aggregation at runtime. This schema can be used by a UI or -interactive client to dynamically expose to the user the fields that are available for filtering, and provide a precise group -of options for the values of these terms. - -Queryables can also be used to advertise "synthesized" property values. The only requirement in CQL2 is that the property have a type -and evaluate to literal value of that type or NULL. For example, a filter like "Items must have an Asset with an eo:band with -the common_name of 'nir'" can be expressed. A Queryable `assets_bands` could be defined to have a type of array of string and -have the semantics that it contains all of `common_name` values across all assets and bands for an Item. This could then be -filtered with the CQL2 expression `'nir' in assets_bands`. Implementations would then expand this expression into the -appropriate query against its datastore. (TBD if this will actually work or not. This is also related to the upcoming -restriction on property/literal comparisons) - -An implementation may also choose not to advertise any queryables, and provide the user with out-of-band information or -simply let them try querying against fields. While this is not allowed according to the OGC CQL2 Queryable spec, it is allowed -in STAC API by the Filter Extension. In this case, the queryables endpoint (`/queryables`) would return this document: - -```json -{ - "$schema" : "https://json-schema.org/draft/2019-09/schema", - "$id" : "https://stac-api.example.com/queryables", - "type" : "object", - "title" : "Queryables for Example STAC API", - "description" : "Queryable names for the example STAC API Item Search filter.", - "properties" : { - }, - "additionalProperties": true -} -``` - -## GET Query Parameters and POST JSON fields - -This extension adds three GET query parameters or POST JSON fields to an Item Search request: - -- filter-lang:`cql2-text` or `cql2-json`. If undefined, defaults to `cql2-text` for a GET request and `cql2-json` for a POST request. -- filter-crs: recommended to not be passed, but server must only accept `http://www.opengis.net/def/crs/OGC/1.3/CRS84` as - a valid value, may reject any others -- filter: CQL2 filter expression - -API implementations advertise which `filter-lang` values are supported via conformance classes in the Landing Page. -At least one must be implemented, but it is recommended to implement both. If both are advertised as conformance classes, the -server should process either for a GET request, but may only process cql2-json for a POST request. If POST of cql2-text is not -supported, the server must return a 400 error if `filter-lang=cql2-text`. - -## Interaction with Endpoints - -In an implementation that supports several operator classes, the Landing Page (`/`) must return a document including -at least these values: - -```json -{ - "id": "example_stacapi", - "conformsTo": [ - "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core", - "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30", - "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson", - - "http://www.opengis.net/spec/ogcapi_common-2/1.0/conf/collections", - - "http://api.stacspec.org/v1.0.0-rc.1/core", - "http://api.stacspec.org/v1.0.0-rc.1/stac-search", - "http://api.stacspec.org/v1.0.0-rc.1/stac-response", - - "https://api.stacspec.org/v1.0.0-rc.1/item-search#filter" - "http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/filter", - "http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/features-filter", - "http://www.opengis.net/spec/cql2/1.0/conf/cql2-text", - "http://www.opengis.net/spec/cql2/1.0/conf/cql2-json", - "http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2", - "http://www.opengis.net/spec/cql2/1.0/conf/basic-spatial-operators", - "http://www.opengis.net/spec/cql2/1.0/conf/advanced-comparison-operators" - - ], - "links": [ - { - "title": "Search", - "href": "https://stac-api.example.com/search", - "rel": "search", - "type": "application/geo+json" - }, - { - "title": "Queryables", - "href": "https://stac-api.example.com/queryables", - "rel": "http://www.opengis.net/def/rel/ogc/1.0/queryables", - "type": "application/schema+json" - } - ], - "stac_extensions": [], - "stac_version": "1.0.0", - "type": "Catalog", -} -``` - -A client can use the link with `"rel": "http://www.opengis.net/def/rel/ogc/1.0/queryables"` to retrieve the queryables. - -The Queryables endpoint (`/queryables`) returns something like the following: - -```json -{ - "$schema" : "https://json-schema.org/draft/2019-09/schema", - "$id" : "https://stac-api.example.com/queryables", - "type" : "object", - "title" : "Queryables for Example STAC API", - "description" : "Queryable names for the example STAC API Item Search filter.", - "properties" : { - "id" : { - "description" : "ID", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/id" - }, - "collection" : { - "description" : "Collection", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/collection" - }, - "geometry" : { - "description" : "Geometry", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/geometry" - }, - "datetime" : { - "description" : "Datetime", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/datetime.json#/properties/datetime" - }, - "eo:cloud_cover" : { - "description" : "Cloud Cover", - "$ref": "https://stac-extensions.github.io/eo/v1.0.0/schema.json#/properties/eo:cloud_cover" - }, - "gsd" : { - "description" : "Ground Sample Distance", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/instrument.json#/properties/gsd" - }, - "assets_bands" : { - "description" : "Asset eo:bands common names", - "$ref": "https://stac-extensions.github.io/eo/v1.0.0/schema.json#/properties/eo:bands/common_name" - } - }, - "additionalProperties": true -} -``` - -Alternately, the client could retrieve the queryables for a single collection with -`/collections/collections1/queryables`, which may have more queryables than available for the entire catalog, since -there may be queryables that are only relevant to that collection. - -Notice in this schema that instead of directly defining the type information about each field, we have instead used the JSON -Schema `$ref` mechanism to refer to a STAC schema definition. This not only allows the reuse of these JSON Schema definitions, -but also binds an arbitrarily-named Queryable to a specific STAC field. For example, in the above we know that the -`eo:cloud_cover` field is referring to the field of the same name in the EO Extension not because they happen to have the same -name, but rather because the `$ref` indicates it. The field could just as well be named "cloud_cover", "CloudCover", or "cc", -and we would still know it filtered on the EO extension `eo:cloud_cover` field. For example, if the queryable was named -"CloudCover", a CQL2 expression using that queryable would look like `CloudCover <= 10`. - -While these do seem quite complex to write and understand, keep in mind that query construction will likely be done with a -more ergonomic SDK, and query parsing will be done with the help of a ABNF grammar and OpenAPI schema. - -These parameters/fields must be supported by the STAC Item Search endpoint and OAFeat Features resource (`/collections/$collectionId/items`). - -## Examples - -Note: the GET examples with query parameters are unescaped to make them easier to read. - -The GET examples are assuming a call to `GET /search` and the POST examples are assuming a -call to `POST /search`. - -The parameter `filter-crs` always defaults to `http://www.opengis.net/def/crs/OGC/1.3/CRS84` for a STAC API, so is not shown -in any of these examples. - -### Example 1 - -This example uses the queryables definition in (Interaction with Endpoints)(#interaction-with-endpoints). - -#### Example 1: GET with cql2-text - -Note that `filter-lang` defaults to `cql2-text` in this case. The parameter `filter-crs` defaults -to `http://www.opengis.net/def/crs/OGC/1.3/CRS84` for a STAC API. - -```http -filter=id='LC08_L1TP_060247_20180905_20180912_01_T1_L1TP' AND collection='landsat8_l1tp' -``` - -#### Example 1: POST with cql2-json - -Note that `filter-lang` defaults to `cql2-json` in this case. The parameter `filter-crs` defaults -to `http://www.opengis.net/def/crs/OGC/1.3/CRS84` for a STAC API. - -```json -{ - "filter": { - "op" : "and", - "args": [ - { - "op": "=", - "args": [ { "property": "id" }, "LC08_L1TP_060247_20180905_20180912_01_T1_L1TP" ] - }, - { - "op": "=", - "args" : [ { "property": "collection" }, "landsat8_l1tp" ] - } - ] - } -} -``` - -### Example 2 - -This example uses the queryables definition in [Interaction with Endpoints](#interaction-with-endpoints). - -Note that filtering on the `collection` field is relevant in Item Search, since the queries are cross-collection, whereas -OGC API Features filters only operate against a single collection already. - -#### Example 2: GET with cql2-text - -```http -filter=collection = 'landsat8_l1tp' - AND eo:cloud_cover <= 10 - AND datetime >= TIMESTAMP('2021-04-08T04:39:23Z') - AND S_INTERSECTS(geometry, POLYGON((43.5845 -79.5442, 43.6079 -79.4893, 43.5677 -79.4632, 43.6129 -79.3925, 43.6223 -79.3238, 43.6576 -79.3163, 43.7945 -79.1178, 43.8144 -79.1542, 43.8555 -79.1714, 43.7509 -79.6390, 43.5845 -79.5442))) -``` - -#### Example 2: POST with cql2-json - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "and", - "args": [ - { - "op": "=", - "args": [ { "property": "collection" }, "landsat8_l1tp" ] - }, - { - "op": "<=", - "args": [ { "property": "eo:cloud_cover" }, 10 ] - }, - { - "op": ">=", - "args": [ { "property": "datetime" }, { "timestamp": "2021-04-08T04:39:23Z" } ] - }, - { - "op": "s_intersects", - "args": [ - { - "property": "geometry" - }, - { - "type": "Polygon", - "coordinates": [ - [ - [43.5845, -79.5442], - [43.6079, -79.4893], - [43.5677, -79.4632], - [43.6129, -79.3925], - [43.6223, -79.3238], - [43.6576, -79.3163], - [43.7945, -79.1178], - [43.8144, -79.1542], - [43.8555, -79.1714], - [43.7509, -79.6390], - [43.5845, -79.5442] - ] - ] - } - ] - } - ] - } -} -``` - -### Example 3: Conjunction with AND - -We'll be imagining these as queries against [EarthSearch Sentinel 2 -COG](https://stacindex.org/catalogs/earth-search#/Cnz1sryATwWudkxyZekxWx6356v9RmvvCcLLw79uHWJUDvt2?t=items) data. - -The queryables defined are as follows: - -```json -{ - "$schema" : "https://json-schema.org/draft/2019-09/schema", - "$id" : "https://stac-api.example.com/queryables", - "type" : "object", - "title" : "Queryables for Example STAC API", - "description" : "Queryable names for the example STAC API Item Search filter.", - "properties" : { - "geometry" : { - "description" : "Geometry", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/geometry" - }, - "datetime" : { - "description" : "Datetime", - "$ref": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/datetime.json#/properties/datetime" - }, - "eo:cloud_cover" : { - "description" : "Cloud Cover", - "$ref": "https://stac-extensions.github.io/eo/v1.0.0/schema.json#/properties/eo:cloud_cover" - }, - "acme:data_coverage" : { - "description" : "Acme Sat Data Coverage", - "type": "integer", - "minimum": 0, - "maximum": 100 - }, - "acme:grid_id" : { - "description" : "Acme Sat Grid ID", - "type": "string" - } - } -} -``` - -Note that `acme:data_coverage` and `acme:grid_id` are properties that are not defined in an extension schema, and are intended to -represent vendor-specific properties. Because of this, they are fully specified directly in the JSON Schema. However, it is -recommended that vendor-specific properties be published as part of a well-defined extension schema, so these only represent ones -that have not followed that recommendation. - -A sample STAC Item (excluding `assets`) is: - -```json -{ - "type": "Feature", - "stac_version": "1.0.0", - "stac_extensions": [ - "https://stac-extensions.github.io/eo/v1.0.0/schema.json", - "https://stac-extensions.github.io/view/v1.0.0/schema.json", - "https://stac-extensions.github.io/projection/v1.0.0/schema.json" - ], - "id": "S2A_60HWB_20201111_0_L2A", - "bbox": [ 176.9997779369264, -39.83783732066656, 178.14624317719924, -38.842842449352425], - "geometry": { - "type": "Polygon", - "coordinates": [[[176.9997779369264, -39.83783732066656],[176.99978104582647,-38.84846679951431], - [178.14624317719924, -38.842842449352425],[177.8514661209684,-39.83471270154608], - [176.9997779369264, -39.83783732066656]]] - }, - "properties": { - "datetime": "2020-11-11T22:16:58Z", - "platform": "sentinel-2a", - "constellation": "sentinel-2", - "instruments": ["msi"], - "gsd": 10, - "view:off_nadir": 0, - "proj:epsg": 32760, - "sentinel:utm_zone": 60, - "sentinel:latitude_band": "H", - "sentinel:grid_square": "WB", - "sentinel:sequence": "0", - "sentinel:product_id": "S2A_MSIL2A_20201111T221611_N0214_R129_T60HWB_20201111T235959", - "sentinel:data_coverage": 78.49, - "eo:cloud_cover": 0.85, - "sentinel:valid_cloud_cover": true, - "created": "2020-11-12T02:08:31.563Z", - "updated": "2020-11-12T02:08:31.563Z" - } -} -``` - -One problem in working with Sentinel-2 data is that many scenes only contain a tiny "sliver" of data, where the satellite's -recording path intersection only a corner of a grid square. This examples shows -Show me all imagery that has low cloud cover (less than 10), and high data coverage (50), as I'd like a cloud free image that is not just -a tiny sliver of data. - -#### Example 3: AND cql2-text (GET) - -```http -filter=sentinel:data_coverage > 50 AND eo:cloud_cover < 10 -``` - -#### Example 3: AND cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "and", - "args": [ - { - "op": ">", - "args": [ { "property": "sentinel:data_coverage" }, 50 ] - }, - { - "op": "<", - "args": [ { "property": "eo:cloud_cover" }, 10 ] - } - ] - } -} -``` - -An 'or' is also supported, matching if either condition is true. Though it's not a sensible query you could get images that have full data -coverage or low cloud cover. - -### Example 4: Disjunction with OR - -This uses the same queryables as Example 4. - -#### Example 4: OR cql2-text (GET) - -```http -filter=sentinel:data_coverage > 50 OR eo:cloud_cover < 10 -``` - -#### Example 4: OR cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "or", - "args": [ - { - "op": ">", - "args": [ { "property": "sentinel:data_coverage" }, 50 ] - }, - { - "op": "<", - "args": [ { "property": "eo:cloud_cover" }, 10 ] - } - ] - } -} -``` - -### Example 5: Property-Property Comparisons - -The Property-Property Comparisons conformance class permits queryable properties to be used on either side -of an operator. This is a generic example, as there are few STAC properties -that are comparable in a meaningful way. This example uses a contrived example of two proprietary properties, -`prop1` and `prop2` that are of the same type. - -This queryables JSON Schema is used in these examples: - -```json -{ - "$schema" : "https://json-schema.org/draft/2019-09/schema", - "$id" : "https://stac-api.example.com/queryables", - "type" : "object", - "title" : "Queryables for Example STAC API", - "description" : "Queryable names for the example STAC API Item Search filter.", - "properties" : { - "prop1" : { - "description" : "Property 1", - "type": "integer" - }, - "prop2" : { - "description" : "Property 2", - "type": "integer" - } - } -} -``` - -#### Example 5: GET with cql2-text - -```http -filter=prop1 = prop2 -``` - -#### Example 5: POST with cql2-json - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "=", - "args": [ - { "property": "prop1" }, - { "property": "prop2" } - ] - } -} -``` - -### Example 6: Temporal Intersection - -This uses the same queryables as Example 4. - -The only temporal operator required is `ANYINTERACTS`. This is effectively that the datetime or interval operands -have any overlap between them. - -#### Example 6: T_INTERSECTS cql2-text (GET) - -```http -filter=datetime T_INTERSECTS INTERVAL('2020-11-11T00:00:00Z', '2020-11-12T00:00:00Z') -``` - -#### Example 6: T_INTERSECTS cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "t_intersects", - "args": [ - { "property": "datetime" }, - { "interval" : [ "2020-11-11T00:00:00Z", "2020-11-12T00:00:00Z"] } - ] - } -} -``` - -### Example 7: Spatial Intersection - -The only spatial operator that must be implemented for Basic Spatial Operators -is `S_INTERSECTS`. This has the same semantics as provided -by the Item Search `intersects` parameter. The `cql2-text` format uses WKT geometries and the `cql2-json` -format uses GeoJSON geometries. - -#### Example 7: S_INTERSECTS cql2-text (GET) - -```http -filter=S_INTERSECTS(geometry,POLYGON((-77.0824 38.7886,-77.0189 38.7886,-77.0189 38.8351,-77.0824 38.8351,-77.0824 38.7886))) -``` - -#### Example 7: S_INTERSECTS cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "s_intersects", - "args": [ - { "property": "geometry" } , - { - "type": "Polygon", - "coordinates": [[ - [-77.0824, 38.7886], [-77.0189, 38.7886], - [-77.0189, 38.8351], [-77.0824, 38.8351], - [-77.0824, 38.7886] - ]] - } - ] - } -} -``` - -### Example 8: Spatial Intersection Disjunction - -One limitation of the `intersects` parameter is that only a single geometry may be provided. While most -GeoJSON geometries can be combined to form a composite (e.g., multiple Polygons can be combined to form a -MultiPolygon), this is much easier to do in the query by combining `S_INTERSECTS` predicates with the `OR` -logical operator. - -#### Example 8: S_INTERSECTS cql2-text (GET) - -```http -filter=S_INTERSECTS(geometry,POLYGON((-77.0824 38.7886,-77.0189 38.7886,-77.0189 38.8351,-77.0824 38.8351,-77.0824 38.7886))) OR S_INTERSECTS(geometry,POLYGON((-79.0935 38.7886,-79.0290 38.7886,-79.0290 38.8351,-79.0935 38.8351,-79.0935 38.7886))) -``` - -#### Example 8: S_INTERSECTS cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "or" , - "args": [ - { - "op": "s_intersects", - "args": [ - { "property": "geometry" } , - { - "type": "Polygon", - "coordinates": [[ - [-77.0824, 38.7886], [-77.0189, 38.7886], - [-77.0189, 38.8351], [-77.0824, 38.8351], - [-77.0824, 38.7886] - ]] - } - ] - }, - { - "op": "s_intersects", - "args": [ - { "property": "geometry" } , - { - "type": "Polygon", - "coordinates": [[ - [-79.0935, 38.7886], [-79.0290, 38.7886], - [-79.0290, 38.8351], [-79.0935, 38.8351], - [-79.0935, 38.7886] - ]] - } - ] - } - ] - } -} -``` - -### Example 9: Using IS NULL - -One of the main use cases for STAC API is doing cross-collection query. Commonly, this means that items have -different sets of properties. For example, a collection of Sentinel 2 data may have a property -`sentinel:data_coverage` and a collection of Landsat 8 data may have a corresponding property -`landsat:coverage_percent`, both representing what percentage of a given gridded scene actually contains -data. However, we many also want to also include in our result items that do not have a value defined for -either of those properties. - -#### Example 9: cql2-text (GET) - -```http -filter=sentinel:data_coverage > 50 OR landsat:coverage_percent < 10 OR (sentinel:data_coverage IS NULL AND landsat:coverage_percent IS NULL) -``` - -#### Example 9: cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "or", - "args": [ - { - "op": ">", - "args": [ { "property": "sentinel:data_coverage" }, 50 ] - }, - { - "op": "<", - "args": [ { "property": "landsat:coverage_percent" }, 10 ] - }, - { - "op": "and", - "args": [ - { - "op": "isNull", - "args": [ { "property": "sentinel:data_coverage" } ] - }, - { - "op": "isNull", - "args": [ { "property": "landsat:coverage_percent" } ] - } - ] - } - ] - } -} -``` - -### Example 10: Using BETWEEN - -The BETWEEN operator allows for checking if a numeric value is within a specified inclusive range. - -#### Example 10: cql2-text (GET) - -```http -filter=eo:cloud_cover BETWEEN 0 AND 50 -``` - -#### Example 10: cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "between", - "args": [ - { "property": "eo:cloud_cover" }, - [ 0, 50 ] - ] - } -} -``` - -### Example 11: Using LIKE - -The LIKE operator allows for pattern-based string matching. - -#### Example 11: cql2-text (GET) - -```http -filter=mission LIKE 'sentinel%' -``` - -#### Example 11: cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "like", - "args": [ - { "property": "mission" }, - "sentinel%" - ] - } -} -``` - -### Example 12: Using the CASEI Case-insensitive Comparison Function - -The predefined function `CASEI` allows for case-insensitive comparisons. This function is -defined in the Accent and Case-insensitive Comparison conformance class. - -In the example using 'Straße', both the capitalized 'S' and Eszett ('ß') are converted to an -insensitive representation whereby the expressions `CASEI('Straße')`, `CASEI('straße')`, -`CASEI('Strasse')`, and `CASEI('strasse')` are all equal. - -#### Example 12: cql2-text (GET) - -```http -filter=CASEI(provider) = CASEI('coolsat') -``` - -```http -filter=CASEI(provider) = CASEI('Straße') -``` - -#### Example 12: cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "=", - "args": [ - { - "function" : "casei", - "args" : [ { "property": "provider" } ] - }, - { - "function" : "casei", - "args" : [ "coolsat" ] - } - ] - } -} -``` - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "=", - "args": [ - { - "function" : "casei", - "args" : [ { "property": "provider" } ] - }, - { - "function" : "casei", - "args" : [ "Straße" ] - } - ] - } -} -``` - -### Example 13: Using the ACCENTI Accent-insensitive Comparison Function - -The predefined function `ACCENTI` allows for accent-insensitive comparisons. This function is -defined in the Accent and Case-insensitive Comparison conformance class. In the example below, -`ACCENTI('tiburon')` and `ACCENTI('tiburón')` evaluate to be equal. - -#### Example 13: cql2-text (GET) - -```http -filter=ACCENTI(provider) = ACCENTI('tiburón') -``` - -#### Example 13: cql2-json (POST) - -```json -{ - "filter-lang": "cql2-json", - "filter": { - "op": "=", - "args": [ - { - "function" : "accenti", - "args" : [ { "property": "provider" } ] - }, - { - "function" : "accenti", - "args" : [ "tiburón" ] - } - ] - } -} -``` diff --git a/fragments/filter/openapi.yaml b/fragments/filter/openapi.yaml deleted file mode 100644 index e5c7f508..00000000 --- a/fragments/filter/openapi.yaml +++ /dev/null @@ -1,171 +0,0 @@ -openapi: 3.0.3 -info: - title: The SpatioTemporal Asset Catalog API - Filter - description: Adds parameters to compare properties and only return the items that match - version: 1.0.0-rc.1 - -tags: - - name: Core - description: Part of STAC API - Core definition - - name: Collections - description: Part of STAC API - Collections definition - - name: Features - description: Part of STAC API - Features definition - - name: Filter Extension - description: Part of STAC API - Filter extension definition - -paths: - '/': - get: - description: Landing Page - tags: - - Core - responses: - '200': - description: Landing Page - links: - queryables: - operationId: getQueryables - description: |- - A link with rel=queryables for the entire catalog. - - /queryables: - get: - summary: Get the JSON Schema defining the list of variable terms that can be used in CQL2 expressions. - operationId: getQueryables - description: |- - This endpoint returns a list of variable terms that can be used in CQL2 expressions. The - precise definition of this can be found in the OGC API - Features - Part 3: Filtering and the - Common Query Language (CQL) specification. - tags: - - Filter Extension - # parameters: - # todo: may have collections parameter in the future - responses: - '200': - $ref: '#/components/responses/Queryables' - default: - $ref: '../../core/commons.yaml#/components/responses/Error' - /collections/{collectionId}: - get: - description: |- - This endpoint returns a list of Collections. - tags: - - Features - - Collections - parameters: - - in: path - name: collectionId - schema: - type: string - required: true - description: ID of Collection - responses: - '200': - description: Collection description - links: - queryables: - operationId: getQueryables - description: |- - A link with rel=queryables for queryables to only apply to this collection. - /collections/{collectionId}/queryables: - get: - summary: Get the JSON Schema defining the list of variable terms that can be used in CQL2 expressions. - operationId: getQueryablesForCollection - description: |- - This endpoint returns a list of variable terms that can be used in CQL2 expressions. The - precise definition of this can be found in the OGC API - Features - Part 3: Filtering and the - Common Query Language (CQL) specification. - parameters: - - in: path - name: collectionId - schema: - type: string - required: true - description: ID of Collection - tags: - - Filter Extension - responses: - '200': - $ref: '#/components/responses/Queryables' - default: - $ref: '../../core/commons.yaml#/components/responses/Error' -components: - parameters: - filter: - name: filter - x-stac-api-fragment: filter - in: query - description: |- - **Extension:** Filter - - A CQL2 filter expression for filtering items. - required: true - schema: - oneOf: - - $ref: '#/components/schemas/filter-cql2-json' - - $ref: '#/components/schemas/filter-cql2-text' - filter-lang: - name: filter-lang - x-stac-api-fragment: filter - in: query - description: |- - **Extension:** Filter - - The CQL2 filter encoding that the 'filter' value uses. Must be one of 'cql2-text' or 'cql2-json'. - required: false - schema: - $ref: '#/components/schemas/filter-lang' - filter-crs: - name: filter-crs - x-stac-api-fragment: filter - in: query - description: |- - **Extension:** Filter - - The CRS used by spatial predicates in the filter parameter. In STAC API, only value that must be accepted - is 'http://www.opengis.net/def/crs/OGC/1.3/CRS84'. - required: false - schema: - $ref: '#/components/schemas/filter-crs' - schemas: - searchBody: - type: object - x-stac-api-fragment: filter - description: |- - **Extension:** Filter - - A filter for properties in Items. - properties: - filter: - $ref: '#/components/schemas/filter-cql2-json' - filter-lang: - $ref: '#/components/schemas/filter-lang' - filter-crs: - $ref: '#/components/schemas/filter-crs' - filter-cql2-text: - description: | - A CQL2 filter expression in the 'cql2-text' encoding. - type: string - filter-cql2-json: - $ref: 'https://raw.githubusercontent.com/opengeospatial/ogcapi-features/master/cql2/standard/schema/cql2.yml#/components/schemas/booleanExpression' - filter-lang: - description: | - The CQL2 filter encoding that the 'filter' value uses. - type: string - enum: - - 'cql2-text' - - 'cql2-json' - filter-crs: - description: | - The coordinate reference system (CRS) used by spatial literals in the 'filter' value. The only value that STAC APIs must - accept is 'http://www.opengis.net/def/crs/OGC/1.3/CRS84'. - type: string - format: uri - responses: - Queryables: - description: A JSON Schema defining the Queryables allowed in CQL2 expressions - content: - application/schema+json: - schema: - type: object diff --git a/fragments/itemcollection/README.md b/fragments/itemcollection/README.md deleted file mode 100644 index f9af3cdd..00000000 --- a/fragments/itemcollection/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# STAC API - ItemCollection Fragment - -This document explains the structure and content of a SpatioTemporal Asset Catalog (STAC) ItemCollection. -An **ItemCollection** is a [GeoJSON](http://geojson.org/) [FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) -that is augmented with [foreign members](https://tools.ietf.org/html/rfc7946#section-6) relevant to a STAC entity. - -Similarly to the relationship between a GeoJSON Feature and a STAC Item, a STAC ItemCollection must be a valid GeoJSON -FeatureCollection to allow interoperability with existing tools that support GeoJSON. - -Item objects are represented in JSON format and are very flexible. Any JSON object that contains all the -required fields is a valid STAC ItemCollection. - -- Examples: - - See the [minimal example](examples/itemcollection-sample-minimal.json), as well as a [more complete - example](examples/itemcollection-sample-full.json). There are more real world inspired samples in the [examples/](examples/) folder. -- [OpenAPI YAML](openapi.yaml) - -## ItemCollection fields - -This object describes a STAC ItemCollection. The fields `type` and `features` are inherited from GeoJSON FeatureCollection. - -| Field Name | Type | Description | -| ---------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -| type | string | **REQUIRED.** Always "FeatureCollection" to provide compatibility with GeoJSON. | -| features | \[[STAC Item](../../stac-spec/item-spec/item-spec.md)] | **REQUIRED** A possibly-empty array of Item objects. | -| links | \[[Link Object](../../stac-spec/item-spec/item-spec.md#link-object)] | An array of Links related to this ItemCollection. | - -## Extensions - -- The [Context Extension](../../item-search/README.md#context-extension) adds additional fields to STAC ItemCollection relevant - to their use as search results. -- The [Single File STAC Extension](https://github.com/stac-extensions/single-file-stac/blob/main/README.md) provides a set of Collection - and Item objects as a single file catalog. diff --git a/fragments/itemcollection/examples/itemcollection-sample-full.json b/fragments/itemcollection/examples/itemcollection-sample-full.json deleted file mode 100644 index f69dc930..00000000 --- a/fragments/itemcollection/examples/itemcollection-sample-full.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "stac_version": "1.0.0", - "stac_extensions": [], - "type": "Feature", - "id": "CS3-20160503_132131_05", - "bbox": [ - -122.59750209, - 37.48803556, - -122.2880486, - 37.613537207 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -122.308150179, - 37.488035566 - ], - [ - -122.597502109, - 37.538869539 - ], - [ - -122.576687533, - 37.613537207 - ], - [ - -122.288048600, - 37.562818007 - ], - [ - -122.308150179, - 37.488035566 - ] - ] - ] - }, - "properties": { - "datetime": "2016-05-03T13:22:30.040Z", - "title": "A CS3 item", - "license": "PDDL-1.0", - "providers": [ - { - "name": "CoolSat", - "roles": [ - "producer", - "licensor" - ], - "url": "https://stac-api.example.com" - } - ] - }, - "collection": "CS3", - "links": [ - { - "rel": "self", - "href": "https://stac-api.example.com/catalog/CS3-20160503_132130_04/CS3-20160503_132130_04.json" - }, - { - "rel": "collection", - "href": "https://stac-api.example.com/catalog/CS3-20160503_132130_04/catalog.json" - } - ], - "assets": { - "analytic": { - "href": "https://stac-api.example.com/catalog/CS3-20160503_132130_04/analytic.tif", - "title": "4-Band Analytic" - }, - "thumbnail": { - "href": "https://stac-api.example.com/catalog/CS3-20160503_132130_04/thumbnail.png", - "title": "Thumbnail", - "roles": [ - "thumbnail" - ] - } - } - } - ], - "links": [ - { - "rel": "self", - "href": "http://stac.example.com/search?collection=CS3" - } - ] -} \ No newline at end of file diff --git a/fragments/itemcollection/examples/itemcollection-sample-minimal.json b/fragments/itemcollection/examples/itemcollection-sample-minimal.json deleted file mode 100644 index 8b3698fa..00000000 --- a/fragments/itemcollection/examples/itemcollection-sample-minimal.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [] -} diff --git a/fragments/itemcollection/openapi.yaml b/fragments/itemcollection/openapi.yaml deleted file mode 100644 index a072cd47..00000000 --- a/fragments/itemcollection/openapi.yaml +++ /dev/null @@ -1,35 +0,0 @@ -openapi: 3.0.3 -info: - title: The SpatioTemporal Asset Catalog API - Item Collection - description: The specification for a set of items, e.g. returned by a search. - version: 1.0.0-rc.1 -paths: {} -components: - schemas: - itemCollection: - description: >- - A GeoJSON FeatureCollection augmented with foreign members that contain values relevant to a STAC entity - type: object - required: - - features - - type - properties: - type: - type: string - enum: - - FeatureCollection - features: - type: array - items: - $ref: '../../core/commons.yaml#/components/schemas/item' - links: - type: array - description: >- - An array of links. Can be used for pagination, e.g. by providing a link - with the `next` relation type. - items: - $ref: '../../core/commons.yaml#/components/schemas/link' - example: - - rel: next - href: >- - http://api.cool-sat.com/search?next=ANsXtp9mrqN0yrKWhf-y2PUpHRLQb1GT-mtxNcXou8TwkXhi1Jbk diff --git a/fragments/query/README.md b/fragments/query/README.md deleted file mode 100644 index d9d27348..00000000 --- a/fragments/query/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# STAC API - Query Fragment - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) -- **Conformance Class:** -- **Extension [Maturity Classification](../../README.md#maturity-classification):** Candidate -- **Dependents:** - - [Item Search](../../item-search) - -The `query` parameter adds additional filters for searching on the properties of Item objects. The JSON syntax for -these filters is known as "STACQL" (pronounced `stack-cue-el`). - -The syntax for the `query` filter is: - -```js -{ - "query": { - "": { - "": - } - } -} -``` - -Each property to search is an entry in the `query` filter. `` can be one of: `eq`, `neq`, `lt`, `lte`, `gt`, `gte`, `startsWith`, `endsWith`, `contains`, `in`. -Multiple operators may be provided for each property and are treated as a logical AND, where all conditions must be met. - -## Examples - -Find scenes with cloud cover between 0 and 10%: - -```json -{ - "query": { - "eo:cloud_cover": { - "gte": 0, - "lte": 10 - }, - "stringAttr1": { - "startsWith": "abc", - "endsWith": "xyz" - }, - "stringAttr2": { - "contains": "mnop" - }, - "stringAttr3": { - "in": ["landsat", "modis", "naip"] - } - } -} -``` diff --git a/fragments/query/openapi.yaml b/fragments/query/openapi.yaml deleted file mode 100644 index d95cb413..00000000 --- a/fragments/query/openapi.yaml +++ /dev/null @@ -1,117 +0,0 @@ -openapi: 3.0.3 -info: - title: The SpatioTemporal Asset Catalog API - Query - description: Adds parameter to compare properties and only return the items that match - version: 1.0.0-rc.1 -paths: {} -components: - parameters: - query: - name: query - x-stac-api-fragment: query - in: query - description: |- - **Extension:** Query - - Query for properties in items. - Use the JSON form of the query used in POST. - required: false - schema: - type: string - schemas: - searchBody: - type: object - x-stac-api-fragment: query - description: |- - **Extension:** Query - - Allows users to query properties for specific values - properties: - query: - $ref: '#/components/schemas/query' - query: - type: object - description: Define which properties to query and the operations to apply - additionalProperties: - $ref: '#/components/schemas/queryProp' - example: - eo:cloud_cover: - gt: 8 - lt: 50 - platform: - eq: 'landsat-8' - datetime: - gte: '2018-02-12T00:00:00Z' - lte: '2018-03-18T12:31:12Z' - pl:item_type: - startsWith: PSScene - product: - in: - - foo - - bar - - baz - eo:gsd: - in: - - 10 - - 20 - queryProp: - description: Apply query operations to a specific property - anyOf: - - description: if the object doesn't contain any of the operators, it is equivalent to using the equals operator - - type: object - description: Match using an operator - properties: - eq: - description: Find items with a property that is equal to the specified value. For strings, a case-insensitive comparison must be performed. - nullable: true - oneOf: - - type: string - - type: number - - type: boolean - neq: - description: Find items that *don't* contain the specified value. For strings, a case-insensitive comparison must be performed. - nullable: true - oneOf: - - type: string - - type: number - - type: boolean - gt: - description: Find items with a property value greater than the specified value. - oneOf: - - type: string - format: date-time - - type: number - lt: - description: Find items with a property value less than the specified value. - oneOf: - - type: string - format: date-time - - type: number - gte: - description: Find items with a property value greater than or equal the specified value. - oneOf: - - type: string - format: date-time - - type: number - lte: - description: Find items with a property value less than or equal the specified value. - oneOf: - - type: string - format: date-time - - type: number - startsWith: - description: Find items with a property that begins with the specified string. A case-insensitive comparison must be performed. - type: string - endsWith: - description: Find items with a property that ends with the specified string. A case-insensitive comparison must be performed. - type: string - contains: - description: Find items with a property that contains the specified literal string, e.g., matches ".*.*". A case-insensitive comparison must be performed. - type: string - in: - description: Find items with a property that equals at least one entry in the specified array. A case-insensitive comparison must be performed. - type: array - items: - oneOf: - - type: string - - type: number diff --git a/fragments/sort/README.md b/fragments/sort/README.md deleted file mode 100644 index 79dc2a33..00000000 --- a/fragments/sort/README.md +++ /dev/null @@ -1,86 +0,0 @@ -# STAC API - Sort Fragment - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) -- **Conformance Class:** - - Item Search binding: - - STAC Features binding: -- **Fragment [Maturity Classification](../../README.md#maturity-classification):** Candidate -- **Dependents:** - - [Item Search](../../item-search) - - [STAC Features](../../ogcapi-features) - -This defines a new parameter, `sortby`, that allows the user to define fields by which to sort results. -Only string, numeric, and datetime attributes of Item (`id` and `collection` only) or Item Properties (any attributes) -may be used to sort results. It is not required that implementations support sorting over all attributes, but -implementations should return an error when attempting to sort over a field that does not support sorting. - -This fragment may be bound to either or both of -[Item Search](../../item-search) (`/search` endpoint) or -[STAC Features](../../ogcapi-features) (`/collections/{collectionId}/items` endpoint) by -advertising the relevant conformance class. - -Fields may be sorted in ascending or descending order. The syntax between GET requests and POST requests with a JSON -body vary. The `sortby` value is an array, so multiple sort fields can be defined which will be used to sort -the data in the order provided (e.g., first by `datetime`, then by `eo:cloud_cover`). - -**NOTE**: *This fragment may change, as our goal is to align with OGC API functionality, and sorting is currently being -worked on as part of OGC API - Records, see [this issue](https://github.com/opengeospatial/ogcapi-records/issues/22) -for the latest discussion.* - -## HTTP GET (or POST Form) - -When calling a relevant endpoint using GET (or POST with `Content-Type: application/x-www-form-urlencoded` or -`Content-Type: multipart/form-data)`, a single parameter `sortby` with a comma-separated list of item field names must -be provided. The field names may be prefixed with either "+" for ascending, or "-" for descending. If no sign is -provided before the field name, it will be assumed to be "+". - -Examples of `sortby` parameter: - -1. `GET /search?sortby=properties.created` -2. `GET /search?sortby=+properties.created` -3. `GET /search?sortby=properties.created,-id` -4. `GET /search?sortby=+properties.created,-id` -5. `GET /search?sortby=-properties.eo:cloud_cover` - -Note that examples 1 and 2 are symantically equivalent, as well as examples 3 and 4. - -## HTTP POST JSON Entity - -When calling the relevant endpoint using POST with`Content-Type: application/json`, this adds an attribute `sortby` with -an object value to the core JSON search request body. - -The syntax for the `sortby` attribute is: - -```json -{ - "sortby": [ - { - "field": "", - "direction": "" - } - ] -} -``` - -```json -{ - "sortby": [ - { - "field": "properties.created", - "direction": "asc" - }, - { - "field": "properties.eo:cloud_cover", - "direction": "desc" - }, - { - "field": "id", - "direction": "desc" - }, - { - "field": "collection", - "direction": "desc" - } - ] -} -``` diff --git a/fragments/sort/openapi.yaml b/fragments/sort/openapi.yaml deleted file mode 100644 index 3b533b85..00000000 --- a/fragments/sort/openapi.yaml +++ /dev/null @@ -1,58 +0,0 @@ -openapi: 3.0.3 -info: - title: The SpatioTemporal Asset Catalog API - Sort - description: Adds Parameter to control sorting of returns results. - version: 1.0.0-rc.1 -paths: {} -components: - parameters: - sortby: - name: sortby - x-stac-api-fragment: sort - in: query - description: |- - **Extension:** Sort - - An array of property names, prefixed by either "+" for ascending or - "-" for descending. If no prefix is provided, "+" is assumed. - required: false - schema: - type: string - example: '+id,-properties.eo:cloud_cover' - style: form - explode: false - schemas: - searchBody: - type: object - x-stac-api-fragment: sort - description: |- - **Extension:** Sort - - Sort the results. - properties: - sortby: - $ref: '#/components/schemas/sortby' - sortby: - type: array - description: | - An array of objects containing a property name and sort direction. - minItems: 1 - items: - type: object - required: - - field - - direction - properties: - field: - type: string - direction: - type: string - default: asc - enum: - - asc - - desc - example: - - field: properties.eo:cloud_cover - direction: asc - - field: id - direction: desc diff --git a/implementation.md b/implementation.md deleted file mode 100644 index 2b61cd75..00000000 --- a/implementation.md +++ /dev/null @@ -1,92 +0,0 @@ -# Implementation Recommendations - -This document describes implementation recommendations for a STAC API. - -## Identifiers - -It is recommended that all items presented through a STAC API be part of a collection. STAC -allows items to not be contained in a collection, though this is rarely done in practice. -For each STAC Item, the Collection ID and Item ID must for a globally-unique tuple, e.g., item IDs are unique within a collection. - -## CORS - -Web browsers enforce a mechanism called [Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) to prevent -malicious access to APIs. It is recommended that public STAC APIs advertise a permissive [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) -configuration so browser-based UIs running on a different domain may more easily access them. - -APIs should acknowledge pre-flight request headers. In general, these header values should be set on responses: - -```http -access-control-allow-origin: * -access-control-allow-methods: OPTIONS, POST, GET -access-control-allow-headers: Content-Type -``` - -It is relatively safe to use these headers for all endpoints. However, one may want to restrict the methods to -only those that apply to each endpoint. For example, the `/collection/{collectionId}/items` endpoint should -only allow OPTIONS and GET, since POST is only used by the Transactions Extension, which presumably would -require authentication as it is mutating data. - -Implementations that support the Transactions Extension or require credentials for some operations will need to -implement different behavior, for example, allowing credentials when requests are coming from a trusted domain, -allowing DELETE, PUT, or PATCH methods, or -permitting the `If-Match` request header. - -## datetime Parameter Handling - -The datetime parameter used by the Item Search and Features conformance classes allows the same values as the -[OAF datetime](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_parameter_datetime) parameter. This allows for -either a single [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) datetime (e.g., `1990-12-31T23:59:59Z`) -or a closed or single open ended interval that also uses RFC 3339 datetimes (e.g., `1990-12-31T23:59:59Z/..`). - -RFC 3339 is a profile of ISO 8601, adding these constraints to the allowed values: -- a complete representation of date and time (fractional seconds optional). -- requires 4-digit years -- only allows a period character to be used as the decimal point for fractional seconds -- requires the zone offset to be `Z` or like `+00:00`, while ISO8601 allows timezones like `+0000` - -A simple regex for an RFC 3339 datetime is: - -```regex -^(\d\d\d\d)\-(\d\d)\-(\d\d)(T|t)(\d\d):(\d\d):(\d\d)([.]\d+)?(Z|([-+])(\d\d):(\d\d))$ -``` - -This is not a precise regex, as it matches some strings that violate semantics. There are additional restrictions, for example, -the month (01-12), the day (01-31), the hour (0-24), minute (0-60), seconds (0-9), and timezone offsets. However, the best -strategy is to use this regex to ensure the datetime conforms to the the RFC 3339 profile and then us an ISO8601 parser to produce -a valid datetime object from the datetime string. - -Thereby, the recommended process for parsing the datetime value (which may consist of a single -RFC 3339 datetime or an interval) is: - -1. uppercase the string (this avoids needing to match on both (t|T) and (z|Z)) -2. split the string on `/` to determine if it is a single datetime or an interval -3. For the single value or each value of the split, check if it is either an open interval - (the empty string or `..`), or a datetime value. Only one of the interval ends may be open. -4. Either use an RFC 3339 datetime parser like in [ciso8601](https://github.com/closeio/ciso8601), or - match the datetime value against the RFC 3339 regex, upper case the string, and use an - ISO8601 parser such as [pyiso8601](https://github.com/micktwomey/pyiso8601) (Python) or - [Luxon](https://github.com/moment/luxon/) (JavaScript). Frequently, date libraries built into - language standard libraries do not parse ISO8601 datetimes correctly, for example, the built-in - Python datetime library does not handle `Z` as a timezone. - -Below are a few examples of valid RFC 3339 datetimes. Note the uses of fractional seconds, the use of `.` -as the fractional seconds separator, Z (recommended) or z as a timezone, -positive and negative arbitrary offset timezones, and T (recommended) or t as a separator between date and time. While -the RFC 3339 spec does not define the required number of fractional seconds, STAC API only requires up to -9 digits be supported. - -- 1990-12-31T23:59:59Z (no fractional seconds, Z timezone) -- 1990-12-31T23:59:23.123Z (fractional seconds, Z timezone) -- 1996-12-19T16:39:57-08:00 (no fractional seconds, negative offset timezone) -- 1937-01-01T12:00:27.87+01:00 (fractional seconds, positive offset timezone) -- 1985-04-12t23:20:50.5202020z (lowercase t for separator, lowercase z for timezone) - -These are several examples of datetime intervals: - -- `/1990-12-31T23:59:59Z` -- `/1990-12-31T23:59:59Z` -- `../1990-12-31T23:59:59Z` -- `1990-12-31T23:59:59Z/` -- `1990-12-31T23:59:59Z/..` -- `1990-12-31T23:59:59Z/1991-12-31T23:59:59Z` diff --git a/item-search/README.md b/item-search/README.md deleted file mode 100644 index 4d1a9d74..00000000 --- a/item-search/README.md +++ /dev/null @@ -1,362 +0,0 @@ -# STAC API - Item Search - -- [STAC API - Item Search](#stac-api---item-search) - - [Link Relations](#link-relations) - - [Endpoints](#endpoints) - - [Query Parameters and Fields](#query-parameters-and-fields) - - [Query Examples](#query-examples) - - [Query Parameter Table](#query-parameter-table) - - [Response](#response) - - [Pagination](#pagination) - - [HTTP Request Methods and Content Types](#http-request-methods-and-content-types) - - [GET](#get) - - [POST](#post) - - [PUT / PATCH / DELETE](#put--patch--delete) - - [Example Landing Page for STAC API - Item Search](#example-landing-page-for-stac-api---item-search) - - [Extensions](#extensions) - - [Fields Extension](#fields-extension) - - [Sort Extension](#sort-extension) - - [Context Extension](#context-extension) - - [Filter Extension](#filter-extension) - - [Query Extension](#query-extension) - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) ([rendered version](https://api.stacspec.org/v1.0.0-rc.1/item-search)) -- **Conformance URIs:** - - - - -- **[Maturity Classification](../README.md#maturity-classification):** Candidate -- **Dependencies**: [STAC API - Core](../core) -- **Examples**: [examples.md](examples.md) - -A search endpoint provides the ability to query STAC [Item](../stac-spec/item-spec/README.md) -objects across collections. -It retrieves a group of Item objects that match the provided parameters, wrapped in an -[ItemCollection](../fragments/itemcollection/README.md) (which is a -valid [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) that contains STAC Item objects). Several core -query parameters are defined by [OGC API - Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html), with -a few additions specified in this document. - -The Item Search endpoint intentionally defines only a limited group of operations. It is expected that -most behavior will be defined in [Extensions](#extensions). These extensions can be composed by an implementer to -cover only the set of functionality the implementer requires. For example, the query capability defined by -Item Search is limited, and only adds cross-collection and spatial intersects query operators to the capabilities -already defined by OAFeat. For example, the Query Extension and Filter Extension -provide a more expressive set of operators. - -Implementing `GET /search` is **required**, `POST /search` is optional, but recommended. - -## Link Relations - -This conformance class also requires implementation of the link relations in the [STAC API - Core](../core) conformance class. - -The following Link relations must exist in the Landing Page (root). - -| **rel** | **href** | **From** | **Description** | -| -------- | --------- | ---------------------- | --------------------------- | -| `search` | `/search` | STAC API - Item Search | URI for the Search endpoint | - -This `search` link relation must have a `type` of `application/geo+json`. If no `method` attribute is -specified, it is assumed to represent a GET request. If the server supports both GET and POST requests, two links should be included, one with a `method` of `GET` one with a `method` of `POST`. - -Other links with relation `search` may be included that advertise other content types the server may respond -with, but these other types are not part of the STAC API requirements. - -## Endpoints - -This conformance class also requires for the endpoints in the [STAC API - Core](../core) conformance class to be implemented. - -| Endpoint | Returns | Description | -| --------- | --------------- | --------------- | -| `/search` | Item Collection | Search endpoint | - -## Query Parameters and Fields - -The following list of parameters is used to narrow search queries. They can all be represented as query -string parameters in a GET request, or as JSON entity fields in a POST request. For filters that represent -a set of values, query parameters must use comma-separated string values with no enclosing brackets -(\[ or \]) and no whitespace between values, and JSON entity attributes must use JSON Arrays. - -### Query Examples - -```http -GET /search?collections=landsat8,sentinel&bbox=-10.415,36.066,3.779,44.213&limit=200&datetime=2017-05-05T00:00:00Z -``` - -```json -{ - "collections": ["landsat8","sentinel"], - "bbox": [10.415,36.066,3.779,44.213], - "limit": 200, - "datetime": "2017-05-05T00:00:00Z" -} -``` - -For more examples see [examples.md](examples.md). - -### Query Parameter Table - -The core parameters for STAC search are defined by OAFeat, and STAC adds a few parameters for convenience. - -| Parameter | Type | Source API | Description | -| ----------- | ---------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| limit | integer | OAFeat | The maximum number of results to return (page size). | -| bbox | \[number] | OAFeat | Requested bounding box. | -| datetime | string | OAFeat | Single date+time, or a range ('/' separator), formatted to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Use double dots `..` for open date ranges. | -| intersects | GeoJSON Geometry | STAC | Searches items by performing intersection between their geometry and provided GeoJSON geometry. All GeoJSON geometry types must be supported. | -| ids | \[string] | STAC | Array of Item ids to return. | -| collections | \[string] | STAC | Array of one or more Collection IDs that each matching Item must be in. | - -See [examples](examples.md) for some example requests. - -**limit** The limit parameter follows the same semantics of the OAFeat Item resource limit parameter. The value is -a suggestion to the server as to the maximum number of Item objects the -client would prefer in the response. The OpenAPI specification defines the default and maximum values -for this parameter. The base specifications define these with a default of 10 and a maximum of 10000, but implementers -may choose other values to advertise through their `service-desc` endpoint. If the limit parameter value is greater -than the advertised maximum limit, the server must return the maximum possible number of items (ideally, the number -as the advertised maximum limit), rather than responding with an error. - -Only one of either **intersects** or **bbox** may be specified. If both are specified, a 400 Bad Request response -must be returned. - -**datetime** The datetime parameter use the same allowed values as the -[OAF datetime](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_parameter_datetime) parameter. -This allows for either a single [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) datetime or an -open or closed interval that also uses RFC 3339 datetimes. Additional details about this parameter can be -found in the [Implementation Recommendations](../implementation.md#datetime-parameter-handling). - -**bbox** Represented using either 2D or 3D geometries. The length of the array must be 2\*n where -*n* is the number of dimensions. The array contains all axes of the southwesterly most extent -followed by all axes of the northeasterly most extent specified in Longitude/Latitude or -Longitude/Latitude/Elevation based on [WGS 84](http://www.opengis.net/def/crs/OGC/1.3/CRS84). -When using 3D geometries, the elevation of the southwesterly most extent is the minimum elevation -in meters and the elevation of the northeasterly most extent is the maximum. When filtering with -a 3D bbox over Items with 2D geometries, it is assumed that the 2D geometries are at -elevation 0. - -## Response - -The response to a request (GET or POST) to the search endpoint must always be an -[ItemCollection](../fragments/itemcollection/README.md) object - a valid [GeoJSON -FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) that consists entirely of STAC -[Item](../stac-spec/item-spec/item-spec.md) objects. - -### Pagination - -OGC API supports paging through hypermedia links and STAC follows the same pattern for the cross collection search. For -GET requests, a link with `rel` type `next` is supplied. This link may contain any URL parameter that is necessary -for the implementation to understand how to provide the next page of results, eg: `page`, `next`, `token`, etc. The -parameter name is defined by the implementor and is not necessarily part of the API specification. For example: - -```json -{ - "type": "FeatureCollection", - "features": [], - "links": [ - { - "rel": "next", - "href": "https://stac-api.example.com/search?page=3" - "type": "application/geo+json" - - }, - { - "rel": "prev", - "href": "https://stac-api.example.com/search?page=1" - "type": "application/geo+json" - } - ] -} -``` - -The href may contain any arbitrary URL parameter: - -- `https://stac-api.example.com/search?page=2` -- `https://stac-api.example.com/search?next=8a35eba9c` -- `https://stac-api.example.com/search?token=f32890a0bdb09ac3` - -Implementations may also add link relations `prev`, `first`, and `last`, though these are not required and may -be infeasible to implement in some data stores. - -OAFeat does not support POST requests for searches, however the STAC API spec does. Hypermedia links are not designed -for anything other than GET requests, so providing a next link for a POST search request becomes problematic. STAC has -decided to extend the Link object to support additional fields that provide hints to the client as to how it must -execute a subsequent request for the next page of results. - -The following fields have been added to the Link object specification for the API spec: - -| Parameter | Type | Description | -| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| method | string | The HTTP method of the request, usually `GET` or `POST`. Defaults to `GET` | -| headers | object | A dictionary of header values that must be included in the next request | -| body | object | A JSON object containing fields/values that must be included in the body of the next request | -| merge | boolean | If `true`, the headers/body fields in the `next` link must be merged into the original request and be sent combined in the next request. Defaults to `false` | - -The implementor has the freedom to decide exactly how to apply these extended fields for their particular pagination -mechanism. The same freedom that exists for GET requests, where the actual URL parameter used to defined the next page -of results is purely up to the implementor and not defined in the API spec, if the implementor decides to use headers, -there are no specific or required header names defined in the specification. Implementors may use any names or fields -of their choosing. Pagination can be provided solely through header values, solely through body values, or through some -combination. - -To avoid returning the entire original request body in a POST response which may be arbitrarily large, the `merge` -property can be specified. This indicates that the client must send the same post body that it sent in the original -request, but with the specified headers/body values merged in. This allows servers to indicate what needs to change -to get to the next page without mirroring the entire query structure back to the client. - -See the [paging examples](examples.md#paging-examples) for additional insight. - -## HTTP Request Methods and Content Types - -STAC APIs follow the modern web API practices of using HTTP Request Methods ("verbs") and -the `Content-Type` header to drive behavior on resources ("nouns"). -This section describes how these are used with the `/search` endpoint. - -### GET - -**Required**: STAC's cross-collection `/search` requires GET queries for all implementations, following OAFeat's precedent of -making GET required (it only specifies GET so far). - -### POST - -**Recommended** STAC `/search` is strongly recommended to implement POST `Content-Type: application/json`, where the content body is a JSON -object representing a query and filter, as defined in this document. - -It is recommended that clients use POST for querying (if the STAC API supports it), especially when using the -`intersects` query parameter, for two reasons: - -1. In practice, the allowed size for an HTTP GET request is significantly less than that allowed for a POST request, -so if a large geometry is used in the query it may cause a GET request to fail. -2. The parameters for a GET request must be escaped properly, making it more difficult to construct when using JSON -parameters (such as intersect, as well as additional filters from the query extension). - -**STAC API extensions** allow for more sophisticated searching, such as the ability to sort, select which fields you want returned, and -searching on specific Item properties. - -#### PUT / PATCH / DELETE - -The other HTTP verbs are not supported in STAC Item Search. The [Transaction Extension](../ogcapi-features/extensions/transaction/README.md) -does implement them, for STAC and OAFeat implementations that want to enable writing and deleting items. - -## Example Landing Page for STAC API - Item Search - -This JSON is what would be expected from an api that only implements *STAC API - Item Search*. In practice, -most APIs will also implement other conformance classes, and those will be reflected in the `links` and -`conformsTo` fields. A more typical Landing Page example is in -the [overview](../overview.md#example-landing-page) document. - -```json -{ - "stac_version": "1.0.0", - "id": "example-stac", - "title": "A simple STAC API Example", - "description": "This Catalog aims to demonstrate the a simple landing page", - "type": "Catalog", - "conformsTo" : [ - "https://api.stacspec.org/v1.0.0-rc.1/core", - "https://api.stacspec.org/v1.0.0-rc.1/item-search" - ], - "links": [ - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "service-desc", - "type": "application/vnd.oai.openapi+json;version=3.0", - "href": "https://stac-api.example.com/api" - }, - { - "rel": "service-doc", - "type": "text/html", - "href": "https://stac-api.example.com/api.html" - }, - { - "rel": "search", - "type": "application/geo+json", - "href": "https://stac-api.example.com/search", - "method": "GET" - }, - { - "rel": "search", - "type": "application/geo+json", - "href": "https://stac-api.example.com/search", - "method": "POST" - } - ] -} -``` - -## Extensions - -These extensions provide additional functionality that enhances Item Search. All are specified as -[fragments](../fragments), as they are re-used by other extensions STAC API's that offer the following capabilities at -the `search` endpoint must include the relevant **conformance URI** in the `conformsTo` response at -the root (`/`) landing page, to indicate to clients that they will respond properly to requests from clients. - -### Fields Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Fields Fragment](../fragments/fields/) - -By default, the STAC search endpoint `/search` returns all attributes of each Item, as there is no way to specify -exactly those attributes that should be returned. The Fields extension to Item Search adds new functionality that -allows the client to suggest to the server which Item attributes should be included or excluded in the response, -through the use of a `fields` parameter. The full description of how this extension works can be found in the -[fields fragment](../fragments/fields/). - -### Sort Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Sort Fragment](../fragments/sort/) - -By default, the STAC search endpoint `/search` returns results in no specified order. Whatever order the results are in -is up to the implementor, and will typically default to an arbitrary order that is fastest for the underlying data store -to retrieve results. This extension adds a new parameter, `sortby`, that lets a user specify a comma separated list of -field names to sort by, with an indication of direction. It can be used with both GET and POST, the former using '+' and -'-' to indicate sort order, and the latter including a 'direction' field in JSON. The full description of the semantics -of this extension can be found in the [sort fragment](../fragments/sort). - -### Context Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Context Fragment](../fragments/context/) - -This extension is intended to augment the core ItemCollection responses from the `search` API endpoint with a -JSON object called `context` that includes the number of items `matched`, `returned` and the `limit` requested. -The full description and examples of this are found in the [context fragment](../fragments/context). - -### Filter Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Pilot -- **Definition**: [STAC API - Filter Fragment](../fragments/filter/) - -The STAC search endpoint, `/search`, by default only accepts a limited set of parameters to limit the results -by properties. The Filter extension adds a new parameter, `filter`, that can take a number of comparison operators to -match predicates between the fields requested and the values of Item objects. It can be used with both GET and POST and supports two -query formats, `cql2-text` and `cql2-json`. The full details on the JSON structure are specified in the [filter -fragment](../fragments/filter/). - -### Query Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Query Fragment](../fragments/query/) - -**Note**: It is recommended that implementers implement the [Filter Extension](#filter-extension) instead, as -it offers a more robust set of operators and uses the CQL2 standard. - -The STAC API search endpoint, `/search`, by default only accepts a limited set of parameters to limit the results -by properties. The Query extension adds a new parameter, `query`, that can take a number of comparison operators to -match predicates between the fields requested and the values of Item objects. It can be used with both GET and POST, though -GET includes the exact same JSON. The full details on the JSON structure are specified in the [query -fragment](../fragments/query/). diff --git a/item-search/examples.md b/item-search/examples.md deleted file mode 100644 index 24876554..00000000 --- a/item-search/examples.md +++ /dev/null @@ -1,145 +0,0 @@ -## Item Search Examples - -### Single Collection example - -This example shows how you can request Item objects from a single collection from the `search` endpoint, without having to using -OGC API - Features. It requests 100 results in `mycollection` that is in New Zealand at anytime on January 1st, 2019: - -```json -{ - "collections": ["mycollection"], - "bbox": [160.6,-55.95,-170,-25.89], - "limit": 100, - "datetime": "2019-01-01T00:00:00Z/2019-01-01T23:59:59Z" -} -``` - -```http -GET /search?collections=mycollection&bbox=160.6,-55.95,-170,-25.89&limit=100&datetime=2019-01-01T00:00:00Z/2019-01-01T23:59:59Z -``` - -### Paging Examples - -#### Simple GET based search -Request: -```http -HTTP GET /search?bbox=-110,39.5,-105,40.5 -``` - -Response with `200 OK`: -```json -{ - "type": "FeatureCollection", - "features": [], - "links": [ - { - "rel": "next", - "https://stac-api.example.com/search?page=2" - "type": "application/geo+json" - } - ] -} -``` -Following the link `https://stac-api.example.com/search?page=2` will send the user to the next page of results. - -#### POST search with body and merge fields -Request to `HTTP POST /search`: -```json -{ - "bbox": [-110, 39.5, -105, 40.5] -} -``` - -Response with `200 OK`: -```json -{ - "type": "FeatureCollection", - "features": [], - "links": [ - { - "rel": "next", - "href": "https://stac-api.example.com/search", - "type": "application/geo+json", - "method": "POST", - "body": { - "page": 2, - "limit": 10 - }, - "merge": true - } - ] -} -``` - -This tells the client to POST to the search endpoint using the original request with the `page` and `limit` fields -merged in to obtain the next set of results: - -Request to `POST /search`: -```json -{ - "bbox": [-110, 39.5, -105, 40.5], - "page": 2, - "limit": 10 -} -``` - -This can be even more effective when using continuation tokens on the server, as the entire request body need not be -repeated in the subsequent request: - -Response with `200 OK`: -```json -{ - "rel": "next", - "href": "https://stac-api.example.com/search", - "type": "application/geo+json", - "method": "POST", - "body": { - "next": "a9f3kfbc98e29a0da23" - } -} -``` -The above link tells the client not to merge (default of false) so it is only required to pass the next token in the body. - -Request to `POST /search`: -```json -{ - "next": "a9f3kfbc98e29a0da23" -} -``` - -#### POST search using headers -Request to `HTTP POST /search`: -```json -{ - "bbox": [-110, 39.5, -105, 40.5], - "page": 2, - "limit": 10 -} -``` - -Response with `200 OK`: -```json -{ - "type": "FeatureCollection", - "features": [], - "links": [ - { - "rel": "next", - "href": "https://stac-api.example.com/search", - "type": "application/geo+json", - "method": "POST", - "headers": { - "Search-After": "LC81530752019135LGN00" - } - } - ] -} -``` - -This tells the client to POST to the search endpoint with the header `Search-After` to obtain the next set of results: - -Request: -```http -POST /search -Search-After: LC81530752019135LGN00 -``` diff --git a/item-search/openapi.yaml b/item-search/openapi.yaml deleted file mode 100644 index 113452e8..00000000 --- a/item-search/openapi.yaml +++ /dev/null @@ -1,312 +0,0 @@ -openapi: 3.0.3 -info: - title: STAC API - Item Search - version: 1.0.0-rc.1 - description: >- - This is an OpenAPI definition of the SpatioTemporal Asset Catalog API - Item Search - specification. - contact: - name: STAC Specification - url: 'http://stacspec.org' - license: - name: Apache License 2.0 - url: 'http://www.apache.org/licenses/LICENSE-2.0' -tags: - - name: Item Search - description: essential characteristics of a STAC API -paths: - /search: - get: - summary: Search STAC items with simple filtering. - operationId: getItemSearch - description: |- - Retrieve Items matching filters. Intended as a shorthand API for simple - queries. - - This method is required to implement. - - If this endpoint is implemented on a server, it is required to add a - link referring to this endpoint with `rel` set to `search` to the - `links` array in `GET /`. As `GET` is the default method, the `method` - may not be set explicitly in the link. - tags: - - Item Search - parameters: - - $ref: '#/components/parameters/bbox' - - $ref: '#/components/parameters/intersects' - - $ref: '#/components/parameters/datetime' - - $ref: '#/components/parameters/limit' - - $ref: '#/components/parameters/ids' - - $ref: '#/components/parameters/collectionsArray' - # extensions - - $ref: '../fragments/fields/openapi.yaml#/components/parameters/fields' - - $ref: '../fragments/filter/openapi.yaml#/components/parameters/filter' - - $ref: '../fragments/sort/openapi.yaml#/components/parameters/sortby' - responses: - '200': - description: A feature collection. - content: - application/geo+json: - schema: - allOf: - - $ref: '../fragments/itemcollection/openapi.yaml#/components/schemas/itemCollection' - # extensions - - $ref: '../fragments/context/openapi.yaml#/components/schemas/itemCollection' - text/html: - schema: - type: string - default: - $ref: '../core/commons.yaml#/components/responses/Error' - post: - summary: Search STAC items with full-featured filtering. - operationId: postItemSearch - description: |- - Retrieve items matching filters. Intended as the standard, full-featured - query API. - - This method is optional to implement, but recommended. - - If this endpoint is implemented on a server, it is required to add a - link referring to this endpoint with `rel` set to `search` and `method` - set to `POST` to the `links` array in `GET /`. - tags: - - Item Search - requestBody: - content: - application/json: - schema: - allOf: - - $ref: '#/components/schemas/searchBody' - # extensions - - $ref: '../fragments/fields/openapi.yaml#/components/schemas/searchBody' - - $ref: '../fragments/filter/openapi.yaml#/components/schemas/searchBody' - - $ref: '../fragments/sort/openapi.yaml#/components/schemas/searchBody' - responses: - '200': - description: A feature collection. - content: - application/geo+json: - schema: - $ref: '../fragments/itemcollection/openapi.yaml#/components/schemas/itemCollection' - text/html: - schema: - type: string - default: - $ref: '../core/commons.yaml#/components/responses/Error' -components: - parameters: - ids: - name: ids - in: query - description: |- - Array of Item ids to return. - required: false - schema: - $ref: '#/components/schemas/ids' - explode: false - collectionsArray: - name: collections - in: query - description: | - Array of Collection IDs to include in the search for items. - Only Item objects in one of the provided collections will be searched - required: false - schema: - $ref: '#/components/schemas/collectionsArray' - explode: false - datetime: - name: datetime - in: query - description: |- - Either a date-time or an interval, open or closed. Date and time expressions - adhere to RFC 3339. Open intervals are expressed using double-dots. - - Examples: - - * A date-time: "2018-02-12T23:20:50Z" - * A closed interval: "2018-02-12T00:00:00Z/2018-03-18T12:31:12Z" - * Open intervals: "2018-02-12T00:00:00Z/.." or "../2018-03-18T12:31:12Z" - - Only features that have a temporal property that intersects the value of - `datetime` are selected. - - If a feature has multiple temporal properties, it is the decision of the - server whether only a single temporal property is used to determine - the extent or all relevant temporal properties. - required: false - schema: - type: string - style: form - explode: false - bbox: - name: bbox - in: query - description: |- - Only features that have a geometry that intersects the bounding box are selected. - The bounding box is provided as four or six numbers, depending on - whether the coordinate reference system includes a vertical axis (height - or depth): - - * Lower left corner, coordinate axis 1 - * Lower left corner, coordinate axis 2 - * Minimum value, coordinate axis 3 (optional) - * Upper right corner, coordinate axis 1 - * Upper right corner, coordinate axis 2 - * Maximum value, coordinate axis 3 (optional) - - The coordinate reference system of the values is WGS 84 - longitude/latitude (http://www.opengis.net/def/crs/OGC/1.3/CRS84). - - For WGS 84 longitude/latitude the values are in most cases the sequence - of minimum longitude, minimum latitude, maximum longitude and maximum - latitude. However, in cases where the box spans the antimeridian the - first value (west-most box edge) is larger than the third value - (east-most box edge). - - If the vertical axis is included, the third and the sixth number are - the bottom and the top of the 3-dimensional bounding box. - - If a feature has multiple spatial geometry properties, it is the - decision of the server whether only a single spatial geometry property - is used to determine the extent or all relevant geometries. - - Example: The bounding box of the New Zealand Exclusive Economic Zone in - WGS 84 (from 160.6°E to 170°W and from 55.95°S to 25.89°S) would be - represented in JSON as `[160.6, -55.95, -170, -25.89]` and in a query as - `bbox=160.6,-55.95,-170,-25.89`. - required: false - schema: - type: array - oneOf: - - minItems: 4 - maxItems: 4 - - minItems: 6 - maxItems: 6 - items: - type: number - style: form - explode: false - limit: - name: limit - in: query - description: |- - The optional limit parameter recommends the number of items that should be present in the response document. - - Only items are counted that are on the first level of the collection in the response document. - Nested objects contained within the explicitly requested items must not be counted. - - Minimum = 1. Maximum = 10000. Default = 10. - required: false - schema: - type: integer - minimum: 1 - maximum: 10000 - default: 10 - style: form - explode: false - intersects: - name: intersects - in: query - description: |- - The optional intersects parameter filters the result Items in the same was as bbox, only with - a GeoJSON Geometry rather than a bbox. - required: false - schema: - $ref: '../core/commons.yaml#/components/schemas/geometryGeoJSON' - style: form - explode: false - schemas: - searchBody: - description: The search criteria - type: object - allOf: - - $ref: '#/components/schemas/bboxFilter' - - $ref: '#/components/schemas/datetimeFilter' - - $ref: '#/components/schemas/intersectsFilter' - - $ref: '#/components/schemas/collectionsFilter' - - $ref: '#/components/schemas/idsFilter' - - $ref: '#/components/schemas/limitFilter' - limit: - type: integer - minimum: 1 - example: 10 - default: 10 - maximum: 10000 - description: |- - The optional limit parameter limits the number of items that are presented in the response document. - - If the limit parameter value is greater than advertised limit maximum, the server must return the - maximum possible number of items, rather than responding with an error. - - Only items are counted that are on the first level of the collection in the response document. - Nested objects contained within the explicitly requested items must not be counted. - - Minimum = 1. Maximum = 10000. Default = 10. - bboxFilter: - type: object - description: Only return items that intersect the provided bounding box. - properties: - bbox: - $ref: '../core/commons.yaml#/components/schemas/bbox' - collectionsArray: - type: array - description: |- - Array of Collection IDs to include in the search for items. - Only Item objects in one of the provided collections will be searched. - items: - type: string - ids: - type: array - description: |- - Array of Item ids to return. - items: - type: string - datetimeFilter: - description: An object representing a date+time based filter. - type: object - properties: - datetime: - $ref: '#/components/schemas/datetime_interval' - intersectsFilter: - type: object - description: Only returns items that intersect with the provided polygon. - properties: - intersects: - $ref: '../core/commons.yaml#/components/schemas/geometryGeoJSON' - limitFilter: - type: object - description: Only returns maximum number of results (page size) - properties: - limit: - $ref: '#/components/schemas/limit' - idsFilter: - type: object - description: Only returns items that match the array of given ids - properties: - ids: - $ref: '#/components/schemas/ids' - collectionsFilter: - type: object - description: Only returns the collections specified - properties: - collections: - $ref: '#/components/schemas/collectionsArray' - datetime_interval: - type: string - description: |- - Either a date-time or an interval, open or closed. Date and time expressions - adhere to RFC 3339. Open intervals are expressed using double-dots. - - Examples: - - * A date-time: "2018-02-12T23:20:50Z" - * A closed interval: "2018-02-12T00:00:00Z/2018-03-18T12:31:12Z" - * Open intervals: "2018-02-12T00:00:00Z/.." or "../2018-03-18T12:31:12Z" - - Only features that have a temporal property that intersects the value of - `datetime` are selected. - - If a feature has multiple temporal properties, it is the decision of the - server whether only a single temporal property is used to determine - the extent or all relevant temporal properties. - example: '2018-02-12T00:00:00Z/2018-03-18T12:31:12Z' diff --git a/ogcapi-features/README.md b/ogcapi-features/README.md deleted file mode 100644 index 81c232c8..00000000 --- a/ogcapi-features/README.md +++ /dev/null @@ -1,421 +0,0 @@ -# STAC API - Features - -- [STAC API - Features](#stac-api---features) - - [Link Relations](#link-relations) - - [Endpoints](#endpoints) - - [Item Pagination](#item-pagination) - - [Collection Pagination](#collection-pagination) - - [Examples](#examples) - - [Example Landing Page for STAC API - Features](#example-landing-page-for-stac-api---features) - - [Example Collection for STAC API - Features](#example-collection-for-stac-api---features) - - [Extensions](#extensions) - - [Transaction Extension](#transaction-extension) - - [Items and Collections API Version Extension](#items-and-collections-api-version-extension) - - [Fields Extension](#fields-extension) - - [Sort Extension](#sort-extension) - - [Context Extension](#context-extension) - - [Filter Extension](#filter-extension) - - [Query Extension](#query-extension) - -*based on [**OGC API - Features - Part 1: Core**](https://www.ogc.org/standards/ogcapi-features)* - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) ([rendered version](https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features)) -- **Conformance URIs:** - - - - - - - - - [Requirements Class Core](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#rc_core) - - - [Requirements Class GeoJSON](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_requirements_class_geojson) - - - [Requirements Class OpenAPI 3.0](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#rc_oas30) - (if used for `service-desc` endpoint) -- **[Maturity Classification](../README.md#maturity-classification):** Candidate -- **Dependencies**: - - [STAC API - Core](../core) - - [STAC API - Collections](../collections) - - [OGC API - Features](https://www.ogc.org/standards/ogcapi-features) - uses all the OGC API - Features openapi fragments to describe returning STAC Item objects. - -Adding OGC API - Features (OAFeat) to a STAC API means fully implementing all its requirements, and then returning STAC -[Item](../stac-spec/item-spec/README.md) objects from its `/items` endpoints. In OAFeat, GeoJSON is an optional -conformance class, enabling flexibility. However, STAC requires the use of GeoJSON for OAFeat -endpoints. - -Note that implementing OGC API - Features does not actually depend on [STAC API - Core](../core), but we include it as a dependency since -this extension discusses using it in the context of STAC. One could implement an OAFeat service, returning STAC -[Item](../stac-spec/item-spec/README.md) and [Collection](../stac-spec/collection-spec/README.md) objects from their endpoints, and it will work -with OAFeat clients. But specialized STAC clients will likely display results better, and depend on the STAC landing page. - -## Link Relations - -This conformance class also requires implementation of the link relations in the [STAC API - Core](../core) conformance class. - -The following Link relations must exist in the Landing Page (root). - -| **rel** | **href** | **From** | **Description** | -| ------------- | -------------- | -------- | ------------------- | -| `conformance` | `/conformance` | OAFeat | Conformance URI | -| `data` | `/collections` | OAFeat | List of Collections | - -## Endpoints - -This conformance class also requires for the endpoints in the [STAC API - Core](../core) conformance class to be implemented. - -The OGC API - Features endpoints are shown below, with details provided in an -[OpenAPI specification document](openapi.yaml). - -| Endpoint | Returns | Description | -| ----------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| `/conformance` | JSON | Info about standards to which the API conforms | -| `/collections` | JSON | Object containing an array of Collection objects in the Catalog, and Link relations | -| `/collections/{collectionId}` | [Collection](../stac-spec/collection-spec/README.md) | Returns single Collection JSON | -| `/collections/{collectionId}/items` | [ItemCollection](../fragments/itemcollection/README.md) | GeoJSON FeatureCollection-conformant entity of Item objects in collection | -| `/collections/{collectionId}/items/{featureId}` | [Item](../stac-spec/item-spec/README.md) | Returns single Item (GeoJSON Feature) | - -The OGC API - Features is a standard API that represents collections of geospatial data. It defines a RESTful interface -to query geospatial data, with GeoJSON as a main return type. With OAFeat you can return any `Feature`, which is a geometry -plus any number of properties. The core [STAC Item spec](../stac-spec/item-spec/README.md) -enhances the core `Feature` with additional requirements and options to enable cataloging of spatiotemporal 'assets' like -satellite imagery. - -OAFeat also defines the concept of a Collection, which contains Features. In OAFeat, a Collection is a set of data that can -be queried ([7.11](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_collections_)), and each describes basic -information about the geospatial dataset, like its name and description, as well as the spatial and temporal extents of all -the data contained. A [STAC Collection](../stac-spec/collection-spec/README.md) contains this same -information, along with other STAC-specific fields to provide additional metadata for searching spatiotemporal assets, and -thus are compliant with both OAFeat Collection and STAC Collection, and are returned from the `/collections/{collectionId}` -endpoint. - -In OAFeat, Features are the individual records within a Collection and are usually provided in GeoJSON format. -[STAC Item](../stac-spec/item-spec/README.md) objects are compliant with the OAFeat Features -[GeoJSON requirements class](http://docs.ogc.org/is/17-069r3/17-069r3.html#_requirements_class_geojson), and are returned from the -`/collections/{collectionId}/items/{itemId}` endpoint. The return of other encodings -([html](http://docs.ogc.org/is/17-069r3/17-069r3.html#rc_html), [gml](http://docs.ogc.org/is/17-069r3/17-069r3.html#rc_gmlsf0)) -is outside the scope of STAC API, as the [STAC Item](../stac-spec/item-spec/item-spec.md) is -specified in GeoJSON. - -A typical OAFeat will have multiple collections. Simple search for items within a collection can be done -with the resource endpoint `GET /collections/{collectionId}/items`. This endpoint must be exposed via a -link in the individual collection's endpoint with `rel=items`, as shown in the -[Example Landing Page diagram](../overview.md#example-landing-page). Note that this relation is `items`, which is -distinct from the `item` relation defined in STAC for linking to a single Item. The part of the API implementing OAFeat will usually not use -`item` relations directly, but instead rely on -the collection resource linking to a paginated endpoint returning items through a link relation -`items`, e.g., `/collections/{collectionId}` has a link with relation `items` linking -to `/collections/{collectionId}/items`. However, static catalogs and other parts of the API may contain `item` relations. - -It is recommended to have each OAFeat Collection correspond to a STAC Collection, -and the `/collections/{collectionId}/items` endpoint can be used as a single collection search. Implementations may **optionally** -provide support for the full superset of STAC API query parameters to the `/collections/{collectionId}/items` endpoint, -where the collection ID in the path is equivalent to providing that single value in the `collections` query parameter in -STAC API. - -Implementing OAFeat enables a wider range of clients to access the API's STAC Item objects, as it is a more widely implemented -protocol than STAC. - -## Item Pagination - -OAFeat supports paging through hypermedia links for the Items resource -(`/collections/{collectionId}/items`). Since only GET requests are allowed for this endpoint, -it is possible -to provide a Link with `rel` type `next` and the href of the full URL of the next page of results. -This link href must contain any URL parameters that are necessary -for the implementation to understand how to provide the next page of results, e.g., the query parameters `page`, `next`, -or `token` and any additional filter parameters if given and required. For example, the links array will have an object like: - -```json - "links": [ - { - "rel": "next", - "href": "https://stac-api.example.com/collections/my_collection/items?page=2" - "type": "application/geo+json" - } - ] -``` - -The href may contain any arbitrary URL parameter, which is implementation-specific: - -- `https://stac-api.example.com/collections/my_collection/items?page=2` -- `https://stac-api.example.com/collections/my_collection/items?next=8a35eba9c` -- `https://stac-api.example.com/collections/my_collection/items?token=f32890a0bdb09ac3` - -In addition to supporting query parameters in the URL value of the `href` field, -STAC has extended the Link object -with additional fields to support more complex HTTP requests. These include `method` to specify -an HTTP method GET or POST, `headers` to add HTTP headers in the request, and `body` with either -the entire body for the request or only the body fields that must be changed from the previous -request, as determined by the `merge` field. These fields are described in detail in the -[Item Search](../item-search/README.md#pagination) spec. - -Implementations may also add link relations `prev`, `first`, and `last`. Most API implementations -should be able to support `first`, though `last` may be infeasible to implement in some data -stores. - -See the [paging examples](../item-search/examples.md#paging-examples) for additional insight. - -## Collection Pagination - -OAFeat does not define a specific mechanism for how clients may access all collections from servers -with many -collections. STAC - Features adds support for this with pagination (similar to the Item pagination -mechanism) through hypermedia links for the Collections resource -(`/collections`). This mechanism aligns with pagination of collections in the -OGC API - Common - Part 2: Geospatial Data specification. With this, a link with -relation `next` is included in the `links` array, -and this is used to navigate to the next page of Collection objects. The specific query -parameter used for paging is implementation specific and not defined by STAC API. For example, -an implementation may take a parameter (e.g., `page`) indicating the numeric page of results, a -base64-encoded value indicating the last result returned for the current page (e.g., `search_after` as -in Elasticsearch), or a cursor token representing backend state. - -In our simple example of numerical pages, the response for `page=3` would have a -`links` array containing these two Links indicating the URLs for the next (page=4) and -previous (page=2) pages: - -```none -"links": [ - ... - { - "rel": "prev", - "href": "https://stac-api.example.com/collections?page=2" - "type": "application/json" - }, - { - "rel": "next", - "href": "https://stac-api.example.com/collections?page=4" - "type": "application/json" - } -] -``` - -In addition to supporting query parameters in the URL value of the `href` field, -STAC has extended the Link object -with additional fields to support more complex HTTP requests. These include `method` to specify -an HTTP method GET or POST, `headers` to add HTTP headers in the request, and `body` with either -the entire body for the request or only the body fields that must be changed from the previous -request, as determined by the `merge` field. These fields are described in detail in the -[Item Search](../item-search/README.md#pagination) spec. - -Implementations may also add link relations `prev`, `first`, and `last`. Most API implementations -should be able to support `first`, though `last` may be infeasible to implement in some data -stores. - -## Examples - -Note that the OAFeat endpoints *only* allow HTTP GET. HTTP POST requests are not supported. If POST is required, -it is recommended to use STAC Item Search, as it can be constrained to a single collection to act the same as -an OAFeat `items` endpoint. - -Request all the data in `mycollection` that is in New Zealand: - -```http -GET /collections/mycollection/items?bbox=160.6,-55.95,-170,-25.89 -``` - -Request 100 results in `mycollection` from New Zealand: - -```http -GET /collections/mycollection/items?bbox=160.6,-55.95,-170,-25.89&limit=100 -``` - -Request all the data in `mycollection` that is in New Zealand at anytime on January 1st, 2019: - -```http -GET /collections/mycollection/items?bbox=160.6,-55.95,-170,-25.89&datetime=2019-01-01T00:00:00Z/2019-01-01T23:59:59Z -``` - -Request 10 results from the data in `mycollection` from between January 1st (inclusive) and April 1st, 2019 (exclusive): - -```http -GET /collections/mycollection/items?datetime=2019-01-01T00:00:00Z/2019-03-31T23:59:59Z&limit=10 -``` - -## Example Landing Page for STAC API - Features - -This JSON is what would be expected from an api that only implements *STAC API - Features*. In practice, -most APIs will also implement other conformance classes, and those will be reflected in the `links` and -`conformsTo` fields. A more typical Landing Page example is in -the [overview](../overview.md#example-landing-page) document. - -```json -{ - "stac_version": "1.0.0", - "id": "example-stac", - "title": "A simple STAC API Example", - "description": "This Catalog aims to demonstrate the a simple landing page", - "type": "Catalog", - "conformsTo" : [ - "https://api.stacspec.org/v1.0.0-rc.1/core", - "https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features", - "https://api.stacspec.org/v1.0.0-rc.1/collections", - "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core", - "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30", - "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson" - ], - "links": [ - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "conformance", - "type": "application/json", - "href": "https://stac-api.example.com/conformance" - }, - { - "rel": "service-desc", - "type": "application/vnd.oai.openapi+json;version=3.0", - "href": "https://stac-api.example.com/api" - }, - { - "rel": "service-doc", - "type": "text/html", - "href": "https://stac-api.example.com/api.html" - }, - { - "rel": "data", - "type": "application/json", - "href": "https://stac-api.example.com/collections" - } - ] -} -``` - -## Example Collection for STAC API - Features - -The landing page `data` relation points to an endpoint to retrieve all collections. Each collection then has -a link relation to its `items` resource through the link with a rel value `items`. Note here that, unlike -as is typical with a static STAC Collection, there are no links here with rel value `item`. - -`https://stac-api.example.com/collections/aster-l1t` - -```json -{ - "id": "aster-l1t", - "type": "Collection", - "title": "ASTER L1T", - "links": [ - { - "rel": "items", - "type": "application/geo+json", - "href": "https://stac-api.example.com/collections/aster-l1t/items" - }, - { - "rel": "parent", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com/collections/aster-l1t" - } - ] -} -``` - -## Extensions - -These extensions provide additional functionality that enhances *STAC API - Features*. -All are specified as [fragments](../fragments), as they are re-used by extensions to other STAC APIs. -STAC APIs that offer the following capabilities must include the relevant **conformance URI** in the -`conformsTo` response at the root (`/`) landing page, to indicate to clients that they will respond properly -to requests from clients. - -### Transaction Extension - -- **Conformance URIs:** - - - - -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Transaction Fragment](extensions/transaction/) - -The core STAC API only supports retrieving existing Items. -The Transaction extension supports the creation, editing, and deleting of items through the use of the -POST, PUT, PATCH, and DELETE methods. The full description of how this extension works can be found in the -[transaction fragment](extensions/transaction/). - -### Items and Collections API Version Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Version](extensions/version/) - -The core API only supports semantics for creating and accessing a single version of an Item or Collection. -The Version Extension defines the API resources and semantics for creating and accessing versioned records. -It is the STAC API equivalent of [OGC API - Features - Part 4: Create, Replace, Update and Delete](https://docs.ogc.org/DRAFTS/20-002.html). - -### Fields Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Fields Fragment](../fragments/fields/) - -By default, the Items resource `/collections/{collectionId}/items` returns all attributes -of each Item, as there is no way to specify -exactly those attributes that should be returned. The Fields extension to STAC Features adds new functionality that -allows the client to suggest to the server which Item attributes should be included or excluded in the response, -through the use of a `fields` parameter. The full description of how this extension works can be found in the -[fields fragment](../fragments/fields/). - -### Sort Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Sort Fragment](../fragments/sort/) - -By default, the Items resource `/collections/{collectionId}/items` returns results in no specified order. Whatever order the results are in -is up to the implementor, and will typically default to an arbitrary order that is fastest for the underlying data store -to retrieve results. This extension adds a new parameter, `sortby`, that lets a user specify a comma separated list of -field names to sort by, with an indication of direction. It uses '+' and -'-' to indicate sort order of the list of fields. The full description of the semantics -of this extension can be found in the [sort fragment](../fragments/sort). - -### Context Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Context Fragment](../fragments/context/) - -This extension is intended to augment the core ItemCollection responses from the Items resource `/collections/{collectionId}/items` with a -JSON object called `context` that includes the number of items `matched`, `returned` and the `limit` requested. -The full description and examples of this are found in the [context fragment](../fragments/context). - -### Filter Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Pilot -- **Definition**: [STAC API - Filter Fragment](../fragments/filter/) - -The Features items endpoint, `/collections/{collectionId}/items`, by default only accepts a few parameters to filter the results -by properties. The Filter extension adds a new parameter, `filter`, that can take a number of comparison operators to -match predicates between the fields requested and the values of Item objects. It can only be -used with GET requests, as a POST to the items endpoint is a create operation in the -Transaction Extension. It supports two -query formats, `cql2-text` and `cql2-json`. The full details on the JSON structure are specified in the [filter -fragment](../fragments/filter/). - -### Query Extension - -- **Conformance URI:** -- **Extension [Maturity Classification](../README.md#maturity-classification):** Candidate -- **Definition**: [STAC API - Query Fragment](../fragments/query/) - -**Note**: It is recommended that implementers implement the [Filter Extension](#filter-extension) instead, as -it offers a more robust set of operators and uses the CQL2 standard. - -The STAC search endpoint, `/search`, by default only accepts a limited set of parameters to limit the results -by properties. The Query extension adds a new parameter, `query`, that can take a number of comparison operators to -match predicates between the fields requested and the values of Item objects. It can be used with both GET and POST, though -GET includes the exact same JSON. The full details on the JSON structure are specified in the [query -fragment](../fragments/query/). diff --git a/ogcapi-features/extensions/transaction/README.md b/ogcapi-features/extensions/transaction/README.md deleted file mode 100644 index 78d8b55f..00000000 --- a/ogcapi-features/extensions/transaction/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# STAC API - Transaction - -*based on [**OGC API - Features - Part 4: Simple Transactions**](https://www.ogc.org/standards/ogcapi-features)* - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) -- **Conformance URIs:** - - - - -- **Extension [Maturity Classification](../../../README.md#maturity-classification):** Candidate -- **Dependencies**: [STAC API - Features](../../README.md) - -The core STAC API doesn't support adding, editing, or removing items. -The transaction API extension supports the creation, editing, and deleting of items through POST, PUT, PATCH, and DELETE requests. - -STAC Transactions are based on the [OGC API - Features](https://ogcapi.ogc.org/features/) transactions, as -specified in [Part 4: Simple Transactions](http://docs.opengeospatial.org/DRAFTS/20-002.html). The core -OGC standard lays out the end points for transactions, without specifying any content types. For STAC we -use STAC Item objects in our transactions, and those transaction must be done at the OGC API - Features endpoints, -under `/collections/{collectionID}/items`. The OpenAPI document (specified as an OpenAPI fragment that -gets build in the full STAC OpenAPI document) simply gives the STAC examples of using the -Simple Transactions API mechanism. - -OGC API [Simple Transactions](http://docs.opengeospatial.org/DRAFTS/20-002.html) is still a draft standard, so -once it is released STAC will align to a released one, but we anticipate few changes as it is a very simple document. - -STAC Transactions additionally support optimistic locking through use of the ETag header, as specified in the -OpenAPI document. This is not currently specified in *OGC API - Features*, but it is compatible and we will -work to get it incorporated. - -## Methods - -| Path | Content-Type Header | Body | Success Status | Description | -| ------------------------------------------------------ | ------------------- | -------------------------------------- | -------------- | ----------------------------------------------------------------- | -| `POST /collections/{collectionID}/items` | `application/json` | partial Item or partial ItemCollection | 201, 202 | Adds a new item to a collection. | -| `PUT /collections/{collectionId}/items/{featureId}` | `application/json` | partial Item | 200, 202, 204 | Updates an existing item by ID using a complete item description. | -| `PATCH /collections/{collectionId}/items/{featureId}` | `application/json` | partial Item | 200, 202, 204 | Updates an existing item by ID using a partial item description. | -| `DELETE /collections/{collectionID}/items/{featureId}` | n/a | n/a | 200, 202, 204 | Deletes an existing item by ID. | - -### POST - -When the body is a partial Item: - -- Must only create a new resource. -- Must have an id field. -- Must return 409 if an Item exists for the same collection and id field values. -- Must populate the `collection` field in the Item from the URI. -- Must return 201 and a Location header with the URI of the newly added resource for a successful operation. -- May return the content of the newly added resource for a successful operation. - -When the body is a partial ItemCollection: - -- Must only create a new resource. -- Each Item in the ItemCollection must have an id field. -- Must return 409 if an Item exists for any of the same collection and id values. -- Must populate the `collection` field in each Item from the URI. -- Must return 201 without a Location header. -- May create only some of the Items in the ItemCollection. Implementations are not - required to implement all-or-none sematics for this operation. For example, if an - ItemCollection contains two Items and one is successfully created and the other - fails to be created, the server is not required to then delete the successfully - created one. When only some of the Items in the ItemCollection are created, the - server should communicate this failure back to the client with an error status code. - -All cases: - -- Must return 202 if the operation is queued for asynchronous execution. - -### PUT - -- Must populate the `id` and `collection` fields in the Item from the URI. -- Must return 200 or 204 for a successful operation. -- If 200 status code is returned, the server shall return the content of the updated resource for a successful operation. -- Must return 202 if the operation is queued for asynchronous execution. -- Must return 404 if no Item exists for this resource URI. -- If the `id` or `collection` fields are different from those in the URI, status code 400 shall be returned. - -### PATCH - -- Must populate the `id` and `collection` fields in the Item from the URI. -- Must return 200 or 204 for a successful operation. -- If status code 200 is returned, the server shall return the content of the updated resource for a successful operation. -- May return the content of the updated resource for a successful operation. -- Must return 202 if the operation is queued for asynchronous execution. -- Must return 404 if no Item exists for this resource URI. -- If the `id` or `collection` fields are different from those in the URI, status code 400 shall be returned. - -PATCH is compliant with [RFC 7386](https://tools.ietf.org/html/rfc7386). - -### DELETE - -- Must return 200 or 204 for a successful operation. -- Must return a 202 if the operation is queued for asynchronous execution. -- May return a 404 if no Item existed prior to the delete operation. Returning a 200 or 204 is also valid in this situation. diff --git a/ogcapi-features/extensions/version/README.md b/ogcapi-features/extensions/version/README.md deleted file mode 100644 index 043bcde4..00000000 --- a/ogcapi-features/extensions/version/README.md +++ /dev/null @@ -1,176 +0,0 @@ -# Items and Collections API Version Extension - -- **OpenAPI specification:** [openapi.yaml](openapi.yaml) -- **Conformance URI:** -- **Extension [Maturity Classification](../../../README.md#maturity-classification):** Proposal -- **Dependencies**: [STAC API - Features](../../README.md) - -The core API doesn't support semantics to creating and accessing different versions of an Item or Collection. -This version API extension defines the API resources and semantics for creating and accessing versioned records. -It is the STAC API equivalent of [OGC API - Features - Part 4: Create, Replace, Update and Delete](https://docs.ogc.org/DRAFTS/20-002.html). - -## Methods - -| Path | Content-Type Header | Description | -| ------------------------------------------------------------------------ | ------------------- | ---------------------------------------------------------------------------- | -| `GET /collections/{collectionID}/versions` | `application/json` | Returns a catalog response with links to all versions of a given collection. | -| `GET /collections/{collectionID}/versions/{versionId}` | `application/json` | Returns a collection record. | -| `GET /collections/{collectionID}/items/{featureId}/versions` | `application/json` | Returns a catalog response with links to all versions of a given item. | -| `GET /collections/{collectionID}/items/{featureId}/versions/{versionId}` | `application/json` | Returns an item record. | - -## How It Works - -When this extension is implemented, the API supports `versions` resource that list all versions -of an item or collection and provides permanent links to each version. - -The latest version of an item is accessible at `/collections/{collectionID}/items/{itemsId}`. -The record has a link with `"rel": "permalink"` that links to the permanent location of the record -which is `/collections/{collectionID}/items/{itemsId}/versions/{versionId}`. - -If the record has a previous version it also provides a link to the permanent location of that version -using `"rel": "predecessor-version"`. - -Each updated records provides the link to the previous version. - -The path `/collections/{collectionID}/items/{itemsId}/versions/` provides a catalog response with -list of links to all versions available for an item. - -## Version ID - -Version ID is a unique identifier for a version of an Item or Collection. -This extension remains agnostic about what the identifier should be. -There are many options for a versioning schema including: -- md5 hash of the record -- datetime epoch -- incrementing number -- semantic versioning - -## Link "rel" Types - -The extension uses [RFC5829](https://tools.ietf.org/html/rfc5829) rel types to link to different versions: - -| Type | Description | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| latest-version | Points to the latest version of the record. | -| version-history | Points to the list of versions. | -| predecessor-version | Points to the previous version of the document. | -| successor-version | Points to the successor version in the version history. | -| permalink | Points to the permanent location of the record. This location points to a specific version, remains accessible and will not change even when there are future versions of the record. | - -## Example - -For an item record with the id `this_is_my_id` and version of `02`, this is how the versioning works - -Request to `GET /collections/my_collection/items/this_is_my_id`: -```json -{ - "id": "this_is_my_id", - "type": "Feature", - "bbox": [], - "geometry": {}, - "properties": {}, - "links": [ - { - "rel": "self", - "href": "/collections/my_collection/items/this_is_my_id" - }, - { - "rel" : "permalink", - "href": "/collections/my_collection/items/this_is_my_id/versions/02" - }, - { - "rel": "predecessor-version", - "href": "/collections/my_collection/items/this_is_my_id/versions/01" - }, - { - "rel": "latest-version", - "href": "/collections/my_collection/items/this_is_my_id" - }, - { - "rel": "version-history", - "href": "/collections/my_collection/items/this_is_my_id/versions" - } - ] -} -``` - -Request to `GET /collections/my_collection/items/this_is_my_id/versions/02`: -```json -{ - "id": "this_is_my_id", - "type": "Feature", - "bbox": [], - "geometry": {}, - "properties": {}, - "links": [ - { - "rel": "self", - "href": "/collections/my_collection/items/this_is_my_id/versions/02" - }, - { - "rel" : "permalink", - "href": "/collections/my_collection/items/this_is_my_id/versions/02" - }, - { - "rel": "predecessor-version", - "href": "/collections/my_collection/items/this_is_my_id/versions/01" - }, - { - "rel": "latest-version", - "href": "/collections/my_collection/items/this_is_my_id" - }, - { - "rel": "version-history", - "href": "/collections/my_collection/items/this_is_my_id/versions" - } - ] -} -``` - -Request to `GET /collections/my_collection/items/this_is_my_id/versions/01`: -```json -{ - "id": "this_is_my_id", - "type": "Feature", - "bbox": [], - "geometry": {}, - "properties": {}, - "links": [ - { - "rel": "self", - "href": "/collections/my_collection/items/this_is_my_id/versions/01" - }, - { - "rel" : "permalink", - "href": "/collections/my_collection/items/this_is_my_id/versions/01" - }, - { - "rel": "predecessor-version", - "href": "/collections/my_collection/items/this_is_my_id/versions/01" - }, - { - "rel": "latest-version", - "href": "/collections/my_collection/items/this_is_my_id" - }, - { - "rel": "version-history", - "href": "/collections/my_collection/items/this_is_my_id/versions" - } - ] -} -``` - -## FAQ - -- **How do I find the latest version of an item?** - - By going to `/collections/{collectionID}/items/{itemsId}` *or* - - by looking at `"rel": "latest-version"`. - -- **How do I find the permalink of an item I'm looking at?** - - By looking at the `href` value of a link with `"rel": "permalink"` - -- **How do I find the previous versions of a record?** - - By going to `/collections/{collectionID}/items/{itemsId}/versions` - -- **How do I find the order of versions?** - - By following the `"rel": "predecessor-version"` links. diff --git a/ogcapi-features/extensions/version/openapi.yaml b/ogcapi-features/extensions/version/openapi.yaml deleted file mode 100644 index e802233b..00000000 --- a/ogcapi-features/extensions/version/openapi.yaml +++ /dev/null @@ -1,86 +0,0 @@ -openapi: 3.0.3 -info: - title: The SpatioTemporal Asset Catalog API - Item Search - version: 1.0.0-rc.1 - description: >- - This is an OpenAPI definition of the SpatioTemporal Asset Catalog API Item Search - specification. - contact: - name: STAC Specification - url: 'http://stacspec.org' - license: - name: Apache License 2.0 - url: 'http://www.apache.org/licenses/LICENSE-2.0' -tags: - - name: Version - description: This version API extension defines the API resources and semantics for creating and accessing versioned records. -paths: - '/collections/{collectionId}/versions': - get: - summary: returns a list of links for a versioned collection - description: returns a list of links for a versioned collection - tags: - - Version - operationId: getCollectionVersions - parameters: - - $ref: '../../openapi.yaml#/components/parameters/collectionId' - responses: - '200': - description: A catalog JSON definition the returns list of links of a collection versions - content: - application/json: - schema: - $ref: '../../../core/commons.yaml#/components/schemas/catalog' - '/collections/{collectionId}/versions/{versionId}': - get: - summary: returns the requested version of a collection - description: returns the requested version of a collection - tags: - - Version - operationId: getCollectionVersion - parameters: - - $ref: '../../openapi.yaml#/components/parameters/collectionId' - - $ref: '#/components/parameters/versionId' - responses: - '200': - $ref: '../../openapi.yaml#/components/responses/Collections' - '/collections/{collectionId}/items/{featureId}/versions': - get: - summary: returns a list of links for a versioned item - description: returns a list of links for a versioned item - tags: - - Version - operationId: getItemVersions - parameters: - - $ref: '../../openapi.yaml#/components/parameters/collectionId' - - $ref: '../../openapi.yaml#/components/parameters/featureId' - responses: - '200': - description: A catalog JSON definition the returns list of links of an item versions - content: - application/json: - schema: - $ref: '../../../core/commons.yaml#/components/schemas/catalog' - '/collections/{collectionId}/items/{featureId}/versions/{versionId}': - get: - summary: returns the requested version of an item - description: returns the requested version of an item - tags: - - Version - operationId: getItemVersion - parameters: - - $ref: '../../openapi.yaml#/components/parameters/collectionId' - - $ref: '../../openapi.yaml#/components/parameters/featureId' - - $ref: '#/components/parameters/versionId' - responses: - '200': - $ref: '../../openapi.yaml#/components/responses/Collections' -components: - parameters: - versionId: - name: versionId - in: path - description: local identifier of a version - required: true - schema: - type: string diff --git a/ogcapi-features/openapi.yaml b/ogcapi-features/openapi.yaml deleted file mode 100644 index 2f80dd59..00000000 --- a/ogcapi-features/openapi.yaml +++ /dev/null @@ -1,428 +0,0 @@ -openapi: 3.0.3 -info: - title: STAC API - Features - version: '1.0.0-rc.1' - description: >- - This is an OpenAPI definition of the SpatioTemporal Asset Catalog API - Features - specification. This extends OGC API - Features - Part 1: Core. - contact: - name: STAC Specification - url: 'http://stacspec.org' - license: - name: Apache License 2.0 - url: 'http://www.apache.org/licenses/LICENSE-2.0' -tags: - - name: Features - description: |- - All endpoints related to OGC API - Features - Part 1: Core -paths: - '/': - get: - tags: - - Features - summary: landing page - description: |- - The landing page provides links to the sub-resources. - operationId: getLandingPage - responses: - '200': - description: |- - The landing page provides links to the API definition - (link relations `service-desc` and `service-doc`), - the Conformance declaration (path `/conformance`, - link relation `conformance`), and the Feature - Collections (path `/collections`, link relation - `data`). - content: - application/json: - schema: - $ref: '../core/openapi.yaml#/components/schemas/landingPage' - example: - stac_version: '1.0.0' - type: Catalog - id: sentinel - title: Copernicus Sentinel Imagery - description: Catalog of Copernicus Sentinel 1 and 2 imagery. - conformsTo: - - 'https://api.stacspec.org/v1.0.0-rc.1/core' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson' - links: - - href: 'http://data.example.org/' - rel: self - type: application/json - title: this document - - href: 'http://data.example.org/api' - rel: service-desc - type: application/vnd.oai.openapi+json;version=3.0 - title: the API definition - - href: 'http://data.example.org/api.html' - rel: service-doc - type: text/html - title: the API documentation - - href: 'http://data.example.org/conformance' - rel: conformance - type: application/json - title: OGC API conformance classes implemented by this server - - href: 'http://data.example.org/collections' - rel: data - type: application/json - title: Information about the feature collections - '/conformance': - get: - tags: - - Features - summary: information about specifications that this API conforms to - description: |- - A list of all conformance classes specified in a standard that the - server conforms to. - operationId: getConformanceDeclaration - responses: - '200': - $ref: '#/components/responses/ConformanceDeclaration' - '500': - $ref: '#/components/responses/ServerError' - '/collections': - get: - tags: - - Features - summary: the feature collections in the dataset - description: |- - A body of Feature Collections that belong or are used together with additional links. - Request may not return the full set of metadata per Feature Collection. - operationId: getCollections - responses: - '200': - $ref: '#/components/responses/Collections' - '500': - $ref: '#/components/responses/ServerError' - '/collections/{collectionId}': - get: - tags: - - Features - summary: |- - describe the feature collection with id `collectionId` - description: |- - A single Feature Collection for the given if `collectionId`. - Request this endpoint to get a full list of metadata for the Feature Collection. - operationId: describeCollection - parameters: - - $ref: '#/components/parameters/collectionId' - responses: - '200': - $ref: '#/components/responses/Collection' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/ServerError' - '/collections/{collectionId}/items': - get: - tags: - - Features - summary: fetch features - description: |- - Fetch features of the feature collection with id `collectionId`. - - Every feature in a dataset belongs to a collection. A dataset may - consist of multiple feature collections. A feature collection is often a - collection of features of a similar type, based on a common schema. - operationId: getFeatures - parameters: - - $ref: '#/components/parameters/collectionId' - - $ref: '#/components/parameters/limit' - - $ref: '#/components/parameters/bbox' - - $ref: '#/components/parameters/datetime' - responses: - '200': - $ref: '#/components/responses/Features' - '400': - $ref: '#/components/responses/InvalidParameter' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/ServerError' - '/collections/{collectionId}/items/{featureId}': - get: - tags: - - Features - summary: fetch a single feature - description: |- - Fetch the feature with id `featureId` in the feature collection - with id `collectionId`. - operationId: getFeature - parameters: - - $ref: '#/components/parameters/collectionId' - - $ref: '#/components/parameters/featureId' - responses: - '200': - $ref: '#/components/responses/Feature' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/ServerError' -components: - parameters: - bbox: - name: bbox - in: query - description: |- - Only features that have a geometry that intersects the bounding box are selected. - The bounding box is provided as four or six numbers, depending on whether the - coordinate reference system includes a vertical axis (height or depth): - - * Lower left corner, coordinate axis 1 - * Lower left corner, coordinate axis 2 - * Minimum value, coordinate axis 3 (optional) - * Upper right corner, coordinate axis 1 - * Upper right corner, coordinate axis 2 - * Maximum value, coordinate axis 3 (optional) - - The coordinate reference system of the values is WGS 84 longitude/latitude - (http://www.opengis.net/def/crs/OGC/1.3/CRS84). - - For WGS 84 longitude/latitude the values are in most cases the sequence of - minimum longitude, minimum latitude, maximum longitude and maximum latitude. - However, in cases where the box spans the antimeridian the first value - (west-most box edge) is larger than the third value (east-most box edge). - - If the vertical axis is included, the third and the sixth number are - the bottom and the top of the 3-dimensional bounding box. - - If a feature has multiple spatial geometry properties, it is the decision of the - server whether only a single spatial geometry property is used to determine - the extent or all relevant geometries. - required: false - schema: - type: array - oneOf: - - minItems: 4 - maxItems: 4 - - minItems: 6 - maxItems: 6 - items: - type: number - style: form - explode: false - collectionId: - name: collectionId - in: path - description: local identifier of a collection - required: true - schema: - type: string - datetime: - name: datetime - in: query - description: |- - Either a date-time or an interval, open or closed. Date and time expressions - adhere to RFC 3339. Open intervals are expressed using double-dots. - - Examples: - - * A date-time: "2018-02-12T23:20:50Z" - * A closed interval: "2018-02-12T00:00:00Z/2018-03-18T12:31:12Z" - * Open intervals: "2018-02-12T00:00:00Z/.." or "../2018-03-18T12:31:12Z" - - Only features that have a temporal property that intersects the value of - `datetime` are selected. - - If a feature has multiple temporal properties, it is the decision of the - server whether only a single temporal property is used to determine - the extent or all relevant temporal properties. - required: false - schema: - type: string - style: form - explode: false - featureId: - name: featureId - in: path - description: local identifier of a feature - required: true - schema: - type: string - limit: - name: limit - in: query - description: |- - The optional limit parameter recommends the number of items that should be present in the response document. - - If the limit parameter value is greater than advertised limit maximum, the server must return the - maximum possible number of items, rather than responding with an error. - - Only items are counted that are on the first level of the collection in the response document. - Nested objects contained within the explicitly requested items must not be counted. - - Minimum = 1. Maximum = 10000. Default = 10. - required: false - schema: - type: integer - minimum: 1 - maximum: 10000 - default: 10 - style: form - explode: false - schemas: - collections: - type: object - required: - - links - - collections - properties: - links: - $ref: '../core/commons.yaml#/components/schemas/links' - collections: - type: array - items: - $ref: '../core/commons.yaml#/components/schemas/collection' - featureCollectionGeoJSON: - allOf: - - $ref: '../core/commons.yaml#/components/schemas/featureCollectionGeoJSON' - - type: object - required: - - features - properties: - features: - type: array - items: - $ref: '../core/commons.yaml#/components/schemas/item' - links: - $ref: '../core/commons.yaml#/components/schemas/links' - timeStamp: - $ref: '#/components/schemas/timeStamp' - numberMatched: - $ref: '#/components/schemas/numberMatched' - numberReturned: - $ref: '#/components/schemas/numberReturned' - numberMatched: - description: |- - The number of features of the feature type that match the selection - parameters like `bbox`. - type: integer - minimum: 0 - example: 127 - numberReturned: - description: |- - The number of features in the feature collection. - - A server may omit this information in a response, if the information - about the number of features is not known or difficult to compute. - - If the value is provided, the value must be identical to the number - of items in the "features" array. - type: integer - minimum: 0 - example: 10 - timeStamp: - description: This property indicates the time and date when the response was generated. - type: string - format: date-time - example: '2017-08-17T08:05:32Z' - responses: - ConformanceDeclaration: - description: |- - The URIs of all conformance classes supported by the server. - - To support "generic" clients that want to access multiple - OGC API Features implementations - and not "just" a specific - API / server, the server declares the conformance - classes it implements and conforms to. - content: - application/json: - schema: - $ref: '../core/commons.yaml#/components/schemas/conformanceClasses' - example: - conformsTo: - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30' - - 'http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson' - Collections: - description: |- - The feature collections shared by this API. - - The dataset is organized as one or more feature collections. This resource - provides information about and access to the collections. - - The response contains the list of collections. For each collection, a link - to the items in the collection (path `/collections/{collectionId}/items`, - link relation `items`) as well as key information about the collection. - This information includes: - - * A local identifier for the collection that is unique for the dataset; - * A list of coordinate reference systems (CRS) in which geometries may be returned by the server. The first CRS is the default coordinate reference system (the default is always WGS 84 with axis order longitude/latitude); - * An optional title and description for the collection; - * An optional extent that can be used to provide an indication of the spatial and temporal extent of the collection - typically derived from the data; - * An optional indicator about the type of the items in the collection (the default value, if the indicator is not provided, is 'feature'). - content: - application/json: - schema: - $ref: '#/components/schemas/collections' - Collection: - description: |- - Information about the feature collection with id `collectionId`. - - The response contains a link to the items in the collection - (path `/collections/{collectionId}/items`, link relation `items`) - as well as key information about the collection. This information - includes: - - * A local identifier for the collection that is unique for the dataset; - * A list of coordinate reference systems (CRS) in which geometries may be returned by the server. The first CRS is the default coordinate reference system (the default is always WGS 84 with axis order longitude/latitude); - * An optional title and description for the collection; - * An optional extent that can be used to provide an indication of the spatial and temporal extent of the collection - typically derived from the data; - * An optional indicator about the type of the items in the collection (the default value, if the indicator is not provided, is 'feature'). - content: - application/json: - schema: - $ref: '../core/commons.yaml#/components/schemas/collection' - Features: - description: |- - The response is a document consisting of features in the collection. - The features included in the response are determined by the server - based on the query parameters of the request. To support access to - larger collections without overloading the client, the API supports - paged access with links to the next page, if more features are selected - that the page size. - - The `bbox` and `datetime` parameter can be used to select only a - subset of the features in the collection (the features that are in the - bounding box or time interval). The `bbox` parameter matches all features - in the collection that are not associated with a location, too. The - `datetime` parameter matches all features in the collection that are - not associated with a time stamp or interval, too. - - The `limit` parameter may be used to control the subset of the - selected features that should be returned in the response, the page size. - Each page may include information about the number of selected and - returned features (`numberMatched` and `numberReturned`) as well as - links to support paging (link relation `next`). - content: - application/geo+json: - schema: - $ref: '#/components/schemas/featureCollectionGeoJSON' - Feature: - description: |- - fetch the feature with id `featureId` in the feature collection - with id `collectionId` - content: - application/geo+json: - schema: - $ref: '../core/commons.yaml#/components/schemas/item' - InvalidParameter: - description: |- - A query parameter has an invalid value. - content: - application/json: - schema: - $ref: '../core/commons.yaml#/components/schemas/exception' - NotFound: - description: |- - The requested URI was not found. - ServerError: - description: |- - A server error occurred. - content: - application/json: - schema: - $ref: '../core/commons.yaml#/components/schemas/exception' diff --git a/ogcapi-features/extensions/transaction/openapi.yaml b/openapi.yaml similarity index 66% rename from ogcapi-features/extensions/transaction/openapi.yaml rename to openapi.yaml index 62167ba9..788cabd3 100644 --- a/ogcapi-features/extensions/transaction/openapi.yaml +++ b/openapi.yaml @@ -19,7 +19,7 @@ tags: paths: '/collections/{collectionId}/items': parameters: - - $ref: '../../openapi.yaml#/components/parameters/collectionId' + - $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/parameters/collectionId' post: summary: add a new STAC Item or Items in an ItemCollection to a collection description: create a new STAC Item r Items in an ItemCollection in a specific collection @@ -49,25 +49,25 @@ paths: content: application/json: schema: - $ref: '../../../core/commons.yaml#/components/schemas/item' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/item' '202': description: The item was accepted for asynchronous action '400': $ref: '#/components/responses/BadRequest' '404': - $ref: '../../openapi.yaml#/components/responses/NotFound' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/responses/NotFound' '500': - $ref: '../../openapi.yaml#/components/responses/ServerError' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/responses/ServerError' default: description: An error occurred. content: application/json: schema: - $ref: '../../../core/commons.yaml#/components/schemas/exception' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/exception' '/collections/{collectionId}/items/{featureId}': parameters: - - $ref: '../../openapi.yaml#/components/parameters/collectionId' - - $ref: '../../openapi.yaml#/components/parameters/featureId' + - $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/parameters/collectionId' + - $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/parameters/featureId' get: tags: - Transaction @@ -110,7 +110,7 @@ paths: content: application/json: schema: - $ref: '../../../core/commons.yaml#/components/schemas/item' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/item' '202': description: The item was accepted for asynchronous action '204': @@ -123,17 +123,17 @@ paths: '400': $ref: '#/components/responses/BadRequest' '404': - $ref: '../../openapi.yaml#/components/responses/NotFound' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/responses/NotFound' '412': $ref: '#/components/responses/PreconditionFailed' '500': - $ref: '../../openapi.yaml#/components/responses/ServerError' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/responses/ServerError' default: description: An error occurred. content: application/json: schema: - $ref: '../../../core/commons.yaml#/components/schemas/exception' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/exception' patch: summary: update an existing feature by Id with a partial item definition description: >- @@ -160,7 +160,7 @@ paths: content: application/json: schema: - $ref: '../../../core/commons.yaml#/components/schemas/item' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/item' '202': description: The item was accepted for asynchronous action '204': @@ -173,15 +173,15 @@ paths: '400': $ref: '#/components/responses/BadRequest' '404': - $ref: '../../openapi.yaml#/components/responses/NotFound' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/responses/NotFound' '500': - $ref: '../../openapi.yaml#/components/responses/ServerError' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/responses/ServerError' default: description: An error occurred. content: application/json: schema: - $ref: '../../../core/commons.yaml#/components/schemas/exception' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/exception' delete: summary: delete an existing feature by Id description: Use this method to delete an existing feature. @@ -200,15 +200,15 @@ paths: '400': $ref: '#/components/responses/BadRequest' '404': - $ref: '../../openapi.yaml#/components/responses/NotFound' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/responses/NotFound' '500': - $ref: '../../openapi.yaml#/components/responses/ServerError' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/responses/ServerError' default: description: An error occurred. content: application/json: schema: - $ref: '../../../core/commons.yaml#/components/schemas/exception' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/exception' components: parameters: IfMatch: @@ -234,25 +234,25 @@ components: type: object properties: stac_version: - $ref: '../../../core/commons.yaml#/components/schemas/stac_version' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/stac_version' stac_extensions: - $ref: '../../../core/commons.yaml#/components/schemas/stac_extensions' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/stac_extensions' id: - $ref: '../../../core/commons.yaml#/components/schemas/itemId' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/itemId' bbox: - $ref: '../../../core/commons.yaml#/components/schemas/bbox' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/bbox' geometry: - $ref: '../../../core/commons.yaml#/components/schemas/geometryGeoJSON' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/geometryGeoJSON' type: - $ref: '../../../core/commons.yaml#/components/schemas/itemType' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/itemType' properties: $ref: '#/components/schemas/patchItemProperties' links: type: array items: - $ref: '../../../core/commons.yaml#/components/schemas/link' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/link' assets: - $ref: '../../../core/commons.yaml#/components/schemas/assets' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/assets' patchItemProperties: description: >- An object that contains at least a subset of a valid STAC Item Properties object. @@ -260,7 +260,7 @@ components: additionalProperties: true properties: datetime: - $ref: '../../../core/commons.yaml#/components/schemas/datetime' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/datetime' postOrPutItemCollection: description: >- A GeoJSON FeatureCollection augmented with foreign members that contain values relevant to a STAC entity @@ -283,7 +283,7 @@ components: with the `next` relation type. type: array items: - $ref: '../../../core/commons.yaml#/components/schemas/link' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/link' example: - rel: next href: >- @@ -300,35 +300,35 @@ components: - properties properties: stac_version: - $ref: '../../../core/commons.yaml#/components/schemas/stac_version' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/stac_version' stac_extensions: - $ref: '../../../core/commons.yaml#/components/schemas/stac_extensions' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/stac_extensions' id: - $ref: '../../../core/commons.yaml#/components/schemas/itemId' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/itemId' bbox: - $ref: '../../../core/commons.yaml#/components/schemas/bbox' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/bbox' geometry: - $ref: '../../../core/commons.yaml#/components/schemas/geometryGeoJSON' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/geometryGeoJSON' type: - $ref: '../../../core/commons.yaml#/components/schemas/itemType' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/itemType' properties: - $ref: '../../../core/commons.yaml#/components/schemas/properties' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/properties' links: type: array items: - $ref: '../../../core/commons.yaml#/components/schemas/link' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/link' assets: - $ref: '../../../core/commons.yaml#/components/schemas/assets' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/assets' responses: BadRequest: description: The request was malformed or semantically invalid content: application/json: schema: - $ref: '../../../core/commons.yaml#/components/schemas/exception' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/exception' PreconditionFailed: description: Some condition specified by the request could not be met in the server content: application/json: schema: - $ref: '../../../core/commons.yaml#/components/schemas/exception' + $ref: 'https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features/openapi.yaml#/components/schemas/exception' diff --git a/overview.md b/overview.md deleted file mode 100644 index ac6f7f70..00000000 --- a/overview.md +++ /dev/null @@ -1,225 +0,0 @@ -# About - -The STAC API defines a JSON-based web API to browse and query [SpatioTemporal Asset Catalog](stac-spec/) -(STAC) objects. While the core STAC specification provides a structure and language to describe assets, users -usually want to access -a subset of the entire catalog, such as for a certain date range, in a particular area of interest, or matching properties -they care about. STAC API extensions specify those query parameters, and compliant servers return STAC [Item](stac-spec/item-spec/README.md) -objects that -match the user's preferences. A lot of additional functionality can be added through the [OGC API](https://ogcapi.ogc.org/) family of -standards, particularly [OGC API - Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) (OAFeat, for our -shorthand). Notes on implementation recommendations may be found [here](implementation.md). - -## STAC API Description - -### Core - -The [core](core/) of STAC API simply returns a valid [STAC Catalog](stac-spec/catalog-spec/catalog-spec.md) and a description -of what parts of the fuller STAC API specification it conforms to. The `links` section of the Catalog is the jumping-off -point for the more powerful capabilities - it contains a list of URLs, each are described by particular link -'relationships' (`rel`) to indicate their functionality. Note that the [STAC Core specification](stac-spec) provides -most of the content of API responses - the STAC API is primarily concerned with the return of STAC -[Item](stac-spec/item-spec/README.md) and [Collection](stac-spec/collection-spec/README.md) objects via a -web API. See the [rendered OpenAPI document](https://api.stacspec.org/v1.0.0-rc.1/core) for more details. - -There are then two major sets of functionality that build on the core, which are designed to be complementary, letting -implementations choose which parts they want to utilize. Almost every STAC API implements at least one and many follow -two or all three. - -### Item Search - -The [item search](item-search) functionality is one of the most common, provided by the `search` rel often -located at a `/search` endpoint. It re-uses all of the OAFeat [query -parameters](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_items_) specified in their 'core', and adds a -couple more. It does not require a full implementation of OAFeat, it is instead a simplified construct that can run a -search across any set of indexed STAC [`Item`](stac-spec/item-spec/README.md) objects. See the [rendered OpenAPI -document](https://api.stacspec.org/v1.0.0-rc.1/item-spec) for more details. - -### Collections - -The other most common set of functionality is [Collections](collections/). This is implemented with the `/collections` -endpoint and linked with the `data` relation. The response is a complete list of available STAC `Collection` -entities. Each individual collection resource can be accessed with the endpoints like `/collection/{collectionId}` -by collection ID. This is a subset of the functionality defined by the *STAC API - Features* conformance class. - -This general pattern is defined in OAFeat's -[Feature Collections](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_collections_) as part of -OGC API - Features Part 1, but STAC is currently just using a subset of the full OAFeat conformance class, -so for now it is specified here. -STAC's [Collection](stac-spec/collection-spec/README.md) extends the OGC Collection with a handful of [additional -fields](stac-spec/collection-spec/collection-spec.md#collection-fields). STAC APIs are expected to return STAC -compliant Collections. - -### STAC API - Features - -The other major functionality for a STAC API is to [serve STAC Collection and Item](ogcapi-features) objects through -the [OGC API - Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) endpoints. This enables any OAFeat client -to access STAC Item objects in the same way they do any other data. Every STAC Collection becomes available at the -`/collections` endpoint (making this a superset of the Collections functionality), with each -`/collections/{collectionId}/items` endpoint allowing search of the items -in that single collection. For STAC, this means implementing [OGC API - Features -Core](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_requirements_class_core), as well as - following their [GeoJSON](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_requirements_class_geojson) and -[OpenAPI](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_requirements_class_openapi_3_0) options, since STAC -is always in GeoJSON and OpenAPI is used to specify STAC API. Full compliance involves splitting STAC `Item` objects into -individual `/collections/{collectionId}/items` endpoints that expose querying single collections, as OAFeat does -not currently allow cross-collection search. And it adds a few other requirements, which are highlighted in the -[features description](ogcapi-features/), in order to help STAC implementors understand OAFeat without having to -read the full spec from scratch. See the [rendered OpenAPI document](https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features) -for more details. - -### Extensions & Fragments - -Both STAC API and OAFeat allow 'extensions' that can be added for additional functionality. The STAC community has -created a number of extensions to OAFeat, in order to meet the requirements of its implementors and the complete list -can be found in the [extensions document](extensions.md), which links to each of them and details their maturity. -These are specified in OpenAPI, which works cleanly when the new functionality is a new API location (a complete -resource, or adding POST to an existing one). Many of the additions, however, are done at the parameter or response -level, like adding a `sortby` field to return ordered results. To make these reusable by both Item Search and OAFeat, -in STAC they are specified in the [fragments/](fragments/) directory, where the core functionality is described. -Each *extension* is made specifically against a part of the STAC API, so that it can be specified as a conformance -class (to say, for example, that item-search supports `sortby` but ogcapi-features does not). But if it is based -on a fragment then it will likely just be a thin wrapper to declare the conformance. This is a bit less than ideal, -but it seemed to be the best approach that actually works with OpenAPI. - -We are working to fully align STAC's OAFeat extensions to be the same as the OGC API building blocks being worked on -so that every STAC extension is specified at the OGC API level. The end goal is for STAC API to just present a -curated set of extension options. - -## STAC Core and OGC Versions - -This version of STAC API depends on OGC API - Features - Part 1: Core [Version 1.0](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html). -Future versions will likely depend on [OGC API Common](https://github.com/opengeospatial/ogcapi-common) and additional parts of -Features as components evolve and mature. - -This version of STAC API is intended to work with any STAC core specification version 0.9.x or 1.x.x (including betas), but is not -designed to work with STAC 2.0 and above (since we use [SemVer](https://semver.org/) it may introduce backwards incompatible changes). -The STAC API spec is released with the latest stable STAC core specification version included in the [`/stac-spec`](stac-spec/) -directory as a [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules). To determine which version it is, just check the -[`/stac-spec/CHANGELOG.md`](stac-spec/CHANGELOG.md) for the topmost version & release date. - -## Capabilities List - -STAC APIs follow the modern web API practices of using HTTP Request Methods ("verbs") and -the `Content-Type` header to drive behavior on resources ("nouns") in the endpoints listed below. - -The following table describes the service resources available in a full STAC API implementation. Note that the 'Endpoint' -column is more of an example in some cases. OGC API makes some endpoint locations required, those will be bolded below. - -| Endpoint | Specified in | Link Relationship | Returns | Description | -| --------------------------------------------------- | -------------------------- | ----------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| `/` | [Core](core) | root | [Catalog](stac-spec/catalog-spec/catalog-spec.md) | Extends `/` from OAFeat to return a full STAC catalog. | -| `/search` | [Item Search](item-search) | search | [ItemCollection](fragments/itemcollection/README.md) | Retrieves a group of Item objects matching the provided search predicates, probably containing search metadata from the `search` extension | -| **`/collections`** | [OAFeat](ogcapi-features) | data | JSON | Object with a list of Collection objects contained in the catalog and links | -| **`/conformance`** | [OAFeat](ogcapi-features) | conformance | JSON | Info about standards to which the API conforms | -| `/api` | [OAFeat](ogcapi-features) | service-desc | any | The description of the endpoints in this service | -| **`/collections/{collectionId}`** | [OAFeat](ogcapi-features) | collection | Collection | Returns single Collection JSON | -| **`/collections/{collectionId}/items`** | [OAFeat](ogcapi-features) | items | ItemCollection | GeoJSON FeatureCollection-conformant entity of Item objects in collection | -| **`/collections/{collectionId}/items/{featureId}`** | [OAFeat](ogcapi-features) | item | Returns single Item (GeoJSON Feature). This relation is usually not used in OAFeat implementations. | - -## Conformance Classes - -STAC API is evolving to utilize OAFeat's -'[Conformance](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_declaration_of_conformance_classes)' -JSON structure. For -STAC API 1.0.0-rc.1 we declare new STAC Conformance classes, with the core ones detailed in the table below. [STAC -Features](ogcapi-features) requires the core OAFeat conformance classes and declares that those endpoints return -STAC Collection and Feature objects. -The core STAC conformance classes communicate the conformance JSON only in the root (`/`) document, while OGC API -requires they also live at the `/conformance` endpoint. STAC's conformance structure is detailed in the -[core](core/). Note all -conformance URIs serve up a rendered HTML version of the corresponding OpenAPI document at the given location. - -**NOTE:** *By 1.0.0 we aim to have requirements classes specified in detail, as testable assertions, -as OGC does, but for now the core reference is just this spec document and the OpenAPI YAML. We also desire to -have the URIs for conformance to actually resolve to machine-readable information clients can use.* - -### Conformance Class Table - -| **Name** | **Specified in** | **Conformance URI** | **Description** | -| ------------- | -------------------------------------- | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | -| STAC Core | [Core](core) | | Specifies the STAC Landing page `/`, communicating conformance and available endpoints. | -| Item Search | [Item Search](item-search) | | Enables search of all STAC Item objects on the server, with the STAC `[/search](#stac-api-endpoints)` endpoint. | -| STAC Features | [STAC API - Features](ogcapi-features) | | Specifies the use of OGC API - Features to serve STAC Item and Collection objects | -| Collections | [Collections](collections) | | Specifies the use of a subset of OGC API - Features to serve Collection objects | -| Children | [Children](children) | | Returns child objects of a Catalog | -| Browseable | [Browseable](browseable) | | Indicates that all Items in a Catalog can be accessed through following child and item link relations | - -Additional conformance classes are specified in the [STAC Extensions](extensions.md#Conformance-classes-of-extensions). - -## Example Landing Page - -When all three conformance classes (Core, Features, Item Search) are implemented, the relationships among -various resources are shown in the following diagram. In each node, there is also a `self` and `root` link -that are not depicted to keep the diagram more concise. - -![Diagram of STAC link relations](stac-api.png) - -The Landing Page will at least have the following `conformsTo` and `links`: - -```json -{ - "stac_version": "1.0.0", - "id": "example-stac", - "title": "A simple STAC API Example", - "description": "This Catalog aims to demonstrate the a simple landing page", - "type": "Catalog", - "conformsTo" : [ - "https://api.stacspec.org/v1.0.0-rc.1/core", - "https://api.stacspec.org/v1.0.0-rc.1/browseable", - "https://api.stacspec.org/v1.0.0-rc.1/collections", - "https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features", - "https://api.stacspec.org/v1.0.0-rc.1/item-search", - "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core", - "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30", - "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson" - ], - "links": [ - { - "rel": "self", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "root", - "type": "application/json", - "href": "https://stac-api.example.com" - }, - { - "rel": "conformance", - "type": "application/json", - "href": "https://stac-api.example.com/conformance" - }, - { - "rel": "service-desc", - "type": "application/vnd.oai.openapi+json;version=3.0", - "href": "https://stac-api.example.com/api" - }, - { - "rel": "service-doc", - "type": "text/html", - "href": "https://stac-api.example.com/api.html" - }, - { - "rel": "data", - "type": "application/json", - "href": "https://stac-api.example.com/collections" - }, - { - "rel": "child", - "type": "application/json", - "href": "https://stac-api.example.com/collections/sentinel-2", - }, - { - "rel": "child", - "type": "application/json", - "href": "https://stac-api.example.com/collections/landsat-8", - }, - { - "rel": "search", - "type": "application/geo+json", - "href": "https://stac-api.example.com/search" - } - ] -} -``` diff --git a/package-lock.json b/package-lock.json index 14138b41..493f3d9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,15 @@ { - "name": "api-spec", + "name": "stac-api-transaction-extension-spec", "version": "1.0.0-rc.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "api-spec", + "name": "stac-api-transaction-extension-spec", "version": "1.0.0-rc.1", "license": "Apache-2.0", "dependencies": { - "@redocly/openapi-cli": "^1.0.0-beta.94", "@stoplight/spectral-cli": "^6.4.2", - "gh-pages": "^4.0.0", - "redoc-cli": "^0.13.16", "remark-cli": "^11.0.0", "remark-gfm": "^3.0.1", "remark-lint": "^9.1.1", @@ -282,66 +279,6 @@ "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==" }, - "node_modules/@redocly/ajv": { - "version": "8.6.4", - "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.6.4.tgz", - "integrity": "sha512-y9qNj0//tZtWB2jfXNK3BX18BSBp9zNR7KE7lMysVHwbZtY392OJCjm6Rb/h4UHH2r1AqjNEHFD6bRn+DqU9Mw==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@redocly/openapi-cli": { - "version": "1.0.0-beta.95", - "resolved": "https://registry.npmjs.org/@redocly/openapi-cli/-/openapi-cli-1.0.0-beta.95.tgz", - "integrity": "sha512-pl/OAeKh/psk6kF9SZjRieJK15T6T5GYcKVeBHvT7vtuhIBRBkrLC3bf3BhiMQx49BdSTB7Tk4/0LFPy0zr1MA==", - "deprecated": "This project has been renamed to @redocly/cli. Install using new package name instead.", - "dependencies": { - "@redocly/openapi-core": "1.0.0-beta.95", - "@types/node": "^14.11.8", - "assert-node-version": "^1.0.3", - "chokidar": "^3.5.1", - "colorette": "^1.2.0", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "handlebars": "^4.7.6", - "portfinder": "^1.0.26", - "simple-websocket": "^9.0.0", - "yargs": "17.0.1" - }, - "bin": { - "openapi": "bin/cli.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@redocly/openapi-core": { - "version": "1.0.0-beta.95", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.0.0-beta.95.tgz", - "integrity": "sha512-7Nnc4Obp/1lbrjNjD33oOnZCuoJa8awhBCEyyayPWGQFp1SkhjpZJnfnKkFuYbQzMjTIAvEeSp9DOQK/E0fgEA==", - "dependencies": { - "@redocly/ajv": "^8.6.4", - "@types/node": "^14.11.8", - "colorette": "^1.2.0", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "lodash.isequal": "^4.5.0", - "minimatch": "^3.0.4", - "node-fetch": "^2.6.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@rollup/plugin-commonjs": { "version": "20.0.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", @@ -890,15 +827,6 @@ "@types/estree": "*" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "node_modules/@types/hast": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", @@ -925,11 +853,6 @@ "@types/unist": "*" } }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", @@ -1113,30 +1036,6 @@ "node": ">= 8" } }, - "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/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/as-table": { "version": "1.0.55", "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", @@ -1145,18 +1044,6 @@ "printable-characters": "^1.0.42" } }, - "node_modules/assert-node-version": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/assert-node-version/-/assert-node-version-1.0.3.tgz", - "integrity": "sha512-XcKBGJ1t0RrCcus9dQX57FER4PTEz/+Tee2jj+EdFIGyw5j8hwDNXZzgRYLQ916twVjSuA47adrZsSxLbpEX9A==", - "dependencies": { - "expected-node-version": "^1.0.0", - "semver": "^5.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ast-types": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", @@ -1176,14 +1063,6 @@ "astring": "bin/astring" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -1386,16 +1265,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "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==" - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -1454,14 +1323,6 @@ "node": ">= 6" } }, - "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/decode-named-character-reference": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", @@ -1541,11 +1402,6 @@ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "node_modules/email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==" - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1645,14 +1501,6 @@ "node": ">=6" } }, - "node_modules/expected-node-version": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/expected-node-version/-/expected-node-version-1.0.2.tgz", - "integrity": "sha512-OSaCdgF02srujDqJz1JWGpqk8Rq3uNYHLmtpBHJrZN3BvuMvzijJMqRVxZN1qLJtKVwjXhmOp+lfsRUqx8n54w==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1716,30 +1564,6 @@ "node": ">= 6" } }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1751,34 +1575,6 @@ "node": ">=8" } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", @@ -1894,27 +1690,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/gh-pages": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", - "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", - "dependencies": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify": "^4.3.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "^8.1.0", - "globby": "^6.1.0" - }, - "bin": { - "gh-pages": "bin/gh-pages.js", - "gh-pages-clean": "bin/gh-pages-clean.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/github-slugger": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", @@ -1950,60 +1725,11 @@ "node": ">= 6" } }, - "node_modules/glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", - "dependencies": { - "@types/glob": "*" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "glob": "*" - } - }, - "node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2309,30 +2035,11 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, - "node_modules/js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "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/jsep": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.6.tgz", @@ -2448,17 +2155,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -2469,11 +2165,6 @@ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" - }, "node_modules/lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", @@ -2509,28 +2200,6 @@ "sourcemap-codec": "^1.4.8" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/markdown-table": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz", @@ -3325,17 +2994,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/mkdirp-infer-owner": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", @@ -3368,16 +3026,6 @@ "node": ">=4" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, "node_modules/netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", @@ -3450,14 +3098,6 @@ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3482,39 +3122,6 @@ "node": ">= 0.8.0" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/pac-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", @@ -3585,14 +3192,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3617,44 +3216,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -3671,19 +3232,6 @@ "node": ">=12.0.0" } }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -3784,14 +3332,6 @@ } ] }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, "node_modules/raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", @@ -3840,1373 +3380,1187 @@ "node": ">=8.10.0" } }, - "node_modules/redoc-cli": { - "version": "0.13.16", - "resolved": "https://registry.npmjs.org/redoc-cli/-/redoc-cli-0.13.16.tgz", - "integrity": "sha512-/rqkqJV1r5xgnEFh6cSmv+sZuo/TGCXKRBKZwoC0rLny5N6WGx9YykJhe1jSM4XRbK3VDfrQtOJmPCaI1ut6gg==", - "hasShrinkwrap": true, - "dependencies": { - "chokidar": "^3.5.1", - "handlebars": "^4.7.7", - "isarray": "^2.0.5", - "mkdirp": "^1.0.4", - "mobx": "^6.3.2", - "node-libs-browser": "^2.2.1", - "react": "^17.0.1", - "react-dom": "^17.0.1", - "redoc": "2.0.0-rc.72", - "styled-components": "^5.3.0", - "yargs": "^17.3.1" - }, - "bin": { - "redoc-cli": "index.js" + "node_modules/remark": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.2.tgz", + "integrity": "sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "remark-parse": "^10.0.0", + "remark-stringify": "^10.0.0", + "unified": "^10.0.0" }, - "engines": { - "node": ">=12.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "node_modules/redoc-cli/node_modules/@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "node_modules/remark-cli": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-11.0.0.tgz", + "integrity": "sha512-8JEWwArXquRq1/In4Ftz7gSG9Scwb1ijT2/dEuBETW9omqhmMRxcfjZ3iKqrak3BnCJeZSXCdWEmPhFKC8+RUQ==", "dependencies": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/redoc-cli/node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" + "remark": "^14.0.0", + "unified-args": "^10.0.0" + }, + "bin": { + "remark": "cli.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "node_modules/remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", "dependencies": { - "@babel/types": "^7.12.13" + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "node_modules/remark-lint": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.1.1.tgz", + "integrity": "sha512-zhe6twuqgkx/9KgZyNyaO0cceA4jQuJcyzMOBC+JZiAzMN6mFUmcssWZyY30ko8ut9vQDMX/pyQnolGn+Fg/Tw==", "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@types/mdast": "^3.0.0", + "remark-message-control": "^7.0.0", + "unified": "^10.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "node_modules/remark-lint-blockquote-indentation": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.1.1.tgz", + "integrity": "sha512-u9cjedM6zcK8vRicis5n/xeOSDIC3FGBCKc3K9pqw+nNrOjY85FwxDQKZZ/kx7rmkdRZEhgyHak+wzPBllcxBQ==", "dependencies": { - "@babel/types": "^7.12.13" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "node_modules/remark-lint-checkbox-character-style": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.1.1.tgz", + "integrity": "sha512-KPSW3wfHfB8m9hzrtHiBHCTUIsOPX5nZR7VM+2pMjwqnhI6Mp94DKprkNo1ekNZALNeoZIDWZUSYxSiiwFfmVQ==", "dependencies": { - "@babel/types": "^7.13.12" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "node_modules/remark-lint-code-block-style": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.1.0.tgz", + "integrity": "sha512-Hv4YQ8ueLGpjItla4CkcOkcfGj+nlquqylDgCm1/xKnW+Ke2a4qVTMVJrP9Krp4FWmXgktJLDHjhRH+pzhDXLg==", "dependencies": { - "@babel/types": "^7.12.13" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "node_modules/redoc-cli/node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "node_modules/remark-lint-definition-case": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-3.1.1.tgz", + "integrity": "sha512-dirX0BSfbm1Ixx4Hv4xRQliEP1rw8dDitw2Om3XcO2QqF8bWrzF06/xeMlDNAaT77Cxqb9S7bODo/q+CYUxyWQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/redoc-cli/node_modules/@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", - "bin": { - "parser": "bin/babel-parser.js" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "node_modules/remark-lint-definition-spacing": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.1.1.tgz", + "integrity": "sha512-PR+cYvc0FMtFWjkaXePysW88r7Y7eIwbpUGPFDIWE48fiRiz8U3VIk05P3loQCpCkbmUeInAAYD8tIFPTg4Jlg==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "node_modules/remark-lint-emphasis-marker": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-3.1.1.tgz", + "integrity": "sha512-VduuT+KAr0vA78xBLJdIcenCQja4mAd81aNACfdz7BUPLphIQa84D5uzl+nZatSaCXLebCNp5jP/bzVUsBmRKw==", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "node_modules/remark-lint-fenced-code-flag": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.1.1.tgz", + "integrity": "sha512-FFVZmYsBccKIIEgOtgdZEpQdARtAat1LTLBydnIpyNIvcntzWwtrtlj9mtjL8ZoSRre8HtwmEnBFyOfmM/NWaA==", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "node_modules/remark-lint-fenced-code-marker": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.1.1.tgz", + "integrity": "sha512-x/t8sJWPvE46knKz6zW03j9VX5477srHUmRFbnXhZ3K8e37cYVUIvfbPhcPCAosSsOki9+dvGfZsWQiKuUNNfQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "node_modules/remark-lint-file-extension": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.1.1.tgz", + "integrity": "sha512-r6OMe27YZzr2NFjPMbBxgm8RZxigRwzeFSjapPlqcxk0Q0w/6sosJsceBNlGGlk00pltvv7NPqSexbXUjirrQQ==", "dependencies": { - "@emotion/memoize": "0.7.4" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "node_modules/redoc-cli/node_modules/@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "node_modules/redoc-cli/node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "node_modules/redoc-cli/node_modules/@exodus/schemasafe": { - "version": "1.0.0-rc.6", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.6.tgz", - "integrity": "sha512-dDnQizD94EdBwEj/fh3zPRa/HWCS9O5au2PuHhZBbuM3xWHxuaKzPBOEWze7Nn0xW68MIpZ7Xdyn1CoCpjKCuQ==" - }, - "node_modules/redoc-cli/node_modules/@redocly/ajv": { - "version": "8.6.4", - "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.6.4.tgz", - "integrity": "sha512-y9qNj0//tZtWB2jfXNK3BX18BSBp9zNR7KE7lMysVHwbZtY392OJCjm6Rb/h4UHH2r1AqjNEHFD6bRn+DqU9Mw==", + "node_modules/remark-lint-final-definition": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.1.1.tgz", + "integrity": "sha512-94hRV+EBIuLVFooiimsZwh5ZPEcTqjy5wr7LgqxoUUWy+srTanndaLoki7bxQJeIcWUnomZncsJAyL0Lo7toxw==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@redocly/openapi-core": { - "version": "1.0.0-beta.97", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.0.0-beta.97.tgz", - "integrity": "sha512-3WW9/6flosJuRtU3GI0Vw39OYFZqqXMDCp5TLa3EjXOb7Nm6AZTWRb3Y+I/+UdNJ/NTszVJkQczoa1t476ekiQ==", + "node_modules/remark-lint-final-newline": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.1.1.tgz", + "integrity": "sha512-cgKYaI7ujUse/kV4KajLv2j1kmi1CxpAu+w7wIU0/Faihhb3sZAf4a5ACf2Wu8NoTSIr1Q//3hDysG507PIoDg==", "dependencies": { - "@redocly/ajv": "^8.6.4", - "@types/node": "^14.11.8", - "colorette": "^1.2.0", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "lodash.isequal": "^4.5.0", - "minimatch": "^5.0.1", - "node-fetch": "^2.6.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" }, - "engines": { - "node": ">=12.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@redocly/openapi-core/node_modules/@types/node": { - "version": "14.18.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.17.tgz", - "integrity": "sha512-oajWz4kOajqpKJMPgnCvBajPq8QAvl2xIWoFjlAJPKGu6n7pjov5SxGE45a+0RxHDoo4ycOMoZw1SCOWtDERbw==" - }, - "node_modules/redoc-cli/node_modules/@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", - "peer": true, + "node_modules/remark-lint-hard-break-spaces": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.1.1.tgz", + "integrity": "sha512-UfwFvESpX32qwyHJeluuUuRPWmxJDTkmjnWv2r49G9fC4Jrzm4crdJMs3sWsrGiQ3mSex6bgp/8rqDgtBng2IA==", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "peer": true, + "node_modules/remark-lint-heading-increment": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-3.1.1.tgz", + "integrity": "sha512-DtiMwZNAE/iAZWuZGjTXxYjNDQ375r59C99aVeVp1nKaovIufKuHWAm9U/9FAGBJNgBx6Ovfdej4YwIxd0yAPw==", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "peer": true - }, - "node_modules/redoc-cli/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/redoc-cli/node_modules/@types/node": { - "version": "15.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", - "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "peer": true, + "node_modules/remark-lint-heading-style": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.1.1.tgz", + "integrity": "sha512-Qm7ZAF+s46ns0Wo5TlHGIn/PPMMynytn8SSLEdMIo6Uo/+8PAcmQ3zU1pj57KYxfyDoN5iQPgPIwPYMLYQ2TSQ==", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@types/mdast": "^3.0.0", + "mdast-util-heading-style": "^2.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "peer": true, + "node_modules/remark-lint-link-title-style": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-3.1.1.tgz", + "integrity": "sha512-JWWiuUFy/N2iwQ3eWIxFy6olX8D7xCFw8LoM0vZI2CHTZJrmDMaWwnl8jziP+HHHheFX3wkVqsoaYod536ArRw==", "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "peer": true, + "node_modules/remark-lint-list-item-bullet-indent": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.1.1.tgz", + "integrity": "sha512-NFvXVj1Nm12+Ma48NOjZCGb/D0IhmUcxyrTCpPp+UNJhEWrmFxM8nSyIiZgXadgXErnuv+xm2Atw7TAcZ9a1Cg==", "dependencies": { - "@xtuc/long": "4.2.2" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "peer": true, + "node_modules/remark-lint-list-item-content-indent": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-3.1.1.tgz", + "integrity": "sha512-gcZhAXLd1onkutTEqQTybyANjdxvlOlu0y/AU4H3f6L99UGC85ymRhEeu5vGSkvsKKPR1FrMTEH6G2nNgtavgg==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "peer": true, + "node_modules/remark-lint-list-item-indent": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.1.1.tgz", + "integrity": "sha512-OSTG64e52v8XBmmeT0lefpiAfCMYHJxMMUrMnhTjLVyWAbEO0vqqR5bLvfLwzK+P4nY2D/8XKku0hw35dM86Rw==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@types/mdast": "^3.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "peer": true, + "node_modules/remark-lint-list-item-spacing": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-4.1.1.tgz", + "integrity": "sha512-MqXmahPgYrvfA7SPqmcAC6fI40jIgXG33EeE/MhFvMLWh04k+fqGf2O2aH1KT664MlwM4oETbTI4xj3/KCIHZA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "peer": true, + "node_modules/remark-lint-maximum-heading-length": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-3.1.1.tgz", + "integrity": "sha512-hTOvRDnULpu0S+k51lovT28TLBgtw8XR0qq+mECSsoyuT4C38UBjQRic5OPo68AZMH0ad/93uj6yvfFtH0K8Lg==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "peer": true, + "node_modules/remark-lint-maximum-line-length": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.1.2.tgz", + "integrity": "sha512-KwddpVmNifTHNXwTQQgVufuUvv0hhu9kJVvmpNdEvfEc7tc3wBkaavyi3kKsUB8WwMhGtZuXVWy6OdPC1axzhw==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/redoc-cli/node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "peer": true, - "bin": { - "acorn": "bin/acorn" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/redoc-cli/node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peer": true, - "peerDependencies": { - "acorn": "^8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, + "node_modules/remark-lint-no-blockquote-without-marker": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.1.1.tgz", + "integrity": "sha512-7jL7eKS25kKRhQ7SKKB5eRfNleDMWKWAmZ5Y/votJdDoM+6qsopLLumPWaSzP0onyV3dyHRhPfBtqelt3hvcyA==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/redoc-cli/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/redoc-cli/node_modules/ajv/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/remark-lint-no-consecutive-blank-lines": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.1.2.tgz", + "integrity": "sha512-wRsR3kFgHaZ4mO3KASU43oXGLGezNZ64yNs1ChPUacKh0Bm7cwGnxN9GHGAbOXspwrYrN2eCDxzCbdPEZi2qKw==", "dependencies": { - "color-convert": "^1.9.0" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/remark-lint-no-duplicate-definitions": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.1.1.tgz", + "integrity": "sha512-9p+nBz8VvV+t4g/ALNLVN8naV+ffAzC4ADyg9QivzmKwLjyF93Avt4HYNlb2GZ+aoXRQSVG1wjjWFeDC9c7Tdg==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">= 8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/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/redoc-cli/node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "node_modules/remark-lint-no-duplicate-headings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-3.1.1.tgz", + "integrity": "sha512-gSO/BngGkxF35Fsctzt3YMwGEZ8F7f71zx7h0Y97DylyL6WXVuWP4saCmQTlbB4FpD0UXEnRROJ6fBFDvJlzOA==", "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/redoc-cli/node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "node_modules/remark-lint-no-emphasis-as-heading": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-3.1.1.tgz", + "integrity": "sha512-F45yuLsYVP4r6OjVtePKk7Aymnf3rBLHXYjnSJggEaYn0j+72xOBLrqmj6ii5YGfDsBwG2pDNTBx4vm3xM7P0Q==", "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "node_modules/redoc-cli/node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "node_modules/remark-lint-no-file-name-articles": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.1.1.tgz", + "integrity": "sha512-7fiHKQUGvP4WOsieZ1dxm8WQWWjXjPj0Uix6pk2dSTJqxvaosjKH1AV0J/eVvliat0BGH8Cz4SUbuz5vG6YbdQ==", "dependencies": { - "inherits": "2.0.1" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/babel-plugin-styled-components": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz", - "integrity": "sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==", + "node_modules/remark-lint-no-file-name-consecutive-dashes": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.1.1.tgz", + "integrity": "sha512-tM4IpURGuresyeIBsXT5jsY3lZakgO6IO59ixcFt015bFjTOW54MrBvdJxA60QHhf5DAyHzD8wGeULPSs7ZQfg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" }, - "peerDependencies": { - "styled-components": ">= 2" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" - }, - "node_modules/redoc-cli/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/redoc-cli/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/redoc-cli/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/redoc-cli/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "node_modules/redoc-cli/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/remark-lint-no-file-name-irregular-characters": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-2.1.1.tgz", + "integrity": "sha512-rVeCv1XRdLtp/rxLaiFKElaIHuIlokypV/c2aCG3VVYcQ4+ZmJxq018kEsolR2+Dv9m3vKp8Fy1482US4g4WKA==", "dependencies": { - "balanced-match": "^1.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/remark-lint-no-file-name-mixed-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-2.1.1.tgz", + "integrity": "sha512-mJU3hYzyXNo8NkoSafPcsgr+Gema+vDCzNWlLw05UdFXJK/cVy+6DVsbrEFjrz8L+WF7uQmUHBtTvd91SqoItg==", "dependencies": { - "fill-range": "^7.0.1" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/redoc-cli/node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/remark-lint-no-file-name-outer-dashes": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.1.1.tgz", + "integrity": "sha512-2kRcVNzZb0zS3jE+Iaa6MEpplhqXSdsHBILS+BxJ4cDGAAIdeipY8hKaDLdZi+34wvrfnDxNgvNLcHpgqO+OZA==", "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "node_modules/remark-lint-no-heading-content-indent": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.1.1.tgz", + "integrity": "sha512-W4zF7MA72IDC5JB0qzciwsnioL5XlnoE0r1F7sDS0I5CJfQtHYOLlxb3UAIlgRCkBokPWCp0E4o1fsY/gQUKVg==", "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-heading-style": "^2.0.0", + "pluralize": "^8.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "node_modules/remark-lint-no-heading-punctuation": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-3.1.1.tgz", + "integrity": "sha512-ZexHx4rmsjKVF1/Fvdig0yOgpWl0wFa43+sqg880HT3PW9KmEczjSRkwlMaTlVgDzC0paNn2FXfQMuEQW4YDLg==", "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "node_modules/remark-lint-no-html": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-html/-/remark-lint-no-html-3.1.1.tgz", + "integrity": "sha512-hTaw6Ul3iAXvesWzvl+ev1tVf1SNm7hG3l7A2pj8r+1MlklKDFeaMWsxKnDh+8Rh6pj+mRnwzsbwtQxKiKs9Cw==", "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "node_modules/remark-lint-no-inline-padding": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.1.1.tgz", + "integrity": "sha512-++IMm6ohOPKNOrybqjP9eiclEtVX/Rd2HpF2UD9icrC1X5nvrI6tlfN55tePaFvWAB7pe6MW4LzNEMnWse61Lw==", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/remark-lint-no-literal-urls": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.1.1.tgz", + "integrity": "sha512-tZZ4gtZMA//ZAf7GJTE8S9yjzqXUfUTlR/lvU7ffc7NeSurqCBwAtHqeXVCHiD39JnlHVSW2MLYhvHp53lBGvA==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">= 6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "node_modules/remark-lint-no-multiple-toplevel-headings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.1.1.tgz", + "integrity": "sha512-bM//SIBvIkoGUpA8hR5QibJ+7C2R50PTIRrc4te93YNRG+ie8bJzjwuO9jIMedoDfJB6/+7EqO9FYBivjBZ3MA==", "dependencies": { - "pako": "~1.0.5" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "peer": true, + "node_modules/remark-lint-no-shell-dollars": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.1.1.tgz", + "integrity": "sha512-Q3Ad1TaOPxbYog5+Of/quPG3Fy+dMKiHjT8KsU7NDiHG6YJOnAJ3f3w+y13CIlNIaKc/MrisgcthhrZ7NsgXfA==", "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "node_modules/remark-lint-no-shortcut-reference-image": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.1.1.tgz", + "integrity": "sha512-m8tH+loDagd1JUns/T4eyulVXgVvE+ZSs7owRUOmP+dgsKJuO5sl1AdN9eyKDVMEvxHF3Pm5WqE62QIRNM48mA==", "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/redoc-cli/node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "node_modules/redoc-cli/node_modules/buffer/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/redoc-cli/node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "node_modules/redoc-cli/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/redoc-cli/node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "node_modules/redoc-cli/node_modules/caniuse-lite": { - "version": "1.0.30001303", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz", - "integrity": "sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ==", - "peer": true, + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/remark-lint-no-shortcut-reference-link": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.1.1.tgz", + "integrity": "sha512-oDJ92/jXQ842HgrBGgZdP7FA+N2jBMCBU2+jRElkS+OWVut0UaDILtNavNy/e85B3SLPj3RoXKF96M4vfJ7B2A==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "node_modules/remark-lint-no-table-indentation": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.1.1.tgz", + "integrity": "sha512-eklvBxUSrkVbJxeokepOvFZ3n2V6zaJERIiOowR+y/Bz4dRHDMij1Ojg55AMO9yUMvxWPV3JPOeThliAcPmrMg==", "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "engines": { - "node": ">= 8.10.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" }, - "optionalDependencies": { - "fsevents": "~2.3.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/redoc-cli/node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/redoc-cli/node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "node_modules/redoc-cli/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/remark-lint-no-undefined-references": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.1.1.tgz", + "integrity": "sha512-J20rKfTGflLiTI3T5JlLZSmINk6aDGmZi1y70lpU69LDfAyHAKgDK6sSW9XDeFmCPPdm8Ybxe5Gf2a70k+GcVQ==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/redoc-cli/node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", - "engines": { - "node": ">=6" + "@types/mdast": "^3.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile-location": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/remark-lint-no-unused-definitions": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.1.1.tgz", + "integrity": "sha512-/GtyBukhAxi5MEX/g/m+FzDEflSbTe2/cpe2H+tJZyDmiLhjGXRdwWnPRDp+mB9g1iIZgVRCk7T4v90RbQX/mw==", "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/redoc-cli/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/redoc-cli/node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "node_modules/redoc-cli/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==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "node_modules/redoc-cli/node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "node_modules/redoc-cli/node_modules/core-js": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz", - "integrity": "sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==", - "hasInstallScript": true, - "peer": true, + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/redoc-cli/node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "node_modules/remark-lint-ordered-list-marker-style": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.1.1.tgz", + "integrity": "sha512-IWcWaJoaSb4yoSOuvDbj9B2uXp9kSj58DqtrMKo8MoRShmbj1onVfulTxoTLeLtI11NvW+mj3jPSpqjMjls+5Q==", "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/redoc-cli/node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/redoc-cli/node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/redoc-cli/node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/redoc-cli/node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": "*" - } - }, - "node_modules/redoc-cli/node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=", - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "node_modules/remark-lint-ordered-list-marker-value": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-3.1.1.tgz", + "integrity": "sha512-+bQZbo+v/A8CuLrO71gobJuKR4/sfnPgWyEggSa+zq+LXPK1HiMDjap0Wr07uYgcUXsXIPh+HD/5J5by6JL+vg==", "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/remark-lint-rule-style": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.1.1.tgz", + "integrity": "sha512-+oZe0ph4DWHGwPkQ/FpqiGp4WULTXB1edftnnNbizYT+Wr+/ux7GNTx78oXH/PHwlnOtVIExMc4W/vDXrUj/DQ==", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/decko": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz", - "integrity": "sha1-/UPHNelnuAEzBohKVvvmZZlraBc=" - }, - "node_modules/redoc-cli/node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "node_modules/remark-lint-strong-marker": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.1.1.tgz", + "integrity": "sha512-tX9Os2C48Hh8P8CouY4dcnAhGnR3trL+NCDqIvJvFDR9Rvm9yfNQaY2N4ZHWVY0iUicq9DpqEiJTgUsT8AGv/w==", "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "node_modules/remark-lint-table-cell-padding": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.1.2.tgz", + "integrity": "sha512-cx5BXjHtpACa7Z51Vuqzy9BI4Z8Hnxz7vklhhrubkoB7mbctP/mR+Nh4B8eE5VtgFYJNHFwIltl96PuoctFCeQ==", "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/redoc-cli/node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/redoc-cli/node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/dompurify": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.5.tgz", - "integrity": "sha512-kD+f8qEaa42+mjdOpKeztu9Mfx5bv9gVLO6K9jRx4uGvh6Wv06Srn4jr1wPNY2OOUGGSKHNFN+A8MA3v0E0QAQ==" - }, - "node_modules/redoc-cli/node_modules/electron-to-chromium": { - "version": "1.4.54", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz", - "integrity": "sha512-jRAoneRdSxnpRHO0ANpnEUtQHXxlgfVjrLOnQSisw1ryjXJXvS0pJaR/v2B7S++/tRjgEDp4Sjn5nmgb6uTySw==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/remark-lint-table-pipe-alignment": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-3.1.1.tgz", + "integrity": "sha512-WOHv2yL4ZwXHM06MIyQNnGFYKz9m2k/GFIA/6hpArF8Ph/3v8CF0J/Hb3Yyfg39e5nODw3D2G3okCO+xgyGQGA==", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/redoc-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/redoc-cli/node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "peer": true, + "node_modules/remark-lint-table-pipes": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.1.1.tgz", + "integrity": "sha512-mJnB2FpjJTE4s9kE1JX8gcCjCFvtGPjzXUiQy0sbPHn2YM9EWG7kvFWYoqWK4w569CEQJyxZraEPltmhDjQTjg==", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "engines": { - "node": ">=10.13.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" - }, - "node_modules/redoc-cli/node_modules/escalade": { + "node_modules/remark-lint-unordered-list-marker-style": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/redoc-cli/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.1.1.tgz", + "integrity": "sha512-JwH8oIDi9f5Z8cTQLimhJ/fkbPwI3OpNSifjYyObNNuc4PG4/NUoe5ZuD10uPmPYHZW+713RZ8S5ucVCkI8dDA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "peer": true, + "node_modules/remark-message-control": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.1.1.tgz", + "integrity": "sha512-xKRWl1NTBOKed0oEtCd8BUfH5m4s8WXxFFSoo7uUwx6GW/qdCy4zov5LfPyw7emantDmhfWn5PdIZgcbVcWMDQ==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@types/mdast": "^3.0.0", + "mdast-comment-marker": "^2.0.0", + "unified": "^10.0.0", + "unified-message-control": "^4.0.0", + "vfile": "^5.0.0" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "peer": true, + "node_modules/remark-parse": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", + "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", "dependencies": { - "estraverse": "^5.2.0" + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" }, - "engines": { - "node": ">=4.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/redoc-cli/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "peer": true, - "engines": { - "node": ">=4.0" + "node_modules/remark-preset-lint-consistent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/remark-preset-lint-consistent/-/remark-preset-lint-consistent-5.1.1.tgz", + "integrity": "sha512-DZQfomiVi/1x7NRByWrOiIC+olEGa1PpyykKrowvYp5qr/Seq60FqU7OjBJxtcOLzgnQcu9Y2JXdHxFi4AAPXQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "remark-lint": "^9.0.0", + "remark-lint-blockquote-indentation": "^3.0.0", + "remark-lint-checkbox-character-style": "^4.0.0", + "remark-lint-code-block-style": "^3.0.0", + "remark-lint-emphasis-marker": "^3.0.0", + "remark-lint-fenced-code-marker": "^3.0.0", + "remark-lint-heading-style": "^3.0.0", + "remark-lint-link-title-style": "^3.0.0", + "remark-lint-list-item-content-indent": "^3.0.0", + "remark-lint-ordered-list-marker-style": "^3.0.0", + "remark-lint-rule-style": "^3.0.0", + "remark-lint-strong-marker": "^3.0.0", + "remark-lint-table-cell-padding": "^4.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/redoc-cli/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" + "node_modules/remark-preset-lint-markdown-style-guide": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-5.1.2.tgz", + "integrity": "sha512-MIAhnz0wDOq/MqLucSaAPquKGFE2I5SxqRjgWT+ZGK7TmqTxrro53e11/Pc19xPX4evmzI5CZdvaRnIoxP3ysQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "remark-lint": "^9.0.0", + "remark-lint-blockquote-indentation": "^3.0.0", + "remark-lint-code-block-style": "^3.0.0", + "remark-lint-definition-case": "^3.0.0", + "remark-lint-definition-spacing": "^3.0.0", + "remark-lint-emphasis-marker": "^3.0.0", + "remark-lint-fenced-code-flag": "^3.0.0", + "remark-lint-fenced-code-marker": "^3.0.0", + "remark-lint-file-extension": "^2.0.0", + "remark-lint-final-definition": "^3.0.0", + "remark-lint-hard-break-spaces": "^3.0.0", + "remark-lint-heading-increment": "^3.0.0", + "remark-lint-heading-style": "^3.0.0", + "remark-lint-link-title-style": "^3.0.0", + "remark-lint-list-item-content-indent": "^3.0.0", + "remark-lint-list-item-indent": "^3.0.0", + "remark-lint-list-item-spacing": "^4.0.0", + "remark-lint-maximum-heading-length": "^3.0.0", + "remark-lint-maximum-line-length": "^3.0.0", + "remark-lint-no-blockquote-without-marker": "^5.0.0", + "remark-lint-no-consecutive-blank-lines": "^4.0.0", + "remark-lint-no-duplicate-headings": "^3.0.0", + "remark-lint-no-emphasis-as-heading": "^3.0.0", + "remark-lint-no-file-name-articles": "^2.0.0", + "remark-lint-no-file-name-consecutive-dashes": "^2.0.0", + "remark-lint-no-file-name-irregular-characters": "^2.0.0", + "remark-lint-no-file-name-mixed-case": "^2.0.0", + "remark-lint-no-file-name-outer-dashes": "^2.0.0", + "remark-lint-no-heading-punctuation": "^3.0.0", + "remark-lint-no-inline-padding": "^4.0.0", + "remark-lint-no-literal-urls": "^3.0.0", + "remark-lint-no-multiple-toplevel-headings": "^3.0.0", + "remark-lint-no-shell-dollars": "^3.0.0", + "remark-lint-no-shortcut-reference-image": "^3.0.0", + "remark-lint-no-shortcut-reference-link": "^3.0.0", + "remark-lint-no-table-indentation": "^4.0.0", + "remark-lint-ordered-list-marker-style": "^3.0.0", + "remark-lint-ordered-list-marker-value": "^3.0.0", + "remark-lint-rule-style": "^3.0.0", + "remark-lint-strong-marker": "^3.0.0", + "remark-lint-table-cell-padding": "^4.0.0", + "remark-lint-table-pipe-alignment": "^3.0.0", + "remark-lint-table-pipes": "^4.0.0", + "remark-lint-unordered-list-marker-style": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/remark-preset-lint-recommended": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.1.2.tgz", + "integrity": "sha512-x9kWufNY8PNAhY4fsl+KD3atgQdo4imP3GDAQYbQ6ylWVyX13suPRLkqnupW0ODRynfUg8ZRt8pVX0wMHwgPAg==", "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "@types/mdast": "^3.0.0", + "remark-lint": "^9.0.0", + "remark-lint-final-newline": "^2.0.0", + "remark-lint-hard-break-spaces": "^3.0.0", + "remark-lint-list-item-bullet-indent": "^4.0.0", + "remark-lint-list-item-indent": "^3.0.0", + "remark-lint-no-blockquote-without-marker": "^5.0.0", + "remark-lint-no-duplicate-definitions": "^3.0.0", + "remark-lint-no-heading-content-indent": "^4.0.0", + "remark-lint-no-inline-padding": "^4.0.0", + "remark-lint-no-literal-urls": "^3.0.0", + "remark-lint-no-shortcut-reference-image": "^3.0.0", + "remark-lint-no-shortcut-reference-link": "^3.0.0", + "remark-lint-no-undefined-references": "^4.0.0", + "remark-lint-no-unused-definitions": "^3.0.0", + "remark-lint-ordered-list-marker-style": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/redoc-cli/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "node_modules/remark-stringify": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", + "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/redoc-cli/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/remark-validate-links": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-12.0.0.tgz", + "integrity": "sha512-mBNfsGBPO3A4CYnHDd3fpnr+A2Ep71moc0UlxC6lhZSJslMAU3UZypKK3DLlxUPoLy9TlJaEVEnfy6qpGQU7sg==", "dependencies": { - "to-regex-range": "^5.0.1" + "@types/mdast": "^3.0.0", + "github-slugger": "^1.0.0", + "hosted-git-info": "^5.0.0", + "mdast-util-to-string": "^3.0.0", + "propose": "0.0.5", + "to-vfile": "^7.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "unified-engine": "^10.0.1", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/redoc-cli/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=0.10.0" } }, - "node_modules/redoc-cli/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/reserved": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/reserved/-/reserved-0.1.2.tgz", + "integrity": "sha512-/qO54MWj5L8WCBP9/UNe2iefJc+L9yETbH32xO/ft/EYPOTCR5k+azvDUgdCOKwZH8hXwPd0b8XBL78Nn2U69g==", "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=0.8" } }, - "node_modules/redoc-cli/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dependencies": { - "is-glob": "^4.0.1" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">= 6" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/redoc-cli/node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { - "node": ">=4" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/redoc-cli/node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, + "node_modules/rollup": { + "version": "2.77.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz", + "integrity": "sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==", + "peer": true, "bin": { - "handlebars": "bin/handlebars" + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=0.4.7" + "node": ">=10.0.0" }, "optionalDependencies": { - "uglify-js": "^3.1.4" + "fsevents": "~2.3.2" } }, - "node_modules/redoc-cli/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "node_modules/redoc-cli/node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "mri": "^1.1.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/redoc-cli/node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/redoc-cli/node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/redoc-cli/node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/redoc-cli/node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" + "node": ">=6" } }, - "node_modules/redoc-cli/node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/redoc-cli/node_modules/http2-client": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", - "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==" - }, - "node_modules/redoc-cli/node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "node_modules/redoc-cli/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -5222,8945 +4576,3277 @@ } ] }, - "node_modules/redoc-cli/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/redoc-cli/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/safe-stable-stringify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", + "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" }, - "node_modules/redoc-cli/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/redoc-cli/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/redoc-cli/node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/simple-eval": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-eval/-/simple-eval-1.0.0.tgz", + "integrity": "sha512-kpKJR+bqTscgC0xuAl2xHN6bB12lHjC2DCUfqjAx19bQyO3R2EVLOurm3H9AUltv/uFVcSCVNc6faegR+8NYLw==", "dependencies": { - "is-extglob": "^2.1.1" + "jsep": "^1.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/redoc-cli/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "engines": { - "node": ">=0.12.0" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/redoc-cli/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/redoc-cli/node_modules/jest-worker": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", - "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", - "peer": true, + "node_modules/socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "node_modules/redoc-cli/node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, + "node_modules/socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/redoc-cli/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "peer": true, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "has-flag": "^4.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">=10" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/redoc-cli/node_modules/js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socks/node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, - "node_modules/redoc-cli/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, - "node_modules/redoc-cli/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==", + "node_modules/stacktracey": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", + "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "as-table": "^1.0.36", + "get-source": "^2.0.12" } }, - "node_modules/redoc-cli/node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/redoc-cli/node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "peer": true + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, - "node_modules/redoc-cli/node_modules/json-pointer": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "foreach": "^2.0.4" - } - }, - "node_modules/redoc-cli/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/redoc-cli/node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "peer": true, + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=6.11.5" + "node": ">=8" } }, - "node_modules/redoc-cli/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/redoc-cli/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/redoc-cli/node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "ansi-regex": "^5.0.1" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/redoc-cli/node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, - "node_modules/redoc-cli/node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha1-GA8fnr74sOY45BZq1S24eb6y/8U=" - }, - "node_modules/redoc-cli/node_modules/marked": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.15.tgz", - "integrity": "sha512-esX5lPdTfG4p8LDkv+obbRCyOKzB+820ZZyMOXJZygZBHrH9b3xXR64X4kT3sPe9Nx8qQXbmcz6kFSMt4Nfk6Q==", - "bin": { - "marked": "bin/marked.js" + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 12" + "node": ">=8" } }, - "node_modules/redoc-cli/node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/redoc-cli/node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "peer": true + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "node_modules/redoc-cli/node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "is-number": "^7.0.0" }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/redoc-cli/node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/redoc-cli/node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=8.0" } }, - "node_modules/redoc-cli/node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "peer": true, + "node_modules/to-vfile": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.3.tgz", + "integrity": "sha512-QO0A9aE6Z/YkmQadJ0syxpmNXtcQiu0qAtCKYKD5cS3EfgfFTAXfgLX6AOaBrSfWSek5nfsMf3gBZ9KGVFcLuw==", "dependencies": { - "mime-db": "1.51.0" + "is-buffer": "^2.0.0", + "vfile": "^5.1.0" }, - "engines": { - "node": ">= 0.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/minimalistic-assert": { + "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } }, - "node_modules/redoc-cli/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/redoc-cli/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/redoc-cli/node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, - "node_modules/redoc-cli/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/redoc-cli/node_modules/mobx": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.3.2.tgz", - "integrity": "sha512-xGPM9dIE1qkK9Nrhevp0gzpsmELKU4MFUJRORW/jqxVFIHHWIoQrjDjL8vkwoJYY3C2CeVJqgvl38hgKTalTWg==", + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mobx" + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/mobx-react": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-7.2.1.tgz", - "integrity": "sha512-LZS99KFLn75VWDXPdRJhILzVQ7qLcRjQbzkK+wVs0Qg4kWw5hOI2USp7tmu+9zP9KYsVBmKyx2k/8cTTBfsymw==", + "node_modules/unified-args": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-10.0.0.tgz", + "integrity": "sha512-PqsqxwkXpGSLiMkbjNnKU33Ffm6gso6rAvz1TlBGzMBx3gpx7ewIhViBX8HEWmy0v7pebA5PM6RkRWWaYmtfYw==", "dependencies": { - "mobx-react-lite": "^3.2.0" + "@types/text-table": "^0.2.0", + "camelcase": "^7.0.0", + "chalk": "^5.0.0", + "chokidar": "^3.0.0", + "fault": "^2.0.0", + "json5": "^2.0.0", + "minimist": "^1.0.0", + "text-table": "^0.2.0", + "unified-engine": "^10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mobx" - }, - "peerDependencies": { - "mobx": "^6.1.0", - "react": "^16.8.0 || ^17" + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-args/node_modules/chalk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", + "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/redoc-cli/node_modules/mobx-react-lite": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.3.tgz", - "integrity": "sha512-7exWp1FV0M9dP08H9PIeHlJqDw4IdkQVRMfLYaZFMmlbzSS6ZU6p/kx392KN+rVf81hH3IQYewvRGQ70oiwmbw==", + "node_modules/unified-engine": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-10.0.1.tgz", + "integrity": "sha512-lsj7VC8kNWhK87rGBhidklk4llgrEdJoOZHoQFbTZQ/fA22JqowUPM10bEf05eSZOR6UnUSrZ/mPWHrQsHGm7g==", + "dependencies": { + "@types/concat-stream": "^2.0.0", + "@types/debug": "^4.0.0", + "@types/is-empty": "^1.0.0", + "@types/node": "^18.0.0", + "@types/unist": "^2.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.0.0", + "fault": "^2.0.0", + "glob": "^8.0.0", + "ignore": "^5.0.0", + "is-buffer": "^2.0.0", + "is-empty": "^1.0.0", + "is-plain-obj": "^4.0.0", + "load-plugin": "^5.0.0", + "parse-json": "^6.0.0", + "to-vfile": "^7.0.0", + "trough": "^2.0.0", + "unist-util-inspect": "^7.0.0", + "vfile-message": "^3.0.0", + "vfile-reporter": "^7.0.0", + "vfile-statistics": "^2.0.0", + "yaml": "^2.0.0" + }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mobx" - }, - "peerDependencies": { - "mobx": "^6.1.0", - "react": "^16.8.0 || ^17" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/unified-engine/node_modules/@types/node": { + "version": "18.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz", + "integrity": "sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg==" }, - "node_modules/redoc-cli/node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "node_modules/unified-engine/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/redoc-cli/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/unified-engine/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "whatwg-url": "^5.0.0" + "ms": "2.1.2" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=6.0" }, "peerDependenciesMeta": { - "encoding": { + "supports-color": { "optional": true } } }, - "node_modules/redoc-cli/node_modules/node-fetch-h2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", - "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", + "node_modules/unified-engine/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "dependencies": { - "http2-client": "^1.2.5" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/redoc-cli/node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/redoc-cli/node_modules/node-readfiles": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", - "integrity": "sha1-271K8SE04uY1wkXvk//Pb2BnOl0=", + "node_modules/unified-engine/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "dependencies": { - "es6-promise": "^3.2.1" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/redoc-cli/node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "peer": true + "node_modules/unified-engine/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/redoc-cli/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" + "node_modules/unified-lint-rule": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.1.1.tgz", + "integrity": "sha512-vsLHyLZFstqtGse2gvrGwasOmH8M2y+r2kQMoDSWzSqUkQx2MjHjvZuGSv5FUaiv4RQO1bHRajy7lSGp7XWq5A==", + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/oas-kit-common": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", - "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", + "node_modules/unified-message-control": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz", + "integrity": "sha512-1b92N+VkPHftOsvXNOtkJm4wHlr+UDmTBF2dUzepn40oy9NxanJ9xS1RwUBTjXJwqr2K0kMbEyv1Krdsho7+Iw==", "dependencies": { - "fast-safe-stringify": "^2.0.7" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit": "^3.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/oas-linter": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", - "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", + "node_modules/unified-message-control/node_modules/unist-util-visit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", + "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", "dependencies": { - "@exodus/schemasafe": "^1.0.0-rc.2", - "should": "^13.2.1", - "yaml": "^1.10.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" }, "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/oas-resolver": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", - "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", + "node_modules/unified-message-control/node_modules/unist-util-visit-parents": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", + "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", "dependencies": { - "node-fetch-h2": "^2.3.0", - "oas-kit-common": "^1.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "bin": { - "resolve": "resolve.js" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/oas-schema-walker": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", - "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", + "node_modules/unist-util-generated": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", + "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==", "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/oas-validator": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", - "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", + "node_modules/unist-util-inspect": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.1.tgz", + "integrity": "sha512-gEPeSrsYXus8012VJ00p9uZC8D0iogtLLiHlBgvS61hU22KNKduQhMKezJm83viHlLf3TYS2y9SDEFglWPDMKw==", "dependencies": { - "call-me-maybe": "^1.0.1", - "oas-kit-common": "^1.0.8", - "oas-linter": "^3.2.2", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "reftools": "^1.1.9", - "should": "^13.2.1", - "yaml": "^1.10.0" + "@types/unist": "^2.0.0" }, "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/redoc-cli/node_modules/openapi-sampler": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.3.0.tgz", - "integrity": "sha512-2QfjK1oM9Sv0q82Ae1RrUe3yfFmAyjF548+6eAeb+h/cL1Uj51TW4UezraBEvwEdzoBgfo4AaTLVFGTKj+yYDw==", - "dependencies": { - "@types/json-schema": "^7.0.7", - "json-pointer": "0.6.2" + "node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "node_modules/redoc-cli/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/redoc-cli/node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "node_modules/unist-util-position": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "node_modules/redoc-cli/node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "@types/unist": "^2.0.0" }, - "engines": { - "node": ">=0.12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/perfect-scrollbar": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", - "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" - }, - "node_modules/redoc-cli/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "engines": { - "node": ">=8.6" + "node_modules/unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/redoc-cli/node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "engines": { - "node": ">=4" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/polished": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.4.tgz", - "integrity": "sha512-Nq5Mbza+Auo7N3sQb1QMFaQiDO+4UexWuSGR7Cjb4Sw11SZIJcrrFtiZ+L0jT9MBsUsxDboHVASbCLbE1rnECg==", + "node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", "dependencies": { - "@babel/runtime": "^7.16.7" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "node_modules/redoc-cli/node_modules/prismjs": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", - "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { - "node": ">=6" + "node": ">= 4.0.0" } }, - "node_modules/redoc-cli/node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/redoc-cli/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/redoc-cli/node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "node": ">= 0.8" } }, - "node_modules/redoc-cli/node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/redoc-cli/node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "punycode": "^2.1.0" } }, - "node_modules/redoc-cli/node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" }, - "node_modules/redoc-cli/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/redoc-cli/node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", "engines": { - "node": ">=0.4.x" + "node": ">= 4" } }, - "node_modules/redoc-cli/node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, "engines": { - "node": ">=0.4.x" + "node": ">=8" } }, - "node_modules/redoc-cli/node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dependencies": { - "safe-buffer": "^5.1.0" + "builtins": "^1.0.3" } }, - "node_modules/redoc-cli/node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "node_modules/validate-npm-package-name/node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + }, + "node_modules/vfile": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", + "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "node_modules/vfile-location": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", + "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "node_modules/vfile-message": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", + "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" }, - "peerDependencies": { - "react": "17.0.2" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "peer": true - }, - "node_modules/redoc-cli/node_modules/react-tabs": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.3.tgz", - "integrity": "sha512-jx325RhRVnS9DdFbeF511z0T0WEqEoMl1uCE3LoZ6VaZZm7ytatxbum0B8bCTmaiV0KsU+4TtLGTGevCic7SWg==", + "node_modules/vfile-reporter": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.4.tgz", + "integrity": "sha512-4cWalUnLrEnbeUQ+hARG5YZtaHieVK3Jp4iG5HslttkVl+MHunSGNAIrODOTLbtjWsNZJRMCkL66AhvZAYuJ9A==", "dependencies": { - "clsx": "^1.1.0", - "prop-types": "^15.5.0" + "@types/supports-color": "^8.0.0", + "string-width": "^5.0.0", + "supports-color": "^9.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-sort": "^3.0.0", + "vfile-statistics": "^2.0.0" }, - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node_modules/vfile-reporter/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/redoc-cli/node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "node_modules/vfile-reporter/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/redoc-cli/node_modules/readable-stream/node_modules/safe-buffer": { + "node_modules/vfile-reporter/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/redoc-cli/node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "safe-buffer": "~5.1.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/redoc-cli/node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "node_modules/vfile-reporter/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dependencies": { - "picomatch": "^2.2.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/redoc-cli/node_modules/redoc": { - "version": "2.0.0-rc.72", - "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.0.0-rc.72.tgz", - "integrity": "sha512-IX/WvVh4N3zwo4sAjnQFz6ffIUd6G47hcflxPtrpxblJaeOy0MBSzzY8f179WjssWPYcSmmndP5v0hgEXFiimg==", - "dependencies": { - "@redocly/openapi-core": "^1.0.0-beta.97", - "classnames": "^2.3.1", - "decko": "^1.2.0", - "dompurify": "^2.2.8", - "eventemitter3": "^4.0.7", - "json-pointer": "^0.6.2", - "lunr": "^2.3.9", - "mark.js": "^8.11.1", - "marked": "^4.0.15", - "mobx-react": "^7.2.0", - "openapi-sampler": "^1.3.0", - "path-browserify": "^1.0.1", - "perfect-scrollbar": "^1.5.1", - "polished": "^4.1.3", - "prismjs": "^1.27.0", - "prop-types": "^15.7.2", - "react-tabs": "^3.2.2", - "slugify": "~1.4.7", - "stickyfill": "^1.1.1", - "style-loader": "^3.3.1", - "swagger2openapi": "^7.0.6", - "url-template": "^2.0.8" - }, - "engines": { - "node": ">=6.9", - "npm": ">=3.0.0" + "node_modules/vfile-reporter/node_modules/supports-color": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", + "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", + "engines": { + "node": ">=12" }, - "peerDependencies": { - "core-js": "^3.1.4", - "mobx": "^6.0.4", - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0", - "styled-components": "^4.1.1 || ^5.1.1" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/redoc-cli/node_modules/redoc/node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "node_modules/redoc-cli/node_modules/reftools": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", - "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", + "node_modules/vfile-sort": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", + "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", + "dependencies": { + "vfile-message": "^3.0.0" + }, "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/redoc-cli/node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/redoc-cli/node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/redoc-cli/node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/redoc-cli/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/redoc-cli/node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/redoc-cli/node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/redoc-cli/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "peer": true, + "node_modules/vfile-statistics": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", + "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" + "vfile-message": "^3.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/redoc-cli/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" + "url": "https://opencollective.com/unified" } }, - "node_modules/redoc-cli/node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/redoc-cli/node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "node_modules/vm2": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz", + "integrity": "sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ==", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" }, "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/redoc-cli/node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/redoc-cli/node_modules/should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "dependencies": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "node_modules/redoc-cli/node_modules/should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "dependencies": { - "should-type": "^1.4.0" + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" } }, - "node_modules/redoc-cli/node_modules/should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", - "dependencies": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } + "node_modules/walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" }, - "node_modules/redoc-cli/node_modules/should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=" + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "node_modules/redoc-cli/node_modules/should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/redoc-cli/node_modules/should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==" - }, - "node_modules/redoc-cli/node_modules/slugify": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", - "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==", - "engines": { - "node": ">=8.0.0" - } + "node_modules/wolfy87-eventemitter": { + "version": "5.2.9", + "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", + "integrity": "sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==" }, - "node_modules/redoc-cli/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "engines": { "node": ">=0.10.0" } }, - "node_modules/redoc-cli/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/redoc-cli/node_modules/stickyfill": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stickyfill/-/stickyfill-1.1.1.tgz", - "integrity": "sha1-OUE/7p0CXHSn5ZzuyyN4TMDxfwI=" - }, - "node_modules/redoc-cli/node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/redoc-cli/node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/redoc-cli/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/redoc-cli/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/redoc-cli/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" + "node": ">=10" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/redoc-cli/node_modules/style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==", "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "node": "*" } }, - "node_modules/redoc-cli/node_modules/styled-components": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.0.tgz", - "integrity": "sha512-bPJKwZCHjJPf/hwTJl6TbkSZg/3evha+XPEizrZUGb535jLImwDUdjTNxXqjjaASt2M4qO4AVfoHJNe3XB/tpQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^0.8.8", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0", - "react-is": ">= 16.8.0" } }, - "node_modules/redoc-cli/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/redoc-cli/node_modules/swagger2openapi": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", - "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", - "dependencies": { - "call-me-maybe": "^1.0.1", - "node-fetch": "^2.6.1", - "node-fetch-h2": "^2.3.0", - "node-readfiles": "^0.2.0", - "oas-kit-common": "^1.0.8", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "oas-validator": "^5.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - }, - "bin": { - "boast": "boast.js", - "oas-validate": "oas-validate.js", - "swagger2openapi": "swagger2openapi.js" - }, + "node_modules/zwitch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", "funding": { - "url": "https://github.com/Mermade/oas-kit?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } + } + }, + "dependencies": { + "@asyncapi/specs": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-2.14.0.tgz", + "integrity": "sha512-hHsYF6XsYNIKb1P2rXaooF4H+uKKQ4b/Ljxrk3rZ3riEDiSxMshMEfb1fUlw9Yj4V4OmJhjXwkNvw8W59AXv1A==" }, - "node_modules/redoc-cli/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "peer": true, - "engines": { - "node": ">=6" + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" } }, - "node_modules/redoc-cli/node_modules/terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "peer": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "acorn": "^8.5.0" - }, - "peerDependenciesMeta": { - "acorn": { - "optional": true - } - } + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" }, - "node_modules/redoc-cli/node_modules/terser-webpack-plugin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", - "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", - "peer": true, - "dependencies": { - "jest-worker": "^27.4.1", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } }, - "esbuild": { - "optional": true + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } }, - "uglify-js": { - "optional": true + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } } } }, - "node_modules/redoc-cli/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "peer": true, - "engines": { - "node": ">= 8" - } + "@jsep-plugin/regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.2.tgz", + "integrity": "sha512-Nn/Bcaww8zOebMDqNmGlhAWPWhIr/8S8lGIgaB/fSqev5xaO5uKy5i4qvTh63GpR+VzKqimgxDdcxdcRuCJXSw==", + "requires": {} }, - "node_modules/redoc-cli/node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" + "@jsep-plugin/ternary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsep-plugin/ternary/-/ternary-1.1.2.tgz", + "integrity": "sha512-gXguJc09uCrqWt1MD7L1+ChO32g4UH4BYGpHPoQRLhyU7pAPPRA7cvKbyjoqhnUlLutiXvLzB5hVVawPKax8jw==", + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "node_modules/redoc-cli/node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, - "node_modules/redoc-cli/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "node_modules/redoc-cli/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "@npmcli/config": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-4.2.0.tgz", + "integrity": "sha512-imWNz5dNWb2u+y41jyxL2WB389tkhu3a01Rchn16O/ur6GrnKySgOqdNG3N/9Z+mqxdISMEGKXI/POCauzz0dA==", + "requires": { + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", + "walk-up-path": "^1.0.0" + }, "dependencies": { - "is-number": "^7.0.0" + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@npmcli/map-workspaces": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", + "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" }, - "engines": { - "node": ">=8.0" + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, - "node_modules/redoc-cli/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==" }, - "node_modules/redoc-cli/node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + "@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } }, - "node_modules/redoc-cli/node_modules/uglify-js": { - "version": "3.13.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.9.tgz", - "integrity": "sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" }, - "engines": { - "node": ">=0.8.0" + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + } } }, - "node_modules/redoc-cli/node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" + "@stoplight/better-ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stoplight/better-ajv-errors/-/better-ajv-errors-1.0.1.tgz", + "integrity": "sha512-rgxT+ZMeZbYRiOLNk6Oy6e/Ig1iQKo0IL8v/Y9E/0FewzgtkGs/p5dMeUpIFZXWj3RZaEPmfL9yh0oUEmNXZjg==", + "requires": { + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" } }, - "node_modules/redoc-cli/node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" + "@stoplight/json": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.17.0.tgz", + "integrity": "sha512-WW0z2bb0D4t8FTl+zNTCu46J8lEOsrUhBPgwEYQ3Ri2Y0MiRE4U1/9ZV8Ki+pIJznZgY9i42bbFwOBxyZn5/6w==", + "requires": { + "@stoplight/ordered-object-literal": "^1.0.2", + "@stoplight/types": "^12.3.0", + "jsonc-parser": "~2.2.1", + "lodash": "^4.17.21", + "safe-stable-stringify": "^1.1" } }, - "node_modules/redoc-cli/node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "@stoplight/json-ref-readers": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@stoplight/json-ref-readers/-/json-ref-readers-1.2.2.tgz", + "integrity": "sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==", + "requires": { + "node-fetch": "^2.6.0", + "tslib": "^1.14.1" + }, "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, - "node_modules/redoc-cli/node_modules/url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" - }, - "node_modules/redoc-cli/node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/redoc-cli/node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dependencies": { - "inherits": "2.0.3" + "@stoplight/json-ref-resolver": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@stoplight/json-ref-resolver/-/json-ref-resolver-3.1.3.tgz", + "integrity": "sha512-SgoKXwVnlpIZUyAFX4W79eeuTWvXmNlMfICZixL16GZXnkjcW+uZnfmAU0ZIjcnaTgaI4mjfxn8LAP2KR6Cr0A==", + "requires": { + "@stoplight/json": "^3.17.0", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^12.3.0", + "@types/urijs": "^1.19.16", + "dependency-graph": "~0.11.0", + "fast-memoize": "^2.5.2", + "immer": "^9.0.6", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "tslib": "^2.3.1", + "urijs": "^1.19.6" } }, - "node_modules/redoc-cli/node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "@stoplight/lifecycle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@stoplight/lifecycle/-/lifecycle-2.3.2.tgz", + "integrity": "sha512-v0u8p27FA/eg04b4z6QXw4s0NeeFcRzyvseBW0+k/q4jtpg7EhVCqy42EbbbU43NTNDpIeQ81OcvkFz+6CYshw==", + "requires": { + "wolfy87-eventemitter": "~5.2.8" + } }, - "node_modules/redoc-cli/node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "@stoplight/ordered-object-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.3.tgz", + "integrity": "sha512-cjJ7PPkhgTXNMTkevAlmyrx9xOOCaI3c6rEeYb6VitL1o1WcZtrz9KyFyISmTmUa7yYTiy2IS/ud9S8s2sn3+A==" }, - "node_modules/redoc-cli/node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + "@stoplight/path": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz", + "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==" }, - "node_modules/redoc-cli/node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "@stoplight/spectral-cli": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-cli/-/spectral-cli-6.4.2.tgz", + "integrity": "sha512-pVj/BApBC/29URqLZ05nsYxvkzni4tu71jFA1Sv7hvZeX11KStMgYWVAfLRmOswMJ5rGK6UFRJA1GRSBw1Dtqw==", + "requires": { + "@rollup/plugin-commonjs": "^20.0.0", + "@stoplight/json": "3.17.0", + "@stoplight/path": "1.3.2", + "@stoplight/spectral-core": "^1.5.1", + "@stoplight/spectral-parsers": "^1.0.1", + "@stoplight/spectral-ref-resolver": "1.0.1", + "@stoplight/spectral-ruleset-bundler": "^1.0.0", + "@stoplight/spectral-ruleset-migrator": "^1.5.0", + "@stoplight/spectral-rulesets": ">=1", + "@stoplight/spectral-runtime": "^1.1.0", + "@stoplight/types": "12.3.0", + "chalk": "4.1.2", + "cliui": "7.0.4", + "eol": "0.9.1", + "fast-glob": "3.2.7", + "lodash": "~4.17.21", + "pony-cause": "^1.0.0", + "proxy-agent": "5.0.0", + "stacktracey": "^2.1.7", + "strip-ansi": "6.0", + "text-table": "0.2", + "tslib": "^2.3.0", + "yargs": "17.3.1" }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/redoc-cli/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/redoc-cli/node_modules/webpack": { - "version": "5.67.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz", - "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==", - "peer": true, "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true + "yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" } } }, - "node_modules/redoc-cli/node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/redoc-cli/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "@stoplight/spectral-core": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.12.4.tgz", + "integrity": "sha512-LArBw61vR3vvMN+QDxIP5Hq+Ms5YB0spoJyutVjOkrLpEvuObIODmU3eMTJ54+TjZ+4R+MbyzxpjqEYXif5pQw==", + "requires": { + "@stoplight/better-ajv-errors": "1.0.1", + "@stoplight/json": "~3.18.1", + "@stoplight/lifecycle": "2.3.2", + "@stoplight/path": "1.3.2", + "@stoplight/spectral-parsers": "^1.0.0", + "@stoplight/spectral-ref-resolver": "^1.0.0", + "@stoplight/spectral-runtime": "^1.0.0", + "@stoplight/types": "~13.2.0", + "@types/json-schema": "^7.0.11", + "ajv": "^8.6.0", + "ajv-errors": "~3.0.0", + "ajv-formats": "~2.1.0", + "blueimp-md5": "2.18.0", + "jsonpath-plus": "6.0.1", + "lodash": "~4.17.21", + "lodash.topath": "^4.5.2", + "minimatch": "3.1.2", + "nimma": "0.2.2", + "pony-cause": "^1.0.0", + "simple-eval": "1.0.0", + "tslib": "^2.3.0" + }, "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "@stoplight/json": { + "version": "3.18.1", + "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.18.1.tgz", + "integrity": "sha512-QmELAqBS8DC+8YuG7+OvDVP6RaUVi8bzN0KKW2UEcZg+0a1sqeeZgfW079AmJIZg8HEN7udAt4iozIB8Dm0t1Q==", + "requires": { + "@stoplight/ordered-object-literal": "^1.0.2", + "@stoplight/types": "^13.0.0", + "jsonc-parser": "~2.2.1", + "lodash": "^4.17.21", + "safe-stable-stringify": "^1.1" + } + }, + "@stoplight/types": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.2.0.tgz", + "integrity": "sha512-V3BRfzWEAcCpICGQh/WW2LX4rcB2KagQ7/msf0BDTCF5qpFMSwOxcjv25k1NUMVQSh3qwGfGoka/gYGA5m+NQA==", + "requires": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + } + } } }, - "node_modules/redoc-cli/node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "node_modules/redoc-cli/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@stoplight/spectral-formats": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-formats/-/spectral-formats-1.2.0.tgz", + "integrity": "sha512-idvn7r8fvQjY/KeJpKgXQ5eJhce6N6/KoKWMPSh5yyvYDpn+bkU4pxAD79jOJaDnIyKJd1jjTPEJWnxbS0jj6A==", + "requires": { + "@stoplight/json": "^3.17.0", + "@stoplight/spectral-core": "^1.8.0", + "@types/json-schema": "^7.0.7", + "tslib": "^2.3.1" } }, - "node_modules/redoc-cli/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@stoplight/spectral-functions": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-functions/-/spectral-functions-1.6.1.tgz", + "integrity": "sha512-f4cFtbI35bQtY0t4fYhKtS+/nMU3UsAeFlqm4tARGGG5WjOv4ieCFNFbgodKNiO3F4O+syMEjVQuXlBNPuY7jw==", + "requires": { + "@stoplight/better-ajv-errors": "1.0.1", + "@stoplight/json": "~3.17.1", + "@stoplight/spectral-core": "^1.7.0", + "@stoplight/spectral-formats": "^1.0.0", + "@stoplight/spectral-runtime": "^1.1.0", + "@stoplight/types": "12.3.0", + "ajv": "^8.6.3", + "ajv-draft-04": "~1.0.0", + "ajv-errors": "~3.0.0", + "ajv-formats": "~2.1.0", + "lodash": "~4.17.21", + "tslib": "^2.3.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/redoc-cli/node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@stoplight/json": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.17.2.tgz", + "integrity": "sha512-NwIVzanXRUy291J5BMkncCZRMG1Lx+aq+VidGQgfkJjgo8vh1Y/PSAz7fSU8gVGSZBCcqmOkMI7R4zw7DlfTwA==", + "requires": { + "@stoplight/ordered-object-literal": "^1.0.2", + "@stoplight/types": "^12.3.0", + "jsonc-parser": "~2.2.1", + "lodash": "^4.17.21", + "safe-stable-stringify": "^1.1" + } + } } }, - "node_modules/redoc-cli/node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "@stoplight/spectral-parsers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-parsers/-/spectral-parsers-1.0.1.tgz", + "integrity": "sha512-JGKlrTxhjUzIGo2FOCf8Qp0WKTWXedoRNPovqYPE8pAp08epqU8DzHwl/i46BGH5yfTmouKMZgBN/PV2+Cr5jw==", + "requires": { + "@stoplight/json": "3.17.0", + "@stoplight/types": "12.3.0", + "@stoplight/yaml": "4.2.2", + "tslib": "^2.3.1" + } }, - "node_modules/redoc-cli/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" + "@stoplight/spectral-ref-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ref-resolver/-/spectral-ref-resolver-1.0.1.tgz", + "integrity": "sha512-0tY7nTOccvTsa3c4QbSWfJ8wGfPO1RXvmKnmBjuyLfoTMNuhkHPII9gKhCjygsshzsBLxs2IyRHZYhWYVnEbCA==", + "requires": { + "@stoplight/json-ref-readers": "1.2.2", + "@stoplight/json-ref-resolver": "3.1.3", + "@stoplight/spectral-runtime": "^1.0.0", + "dependency-graph": "0.11.0", + "tslib": "^2.3.1" } }, - "node_modules/redoc-cli/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" + "@stoplight/spectral-ruleset-bundler": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-bundler/-/spectral-ruleset-bundler-1.3.0.tgz", + "integrity": "sha512-6Tif7GQL18F0LN1+FhEmhFWgE/TiWudb/pFl4DC7oS1QRoutB7QJPqIfVFSmteToPidxlrIbC6VAXSyEhlpDVQ==", + "requires": { + "@rollup/plugin-commonjs": "^21.0.1", + "@stoplight/path": "1.3.2", + "@stoplight/spectral-core": ">=1", + "@stoplight/spectral-formats": ">=1", + "@stoplight/spectral-functions": ">=1", + "@stoplight/spectral-parsers": ">=1", + "@stoplight/spectral-ref-resolver": ">=1", + "@stoplight/spectral-ruleset-migrator": "^1.5.2", + "@stoplight/spectral-rulesets": ">=1", + "@stoplight/spectral-runtime": "^1.1.0", + "@stoplight/types": "^12.3.0", + "@types/node": "*", + "pony-cause": "1.1.1", + "rollup": "~2.67.0", + "tslib": "^2.3.1", + "validate-npm-package-name": "3.0.0" + }, + "dependencies": { + "@rollup/plugin-commonjs": { + "version": "21.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.1.0.tgz", + "integrity": "sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "rollup": { + "version": "2.67.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.3.tgz", + "integrity": "sha512-G/x1vUwbGtP6O5ZM8/sWr8+p7YfZhI18pPqMRtMYMWSbHjKZ/ajHGiM+GWNTlWyOR0EHIdT8LHU+Z4ciIZ1oBw==", + "requires": { + "fsevents": "~2.3.2" + } + } } }, - "node_modules/redoc-cli/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" + "@stoplight/spectral-ruleset-migrator": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.3.tgz", + "integrity": "sha512-1TlJgNxIqlcafzrH6gsGpQQcVkFhndib5piMNXVg9xshJ42l2yC6A0AUAixUC+ODJ5098DR7SjIYBVKk+CTQSw==", + "requires": { + "@stoplight/json": "~3.17.0", + "@stoplight/ordered-object-literal": "1.0.2", + "@stoplight/path": "1.3.2", + "@stoplight/spectral-functions": "^1.0.0", + "@stoplight/spectral-runtime": "^1.1.0", + "@stoplight/types": "^12.3.0", + "@stoplight/yaml": "4.2.2", + "@types/node": "*", + "ajv": "^8.6.0", + "ast-types": "0.14.2", + "astring": "^1.7.5", + "reserved": "0.1.2", + "tslib": "^2.3.1", + "validate-npm-package-name": "3.0.0" + }, + "dependencies": { + "@stoplight/ordered-object-literal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.2.tgz", + "integrity": "sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==" + } } }, - "node_modules/redoc-cli/node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" - }, - "node_modules/redoc-cli/node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "@stoplight/spectral-rulesets": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-rulesets/-/spectral-rulesets-1.11.0.tgz", + "integrity": "sha512-0zFbxIuoWmGrkl2txOuaEDF8o6aoKDpMAYOG2oDfmmX9FhXX3c3ivIy80hyb2tMKkIYuqqx/zwIiOuww5S8iUA==", + "requires": { + "@asyncapi/specs": "^2.14.0", + "@stoplight/better-ajv-errors": "1.0.1", + "@stoplight/json": "^3.17.0", + "@stoplight/spectral-core": "^1.8.1", + "@stoplight/spectral-formats": "^1.2.0", + "@stoplight/spectral-functions": "^1.5.1", + "@stoplight/spectral-runtime": "^1.1.1", + "@stoplight/types": "^12.5.0", + "@types/json-schema": "^7.0.7", + "ajv": "^8.8.2", + "ajv-formats": "~2.1.0", + "json-schema-traverse": "^1.0.0", + "lodash": "~4.17.21", + "tslib": "^2.3.0" }, - "engines": { - "node": ">=12" + "dependencies": { + "@stoplight/types": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.5.0.tgz", + "integrity": "sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==", + "requires": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + } + } } }, - "node_modules/redoc-cli/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "engines": { - "node": ">=12" + "@stoplight/spectral-runtime": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-runtime/-/spectral-runtime-1.1.2.tgz", + "integrity": "sha512-fr5zRceXI+hrl82yAVoME+4GvJie8v3wmOe9tU+ZLRRNonizthy8qDi0Z/z4olE+vGreSDcuDOZ7JjRxFW5kTw==", + "requires": { + "@stoplight/json": "^3.17.0", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^12.3.0", + "abort-controller": "^3.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.7", + "tslib": "^2.3.1" } }, - "node_modules/remark": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.2.tgz", - "integrity": "sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "remark-parse": "^10.0.0", - "remark-stringify": "^10.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@stoplight/types": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.3.0.tgz", + "integrity": "sha512-hgzUR1z5BlYvIzUeFK5pjs5JXSvEutA9Pww31+dVicBlunsG1iXopDx/cvfBY7rHOrgtZDuvyeK4seqkwAZ6Cg==", + "requires": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" } }, - "node_modules/remark-cli": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-11.0.0.tgz", - "integrity": "sha512-8JEWwArXquRq1/In4Ftz7gSG9Scwb1ijT2/dEuBETW9omqhmMRxcfjZ3iKqrak3BnCJeZSXCdWEmPhFKC8+RUQ==", - "dependencies": { - "remark": "^14.0.0", - "unified-args": "^10.0.0" - }, - "bin": { - "remark": "cli.js" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@stoplight/yaml": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.2.tgz", + "integrity": "sha512-N086FU8pmSpjc5TvMBjmlTniZVh3OXzmEh6SYljSLiuv6aMxgjyjf13YrAlUqgu0b4b6pQ5zmkjrfo9i0SiLsw==", + "requires": { + "@stoplight/ordered-object-literal": "^1.0.1", + "@stoplight/types": "^12.0.0", + "@stoplight/yaml-ast-parser": "0.0.48", + "tslib": "^2.2.0" } }, - "node_modules/remark-gfm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", - "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^2.0.0", - "micromark-extension-gfm": "^2.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@stoplight/yaml-ast-parser": { + "version": "0.0.48", + "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz", + "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==" + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "@types/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw==", + "requires": { + "@types/node": "*" } }, - "node_modules/remark-lint": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.1.1.tgz", - "integrity": "sha512-zhe6twuqgkx/9KgZyNyaO0cceA4jQuJcyzMOBC+JZiAzMN6mFUmcssWZyY30ko8ut9vQDMX/pyQnolGn+Fg/Tw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "remark-message-control": "^7.0.0", - "unified": "^10.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "requires": { + "@types/ms": "*" } }, - "node_modules/remark-lint-blockquote-indentation": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.1.1.tgz", - "integrity": "sha512-u9cjedM6zcK8vRicis5n/xeOSDIC3FGBCKc3K9pqw+nNrOjY85FwxDQKZZ/kx7rmkdRZEhgyHak+wzPBllcxBQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "@types/estree-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", + "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", + "requires": { + "@types/estree": "*" } }, - "node_modules/remark-lint-checkbox-character-style": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.1.1.tgz", - "integrity": "sha512-KPSW3wfHfB8m9hzrtHiBHCTUIsOPX5nZR7VM+2pMjwqnhI6Mp94DKprkNo1ekNZALNeoZIDWZUSYxSiiwFfmVQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "requires": { + "@types/unist": "*" } }, - "node_modules/remark-lint-code-block-style": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.1.0.tgz", - "integrity": "sha512-Hv4YQ8ueLGpjItla4CkcOkcfGj+nlquqylDgCm1/xKnW+Ke2a4qVTMVJrP9Krp4FWmXgktJLDHjhRH+pzhDXLg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "@types/is-empty": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.1.tgz", + "integrity": "sha512-a3xgqnFTuNJDm1fjsTjHocYJ40Cz3t8utYpi5GNaxzrJC2HSD08ym+whIL7fNqiqBCdM9bcqD1H/tORWAFXoZw==" }, - "node_modules/remark-lint-definition-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-3.1.1.tgz", - "integrity": "sha512-dirX0BSfbm1Ixx4Hv4xRQliEP1rw8dDitw2Om3XcO2QqF8bWrzF06/xeMlDNAaT77Cxqb9S7bODo/q+CYUxyWQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, - "node_modules/remark-lint-definition-spacing": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.1.1.tgz", - "integrity": "sha512-PR+cYvc0FMtFWjkaXePysW88r7Y7eIwbpUGPFDIWE48fiRiz8U3VIk05P3loQCpCkbmUeInAAYD8tIFPTg4Jlg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "requires": { + "@types/unist": "*" } }, - "node_modules/remark-lint-emphasis-marker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-3.1.1.tgz", - "integrity": "sha512-VduuT+KAr0vA78xBLJdIcenCQja4mAd81aNACfdz7BUPLphIQa84D5uzl+nZatSaCXLebCNp5jP/bzVUsBmRKw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, - "node_modules/remark-lint-fenced-code-flag": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.1.1.tgz", - "integrity": "sha512-FFVZmYsBccKIIEgOtgdZEpQdARtAat1LTLBydnIpyNIvcntzWwtrtlj9mtjL8ZoSRre8HtwmEnBFyOfmM/NWaA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "@types/node": { + "version": "14.18.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.22.tgz", + "integrity": "sha512-qzaYbXVzin6EPjghf/hTdIbnVW1ErMx8rPzwRNJhlbyJhu2SyqlvjGOY/tbUt6VFyzg56lROcOeSQRInpt63Yw==" }, - "node_modules/remark-lint-fenced-code-marker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.1.1.tgz", - "integrity": "sha512-x/t8sJWPvE46knKz6zW03j9VX5477srHUmRFbnXhZ3K8e37cYVUIvfbPhcPCAosSsOki9+dvGfZsWQiKuUNNfQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==" + }, + "@types/text-table": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", + "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==" + }, + "@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "@types/urijs": { + "version": "1.19.19", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", + "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" } }, - "node_modules/remark-lint-file-extension": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.1.1.tgz", - "integrity": "sha512-r6OMe27YZzr2NFjPMbBxgm8RZxigRwzeFSjapPlqcxk0Q0w/6sosJsceBNlGGlk00pltvv7NPqSexbXUjirrQQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, - "node_modules/remark-lint-final-definition": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.1.1.tgz", - "integrity": "sha512-94hRV+EBIuLVFooiimsZwh5ZPEcTqjy5wr7LgqxoUUWy+srTanndaLoki7bxQJeIcWUnomZncsJAyL0Lo7toxw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "node_modules/remark-lint-final-newline": { + "ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "requires": {} + }, + "ajv-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", + "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", + "requires": {} + }, + "ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.1.1.tgz", - "integrity": "sha512-cgKYaI7ujUse/kV4KajLv2j1kmi1CxpAu+w7wIU0/Faihhb3sZAf4a5ACf2Wu8NoTSIr1Q//3hDysG507PIoDg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" } }, - "node_modules/remark-lint-hard-break-spaces": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.1.1.tgz", - "integrity": "sha512-UfwFvESpX32qwyHJeluuUuRPWmxJDTkmjnWv2r49G9fC4Jrzm4crdJMs3sWsrGiQ3mSex6bgp/8rqDgtBng2IA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "node_modules/remark-lint-heading-increment": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-3.1.1.tgz", - "integrity": "sha512-DtiMwZNAE/iAZWuZGjTXxYjNDQ375r59C99aVeVp1nKaovIufKuHWAm9U/9FAGBJNgBx6Ovfdej4YwIxd0yAPw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" } }, - "node_modules/remark-lint-heading-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.1.1.tgz", - "integrity": "sha512-Qm7ZAF+s46ns0Wo5TlHGIn/PPMMynytn8SSLEdMIo6Uo/+8PAcmQ3zU1pj57KYxfyDoN5iQPgPIwPYMLYQ2TSQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-heading-style": "^2.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "node_modules/remark-lint-link-title-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-3.1.1.tgz", - "integrity": "sha512-JWWiuUFy/N2iwQ3eWIxFy6olX8D7xCFw8LoM0vZI2CHTZJrmDMaWwnl8jziP+HHHheFX3wkVqsoaYod536ArRw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "as-table": { + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", + "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", + "requires": { + "printable-characters": "^1.0.42" } }, - "node_modules/remark-lint-list-item-bullet-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.1.1.tgz", - "integrity": "sha512-NFvXVj1Nm12+Ma48NOjZCGb/D0IhmUcxyrTCpPp+UNJhEWrmFxM8nSyIiZgXadgXErnuv+xm2Atw7TAcZ9a1Cg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "requires": { + "tslib": "^2.0.1" } }, - "node_modules/remark-lint-list-item-content-indent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-3.1.1.tgz", - "integrity": "sha512-gcZhAXLd1onkutTEqQTybyANjdxvlOlu0y/AU4H3f6L99UGC85ymRhEeu5vGSkvsKKPR1FrMTEH6G2nNgtavgg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "astring": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz", + "integrity": "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==" }, - "node_modules/remark-lint-list-item-indent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.1.1.tgz", - "integrity": "sha512-OSTG64e52v8XBmmeT0lefpiAfCMYHJxMMUrMnhTjLVyWAbEO0vqqR5bLvfLwzK+P4nY2D/8XKku0hw35dM86Rw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "blueimp-md5": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz", + "integrity": "sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/remark-lint-list-item-spacing": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-4.1.1.tgz", - "integrity": "sha512-MqXmahPgYrvfA7SPqmcAC6fI40jIgXG33EeE/MhFvMLWh04k+fqGf2O2aH1KT664MlwM4oETbTI4xj3/KCIHZA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" } }, - "node_modules/remark-lint-maximum-heading-length": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-3.1.1.tgz", - "integrity": "sha512-hTOvRDnULpu0S+k51lovT28TLBgtw8XR0qq+mECSsoyuT4C38UBjQRic5OPo68AZMH0ad/93uj6yvfFtH0K8Lg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "requires": { + "semver": "^7.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, - "node_modules/remark-lint-maximum-line-length": { + "bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.1.2.tgz", - "integrity": "sha512-KwddpVmNifTHNXwTQQgVufuUvv0hhu9kJVvmpNdEvfEc7tc3wBkaavyi3kKsUB8WwMhGtZuXVWy6OdPC1axzhw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, - "node_modules/remark-lint-no-blockquote-without-marker": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.1.1.tgz", - "integrity": "sha512-7jL7eKS25kKRhQ7SKKB5eRfNleDMWKWAmZ5Y/votJdDoM+6qsopLLumPWaSzP0onyV3dyHRhPfBtqelt3hvcyA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "camelcase": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", + "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==" }, - "node_modules/remark-lint-no-consecutive-blank-lines": { + "ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" + }, + "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.1.2.tgz", - "integrity": "sha512-wRsR3kFgHaZ4mO3KASU43oXGLGezNZ64yNs1ChPUacKh0Bm7cwGnxN9GHGAbOXspwrYrN2eCDxzCbdPEZi2qKw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "node_modules/remark-lint-no-duplicate-definitions": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.1.1.tgz", - "integrity": "sha512-9p+nBz8VvV+t4g/ALNLVN8naV+ffAzC4ADyg9QivzmKwLjyF93Avt4HYNlb2GZ+aoXRQSVG1wjjWFeDC9c7Tdg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" }, - "node_modules/remark-lint-no-duplicate-headings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-3.1.1.tgz", - "integrity": "sha512-gSO/BngGkxF35Fsctzt3YMwGEZ8F7f71zx7h0Y97DylyL6WXVuWP4saCmQTlbB4FpD0UXEnRROJ6fBFDvJlzOA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, - "node_modules/remark-lint-no-emphasis-as-heading": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-3.1.1.tgz", - "integrity": "sha512-F45yuLsYVP4r6OjVtePKk7Aymnf3rBLHXYjnSJggEaYn0j+72xOBLrqmj6ii5YGfDsBwG2pDNTBx4vm3xM7P0Q==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/remark-lint-no-file-name-articles": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.1.1.tgz", - "integrity": "sha512-7fiHKQUGvP4WOsieZ1dxm8WQWWjXjPj0Uix6pk2dSTJqxvaosjKH1AV0J/eVvliat0BGH8Cz4SUbuz5vG6YbdQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.1.1.tgz", - "integrity": "sha512-tM4IpURGuresyeIBsXT5jsY3lZakgO6IO59ixcFt015bFjTOW54MrBvdJxA60QHhf5DAyHzD8wGeULPSs7ZQfg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + } } }, - "node_modules/remark-lint-no-file-name-irregular-characters": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-2.1.1.tgz", - "integrity": "sha512-rVeCv1XRdLtp/rxLaiFKElaIHuIlokypV/c2aCG3VVYcQ4+ZmJxq018kEsolR2+Dv9m3vKp8Fy1482US4g4WKA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "data-uri-to-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", + "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + }, + "decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "requires": { + "character-entities": "^2.0.0" } }, - "node_modules/remark-lint-no-file-name-mixed-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-2.1.1.tgz", - "integrity": "sha512-mJU3hYzyXNo8NkoSafPcsgr+Gema+vDCzNWlLw05UdFXJK/cVy+6DVsbrEFjrz8L+WF7uQmUHBtTvd91SqoItg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "degenerator": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", + "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", + "requires": { + "ast-types": "^0.13.2", + "escodegen": "^1.8.1", + "esprima": "^4.0.0", + "vm2": "^3.9.8" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "requires": { + "tslib": "^2.0.1" + } + } } }, - "node_modules/remark-lint-no-file-name-outer-dashes": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.1.1.tgz", - "integrity": "sha512-2kRcVNzZb0zS3jE+Iaa6MEpplhqXSdsHBILS+BxJ4cDGAAIdeipY8hKaDLdZi+34wvrfnDxNgvNLcHpgqO+OZA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, - "node_modules/remark-lint-no-heading-content-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.1.1.tgz", - "integrity": "sha512-W4zF7MA72IDC5JB0qzciwsnioL5XlnoE0r1F7sDS0I5CJfQtHYOLlxb3UAIlgRCkBokPWCp0E4o1fsY/gQUKVg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-heading-style": "^2.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" }, - "node_modules/remark-lint-no-heading-punctuation": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-3.1.1.tgz", - "integrity": "sha512-ZexHx4rmsjKVF1/Fvdig0yOgpWl0wFa43+sqg880HT3PW9KmEczjSRkwlMaTlVgDzC0paNn2FXfQMuEQW4YDLg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" }, - "node_modules/remark-lint-no-html": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-html/-/remark-lint-no-html-3.1.1.tgz", - "integrity": "sha512-hTaw6Ul3iAXvesWzvl+ev1tVf1SNm7hG3l7A2pj8r+1MlklKDFeaMWsxKnDh+8Rh6pj+mRnwzsbwtQxKiKs9Cw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" }, - "node_modules/remark-lint-no-inline-padding": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.1.1.tgz", - "integrity": "sha512-++IMm6ohOPKNOrybqjP9eiclEtVX/Rd2HpF2UD9icrC1X5nvrI6tlfN55tePaFvWAB7pe6MW4LzNEMnWse61Lw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "node_modules/remark-lint-no-literal-urls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.1.1.tgz", - "integrity": "sha512-tZZ4gtZMA//ZAf7GJTE8S9yjzqXUfUTlR/lvU7ffc7NeSurqCBwAtHqeXVCHiD39JnlHVSW2MLYhvHp53lBGvA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/remark-lint-no-multiple-toplevel-headings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.1.1.tgz", - "integrity": "sha512-bM//SIBvIkoGUpA8hR5QibJ+7C2R50PTIRrc4te93YNRG+ie8bJzjwuO9jIMedoDfJB6/+7EqO9FYBivjBZ3MA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==" }, - "node_modules/remark-lint-no-shell-dollars": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.1.1.tgz", - "integrity": "sha512-Q3Ad1TaOPxbYog5+Of/quPG3Fy+dMKiHjT8KsU7NDiHG6YJOnAJ3f3w+y13CIlNIaKc/MrisgcthhrZ7NsgXfA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" } }, - "node_modules/remark-lint-no-shortcut-reference-image": { + "escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.1.1.tgz", - "integrity": "sha512-m8tH+loDagd1JUns/T4eyulVXgVvE+ZSs7owRUOmP+dgsKJuO5sl1AdN9eyKDVMEvxHF3Pm5WqE62QIRNM48mA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, - "node_modules/remark-lint-no-shortcut-reference-link": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.1.1.tgz", - "integrity": "sha512-oDJ92/jXQ842HgrBGgZdP7FA+N2jBMCBU2+jRElkS+OWVut0UaDILtNavNy/e85B3SLPj3RoXKF96M4vfJ7B2A==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" }, - "node_modules/remark-lint-no-table-indentation": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.1.1.tgz", - "integrity": "sha512-eklvBxUSrkVbJxeokepOvFZ3n2V6zaJERIiOowR+y/Bz4dRHDMij1Ojg55AMO9yUMvxWPV3JPOeThliAcPmrMg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" } }, - "node_modules/remark-lint-no-undefined-references": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.1.1.tgz", - "integrity": "sha512-J20rKfTGflLiTI3T5JlLZSmINk6aDGmZi1y70lpU69LDfAyHAKgDK6sSW9XDeFmCPPdm8Ybxe5Gf2a70k+GcVQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, - "node_modules/remark-lint-no-unused-definitions": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.1.1.tgz", - "integrity": "sha512-/GtyBukhAxi5MEX/g/m+FzDEflSbTe2/cpe2H+tJZyDmiLhjGXRdwWnPRDp+mB9g1iIZgVRCk7T4v90RbQX/mw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, - "node_modules/remark-lint-ordered-list-marker-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.1.1.tgz", - "integrity": "sha512-IWcWaJoaSb4yoSOuvDbj9B2uXp9kSj58DqtrMKo8MoRShmbj1onVfulTxoTLeLtI11NvW+mj3jPSpqjMjls+5Q==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, - "node_modules/remark-lint-ordered-list-marker-value": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-3.1.1.tgz", - "integrity": "sha512-+bQZbo+v/A8CuLrO71gobJuKR4/sfnPgWyEggSa+zq+LXPK1HiMDjap0Wr07uYgcUXsXIPh+HD/5J5by6JL+vg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, - "node_modules/remark-lint-rule-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.1.1.tgz", - "integrity": "sha512-+oZe0ph4DWHGwPkQ/FpqiGp4WULTXB1edftnnNbizYT+Wr+/ux7GNTx78oXH/PHwlnOtVIExMc4W/vDXrUj/DQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" } }, - "node_modules/remark-lint-strong-marker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.1.1.tgz", - "integrity": "sha512-tX9Os2C48Hh8P8CouY4dcnAhGnR3trL+NCDqIvJvFDR9Rvm9yfNQaY2N4ZHWVY0iUicq9DpqEiJTgUsT8AGv/w==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fast-memoize": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", + "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" } }, - "node_modules/remark-lint-table-cell-padding": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.1.2.tgz", - "integrity": "sha512-cx5BXjHtpACa7Z51Vuqzy9BI4Z8Hnxz7vklhhrubkoB7mbctP/mR+Nh4B8eE5VtgFYJNHFwIltl96PuoctFCeQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "requires": { + "format": "^0.2.0" } }, - "node_modules/remark-lint-table-pipe-alignment": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-3.1.1.tgz", - "integrity": "sha512-WOHv2yL4ZwXHM06MIyQNnGFYKz9m2k/GFIA/6hpArF8Ph/3v8CF0J/Hb3Yyfg39e5nODw3D2G3okCO+xgyGQGA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "file-uri-to-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", + "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" } }, - "node_modules/remark-lint-table-pipes": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.1.1.tgz", - "integrity": "sha512-mJnB2FpjJTE4s9kE1JX8gcCjCFvtGPjzXUiQy0sbPHn2YM9EWG7kvFWYoqWK4w569CEQJyxZraEPltmhDjQTjg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "node_modules/remark-lint-unordered-list-marker-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.1.1.tgz", - "integrity": "sha512-JwH8oIDi9f5Z8cTQLimhJ/fkbPwI3OpNSifjYyObNNuc4PG4/NUoe5ZuD10uPmPYHZW+713RZ8S5ucVCkI8dDA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" } }, - "node_modules/remark-message-control": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.1.1.tgz", - "integrity": "sha512-xKRWl1NTBOKed0oEtCd8BUfH5m4s8WXxFFSoo7uUwx6GW/qdCy4zov5LfPyw7emantDmhfWn5PdIZgcbVcWMDQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-comment-marker": "^2.0.0", - "unified": "^10.0.0", - "unified-message-control": "^4.0.0", - "vfile": "^5.0.0" + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-source": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", + "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", + "requires": { + "data-uri-to-buffer": "^2.0.0", + "source-map": "^0.6.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "data-uri-to-buffer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", + "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==" + } } }, - "node_modules/remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-preset-lint-consistent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/remark-preset-lint-consistent/-/remark-preset-lint-consistent-5.1.1.tgz", - "integrity": "sha512-DZQfomiVi/1x7NRByWrOiIC+olEGa1PpyykKrowvYp5qr/Seq60FqU7OjBJxtcOLzgnQcu9Y2JXdHxFi4AAPXQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-blockquote-indentation": "^3.0.0", - "remark-lint-checkbox-character-style": "^4.0.0", - "remark-lint-code-block-style": "^3.0.0", - "remark-lint-emphasis-marker": "^3.0.0", - "remark-lint-fenced-code-marker": "^3.0.0", - "remark-lint-heading-style": "^3.0.0", - "remark-lint-link-title-style": "^3.0.0", - "remark-lint-list-item-content-indent": "^3.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "remark-lint-rule-style": "^3.0.0", - "remark-lint-strong-marker": "^3.0.0", - "remark-lint-table-cell-padding": "^4.0.0", - "unified": "^10.0.0" + "get-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", + "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "requires": { + "@tootallnate/once": "1", + "data-uri-to-buffer": "3", + "debug": "4", + "file-uri-to-path": "2", + "fs-extra": "^8.1.0", + "ftp": "^0.3.10" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-preset-lint-markdown-style-guide": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-5.1.2.tgz", - "integrity": "sha512-MIAhnz0wDOq/MqLucSaAPquKGFE2I5SxqRjgWT+ZGK7TmqTxrro53e11/Pc19xPX4evmzI5CZdvaRnIoxP3ysQ==", "dependencies": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-blockquote-indentation": "^3.0.0", - "remark-lint-code-block-style": "^3.0.0", - "remark-lint-definition-case": "^3.0.0", - "remark-lint-definition-spacing": "^3.0.0", - "remark-lint-emphasis-marker": "^3.0.0", - "remark-lint-fenced-code-flag": "^3.0.0", - "remark-lint-fenced-code-marker": "^3.0.0", - "remark-lint-file-extension": "^2.0.0", - "remark-lint-final-definition": "^3.0.0", - "remark-lint-hard-break-spaces": "^3.0.0", - "remark-lint-heading-increment": "^3.0.0", - "remark-lint-heading-style": "^3.0.0", - "remark-lint-link-title-style": "^3.0.0", - "remark-lint-list-item-content-indent": "^3.0.0", - "remark-lint-list-item-indent": "^3.0.0", - "remark-lint-list-item-spacing": "^4.0.0", - "remark-lint-maximum-heading-length": "^3.0.0", - "remark-lint-maximum-line-length": "^3.0.0", - "remark-lint-no-blockquote-without-marker": "^5.0.0", - "remark-lint-no-consecutive-blank-lines": "^4.0.0", - "remark-lint-no-duplicate-headings": "^3.0.0", - "remark-lint-no-emphasis-as-heading": "^3.0.0", - "remark-lint-no-file-name-articles": "^2.0.0", - "remark-lint-no-file-name-consecutive-dashes": "^2.0.0", - "remark-lint-no-file-name-irregular-characters": "^2.0.0", - "remark-lint-no-file-name-mixed-case": "^2.0.0", - "remark-lint-no-file-name-outer-dashes": "^2.0.0", - "remark-lint-no-heading-punctuation": "^3.0.0", - "remark-lint-no-inline-padding": "^4.0.0", - "remark-lint-no-literal-urls": "^3.0.0", - "remark-lint-no-multiple-toplevel-headings": "^3.0.0", - "remark-lint-no-shell-dollars": "^3.0.0", - "remark-lint-no-shortcut-reference-image": "^3.0.0", - "remark-lint-no-shortcut-reference-link": "^3.0.0", - "remark-lint-no-table-indentation": "^4.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "remark-lint-ordered-list-marker-value": "^3.0.0", - "remark-lint-rule-style": "^3.0.0", - "remark-lint-strong-marker": "^3.0.0", - "remark-lint-table-cell-padding": "^4.0.0", - "remark-lint-table-pipe-alignment": "^3.0.0", - "remark-lint-table-pipes": "^4.0.0", - "remark-lint-unordered-list-marker-style": "^3.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, - "node_modules/remark-preset-lint-recommended": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.1.2.tgz", - "integrity": "sha512-x9kWufNY8PNAhY4fsl+KD3atgQdo4imP3GDAQYbQ6ylWVyX13suPRLkqnupW0ODRynfUg8ZRt8pVX0wMHwgPAg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-final-newline": "^2.0.0", - "remark-lint-hard-break-spaces": "^3.0.0", - "remark-lint-list-item-bullet-indent": "^4.0.0", - "remark-lint-list-item-indent": "^3.0.0", - "remark-lint-no-blockquote-without-marker": "^5.0.0", - "remark-lint-no-duplicate-definitions": "^3.0.0", - "remark-lint-no-heading-content-indent": "^4.0.0", - "remark-lint-no-inline-padding": "^4.0.0", - "remark-lint-no-literal-urls": "^3.0.0", - "remark-lint-no-shortcut-reference-image": "^3.0.0", - "remark-lint-no-shortcut-reference-link": "^3.0.0", - "remark-lint-no-undefined-references": "^4.0.0", - "remark-lint-no-unused-definitions": "^3.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "github-slugger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", + "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" }, - "node_modules/remark-stringify": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", - "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "node_modules/remark-validate-links": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-12.0.0.tgz", - "integrity": "sha512-mBNfsGBPO3A4CYnHDd3fpnr+A2Ep71moc0UlxC6lhZSJslMAU3UZypKK3DLlxUPoLy9TlJaEVEnfy6qpGQU7sg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "github-slugger": "^1.0.0", - "hosted-git-info": "^5.0.0", - "mdast-util-to-string": "^3.0.0", - "propose": "0.0.5", - "to-vfile": "^7.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "unified-engine": "^10.0.1", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" } }, - "node_modules/reserved": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/reserved/-/reserved-0.1.2.tgz", - "integrity": "sha512-/qO54MWj5L8WCBP9/UNe2iefJc+L9yETbH32xO/ft/EYPOTCR5k+azvDUgdCOKwZH8hXwPd0b8XBL78Nn2U69g==", - "engines": { - "node": ">=0.8" - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "hosted-git-info": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "requires": { + "lru-cache": "^7.5.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "lru-cache": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz", + "integrity": "sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==" + } } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, - "node_modules/rollup": { - "version": "2.77.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz", - "integrity": "sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==", - "peer": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } - ], - "dependencies": { - "queue-microtask": "^1.2.2" } }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } - ] + } }, - "node_modules/safe-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", - "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "immer": { + "version": "9.0.15", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", + "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" + }, + "import-meta-resolve": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.0.3.tgz", + "integrity": "sha512-fpAppnBpZ3ymQ/dPP97TNsco1HB5+V9SYJ3chY50PP8xn4U/w+Y6ovWBmTImB/prmGsTjzPh8pQYY+EVBlr9mw==", + "requires": { + "builtins": "^5.0.0" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, - "node_modules/simple-eval": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-eval/-/simple-eval-1.0.0.tgz", - "integrity": "sha512-kpKJR+bqTscgC0xuAl2xHN6bB12lHjC2DCUfqjAx19bQyO3R2EVLOurm3H9AUltv/uFVcSCVNc6faegR+8NYLw==", - "dependencies": { - "jsep": "^1.1.2" - }, - "engines": { - "node": ">=12" + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/simple-websocket": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/simple-websocket/-/simple-websocket-9.1.0.tgz", - "integrity": "sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "debug": "^4.3.1", - "queue-microtask": "^1.2.2", - "randombytes": "^2.1.0", - "readable-stream": "^3.6.0", - "ws": "^7.4.2" - } + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/simple-websocket/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } + "ini": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==" }, - "node_modules/simple-websocket/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" }, - "node_modules/simple-websocket/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "node_modules/simple-websocket/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, - "node_modules/socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "requires": { + "has": "^1.0.3" } }, - "node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } + "is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==" }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" } }, - "node_modules/socks-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "requires": { + "@types/estree": "*" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, - "node_modules/stacktracey": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", - "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", - "dependencies": { - "as-table": "^1.0.36", - "get-source": "^2.0.12" - } + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } + "jsep": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.6.tgz", + "integrity": "sha512-o7fP1eZVROIChADx7HKiwGRVI0tUqgUUGhaok6DP7cMxpDeparuooREDBDeNk2G5KIB49MBSkRYsCOu4PmZ+1w==" }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + }, + "jsonc-parser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", + "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" } }, - "node_modules/strip-ansi": { + "jsonpath-plus": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", + "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==" }, - "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" }, - "node_modules/strip-outer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, - "node_modules/supports-preserve-symlinks-flag": { + "levenshtein-edit-distance": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "resolved": "https://registry.npmjs.org/levenshtein-edit-distance/-/levenshtein-edit-distance-1.0.0.tgz", + "integrity": "sha512-gpgBvPn7IFIAL32f0o6Nsh2g+5uOvkt4eK9epTfgE4YVxBxwVhJ/p1888lMm/u8mXdu1ETLSi6zeEmkBI+0F3w==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==" }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "load-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-5.0.0.tgz", + "integrity": "sha512-jTz8tvC0BTMtof27lTSV5SAOnCRT0Z++k+S3QeQ5CrF8ZAS5L2nhi3euf4ZhJyDkds+nOQGyPcFqdQZ9s8ELkg==", + "requires": { + "@npmcli/config": "^4.0.0", + "import-meta-resolve": "^2.0.0" } }, - "node_modules/to-vfile": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.3.tgz", - "integrity": "sha512-QO0A9aE6Z/YkmQadJ0syxpmNXtcQiu0qAtCKYKD5cS3EfgfFTAXfgLX6AOaBrSfWSek5nfsMf3gBZ9KGVFcLuw==", - "dependencies": { - "is-buffer": "^2.0.0", - "vfile": "^5.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==" }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "lodash.topath": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", + "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" }, - "node_modules/trim-repeated/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" + "longest-streak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", + "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" } }, - "node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" } }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "markdown-table": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz", + "integrity": "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==" }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" + "mdast-comment-marker": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.1.0.tgz", + "integrity": "sha512-/+Cfm8A83PjkqjQDB9iYqHESGuXlriCWAwRGPJjkYmxXrF4r6saxeUlOKNrf+SogTwg9E8uyHRCFHLG6/BAAdA==", + "requires": { + "mdast-util-mdx-expression": "^1.1.0" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/uglify-js": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", - "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" + "mdast-util-find-and-replace": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", + "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", + "requires": { + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" } }, - "node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { + "mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "requires": { + "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" } }, - "node_modules/unified-args": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-10.0.0.tgz", - "integrity": "sha512-PqsqxwkXpGSLiMkbjNnKU33Ffm6gso6rAvz1TlBGzMBx3gpx7ewIhViBX8HEWmy0v7pebA5PM6RkRWWaYmtfYw==", - "dependencies": { - "@types/text-table": "^0.2.0", - "camelcase": "^7.0.0", - "chalk": "^5.0.0", - "chokidar": "^3.0.0", - "fault": "^2.0.0", - "json5": "^2.0.0", - "minimist": "^1.0.0", - "text-table": "^0.2.0", - "unified-engine": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "mdast-util-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", + "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", + "requires": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" } }, - "node_modules/unified-args/node_modules/chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "mdast-util-gfm-autolink-literal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", + "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", + "requires": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" } }, - "node_modules/unified-engine": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-10.0.1.tgz", - "integrity": "sha512-lsj7VC8kNWhK87rGBhidklk4llgrEdJoOZHoQFbTZQ/fA22JqowUPM10bEf05eSZOR6UnUSrZ/mPWHrQsHGm7g==", - "dependencies": { - "@types/concat-stream": "^2.0.0", - "@types/debug": "^4.0.0", - "@types/is-empty": "^1.0.0", - "@types/node": "^18.0.0", - "@types/unist": "^2.0.0", - "concat-stream": "^2.0.0", - "debug": "^4.0.0", - "fault": "^2.0.0", - "glob": "^8.0.0", - "ignore": "^5.0.0", - "is-buffer": "^2.0.0", - "is-empty": "^1.0.0", - "is-plain-obj": "^4.0.0", - "load-plugin": "^5.0.0", - "parse-json": "^6.0.0", - "to-vfile": "^7.0.0", - "trough": "^2.0.0", - "unist-util-inspect": "^7.0.0", - "vfile-message": "^3.0.0", - "vfile-reporter": "^7.0.0", - "vfile-statistics": "^2.0.0", - "yaml": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "mdast-util-gfm-footnote": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", + "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" } }, - "node_modules/unified-engine/node_modules/@types/node": { - "version": "18.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.1.tgz", - "integrity": "sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg==" + "mdast-util-gfm-strikethrough": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz", + "integrity": "sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + } }, - "node_modules/unified-engine/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" + "mdast-util-gfm-table": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", + "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", + "requires": { + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" } }, - "node_modules/unified-engine/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/unified-engine/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "mdast-util-gfm-task-list-item": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", + "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" } }, - "node_modules/unified-engine/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "mdast-util-heading-style": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.0.tgz", + "integrity": "sha512-q9+WW2hJduW51LgV2r/fcU5wIt2GLFf0yYHxyi0f2aaxnC63ErBSOAJlhP6nbQ6yeG5rTCozbwOi4QNDPKV0zw==", + "requires": { + "@types/mdast": "^3.0.0" } }, - "node_modules/unified-engine/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/unified-lint-rule": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.1.1.tgz", - "integrity": "sha512-vsLHyLZFstqtGse2gvrGwasOmH8M2y+r2kQMoDSWzSqUkQx2MjHjvZuGSv5FUaiv4RQO1bHRajy7lSGp7XWq5A==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "mdast-util-mdx-expression": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.0.tgz", + "integrity": "sha512-9kTO13HaL/ChfzVCIEfDRdp1m5hsvsm6+R8yr67mH+KS2ikzZ0ISGLPTbTswOFpLLlgVHO9id3cul4ajutCvCA==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" } }, - "node_modules/unified-message-control": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz", - "integrity": "sha512-1b92N+VkPHftOsvXNOtkJm4wHlr+UDmTBF2dUzepn40oy9NxanJ9xS1RwUBTjXJwqr2K0kMbEyv1Krdsho7+Iw==", - "dependencies": { + "mdast-util-to-markdown": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", + "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", + "requires": { + "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit": "^3.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" } }, - "node_modules/unified-message-control/node_modules/unist-util-visit": { + "mdast-util-to-string": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromark": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", + "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, - "node_modules/unified-message-control/node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-core-commonmark": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", + "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" } }, - "node_modules/unist-util-generated": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", - "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-extension-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", + "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", + "requires": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/unist-util-inspect": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.1.tgz", - "integrity": "sha512-gEPeSrsYXus8012VJ00p9uZC8D0iogtLLiHlBgvS61hU22KNKduQhMKezJm83viHlLf3TYS2y9SDEFglWPDMKw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-extension-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-extension-gfm-footnote": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", + "requires": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/unist-util-position": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", - "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-extension-gfm-strikethrough": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", + "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/unist-util-visit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", - "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-extension-gfm-table": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", + "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/unist-util-visit-parents": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", - "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-extension-gfm-tagfilter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", + "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", + "requires": { + "micromark-util-types": "^1.0.0" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" + "micromark-extension-gfm-task-list-item": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", + "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/unpipe": { + "micromark-factory-destination": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" + "micromark-factory-label": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", + "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + "micromark-factory-space": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "node_modules/util-deprecate": { + "micromark-factory-title": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", + "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" + "micromark-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "requires": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" + "micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "requires": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dependencies": { - "builtins": "^1.0.3" + "micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "requires": { + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/validate-npm-package-name/node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + "micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } }, - "node_modules/vfile": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", - "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", - "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "requires": { + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-decode-string": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", + "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/vfile-reporter": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.4.tgz", - "integrity": "sha512-4cWalUnLrEnbeUQ+hARG5YZtaHieVK3Jp4iG5HslttkVl+MHunSGNAIrODOTLbtjWsNZJRMCkL66AhvZAYuJ9A==", - "dependencies": { - "@types/supports-color": "^8.0.0", - "string-width": "^5.0.0", - "supports-color": "^9.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-sort": "^3.0.0", - "vfile-statistics": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "micromark-util-encode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", + "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==" }, - "node_modules/vfile-reporter/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "micromark-util-html-tag-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==" + }, + "micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "requires": { + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/vfile-reporter/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "requires": { + "micromark-util-types": "^1.0.0" + } }, - "node_modules/vfile-reporter/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-sanitize-uri": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", + "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", + "requires": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/vfile-reporter/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "micromark-util-subtokenize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", + "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "requires": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/vfile-reporter/node_modules/supports-color": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", - "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "micromark-util-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", + "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==" + }, + "micromark-util-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", + "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, - "node_modules/vfile-sort": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", - "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", - "dependencies": { - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" } }, - "node_modules/vfile-statistics": { + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp-infer-owner": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", - "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", - "dependencies": { - "vfile-message": "^3.0.0" + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vm2": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz", - "integrity": "sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ==", "dependencies": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - }, - "bin": { - "vm2": "bin/vm2" - }, - "engines": { - "node": ">=6.0" + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } } }, - "node_modules/walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "nimma": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/nimma/-/nimma-0.2.2.tgz", + "integrity": "sha512-V52MLl7BU+tH2Np9tDrIXK8bql3MVUadnMIl/0/oZSGC9keuro0O9UUv9QKp0aMvtN8HRew4G7byY7H4eWsxaQ==", + "requires": { + "@jsep-plugin/regex": "^1.0.1", + "@jsep-plugin/ternary": "^1.0.2", + "astring": "^1.8.1", + "jsep": "^1.2.0", + "jsonpath-plus": "^6.0.1", + "lodash.topath": "^4.5.2" } }, - "node_modules/wolfy87-eventemitter": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", - "integrity": "sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==" - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==", - "engines": { - "node": "*" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" - }, - "node_modules/yargs": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", - "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@asyncapi/specs": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/@asyncapi/specs/-/specs-2.14.0.tgz", - "integrity": "sha512-hHsYF6XsYNIKb1P2rXaooF4H+uKKQ4b/Ljxrk3rZ3riEDiSxMshMEfb1fUlw9Yj4V4OmJhjXwkNvw8W59AXv1A==" - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jsep-plugin/regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.2.tgz", - "integrity": "sha512-Nn/Bcaww8zOebMDqNmGlhAWPWhIr/8S8lGIgaB/fSqev5xaO5uKy5i4qvTh63GpR+VzKqimgxDdcxdcRuCJXSw==", - "requires": {} - }, - "@jsep-plugin/ternary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsep-plugin/ternary/-/ternary-1.1.2.tgz", - "integrity": "sha512-gXguJc09uCrqWt1MD7L1+ChO32g4UH4BYGpHPoQRLhyU7pAPPRA7cvKbyjoqhnUlLutiXvLzB5hVVawPKax8jw==", - "requires": {} - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "wrappy": "1" } }, - "@npmcli/config": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-4.2.0.tgz", - "integrity": "sha512-imWNz5dNWb2u+y41jyxL2WB389tkhu3a01Rchn16O/ur6GrnKySgOqdNG3N/9Z+mqxdISMEGKXI/POCauzz0dA==", + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "requires": { - "@npmcli/map-workspaces": "^2.0.2", - "ini": "^3.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "proc-log": "^2.0.0", - "read-package-json-fast": "^2.0.3", - "semver": "^7.3.5", - "walk-up-path": "^1.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" } }, - "@npmcli/map-workspaces": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", - "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", + "pac-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", + "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==" - }, - "@redocly/ajv": { - "version": "8.6.4", - "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.6.4.tgz", - "integrity": "sha512-y9qNj0//tZtWB2jfXNK3BX18BSBp9zNR7KE7lMysVHwbZtY392OJCjm6Rb/h4UHH2r1AqjNEHFD6bRn+DqU9Mw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "@redocly/openapi-cli": { - "version": "1.0.0-beta.95", - "resolved": "https://registry.npmjs.org/@redocly/openapi-cli/-/openapi-cli-1.0.0-beta.95.tgz", - "integrity": "sha512-pl/OAeKh/psk6kF9SZjRieJK15T6T5GYcKVeBHvT7vtuhIBRBkrLC3bf3BhiMQx49BdSTB7Tk4/0LFPy0zr1MA==", - "requires": { - "@redocly/openapi-core": "1.0.0-beta.95", - "@types/node": "^14.11.8", - "assert-node-version": "^1.0.3", - "chokidar": "^3.5.1", - "colorette": "^1.2.0", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "handlebars": "^4.7.6", - "portfinder": "^1.0.26", - "simple-websocket": "^9.0.0", - "yargs": "17.0.1" - } - }, - "@redocly/openapi-core": { - "version": "1.0.0-beta.95", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.0.0-beta.95.tgz", - "integrity": "sha512-7Nnc4Obp/1lbrjNjD33oOnZCuoJa8awhBCEyyayPWGQFp1SkhjpZJnfnKkFuYbQzMjTIAvEeSp9DOQK/E0fgEA==", - "requires": { - "@redocly/ajv": "^8.6.4", - "@types/node": "^14.11.8", - "colorette": "^1.2.0", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "lodash.isequal": "^4.5.0", - "minimatch": "^3.0.4", - "node-fetch": "^2.6.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" - } - }, - "@rollup/plugin-commonjs": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", - "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - } - } - }, - "@stoplight/better-ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stoplight/better-ajv-errors/-/better-ajv-errors-1.0.1.tgz", - "integrity": "sha512-rgxT+ZMeZbYRiOLNk6Oy6e/Ig1iQKo0IL8v/Y9E/0FewzgtkGs/p5dMeUpIFZXWj3RZaEPmfL9yh0oUEmNXZjg==", - "requires": { - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "@stoplight/json": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.17.0.tgz", - "integrity": "sha512-WW0z2bb0D4t8FTl+zNTCu46J8lEOsrUhBPgwEYQ3Ri2Y0MiRE4U1/9ZV8Ki+pIJznZgY9i42bbFwOBxyZn5/6w==", - "requires": { - "@stoplight/ordered-object-literal": "^1.0.2", - "@stoplight/types": "^12.3.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" - } - }, - "@stoplight/json-ref-readers": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@stoplight/json-ref-readers/-/json-ref-readers-1.2.2.tgz", - "integrity": "sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==", - "requires": { - "node-fetch": "^2.6.0", - "tslib": "^1.14.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@stoplight/json-ref-resolver": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@stoplight/json-ref-resolver/-/json-ref-resolver-3.1.3.tgz", - "integrity": "sha512-SgoKXwVnlpIZUyAFX4W79eeuTWvXmNlMfICZixL16GZXnkjcW+uZnfmAU0ZIjcnaTgaI4mjfxn8LAP2KR6Cr0A==", - "requires": { - "@stoplight/json": "^3.17.0", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^12.3.0", - "@types/urijs": "^1.19.16", - "dependency-graph": "~0.11.0", - "fast-memoize": "^2.5.2", - "immer": "^9.0.6", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "tslib": "^2.3.1", - "urijs": "^1.19.6" - } - }, - "@stoplight/lifecycle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@stoplight/lifecycle/-/lifecycle-2.3.2.tgz", - "integrity": "sha512-v0u8p27FA/eg04b4z6QXw4s0NeeFcRzyvseBW0+k/q4jtpg7EhVCqy42EbbbU43NTNDpIeQ81OcvkFz+6CYshw==", - "requires": { - "wolfy87-eventemitter": "~5.2.8" - } - }, - "@stoplight/ordered-object-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.3.tgz", - "integrity": "sha512-cjJ7PPkhgTXNMTkevAlmyrx9xOOCaI3c6rEeYb6VitL1o1WcZtrz9KyFyISmTmUa7yYTiy2IS/ud9S8s2sn3+A==" - }, - "@stoplight/path": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz", - "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==" - }, - "@stoplight/spectral-cli": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-cli/-/spectral-cli-6.4.2.tgz", - "integrity": "sha512-pVj/BApBC/29URqLZ05nsYxvkzni4tu71jFA1Sv7hvZeX11KStMgYWVAfLRmOswMJ5rGK6UFRJA1GRSBw1Dtqw==", - "requires": { - "@rollup/plugin-commonjs": "^20.0.0", - "@stoplight/json": "3.17.0", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-core": "^1.5.1", - "@stoplight/spectral-parsers": "^1.0.1", - "@stoplight/spectral-ref-resolver": "1.0.1", - "@stoplight/spectral-ruleset-bundler": "^1.0.0", - "@stoplight/spectral-ruleset-migrator": "^1.5.0", - "@stoplight/spectral-rulesets": ">=1", - "@stoplight/spectral-runtime": "^1.1.0", - "@stoplight/types": "12.3.0", - "chalk": "4.1.2", - "cliui": "7.0.4", - "eol": "0.9.1", - "fast-glob": "3.2.7", - "lodash": "~4.17.21", - "pony-cause": "^1.0.0", - "proxy-agent": "5.0.0", - "stacktracey": "^2.1.7", - "strip-ansi": "6.0", - "text-table": "0.2", - "tslib": "^2.3.0", - "yargs": "17.3.1" - }, - "dependencies": { - "yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" - } - } - }, - "@stoplight/spectral-core": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.12.4.tgz", - "integrity": "sha512-LArBw61vR3vvMN+QDxIP5Hq+Ms5YB0spoJyutVjOkrLpEvuObIODmU3eMTJ54+TjZ+4R+MbyzxpjqEYXif5pQw==", - "requires": { - "@stoplight/better-ajv-errors": "1.0.1", - "@stoplight/json": "~3.18.1", - "@stoplight/lifecycle": "2.3.2", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-parsers": "^1.0.0", - "@stoplight/spectral-ref-resolver": "^1.0.0", - "@stoplight/spectral-runtime": "^1.0.0", - "@stoplight/types": "~13.2.0", - "@types/json-schema": "^7.0.11", - "ajv": "^8.6.0", - "ajv-errors": "~3.0.0", - "ajv-formats": "~2.1.0", - "blueimp-md5": "2.18.0", - "jsonpath-plus": "6.0.1", - "lodash": "~4.17.21", - "lodash.topath": "^4.5.2", - "minimatch": "3.1.2", - "nimma": "0.2.2", - "pony-cause": "^1.0.0", - "simple-eval": "1.0.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "@stoplight/json": { - "version": "3.18.1", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.18.1.tgz", - "integrity": "sha512-QmELAqBS8DC+8YuG7+OvDVP6RaUVi8bzN0KKW2UEcZg+0a1sqeeZgfW079AmJIZg8HEN7udAt4iozIB8Dm0t1Q==", - "requires": { - "@stoplight/ordered-object-literal": "^1.0.2", - "@stoplight/types": "^13.0.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" - } - }, - "@stoplight/types": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.2.0.tgz", - "integrity": "sha512-V3BRfzWEAcCpICGQh/WW2LX4rcB2KagQ7/msf0BDTCF5qpFMSwOxcjv25k1NUMVQSh3qwGfGoka/gYGA5m+NQA==", - "requires": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - } - } - } - }, - "@stoplight/spectral-formats": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-formats/-/spectral-formats-1.2.0.tgz", - "integrity": "sha512-idvn7r8fvQjY/KeJpKgXQ5eJhce6N6/KoKWMPSh5yyvYDpn+bkU4pxAD79jOJaDnIyKJd1jjTPEJWnxbS0jj6A==", - "requires": { - "@stoplight/json": "^3.17.0", - "@stoplight/spectral-core": "^1.8.0", - "@types/json-schema": "^7.0.7", - "tslib": "^2.3.1" - } - }, - "@stoplight/spectral-functions": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-functions/-/spectral-functions-1.6.1.tgz", - "integrity": "sha512-f4cFtbI35bQtY0t4fYhKtS+/nMU3UsAeFlqm4tARGGG5WjOv4ieCFNFbgodKNiO3F4O+syMEjVQuXlBNPuY7jw==", - "requires": { - "@stoplight/better-ajv-errors": "1.0.1", - "@stoplight/json": "~3.17.1", - "@stoplight/spectral-core": "^1.7.0", - "@stoplight/spectral-formats": "^1.0.0", - "@stoplight/spectral-runtime": "^1.1.0", - "@stoplight/types": "12.3.0", - "ajv": "^8.6.3", - "ajv-draft-04": "~1.0.0", - "ajv-errors": "~3.0.0", - "ajv-formats": "~2.1.0", - "lodash": "~4.17.21", - "tslib": "^2.3.0" - }, - "dependencies": { - "@stoplight/json": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.17.2.tgz", - "integrity": "sha512-NwIVzanXRUy291J5BMkncCZRMG1Lx+aq+VidGQgfkJjgo8vh1Y/PSAz7fSU8gVGSZBCcqmOkMI7R4zw7DlfTwA==", - "requires": { - "@stoplight/ordered-object-literal": "^1.0.2", - "@stoplight/types": "^12.3.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" - } - } - } - }, - "@stoplight/spectral-parsers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-parsers/-/spectral-parsers-1.0.1.tgz", - "integrity": "sha512-JGKlrTxhjUzIGo2FOCf8Qp0WKTWXedoRNPovqYPE8pAp08epqU8DzHwl/i46BGH5yfTmouKMZgBN/PV2+Cr5jw==", - "requires": { - "@stoplight/json": "3.17.0", - "@stoplight/types": "12.3.0", - "@stoplight/yaml": "4.2.2", - "tslib": "^2.3.1" - } - }, - "@stoplight/spectral-ref-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ref-resolver/-/spectral-ref-resolver-1.0.1.tgz", - "integrity": "sha512-0tY7nTOccvTsa3c4QbSWfJ8wGfPO1RXvmKnmBjuyLfoTMNuhkHPII9gKhCjygsshzsBLxs2IyRHZYhWYVnEbCA==", - "requires": { - "@stoplight/json-ref-readers": "1.2.2", - "@stoplight/json-ref-resolver": "3.1.3", - "@stoplight/spectral-runtime": "^1.0.0", - "dependency-graph": "0.11.0", - "tslib": "^2.3.1" - } - }, - "@stoplight/spectral-ruleset-bundler": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-bundler/-/spectral-ruleset-bundler-1.3.0.tgz", - "integrity": "sha512-6Tif7GQL18F0LN1+FhEmhFWgE/TiWudb/pFl4DC7oS1QRoutB7QJPqIfVFSmteToPidxlrIbC6VAXSyEhlpDVQ==", - "requires": { - "@rollup/plugin-commonjs": "^21.0.1", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-core": ">=1", - "@stoplight/spectral-formats": ">=1", - "@stoplight/spectral-functions": ">=1", - "@stoplight/spectral-parsers": ">=1", - "@stoplight/spectral-ref-resolver": ">=1", - "@stoplight/spectral-ruleset-migrator": "^1.5.2", - "@stoplight/spectral-rulesets": ">=1", - "@stoplight/spectral-runtime": "^1.1.0", - "@stoplight/types": "^12.3.0", - "@types/node": "*", - "pony-cause": "1.1.1", - "rollup": "~2.67.0", - "tslib": "^2.3.1", - "validate-npm-package-name": "3.0.0" - }, - "dependencies": { - "@rollup/plugin-commonjs": { - "version": "21.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.1.0.tgz", - "integrity": "sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "rollup": { - "version": "2.67.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.3.tgz", - "integrity": "sha512-G/x1vUwbGtP6O5ZM8/sWr8+p7YfZhI18pPqMRtMYMWSbHjKZ/ajHGiM+GWNTlWyOR0EHIdT8LHU+Z4ciIZ1oBw==", - "requires": { - "fsevents": "~2.3.2" - } - } - } - }, - "@stoplight/spectral-ruleset-migrator": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.3.tgz", - "integrity": "sha512-1TlJgNxIqlcafzrH6gsGpQQcVkFhndib5piMNXVg9xshJ42l2yC6A0AUAixUC+ODJ5098DR7SjIYBVKk+CTQSw==", - "requires": { - "@stoplight/json": "~3.17.0", - "@stoplight/ordered-object-literal": "1.0.2", - "@stoplight/path": "1.3.2", - "@stoplight/spectral-functions": "^1.0.0", - "@stoplight/spectral-runtime": "^1.1.0", - "@stoplight/types": "^12.3.0", - "@stoplight/yaml": "4.2.2", - "@types/node": "*", - "ajv": "^8.6.0", - "ast-types": "0.14.2", - "astring": "^1.7.5", - "reserved": "0.1.2", - "tslib": "^2.3.1", - "validate-npm-package-name": "3.0.0" - }, - "dependencies": { - "@stoplight/ordered-object-literal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.2.tgz", - "integrity": "sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==" - } - } - }, - "@stoplight/spectral-rulesets": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-rulesets/-/spectral-rulesets-1.11.0.tgz", - "integrity": "sha512-0zFbxIuoWmGrkl2txOuaEDF8o6aoKDpMAYOG2oDfmmX9FhXX3c3ivIy80hyb2tMKkIYuqqx/zwIiOuww5S8iUA==", - "requires": { - "@asyncapi/specs": "^2.14.0", - "@stoplight/better-ajv-errors": "1.0.1", - "@stoplight/json": "^3.17.0", - "@stoplight/spectral-core": "^1.8.1", - "@stoplight/spectral-formats": "^1.2.0", - "@stoplight/spectral-functions": "^1.5.1", - "@stoplight/spectral-runtime": "^1.1.1", - "@stoplight/types": "^12.5.0", - "@types/json-schema": "^7.0.7", - "ajv": "^8.8.2", - "ajv-formats": "~2.1.0", - "json-schema-traverse": "^1.0.0", - "lodash": "~4.17.21", - "tslib": "^2.3.0" - }, - "dependencies": { - "@stoplight/types": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.5.0.tgz", - "integrity": "sha512-dwqYcDrGmEyUv5TWrDam5TGOxU72ufyQ7hnOIIDdmW5ezOwZaBFoR5XQ9AsH49w7wgvOqB2Bmo799pJPWnpCbg==", - "requires": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - } - } - } - }, - "@stoplight/spectral-runtime": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-runtime/-/spectral-runtime-1.1.2.tgz", - "integrity": "sha512-fr5zRceXI+hrl82yAVoME+4GvJie8v3wmOe9tU+ZLRRNonizthy8qDi0Z/z4olE+vGreSDcuDOZ7JjRxFW5kTw==", - "requires": { - "@stoplight/json": "^3.17.0", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^12.3.0", - "abort-controller": "^3.0.0", - "lodash": "^4.17.21", - "node-fetch": "^2.6.7", - "tslib": "^2.3.1" - } - }, - "@stoplight/types": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-12.3.0.tgz", - "integrity": "sha512-hgzUR1z5BlYvIzUeFK5pjs5JXSvEutA9Pww31+dVicBlunsG1iXopDx/cvfBY7rHOrgtZDuvyeK4seqkwAZ6Cg==", - "requires": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - } - }, - "@stoplight/yaml": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.2.tgz", - "integrity": "sha512-N086FU8pmSpjc5TvMBjmlTniZVh3OXzmEh6SYljSLiuv6aMxgjyjf13YrAlUqgu0b4b6pQ5zmkjrfo9i0SiLsw==", - "requires": { - "@stoplight/ordered-object-literal": "^1.0.1", - "@stoplight/types": "^12.0.0", - "@stoplight/yaml-ast-parser": "0.0.48", - "tslib": "^2.2.0" - } - }, - "@stoplight/yaml-ast-parser": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz", - "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==" - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - }, - "@types/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw==", - "requires": { - "@types/node": "*" - } - }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "requires": { - "@types/ms": "*" - } - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "requires": { - "@types/estree": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "requires": { - "@types/unist": "*" - } - }, - "@types/is-empty": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.1.tgz", - "integrity": "sha512-a3xgqnFTuNJDm1fjsTjHocYJ40Cz3t8utYpi5GNaxzrJC2HSD08ym+whIL7fNqiqBCdM9bcqD1H/tORWAFXoZw==" - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "requires": { - "@types/unist": "*" - } - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "14.18.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.22.tgz", - "integrity": "sha512-qzaYbXVzin6EPjghf/hTdIbnVW1ErMx8rPzwRNJhlbyJhu2SyqlvjGOY/tbUt6VFyzg56lROcOeSQRInpt63Yw==" - }, - "@types/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==" - }, - "@types/text-table": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", - "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==" - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "@types/urijs": { - "version": "1.19.19", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", - "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==" - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "requires": {} - }, - "ajv-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", - "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", - "requires": {} - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "as-table": { - "version": "1.0.55", - "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", - "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", - "requires": { - "printable-characters": "^1.0.42" - } - }, - "assert-node-version": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/assert-node-version/-/assert-node-version-1.0.3.tgz", - "integrity": "sha512-XcKBGJ1t0RrCcus9dQX57FER4PTEz/+Tee2jj+EdFIGyw5j8hwDNXZzgRYLQ916twVjSuA47adrZsSxLbpEX9A==", - "requires": { - "expected-node-version": "^1.0.0", - "semver": "^5.0.3" - } - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "requires": { - "tslib": "^2.0.1" - } - }, - "astring": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz", - "integrity": "sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==" - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "blueimp-md5": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz", - "integrity": "sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "requires": { - "semver": "^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "camelcase": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", - "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==" - }, - "ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "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==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "requires": { - "character-entities": "^2.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "degenerator": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", - "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", - "requires": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.8" - }, - "dependencies": { - "ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "requires": { - "tslib": "^2.0.1" - } - } - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" - }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "eol": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", - "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "expected-node-version": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/expected-node-version/-/expected-node-version-1.0.2.tgz", - "integrity": "sha512-OSaCdgF02srujDqJz1JWGpqk8Rq3uNYHLmtpBHJrZN3BvuMvzijJMqRVxZN1qLJtKVwjXhmOp+lfsRUqx8n54w==" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fast-memoize": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "requires": { - "format": "^0.2.0" - } - }, - "file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==" - }, - "filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-source": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", - "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", - "requires": { - "data-uri-to-buffer": "^2.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "data-uri-to-buffer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", - "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==" - } - } - }, - "get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", - "requires": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "gh-pages": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", - "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", - "requires": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify": "^4.3.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "^8.1.0", - "globby": "^6.1.0" - } - }, - "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-promise": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz", - "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==", - "requires": { - "@types/glob": "*" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.13.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.1.tgz", - "integrity": "sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==" - } - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "immer": { - "version": "9.0.15", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", - "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==" - }, - "import-meta-resolve": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.0.3.tgz", - "integrity": "sha512-fpAppnBpZ3ymQ/dPP97TNsco1HB5+V9SYJ3chY50PP8xn4U/w+Y6ovWBmTImB/prmGsTjzPh8pQYY+EVBlr9mw==", - "requires": { - "builtins": "^5.0.0" - } - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", - "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==" - }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "requires": { - "has": "^1.0.3" - } - }, - "is-empty": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", - "integrity": "sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "requires": { - "@types/estree": "*" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "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" - } - }, - "jsep": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.6.tgz", - "integrity": "sha512-o7fP1eZVROIChADx7HKiwGRVI0tUqgUUGhaok6DP7cMxpDeparuooREDBDeNk2G5KIB49MBSkRYsCOu4PmZ+1w==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "jsonc-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", - "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonpath-plus": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", - "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==" - }, - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" - }, - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levenshtein-edit-distance": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/levenshtein-edit-distance/-/levenshtein-edit-distance-1.0.0.tgz", - "integrity": "sha512-gpgBvPn7IFIAL32f0o6Nsh2g+5uOvkt4eK9epTfgE4YVxBxwVhJ/p1888lMm/u8mXdu1ETLSi6zeEmkBI+0F3w==" - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==" - }, - "load-plugin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-5.0.0.tgz", - "integrity": "sha512-jTz8tvC0BTMtof27lTSV5SAOnCRT0Z++k+S3QeQ5CrF8ZAS5L2nhi3euf4ZhJyDkds+nOQGyPcFqdQZ9s8ELkg==", - "requires": { - "@npmcli/config": "^4.0.0", - "import-meta-resolve": "^2.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==" - }, - "lodash.topath": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==" - }, - "longest-streak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", - "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "markdown-table": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz", - "integrity": "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==" - }, - "mdast-comment-marker": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.1.0.tgz", - "integrity": "sha512-/+Cfm8A83PjkqjQDB9iYqHESGuXlriCWAwRGPJjkYmxXrF4r6saxeUlOKNrf+SogTwg9E8uyHRCFHLG6/BAAdA==", - "requires": { - "mdast-util-mdx-expression": "^1.1.0" - } - }, - "mdast-util-find-and-replace": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", - "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", - "requires": { - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-gfm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", - "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", - "requires": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-footnote": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-gfm-autolink-literal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", - "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", - "requires": { - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" - } - }, - "mdast-util-gfm-footnote": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", - "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-util-normalize-identifier": "^1.0.0" - } - }, - "mdast-util-gfm-strikethrough": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz", - "integrity": "sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - } - }, - "mdast-util-gfm-table": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", - "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", - "requires": { - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.3.0" - } - }, - "mdast-util-gfm-task-list-item": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", - "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - } - }, - "mdast-util-heading-style": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.0.tgz", - "integrity": "sha512-q9+WW2hJduW51LgV2r/fcU5wIt2GLFf0yYHxyi0f2aaxnC63ErBSOAJlhP6nbQ6yeG5rTCozbwOi4QNDPKV0zw==", - "requires": { - "@types/mdast": "^3.0.0" - } - }, - "mdast-util-mdx-expression": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.0.tgz", - "integrity": "sha512-9kTO13HaL/ChfzVCIEfDRdp1m5hsvsm6+R8yr67mH+KS2ikzZ0ISGLPTbTswOFpLLlgVHO9id3cul4ajutCvCA==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-to-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", - "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - } - }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromark": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", - "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", - "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", - "requires": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-footnote": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-autolink-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", - "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-footnote": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", - "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", - "requires": { - "micromark-core-commonmark": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", - "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-table": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", - "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-tagfilter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", - "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-task-list-item": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", - "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==" - }, - "micromark-util-html-tag-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", - "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==" - }, - "micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-sanitize-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", - "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==" - }, - "micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" - }, - "nimma": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/nimma/-/nimma-0.2.2.tgz", - "integrity": "sha512-V52MLl7BU+tH2Np9tDrIXK8bql3MVUadnMIl/0/oZSGC9keuro0O9UUv9QKp0aMvtN8HRew4G7byY7H4eWsxaQ==", - "requires": { - "@jsep-plugin/regex": "^1.0.1", - "@jsep-plugin/ternary": "^1.0.2", - "astring": "^1.8.1", - "jsep": "^1.2.0", - "jsonpath-plus": "^6.0.1", - "lodash.topath": "^4.5.2" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pac-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", - "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^5.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "pac-resolver": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz", - "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", - "requires": { - "degenerator": "^3.0.2", - "ip": "^1.1.5", - "netmask": "^2.0.2" - } - }, - "parse-json": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", - "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", - "requires": { - "@babel/code-frame": "^7.16.0", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^2.3.1", - "lines-and-columns": "^2.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" - }, - "pony-cause": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-1.1.1.tgz", - "integrity": "sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==" - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "printable-characters": { - "version": "1.0.42", - "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", - "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==" - }, - "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==" - }, - "propose": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", - "integrity": "sha512-Jary1vb+ap2DIwOGfyiadcK4x1Iu3pzpkDBy8tljFPmQvnc9ES3m1PMZOMiWOG50cfoAyYNtGeBzrp+Rlh4G9A==", - "requires": { - "levenshtein-edit-distance": "^1.0.0" - } - }, - "proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", - "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", - "requires": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^5.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "redoc-cli": { - "version": "0.13.16", - "resolved": "https://registry.npmjs.org/redoc-cli/-/redoc-cli-0.13.16.tgz", - "integrity": "sha512-/rqkqJV1r5xgnEFh6cSmv+sZuo/TGCXKRBKZwoC0rLny5N6WGx9YykJhe1jSM4XRbK3VDfrQtOJmPCaI1ut6gg==", - "requires": { - "chokidar": "^3.5.1", - "handlebars": "^4.7.7", - "isarray": "^2.0.5", - "mkdirp": "^1.0.4", - "mobx": "^6.3.2", - "node-libs-browser": "^2.2.1", - "react": "^17.0.1", - "react-dom": "^17.0.1", - "redoc": "2.0.0-rc.72", - "styled-components": "^5.3.0", - "yargs": "^17.3.1" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==" - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==" - }, - "@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "requires": { - "@emotion/memoize": "0.7.4" - } - }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "@exodus/schemasafe": { - "version": "1.0.0-rc.6", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.0.0-rc.6.tgz", - "integrity": "sha512-dDnQizD94EdBwEj/fh3zPRa/HWCS9O5au2PuHhZBbuM3xWHxuaKzPBOEWze7Nn0xW68MIpZ7Xdyn1CoCpjKCuQ==" - }, - "@redocly/ajv": { - "version": "8.6.4", - "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.6.4.tgz", - "integrity": "sha512-y9qNj0//tZtWB2jfXNK3BX18BSBp9zNR7KE7lMysVHwbZtY392OJCjm6Rb/h4UHH2r1AqjNEHFD6bRn+DqU9Mw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "@redocly/openapi-core": { - "version": "1.0.0-beta.97", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.0.0-beta.97.tgz", - "integrity": "sha512-3WW9/6flosJuRtU3GI0Vw39OYFZqqXMDCp5TLa3EjXOb7Nm6AZTWRb3Y+I/+UdNJ/NTszVJkQczoa1t476ekiQ==", - "requires": { - "@redocly/ajv": "^8.6.4", - "@types/node": "^14.11.8", - "colorette": "^1.2.0", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "lodash.isequal": "^4.5.0", - "minimatch": "^5.0.1", - "node-fetch": "^2.6.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" - }, - "dependencies": { - "@types/node": { - "version": "14.18.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.17.tgz", - "integrity": "sha512-oajWz4kOajqpKJMPgnCvBajPq8QAvl2xIWoFjlAJPKGu6n7pjov5SxGE45a+0RxHDoo4ycOMoZw1SCOWtDERbw==" - } - } - }, - "@redocly/react-dropdown-aria": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@redocly/react-dropdown-aria/-/react-dropdown-aria-2.0.12.tgz", - "integrity": "sha512-feQEZlyBvQsbT/fvpJ4jJ5OLGaUPpnskHYDsY8DGpPymN+HUeDQrqkBEbbKRwMKidFTI2cxk2kJNNTnvdS9jyw==", - "requires": {} -}, -"@types/chokidar": { - "version": "https://registry.npmjs.org/@types/chokidar/-/chokidar-2.1.3.tgz", - "integrity": "sha512-6qK3xoLLAhQVTucQGHTySwOVA1crHRXnJeLwqK6KIFkkKa2aoMFXh+WEi8PotxDtvN6MQJLyYN9ag9P6NLV81w==", - "extraneous": true, - "requires": { - "chokidar": "*" - } - }, - "@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", - "peer": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "peer": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "peer": true - }, - "@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==" - }, - "@types/node": { - "version": "15.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", - "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", - "peer": true - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "peer": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "peer": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "peer": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "peer": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "peer": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "peer": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "peer": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "peer": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "peer": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "peer": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "peer": true - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "peer": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peer": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "dependencies": { - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "peer": true - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peer": true, - "requires": {} - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "babel-plugin-styled-components": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz", - "integrity": "sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "peer": true, - "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - } - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "peer": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "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=" - }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "caniuse-lite": { - "version": "1.0.30001303", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001303.tgz", - "integrity": "sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ==", - "peer": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "peer": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "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==", - "peer": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "core-js": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz", - "integrity": "sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==", - "peer": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=" - }, - "css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decko": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz", - "integrity": "sha1-/UPHNelnuAEzBohKVvvmZZlraBc=" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "dompurify": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.5.tgz", - "integrity": "sha512-kD+f8qEaa42+mjdOpKeztu9Mfx5bv9gVLO6K9jRx4uGvh6Wv06Srn4jr1wPNY2OOUGGSKHNFN+A8MA3v0E0QAQ==" - }, - "electron-to-chromium": { - "version": "1.4.54", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.54.tgz", - "integrity": "sha512-jRAoneRdSxnpRHO0ANpnEUtQHXxlgfVjrLOnQSisw1ryjXJXvS0pJaR/v2B7S++/tRjgEDp4Sjn5nmgb6uTySw==", - "peer": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "peer": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "peer": true - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "peer": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "peer": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "peer": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "peer": true - }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "foreach": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "peer": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "peer": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "http2-client": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", - "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==" - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "jest-worker": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", - "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", - "peer": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "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" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "peer": true - }, - "json-pointer": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", - "requires": { - "foreach": "^2.0.4" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "peer": true - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, - "mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha1-GA8fnr74sOY45BZq1S24eb6y/8U=" - }, - "marked": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.15.tgz", - "integrity": "sha512-esX5lPdTfG4p8LDkv+obbRCyOKzB+820ZZyMOXJZygZBHrH9b3xXR64X4kT3sPe9Nx8qQXbmcz6kFSMt4Nfk6Q==" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "peer": true - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "peer": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "peer": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "mobx": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.3.2.tgz", - "integrity": "sha512-xGPM9dIE1qkK9Nrhevp0gzpsmELKU4MFUJRORW/jqxVFIHHWIoQrjDjL8vkwoJYY3C2CeVJqgvl38hgKTalTWg==" - }, - "mobx-react": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-7.2.1.tgz", - "integrity": "sha512-LZS99KFLn75VWDXPdRJhILzVQ7qLcRjQbzkK+wVs0Qg4kWw5hOI2USp7tmu+9zP9KYsVBmKyx2k/8cTTBfsymw==", - "requires": { - "mobx-react-lite": "^3.2.0" - } - }, - "mobx-react-lite": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.2.3.tgz", - "integrity": "sha512-7exWp1FV0M9dP08H9PIeHlJqDw4IdkQVRMfLYaZFMmlbzSS6ZU6p/kx392KN+rVf81hH3IQYewvRGQ70oiwmbw==", - "requires": {} - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-fetch-h2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", - "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", - "requires": { - "http2-client": "^1.2.5" - } - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node-readfiles": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", - "integrity": "sha1-271K8SE04uY1wkXvk//Pb2BnOl0=", - "requires": { - "es6-promise": "^3.2.1" - } - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "peer": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "oas-kit-common": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", - "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", - "requires": { - "fast-safe-stringify": "^2.0.7" - } - }, - "oas-linter": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", - "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", - "requires": { - "@exodus/schemasafe": "^1.0.0-rc.2", - "should": "^13.2.1", - "yaml": "^1.10.0" - } - }, - "oas-resolver": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", - "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", - "requires": { - "node-fetch-h2": "^2.3.0", - "oas-kit-common": "^1.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - } - }, - "oas-schema-walker": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", - "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==" - }, - "oas-validator": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", - "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", - "requires": { - "call-me-maybe": "^1.0.1", - "oas-kit-common": "^1.0.8", - "oas-linter": "^3.2.2", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "reftools": "^1.1.9", - "should": "^13.2.1", - "yaml": "^1.10.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "openapi-sampler": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.3.0.tgz", - "integrity": "sha512-2QfjK1oM9Sv0q82Ae1RrUe3yfFmAyjF548+6eAeb+h/cL1Uj51TW4UezraBEvwEdzoBgfo4AaTLVFGTKj+yYDw==", - "requires": { - "@types/json-schema": "^7.0.7", - "json-pointer": "0.6.2" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "perfect-scrollbar": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", - "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "peer": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" - }, - "polished": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.4.tgz", - "integrity": "sha512-Nq5Mbza+Auo7N3sQb1QMFaQiDO+4UexWuSGR7Cjb4Sw11SZIJcrrFtiZ+L0jT9MBsUsxDboHVASbCLbE1rnECg==", - "requires": { - "@babel/runtime": "^7.16.7" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "prismjs": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", - "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "peer": true - }, - "react-tabs": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.3.tgz", - "integrity": "sha512-jx325RhRVnS9DdFbeF511z0T0WEqEoMl1uCE3LoZ6VaZZm7ytatxbum0B8bCTmaiV0KsU+4TtLGTGevCic7SWg==", - "requires": { - "clsx": "^1.1.0", - "prop-types": "^15.5.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "redoc": { - "version": "2.0.0-rc.72", - "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.0.0-rc.72.tgz", - "integrity": "sha512-IX/WvVh4N3zwo4sAjnQFz6ffIUd6G47hcflxPtrpxblJaeOy0MBSzzY8f179WjssWPYcSmmndP5v0hgEXFiimg==", - "requires": { - "@redocly/openapi-core": "^1.0.0-beta.97", - "classnames": "^2.3.1", - "decko": "^1.2.0", - "dompurify": "^2.2.8", - "eventemitter3": "^4.0.7", - "json-pointer": "^0.6.2", - "lunr": "^2.3.9", - "mark.js": "^8.11.1", - "marked": "^4.0.15", - "mobx-react": "^7.2.0", - "openapi-sampler": "^1.3.0", - "path-browserify": "^1.0.1", - "perfect-scrollbar": "^1.5.1", - "polished": "^4.1.3", - "prismjs": "^1.27.0", - "prop-types": "^15.7.2", - "react-tabs": "^3.2.2", - "slugify": "~1.4.7", - "stickyfill": "^1.1.1", - "style-loader": "^3.3.1", - "swagger2openapi": "^7.0.6", - "url-template": "^2.0.8" - }, - "dependencies": { - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - } - } - }, - "reftools": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", - "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==" - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "peer": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "peer": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "requires": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "requires": { - "should-type": "^1.4.0" - } - }, - "should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", - "requires": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } - }, - "should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=" - }, - "should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "requires": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==" - }, - "slugify": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", - "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "stickyfill": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stickyfill/-/stickyfill-1.1.1.tgz", - "integrity": "sha1-OUE/7p0CXHSn5ZzuyyN4TMDxfwI=" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "requires": {} - }, - "styled-components": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.0.tgz", - "integrity": "sha512-bPJKwZCHjJPf/hwTJl6TbkSZg/3evha+XPEizrZUGb535jLImwDUdjTNxXqjjaASt2M4qO4AVfoHJNe3XB/tpQ==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^0.8.8", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "swagger2openapi": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", - "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", - "requires": { - "call-me-maybe": "^1.0.1", - "node-fetch": "^2.6.1", - "node-fetch-h2": "^2.3.0", - "node-readfiles": "^0.2.0", - "oas-kit-common": "^1.0.8", - "oas-resolver": "^2.5.6", - "oas-schema-walker": "^1.1.5", - "oas-validator": "^5.0.8", - "reftools": "^1.1.9", - "yaml": "^1.10.0", - "yargs": "^17.0.1" - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "peer": true - }, - "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "peer": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "peer": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", - "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", - "peer": true, - "requires": { - "jest-worker": "^27.4.1", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - } - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "uglify-js": { - "version": "3.13.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.9.tgz", - "integrity": "sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g==", - "optional": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=" - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "peer": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "webpack": { - "version": "5.67.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz", - "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==", - "peer": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "peer": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4", + "get-uri": "3", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "5", + "pac-resolver": "^5.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "5" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } + "ms": "2.1.2" } }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" - }, - "yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "pac-resolver": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz", + "integrity": "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==", + "requires": { + "degenerator": "^3.0.2", + "ip": "^1.1.5", + "netmask": "^2.0.2" + } + }, + "parse-json": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", + "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", + "requires": { + "@babel/code-frame": "^7.16.0", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^2.3.1", + "lines-and-columns": "^2.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" + }, + "pony-cause": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-1.1.1.tgz", + "integrity": "sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "printable-characters": { + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", + "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==" + }, + "proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==" + }, + "propose": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", + "integrity": "sha512-Jary1vb+ap2DIwOGfyiadcK4x1Iu3pzpkDBy8tljFPmQvnc9ES3m1PMZOMiWOG50cfoAyYNtGeBzrp+Rlh4G9A==", + "requires": { + "levenshtein-edit-distance": "^1.0.0" + } + }, + "proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", + "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", + "requires": { + "agent-base": "^6.0.0", + "debug": "4", + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "lru-cache": "^5.1.1", + "pac-proxy-agent": "^5.0.0", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^5.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "ms": "2.1.2" } }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, "remark": { "version": "14.0.2", "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.2.tgz", @@ -15060,11 +8746,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -15078,51 +8759,6 @@ "jsep": "^1.1.2" } }, - "simple-websocket": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/simple-websocket/-/simple-websocket-9.1.0.tgz", - "integrity": "sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==", - "requires": { - "debug": "^4.3.1", - "queue-microtask": "^1.2.2", - "randombytes": "^2.1.0", - "readable-stream": "^3.6.0", - "ws": "^7.4.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -15216,21 +8852,6 @@ "ansi-regex": "^5.0.1" } }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "requires": { - "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15276,21 +8897,6 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "requires": { - "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, "trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -15314,12 +8920,6 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, - "uglify-js": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", - "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", - "optional": true - }, "unified": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", @@ -15722,11 +9322,6 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -15742,12 +9337,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} - }, "xregexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", @@ -15768,30 +9357,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==" }, - "yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" - }, - "yargs": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", - "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - }, "zwitch": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", diff --git a/package.json b/package.json index 272f0f20..8555b04a 100644 --- a/package.json +++ b/package.json @@ -1,30 +1,16 @@ { - "name": "api-spec", + "name": "stac-api-transaction-extension-spec", "version": "1.0.0-rc.1", - "description": "STAC API helpers to generate, serve and check the API spec.", - "repository": "https://github.com/radiantearth/stac-api-spec", + "description": "STAC API helpers to check the API spec.", + "repository": "https://github.com/stac-api-extensions/transaction", "license": "Apache-2.0", "scripts": { - "serve": "redoc-cli serve core/openapi.yaml --watch --options.expandResponses \"200,201,202,203,204\" --options.pathInMiddlePanel true", "check": "npm run check-markdown && npm run check-openapi", "check-markdown": "remark . --frail --ignore-pattern stac-spec/", - "check-openapi": "npm run check-openapi-core && npm run check-openapi-commons && npm run check-openapi-ogcapi-features && npm run check-openapi-item-search && npm run check-openapi-fragments && npm run check-openapi-collections && npm run check-openapi-children", - "check-openapi-core": "spectral lint core/openapi.yaml --ruleset .circleci/.spectral.yml", - "check-openapi-commons": "spectral lint core/commons.yaml --ruleset .circleci/.spectral-fragments.yml", - "check-openapi-ogcapi-features": "spectral lint ogcapi-features/openapi.yaml ogcapi-features/extensions/*/openapi.yaml --ruleset .circleci/.spectral.yml", - "check-openapi-item-search": "spectral lint item-search/openapi.yaml --ruleset .circleci/.spectral.yml", - "check-openapi-fragments": "spectral lint fragments/*/openapi.yaml --ruleset .circleci/.spectral-fragments.yml", - "check-openapi-collections": "spectral lint collections/openapi.yaml --ruleset .circleci/.spectral.yml", - "check-openapi-children": "spectral lint children/openapi.yaml --ruleset .circleci/.spectral.yml", - "build-openapi": ".circleci/build-openapi.sh", - "publish-openapi": "node .circleci/publish.js", - "check-stac-spec-changes": "git diff --quiet HEAD ${npm_config_compare_to} -- stac-spec" + "check-openapi": "spectral lint openapi.yaml --ruleset .circleci/.spectral-fragments.yml" }, "dependencies": { - "@redocly/openapi-cli": "^1.0.0-beta.94", "@stoplight/spectral-cli": "^6.4.2", - "gh-pages": "^4.0.0", - "redoc-cli": "^0.13.16", "remark-cli": "^11.0.0", "remark-lint": "^9.1.1", "remark-gfm": "^3.0.1", diff --git a/stac-api.gv b/stac-api.gv deleted file mode 100644 index ce078bd6..00000000 --- a/stac-api.gv +++ /dev/null @@ -1,110 +0,0 @@ -# All have self link to self (self edge) -# All have root link to root - -digraph g { - label = ; - labelloc = "t"; - fontsize = "24" - - graph [ - rankdir = "LR" - ]; - - node [ - fontsize = "16" - shape = "ellipse" - ]; - - edge [ - ]; - - "/" [ - label = "Landing Page\n/|links[rel=conformance]\l|links[rel=service-doc]\l|links[rel=service-desc]\l|links[rel=data]\l|links[rel=child]\l|links[rel=child]\l|links[rel=search]\l" - shape = "record" - ]; - - "collections" [ - label = " Collections\n/collections|collections[0].links[rel=self]\l|collections[1].links[rel=self]\l" - shape = "record" - ]; - - "collectionY" [ - label = " Collection y\n/collections/y|links[rel=items]\l" - shape = "record" - ]; - - "collectionX" [ - label = " Collection x\n/collections/x|links[rel=items]\l" - shape = "record" - ]; - - "service-desc" [ - label = "OpenAPI Spec\n/api" - shape = "record" - ]; - - "service-doc" [ - label = "Service Doc\n/api.html" - shape = "record" - ]; - - "conformance" [ - label = "Conformance\n/conformance" - shape = "record" - ]; - - "collectionY-items" [ - label = " Collection y Items\n/collections/y/items| features[0].links[rel=self]" - shape = "record" - ]; - - "collectionX-items" [ - label = " Collection x Items\n/collections/x/items| features[0].links[rel=self]" - shape = "record" - ]; - - "collectionY-item1" [ - label = " Item y:1\n/collections/y/items/1|links[rel=parent]\l|links[rel=collection]\l" - shape = "record" - ]; - - "collectionX-item1" [ - label = " Item x:1\n/collections/x/items/1|links[rel=parent]\l|links[rel=collection]\l" - shape = "record" - ]; - - "item-search" [ - label = " Item Search\n/items|features[0].links[rel=self]\l|features[1].links[rel=self]\l" - shape = "record" - ]; - - "/":l3 -> "collections":f0; - "/":l4 -> "collectionX":f0; - "/":l5 -> "collectionY":f0; - "/":l6 -> "item-search":f0; - "/":l7 -> "service-desc"; - "/":l8 -> "service-doc"; - "/":l9 -> "conformance"; - - "item-search":f1 -> "collectionX-item1":f0; - "item-search":f2 -> "collectionY-item1":f0; - - "collections":c2 -> "collectionY":f0; - "collections":c1 -> "collectionX":f0; - - "collectionY":l0 -> "collectionY-items":f0; - "collectionY-items":f1 -> "collectionY-item1":f0; - cxi2 [shape=point,width=0.01,height=0.01]; - cxi2 -> "collectionY":f0; - "collectionY-item1":l0 -> cxi2 [dir=none]; - "collectionY-item1":l1 -> cxi2 [dir=none]; - - "collectionX":l0 -> "collectionX-items":f0; - "collectionX-items":f1 -> "collectionX-item1":f0; - cxi1 [shape=point,width=0.01,height=0.01]; - cxi1 -> "collectionX":f0; - "collectionX-item1":l0 -> cxi1 [dir=none]; - "collectionX-item1":l1 -> cxi1 [dir=none]; - - -} diff --git a/stac-api.png b/stac-api.png deleted file mode 100644 index 330f9bfb19e4b938fa3211c1a7bfb41e9b47d63a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138282 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

!?py*#Tw6*1TB`-3pU1+N; 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%0DpvyAGhB; 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ð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�y}c@~?`q^2+EU@zv=Zno{(Df6jl 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 diff --git a/stac-spec/.circleci/config.yml b/stac-spec/.circleci/config.yml deleted file mode 100644 index 60cd9efe..00000000 --- a/stac-spec/.circleci/config.yml +++ /dev/null @@ -1,66 +0,0 @@ -version: 2 -jobs: - test_examples_node: - working_directory: ~/stac - docker: - - image: circleci/node:12 - steps: - - checkout - - run: - name: install - command: npm install - - run: - name: validate - command: npm run check-examples - # test_examples_python: - # working_directory: ~/stac - # docker: - # - image: circleci/python:3.8 - # steps: - # - checkout - # - run: - # name: install - # command: pip install stac-validator - # - run: - # name: validate - # command: find ./examples -type f -name "*.json" | xargs -L1 stac_validator - test_docs: - working_directory: ~/stac - docker: - - image: circleci/node:12 - steps: - - checkout - - run: - name: install - command: npm install - - run: - name: validate - command: npm run check-markdown - publish_schemas: - working_directory: ~/stac - docker: - - image: circleci/node:12 - steps: - - checkout - - run: - name: install - command: npm install - - add_ssh_keys: - fingerprints: - - "9b:0a:88:ff:12:d1:29:9a:ff:bb:72:ab:7d:81:df:59" - - run: - name: publish - command: npm run publish-schemas -- $CIRCLE_TAG -workflows: - version: 2 - ci: - jobs: - - test_examples_node - # - test_examples_python - - test_docs - - publish_schemas: - filters: - tags: - only: /^v.*/ - branches: - ignore: /^((?!dev).)*$/ \ No newline at end of file diff --git a/stac-spec/.circleci/publish-schemas.js b/stac-spec/.circleci/publish-schemas.js deleted file mode 100644 index 824f88c2..00000000 --- a/stac-spec/.circleci/publish-schemas.js +++ /dev/null @@ -1,40 +0,0 @@ -const klaw = require('klaw-sync'); -const path = require('path'); -const fs = require('fs'); -const ghpages = require('gh-pages'); - -function filterFn (item) { - const basename = path.basename(item.path); - return basename === '.' || basename === 'node_modules' || basename[0] !== '.'; -} - -let args = process.argv.slice(2); -let tag = 'dev'; -if (args.length && args[0].trim().length > 0) { - tag = args[0]; -} - -var folder = '.'; -var jsonSchemaFolderPattern = path.sep + 'json-schema' + path.sep; -for (let file of klaw(folder, {filter: filterFn})) { - if (file.path.includes(jsonSchemaFolderPattern) && path.extname(file.path) === '.json') { - let source = file.path; - let target = 'schemas' + path.sep + tag + path.sep + path.relative(folder, file.path); - fs.mkdirSync(path.dirname(target), { recursive: true }); - fs.copyFileSync(source, target); - console.log(target); - } -} - -ghpages.publish('schemas/' + tag, { - src: '**', - dest: tag, - message: 'Publish JSON Schemas [ci skip]', - user: { - name: 'STAC CI', - email: 'ci@stacspec.org' - } -}, error => { - console.error(error ? error : 'Deployed to gh-pages'); - process.exit(error ? 1 : 0); -}); \ No newline at end of file diff --git a/stac-spec/.circleci/rc.yaml b/stac-spec/.circleci/rc.yaml deleted file mode 100644 index b0dd538c..00000000 --- a/stac-spec/.circleci/rc.yaml +++ /dev/null @@ -1,43 +0,0 @@ -plugins: -# Check links - - validate-links -# Apply some recommended defaults for consistency - - remark-preset-lint-consistent - - remark-preset-lint-recommended - - lint-no-html -# General formatting - - - remark-lint-emphasis-marker - - '*' - - remark-lint-hard-break-spaces - - remark-lint-blockquote-indentation - - remark-lint-no-consecutive-blank-lines - - - remark-lint-maximum-line-length - - 150 -# Code - - remark-lint-fenced-code-flag - - remark-lint-fenced-code-marker - - remark-lint-no-shell-dollars - - - remark-lint-code-block-style - - 'fenced' -# Headings - - remark-lint-heading-increment - - remark-lint-no-multiple-toplevel-headings - - remark-lint-no-heading-punctuation - - - remark-lint-maximum-heading-length - - 70 - - - remark-lint-heading-style - - atx - - - remark-lint-no-shortcut-reference-link - - false -# Lists - - remark-lint-list-item-bullet-indent - - remark-lint-ordered-list-marker-style - - remark-lint-ordered-list-marker-value - - remark-lint-checkbox-character-style - - - remark-lint-unordered-list-marker-style - - '-' - - - remark-lint-list-item-indent - - space -# Tables - - remark-lint-table-pipes - - remark-lint-no-literal-urls \ No newline at end of file diff --git a/stac-spec/.github/pull_request_template.md b/stac-spec/.github/pull_request_template.md deleted file mode 100644 index bd3b2f95..00000000 --- a/stac-spec/.github/pull_request_template.md +++ /dev/null @@ -1,16 +0,0 @@ -**Related Issue(s):** # - - -**Proposed Changes:** - -1. -2. - -**PR Checklist:** - -- [ ] This PR is made against the dev branch (all proposed changes except releases should be against dev, not master). -- [ ] This PR has **no** breaking changes. -- [ ] I have added my changes to the [CHANGELOG](https://github.com/radiantearth/stac-spec/blob/dev/CHANGELOG.md) - **or** a CHANGELOG entry is not required. -- [ ] This PR affects the [STAC API spec](https://github.com/radiantearth/stac-api-spec), - and I have opened issue/PR #XXX to track the change. diff --git a/stac-spec/.gitignore b/stac-spec/.gitignore deleted file mode 100644 index ab3dafa3..00000000 --- a/stac-spec/.gitignore +++ /dev/null @@ -1,69 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ -package-lock.json - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -# next.js build output -.next - -# IntelliJ IDEA files -.idea/ -*.iml - -# Folder created when CI puhlishes JSON Schemas -schemas/ diff --git a/stac-spec/CHANGELOG.md b/stac-spec/CHANGELOG.md deleted file mode 100644 index 47bf6e22..00000000 --- a/stac-spec/CHANGELOG.md +++ /dev/null @@ -1,474 +0,0 @@ - -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). - -## [Unreleased] - -## [v1.0.0] - 2021-05-25 - -### Added - -- Updated best practices to add a recommendation to include title in links where possible. ([#1133](https://github.com/radiantearth/stac-spec/pull/1133)) - -### Changed - -- Updated version numbers for 1.0.0 release. -- Final UML tweaks for latest changes. ([#1134](https://github.com/radiantearth/stac-spec/pull/1134)) -- Removed ItemCollection from the STAC detection heuristic in Best Practices. It can't easily be differentiated from GeoJSON FeatureCollections any longer. ([API#141](https://github.com/radiantearth/stac-api-spec/issues/141)) - -## [v1.0.0-rc.4] - 2021-05-11 - -### Changed - -- An empty Catalog is now allowed, removed the requirement that it must have a child or item link. ([#1115](https://github.com/radiantearth/stac-spec/issues/1115)) -- An open date range to both sides is now allowed in the Collection's temporal extents. ([#1125](https://github.com/radiantearth/stac-spec/issues/1125)) -- Catalog and Collection JSON Schemas don't have a common JSON Schema any more. ([#1122](https://github.com/radiantearth/stac-spec/pull/1122)) - -### Removed - -- Catalogs don't support summaries any more. ([#1122](https://github.com/radiantearth/stac-spec/pull/1122)) - -### Fixed - -- Added clarification around when an extension should be included in `stac_extensions`. ([#1123](https://github.com/radiantearth/stac-spec/pull/1123)) -- JSON Schemas don't allow "shortcuts" for core extensions any longer. ([#1121](https://github.com/radiantearth/stac-spec/pull/1121)) -- Various examples fixes. - -## [v1.0.0-rc.3] - 2021-04-29 - -### Added - -- Summaries are allowed to specify JSON Schema in addition to ranges and sets of values. ([#1045](https://github.com/radiantearth/stac-spec/issues/1045)) -- Added `preview` relation type for interoperable thumbnails to best practices. ([#1090](https://github.com/radiantearth/stac-spec/issues/1090)) -- Recommendation to include both `root` and `parent` relation types when they point at the same file. ([#1098](https://github.com/radiantearth/stac-spec/issues/1098)) -- Overview section linking to various foundational standards. ([#1111](https://github.com/radiantearth/stac-spec/pull/1111)) - -### Changed - -- The first extent in a Collection is always the overall extent, followed by more specific extents. ([#1064](https://github.com/radiantearth/stac-spec/issues/1064), [opengeospatial/ogcapi-features#520](https://github.com/opengeospatial/ogcapi-features/pull/520)) -- Updated examples for automatic collection creation from code and validation ([#1080](https://github.com/radiantearth/stac-spec/pull/1080)) -- Clarified that stac_extensions should also list extensions that are used in Collection summaries. ([#1077](https://github.com/radiantearth/stac-spec/issues/1077)) -- The Stats Object for Summaries has been renamed to Range Object (no functional change). ([#1093](https://github.com/radiantearth/stac-spec/pull/1093)) -- `changed`, `created` (common metadata) and temporal extents (collections): Timestamps must be always in UTC ([#1095](https://github.com/radiantearth/stac-spec/issues/1095)) -- Clarified that collection summaries do not require that all property fields are summarized. ([#1106](https://github.com/radiantearth/stac-spec/issues/1106)) -- Clarified that gsd should only be used on an asset to represent the sensor, not just different processing. ([#1105](https://github.com/radiantearth/stac-spec/pull/1105)) -- Clarified that leaving a field out is not equivalent to setting it as null. ([#1111](https://github.com/radiantearth/stac-spec/pull/1111)) - -## [v1.0.0-rc.2] - 2021-03-30 - -### Changed - -- Required properties of type `string` require a minimum length of `1`. ([#1065](https://github.com/radiantearth/stac-spec/pull/1065)) -- `gsd` must be greater than 0. ([#1068](https://github.com/radiantearth/stac-spec/pull/1068)) - -### Removed - -- The remaining extensions in the spec (EO, Projection, Scientific Citation and View) have been moved out of the core specification, into their own repos in the [stac-extensions](https://github.com/stac-extensions/) GitHub organization. They must now be referred to by their schemas directly - the name shortcuts for them are no longer valid. The concept of the 'named shortcut' also goes away entirely. ([#1070](https://github.com/radiantearth/stac-spec/pull/1070)) - -### Fixed - -- Examples -- Collection Assets were specified as required (only in written text, not in JSON Schema), but that was incorrectly copied over from the former `collection-assets` extension. Collection Assets are not required. -- Clarified that the values in summaries (both for ranges and sets of values) must follow the data type of the property they summarize. ([#1069](https://github.com/radiantearth/stac-spec/pull/1069)) - -## [v1.0.0-rc.1] - 2021-03-03 - -### Added - -- Catalog and Collection now require a `type` parameter, to be set to `Catalog` or `Collection` for clients to more easily distinguish them easily. ([#971](https://github.com/radiantearth/stac-spec/pull/971)) -- Collection specification adds Assets (previously needed Collections Asset extension to do that). ([#1008](https://github.com/radiantearth/stac-spec/pull/1008)) -- 'via' and 'canonical' rel types are now options in Items. ([#884](https://github.com/radiantearth/stac-spec/pull/884)) -- In Extensions list there is now reference to three new (non-core) extensions: [processing](https://github.com/stac-extensions/processing), [file info](https://github.com/stac-extensions/file) and [card4l](https://github.com/stac-extensions/card4l). These would have been added to the stac-spec repo, except all non-core extensions were moved to [stac-extensions](https://github.com/stac-extensions/) org. ([#1024](https://github.com/radiantearth/stac-spec/pull/1024)) -- 'summaries' are now available in the Catalog spec, so both catalogs and collections can make use of it. ([#903](https://github.com/radiantearth/stac-spec/issues/903)) -- There is a new recommendation to enable CORS. ([#940](https://github.com/radiantearth/stac-spec/pull/940)) -- A Best Practice section on 'requester pays' cloud buckets was added. ([#1021](https://github.com/radiantearth/stac-spec/pull/1021)) -- A new Best Practice section explains Asset Roles, plus some lists of potential roles for people to use (in best practices, sar and eo). ([#989](https://github.com/radiantearth/stac-spec/pull/989)) -- There is a new Best Practice recommendation to keep collections at consistent levels. ([#1009](https://github.com/radiantearth/stac-spec/pull/1009)) - -### Changed - -- The [Stats Object](collection-spec/collection-spec.md#range-object) for Collection `summaries` changed `min` to `minimum` and `max` to `maximum` to align with JSON Schema. ([#967](https://github.com/radiantearth/stac-spec/pull/967)) -- URIs (usually found int properties like `href`, `url`) are now validated using the `iri-reference` format in JSON Schema (allows international characters in URIs) ([#953](https://github.com/radiantearth/stac-spec/pull/953)) -- Enhanced the way the spec talks about ID's to encourage more global uniqueness. ([#883](https://github.com/radiantearth/stac-spec/pull/883)) -- Clarified how collection-level asset object properties do not remove the need for item-level asset object properties in the `item-assets` extension ([#880](https://github.com/radiantearth/stac-spec/pull/880)) -- Made `summaries` to be *strongly recommended* - everyone should strive to implement them, as they are very useful. ([#985](https://github.com/radiantearth/stac-spec/pull/985)) -- Moved examples from individual directories into a single /examples folder at the root, and evolved them to be more representative. ([#955](https://github.com/radiantearth/stac-spec/pull/955)) -- Renamed "Scientific Extension" to "Scientific Citation Extension" ([#990](https://github.com/radiantearth/stac-spec/issues/990)) -- Relaxed the regular expression for DOIs in the scientific extension ([#910](https://github.com/radiantearth/stac-spec/issues/910)) -- `proj:geometry` allows all GeoJSON geometries instead of just a polygon. ([#995](https://github.com/radiantearth/stac-spec/pull/995)) - -### Removed - -- Checksum extension (field `checksum:multihash`). Use File Info extension (field `file:checksum`) instead for assets. There's no replacement for links. ([#934](https://github.com/radiantearth/stac-spec/pull/934)) -- Collection Assets extension, as the core construct of Assets in a Collection is now part of the core Collection spec. No change is required except removing `collection-assets` from the list of `stac_extensions`. ([#1008](https://github.com/radiantearth/stac-spec/pull/1008)) -- Numerous extensions (Data Cube, Item Assets, Point Cloud, SAR, Single File STAC, Tiled Assets, Timestamps & Versioning) have been moved out of the core specification, into their own repos in the [stac-extensions](https://github.com/stac-extensions/) GitHub organization. They must now be referred to by their schemas directly - the name shortcuts for them are no longer valid. ([#1024](https://github.com/radiantearth/stac-spec/pull/1024)) - -### Fixed - -- Fixed JSON Schema for `providers` (Collections and Items) to be an object and require a `name`. ([#924](https://github.com/radiantearth/stac-spec/pull/924)) - -## [v1.0.0-beta.2] - 2020-07-08 - -### Added -- JSON-schema file in the Point Cloud extension. - -### Changed -- Clarification on null geometries, making bbox not required if a null geometry is used. -- Multiple extents (bounding boxes / intervals) are allowed per Collection -- In the scientific extension, a link with the rel-type 'cite-as' SHOULD be used for the main publication of the dataset (the same as the one described in `sci:doi`), and not for the DOIs referenced in the `sci:publications` property. - -### Removed -- Validation instructions - -### Fixed -- Fixed several JSON Schemas -- Fixed examples - -## [v1.0.0-beta.1] - 2020-05-29 - -### Removed -- The API portion of STAC has been split off into a [new repository: stac-api-spec](https://github.com/radiantearth/stac-api-spec) and will start being versioned and released separately than the core STAC spec. -- proj4 string from proj extension -- Various warnings about how the spec is very early and likely will change. -- implementations.md (migrated to ) and how-to-help.md (migrated to ). -- `commons` extension completely removed: Items should contain all properties and not default to a common set at the Collection level -- ItemCollection removed from stac-spec core repo, will migrate to [stac-api-spec](https://github.com/radiantearth/stac-api-spec) as that is the only place it is used. - -### Added -- 'alternate' as a listed 'rel' type with recommended 'text/html' to communicate there is an html version. -- Added a code of conduct based on github's template. -- Overview document that gives a more explanatory discussion of the various parts of the spec and how they relate -- Several new sections to 'best practices' document. -- Added the ability to define Item properties under Assets (item-spec/item-spec.md) -- Add `proj:shape` and `proj:transform` to the projections extension. -- Collection-level assets extension -- Instructions on how to run check-markdown locally -- Timestamps extensions (adds fields `published`, `expires` and `unpublished`) -- `created` and `updated` can be used in the assets to specify the creation / update times of the assets. -- [Tiled Assets extension](https://github.com/stac-extensions/tiled-assets/blob/main/README.md), for representing data that has been split into tiles - -### Changed -- [Label extension](https://github.com/stac-extensions/label/blob/main/README.md) types were clarified and types in README and JSON schema were brought into alignment -- Moved item recommendations to best practices, and added a bit more in item spec about 'search' -- Moved `eo:gsd` from `eo` extension to core `gsd` field in Item common metadata -- `asset` extension renamed to `item-assets` and renamed `assets` field in Collections to `item_assets` -- `item-assets` extension only requires any two fields to be available, not the two specific fields `title` and `type` -- `datetime` allows `null` as value, but requires `start_datetime` and `end_datetime` then -- Extensions `sat`, `scientific` and `view`: At least one field is required to be specified. -- [Single File STAC extension](https://github.com/stac-extensions/single-file-stac/blob/main/README.md) changed to be a complete STAC catalog + GeoJSON FeatureCollection that contains collections and items. -- Improved several JSON Schemas - -### Fixed -- Datacube extension: `cube:dimensions` was not flagged as required. - -## [v0.9.0] - 2020-02-26 - -### Added -- ItemCollection requires `stac_version` field, `stac_extensions` has also been added -- A `description` field has been added to Item assets (also Asset definitions extension) -- Field `mission` to [Common Metadata fields](item-spec/common-metadata.md) -- Extensions: - - [Version Indicators extension](https://github.com/stac-extensions/version/blob/main/README.md), new `version` and `deprecated` fields in STAC Items and Collections - - Data Cube extension can be used in Collections, added new field `description` - - [Asset Extension](https://github.com/stac-extensions/item-assets/blob/main/README.md): new `description` and `roles` fields - - New [Projection Extension](https://github.com/stac-extensions/projection/blob/main/README.md) to describe Items with Assets that have an associated geospatial projection - - New [View Geometry Extension](https://github.com/stac-extensions/view/blob/main/README.md) -- STAC API: - - Added the [Item and Collection API Version extension](https://github.com/radiantearth/stac-api-spec/tree/master/extensions/version/README.md) to support versioning in the API specification - - Run `npm run serve` or `npm run serve-ext` to quickly render development versions of the OpenAPI spec in the browser -- [Basics](item-spec/common-metadata.md#basics) added to Common Metadata definitions with new `description` field for -Item properties -- New fields to the `link` object to facilitate [pagination support for POST requests](https://github.com/radiantearth/stac-api-spec/tree/master/api-spec.md#paging-extension) -- `data` role, as a suggestion for a common role for data files to be used in case data providers don't come up with their own names and semantics -- Clarification text on HTTP verbs in STAC API - -### Changed -- Support for [CommonMark 0.29 instead of CommonMark 0.28](https://spec.commonmark.org/0.29/changes.html) -- Collection field `property` and the merge ability moved to a new extension 'Commons' -- Added field `roles` to Item assets (also Asset definitions extension), to be used similarly to Link `rel` -- Updated API yaml to clarify bbox filter should be implemented without brackets. Example: `bbox=160.6,-55.95,-170,-25.89` -- Collection `summaries` merge array fields now -- Several fields have been moved from extensions or item fields to the [Common Metadata fields](item-spec/common-metadata.md): - - `eo:platform` / `sar:platform` => `platform` - - `eo:instrument` / `sar:instrument` => `instruments`, also changed from string to array of strings - - `eo:constellation` / `sar:constellation` => `constellation` - - `dtr:start_datetime` => `start_datetime` - - `dtr:end_datetime` => `end_datetime` -- Moved angle definitions from extensions `eo` and new `view` extension - - `eo:off_nadir` -> `view:off_nadir` - - `eo:azimuth` -> `view:azimuth` - - `eo:incidence_angle` -> `view:incidence_angle` - - `eo:sun_azimuth` -> `view:sun_azimuth` - - `eo:sun_elevation` -> `view:sun_elevation` -- Extensions: - - Data Cube extension: Changed allowed formats (removed PROJ string, added PROJJSON / WKT2) for reference systems - - [Checksum extension](https://github.com/stac-extensions/checksum/blob/main/README.md) is now using self-identifiable hashes ([Multihash](https://github.com/multiformats/multihash)) - - Changed `sar:type` to `sar:product_type` and `sar:polarization` to `sar:polarizations` in the [SAR extension](https://github.com/stac-extensions/sar/blob/main/README.md) -- STAC API: - - The endpoint `/stac` has been merged with `/` - - The endpoint `/stac/search` is now called `/search` - - Sort Extension - added non-JSON query/form parameter format - - Fields extension has a simplified format for GET parameters - - `search` extension renamed to `context` extension. JSON object renamed from `search:metadata` to `context` - - Removed "next" from the search metadata and query parameter, added POST body and headers to the links for paging support - - Query Extension - type restrictions on query predicates are more accurate, which may require additional implementation support -- Item `title` definition moved from core Item fields to [Common Metadata Basics](item-spec/common-metadata.md#basics) -fields. No change is required for STAC Items. -- `putFeature` can return a `PreconditionFailed` to provide more explicit information when the resource has changed in the server -- [Sort extension](https://github.com/radiantearth/stac-api-spec/tree/master/extensions/sort) now uses "+" and "-" prefixes for GET requests to denote sort order. -- Clarified how `/search` links must be added to `/` and changed that links to both GET and POST must be provided now that the method can be specified in links - -### Removed -- `version` field in STAC Collections. Use [Version Extension](https://github.com/stac-extensions/version/blob/main/README.md) instead -- `summaries` field from Catalogs. Use Collections instead -- Asset Types (pre-defined values for the keys of individual assets, *not* media types) in Items. Use the asset's `roles` instead -- `license` field doesn't allow SPDX expressions any longer. Use `various` and links instead -- Extensions: - - `eo:platform`, `eo:instrument`, `eo:constellation` from EO extension, and `sar:platform`, `sar:instrument`, `sar:constellation` from the [SAR extension](https://github.com/stac-extensions/sar/blob/main/README.md) - - Removed from EO extension field `eo:epsg` in favor of `proj:epsg` - - `gsd` and `accuracy` from `eo:bands` in the [EO extension](https://github.com/stac-extensions/eo/blob/main/README.md) - - `sar:absolute_orbit` and `sar:center_wavelength` fields from the [SAR extension](https://github.com/stac-extensions/sar/blob/main/README.md) - - `data_type` and `unit` from the `sar:bands` object in the [SAR extension](https://github.com/stac-extensions/sar/blob/main/README.md) - - Datetime Range (`dtr`) extension. Use the [Common Metadata fields](item-spec/common-metadata.md) instead -- STAC API: - - `next` from the search metadata and query parameter -- In API, removed any mention of using media type `multipart/form-data` and `x-www-form-urlencoded` - -### Fixed - -- The `license` field in Item and Collection spec explicitly mentions that the value `proprietary` without a link means that the data is private -- Clarified how to fill `stac_extensions` -- More clarifications; typos fixed -- Fixed Item JSON Schema now `allOf` optional Common Metadata properties are evaluated -- Clarified usage of optional Common Metadata fields for STAC Items -- Clarified usage of paging options, especially in relation to what OGC API - Features offers -- Allow Commonmark in asset description, as it's allowed everywhere else -- Put asset description in the API -- Fixed API spec regarding license expressions -- Added missing schema in the API Version extension -- Fixed links in the Landsat example in the collection-spec - -## [v0.8.1] - 2019-11-01 - -### Changed -- Updated specification to base on OGC API - Features - Part 1: Core, v1.0.0 instead of OGC API - Features - Part 1: Core, v1.0.0-draft.2 (fka WFS3 draft 2). - -### Fixed -- Numerous typos, clarifications and fixes for documentation and examples. -- Fixed STAC API definition to include STAC-related fields and examples in *OGC API - Features*-derived endpoints. -- Fixed JSON schemas for extensions: `$id` field matches file name. - -## [v0.8.0] - 2019-10-11 - -### Changed -- Updated specification to base on WFS3 draft 2 (OGC API - Features - Part 1: Core, v1.0.0-draft.2). This leads to many changes in the API and one change in STAC collections, notably: - - The structure of the field `extent` in STAC and WFS Collections changed. - - Query parameter `time` was renamed to `datetime` and accepts slightly different values. - - WFS links have additional fields `hreflang` and `length`. - - WFS Collections have additional fields `crs` and `itemType`. - - `time` API parameter changed to `datetime` -- The API intersects parameter now accepts a GeoJSON Geometry (any type) *instead* of a GeoJSON Feature. -- API: Clarification on `include` and `exclude` parameters in the field extension and notes on default values. -- API: queries should contain either `bbox` or `intersects`. -- API: Core API now has reserved parameters to prevent overlap with extensions -- Updated bbox definitions in API, Item, and Collection specs to include support for optional elevation values. -- Moved Single Item Extension to core (`license` and `providers` properties for Items). -- Allow `various` for the `license` fields. -- Clarified meaning of SAR and EO platform, constellation, and instrument -- Numerous typos, clarification and general word-smithing -- Changed GeoTIFF media type from `image/vnd.stac.geotiff` to `image/tiff; application=geotiff`, changed Cloud-optimized GeoTiff media type from `image/vnd.stac.geotiff; cloud-optimized=true` to `image/tiff; application=geotiff; profile=cloud-optimized`. - -### Added -- **stac_version**: Each Item must specify the STAC version. -- **stac_extensions**: Introduced this field for Items, Catalogs and Collections. -- Property `summaries` have been added to catalogs and collections. -- API Transaction extension supports optimistic locking through use of the ETag header. -- Asset Definition Extension added to Collections to allow specifying details about Assets that may appear in member Items. -- [Single File Catalog extension](https://github.com/stac-extensions/single-file-stac/blob/main/README.md) added as a format to have a set of Collections and Items in a single file. -- [Label extension](https://github.com/stac-extensions/label/blob/main/README.md) added with additional fields for describing labeled data, such as used for training data or from the output of a classification -- Timestamp fields added to `Item`: `created` and `updated` to refer to the datetime the metadata file was created or updated. -- Added Search Metadata API extension which adds fields to a response from a STAC API such as the number of items found and how many were returned. -- ItemCollection class added to spec that is a GeoJSON FeatureCollection of Items, such as what would be returned from a search. Located in item directory. -- `in` operator added to the query extension (to check if value is in a list of values) -- New bands added to the [common band names](https://github.com/stac-extensions/eo/blob/main/README.md#common-band-names) for the EO extension: yellow, rededge, and 2 narrow NIR bands -- [Scientific extension](https://github.com/stac-extensions/scientific/blob/main/README.md) can be used in Collections. - -### Fixed -- Updated language, fixed typos and examples. -- Renamed `pc:schema` to `pc:schemas` in the Point Cloud extension. - -### Changes since 0.8.0rc1 -- [Label extension](https://github.com/stac-extensions/label/blob/main/README.md): - - moved label:classes to be a list of Class Objects from a single Class Object in spec markdown and json schema (matching previous example JSON). - - moved label:overview to be a list of Overview Objects from a single Overview Object in spec markdown and json schema (matching previous example JSON). - - Renamed fields to use plural forms (`label:property` -> `label:properties`, `label:task` -> `label:tasks`, `label:method` -> `label:methods` and `label:overview` -> `label:overviews`) - -## [v0.7.0] - 2019-05-06 - -### Fixed -- Updated language / fixed typos -- Moved static vs dynamic discussion text to catalog best practices document -- Moved hosting of interactive api docs from swaggerhub to [stacspec.org](http://stacspec.org) -- JSON Schemas are now all following the latest JSON Schema version, draft 07. - -### Changed -- No longer require an absolute self link for Items, Collections and Catalogs. -- Reorganized api-spec, added extensions folder to hold API extensions -- Change the fields parameter in the API to allow filtering on any property. -- Refinements to SAR extension, changed several fields from a single array-based field (`sar:absolute_orbit`, `sar:resolution`, `sar:pixel_spacing`, `sar:looks`) to multiple fields with exactly one value. -- Commons extension ability to 'merge' properties is now in the core specification - -### Added -- Catalog best practices document, including recommendations for catalog layouts, html, and self-contained catalogs. -- `page` parameter for STAC API -- Optional `collection` property field in Items (previously part of the Commons extension) -- It is now required to link to `/stac/search/` from `/stac/` -- Added new fields to SAR extension: `sar:incidence_angle`, `sar:relative_orbit`, `sar:observation_direction` -- Added new filter parameters `ids` and `collections` to `/stac/search/` - -### Removed -- Removed the field `sar:off_nadir` from the SAR extension -- JavaScript-based validation - -## [v0.6.2] - 2019-03-01 - -### Fixed -- Fixed several examples and typos, improved descriptions -- Strictly checking the STAC version numbers in the JSON schemas -- Added missing required fields in Item JSON schema -- Changed `id` to `$id` in JSON schemas (draft-06 compatibility) - -### Changed -- Extensions require examples and a JSON schema to get to the maturity level 'Pilot' -- Updated ISERV implementation - -### Added -- Checksum extension -- Data Cube extension -- Point Cloud extension -- SAR extension - -## [v0.6.1] - 2019-01-25 - -### Fixed -- Added `null` as potential data type to `eo:epsg` in the EO extension. -- Fixed several examples and typos. -- Updated JSON Schema versions for uniformity -- Added OpenEO GEE implementation -- Clarified 'intersects' behavior for STAC API - -## [v0.6.0] - 2018-11-06 - -### Fixed -- Reorganized and cleaned up repository. -- Fixed examples throughout. - -### Added -- **Changelog**: This changelog added. -- **Collections added**: Collections are a type of Catalog with additional fields, such as provider and license. Items must belong to a single Collection. -- **Extension maturity**: Protocol for providing maturity classification for extensions based on stability and implementations. -- **Commons extension**: The previous 'Collections' extension is now the 'Commons' extension and allows an Item to inherit properties from its Collection. -- **Datetime-range extension**: Extension for providing start and end datetimes. -- **Scientific extension**: Extension for providings links to scientific publications relating to the data. -- **rel types**: A list of supported `rel` types are provided for use when specifying links, `derived_from` and `license` types added. -- **eo:constellation**: A new field in the EO specification to specify a grouping of platforms. -- **stac_version**: The `stac_version` field is required on all Catalogs (and Collections). -- **JSON schemas**: Added JSON schemas where they were missing. -- **Single Item extension**: Extension to supply License and Providers for single Items when no collection is used. -- **UML Diagram**: See STAC-060-uml.pdf. -- **Development Process**: See process.md for information on the STAC development process. - -### Changed -- **API**: Main catalog endpoint at `/stac`, search endpoint now at `/stac/search`. -- **eo:bands**: The `eo:bands` field is now an array rather than a dictionary, and has been moved inside of `properties` in a STAC Item. -- **Catalog fields**: Catalogs have a smaller number of basic fields: `id`, `stac_version`, `title` (optional), `description`, and `links`. The new Collections type contains additional fields. -- **links**: The links fields are now an array rather than a dictionary. -- **properties**: Fields with the data type array or objects are allowed inside the `properties` in a STAC Item. -- **description**: Description fields now allow formatting with CommonMark. -- **assets**: Fields changed names: `name` to `title` and `mime_type` to `type`. - -### Removed -- **provider**: Provider field in Items got removed. Use Collections or the Single Item extension instead. -- **license**: License field in Items got removed. Use Collections or the Single Item extension instead. - -## [v0.5.2] - 2018-07-12 - -Minor bug fixes on 0.5.1 for the schema files. Thanks @francbartoli - -## [v0.5.1] - 2018-07-06 - -Minor bug fixes from 0.5.1 release - -- [Update openapi / swagger specs for new 'links'](https://github.com/radiantearth/stac-spec/commit/480d4fb02b4a7e880c7ca01320fe2773260ba595) -- [minor fixes on collection extension](https://github.com/radiantearth/stac-spec/pull/124) - thanks @m-mohr -- [minor cbers example updates](https://github.com/radiantearth/stac-spec/pull/123) - thanks @fredliporace - -## [v0.5.0] - 2018-07-01 - -The 0.5.0 release of the STAC spec is an iteration forward on the spec, with a number of core improvements. Highlights include: - -- **Links is now a dictionary** - This is the most core change done. It aligns the structure with the 'asset' change in 0.5.0, making it easier for clients to look up the link that they want more easily. The schema is updated to this (and actually checks assets better now, thanks @mojodna ) - -- **Transactions Extension** - There is now a transaction extension for the STAC API, thanks to @hgs-msmith and @hgs-trutherford - -- **Collections iterations** @matthewhanson has evolved the collections extension, adding in some namespace type hints on it, and explaining it more clearly. - -- **eo:crs to eo:epsg** In the EO profile @matthewhanson brought in a change to use EPSG code, instead of full Well Known Text, to make it easy to reference. - -Full list of issues and pull requests at - -## [v0.4.1] - 2018-04-24 - -A few minor improvements on the release. ([issues](https://github.com/radiantearth/stac-spec/issues?utf8=%E2%9C%93&q=milestone%3A0.4.1+)) - -- @hgs-msmith got a swagger version of the spec, and made some minor improvements to the openapi version #103 and #102 -- @francbartoli and @m-mohr pointed out some inconsistencies with landsat, so got the openapi updated #106 -- @m-mohr pointed out some issues with landsat example, so updated those #105 -- @hgs-trutherford pointed out that the planet example was a bit confusing, so updated it to the EO profile. - -## [v0.4.0] - 2018-04-06 - -The 0.4.0 is the first 'official' release of the SpatioTemporal Asset Catalog (STAC) specification! - -It is the result of the [ft. collins sprint](https://github.com/radiantearth/community-sprints/tree/master/03072018-ft-collins-co), the second in person meeting of the STAC community. But it also includes -a number of improvements from remote contributors. - -Highlights include: - -- Updates to the core **`Item` JSON specification**, including simplifying to a single datetime, moving thumbnails from 'links' to 'assets', making assets a dictionary for easier lookup and requiring `self` links to be absolute links. - -- Alignment of **STAC API** with the new [WFS3](https://github.com/opengeospatial/WFS_FES/) specification - -- Cleanup of the **static catalog** specification for greater clarity around the catalog - -- A first cut of an **Earth Observation Profile**, as well as a new collections extension to support it. - -- Numerous small improvements and bug fixes. - -See the [milestone 0.4.0 in the issue tracker](https://github.com/radiantearth/stac-spec/milestone/3) for the complete lists of improvements. - -Thanks @hgs-msmith, @matthewhanson, @hgs-trutherford, @rouault, @joshfix, @alkamin, @hemphillda, @jeffnaus and @fredliporace for contributing to the spec directly, and to [everyone](https://github.com/opengeospatial/wfs3hackathon/blob/master/notes/introductions.md#participants) who participated in the [Ft Collins sprint](https://github.com/radiantearth/community-sprints/tree/master/03072018-ft-collins-co) and brought great ideas. - -[Unreleased]: -[v1.0.0]: -[v1.0.0-rc.4]: -[v1.0.0-rc.3]: -[v1.0.0-rc.2]: -[v1.0.0-rc.1]: -[v1.0.0-beta.2]: -[v1.0.0-beta.1]: -[v0.9.0]: -[v0.8.1]: -[v0.8.0]: -[v0.7.0]: -[v0.6.2]: -[v0.6.1]: -[v0.6.0]: -[v0.5.2]: -[v0.5.1]: -[v0.5.0]: -[v0.4.1]: -[v0.4.0]: diff --git a/stac-spec/CODE_OF_CONDUCT.md b/stac-spec/CODE_OF_CONDUCT.md deleted file mode 100644 index 984c77e6..00000000 --- a/stac-spec/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,76 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, 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 behavior that contributes 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 - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual attention or - advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or electronic - address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have 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 to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at [stac-spec-admins@googlegroups.com](mailto:stac-spec-admins@googlegroups.com). All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at - -[homepage]: - -For answers to common questions about this code of conduct, see - diff --git a/stac-spec/CONTRIBUTING.md b/stac-spec/CONTRIBUTING.md deleted file mode 100644 index 5b9b2d7a..00000000 --- a/stac-spec/CONTRIBUTING.md +++ /dev/null @@ -1,83 +0,0 @@ -## Contributing - -Pull Requests are the primary method of contributing to the spec itself, and everyone is welcome to submit -changes. Suggestions for changes to the core will be taken with higher priority if a clear implementation -of STAC has been built that can highlight the problem. If the changes can be done as an [extension](extensions/) -instead of modifying the core files then that route is recommended first, and once there is uptake for the -extension it will be considered for core. - -We consider everyone using the specification to catalog their data to be a 'contributor', as STAC is -really about the end result of more interoperable data, not just creating a spec for the sake of it. -So if you want to help then the best thing you can do is make new catalogs or build software that uses -the spec. And please do give us feedback. The best place to do so is on our -[gitter channel](https://gitter.im/SpatioTemporal-Asset-Catalog/Lobby). If you are interested in helping -but aren't sure where to, then see the [stac-ecosystem](https://github.com/stac-utils/stac-ecosystem) repo -for ideas on projects to advance STAC. The next phase of STAC's evolution will be mostly focused on -this broader ecosystem, while keeping the core spec as stable as we can. - -### Submitting Pull Requests - -Any proposed changes to the specification should be done as pull requests. Please make these -requests against the [dev](https://github.com/radiantearth/stac-spec/tree/dev) branch (this will -require you to switch from the default of 'master', which we keep so it displays first). - -Creating a Pull Request will show our PR template, which includes checkbox reminders for a number -of things. - -- Adding an entry the [CHANGELOG](CHANGELOG.md). If the change is more editorial and minor then this -is not required, but any change to the actual specification should definitely have one. -- Base the PR against dev, as mentioned above - even if the branch was made off of dev this reminds -you to change the base in GitHub's PR creation page. -- Make a ticket in the STAC API repo if anything here affects there. -- Highlight if the PR makes breaking changes to the specification (in beta there can still be -select breaking changes, but after 1.0 this will change) - -All pull requests should submit clean markdown, which is checked by the continuous integration -system. Please use `npm run check` locally, as described in the [next section](#check-files), -to ensure that the checks on the pull request succeed. If it does not then you can look at the -mistakes online, which are the same as running `npm run check` locally would surface. - -All pull requests that modify or create JSON schema files or examples should use -[JSON formatter](https://jsonformatter.org/) to keep files consistent across the repo. - -All pull requests additionally require a review of two STAC core team members. Releases are cut -from dev to master (and require 3 approvals), see the [process](process.md) document for more details. - -### Check files - -The same check-markdown and check-examples programs that runs as a check on PR's is part of the repo and can be run locally. -To install you'll need npm, which is a standard part of any [node.js installation](https://nodejs.org/en/download/). -Alternatively, you can also use [yarn](https://yarnpkg.com/) instead of npm. In this case replace all occurrences of `npm` with `yarn` below. - -First you'll need to install everything with npm once. Just navigate to the root of the stac-spec repo and on -your command line run: - -```bash -npm install -``` - -Then to do the check for markdown and examples you run: - -```bash -npm run check -``` - -This will spit out the same texts that you see online, and you can then go and fix your markdown or examples. - -To just check the markdown run: - -```bash -npm run check-markdown -``` - -To just check the examples run: - -```bash -npm run check-examples -``` - -To automatically format / pretty-print the examples run: - -```bash -npm run format-examples -``` diff --git a/stac-spec/LICENSE b/stac-spec/LICENSE deleted file mode 100644 index 8dada3ed..00000000 --- a/stac-spec/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/stac-spec/README.md b/stac-spec/README.md deleted file mode 100644 index 70ea3246..00000000 --- a/stac-spec/README.md +++ /dev/null @@ -1,106 +0,0 @@ - -stac-logo - -[![CircleCI](https://circleci.com/gh/radiantearth/stac-spec.svg?style=svg)](https://circleci.com/gh/radiantearth/stac-spec) - -## About - -The SpatioTemporal Asset Catalog (STAC) family of specifications aim to -standardize the way geospatial asset metadata is structured and queried. -A "spatiotemporal asset" is any file that represents information about -the Earth at a certain place and time. The original focus was on scenes -of satellite imagery, but the specifications now cover a broad variety of uses, -including sources such as aircraft and drone and data such as hyperspectral optical, -synthetic aperture radar (SAR), video, point clouds, lidar, digital elevation -models (DEM), vector, machine learning labels, and composites like NDVI and -mosaics. STAC is intentionally designed with a minimal core and flexible -extension mechanism to support a broad set of use cases. This specification -has matured over the past several years, and is used in [numerous production -deployments](https://stacindex.org/catalogs). - -This is advantageous to providers of geospatial data, as they can simply use a -well-designed, standard format and API without needing to design their own proprietary one. -This is advantageous to consumers of geospatial data, as they can use existing libraries -and tools to access metadata, instead of needing to write new code to interact -with each data provider's proprietary formats and APIs. - -The STAC specifications define related JSON object types connected by link -relations to support a [HATEOAS](https://en.wikipedia.org/wiki/HATEOAS)-style traversable -interface and a [RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer) API -providing additional browse and search interfaces. -Typically, several STAC specifications are composed together to create an implementation. -The **Item**, **Catalog**, and **Collection** specifications define a minimal core -of the most frequently used JSON object types. Because of the hierarchical structure -between these objects, a STAC catalog can be implemented in a completely 'static' -manner as a group of hyperlinked Catalog, Collection, and Item URLs, enabling data -publishers to expose their data as a browsable set of files. If more complex query -abilities are desired, such as spatial or temporal predicates, the -**STAC API** [specification](https://github.com/radiantearth/stac-api-spec/) can be -implemented as a web service interface to query over a group of STAC objects, usually -held in a database. - -To the greatest extent possible, STAC uses and extends existing specifications. -The most important object in STAC is an **Item**, which is simply a [GeoJSON](http://geojson.org) **Feature** -with a well-defined set of additional attributes ("foreign members"). The **STAC API** -extends the **[OGC API - Features - Part 1: Core](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html)** -with additional web service endpoints and object attributes. - -## Current version and branches - -The [master branch](https://github.com/radiantearth/stac-spec/tree/master) is the 'stable' -version of the spec. It is currently version **1.0.0** of the specification. The STAC specification -follows [Semantic Versioning](https://semver.org/), so any breaking change will require the spec to -go to 2.0.0. - -The [dev](https://github.com/radiantearth/stac-spec/tree/dev) branch is where active development -takes place, and may have inconsistent examples. Whenever dev stabilizes, a release is cut and we -merge `dev` in to `master`. So `master` should be stable at any given time. -More information on how the STAC development process works can be found in -[process.md](process.md). - -## Communication - -Our [gitter channel](https://gitter.im/SpatioTemporal-Asset-Catalog/Lobby) is -the best place to ask questions or provide feedback. The majority of communication about the evolution of -the specification takes place in the [issue tracker](https://github.com/radiantearth/stac-spec/issues) and in -[pull requests](https://github.com/radiantearth/stac-spec/pulls). - -## In this Repository - -This repository contains the core object type specifications, [examples](examples/), -validation schemas, and documentation about the context and plans for the evolution of the -specification. Each folder contains a README explaining the layout of the folder, -the main specification document, examples, and validating schemas. - -Additionally, the [STAC API specification](https://github.com/radiantearth/stac-api-spec/) -provides API endpoints, based on the [OGC API - Features](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html) standard, -that enable clients to search for Item objects that match their filtering criteria. - -The **Item**, **Catalog**, **Collection**, and **STAC API** specifications are intended to be -used together, but are designed so each piece is small, self-contained, and reusable in other contexts. - -- **[Overview](overview.md)** describes the three core object type specifications and how they relate to one another. -- **[Item Specification](item-spec/)** defines a STAC **Item**, which is a [GeoJSON](http://geojson.org) **Feature** - with additional fields ("foreign members") for attributes like time and links to related entities and assets - (including thumbnails). This is the core entity that describes the data to be discovered. -- **[Catalog Specification](catalog-spec/)** specifies a structure to link various STAC Items together to be crawled or browsed. It is a - simple, flexible JSON file of links to Items, Catalogs or Collections that can be used in a variety of ways. -- **[Collection Specification](collection-spec/)** provides additional information about a spatio-temporal collection of data. - In the context of STAC it is most likely a related group of STAC Items that is made available by a data provider. - It includes things like the spatial and temporal extent of the data, the license, keywords, etc. - It enables discovery at a higher level than individual Item objects, providing a simple way to describe sets of data. -- **[Examples](examples/):** The *[examples/](examples/)* folder contains examples for all three specifications, linked together to form two - complete examples. Each spec and extension links in to highlight particular files that demonstrate key concepts. -- **[Extensions](extensions/README.md)** describe how STAC can use extensions that extend the functionality of the core spec or - add fields for specific domains. Extensions can be published anywhere, - although the preferred location for public extensions is in the [GitHub `stac-extensions` organization](https://github.com/stac-extensions). -- **Additional documents:** The supporting documents include a complementary [best practices](best-practices.md) - document, and information on contributing (links in the next section). We also maintain a [changelog](CHANGELOG.md) of - what was modified in each version. - -## Contributing - -Anyone building software that catalogs imagery or other geospatial assets is welcome to collaborate. -Beforehand, please review our [guidelines for contributions](CONTRIBUTING.md) and [code of conduct](CODE_OF_CONDUCT.md). -You may also be interested in our overall [process](process.md), and the [principles](principles.md) that guide our -collaboration diff --git a/stac-spec/STAC-UML.drawio b/stac-spec/STAC-UML.drawio deleted file mode 100644 index 1fcde668..00000000 --- a/stac-spec/STAC-UML.drawio +++ /dev/null @@ -1 +0,0 @@ -7V1pc5vIuv41rrrnVomiu1k/eomTScaTOM7+JYUEljhBQkHIS379aRCN6AUEUoOQB09VxqA2IJ63n373PkOX86fXkbOc3YSuF5xB1X06Q1dnEAIEAP5fcuZ5c8ZW7c2JaeS7m1Pq9sSd/8fL/pKcXfuut8rObU7FYRjE/pI+OQkXC28SU+ecKAof6WH3YeBSJ5bO1ONO3E2cgD/71XfjWXYWqOr2gzeeP51lt7b07IO5QwZnJ1Yzxw0fC6fQqzN0GYVhvPlt/nTpBcnLo9/Ldcmn+YNF3iKu8wdv1n99//nJ+A2n7t8jdP7mFbr5PALA3FznwQnW2VdWFeX/s0eOn8l78BbuefI68dEiXOCTF7N4HuAjgH/FH2bIAfy1LlaxE8VktOs783Dhfpr5C/IRGauRE9d+kF/Kxa8/u20YxbNwGi6c4NX27IUT+FN8qavAu8ff++LBi2If43WenR6HcRzO04eKo+dv+IxKDr4nB4pODq+eih9ePedHbvY8yRH/lrMXvwrX0cSreLVGJq1ONPXiinFQ3wxMvnnhDhmIr71w7uHHwwOyOTVSFQvB7OrZrBolB8lx5AVO7D/Qwutkc2CaXyu//IfQx98rvzYCqqIWfgB1F2hr9AU37yC7RlH0mMvqmqpAZKm2nv1LXVYDlgJsVTON7F+dvsvmDVbchQwM7+9XHjUG/1J4hdtT6dRoNE0sbpoE/uLXipsnsfcU05Mj8lb+H2ecDkgkapk8dfrE+sWZflWQ6AmWMS8SyPTcd91U9gNn7AUXzuTXNArXC/cyDMIovS+6T3+EArtj4uN7eU+UvGRcmj0zRVcigcQio0NaUojwHyiOtJDb9J+3iDaH9cSJnSCccmivHv154KR0eB8uYkJcCeyTmR+4fzvP4TqBAdPc5Bc5upiFkf8Hj3eIjBRpEX9rfDXMQEV09eQ/6i/vkitmIpWKmPeBYA6YUzfOEzXwb2cVZycmYRA4y5U/zp97jmebv7jIWDQdtIqj8JdXeBwj/cm+dOH85qeKNTlpK5WqXAPI0AeEJx8LyzBZhWeFFRhYsFzOKFFpKheQk4sE1p/4O638cHGWiCsm0PTrF34VEwT9TrMltYh6dmrHaheHy+RiS2fiL6Z/p2OutO2Zj9lrSU6F+G/vg3RNnmE+8ZLlOApjJy7lpgv8di+TBROzFLzEx2B7nBLXEq/Ql+ECfxfHT4H2sGQ9eol01eah2nJBFiGjnhiQcYdIwVXsvnv/KgDXj8vb6epzAPAUHyFOCuLnpTfgLBlnoiR0gfPjyLgG2oe7wHKNH98eVPUbvBkBHuh0umNcvUUy4UsX/wHzPTE3re4wFz4xDzkePqAsF2WgakeGWecp3I+DgcOlI43UIyNtcEi73moS+cs41dgGvOXirXeonIkfmdyNMdTP0Dm2RfFxapZxwBe8W+MgTOyqghsIMM6uQz1UG7nwnvw4907h3wvOKXy09U0lB1vX1H4urWZ4Fz1blZrRTtdWc88WVI3sj3LPVrZYHOhKwNcueJhsFRmmTd0IGIx/oa5za0R7KYDJmJ8l7issb85zYVg2vcu/gMF4Q8COp2IeS0PM5No8QPeuNJV3r/xf4nL+DzcrWc9ZYRLWdQLXcJiljpvMI91kshCmEXvLmrg6yMQ7VMRZv6pFX6FNTHnXCMW6Ky+4P4NGkGA1jvBv0+Q3akgaCKkekmHSB/LeN7ZASF+BepH3K1l/f/auGlck7yo/x07yzon6QCnOrmOZ+9EwQJZSiDAgi5oL0FJbYWXIrFYI7mBl+6Dx2eLYAxLnLeWExMHJkTjsG4kzaomuKzb10xWn83FhP/bmHLxDBKS1CIhusBGQDJNHKhHhjLOugFlhXmW3+5hI+2KaOD3I/TSTuR/g3XFGDWPOCWIvWjixd5HM1lUbwslHY+lIzGDXV7FeWeS3UcxFJHjEVpPui+fVy8EV3y7kusBz1ynkvJU4uOKlo2wKPPFtoSx8Yk2cV8MYjj0w+HLDzbaLllviVsIWS6XTDh988CIfv7AkuaeJSZfhudOky15iAz8bUE3acpGTsAM0WoVgfWF1jTmtXgpYU2stj0c8U2JdblLSw0fQqvXU4uHHs9Y0m5tkp2isEa7oja1GcpuZpLf2AeXxHFJQWlgdbUE6gnB1bC2axStB43H4NAAtGWgA6+pB7cUtOaQTxwSmucGebQHv2tZNa3kJvEVL6b0uVhgfPPfnfRTyPrdjBjxAs4BHMwSLMYkqo7CBomvYJh0JyKfaoYu/Sjtq2Whb7bgFm+dcs/yhse7LeBO1al2WHW4Z/dBlDXHg4dSix2T+90aXRbQuC5hwWYuhJN4DULHyDeGGFgsuaPNVA6KCC120SKrl0naYVsQbOoOfvz7J5FPrsOIKIeQtIQ55vWgwbdtAWlhe0RLSb8eXt8/a2vQvL5fz8/err1d3psC/P4R0WsZcWF7RJeb85B5iOvJhFtdXdImzoERuqK9oBWphgUWXUGsc1EOBRZuACyssugScr5365T0/hpE7LNjy0Sal7EdDm88CDPwJVtAGLpdve6nHVs/4YrnVej53It8b5rZ8uFGHWtr958n45vzux/n1u89f9N+vrWtrPkL82t20aINUZBxU2THqXbAjS/ZJknvShlbb+jzVsM6aJvu0XbWXid7uwo9sYDHKUmWaNynb0wETZUHZynFoOrxtMtfdswXViHZuAvZRZFXp2YwfvTrKwg6ni/o6ibKIqYHX8nqeMVTJcL2JsuBpoQC6MBNiIkD0daTg6nxB4Jvz4eKbe2lZT6P/zr7HbwVOt6E4+gCarXJy7WTZuvV1VNImw7KanFj2iOQB5zHofWuhTaiYWmkDQWBDBcHCx5JD3czjlz6lZQu/bu3xR6ilFk5n3p/a81h4FSn9G0laHAPj3acpS7OgDrHw1mLhGpP5jUi+xo5SuNwfKz8wymtks8jjayMGu1w8lw4JgdcpepQHNG+VJ8rZgLNknAUB8G5x5r1tQ6ZDG0ALot7dAs370IdoaCtIiwLf3ULN5zJS1x60t060N9Ng+tZjhb7Y1Z40Lyl63om/signZImQLyd8XiNxkONv8/bu/T/4w+3dNg7zgS928IWUbEeRHLTXbpZfGpZRuEyQEYTcBsYQM0Ymocm3kcQfOmP9qYLGK7pgYTGtlgSF+PkEhIHRXLhO5CauxELu5MAZdTgDSWmFIhKF1jhD4334RBQWycsYpKFDaRBlUXcqDTovDaUa5ylu4VTciokEhcBZ/aBQ6WqwO1ou6JNYqXc0COSgfI+jQzfIsZmVCjIRlbqBG4Np3AHt/m3CRCZbPW3pFKV9z6aikjYsIzV/DQRZtRGzERmSE5E0ICPY1p6CzelyNdsz1xHspskhJmQnmVr97OxLyJ5dGHeUNsv46NNL2xCwYQ27eBVSlaQ/YnElsg1YuRbVawTVdLa2sb+gbuu0ByVv+X7gtNYtNq6273qFhRJo0NLNzb+IuqwJkWIWPmbMsj6sZeLcy9PdT1Av89b2aDtBWkhGbKOFFtHmg7fOitxrcPF0002XtE4m1EO6ohVsN1OQfp1X3Mi33fgI4BDSr8E0em3oy302IqTbM9L5sNAQAWwFaYE/plukeYf+UA7ZIt6C2H5beMP3P//yV/fANBcfXRS653/CkWiPyCGJow2gRaH9TpGGfAQmCoOhMK4FqAU17Z2SuMFD/dI8IAWnR77/0OEext37wTV0RWBTUNVoqw3I2Q7OYJpdIbYUoXanambTDI1tlb7T2ZB3i6b/rsUWenzMKLVGT9f5kM/YHjsfdMWii2x0BVjUzj6duSNsPpBy9+kcX0sFCn4B+P83oSvIOU5h8twM+seZH3t3eB1KPn2MnCUtKcViEIEHwkt/ShfKgvND5QmulIEaZPgz01a4Ua3FrzqtJfgDVdRr4VQ3yCtFqD71a6Tn6JYh5dQUc/sq6XtWuyEAqy8kqai47IF31J+Rvo5MI9euWAaovNuj50XE1ROzRwVqzEYTHXZrFbSkpyhIuEncESuIpSeLVO6I3KRlgkbX8kpSbBGj2GIdQ5j73JTrdJ12n0PAmF+yuK7kPkdvPA0I2Z9OtW31DO4NnTFhuc7qbPNO66XtEAp9qF/i3sXNnACl7LjT7AfNM+Q0TWcbykjKQGB0KWyw70eIiC0RZjOUJBGixuzqTR64fBMqejzKslrLxkPDOmg8aRPeA4Lm46knqW8SWuoNQY8YUQfMFt1tYspXSqV57UPqRIepE8CmdUqTbH1S9NALst5bq58DgiJ5wEnE4J9vnFMo6BBXPS/ru3N0oDHuHFkb8TAZvibaN1WY8ZRoLa3okKFTw+rLCipoMrKMwgff9aKBb7vjW02l+VY3eL61BHwL2tueTtCtYuHMh0SHXboclJGsJsK6vX23eQffkMLUJuCCvQjbArzkkXk//ZDa0g7Wgv3WhVi3x+N8kHEdDd2l5CMN1JrTuj2oedP5xaQxUQVZ0vq+HmImVa6lDRyfVo5bHvWWk38CgdjqaF56xZovbEvuxmbSMQqw8ixDga1zuolQ20nf40yoEVI0g8p8Et5FqgwIpydv07xMgjykmfbB+z0LSFWYYI14Tq1WV5uQqmmx9axyRNkyaZ+WZjOu8dpppExhrCm7NTZ5YJ2OthqgugSdG4+MyvEGPHC83n24X8gNws5cp7M6VPJdn9cGCBXVKOarQGbiMpeUIgHi2h5OAibhfJ64QFR8acfFNgknCYNTtKMWbbbKRKFJesCuTkxIk2BwaRfgZvoYfbl3ltc/5h+81fmPpWAnxLxF29JZkKSQrPBz8wG+T/GzGsSyQwPISaMGAa3jcJVpI0JMKieF/H5pEvKqr2L33ftXAbh+XN5OV58DgGegYBqLYKFcnP8acLQOwbm9NX6fv7nWPv5B34N/bj58v7VvBeBgWvVivzyycMqv2+jwdQufmPcITSIPv3C37G3/Cx2AcqC26kLdWmUy795YL90B6xawzjODjwY25LBOFcifu8h0gHxfyJFgr9ZOIecbD3gLdwB8l6EhCX6Dj+N1C7+ofdiwL3MrWNt8IK9brAVJWYET34cRX2g1gH2gtQqOrbfxMQk/eQXrubcoL9Af8N4Xb1L9cTS8eT/zJHkH+C+dId+qFX/UsTU3Pttq7q9WA9YtYG13qKYJnY+8YTZdDQa4bJwRPLaKJqgN5lAWl3oWW6TQYfuSXip0D2oSxc+rRGpsj62YaUymENXPOldXVpjgo72aV1dBvDPYTzY72RnrLyJPKjwPbRFFmjkS7+2+eytYTEm7zjYelhTbty06ls5UZvLjmfYlu8ZbTOlsZeWnrChsHhos+LaWGFYn+cuhFLDr0hS2vYRJCsGoPdREtYBtxTQgT73jcfg0LLLVi2wD6CsiuSKkZRQqiB+ZD1/F3hy/i4EL+sEFpEvnIVyQ3e1jko20mCapEtsqZKaRlaBPKIA1tD4nwCrMwom9iySfasXJpYRVS5Bc7Cd5Xg/OUGuxi5jKMpj7S0yI11FeRjV6nTILVTV22Q57tOLa396orlcvWhyV6kSD7GJsTtHJaNm9Di3Y0GzFti3V1iFK/gW0OWLaBvUxpK9f1zjZcRfLhooJsjsgi/kSsgriLdpAIhX8pc/Mjte6L6AXEwGvi+bGipj1+5QzXM1tPU4apkUWaArb06lFxPk4/Eum/qQfN03/mPrqsb+qwKKzCvSU/hv2NcH0byBS1ZvnqEM5C4CavO+ce1WboWbNwsy93eZszya2my7r5XexkQKt7UZrLa0AjCvKzDz3x2d0PtFia3OeKqWfwFZteF7Z9A99G02xzWKVSBtVIcKIDp+M8SJrBku5tkkPR11jetHKccwjtk8T2zl/30pmvWbRXRt7w5Z9qdL2k/ph43VYPZ57N1Cus184ufjkl9PZmKKSLXrMtMfZl0JYDcJbT6QWZ02qcO5iZ+E6kYuHnW920FQ/hqmX8NPzMmlZk9furLeFO2xj3ni2no8Xjh/wHyU+sQffe+Q/2dT7sWfJGdd/YE8Vi4e2BYMltUX5aepCjNQ323+jxD9d7SouRpnLXMfyN+MwmOpnDdX0JJsSokpCUeTNurL82tXMWXrpMh97u1EZ56zyfh0H/oL49LFM/3qfuGjj542dlUJVyA2Q8Zbp8LCoq5zWUuRO+I5FOcyFjtllL/yoLbMp45eyfDXa9N2mWLBm7D7tGErRL5q+b8eXt8/a2vQvL5fz8/err1d3JlmBioZvlcA36OdpIaZxO/GvH9rP0xRrHo3VO3whRWXMBhMoEIHt2sa0a5BkzgKGz3Z1WeDGZ1XvXZq/QqngrZ2ed9SuIpr+9NNmNjZiPDdS4BSSgaC344uxXjOGHiVz3izSND4D7N35baKOOceMWAk8lsKBJPrZxGNpmbpIAA+1y7mtEPfdU5GJ9OskriLBLpc2lXhjJdFeTsJUreaGHtuqZFK0yJv3nyfjm/O7H+fX7z5/0X+/tq6t+Qjxjol993+pHJRmJFWxcde7ZzFBm7oZxnSIqNtGjOINQptxpKpoQKVljdzqUAlm3Xxoz4ZhbDtHxDaNkBWZ0eiZjLLdY8uVbnTQeHiEyI94zvOVWT3XfSupqz/KL7IUSKsfozY8jOK3waeQ9nP3wj2pdMvbZn3eLuXfJjlQusZkYcjZqxXTgcIoqxpbPlF7C0ODpjJot0SZzHY5SKsOteTq7Z7jyfc4OmVqfNZrz3dIrCSJ3lCmxhEm2SxUKqb65eP3u59vR+ifp4u/7N+Lr/fTmaBDV7811sT+h5TZrm5SlMrVVnwgttsZ/ttPRzUqJURVAKZOGlxJmiagnUx5MWxzTZMtK2O2kJblNGUf2IKVz8WOJ8/VJQ0KpwzvGeghC9YmN1rqyzmidb2R2ddSa2Mjc+HX42OBLwfPaugAYqeYXg5bSSwQH6bukQIkkbOc3YRusoC8+h8= \ No newline at end of file diff --git a/stac-spec/STAC-UML.pdf b/stac-spec/STAC-UML.pdf deleted file mode 100644 index 37e7dff225f90311ada0c7231935a9da7532cc67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78979 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 state-level) and -then year, month, day. Or do the opposite - date and then location. Making a huge unordered list is technically allowed, -but not helpful for discovery of data. Thus it is generally considered a best practice to make use of sub-catalogs to -keep the size of each sub-catalog under a megabyte. If your sub-catalog lists tens of thousands of child items then you -should consider an additional way to break it up. - -We encourage people to explore new structures of linking data, but the following list is what a number of implementors -ended up doing. Following these recommendations makes for more legible catalogs, and many tools operate more efficiently -if you follow these recommendations. - -1. Root documents (Catalogs / Collections) should be at the root of a directory tree containing the static catalog. -2. Catalogs should be named `catalog.json` and Collections should be named `collection.json`. -3. Items should be named `.json`. -4. Sub-Catalogs or sub-Collections should be stored in subdirectories of their parent - (and only 1 subdirectory deeper than a document's parent, e.g. `.../sample/sub1/catalog.json`). -5. Items should be stored in subdirectories of their parent Catalog or Collection. - This means that each Item and its assets are contained in a unique subdirectory. -6. Limit the number of Items in a Catalog or Collection, grouping / partitioning as relevant to the dataset. -7. Use structural elements (Catalog and Collection) consistently across each 'level' of your hierarchy. - For example, if levels 2 and 4 of the hierarchy only contain Collections, - don't add a Catalog at levels 2 and 4. - -One further recommendation to help tools is to always include the 'title' field when including a link, especially in the -`item`, `child`, `parent` and `root` links, even if it repeats several times. This should be the same as the 'title' in the -link destination. Having this enables clients to display a nice human readable name of the link without having to open the -link destination. - -#### Dynamic Catalog Layout - -While these recommendations were primarily written for [static catalogs](#static-catalogs), they apply -equally well to [dynamic catalogs](#dynamic-catalogs). Subdirectories of course would just be URL paths -generated dynamically, but the structure would be the same as is recommended. - -One benefit of a dynamic catalog is that it can generate various 'views' of the catalog, exposing the same Items in -different sub-catalog organization structures. For example one catalog could divide sub-catalogs by date and another -by providers, and users could browse down to both. The leaf Items should just be linked to in a single canonical location -(or at least use a rel link that indicates the location of the canonical one). It is recommended that dynamic catalogs -provide multiple 'views' to allow users to navigate in a way that makes sense to them, providing multiple 'sub-catalogs' -from the root that enable different paths to browse (country/state, date/time, constellation/satellite, etc). But the -canonical 'rel' link should be used to designate the primary location of the Item to search engine crawlers. - -#### Mixing STAC Versions - -Although it is allowed to mix STAC versions, it should be used carefully as clients may not support all versions so that -the catalog could be of limited use to users. A Catalog or Collection linking to differently versioned Sub-Catalogs or Sub-Collections -is a common use case when multiple data source are combined. Client developers should be aware of this use case. Nevertheless, it -is strongly recommended that Catalogs don't contain differently versioned Items so that users/clients can at least use and/or download -consistent (Sub-)Catalogs containing either all or no data. Collections that are referenced from Items should always use the same -STAC version. Otherwise some behaviour of functionality may be unpredictable (e.g. merging common fields into Items or reading summaries). - -### Using Summaries in Collections - -One of the strongest recommendations for STAC is to always provide [summaries](collection-spec/collection-spec.md#summaries) in -your Collections. The core team decided to not require them, in case there are future situations where providing a summary -is too difficult. The idea behind them is not to exhaustively summarize every single field in the Collection, but to provide -a bit of a 'curated' view. - -Some general thinking on what to summarize is as follows: - -- Any field that is a range of data (like numbers or dates) is a great candidate to summarize, to give people a sense what values -the data might be. For example in overhead imagery, a -[`view:off_nadir`](https://github.com/stac-extensions/view/blob/main/README.md#item-properties-and-item-asset-fields) -with a range of 0 to 3 would tell people this imagery is all pretty much straight down, -while a value of 15 to 40 would tell them that it's oblique imagery, or 0 to 60 that it's -a Collection with lots of different look angles. - -- Fields that have only one or a handful of values are also great to summarize. Collections with a single satellite may -use a single [`gsd`](item-spec/common-metadata.md#instrument) field in the summary, and it's quite useful for users to know -that all data is going to be the same resolution. Similarly it's useful to know the names of all the -[`platform` values](item-spec/common-metadata.md#instrument) that are used in the Collection. - -- It is less useful to summarize fields that have numerous different discrete values that can't easily be represented -in a range. These will mostly be string values, when there aren't just a handful of options. For example if you had a -'location' field that gave 3 levels of administrative region (like 'San Francisco, California, United States') to help people -understand more intuitively where a shot was taken. If your Collection has millions of Items, or even hundreds, you don't want -to include all the different location string values in a summary. - -- Fields that consist of arrays are more of a judgement call. For example [`instruments`](item-spec/common-metadata.md#instrument) -is straightforward and recommended, as the elements of the array are a discrete set of options. On the other hand -[`proj:transform`](https://github.com/stac-extensions/projection/blob/main/README.md#projtransform) -makes no sense to summarize, as the union of all the values -in the array are meaningless, as each Item is describing its transform, so combining them would just be a bunch of random numbers. -So if the values contained in the array are independently meaningful (not interconnected) and there aren't hundreds of potential -values then it is likely a good candidate to summarize. - -We do highly recommend including an [`eo:bands`](https://github.com/stac-extensions/eo/blob/main/README.md#eobands) -summary if your Items implement `eo:bands`, -especially if it represents just one satellite or constellation. This should be a union of all the potential bands that you -have in assets. It is ok to only add the summary at the Collection level without putting an explicit `eo:bands` summary at the -`properties` level of an Item, since that is optional. This gives users of the Collection a sense of the sensor capabilities without -having to examine specific Items or aggregate across every Item. - -Note that the ranges of summaries don't have to be exact. If you are publishing a catalog that is constantly updating with -data from a high agility satellite you can put the `view:off_nadir` range to be the expected values, based on the satellite -design, instead of having it only represent the off nadir angles that are Items for assets already captured in the catalog. -We don't want growing catalogs to have to constantly check and recalculate their summaries whenever new data comes in - its -just meant to give users a sense of what types of values they could expect. - -### Use of links - -The STAC specifications allow both relative and absolute links, and says that `self` links are not required, but are -strongly recommended. This is what the spec must say to enable the various use cases, but there is more subtlety for when it -is essential to use different link types. The best practice is to use one of the below catalog types, applying the link -recommendations consistently, instead of just haphazardly applying relative links in some places and absolute ones in other places. - -#### Self-contained Catalogs - -A 'self-contained catalog' is one that is designed for portability. Users may want to download a catalog from online and be -able to use it on their local computer, so all links need to be relative. Or a tool that creates catalogs may need to work -without knowing the final location that it will live at online, so it isn't possible to set absolute 'self' URL's. These use -cases should utilize a catalog that follows the listed principles: - -- **Only relative href's in structural `links`**: The full catalog structure of links down to sub-catalogs and Items, and their -links back to their parents and roots, should be done with relative URL's. The structural rel types include `root`, `parent`, -`child`, `item`, and `collection`. Other links can be absolute, especially if they describe a resource that makes less sense in -the catalog, like [sci:doi](https://github.com/stac-extensions/scientific/blob/main/README.md#item-and-collection-fields), -`derived_from` or even `license` (it can be nice to include the license in the catalog, but some licenses live at a canonical -online location which makes more sense to refer to directly). This enables the full catalog to be downloaded or -copied to another location and to still be valid. This also implies no `self` link, as that link must be absolute. - -- **Use Asset `href` links consistently**: The links to the actual assets are allowed to be either relative or absolute. There -are two types of 'self-contained catalogs'. - -#### Self-contained Metadata Only - -These consist of just the STAC metadata (Collection, Catalog and Item files), and uses absolute href -links to refer to the online locations of the assets. - -#### Self-contained with Assets - -These use relative href links for the assets, and includes them in the folder structure. -This enables offline use of a catalog, by including all the actual data, referenced locally. - -Self-contained catalogs tend to be used more as static catalogs, where they can be easily passed around. But often they will -be generated by a more dynamic STAC service, enabling a subset of a catalog or a portion of a search criteria to be downloaded -and used in other contexts. That catalog could be used offline, or even published in another location. - -Self-contained catalogs are not just for offline use, however - they are designed to be able to be published online and to live -on the cloud in object storage. They just aim to ease the burden of publishing, by not requiring lots of updating of links. -Adding a single `self` link at the root is recommended for online catalogs, -turning it into a 'relative published catalog', as detailed below. -This anchors it in an online location and enables provenance tracking. - -#### Published Catalogs - -While STAC is useful as a portable format to move between systems, the goal is really to enable search. While any combination -of absolute and relative links is technically allowed by the specification, it is strongly recommended to follow one of the -patterns described below when publishing online. Many clients will not properly handle arbitrary mixes of absolute and relative -href's. - -We refer to a 'published catalog' as one that lives online in a stable location, and uses `self` links to establish its location and -enable easy provenance tracking. There are two types of published catalogs: - -#### Absolute Published Catalog - -This is a catalog that uses absolute links for everything, both in the `links` objects and in the -`asset` hrefs. It includes `self` links for every Item. Generally these are implemented by dynamic catalogs, as it is quite -easy for them to generate the proper links dynamically. But a static catalog that knows its published location could easily -implement it. - -#### Relative Published Catalog - -This is a self-contained catalog as described above, except it includes an absolute `self` link at -the root to identify its online location. This is designed so that a self-contained catalog (of either type, with its -assets or just metadata) can be 'published' online -by just adding one field (the self link) to its root (Catalog or Collection). All the other links should remain the same. The resulting catalog -is no longer compliant with the self-contained catalog recommendations, but instead transforms into a 'relative published catalog'. -With this, a client may resolve Item and sub-catalog self links by traversing parent and root links, but requires reading -multiple sources to achieve this. - -So if you are writing a STAC client it is recommended to start with just supporting these two types of published catalogs. In -turn, if your data is published online publicly or for use on an intranet then following these recommendations will ensure -that a wider range of clients will work with it. - -### Using Relation Types - -Implementors of STAC are highly recommended to be quite liberal with their `links`, and to use the `rel` field (in conjunction -with the `type` field) to communicate the structure and content of related entities. While each STAC spec describes some of the -'custom' relations STAC has set, the ideal is to reuse official [IANA Link Relation -Types](https://www.iana.org/assignments/link-relations/link-relations.xhtml) as much as possible. The following table describes -a number of the common official relations that are used in production STAC implementations. - -| Type | Description | -| --------- | ------------------------------------------------------------ | -| alternate | It is recommended that STAC Items are also available as HTML, and should use this rel with `"type" : "text/html"` to tell clients where they can get a version of the Item or Collection to view in a browser. See [STAC on the Web in Best Practices](#stac-on-the-web) for more information. | -| canonical | The URL of the [canonical](https://en.wikipedia.org/wiki/Canonical_link_element) version of the Item or Collection. API responses and copies of catalogs should use this to inform users that they are direct copy of another STAC Item, using the canonical rel to refer back to the primary location. | -| via | The URL of the source metadata that this STAC Item or Collection is created from. Used similarly to canonical, but refers back to a non-STAC record (Landsat MTL, Sentinel tileInfo.json, etc) | -| prev | Indicates that the link's context is a part of a series, and that the previous in the series is the link target. Typically used in STAC by API's, to return smaller groups of Items or Catalogs/Collections. | -| next | Indicates that the link's context is a part of a series, and that the next in the series is the link target. Typically used in STAC by API's, to return smaller groups of Items or Catalogs/Collections. | -| preview | Refers to a resource that serves as a preview (see [RFC 6903, sec. 3](https://tools.ietf.org/html/rfc6903#section-3)), usually a lower resolution thumbnail. In STAC this would usually be the same URL as the [thumbnail](#thumbnail) asset, but adding it as a link in addition enables OGC API clients that can't read assets to make use of it. It also adds support for thumbnails to STAC Catalogs as they can't list assets. | - -Being liberal with the `links` also means that it's ok to have repeated links with the same `href`. For example the -`parent` and `root` relation types will point at the same file when the child is directly below the root, and it is -recommended to include both. - -### Versioning for Catalogs - -In the Item and Collection STAC JSON, versions and deprecation can be indicated with the -[Versioning Indicators Extension](https://github.com/stac-extensions/version). - -The [Items and Collections API Version Extension](https://github.com/stac-extensions/version/) provides endpoints and -semantics for keeping and accessing previous versions of Collections and Items. The same semantics can be used in static -catalogs to preserve previous versions of the documents and link them together. - -In order to achieve this, the static catalog must make sure that for every record created, a copy of the record is also -created in a separate location and it is named with the version id adopted by the catalog. See -[here](https://github.com/stac-extensions/version/blob/main/README.md#version-id) for recommendations on versioning schema. - -The main record should also provide a link to the versioned record following the linking patterns described -[here](https://github.com/stac-extensions/version/blob/main/README.md#relation-types). For every update to the record, the same -cycle is repeated: - -1. Add link from the updated record to the previous version -2. Create a copy of the updated record and name it correctly - -#### Example - -When the record `my_item.json` is created, a copy of it is also created. `my_item.json` includes `permalink` to `my_item_01.json`. -The version suffix of the file name is taken from the version field of the record when it is available. - -- `root / collections / example_collection / items / my_item / my_item.json` -- `root / collections / example_collection / items / my_item / my_item_01.json` - -When `my_item.json` is updated, the new `my_item.json` includes a link to `my_item_01.json` and is also copied to `my_item_02.json`. -This ensures that `my_item_02.json` includes a link to `my_item_01.json` - -- `root / collections / example_collection / items / my_item / my_item.json` -- `root / collections / example_collection / items / my_item / my_item_01.json` -- `root / collections / example_collection / items / my_item / my_item_02.json` - -### Static to Dynamic best practices - -Many implementors are using static catalogs to be the reliable core of their dynamic services, or layering their STAC API -on top of any static catalog that is published. These are some recommendations on how to handle this: - -#### Ingestion and links - -Implementors have found that it's best to 'ingest' a static STAC into an internal datastore (often elasticsearch, but a -traditional database could work fine too) and then generate the full STAC API responses from that internal representation. -There are instances that have the API refer directly to the static STAC Items, but this only works well if the static STAC -catalog is an 'absolute published catalog'. So the recommendation is to always use absolute links - either in the static -published catalog, or to create new absolute links for the STAC search/ endpoint -responses, with the API's location at the base url. The `/` endpoint with the catalog could either link directly -to the static catalog, or can follow the 'dynamic catalog layout' recommendations above with a new set of URL's. - -Ideally each Item would use its `links` to provide a reference back to the static location. The location of the static -Item should be treated as the canonical location, as the generated API is more likely to move or be temporarily down. The -spec provides the `derived_from` rel field, which fits well enough, but `canonical` is likely the more appropriate one -as everything but the links should be the same. - -#### Keep catalogs in sync with cloud notification and queue services - -There is a set of emerging practices to use services like Amazon's Simple Queue Service (SQS) -and Simple Notification Service (SNS) to keep catalogs in sync. -There is a great [blog post](https://aws.amazon.com/blogs/publicsector/keeping-a-spatiotemporal-asset-catalog-stac-up-to-date-with-sns-sqs/) -on the CBERS STAC implementation on AWS. -The core idea is that a static catalog should emit a notification whenever it changes. The recommendation for SNS is to use the STAC -Item JSON as the message body, with some fields such as a scene’s datetime and geographic bounding box that allows -basic geographic filtering from listeners. - -The dynamic STAC API would then listen to the notifications and update its internal datastore whenever new data comes into -the static catalog. Implementors have had success using AWS Lambda to do a full 'serverless' updating of the elasticsearch -database, but it could just as easily be a server-based process. - -## How to Differentiate STAC Files - -Any tool that crawls a STAC implementation or encounters a STAC file in the wild needs a clear way to determine if it is an Item, -Collection or Catalog. As of 1.0.0 this is done primarily -with the `type` field, and secondarily in Items with `stac_version`, or optionally the `rel` of the link to it. - -```shell -if type is 'Collection' - => Collection -else if type is 'Catalog' - => Catalog -else if type is 'Feature' and stac_version is defined - => Item -else - => Invalid (JSON) -``` - -When crawling a STAC implementation, one can also make use of the [relation type](catalog-spec/catalog-spec.md#relation-types -) (`rel` field) when following a link. If it is an `item` rel type then the file must be a STAC Item. If it is `child`, `parent` or -`root` then it must be a Catalog or a Collection, though the final determination between the two requires looking at the the `type` field -in the Catalog or Collection JSON that is linked to. Note that there is also a `type` field in STAC Link and Asset objects, but that -is for the Media Type, but there are not specific media types for Catalog and Collection. See the sections on [STAC media -types](catalog-spec/catalog-spec.md#media-types), and [Asset media types](item-spec/item-spec.md#asset-media-type) for more information. - -In versions of STAC prior to 1.0 the process was a bit more complicated, as there was no `type` field for catalogs and collections. -See [this issue comment](https://github.com/radiantearth/stac-spec/issues/889#issuecomment-684529444) for a heuristic that works -for older STAC versions. diff --git a/stac-spec/catalog-spec/README.md b/stac-spec/catalog-spec/README.md deleted file mode 100644 index d70881b6..00000000 --- a/stac-spec/catalog-spec/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# STAC Catalog Specification - -A STAC [Catalog](catalog-spec.md) is a top-level object that logically groups other Catalog, Collection, -and [Item](../item-spec/item-spec.md) objects. A Catalog contains an array of Link objects to these other -objects and can include additional metadata to describe the objects contained therein. It is defined in full -in the [STAC Catalog Specification](catalog-spec.md). - -For more information on how the parts of STAC fit together see the [overview](../overview.md) document. - -A Catalog is typically the "entry point" into a STAC object hierarchy. -For example, the root endpoint ("landing page") of a STAC API implementation is a Catalog. -For many static STAC catalogs (e.g., those defined only by a set of files on disk or in a cloud object store), -the root URL points to a Catalog that acts as the starting point to traverse the entire catalog of Catalog, Collection, and Item objects. - -While STAC Catalogs mostly describe a structure of links and Items, -a key related specification is the [STAC Collection Specification](../collection-spec/collection-spec.md), -which contains fields that further describe the group of Items in a Catalog. - -A STAC Catalog requires a subset of the fields required by a Collection. -These are distinguished from one another by the `type` field, which will have the value `Catalog` or `Collection`. -This means that a Collection can be changed to a Catalog simply by changing this `type` field. -The parent-child relationships among Catalogs and Collections are for objects of these types, -as there is no subtyping relationship between the Collection and Catalog types, even through they share field names. - -Catalogs are designed so that a simple file server on the web or object store like Amazon S3 can store JSON that defines a -full Catalog. More dynamic services can also return a Catalog structure, and the [STAC API](https://github.com/radiantearth/stac-api-spec) -specification contains an OpenAPI definition of the standard way to do this, at the `/` endpoint. - -## In this directory - -**Specification:** The main Catalog specification is in *[catalog-spec.md](catalog-spec.md)*. -It includes in depth explanation of the structures and fields. - -**Schemas:** The schemas to validate the core Catalog definition are found in the *[json-schema/](json-schema/)* folder. -The primary one is *[catalog.json](json-schema/catalog.json)*. - -## Catalog Evolution - -The Catalog specification is maturing, but it is still relatively early days. The core of Catalog has been defined very -narrowly, to just describe a structure that can be followed by people or machines, so most additional functionality will -be defined in additional specifications and extensions. The only anticipated changes to the core of Catalog are to add in -additional extension mechanisms for others to use. diff --git a/stac-spec/catalog-spec/catalog-spec.md b/stac-spec/catalog-spec/catalog-spec.md deleted file mode 100644 index 8b26dce0..00000000 --- a/stac-spec/catalog-spec/catalog-spec.md +++ /dev/null @@ -1,129 +0,0 @@ -# STAC Catalog Specification - -- [Catalog fields](#catalog-fields) - - [Additional Field Information](#additional-field-information) - - [stac_version](#stac_version) - - [stac_extensions](#stac_extensions) - - [Link Object](#link-object) - - [Relation types](#relation-types) -- [Media Types](#media-types) - - [Media Type for STAC Catalogs](#media-type-for-stac-catalogs) - - [STAC Media Types](#stac-media-types) -- [Extensions](#extensions) - -This document explains the structure and content of a STAC **Catalog** object. A STAC Catalog object -represents a logical group of other Catalog, -[Collection](../collection-spec/collection-spec.md), and [Item](../item-spec/item-spec.md) objects. -These Items can be linked to directly from a Catalog, or the Catalog can link to other Catalogs (often called -sub-catalogs) that contain links to Collections and Items. The division of sub-catalogs is up to the implementor, -but is generally done to aid the ease of online browsing by people. - -A Catalog object will typically be the entry point into a STAC catalog. Their -purpose is discovery: to be browsed by people or be crawled -by clients to build a searchable index. - -Any JSON object that contains all the required fields is a valid STAC Catalog object. - -- [Examples](../examples/) - - See an example [catalog.json](../examples/catalog.json). The [collection.json](../examples/collection.json) is also a valid - Catalog file, demonstrating linking to items (it is also a Collection, so has additional fields) -- [JSON Schema](json-schema/catalog.json) - -The [Catalog section of the Overview](../overview.md#catalog-overview) document provides background information on -the structure of Catalogs as well as links to best practices. This specification lays out the requirements -and fields to be compliant. - -This Catalog specification primarily defines a structure for information to be discoverable. Any use -that is publishing a set of related spatiotemporal assets is strongly recommended to also use the -STAC Collection specification to provide additional information about the set of Items -contained in a Catalog, in order to give contextual information to aid in discovery. -STAC Collections all have the same fields as STAC Catalogs, but with different allowed -values for `type` and `stac_extensions`. - -## Catalog fields - -| Element | Type | Description | -| --------------- | ------------- | ------------------------------------------------------------ | -| type | string | **REQUIRED.** Set to `Catalog` if this Catalog only implements the Catalog spec. | -| stac_version | string | **REQUIRED.** The STAC version the Catalog implements. | -| stac_extensions | \[string] | A list of extension identifiers the Catalog implements. | -| id | string | **REQUIRED.** Identifier for the Catalog. | -| title | string | A short descriptive one-line title for the Catalog. | -| description | string | **REQUIRED.** Detailed multi-line description to fully explain the Catalog. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| links | [[Link Object](#link-object)] | **REQUIRED.** A list of references to other documents. | - -### Additional Field Information - -#### stac_version - -In general, STAC versions can be mixed, but please keep the [recommended best practices](../best-practices.md#mixing-stac-versions) in mind. - -#### stac_extensions - -A list of extensions the Catalog implements. -The list consists of URLs to JSON Schema files that can be used for validation. -This list must only contain extensions that extend the Catalog specification itself, -see the 'Scope' for each of the extensions. -This must **not** declare the extensions that are only implemented in child Collection objects or child Item objects. - -### Link Object - -This object describes a relationship with another entity. Data providers are advised to be liberal -with links. - -| Field Name | Type | Description | -| ---------- | ------ | ----------- | -| href | string | **REQUIRED.** The actual link in the format of an URL. Relative and absolute links are both allowed. | -| rel | string | **REQUIRED.** Relationship between the current document and the linked document. See chapter ["Relation types"](#relation-types) for more information. | -| type | string | [Media type](#media-types) of the referenced entity. | -| title | string | A human readable title to be used in rendered displays of the link. | - -For a full discussion of the situations where relative and absolute links are recommended see the -['Use of links'](../best-practices.md#use-of-links) section of the STAC best practices. - -#### Relation types - -The following types are commonly used as `rel` types in the Link Object of a STAC Catalog: - -| Type | Description | -| ------- | ----------- | -| self | STRONGLY RECOMMENDED. *Absolute* URL to the location that the Catalog file can be found online, if available. This is particularly useful when in a download package that includes metadata, so that the downstream user can know where the data has come from. | -| root | STRONGLY RECOMMENDED. URL to the root STAC Catalog or [Collection](../collection-spec/README.md). Catalogs should include a link to their root, even if it's the root and points to itself. | -| parent | URL to the parent STAC entity (Catalog or Collection). Non-root Catalogs should include a link to their parent. | -| child | URL to a child STAC entity (Catalog or Collection). | -| item | URL to a STAC Item. | - -**Note:** A link to at least one `item` or `child` (Catalog or Collection) is **RECOMMENDED**, but empty catalogs are -allowed if there is an intent to populate it or its children were removed. - -There are additional `rel` types in the [Using Relation Types](../best-practices.md#using-relation-types) best practice, but as -they are more typically used in Collections, as Catalogs tend to just be used to structure STAC organization, so tend to just use -the ones above. - -## Media Types - -One of the best ways to help inform web clients about the content in a link is to use a common [Media -Type](https://en.wikipedia.org/wiki/Media_type) in the `type` field. In STAC the `type` field is used in both the -'[Link](#link-object)'' and '[Asset](../item-spec/item-spec.md#asset-object)' Objects. It is quite useful for STAC browsers to better determine -what to render and display to users searching and browsing the Catalog. Media types are often referred to by the -now deprecated term "MIME types". - -### Media Type for STAC Catalogs - -A STAC Catalog is a JSON file ([RFC 8259](https://tools.ietf.org/html/rfc8259)), and thus should use the -[`application/json`](https://tools.ietf.org/html/rfc8259#section-11) as the [Media Type](https://en.wikipedia.org/wiki/Media_type) -(previously known as the MIME Type). - -### STAC Media Types - -The following table lists the Media Types to use for STAC structures. - -| Media Type | Description | -| ---------------------- | ---------------------------------------------------------- | -| `application/geo+json` | A STAC [Item](../item-spec/item-spec.md) | -| `application/json` | A STAC Catalog | -| `application/json` | A STAC [Collection](../collection-spec/collection-spec.md) | - -## Extensions - -The [extensions page](../extensions/) gives an overview about relevant extensions for STAC Catalogs. diff --git a/stac-spec/catalog-spec/json-schema/catalog.json b/stac-spec/catalog-spec/json-schema/catalog.json deleted file mode 100644 index 31b2c8f8..00000000 --- a/stac-spec/catalog-spec/json-schema/catalog.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0/catalog-spec/json-schema/catalog.json#", - "title": "STAC Catalog Specification", - "description": "This object represents Catalogs in a SpatioTemporal Asset Catalog.", - "allOf": [ - { - "$ref": "#/definitions/catalog" - } - ], - "definitions": { - "catalog": { - "title": "STAC Catalog", - "type": "object", - "required": [ - "stac_version", - "type", - "id", - "description", - "links" - ], - "properties": { - "stac_version": { - "title": "STAC version", - "type": "string", - "const": "1.0.0" - }, - "stac_extensions": { - "title": "STAC extensions", - "type": "array", - "uniqueItems": true, - "items": { - "title": "Reference to a JSON Schema", - "type": "string", - "format": "iri" - } - }, - "type": { - "title": "Type of STAC entity", - "const": "Catalog" - }, - "id": { - "title": "Identifier", - "type": "string", - "minLength": 1 - }, - "title": { - "title": "Title", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string", - "minLength": 1 - }, - "links": { - "title": "Links", - "type": "array", - "items": { - "$ref": "#/definitions/link" - } - } - } - }, - "link": { - "type": "object", - "required": [ - "rel", - "href" - ], - "properties": { - "href": { - "title": "Link reference", - "type": "string", - "format": "iri-reference", - "minLength": 1 - }, - "rel": { - "title": "Link relation type", - "type": "string", - "minLength": 1 - }, - "type": { - "title": "Link type", - "type": "string" - }, - "title": { - "title": "Link title", - "type": "string" - } - } - } - } -} diff --git a/stac-spec/collection-spec/README.md b/stac-spec/collection-spec/README.md deleted file mode 100644 index c94bfc31..00000000 --- a/stac-spec/collection-spec/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# STAC Collection Specification - -A STAC [Collection](collection-spec.md) object is used to describe a group of related -Items. It builds on fields defined for a [Catalog](../catalog-spec/catalog-spec.md) object -by further defining and explaining logical groups of [Items](../item-spec/item-spec.md). A -Collection can have parent Catalog and Collection objects, as well as child Item, Catalog, -and Collection objects. These parent-child relationships among objects of these types, as there is no -subtyping relationship between the Collection and Catalog types, even through they share field names. - -A Collection provides a flexible mechanism to provide additional metadata about a set of Items. -Generally, is used to describe a set of assets that -are defined with the same properties and share higher-level metadata. There is no -standardized name for this sort of logical grouping, but other places it is called a " -dataset series" (ESA, ISO 19115), "collection" (CNES, NASA), "dataset" (JAXA), or "product" -(JAXA). In GIS terms, the Items are -'[features](https://en.wikipedia.org/wiki/Simple_Features)' (that link to assets) and -a Collection is the 'layer'. STAC uses the same terms as the -[OGC Features API](https://ogcapi.ogc.org/features/). A STAC Collection is a valid -[Feature API Collection](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#example_4), -extending it with additional fields. - -Thus, the additional fields in a Collection detail the type of information a user would want to -know about the group of Items it contains. Items are required to provide a link back to their -collection definition. But the Collection is independent of STAC Items and STAC Catalogs, and thus -other parties can also use this specification standalone, as a way to describe collections in a -lightweight way. For more details on how the STAC specs fit together see the [overview](../overview.md) -document. - -## In this directory - -**Specification:** The main STAC Collection specification is in *[collection-spec.md](collection-spec.md)*. -It includes an overview and in depth explanation of the -structures and fields. - -**Schemas:** The schemas to validate the STAC Collection definition are found in the -*[json-schema/](json-schema/)* folder. The primary one is *[collection.json](json-schema/collection.json)*. - -## Collection Flexibility - -STAC Collections are defined for flexibility. They only require a handful of fields, and -implementors are free to add most any JSON field or object that they want via extensions. -This flexibility and extensibility is a design goal, so that it is quite easy to implement -a collection and be able to adapt it to most any data model. - -Implementors are encouraged to do what makes sense for them, and to check out the [examples](../examples/) and -[other implementations](https://stacindex.org/catalogs) for current best practices. diff --git a/stac-spec/collection-spec/collection-spec.md b/stac-spec/collection-spec/collection-spec.md deleted file mode 100644 index 8b6f4f15..00000000 --- a/stac-spec/collection-spec/collection-spec.md +++ /dev/null @@ -1,332 +0,0 @@ -# STAC Collection Specification - -- [Overview](#overview) -- [Collection fields](#collection-fields) - - [Additional Field Information](#additional-field-information) - - [stac_version](#stac_version) - - [stac_extensions](#stac_extensions) - - [id](#id) - - [license](#license) - - [summaries](#summaries) - - [assets](#assets) - - [Extent Object](#extent-object) - - [Spatial Extent Object](#spatial-extent-object) - - [Temporal Extent Object](#temporal-extent-object) - - [Provider Object](#provider-object) - - [Link Object](#link-object) - - [Relation types](#relation-types) - - [Asset Object](#asset-object) - - [Range Object](#range-object) - - [JSON Schema Object](#json-schema-object) -- [Media Type for STAC Collections](#media-type-for-stac-collections) -- [Standalone Collections](#standalone-collections) - -## Overview - -The STAC Collection Specification defines a set of common fields to describe a group of Items that share properties and metadata. The -Collection Specification shares all fields with the STAC [Catalog Specification](../catalog-spec/catalog-spec.md) (with different allowed -values for `type` and `stac_extensions`) and adds fields to describe the whole dataset and the included set of Items. Collections -can have both parent Catalogs and Collections and child Items, Catalogs and Collections. - -A STAC Collection is represented in JSON format. -Any JSON object that contains all the required fields is a valid STAC Collection and also a valid STAC Catalog. - -STAC Collections are compatible with the [Collection](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#example_4) JSON -specified in [*OGC API - Features*](https://ogcapi.ogc.org/features/), but they are extended with additional fields. - -- [Examples](../examples/): - - Sentinel 2: A basic standalone example of a [Collection](../examples/collection-only/collection.json) without Items. - - Simple Example: A [Collection](../examples/collection.json) that links to 3 example Items. - - Extension Collection: An additional [Collection](../examples/extensions-collection/collection.json), which is used to highlight - various [extension](../extensions) functionality, but serves as another example. -- [JSON Schema](json-schema/collection.json) - -## Collection fields - -| Element | Type | Description | -| --------------- | ------------------------------------------------ | ------------------------------------------------------------ | -| type | string | **REQUIRED.** Must be set to `Collection` to be a valid Collection. | -| stac_version | string | **REQUIRED.** The STAC version the Collection implements. | -| stac_extensions | \[string] | A list of extension identifiers the Collection implements. | -| id | string | **REQUIRED.** Identifier for the Collection that is unique across the provider. | -| title | string | A short descriptive one-line title for the Collection. | -| description | string | **REQUIRED.** Detailed multi-line description to fully explain the Collection. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| keywords | \[string] | List of keywords describing the Collection. | -| license | string | **REQUIRED.** Collection's license(s), either a SPDX [License identifier](https://spdx.org/licenses/), `various` if multiple licenses apply or `proprietary` for all other cases. | -| providers | \[[Provider Object](#provider-object)] | A list of providers, which may include all organizations capturing or processing the data or the hosting provider. Providers should be listed in chronological order with the most recent provider being the last element of the list. | -| extent | [Extent Object](#extent-object) | **REQUIRED.** Spatial and temporal extents. | -| summaries | Map | STRONGLY RECOMMENDED. A map of property summaries, either a set of values, a range of values or a [JSON Schema](https://json-schema.org). | -| links | \[[Link Object](#link-object)] | **REQUIRED.** A list of references to other documents. | -| assets | Map | Dictionary of asset objects that can be downloaded, each with a unique key. | - -### Additional Field Information - -#### stac_version - -In general, STAC versions can be mixed, but please keep the [recommended best practices](../best-practices.md#mixing-stac-versions) in mind. - -#### stac_extensions - -A list of extensions the Collection implements. -The list consists of URLs to JSON Schema files that can be used for validation. -This list must only contain extensions that extend the Collection specification itself, -see the the 'Scope' for each of the extensions. -This must **not** declare the extensions that are only implemented in child Collection objects or child Item objects. - -#### id - -It is important that Collection identifiers are unique across the provider. And providers should strive as much as possible to make -their Collection ids 'globally' unique, prefixing any common information with a unique string. This could be the provider's name if -it is a fairly unique name, or their name combined with the domain they operate in. - -#### license - -Collection's license(s) as a SPDX [License identifier](https://spdx.org/licenses/). -Alternatively, use `proprietary` (see below) if the license is not on the SPDX license list or `various` if multiple licenses apply. -In all cases links to the license texts SHOULD be added, see the `license` link relation type. -If no link to a license is included and the `license` field is set to `proprietary`, the Collection is private, -and consumers have not been granted any explicit right to use the data. - -#### summaries - -Collections are *strongly recommended* to provide summaries of the values of fields that they can expect from the `properties` -of STAC Items contained in this Collection. This enables users to get a good sense of what the ranges and potential values of -different fields in the Collection are, without having to inspect a number of Items (or crawl them exhaustively to get a definitive answer). -Summaries are often used to give users a sense of the data in [Standalone Collections](#standalone-collections), -describing the potential values even when it can't be accessed as Items. They also give clients enough information to -build tailored user interfaces for querying the data, by presenting the potential values that are available. - Fields selected to be included in summaries should capture all the potential values of the - field that appear in every Item underneath the collection, including in any nested sub-Catalogs. - -A summary for a field can be specified in three ways: - -1. A set of all distinct values in an array: The set of values must contain at least one element and it is strongly recommended to list all values. - If the field summarizes an array (e.g. [`instruments`](../item-spec/common-metadata.md#instrument)), - the field's array elements of each Item must be merged to a single array with unique elements. -2. A Range in a [Range Object](#range-object): Statistics by default only specify the range (minimum and maximum values), - but can optionally be accompanied by additional statistical values. - The range specified by the `minimum` and `maximum` properties can specify the potential range of values, - but it is recommended to be as precise as possible. -3. Extensible JSON Schema definitions for fine-grained information, see the [JSON Schema Object](#json-schema-object) - section for more. - -All values must follow the schema of the property field they summarize, unless the field is an array as described in (1) above. -So the values in the array or the values given for `minimum` and `maximum` must comply to the original data type -and any further restrictions that apply for the property they summarize. -For example, the `minimum` for `gsd` can't be lower than zero and the summaries for `platform` and `instruments` -must each be an array of strings (or alternatively minimum and maximum values, but that's not very meaningful). - -It is recommended to list as many properties as reasonable so that consumers get a full overview about the properties included in the Items. -Nevertheless, it is not very useful to list all potential `title` values of the Items. -Also, a range for the `datetime` property may be better suited to be included in the STAC Collection's `extent` field. -In general, properties that are covered by the Collection specification should not be repeated in the summaries. - -See the [examples folder](../examples) for Collections with summaries to get a sense of how to use them. - -#### assets - -This provides an optional mechanism to expose assets that don't make sense at the Item level. -It is a dictionary of [Asset Objects](#asset-object) associated with the Collection that can be -downloaded or streamed, each with a unique key. -In general, the keys don't have any meaning and are considered to be non-descriptive unique identifiers. -Providers may assign any meaning to the keys for their respective use cases, but must not expect that clients understand them. -To communicate the purpose of an asset better use the `roles` field in the [Asset Object](#asset-object). -The definition provided here, at the Collection level, is the same as the -[Asset Object in Items](../item-spec/item-spec.md#asset-object). - -There are a few guidelines for using the asset construct at the Collection level: - -- Collection-level assets SHOULD NOT list any files also available in Items. -- If possible, item-level assets are always the preferable way to expose assets. - -Collection-level assets can be useful in some scenarios, for example: -1. Exposing additional data that applies Collection-wide and you don't want to expose it in each Item. - This can be Collection-level metadata or a thumbnail for visualization purposes. -2. Individual Items can't properly be distinguished for some data structures, - e.g. [Zarr](https://zarr.readthedocs.io/) as it's a data structure not contained in single files. -3. Exposing assets for - "[Standalone Collections](https://github.com/radiantearth/stac-spec/blob/master/collection-spec/collection-spec.md#standalone-collections)". - -Oftentimes it is possible to model data and assets with either a Collection or an Item. In those scenarios we *recommend* to use -Items as much as is feasible, as they designed for assets. Using Collection-level assets should only be used if there is not another -option. - -### Extent Object - -The object describes the spatio-temporal extents of the Collection. Both spatial and temporal extents are required to be specified. - -| Element | Type | Description | -| -------- | ------------------------------------------------- | --------------------------------------------------------------------- | -| spatial | [Spatial Extent Object](#spatial-extent-object) | **REQUIRED.** Potential *spatial extents* covered by the Collection. | -| temporal | [Temporal Extent Object](#temporal-extent-object) | **REQUIRED.** Potential *temporal extents* covered by the Collection. | - -#### Spatial Extent Object - -The object describes the spatial extents of the Collection. - -| Element | Type | Description | -| ------- | ------------ | -------------------------------------------------------------------- | -| bbox | \[\[number]] | **REQUIRED.** Potential *spatial extents* covered by the Collection. | - -**bbox**: Each outer array element can be a separate spatial extent describing the bounding boxes -of the assets represented by this Collection using either 2D or 3D geometries. - -The first bounding box always describes the overall spatial extent of the data. All subsequent bounding boxes can be -used to provide a more precise description of the extent and identify clusters of data. -Clients only interested in the overall spatial extent will only need to access the first item in each array. -It is recommended to only use multiple bounding boxes if a union of them would then include -a large uncovered area (e.g. the union of Germany and Chile). - -The length of the inner array must be 2*n where n is the number of dimensions. -The array contains all axes of the southwesterly most extent followed by all axes of the northeasterly most extent specified in -Longitude/Latitude or Longitude/Latitude/Elevation based on [WGS 84](http://www.opengis.net/def/crs/OGC/1.3/CRS84). -When using 3D geometries, the elevation of the southwesterly most extent is the minimum depth/height in meters -and the elevation of the northeasterly most extent is the maximum. - -The coordinate reference system of the values is WGS 84 longitude/latitude. -Example that covers the whole Earth: `[[-180.0, -90.0, 180.0, 90.0]]`. -Example that covers the whole earth with a depth of 100 meters to a height of 150 meters: `[[-180.0, -90.0, -100.0, 180.0, 90.0, 150.0]]`. - -#### Temporal Extent Object - -The object describes the temporal extents of the Collection. - -| Element | Type | Description | -| -------- | ------------------ | --------------------------------------------------------------------- | -| interval | \[\[string\|null]] | **REQUIRED.** Potential *temporal extents* covered by the Collection. | - -**interval**: Each outer array element can be a separate temporal extent. -The first time interval always describes the overall temporal extent of the data. All subsequent time intervals -can be used to provide a more precise description of the extent and identify clusters of data. -Clients only interested in the overall extent will only need to access the first item in each array. -It is recommended to only use multiple temporal extents if a union of them would then include a large -uncovered time span (e.g. only having data for the years 2000, 2010 and 2020). - -Each inner array consists of exactly two elements, either a timestamp or `null`. - -Timestamps consist of a date and time in UTC and MUST be formatted according to -[RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). -The temporal reference system is the Gregorian calendar. - -Open date ranges are supported by setting the start and/or the end time to `null`. -Example for data from the beginning of 2019 until now: `[["2019-01-01T00:00:00Z", null]]`. -It is recommended to provide at least a rough guideline on the temporal extent and thus -it's not recommended to set both start and end time to `null`. Nevertheless, this is possible -if there's a strong use case for an open date range to both sides. - -### Provider Object - -The object provides information about a provider. -A provider is any of the organizations that captures or processes the content of the Collection -and therefore influences the data offered by this Collection. -May also include information about the final storage provider hosting the data. - -| Field Name | Type | Description | -| ----------- | --------- | ------------------------------------------------------------ | -| name | string | **REQUIRED.** The name of the organization or the individual. | -| description | string | Multi-line description to add further provider information such as processing details for processors and producers, hosting details for hosts or basic contact information. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| roles | \[string] | Roles of the provider. Any of `licensor`, `producer`, `processor` or `host`. | -| url | string | Homepage on which the provider describes the dataset and publishes contact information. | - -**roles**: The provider's role(s) can be one or more of the following elements: - -- *licensor*: The organization that is licensing the dataset under the license specified in the Collection's `license` field. -- *producer*: The producer of the data is the provider that initially captured and processed the source data, e.g. ESA for Sentinel-2 data. -- *processor*: A processor is any provider who processed data to a derived product. -- *host*: The host is the actual provider offering the data on their storage. - There should be no more than one host, specified as last element of the list. - -### Link Object - -This object describes a relationship with another entity. Data providers are advised to be liberal with links. - -| Field Name | Type | Description | -| ---------- | ------ | ------------------------------------------------------------ | -| href | string | **REQUIRED.** The actual link in the format of an URL. Relative and absolute links are both allowed. | -| rel | string | **REQUIRED.** Relationship between the current document and the linked document. See chapter "[Relation types](#relation-types)" for more information. | -| type | string | [Media type](../catalog-spec/catalog-spec.md#media-types) of the referenced entity. | -| title | string | A human readable title to be used in rendered displays of the link. | - -For a full discussion of the situations where relative and absolute links are recommended see the -['Use of links'](../best-practices.md#use-of-links) section of the STAC best practices. - -#### Relation types - -STAC Collections use a variety of `rel` types in the link object, -to describe the exact nature of the link between this Collection and the entity it is linking to. -It is recommended to use the official -[IANA Link Relation Types](https://www.iana.org/assignments/link-relations/link-relations.xhtml) where possible. -The following table explains places where custom STAC `rel` types are used for ollections. -This is done where there is not a clear official option, or where STAC uses an official type but adds additional meaning for the STAC context. - -| Type | Description | -| ------- | ------------------------------------------------------------ | -| self | STRONGLY RECOMMENDED. *Absolute* URL to the location that the Collection file can be found online, if available. This is particularly useful when in a download package that includes metadata, so that the downstream user can know where the data has come from. | -| root | URL to the root STAC entity (Catalog or Collection). Collections should include a link to their root, even if it's the root and points to itself. | -| parent | URL to the parent STAC entity (Catalog or Collection). Non-root Collections should include a link to their parent. | -| child | URL to a child STAC entity (Catalog or Collection). | -| item | URL to a STAC Item. All Items linked from a Collection MUST refer back to its Collection with the [`collection` relation type](../item-spec/item-spec.md#relation-types). | -| license | The license URL(s) for the Collection SHOULD be specified if the `license` field is set to `proprietary` or `various`. If there is no public license URL available, it is RECOMMENDED to put the license text in a separate file and link to this file. | -| derived_from | URL to a STAC Collection that was used as input data in the creation of this Collection. See the note in [STAC Item](../item-spec/item-spec.md#derived_from) for more info. | - -A more complete list of possible `rel` types and their meaning in STAC can be found in the -[Using Relation Types](../best-practices.md#using-relation-types) best practice. - -**Note:** The STAC Catalog specification requires a link to at least one `item` or `child` Catalog. -This is *not* a requirement for Collections, but *recommended*. In contrast to Catalogs, -it is **REQUIRED** that Items linked from a Collection MUST refer back to its Collection -with the [`collection` relation type](../item-spec/item-spec.md#relation-types). - -### Asset Object - -An Asset is an object that contains a URI to data associated with the Collection that can be downloaded -or streamed. The definition provided here, at the Collection level, is the same as the -[Asset Object in Items](../item-spec/item-spec.md#asset-object). It is allowed to add additional fields. - -| Field Name | Type | Description | -| ----------- | --------- | ----------- | -| href | string | **REQUIRED.** URI to the asset object. Relative and absolute URI are both allowed. | -| title | string | The displayed title for clients and users. | -| description | string | A description of the Asset providing additional details, such as how it was processed or created. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| type | string | [Media type](../item-spec/item-spec.md#asset-media-type) of the asset. See the [common media types](../best-practices.md#common-media-types-in-stac) in the best practice doc for commonly used asset types. | -| roles | \[string] | The [semantic roles](../item-spec/item-spec.md#asset-role-types) of the asset, similar to the use of `rel` in links. | - -### Range Object - -For summaries that would normally consist of a lot of continuous values, statistics can be added instead. -By default, only ranges with a minimum and a maximum value can be specified. -Ranges can be specified for [ordinal](https://en.wikipedia.org/wiki/Level_of_measurement#Ordinal_scale) values only, -which means they need to have a rank order. -Therefore, ranges can only be specified for numbers and some special types of strings. Examples: grades (A to F), dates or times. -Implementors are free to add other derived statistical values to the object, for example `mean` or `stddev`. - -| Field Name | Type | Description | -| ---------- | -------------- | ----------- | -| minimum | number\|string | **REQUIRED.** Minimum value. | -| maximum | number\|string | **REQUIRED.** Maximum value. | - -### JSON Schema Object - -For a full understanding of the summarized field, a JSON Schema can be added for each summarized field. -This allows very fine-grained information for each field and each value as JSON Schema is also extensible. -Each schema must be valid against all corresponding values available for the property in the sub-Items. - -It is recommended to use [JSON Schema draft-07](https://json-schema.org/specification-links.html#draft-7) -to align with the JSON Schemas provided by STAC. Empty schemas are not allowed. - -For an introduction to JSON Schema, see "[Learn JSON Schema](https://json-schema.org/learn/)". - -## Media Type for STAC Collections - -A STAC Collection is a JSON file ([RFC 8259](https://tools.ietf.org/html/rfc8259)), and thus should use the -[`application/json`](https://tools.ietf.org/html/rfc8259#section-11) as the [Media Type](https://en.wikipedia.org/wiki/Media_type) -(previously known as the MIME Type). - -## Standalone Collections - -STAC Collections which don't link to any Item are called **standalone Collections**. -To describe them with more fields than the Collection fields has to offer, -it is allowed to re-use the metadata fields defined by extensions for Items in the `summaries` field. -This makes much sense for fields such as `platform` or `proj:epsg`, which are often the same for a whole Collection, -but doesn't make much sense for `eo:cloud_cover`, which usually varies heavily across a Collection. -The data provider is free to decide, which fields are reasonable to be used. diff --git a/stac-spec/collection-spec/json-schema/collection.json b/stac-spec/collection-spec/json-schema/collection.json deleted file mode 100644 index 2ad20902..00000000 --- a/stac-spec/collection-spec/json-schema/collection.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0/collection-spec/json-schema/collection.json#", - "title": "STAC Collection Specification", - "description": "This object represents Collections in a SpatioTemporal Asset Catalog.", - "allOf": [ - { - "$ref": "#/definitions/collection" - } - ], - "definitions": { - "collection": { - "title": "STAC Collection", - "description": "These are the fields specific to a STAC Collection. All other fields are inherited from STAC Catalog.", - "type": "object", - "required": [ - "stac_version", - "type", - "id", - "description", - "license", - "extent", - "links" - ], - "properties": { - "stac_version": { - "title": "STAC version", - "type": "string", - "const": "1.0.0" - }, - "stac_extensions": { - "title": "STAC extensions", - "type": "array", - "uniqueItems": true, - "items": { - "title": "Reference to a JSON Schema", - "type": "string", - "format": "iri" - } - }, - "type": { - "title": "Type of STAC entity", - "const": "Collection" - }, - "id": { - "title": "Identifier", - "type": "string", - "minLength": 1 - }, - "title": { - "title": "Title", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string", - "minLength": 1 - }, - "keywords": { - "title": "Keywords", - "type": "array", - "items": { - "type": "string" - } - }, - "license": { - "title": "Collection License Name", - "type": "string", - "pattern": "^[\\w\\-\\.\\+]+$" - }, - "providers": { - "type": "array", - "items": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "title": "Organization name", - "type": "string" - }, - "description": { - "title": "Organization description", - "type": "string" - }, - "roles": { - "title": "Organization roles", - "type": "array", - "items": { - "type": "string", - "enum": [ - "producer", - "licensor", - "processor", - "host" - ] - } - }, - "url": { - "title": "Organization homepage", - "type": "string", - "format": "iri" - } - } - } - }, - "extent": { - "title": "Extents", - "type": "object", - "required": [ - "spatial", - "temporal" - ], - "properties": { - "spatial": { - "title": "Spatial extent object", - "type": "object", - "required": [ - "bbox" - ], - "properties": { - "bbox": { - "title": "Spatial extents", - "type": "array", - "minItems": 1, - "items": { - "title": "Spatial extent", - "type": "array", - "oneOf": [ - { - "minItems":4, - "maxItems":4 - }, - { - "minItems":6, - "maxItems":6 - } - ], - "items": { - "type": "number" - } - } - } - } - }, - "temporal": { - "title": "Temporal extent object", - "type": "object", - "required": [ - "interval" - ], - "properties": { - "interval": { - "title": "Temporal extents", - "type": "array", - "minItems": 1, - "items": { - "title": "Temporal extent", - "type": "array", - "minItems": 2, - "maxItems": 2, - "items": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "pattern": "(\\+00:00|Z)$" - } - } - } - } - } - } - }, - "assets": { - "$ref": "../../item-spec/json-schema/item.json#/definitions/assets" - }, - "links": { - "title": "Links", - "type": "array", - "items": { - "$ref": "#/definitions/link" - } - }, - "summaries": { - "$ref": "#/definitions/summaries" - } - } - }, - "link": { - "type": "object", - "required": [ - "rel", - "href" - ], - "properties": { - "href": { - "title": "Link reference", - "type": "string", - "format": "iri-reference", - "minLength": 1 - }, - "rel": { - "title": "Link relation type", - "type": "string", - "minLength": 1 - }, - "type": { - "title": "Link type", - "type": "string" - }, - "title": { - "title": "Link title", - "type": "string" - } - } - }, - "summaries": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "title": "JSON Schema", - "type": "object", - "minProperties": 1, - "allOf": [ - { - "$ref": "http://json-schema.org/draft-07/schema" - } - ] - }, - { - "title": "Range", - "type": "object", - "required": [ - "minimum", - "maximum" - ], - "properties": { - "minimum": { - "title": "Minimum value", - "type": [ - "number", - "string" - ] - }, - "maximum": { - "title": "Maximum value", - "type": [ - "number", - "string" - ] - } - } - }, - { - "title": "Set of values", - "type": "array", - "minItems": 1, - "items": { - "description": "For each field only the original data type of the property can occur (except for arrays), but we can't validate that in JSON Schema yet. See the sumamry description in the STAC specification for details." - } - } - ] - } - } - } -} \ No newline at end of file diff --git a/stac-spec/examples/README.md b/stac-spec/examples/README.md deleted file mode 100644 index a4d046a9..00000000 --- a/stac-spec/examples/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# STAC Examples - -This directory contains various examples for all parts of the STAC specification. -It is structured to be two valid STACs, meaning both [catalog.json](catalog.json) and [collection.json](collection.json) -should successfully load in various tools. They do not follow *all* the [best practices](../best-practices.md) for STAC, mostly -due to the fact that they contrive examples to show the spec and we are hosting in GitHub. But we note below where they differ from an ideal catalog. - -The various fields are mostly fictional, to be able to demonstrate the various aspects of the spec as tersely as possible. To get a sense -of real world STAC implementations we recommend exploring the [stac-examples](http://github.com/stac-utils/stac-examples) repo, which -gathers in one place copies of STAC [Items](../item-spec/item-spec.md) and [Collection](../collection-spec/collection-spec.md) -from a number of different production catalogs that all follow good STAC practices. And you should also explore the various catalogs -listed on [STAC Index](http://stacindex.org), to see full catalogs in production. - -## Organization - -This directory contains two STAC implementations, both valid, but simplified a bit to be illustrative of the key concepts, so -they do not quite follow all the best practices. - -### Simple Collection - -This STAC implementation consists of three files, all contained at the root of the examples directory - -**[collection.json](collection.json)** is a minimal 'simple collection', that links to three items. - -**[simple-item.json](simple-item.json)** is the most minimal possible compliant Item record. Most all data will -include additional fields, as STAC is designed to be a minimal common subset. But it is useful for showing exactly what is -required. - -**[core-item.json](core-item.json)** is a more realistic example, for a hypothetical analytic image -acquisition from a satellite company called 'Remote Data'. It includes additional fields covering the [common -metadata](../item-spec/common-metadata.md). It also links to a variety of assets that is typical for -satellite imagery, as most providers include a number of complementary files. - -**[extended-item.json](extended-item.json)** is arguably an even more realistic example, as it includes a number of the -[extensions](../extensions/) that are commonly used, to demonstrate how implementations tend to start with the core, and add in -a number of the core extensions. - -**[collectionless-item.json](collectionless-item.json)** demonstrates the common metadata that is only used when an Item does not have -a collection. It is recommended to organize items in collections, but we wanted to show how this works. This is not technically in the -'simple collection' of this section, but it follows the same pattern, so is included here. - -### Nested Catalog - -This STAC implementation shows a common pattern, starting with a catalog that links to a number of distinct collections, which may -link down to a number of items. - -**[catalog.json](catalog.json)** is a minimal catalog implementation, linking to two other collections. - -**[collection-only/collection.json](collection-only/collection.json)** is a collection that does not link to any items. This -demonstrates how is is possible to make use of STAC Collections without needing items, to serve as nice summarizing metadata for -tools that work with full layers / collections. This example collection is based on real Sentinel-2 values, so is not quite fictional, -but should be taken as just an example. - -**[extensions-collection/collection.json](extensions-collection/collection.json)** contains a small number of items, that demonstrate -more functionality available in STAC [extensions](../extensions/). These are linked to directly from the individual extensions. These -items follow the recommendations for [Catalog Layout Best Practices](../best-practices.md#catalog-layout). - -## In Depth - -As mentioned above, the files in this examples directory form valid STAC implementations. They are all based on a -fictional remote sensing company called 'Remote Data', with a URL at remotedata.io. This domain has not been set up, so those links -will not work, but any valid data provider should provide valid links to their homepage. - -The examples use the `rd:` prefix to show how providers can use custom fields when there are not set fields. In the examples these -do not link to a schema which is completely valid, but it is recommended that providers do write a JSON schema that can validate -their custom fields (we will work to add an example schema for the `rd:` fields in the future). - -### Catalog Type - -One of the most important STAC Best Practices is to [use links consistently](../best-practices.md#use-of-links), following one of the -described 'catalog types'. The catalogs described here are [Relative Published Catalogs](../best-practices.md#relative-published-catalog), -that use absolute URL's to refer to their assets (so would be an example of a [Self-contained Metadata -Only](../best-practices.md#self-contained-metadata-only) catalog that is published). - -### Differences with STAC Best Practices - -One of the most important documents in this repository is the one about [best practices](../best-practices.md). It describes a number -of practical recommendations gained by people actually implementing STAC. The core spec is designed to be as flexible as possible, so -that it is not too rigid and unable to handle unanticipated needs. But we recommend following as many of the best practices as is -feasible, as it will help ensure various STAC tools work much better. The examples in this folder don't align with all the best -practices, mostly because they are meant to demonstrate things as tersely as possible, and also because they live directly inside -a github repository. As many people will look at these examples and take them as 'how things should be' we felt its important to -highlight where things here differ from the actual best practices. - -#### Catalog Layout - -Another important recommendations concerns the [layout of STAC catalogs](../best-practices.md#catalog-layout). This is important -for tools to be able to expect a certain layout, and most tools will follow the described layout. The simple collection that consists -of the collection.json and its 3 linked items violates this. This is done to be able to show item examples directly in the root of -the 'examples' folder, so people don't have to dig deep into folders to get a quick example. But a proper catalog layout would -put the items in sub-directories, along with their assets. diff --git a/stac-spec/examples/catalog.json b/stac-spec/examples/catalog.json deleted file mode 100644 index b5910be3..00000000 --- a/stac-spec/examples/catalog.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": "examples", - "type": "Catalog", - "title": "Example Catalog", - "stac_version": "1.0.0", - "description": "This catalog is a simple demonstration of an example catalog that is used to organize a hierarchy of collections and their items.", - "links": [ - { - "rel": "root", - "href": "./catalog.json", - "type": "application/json" - }, - { - "rel": "child", - "href": "./extensions-collection/collection.json", - "type": "application/json", - "title": "Collection Demonstrating STAC Extensions" - }, - { - "rel": "child", - "href": "./collection-only/collection.json", - "type": "application/json", - "title": "Collection with no items (standalone)" - }, - { - "rel": "child", - "href": "./collection-only/collection-with-schemas.json", - "type": "application/json", - "title": "Collection with no items (standalone with JSON Schemas)" - }, - { - "rel": "item", - "href": "./collectionless-item.json", - "type": "application/json", - "title": "Collection with no items (standalone)" - }, - { - "rel": "self", - "href": "https://raw.githubusercontent.com/radiantearth/stac-spec/v1.0.0/examples/catalog.json", - "type": "application/json" - } - ] -} diff --git a/stac-spec/examples/collection-only/collection-with-schemas.json b/stac-spec/examples/collection-only/collection-with-schemas.json deleted file mode 100644 index e0023e23..00000000 --- a/stac-spec/examples/collection-only/collection-with-schemas.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "stac_version": "1.0.0", - "stac_extensions": [ - "https://stac-extensions.github.io/eo/v1.0.0/schema.json", - "https://stac-extensions.github.io/sat/v1.0.0/schema.json", - "https://stac-extensions.github.io/view/v1.0.0/schema.json" - ], - "id": "sentinel-2", - "type": "Collection", - "title": "Sentinel-2 MSI: MultiSpectral Instrument, Level-2A", - "description": "The SENTINEL-2 mission is a land monitoring constellation of two satellites each equipped with a MSI (Multispectral Imager) instrument covering 13 spectral bands providing high resolution optical imagery (i.e., 10m, 20m, 60 m) every 10 days with one satellite and 5 days with two satellites", - "license": "proprietary", - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -82.852377834669, - 180, - 82.819463367711 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2017-04-12T02:57:21.459000Z", - "2021-04-22T11:30:12.767000Z" - ] - ] - } - }, - "links": [ - { - "rel": "parent", - "href": "../catalog.json", - "type": "application/json", - "title": "Example Catalog" - }, - { - "rel": "root", - "href": "../catalog.json", - "type": "application/json", - "title": "Example Catalog" - }, - { - "rel": "license", - "href": "https://scihub.copernicus.eu/twiki/pub/SciHubWebPortal/TermsConditions/Sentinel_Data_Terms_and_Conditions.pdf", - "title": "Legal notice on the use of Copernicus Sentinel Data and Service Information" - } - ], - "providers": [ - { - "name": "European Union/ESA/Copernicus", - "roles": [ - "producer", - "licensor" - ], - "url": "https://sentinel.esa.int/web/sentinel/user-guides/sentinel-2-msi" - }, - { - "name": "AWS", - "roles": [ - "host" - ], - "url": "https://registry.opendata.aws/sentinel-2/" - }, - { - "name": "jeobrowser", - "roles": [ - "processor" - ], - "url": "https://github.com/jjrom/resto" - } - ], - "summaries": { - "datetime": { - "minimum": "2017-04-12T02:57:21Z", - "maximum": "2021-04-22T11:30:12Z" - }, - "instruments": { - "type": "string", - "const": "msi", - "title": "Multispectral Intrument", - "count": 6613431 - }, - "resto:landcover": { - "type": "string", - "oneOf": [ - { - "const": "cultivated", - "title": "Cultivated", - "count": 490750 - }, - { - "const": "desert", - "title": "Desert", - "count": 543120 - }, - { - "const": "flooded", - "title": "Flooded", - "count": 5187 - }, - { - "const": "forest", - "title": "Forest", - "count": 767807 - }, - { - "const": "herbaceous", - "title": "Herbaceous", - "count": 674281 - }, - { - "const": "ice", - "title": "Ice", - "count": 231285 - }, - { - "const": "urban", - "title": "Urban", - "count": 1219 - }, - { - "const": "water", - "title": "Water", - "count": 2303314 - } - ] - }, - "resto:location": { - "type": "string", - "oneOf": [ - { - "const": "tropical", - "title": "Tropical", - "count": 1807474 - }, - { - "const": "southern", - "title": "Southern", - "count": 1671685 - }, - { - "const": "northern", - "title": "Northern", - "count": 4876669 - }, - { - "const": "equatorial", - "title": "Equatorial", - "count": 27302 - }, - { - "const": "coastal", - "title": "Coastal", - "count": 1495516 - } - ] - }, - "platform": { - "type": "string", - "oneOf": [ - { - "const": "sentinel-2b", - "title": "Sentinel 2B", - "count": 3495597 - }, - { - "const": "sentinel-2a", - "title": "Sentinel 2A", - "count": 3117831 - } - ] - }, - "resto:season": { - "type": "integer", - "oneOf": [ - { - "const": 0, - "title": "Winter", - "count": 1621108 - }, - { - "const": 2, - "title": "Summer", - "count": 2279472 - }, - { - "const": 1, - "title": "Spring", - "count": 1577067 - }, - { - "const": 3, - "title": "Autumn", - "count": 1098015 - } - ] - }, - "eo:bands": [ - { - "title": "B1", - "common_name": "coastal", - "center_wavelength": 4.439, - "gsd": 60 - }, - { - "title": "B2", - "common_name": "blue", - "center_wavelength": 4.966, - "gsd": 10 - }, - { - "title": "B3", - "common_name": "green", - "center_wavelength": 5.6, - "gsd": 10 - }, - { - "title": "B4", - "common_name": "red", - "center_wavelength": 6.645, - "gsd": 10 - }, - { - "title": "B5", - "center_wavelength": 7.039, - "gsd": 20 - }, - { - "title": "B6", - "center_wavelength": 7.402, - "gsd": 20 - }, - { - "title": "B7", - "center_wavelength": 7.825, - "gsd": 20 - }, - { - "title": "B8", - "common_name": "nir", - "center_wavelength": 8.351, - "gsd": 10 - }, - { - "title": "B8A", - "center_wavelength": 8.648, - "gsd": 20 - }, - { - "title": "B9", - "center_wavelength": 9.45, - "gsd": 60 - }, - { - "title": "B10", - "center_wavelength": 1.3735, - "gsd": 60 - }, - { - "title": "B11", - "common_name": "swir16", - "center_wavelength": 1.6137, - "gsd": 20 - }, - { - "title": "B12", - "common_name": "swir22", - "center_wavelength": 2.2024, - "gsd": 20 - } - ] - } -} \ No newline at end of file diff --git a/stac-spec/examples/collection-only/collection.json b/stac-spec/examples/collection-only/collection.json deleted file mode 100644 index cc631b48..00000000 --- a/stac-spec/examples/collection-only/collection.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "type": "Collection", - "stac_version": "1.0.0", - "stac_extensions": [ - "https://stac-extensions.github.io/eo/v1.0.0/schema.json", - "https://stac-extensions.github.io/projection/v1.0.0/schema.json", - "https://stac-extensions.github.io/view/v1.0.0/schema.json" - ], - "id": "sentinel-2", - "title": "Sentinel-2 MSI: MultiSpectral Instrument, Level-1C", - "description": "Sentinel-2 is a wide-swath, high-resolution, multi-spectral\nimaging mission supporting Copernicus Land Monitoring studies,\nincluding the monitoring of vegetation, soil and water cover,\nas well as observation of inland waterways and coastal areas.\n\nThe Sentinel-2 data contain 13 UINT16 spectral bands representing\nTOA reflectance scaled by 10000. See the [Sentinel-2 User Handbook](https://sentinel.esa.int/documents/247904/685211/Sentinel-2_User_Handbook)\nfor details. In addition, three QA bands are present where one\n(QA60) is a bitmask band with cloud mask information. For more\ndetails, [see the full explanation of how cloud masks are computed.](https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-2-msi/level-1c/cloud-masks)\n\nEach Sentinel-2 product (zip archive) may contain multiple\ngranules. Each granule becomes a separate Earth Engine asset.\nEE asset ids for Sentinel-2 assets have the following format:\nCOPERNICUS/S2/20151128T002653_20151128T102149_T56MNN. Here the\nfirst numeric part represents the sensing date and time, the\nsecond numeric part represents the product generation date and\ntime, and the final 6-character string is a unique granule identifier\nindicating its UTM grid reference (see [MGRS](https://en.wikipedia.org/wiki/Military_Grid_Reference_System)).\n\nFor more details on Sentinel-2 radiometric resoltuon, [see this page](https://earth.esa.int/web/sentinel/user-guides/sentinel-2-msi/resolutions/radiometric).\n", - "license": "proprietary", - "keywords": [ - "copernicus", - "esa", - "eu", - "msi", - "radiance", - "sentinel" - ], - "providers": [ - { - "name": "European Union/ESA/Copernicus", - "roles": [ - "producer", - "licensor" - ], - "url": "https://sentinel.esa.int/web/sentinel/user-guides/sentinel-2-msi" - } - ], - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -56, - 180, - 83 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2015-06-23T00:00:00Z", - null - ] - ] - } - }, - "assets": { - "metadata_iso_19139": { - "roles": [ - "metadata", - "iso-19139" - ], - "href": "https://storage.googleapis.com/open-cogs/stac-examples/sentinel-2-iso-19139.xml", - "title": "ISO 19139 metadata", - "type": "application/vnd.iso.19139+xml" - } - }, - "summaries": { - "datetime": { - "minimum": "2015-06-23T00:00:00Z", - "maximum": "2019-07-10T13:44:56Z" - }, - "platform": [ - "sentinel-2a", - "sentinel-2b" - ], - "constellation": [ - "sentinel-2" - ], - "instruments": [ - "msi" - ], - "view:off_nadir": { - "minimum": 0, - "maximum": 100 - }, - "view:sun_elevation": { - "minimum": 6.78, - "maximum": 89.9 - }, - "gsd": [ - 10, - 30, - 60 - ], - "proj:epsg": [ - 32601, - 32602, - 32603, - 32604, - 32605, - 32606, - 32607, - 32608, - 32609, - 32610, - 32611, - 32612, - 32613, - 32614, - 32615, - 32616, - 32617, - 32618, - 32619, - 32620, - 32621, - 32622, - 32623, - 32624, - 32625, - 32626, - 32627, - 32628, - 32629, - 32630, - 32631, - 32632, - 32633, - 32634, - 32635, - 32636, - 32637, - 32638, - 32639, - 32640, - 32641, - 32642, - 32643, - 32644, - 32645, - 32646, - 32647, - 32648, - 32649, - 32650, - 32651, - 32652, - 32653, - 32654, - 32655, - 32656, - 32657, - 32658, - 32659, - 32660 - ], - "eo:bands": [ - { - "name": "B1", - "common_name": "coastal", - "center_wavelength": 4.439 - }, - { - "name": "B2", - "common_name": "blue", - "center_wavelength": 4.966 - }, - { - "name": "B3", - "common_name": "green", - "center_wavelength": 5.6 - }, - { - "name": "B4", - "common_name": "red", - "center_wavelength": 6.645 - }, - { - "name": "B5", - "center_wavelength": 7.039 - }, - { - "name": "B6", - "center_wavelength": 7.402 - }, - { - "name": "B7", - "center_wavelength": 7.825 - }, - { - "name": "B8", - "common_name": "nir", - "center_wavelength": 8.351 - }, - { - "name": "B8A", - "center_wavelength": 8.648 - }, - { - "name": "B9", - "center_wavelength": 9.45 - }, - { - "name": "B10", - "center_wavelength": 1.3735 - }, - { - "name": "B11", - "common_name": "swir16", - "center_wavelength": 1.6137 - }, - { - "name": "B12", - "common_name": "swir22", - "center_wavelength": 2.2024 - } - ] - }, - "links": [ - { - "rel": "parent", - "href": "../catalog.json", - "type": "application/json", - "title": "Example Catalog" - }, - { - "rel": "root", - "href": "../catalog.json", - "type": "application/json", - "title": "Example Catalog" - }, - { - "rel": "license", - "href": "https://scihub.copernicus.eu/twiki/pub/SciHubWebPortal/TermsConditions/Sentinel_Data_Terms_and_Conditions.pdf", - "title": "Legal notice on the use of Copernicus Sentinel Data and Service Information" - } - ] -} diff --git a/stac-spec/examples/collection.json b/stac-spec/examples/collection.json deleted file mode 100644 index 07643b60..00000000 --- a/stac-spec/examples/collection.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "id": "simple-collection", - "type": "Collection", - "stac_extensions": [ - "https://stac-extensions.github.io/eo/v1.0.0/schema.json", - "https://stac-extensions.github.io/projection/v1.0.0/schema.json", - "https://stac-extensions.github.io/view/v1.0.0/schema.json" - ], - "stac_version": "1.0.0", - "description": "A simple collection demonstrating core catalog fields with links to a couple of items", - "title": "Simple Example Collection", - "providers": [ - { - "name": "Remote Data, Inc", - "description": "Producers of awesome spatiotemporal assets", - "roles": [ - "producer", - "processor" - ], - "url": "http://remotedata.io" - } - ], - "extent": { - "spatial": { - "bbox": [ - [ - 172.91173669923782, - 1.3438851951615003, - 172.95469614953714, - 1.3690476620161975 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2020-12-11T22:38:32.125Z", - "2020-12-14T18:02:31.437Z" - ] - ] - } - }, - "license": "CC-BY-4.0", - "summaries": { - "platform": [ - "cool_sat1", - "cool_sat2" - ], - "constellation": [ - "ion" - ], - "instruments": [ - "cool_sensor_v1", - "cool_sensor_v2" - ], - "gsd": { - "minimum": 0.512, - "maximum": 0.66 - }, - "eo:cloud_cover": { - "minimum": 1.2, - "maximum": 1.2 - }, - "proj:epsg": { - "minimum": 32659, - "maximum": 32659 - }, - "view:sun_elevation": { - "minimum": 54.9, - "maximum": 54.9 - }, - "view:off_nadir": { - "minimum": 3.8, - "maximum": 3.8 - }, - "view:sun_azimuth": { - "minimum": 135.7, - "maximum": 135.7 - } - }, - "links": [ - { - "rel": "root", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, - { - "rel": "item", - "href": "./simple-item.json", - "type": "application/geo+json", - "title": "Simple Item" - }, - { - "rel": "item", - "href": "./core-item.json", - "type": "application/geo+json", - "title": "Core Item" - }, - { - "rel": "item", - "href": "./extended-item.json", - "type": "application/geo+json", - "title": "Extended Item" - }, - { - "rel": "self", - "href": "https://raw.githubusercontent.com/radiantearth/stac-spec/v1.0.0/examples/collection.json", - "type": "application/json" - } - ] -} diff --git a/stac-spec/examples/collectionless-item.json b/stac-spec/examples/collectionless-item.json deleted file mode 100644 index 6e7beab9..00000000 --- a/stac-spec/examples/collectionless-item.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "stac_version": "1.0.0", - "stac_extensions": [ - "https://stac-extensions.github.io/eo/v1.0.0/schema.json", - "https://stac-extensions.github.io/view/v1.0.0/schema.json" - ], - "type": "Feature", - "id": "CS3-20160503_132131_08", - "bbox": [ - -122.59750209, - 37.48803556, - -122.2880486, - 37.613537207 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -122.308150179, - 37.488035566 - ], - [ - -122.597502109, - 37.538869539 - ], - [ - -122.576687533, - 37.613537207 - ], - [ - -122.2880486, - 37.562818007 - ], - [ - -122.308150179, - 37.488035566 - ] - ] - ] - }, - "properties": { - "title": "Full Item", - "description": "A sample STAC Item demonstrates an Item that does not have a collection, which is not recommended, but allowed by the spec.", - "datetime": null, - "start_datetime": "2016-05-03T13:22:30Z", - "end_datetime": "2016-05-03T13:27:30Z", - "created": "2016-05-04T00:00:01Z", - "updated": "2017-01-01T00:30:55Z", - "license": "various", - "providers": [ - { - "name": "Remote Data, Inc", - "description": "Producers of awesome spatiotemporal assets", - "roles": [ - "producer", - "processor" - ], - "url": "http://remotedata.it" - } - ], - "platform": "cool_sat2", - "instruments": [ - "cool_sensor_v1" - ], - "view:sun_elevation": 33.4, - "gsd": 0.512, - "cs:type": "scene", - "cs:anomalous_pixels": 0.14, - "cs:earth_sun_distance": 1.014156, - "cs:sat_id": "CS3", - "cs:product_level": "LV1B" - }, - "links": [ - { - "rel": "root", - "href": "./catalog.json", - "type": "application/json", - "title": "Example Catalog" - }, - { - "rel": "parent", - "href": "./catalog.json", - "type": "application/json", - "title": "Example Catalog" - }, - { - "rel": "alternate", - "type": "text/html", - "href": "http://cool-sat.com/catalog/CS3-20160503_132130_04/CS3-20160503_132130_04.html", - "title": "HTML representation of this STAC Item" - }, - { - "rel": "license", - "type": "text/html", - "href": "http://remotedata.io/license.html", - "title": "Data License for Remote Data, Inc." - } - ], - "assets": { - "analytic": { - "href": "http://cool-sat.com/catalog/CS3-20160503_132130_04/analytic.tif", - "title": "4-Band Analytic", - "eo:bands": [ - { - "name": "band1" - }, - { - "name": "band1" - }, - { - "name": "band2" - }, - { - "name": "band3" - } - ] - }, - "thumbnail": { - "href": "http://cool-sat.com/catalog/CS3-20160503_132130_04/thumbnail.png", - "title": "Thumbnail", - "type": "image/png", - "roles": [ - "thumbnail" - ] - }, - "udm": { - "href": "http://cool-sat.com/catalog/CS3-20160503_132130_04/UDM.tif", - "title": "Unusable Data Mask" - }, - "json-metadata": { - "href": "http://cool-sat.com/catalog/CS3-20160503_132130_04/extended-metadata.json", - "title": "Extended Metadata", - "type": "application/json", - "roles": [ - "metadata" - ] - }, - "ephemeris": { - "href": "http://cool-sat.com/catalog/CS3-20160503_132130_04/S3-20160503_132130_04.EPH", - "title": "Satellite Ephemeris Metadata" - } - } -} diff --git a/stac-spec/examples/core-item.json b/stac-spec/examples/core-item.json deleted file mode 100644 index d07cc8df..00000000 --- a/stac-spec/examples/core-item.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "stac_version": "1.0.0", - "stac_extensions": [], - "type": "Feature", - "id": "20201211_223832_CS2", - "bbox": [ - 172.91173669923782, - 1.3438851951615003, - 172.95469614953714, - 1.3690476620161975 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 172.91173669923782, - 1.3438851951615003 - ], - [ - 172.95469614953714, - 1.3438851951615003 - ], - [ - 172.95469614953714, - 1.3690476620161975 - ], - [ - 172.91173669923782, - 1.3690476620161975 - ], - [ - 172.91173669923782, - 1.3438851951615003 - ] - ] - ] - }, - "properties": { - "title": "Core Item", - "description": "A sample STAC Item that includes examples of all common metadata", - "datetime": null, - "start_datetime": "2020-12-11T22:38:32.125Z", - "end_datetime": "2020-12-11T22:38:32.327Z", - "created": "2020-12-12T01:48:13.725Z", - "updated": "2020-12-12T01:48:13.725Z", - "platform": "cool_sat1", - "instruments": [ - "cool_sensor_v1" - ], - "constellation": "ion", - "mission": "collection 5624", - "gsd": 0.512 - }, - "collection": "simple-collection", - "links": [ - { - "rel": "collection", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, - { - "rel": "root", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, - { - "rel": "parent", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, - { - "rel": "alternate", - "type": "text/html", - "href": "http://remotedata.io/catalog/20201211_223832_CS2/index.html", - "title": "HTML version of this STAC Item" - } - ], - "assets": { - "analytic": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2_analytic.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized", - "title": "4-Band Analytic", - "roles": [ - "data" - ] - }, - "thumbnail": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2.jpg", - "title": "Thumbnail", - "type": "image/png", - "roles": [ - "thumbnail" - ] - }, - "visual": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized", - "title": "3-Band Visual", - "roles": [ - "visual" - ] - }, - "udm": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2_analytic_udm.tif", - "title": "Unusable Data Mask", - "type": "image/tiff; application=geotiff;" - }, - "json-metadata": { - "href": "http://remotedata.io/catalog/20201211_223832_CS2/extended-metadata.json", - "title": "Extended Metadata", - "type": "application/json", - "roles": [ - "metadata" - ] - }, - "ephemeris": { - "href": "http://cool-sat.com/catalog/20201211_223832_CS2/20201211_223832_CS2.EPH", - "title": "Satellite Ephemeris Metadata" - } - } -} diff --git a/stac-spec/examples/extended-item.json b/stac-spec/examples/extended-item.json deleted file mode 100644 index 59f2de1f..00000000 --- a/stac-spec/examples/extended-item.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "stac_version": "1.0.0", - "stac_extensions": [ - "https://stac-extensions.github.io/eo/v1.0.0/schema.json", - "https://stac-extensions.github.io/projection/v1.0.0/schema.json", - "https://stac-extensions.github.io/scientific/v1.0.0/schema.json", - "https://stac-extensions.github.io/view/v1.0.0/schema.json", - "https://stac-extensions.github.io/remote-data/v1.0.0/schema.json" - ], - "type": "Feature", - "id": "20201211_223832_CS2", - "bbox": [ - 172.91173669923782, - 1.3438851951615003, - 172.95469614953714, - 1.3690476620161975 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 172.91173669923782, - 1.3438851951615003 - ], - [ - 172.95469614953714, - 1.3438851951615003 - ], - [ - 172.95469614953714, - 1.3690476620161975 - ], - [ - 172.91173669923782, - 1.3690476620161975 - ], - [ - 172.91173669923782, - 1.3438851951615003 - ] - ] - ] - }, - "properties": { - "title": "Extended Item", - "description": "A sample STAC Item that includes a variety of examples from the stable extensions", - "datetime": "2020-12-14T18:02:31.437000Z", - "created": "2020-12-15T01:48:13.725Z", - "updated": "2020-12-15T01:48:13.725Z", - "platform": "cool_sat2", - "instruments": [ - "cool_sensor_v2" - ], - "gsd": 0.66, - "eo:cloud_cover": 1.2, - "proj:epsg": 32659, - "proj:shape": [ - 5558, - 9559 - ], - "proj:transform": [ - 0.5, - 0, - 712710, - 0, - -0.5, - 151406, - 0, - 0, - 1 - ], - "view:sun_elevation": 54.9, - "view:off_nadir": 3.8, - "view:sun_azimuth": 135.7, - "rd:type": "scene", - "rd:anomalous_pixels": 0.14, - "rd:earth_sun_distance": 1.014156, - "rd:sat_id": "cool_sat2", - "rd:product_level": "LV3A", - "sci:doi": "10.5061/dryad.s2v81.2/27.2" - }, - "collection": "simple-collection", - "links": [ - { - "rel": "collection", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, - { - "rel": "root", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, - { - "rel": "parent", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, - { - "rel": "alternate", - "type": "text/html", - "href": "http://remotedata.io/catalog/20201211_223832_CS2/index.html", - "title": "HTML version of this STAC Item" - } - ], - "assets": { - "analytic": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2_analytic.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized", - "title": "4-Band Analytic", - "roles": [ - "data" - ], - "eo:bands": [ - { - "name": "band1", - "common_name": "blue", - "center_wavelength": 470, - "full_width_half_max": 70 - }, - { - "name": "band2", - "common_name": "green", - "center_wavelength": 560, - "full_width_half_max": 80 - }, - { - "name": "band3", - "common_name": "red", - "center_wavelength": 645, - "full_width_half_max": 90 - }, - { - "name": "band4", - "common_name": "nir", - "center_wavelength": 800, - "full_width_half_max": 152 - } - ] - }, - "thumbnail": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2.jpg", - "title": "Thumbnail", - "type": "image/png", - "roles": [ - "thumbnail" - ] - }, - "visual": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized", - "title": "3-Band Visual", - "roles": [ - "visual" - ], - "eo:bands": [ - { - "name": "band3", - "common_name": "red", - "center_wavelength": 645, - "full_width_half_max": 90 - }, - { - "name": "band2", - "common_name": "green", - "center_wavelength": 560, - "full_width_half_max": 80 - }, - { - "name": "band1", - "common_name": "blue", - "center_wavelength": 470, - "full_width_half_max": 70 - } - ] - }, - "udm": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2_analytic_udm.tif", - "title": "Unusable Data Mask", - "type": "image/tiff; application=geotiff;" - }, - "json-metadata": { - "href": "http://remotedata.io/catalog/20201211_223832_CS2/extended-metadata.json", - "title": "Extended Metadata", - "type": "application/json", - "roles": [ - "metadata" - ] - }, - "ephemeris": { - "href": "http://cool-sat.com/catalog/20201211_223832_CS2/20201211_223832_CS2.EPH", - "title": "Satellite Ephemeris Metadata" - } - } -} diff --git a/stac-spec/examples/extensions-collection/collection.json b/stac-spec/examples/extensions-collection/collection.json deleted file mode 100644 index bfbc3c1e..00000000 --- a/stac-spec/examples/extensions-collection/collection.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "id": "extensions-collection", - "type": "Collection", - "stac_version": "1.0.0", - "description": "A heterogenous collection containing deeper examples of various extensions", - "links": [ - { - "rel": "parent", - "href": "../catalog.json", - "type": "application/json", - "title": "Example Catalog" - }, - { - "rel": "root", - "href": "../catalog.json", - "type": "application/json", - "title": "Example Catalog" - }, - { - "rel": "item", - "href": "./proj-example/proj-example.json", - "title": "Proj extension example" - }, - { - "rel": "license", - "href": "https://remotedata.io/license.html", - "title": "Remote Data License Terms" - } - ], - "stac_extensions": [], - "title": "Collection of Extension Items", - "keywords": [ - "examples", - "sar", - "projection" - ], - "providers": [ - { - "name": "Remote Data, Inc.", - "roles": [ - "producer", - "licensor" - ], - "url": "https://remotedata.io" - } - ], - "extent": { - "spatial": { - "bbox": [ - [ - -180, - -56, - 180, - 83 - ] - ] - }, - "temporal": { - "interval": [ - [ - "2009-05-20T02:40:01.042784Z", - "2018-11-03T23:59:55.112875Z" - ] - ] - } - }, - "license": "PDDL-1.0" -} diff --git a/stac-spec/examples/extensions-collection/proj-example/proj-example.json b/stac-spec/examples/extensions-collection/proj-example/proj-example.json deleted file mode 100644 index 09b7986d..00000000 --- a/stac-spec/examples/extensions-collection/proj-example/proj-example.json +++ /dev/null @@ -1,285 +0,0 @@ -{ - "type": "Feature", - "stac_version": "1.0.0", - "id": "proj-example", - "properties": { - "datetime": "2018-10-01T01:08:32.033000Z", - "proj:epsg": 32614, - "proj:wkt2": "PROJCS[\"WGS 84 / UTM zone 14N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-99],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],AUTHORITY[\"EPSG\",\"32614\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]", - "proj:projjson": { - "$schema": "https://proj.org/schemas/v0.2/projjson.schema.json", - "type": "ProjectedCRS", - "name": "WGS 84 / UTM zone 14N", - "base_crs": { - "name": "WGS 84", - "datum": { - "type": "GeodeticReferenceFrame", - "name": "World Geodetic System 1984", - "ellipsoid": { - "name": "WGS 84", - "semi_major_axis": 6378137, - "inverse_flattening": 298.257223563 - } - }, - "coordinate_system": { - "subtype": "ellipsoidal", - "axis": [ - { - "name": "Geodetic latitude", - "abbreviation": "Lat", - "direction": "north", - "unit": "degree" - }, - { - "name": "Geodetic longitude", - "abbreviation": "Lon", - "direction": "east", - "unit": "degree" - } - ] - }, - "id": { - "authority": "EPSG", - "code": 4326 - } - }, - "conversion": { - "name": "UTM zone 14N", - "method": { - "name": "Transverse Mercator", - "id": { - "authority": "EPSG", - "code": 9807 - } - }, - "parameters": [ - { - "name": "Latitude of natural origin", - "value": 0, - "unit": "degree", - "id": { - "authority": "EPSG", - "code": 8801 - } - }, - { - "name": "Longitude of natural origin", - "value": -99, - "unit": "degree", - "id": { - "authority": "EPSG", - "code": 8802 - } - }, - { - "name": "Scale factor at natural origin", - "value": 0.9996, - "unit": "unity", - "id": { - "authority": "EPSG", - "code": 8805 - } - }, - { - "name": "False easting", - "value": 500000, - "unit": "metre", - "id": { - "authority": "EPSG", - "code": 8806 - } - }, - { - "name": "False northing", - "value": 0, - "unit": "metre", - "id": { - "authority": "EPSG", - "code": 8807 - } - } - ] - }, - "coordinate_system": { - "subtype": "Cartesian", - "axis": [ - { - "name": "Easting", - "abbreviation": "E", - "direction": "east", - "unit": "metre" - }, - { - "name": "Northing", - "abbreviation": "N", - "direction": "north", - "unit": "metre" - } - ] - }, - "area": "World - N hemisphere - 102°W to 96°W - by country", - "bbox": { - "south_latitude": 0, - "west_longitude": -102, - "north_latitude": 84, - "east_longitude": -96 - }, - "id": { - "authority": "EPSG", - "code": 32614 - } - }, - "proj:geometry": { - "coordinates": [ - [ - [ - 169200, - 3712800 - ], - [ - 403200, - 3712800 - ], - [ - 403200, - 3951000 - ], - [ - 169200, - 3951000 - ], - [ - 169200, - 3712800 - ] - ] - ], - "type": "Polygon" - }, - "proj:bbox": [ - 169200, - 3712800, - 403200, - 3951000 - ], - "proj:centroid": { - "lat": 34.595302781575604, - "lon": -101.34448382627504 - }, - "proj:shape": [ - 8391, - 8311 - ], - "proj:transform": [ - 30, - 0, - 224985, - 0, - -30, - 6790215, - 0, - 0, - 1 - ] - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 152.52758, - 60.63437 - ], - [ - 149.1755, - 61.19016 - ], - [ - 148.13933, - 59.51584 - ], - [ - 151.33786, - 58.97792 - ], - [ - 152.52758, - 60.63437 - ] - ] - ] - }, - "links": [ - { - "rel": "root", - "href": "../../catalog.json", - "type": "application/json", - "title": "Example Catalog" - }, - { - "rel": "parent", - "href": "../collection.json", - "type": "application/json", - "title": "Collection of Extension Items" - }, - { - "rel": "collection", - "href": "../collection.json", - "type": "application/json", - "title": "Collection of Extension Items" - } - ], - "assets": { - "B1": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B1.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 1 (coastal)", - "eo:bands": [ - { - "name": "B1", - "common_name": "coastal", - "center_wavelength": 0.44, - "full_width_half_max": 0.02 - } - ] - }, - "B8": { - "href": "https://landsat-pds.s3.amazonaws.com/c1/L8/107/018/LC08_L1TP_107018_20181001_20181001_01_RT/LC08_L1TP_107018_20181001_20181001_01_RT_B8.TIF", - "type": "image/tiff; application=geotiff", - "title": "Band 8 (panchromatic)", - "eo:bands": [ - { - "name": "B8", - "center_wavelength": 0.59, - "full_width_half_max": 0.18 - } - ], - "proj:shape": [ - 16781, - 16621 - ], - "proj:transform": [ - 15, - 0, - 224992.5, - 0, - -15, - 6790207.5, - 0, - 0, - 1 - ] - } - }, - "bbox": [ - 148.13933, - 59.51584, - 152.52758, - 60.63437 - ], - "stac_extensions": [ - "https://stac-extensions.github.io/eo/v1.0.0/schema.json", - "https://stac-extensions.github.io/projection/v1.0.0/schema.json" - ], - "collection": "landsat-8-l1" -} diff --git a/stac-spec/examples/simple-item.json b/stac-spec/examples/simple-item.json deleted file mode 100644 index 1e413c43..00000000 --- a/stac-spec/examples/simple-item.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "stac_version": "1.0.0", - "stac_extensions": [], - "type": "Feature", - "id": "20201211_223832_CS2", - "bbox": [ - 172.91173669923782, - 1.3438851951615003, - 172.95469614953714, - 1.3690476620161975 - ], - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 172.91173669923782, - 1.3438851951615003 - ], - [ - 172.95469614953714, - 1.3438851951615003 - ], - [ - 172.95469614953714, - 1.3690476620161975 - ], - [ - 172.91173669923782, - 1.3690476620161975 - ], - [ - 172.91173669923782, - 1.3438851951615003 - ] - ] - ] - }, - "properties": { - "datetime": "2020-12-11T22:38:32.125000Z" - }, - "collection": "simple-collection", - "links": [ - { - "rel": "collection", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, - { - "rel": "root", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - }, - { - "rel": "parent", - "href": "./collection.json", - "type": "application/json", - "title": "Simple Example Collection" - } - ], - "assets": { - "visual": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2.tif", - "type": "image/tiff; application=geotiff; profile=cloud-optimized", - "title": "3-Band Visual", - "roles": [ - "visual" - ] - }, - "thumbnail": { - "href": "https://storage.googleapis.com/open-cogs/stac-examples/20201211_223832_CS2.jpg", - "title": "Thumbnail", - "type": "image/jpeg", - "roles": [ - "thumbnail" - ] - } - } -} diff --git a/stac-spec/extensions/README.md b/stac-spec/extensions/README.md deleted file mode 100644 index 151983d0..00000000 --- a/stac-spec/extensions/README.md +++ /dev/null @@ -1,225 +0,0 @@ -# Extensions - -- [Overview](#overview) -- [Using Extensions](#using-extensions) - - [Extension IDs in `stac_extensions`](#extension-ids-in-stac_extensions) -- [Stable STAC Extensions](#stable-stac-extensions) -- [Community Extensions](#community-extensions) - - [Proposed extensions](#proposed-extensions) -- [Extending STAC](#extending-stac) - - [General Conventions](#general-conventions) - - [Proposing new extensions](#proposing-new-extensions) - - [Extension Maturity](#extension-maturity) - - [Prefixes](#prefixes) - - [Use of arrays and objects](#use-of-arrays-and-objects) - -## Overview - -One of the most important aspects of the SpatioTemporal Asset Catalog specification is its extensibility. The core -STAC specification defines only a minimal core, but is designed for extension. It is expected that most real-world -implementations will use several 'extensions' to fully describe their data. This document describes how extensions -work, and links to the 'core' extensions included in this repo, as well as to a variety of 'community' extensions. - -**For the complete list of available extensions see the [STAC extensions overview page](https://stac-extensions.github.io/).** - -Extensions to the core STAC specification provide additional JSON fields that can be used to better describe -the data. Most tend to be about describing a particular domain or type of data, but some imply -functionality. - -Extensions include a JSON Schema precisely describing the structure, a natural language description of the fields, and thorough examples. - -Anybody can create an extension for their data, and data providers often work together to share -fields between them to create a shared community extensions. See the section below on '[Extending STAC](#extending-stac)') -for information on how to get started. And everyone is encouraged to link to the extension in the table below, so others -can be aware of it. - -Each extension has at least one *owner*. You can find extension owners in each extension's README. - -## Using Extensions - -When deciding how to model data in STAC it is highly recommended to first look at the [list of -extensions](https://stac-extensions.github.io/) and re-use fields there instead of creating your own version. This -increases interoperability, as users know that the meaning of your fields is the same as in other STAC -implementations. Many clients will also understand more mature extensions for better display and querying. - -To incorporate an extension in STAC the 'extension ID' of the extension must be added to the `stac_extensions` -array of the STAC [Catalog](../catalog-spec/catalog-spec.md#stac_extensions), -[Collection](../collection-spec/collection-spec.md#stac_extensions) or [Item](../item-spec/item-spec.md#stac_extensions) -object. This identifier is a link to the JSON Schema URL that validates the fields in the extension, so STAC validators -can fetch the Schema to validate that the STAC object properly follows the extension. These JSON Schema URLs also act as -identifiers for specific version of the extension that the STAC object implements. The extension ID can be -found listed as the 'identifier' in the second line of the README of any extension made with the [extension -template](https://github.com/stac-extensions/template), and new ones get published automatically with any release made -with the template. - -### Extension IDs in `stac_extensions` - -The logic for when an object should list an extension ID in its `stac_extension` array is as follows: - -- If the object directly implements the extension (by following the specified requirements - usually by including -fields, but occasionally implementing alternate behaviors), the `stac_extensions` of that object should contain the extension ID. -- If an Asset implements fields of the extension, then `stac_extensions` of the Item or Collection which holds that - Asset should contain the extension ID. -- If a Collection [summary](../collection-spec/collection-spec.md#summaries) contains Item fields that implement an extension, then - the `stac_extensions` array of that Collection should list the extension ID. For example, if a Collection `summaries` field - contains a summary of `eo:bands`, then that Collection should have the EO extension JSON Schema URL in the `stac_extensions` array. -- If an object implements an extension that results in fields from a separate extension to be referenced, then the latter extension - ID should be included in the `stac_extensions` array for that object. For example, if a Collection implements the - [item_assets](https://github.com/stac-extensions/item-assets) extension, and in the `item_assets` field there is an Asset Definition - which includes `eo:bands`, then the EO extension ID should be listed in that Collection's `stac_extensions`. - -## Stable STAC Extensions - -These extensions are considered stable and are widely used in many production implementations. As additional extensions advance -through the [Extension Maturity](#extension-maturity) classification they, will be added here. - -| Extension Title | Description | -|-----------------------------------------------------------------------|--------------------------------| -| [Electro-Optical](https://github.com/stac-extensions/eo/) | Covers electro-optical data that represents a snapshot of the Earth for a single date and time. It could consist of multiple spectral bands, for example visible bands, infrared bands, red edge bands and panchromatic bands. The extension provides common fields like bands, cloud cover, gsd and more. | -| [Projection](https://github.com/stac-extensions/projection/) | Provides a way to describe Items whose assets are in a geospatial projection. | -| [Scientific Citation](https://github.com/stac-extensions/scientific/) | Metadata that indicate from which publication data originates and how the data itself should be cited or referenced. | -| [View Geometry](https://github.com/stac-extensions/view/) | View Geometry adds metadata related to angles of sensors and other radiance angles that affect the view of resulting data | - -## Community Extensions - -There are many more extensions that are part of the broader STAC ecosystem. The center of activity for these is the -[stac-extensions GitHub organization](https://github.com/stac-extensions), which has a number of extension repositories. For -an overview of all extensions with their [Extension Maturity](#extension-maturity) classification see the -[STAC extensions overview page](https://stac-extensions.github.io/). - -### Proposed extensions - -Beyond the community extensions there have been a number of extensions that people have proposed to the STAC community. These -can be found in the STAC [Issue Tracker](https://github.com/radiantearth/stac-spec/issues) under the -[new extension](https://github.com/radiantearth/stac-spec/issues?q=is%3Aissue+is%3Aopen+label%3A%22new+extension%22) label. -These are ideas that others would likely use and potentially collaborate on. Anyone is free to add new -ideas there, and see the section below on [proposing new extensions](#proposing-new-extensions) for the -workflow to advance ideas into full-fledged community extensions. - -## Extending STAC - -Anyone is welcome to create an extension. There are several types of extensions, some just add additional fields, -some change the behavior of STAC and some introduce completely new functionality. New extensions should try to align -with existing extensions as well as possible and may even re-use fields and their definitions until they may get split -into a new extension that combines commonly used fields across multiple extensions. -Best practices for extension proposals are still emerging in this section. - -### General Conventions - -Creating a new extension usually involves defining a set of logically grouped fields, and specifying what the allowed values -for those fields are. This should be done in the extension text and in JSON Schema, to provide validation. While one -can theoretically add fields anywhere in JSON there are some conventions as to where to add them in STAC objects. - -1. Additional attributes relating to an [Item](../item-spec/item-spec.md) should be added into the Item Properties object, - rather than directly in the Item object. -2. In general, additional attributes that apply to an Item Asset should also be allowed in Item Properties and vice-versa. - For example, the `eo:bands` attribute may be used in Item Properties to describe the aggregation of all bands available in - the Item Asset objects contained in the Item, but may also be used in an individual Item Asset to describe only the bands available in that asset. -3. Additional attributes relating to a [Catalog](../catalog-spec/catalog-spec.md) or - [Collection](../collection-spec/collection-spec.md) should be added to the root of the object. -4. Extensions may also extend other extensions, declaring that dependency in the text and JSON Schema. - -### Proposing new extensions - -Extensions can be hosted anywhere, but should use the -[extension template](https://github.com/stac-extensions/stac-extensions.github.io#using-the-stac-extensions-template) -as a starting point. If you'd like to add a repository to the [stac-extensions](https://github.com/stac-extensions) -GitHub organization, just ask on [Gitter](https://gitter.im/SpatioTemporal-Asset-Catalog/Lobby)! This is fine for -work-in-progress extensions. You can also host the extension repository in your own GitHub account, and optionally -transfer it to the stac-extensions org later. - -For new extensions that require community discussion, we recommend the following workflow: - -- Use the stac-extensions template to sketch out your proposed extension -- Open an issue on this repository with the prefix "New Extension: " and describe the extension. Include a link to the extension repository. -- Discussion can occur on that issue, or discussion can move to issues/pull requests on the extension repository directly. -- Once the extension has an initial release, the issue on stac-spec will be closed. - -### Extension Maturity - -There are many extensions being built with STAC, but they have varying degrees of maturity. All community extensions -listed here included must include a maturity classification, so that STAC spec users can easily get a sense of how -much they can count on the extension. Extension creators are encouraged to list their extensions here, even if it is just -an rough proposal, so others can potentially collaborate. - -| Maturity Classification | Min Impl # | Description | Stability | -| ----------------------- | ----------- | ----------- | --------- | -| Proposal | 0 | An idea put forward by a community member to gather feedback | Not stable - breaking changes almost guaranteed as implementers try out the idea. | -| Pilot | 1 | Idea is fleshed out, with examples and a JSON schema, and implemented in one or more catalogs. Additional implementations encouraged to help give feedback | Approaching stability - breaking changes are not anticipated but can easily come from additional feedback | -| Candidate | 3 | A number of implementers are using it and are standing behind it as a solid extension. Can generally count on an extension at this maturity level | Mostly stable, breaking changes require a new version and minor changes are unlikely. The extension has a code owner, designated in its README. | -| Stable | 6 | Highest current level of maturity. The community of extension maintainers commits to a STAC review process for any changes, which are not made lightly. | Completely stable, all changes require a new version number and review process. | -| Deprecated | N/A | A previous extension that has likely been superseded by a newer one or did not work out for some reason. | DO NOT USE, is not supported | - -Maturity mostly comes through diverse implementations, so the minimum number of implementations -column is the main gating function for an extension to mature. But extension authors can also -choose to hold back the maturity advancement if they don't feel they are yet ready to commit to -the less breaking changes of the next level. - -A 'mature' classification level will likely be added once there are extensions that have been -stable for over a year and are used in twenty or more implementations. - -### Prefixes - -A STAC Item can combine schema information from several different sources - the core STAC Item information, -an earth observation community extension, and a vendor specific provider. It can be difficult to distinguish exactly where each definition -came from, and to pull out the most relevant information, especially when vendors often will dump in all the metadata they have in to the -STAC definition. - -So one idea is to have prefixes to differentiate specific vendors (like `dg:` for DigitalGlobe), and for communities of practice -(like `eo:` for Electro-Optical). These wouldn't be full namespacing, though an extension for like JSON-LD could potentially -evolve to make fully resolved namespacing an option. - -An example of this can be seen in a Landsat example: - -```js - "properties": { - "datetime":"2018-01-01T13:21:30Z", - - "start_datetime":"2018-01-01T13:21:30Z", - "end_datetime":"2018-01-01T13:31:30Z", - - "view:off_nadir": -0.001, - "eo:cloud_cover": 10.31, - "view:sun_azimuth": 149.01607154, - "view:sun_elevation": 59.21424700, - "gsd": 30, - - "l8:data_type": "L1T", - "l8:wrs_path": 153, - "l8:wrs_row": 25, - "l8:earth_sun_distance": 1.0141560, - "l8:ground_control_points_verify": 114, - "l8:geometric_rmse_model": 7.562, - "l8:image_quality_tirs": 9, - "l8:ground_control_points_model": 313, - "l8:geometric_rmse_model_x": 5.96, - "l8:geometric_rmse_model_y": 4.654, - "l8:geometric_rmse_verify": 5.364, - "l8:image_quality_oli": 9 - } -``` - -### Use of arrays and objects - -For extensions, it is recommended to - -1. Use arrays only as enumerations/lists (possibly sorted), without implying additional meaning (such as order) -2. To avoid using nested objects, in favor of multiple attributes with a similar naming scheme. - -For example, if one would like to define an extension to contain a start and a end date, -there are multiple options (tl;dr: option **3** is recommended): - -1. Define an object, for example: `"date_range": {"start": "2018-01-01", "end": "2018-01-31"}`. - This is **discouraged** as it is more complex to search in objects. -2. Define an two-element array where the first element is the start date and the second element is the end date, - for example `"date_range": ["2018-01-01", "2018-01-31"]`. - This is **discouraged** as it would conflict with Collection `summaries`, - which always considers arrays as true (potentially sorted) enumeration without any additional meaning. -3. Define two separate fields, e.g. `"date_range_start": "2018-01-01", "date_range_end": "2018-01-31"`. - This is **recommended** as it avoids the conflicts above and is usually better displayed in software that only understands GeoJSON - but has no clue about STAC. - This is due to the fact that most legacy software can not display arrays or objects GeoJSON `properties` properly. - -This rules only applies to the fields defined directly for the Item's `properties`. -For fields and structures defined on other levels (e.g. in the root of an Item or in an array), extension authors can freely define the structure. -So an array of objects such as the `eo:bands` are fine to use, but keep in mind that the drawbacks mentioned above usually still apply. diff --git a/stac-spec/item-spec/README.md b/stac-spec/item-spec/README.md deleted file mode 100644 index cd45a670..00000000 --- a/stac-spec/item-spec/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# STAC Item Specification - -The [STAC Item](item-spec.md) object is the most important object in a STAC system. An -**Item** is the entity that contains metadata for a scene and links to the assets. - -Item objects are the leaf nodes for a graph of [Catalog](../catalog-spec/catalog-spec.md) -and [Collection](../collection-spec/collection-spec.md) objects. See the -[overview](../overview.md) document for more information about how these objects relate -to each other. - -## In this directory - -**Specification:** The STAC Item specification is in -*[item-spec.md](item-spec.md)*. It includes an overview and an in-depth explanation of the fields. - -**Schemas:** The OpenAPI specification in *[item.json](json-schema/item.json)* -defines an **Item** object. The [basics](json-schema/basics.json), -[datetime](json-schema/datetime.json), [instrument](json-schema/instrument.json), -[licensing](json-schema/licensing.json), and [provider](json-schema/provider.json) -schemas validate additional fields defined in *[Common Metadata](common-metadata.md)*. - -**Common Metadata:** A set of commonly-used fields for STAC Items is listed in -*[common-metadata.md](common-metadata.md)*. diff --git a/stac-spec/item-spec/common-metadata.md b/stac-spec/item-spec/common-metadata.md deleted file mode 100644 index b9596c46..00000000 --- a/stac-spec/item-spec/common-metadata.md +++ /dev/null @@ -1,193 +0,0 @@ -# STAC Common Metadata - -This document outlines commonly used fields in STAC. -They are often used in [STAC Item properties](item-spec.md#properties-object), -but can also be used in other places, e.g. an [Item Asset](item-spec.md#asset-object) -or [Collection Asset](../collection-spec/collection-spec.md#asset-object). - -- [STAC Common Metadata](#stac-common-metadata) - - [Basics](#basics) - - [Date and Time](#date-and-time) - - [Date and Time Range](#date-and-time-range) - - [Licensing](#licensing) - - [Relation types](#relation-types) - - [Provider](#provider) - - [Provider Object](#provider-object) - - [Instrument](#instrument) - -Various *examples* are available in the folder [`examples`](../examples/). -*JSON Schemas* can be found in the folder [`json-schema`](json-schema/). - -By default, these fields are only included and validated against in the core [Item schema](json-schema/item.json). - -Implementation of any of the fields is not required, unless explicitly required by a specification using the field. -For example, `datetime` is required in STAC Items. - -## Basics - -Descriptive fields to give a basic overview of a STAC Item. - -- [JSON Schema](json-schema/basics.json) - -| Field Name | Type | Description | -| ----------- | ------ | ------------------------------------------------------------ | -| title | string | A human readable title describing the Item. | -| description | string | Detailed multi-line description to fully explain the Item. [CommonMark 0.29](https://commonmark.org/) syntax MAY be used for rich text representation. | - -## Date and Time - -- [JSON Schema](json-schema/datetime.json) - -Fields to provide additional temporal information such as ranges with a start and an end datetime stamp. - -| Field Name | Type | Description | -| ---------- | ------------ | ----------- | -| datetime | string\|null | See the [Item Spec Fields](item-spec.md#properties-object) for more information. | -| created | string | Creation date and time of the corresponding data (see below), in UTC. | -| updated | string | Date and time the corresponding data (see below) was updated last, in UTC. | - -All timestamps MUST be formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). - -**created** and **updated** have different meaning depending on where they are used. -If those fields are available in the Item `properties`, they identify the creation and update times of the metadata. -Having those fields in the Item `assets` refers to the creation and update times of the actual data linked to in the Asset Object. - -*NOTE: There are more date and time related fields available in the [Timestamps -extension](https://github.com/stac-extensions/timestamps), which is not an official extension*. - -### Date and Time Range - -While a STAC Item can have a nominal datetime describing the capture, these properties allow an Item to have a range -of capture dates and times. An example of this is the [MODIS 16 day vegetation index product](https://lpdaac.usgs.gov/products/mod13q1v006/). - -**Important:** Using one of the fields REQUIRES inclusion of the other field as well to enable a user to search STAC records by the provided times. -So if you use `start_datetime` you need to add `end_datetime` and vice-versa. -Both fields are also REQUIRED if the `datetime` field is set to `null`. -The datetime property in a STAC Item and these fields are not mutually exclusive. - -| Field Name | Type | Description | -| -------------- | ------ | ------------------------------------------------------------ | -| start_datetime | string | The first or start date and time for the Item, in UTC. It is formatted as `date-time` according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). | -| end_datetime | string | The last or end date and time for the Item, in UTC. It is formatted as `date-time` according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). | - -## Licensing - -Information about the license(s) of the data, which is not necessarily the same license that applies to the metadata. -**Licensing information should be defined at the [Collection](../collection-spec/collection-spec.md) level if possible.** - -- [JSON Schema](json-schema/licensing.json) - -| Field Name | Type | Description | -| ---------- | ------ | ----------- | -| license | string | Item's license(s), either a SPDX [License identifier](https://spdx.org/licenses/), `various` if multiple licenses apply or `proprietary` for all other cases. Should be defined at the Collection level if possible. | - -**license**: Data license(s) as a SPDX [License identifier](https://spdx.org/licenses/). Alternatively, use -`proprietary` (see below) if the license is not on the SPDX license list or `various` if multiple licenses apply. -In all cases links to the license texts SHOULD be added, see the [`license` link relation type](#relation-types). -If no link to a license is included and the `license` field is set to `proprietary`, the Collection is private, -and consumers have not been granted any explicit right to use the data. - -### Relation types - -| Type | Description | -| ------------ | ------------------------------------------------------------ | -| license | The license URL(s) for the Item SHOULD be specified if the `license` field is set to `proprietary` or `various`. If there is no public license URL available, it is RECOMMENDED to supplement the STAC Item with the license text in a separate file and link to this file. | - -## Provider - -Information about the organizations capturing, producing, processing, hosting or publishing this data. -**Provider information should be defined at the Collection level if possible.** - -- [JSON Schema](json-schema/provider.json) - -| Field Name | Type | Description | -| ---------- | ------ | ----------- | -| providers | [[Provider Object](#provider-object)] | A list of providers, which may include all organizations capturing or processing the data or the hosting provider. Providers should be listed in chronological order with the most recent provider being the last element of the list. | - -### Provider Object - -The object provides information about a provider. -A provider is any of the organizations that captures or processes the content of the assets and -therefore influences the data offered by the STAC implementation. -May also include information about the final storage provider hosting the data. - -| Field Name | Type | Description | -| ----------- | --------- | ------------------------------------------------------------ | -| name | string | **REQUIRED.** The name of the organization or the individual. | -| description | string | Multi-line description to add further provider information such as processing details for processors and producers, hosting details for hosts or basic contact information. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| roles | \[string] | Roles of the provider. Any of `licensor`, `producer`, `processor` or `host`. | -| url | string | Homepage on which the provider describes the dataset and publishes contact information. | - -#### roles - -The provider's role(s) can be one or more of the following elements: - -- *licensor*: The organization that is licensing the dataset under the license specified in the Collection's `license` field. -- *producer*: The producer of the data is the provider that initially captured and processed the source data, e.g. ESA for Sentinel-2 data. -- *processor*: A processor is any provider who processed data to a derived product. -- *host*: The host is the actual provider offering the data on their storage. - There should be no more than one host, specified as the last element of the provider list. - -## Instrument - -Adds metadata specifying a platform and instrument used in a data collection mission. These fields will often be combined -with domain-specific extensions that describe the actual data, such as the `eo` or `sar` extensions. - -- [JSON Schema](json-schema/instrument.json) - -| Field Name | Type | Description | -| ------------- | --------- | ----------- | -| platform | string | Unique name of the specific platform to which the instrument is attached. | -| instruments | \[string] | Name of instrument or sensor used (e.g., MODIS, ASTER, OLI, Canon F-1). | -| constellation | string | Name of the constellation to which the platform belongs. | -| mission | string | Name of the mission for which data is collected. | -| gsd | number | Ground Sample Distance at the sensor, in meters (m), must be greater than 0. | - -### Additional Field Information - -#### platform - -The unique name of the specific platform the instrument is attached to. For satellites this would -be the name of the satellite, whereas for drones this would be a unique name for the drone. Examples include -`landsat-8` (Landsat-8), `sentinel-2a` and `sentinel-2b` (Sentinel-2), `terra` and `aqua` (part of NASA EOS, -carrying the MODIS instruments), `mycorp-uav-034` (hypothetical drone name), and `worldview02` -(Maxar/DigitalGlobe WorldView-2). - -#### instruments - -An array of all the sensors used in the creation of the data. For example, data from the Landsat-8 -platform is collected with the OLI sensor as well as the TIRS sensor, but the data is distributed together so would be -specified as `['oli', 'tirs']`. Other instrument examples include `msi` (Sentinel-2), `aster` (Terra), and `modis` -(Terra and Aqua), `c-sar` (Sentinel-1) and `asar` (Envisat). - -#### constellation - -The name of a logical collection of one or more platforms that have similar payloads and have -their orbits arranged in a way to increase the temporal resolution of acquisitions of data with similar geometric and -radiometric characteristics. This field allows users to search for related data sets without the need to specify which -specific platform the data came from, for example, from either of the Sentinel-2 satellites. Examples include `landsat-8` -(Landsat-8, a constellation consisting of a single platform), `sentinel-2` -([Sentinel-2](https://www.esa.int/Our_Activities/Observing_the_Earth/Copernicus/Sentinel-2/Satellite_constellation)), -`rapideye` (operated by Planet Labs), and `modis` (NASA EOS satellites Aqua and Terra). In the case of `modis`, this -is technically referring to a pair of sensors on two different satellites, whose data is combined into a series of -related products. Additionally, the Aqua satellite is technically part of the A-Train constellation and Terra is not -part of a constellation, but these are combined to form the logical collection referred to as MODIS. - -#### mission - -The name of the mission or campaign for collecting data. This could be a discrete set of data collections -over a period of time (such as collecting drone imagery), or could be a set of tasks of related tasks from a satellite -data collection. - -#### gsd - -The nominal Ground Sample Distance for the data, as measured in meters on the ground. There are many -definitions of GSD. The value of this field should be related to the spatial resolution at the sensor, rather -than the pixel size of images after orthorectification, pansharpening, or scaling. -The GSD of a sensor can vary depending on geometry (off-nadir / grazing angle) and wavelength, so it is at the -discretion of the implementer to decide which value most accurately represents the GSD. For example, Landsat8 -optical and short-wave IR bands are all 30 meters, but the panchromatic band is 15 meters. The -`gsd` should be 30 meters in this case because that is the nominal spatial resolution at the sensor. The Planet -PlanetScope Ortho Tile Product has an `gsd` of 3.7 (or 4 if rounding), even though the pixel size of the images is 3.125. -For example, one might choose for WorldView-2 the Multispectral 20° off-nadir value of 2.07 -and for WorldView-3 the Multispectral 20° off-nadir value of 1.38. diff --git a/stac-spec/item-spec/item-spec.md b/stac-spec/item-spec/item-spec.md deleted file mode 100644 index 48358145..00000000 --- a/stac-spec/item-spec/item-spec.md +++ /dev/null @@ -1,324 +0,0 @@ -# STAC Item Specification - -- [Overview](#overview) -- [Item fields](#item-fields) - - [Additional Field Information](#additional-field-information) - - [stac_version](#stac_version) - - [stac_extensions](#stac_extensions) - - [id](#id) - - [assets](#assets) - - [bbox](#bbox) - - [Properties Object](#properties-object) - - [datetime](#datetime) - - [Additional Fields](#additional-fields) - - [Link Object](#link-object) - - [Relation types](#relation-types) - - [derived_from](#derived_from) - - [Collections](#collections) - - [Asset Object](#asset-object) - - [Asset Media Type](#asset-media-type) - - [Asset Roles](#asset-roles) - - [Asset Role Types](#asset-role-types) - - [Additional Fields for Assets](#additional-fields-for-assets) -- [Media Type for STAC Item](#media-type-for-stac-item) -- [Extensions](#extensions) - -## Overview - -This document explains the structure and content of a SpatioTemporal Asset Catalog (STAC) Item. An **Item** is a -[GeoJSON](http://geojson.org/) [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) augmented with -[foreign members](https://tools.ietf.org/html/rfc7946#section-6) relevant to a STAC object. -These include fields that identify the time range and assets of the Item. An Item is the core -object in a STAC Catalog, containing the core metadata that enables any client to search or crawl -online catalogs of spatial 'assets' (e.g., satellite imagery, derived data, DEMs). - -The same Item definition is used in both [STAC Catalogs](../catalog-spec/README.md) and -the [Item-related API endpoints](https://github.com/radiantearth/stac-api-spec/blob/master/api-spec.md#ogc-api---features-endpoints). -Catalogs are simply sets of Items that are linked online, generally served by simple web servers -and used for crawling data. The search endpoint enables dynamic queries, for example selecting all -Items in Hawaii on June 3, 2015, but the results they return are FeatureCollections of Items. - -Items are represented in JSON format and are very flexible. Any JSON object that contains all the -required fields is a valid STAC Item. - -- Examples: - - See the [minimal example](../examples/simple-item.json), - as well as a [more fleshed example](../examples/core-item.json) that contains a number of current best practices. - - Real world [implementations](https://stacindex.org/catalogs) are also available. -- [JSON Schema](json-schema/item.json) - -## Item fields - -This object describes a STAC Item. The fields `id`, `type`, `bbox`, `geometry` and `properties` are -inherited from GeoJSON. - -| Field Name | Type | Description | -| ---------- | -------------------------------------------------------------------------- | ----------- | -| type | string | **REQUIRED.** Type of the GeoJSON Object. MUST be set to `Feature`. | -| stac_version | string | **REQUIRED.** The STAC version the Item implements. | -| stac_extensions | \[string] | A list of extensions the Item implements. | -| id | string | **REQUIRED.** Provider identifier. The ID should be unique within the [Collection](../collection-spec/collection-spec.md) that contains the Item. | -| geometry | [GeoJSON Geometry Object](https://tools.ietf.org/html/rfc7946#section-3.1) \| [null](https://tools.ietf.org/html/rfc7946#section-3.2) | **REQUIRED.** Defines the full footprint of the asset represented by this item, formatted according to [RFC 7946, section 3.1](https://tools.ietf.org/html/rfc7946#section-3.1). The footprint should be the default GeoJSON geometry, though additional geometries can be included. Coordinates are specified in Longitude/Latitude or Longitude/Latitude/Elevation based on [WGS 84](http://www.opengis.net/def/crs/OGC/1.3/CRS84). | -| bbox | \[number] | **REQUIRED if `geometry` is not `null`.** Bounding Box of the asset represented by this Item, formatted according to [RFC 7946, section 5](https://tools.ietf.org/html/rfc7946#section-5). | -| properties | [Properties Object](#properties-object) | **REQUIRED.** A dictionary of additional metadata for the Item. | -| links | \[[Link Object](#link-object)] | **REQUIRED.** List of link objects to resources and related URLs. A link with the `rel` set to `self` is strongly recommended. | -| assets | Map | **REQUIRED.** Dictionary of asset objects that can be downloaded, each with a unique key. | -| collection | string | The `id` of the STAC Collection this Item references to (see [`collection` relation type](#relation-types)). This field is *required* if such a relation type is present and is *not allowed* otherwise. This field provides an easy way for a user to search for any Items that belong in a specified Collection. Must be a non-empty string. | - -### Additional Field Information - -#### stac_version - -In general, STAC versions can be mixed, but please keep the [recommended best practices](../best-practices.md#mixing-stac-versions) in mind. - -#### stac_extensions - -A list of extensions the Item implements. -The list consists of URLs to JSON Schema files that can be used for validation. -This list must only contain extensions that extend the Item specification itself, -see the the 'Scope' for each of the extensions. - -#### id - -It is important that an Item identifier is unique within a Collection, and that the -[Collection identifier](../collection-spec/collection-spec.md#id) in turn is unique globally. Then the two can be combined to -give a globally unique identifier. Items are *[strongly recommended](#collections)* to have Collections, and not having one makes -it more difficult to be used in the wider STAC ecosystem. -If an Item does not have a Collection, then the Item identifier should be unique within its root Catalog or root Collection. - -As most geospatial assets are already uniquely defined by some -identification scheme from the data provider it is recommended to simply use that ID. -Data providers are advised to include sufficient information to make their IDs globally unique, -including things like unique satellite IDs. -See the [id section of best practices](../best-practices.md#item-ids) for additional recommendations. - -#### assets - -This is a dictionary of [Asset Objects](#asset-object) data associated with the Item that can be -downloaded or streamed, each with a unique key. -In general, the keys don't have any meaning and are considered to be non-descriptive unique identifiers. -Providers may assign any meaning to the keys for their respective use cases, but must not expect that clients understand them. -To communicate the purpose of an asset better use the `roles` field in the [Asset Object](#asset-object). - -Assets should include the main asset, as well as any 'sidecar' files that are related and help a -client make sense of the data. Examples of this include extended metadata (in XML, JSON, etc.), -unusable data masks, satellite ephemeris data, etc. Some assets (like Landsat data) are represented -by multiple files - all should be linked to. It is generally recommended that different processing -levels or formats are not exhaustively listed in an Item, but instead are represented by related -Items that are linked to, but the best practices around this are still emerging. - -#### bbox - -Bounding Box of the asset represented by this Item using either 2D or 3D geometries, -formatted according to [RFC 7946, section 5](https://tools.ietf.org/html/rfc7946#section-5). -The length of the array must be 2\*n where n is the number of dimensions. -The array contains all axes of the southwesterly most extent followed by all axes of the northeasterly most extent specified in -Longitude/Latitude or Longitude/Latitude/Elevation based on [WGS 84](http://www.opengis.net/def/crs/OGC/1.3/CRS84). -When using 3D geometries, the elevation of the southwesterly most extent is the minimum depth/height in meters -and the elevation of the northeasterly most extent is the maximum. -This field enables more naive clients to easily index and search geospatially. -STAC compliant APIs are required to compute intersection operations with the Item's geometry field, not its bbox. - -### Properties Object - -Additional metadata fields can be added to the GeoJSON Object Properties. The only required field -is `datetime` but it is recommended to add more fields, see [Additional Fields](#additional-fields) -resources below. - -| Field Name | Type | Description | -| ---------- | ------------ | ------------------------------------------------------------ | -| datetime | string\|null | **REQUIRED.** The searchable date and time of the assets, which must be in UTC. It is formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). `null` is allowed, but requires `start_datetime` and `end_datetime` from [common metadata](common-metadata.md#date-and-time-range) to be set. | - -#### datetime - -This is likely the acquisition (in the case of single camera type captures) or the 'nominal' -or representative time in the case of assets that are combined together. Though time can be a -complex thing to capture, for this purpose keep in mind the STAC spec is primarily searching for -data, so use whatever single date and time is most useful for a user to search for. STAC content -extensions may further specify the meaning of the main `datetime` field, and many will also add more -datetime fields. **All times in STAC metadata should be in [Coordinated Universal -Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) (UTC).** -If there's clearly no meaningful single 'nominal' time, it is allowed to use `null` instead. -In this case it is **required** to specify a temporal interval with the fields `start_datetime` -and `end_datetime` from [common metadata](common-metadata.md#date-and-time-range). For example, if -your data is a time-series that covers 100 years, it's not very meaningful to set the datetime to a -single timestamp as it would not be found in most searches that searches for a decade of data in that -period although the Item actually covers the decade. See [datetime selection](../best-practices.md#datetime-selection) -in the best practices document for more information. - -#### Additional Fields - -Providers should include metadata fields that are relevant for users of STAC, but it is recommended -to [select only those necessary for search](../best-practices.md#field-selection-and-metadata-linking). -Where possible metadata fields should be mapped to the STAC Common Metadata and widely used extensions, -to enable cross-catalog search on known fields. - -- [STAC Common Metadata](common-metadata.md#stac-common-metadata) - A list of fields commonly used -throughout all domains. These optional fields are included for STAC Items by default. -- [Extensions](../extensions/README.md) - Additional fields that are more specific, -such as [EO](https://github.com/stac-extensions/eo), [View](https://github.com/stac-extensions/view). -- [Custom Extensions](../extensions/README.md#extending-stac) - It is generally allowed to add custom -fields but it is recommended to add multiple fields for related values instead of a nested object, -e.g., two fields `view:azimuth` and `view:off_nadir` instead of a field `view` with an object -value containing the two fields. The convention (as used within Extensions) is for related fields -to use a common prefix on the field names to group them, e.g. `view`. A nested data structure should -only be used when the data itself is nested, as with `eo:bands`. - -### Link Object - -This object describes a relationship with another entity. Data providers are advised to be liberal -with the links section, to describe things like the Catalog an Item is in, related Items, parent or -child Items (modeled in different ways, like an 'acquisition' or derived data). -It is allowed to add additional fields such as a `title` and `type`. - -| Field Name | Type | Description | -| ---------- | ------ | ----------- | -| href | string | **REQUIRED.** The actual link in the format of an URL. Relative and absolute links are both allowed. | -| rel | string | **REQUIRED.** Relationship between the current document and the linked document. See chapter "Relation types" for more information. | -| type | string | [Media type](../catalog-spec/catalog-spec.md#media-types) of the referenced entity. | -| title | string | A human readable title to be used in rendered displays of the link. | - -For a full discussion of the situations where relative and absolute links are recommended see the -['Use of links'](../best-practices.md#use-of-links) section of the STAC best practices. - -#### Relation types - -STAC Items use a variety of `rel` types in the link object, -to describe the exact nature of the link between this Item and the entity it is linking to. -It is recommended to use the official -[IANA Link Relation Types](https://www.iana.org/assignments/link-relations/link-relations.xhtml) where possible. -The following table explains places where STAC use custom `rel` types are used with Items. -This happens where there is not a clear official option, or where STAC uses an official type but adds additional meaning for the STAC context. - -| Type | Description | -| ------------ | ------------------------------------------------------------ | -| self | STRONGLY RECOMMENDED. *Absolute* URL to the Item if it is available at a public URL. This is particularly useful when in a download package that includes metadata, so that the downstream user can know where the data has come from. | -| root | URL to the root STAC entity (Catalog or Collection). | -| parent | URL to the parent STAC entity (Catalog or Collection). | -| collection | STRONGLY RECOMMENDED. URL to a Collection. *Absolute* URLs should be used whenever possible. The referenced Collection is STRONGLY RECOMMENDED to implement the same STAC version as the Item. A link with this `rel` type is *required* if the `collection` field in properties is present. | -| derived_from | URL to a STAC Item that was used as input data in the creation of this Item. | - -A more complete list of potential `rel` types and their meaning in STAC can be found in the [Using Relation -Types](../best-practices.md#using-relation-types) best practice. - -##### derived_from - -*Note regarding the type `derived_from`: A full provenance model is far beyond the scope of STAC, -and the goal is to align with any good independent spec that comes along for that. -But the derived_from field is seen as a way to encourage fuller specs and at least start a linking -structure that can be used as a jumping off point for more experiments in provenance tracking* - -#### Collections - -Items are *strongly recommended* to provide a link to a STAC Collection definition. -It is important as Collections provide additional information about a set of items, -for example the license, provider and other information -giving context on the overall set of data that an individual Item is a part of. - -If Items are part of a STAC Collection, the -[STAC Collection spec *requires* Items to link back to the Collection](../collection-spec/collection-spec.md#relation-types). -Linking back must happen in two places: - -1. The field `collection` in an Item must be filled (see section 'Item fields'). It is the `id` of a STAC Collection. -2. An Item must also provide a link to the STAC Collection using the [`collection` relation type](#relation-types): - ```js - "links": [ - { "rel": "collection", "href": "link/to/collection/record.json" } - ] - ``` - -### Asset Object - -An Asset is an object that contains a URI to data associated with the Item that can be downloaded -or streamed. It is allowed to add additional fields. - -| Field Name | Type | Description | -| ----------- | --------- | ----------- | -| href | string | **REQUIRED.** URI to the asset object. Relative and absolute URI are both allowed. | -| title | string | The displayed title for clients and users. | -| description | string | A description of the Asset providing additional details, such as how it was processed or created. [CommonMark 0.29](http://commonmark.org/) syntax MAY be used for rich text representation. | -| type | string | [Media type](#asset-media-type) of the asset. See the [common media types](../best-practices.md#common-media-types-in-stac) in the best practice doc for commonly used asset types. | -| roles | \[string] | The [semantic roles](#asset-roles) of the asset, similar to the use of `rel` in links. | - -[Additional fields](#additional-fields) *may* be added to the assets, though this -is recommended only in special cases. See [Additional Fields for Assets](#additional-fields-for-assets)) for more information. - -#### Asset Media Type - -Any media type can be used in an Item's asset `type` field, and [registered](https://www.iana.org/assignments/media-types/media-types.xhtml) -Media Types are preferred. STAC Items that have sidecar metadata files associated with a data asset (e.g, `.tfw`, Landsat 8 MTL files) -should use media types appropriate for the the metadata file. For example, if it is a plain text file, then `text/plain` -would be appropriate; if it is an XML, then `text/xml` is appropriate. For more information on media types as well as a -list of [common media types](../best-practices.md#common-media-types-in-stac) used in STAC see the [best practice on -working with media types](../best-practices.md#working-with-media-types). - -#### Asset Roles - -The `roles` field is used to describe the purpose of each asset. It is recommended to include one for every asset, to give users -a sense of why they might want to make use of the asset. There are some emerging standards that enable clients to take particular -action when they encounter particular roles, listed below. But implementors are encouraged to come up with their own terms to -describe the role. - -##### Asset Role Types - -Like the Link `rel` field, the `roles` field can be given any value, however here are a few standardized role names. - -| Role Name | Description | -| --------- | ------------------------------------------------------------------------------------- | -| thumbnail | An asset that represents a thumbnail of the Item, typically a true color image (for Items with assets in the visible wavelengths), lower-resolution (typically smaller 600x600 pixels), and typically a JPEG or PNG (suitable for display in a web browser). Multiple assets may have this purpose, but it recommended that the `type` and `roles` be unique tuples. For example, Sentinel-2 L2A provides thumbnail images in both JPEG and JPEG2000 formats, and would be distinguished by their media types. | -| overview | An asset that represents a possibly larger view than the thumbnail of the Item, for example, a true color composite of multi-band data. | -| data | The data itself. This is a suggestion for a common role for data files to be used in case data providers don't come up with their own names and semantics. | -| metadata | A metadata sidecar file describing the data in this Item, for example the Landsat-8 MTL file. | - -It is STRONGLY RECOMMENDED to add to each STAC Item -- a thumbnail with the role `thumbnail` for preview purposes -- one or more data file although it doesn't need to use the suggested role `data` - -Note that multiple roles per asset are encouraged: pick all the ones that apply. So many should have the 'data' role, and then -another role to describe how the data is used. For more information on how to use roles see the [Asset -Roles](../best-practices.md#asset-roles) section of the Best Practices document. It includes a [list of asset -roles](../best-practices.md#list-of-asset-roles) that include many more ideas on roles to use. As they reach more widespread -adoption we will include them here. - -#### Additional Fields for Assets - -As detailed above, Items contain properties, which are the main source of metadata for searching across Items. Many content -extensions can add further property fields as well. Any property that can be specified for an Item can also be specified for -a specific asset. This can be used to override a property defined in the Item, or to specify fields for which there is no -single value for all assets. - -**It is important to note that the STAC API does not facilitate searching across Asset properties in this way, and this -should be used sparingly.** It is primarily used to define properties at the Asset level that may be used during use of -the data instead of for searching. - -For example, `gsd` defined for an Item represents the best Ground Sample Distance (resolution) for the data within the Item. -However, some assets may be lower resolution and thus have a higher `gsd`. The `eo:bands` field from the EO extension defines -an array of spectral bands. However, it may be useful instead to specify the bands that are used in a particular asset. - -For an example see the [sentinel2-sample](https://github.com/stac-utils/stac-examples/blob/main/sentinel2/sentinel2-sample.json). -The Sentinel-2 overall `gsd` is 10m, because this is -the best spatial resolution among all the bands and is defined in Item properties so it can be searched on. In the example -Band 5 and others have a `gsd` of 20m, so that asset specifies the `gsd` as well, which overrides the Item `gsd` for this -one asset. The example also includes reduced resolution versions of files included as assets, using `gsd` to represent -the proper resolution. - -For `eo:bands`, it could be put in Item properties as an array of all the bands, but in this case it's not. Instead, -the assets each define an array containing the spectral band information for that asset (in the order the bands appear -in the file). - -For examples of fields that this construct is recommended for, -see the [section of STAC Best Practices](../best-practices.md#common-use-cases-of-additional-fields-for-assets) -that talks about common use cases of additional fields for assets. - -## Media Type for STAC Item - -A STAC Item is a GeoJSON file ([RFC 7946](https://tools.ietf.org/html/rfc7946)), and thus should use the -[`application/geo+json`](https://tools.ietf.org/html/rfc7946#section-12) as the [Media Type](https://en.wikipedia.org/wiki/Media_type) -(previously known as the MIME Type). - -## Extensions - -There are emerging best practices, which in time will evolve in to specification extensions for -particular domains or uses. - -The [extensions page](../extensions/README.md) gives an overview about relevant extensions for STAC Items. diff --git a/stac-spec/item-spec/json-schema/basics.json b/stac-spec/item-spec/json-schema/basics.json deleted file mode 100644 index 68e8f37a..00000000 --- a/stac-spec/item-spec/json-schema/basics.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/basics.json#", - "title": "Basic Descriptive Fields", - "type": "object", - "properties": { - "title": { - "title": "Item Title", - "description": "A human-readable title describing the Item.", - "type": "string" - }, - "description": { - "title": "Item Description", - "description": "Detailed multi-line description to fully explain the Item.", - "type": "string" - } - } -} \ No newline at end of file diff --git a/stac-spec/item-spec/json-schema/datetime.json b/stac-spec/item-spec/json-schema/datetime.json deleted file mode 100644 index 4c7a3a14..00000000 --- a/stac-spec/item-spec/json-schema/datetime.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/datetime.json#", - "title": "Date and Time Fields", - "type": "object", - "dependencies": { - "start_datetime": { - "required": [ - "end_datetime" - ] - }, - "end_datetime": { - "required": [ - "start_datetime" - ] - } - }, - "properties": { - "datetime": { - "title": "Date and Time", - "description": "The searchable date/time of the assets, in UTC (Formatted in RFC 3339) ", - "type": ["string", "null"], - "format": "date-time", - "pattern": "(\\+00:00|Z)$" - }, - "start_datetime": { - "title": "Start Date and Time", - "description": "The searchable start date/time of the assets, in UTC (Formatted in RFC 3339) ", - "type": "string", - "format": "date-time", - "pattern": "(\\+00:00|Z)$" - }, - "end_datetime": { - "title": "End Date and Time", - "description": "The searchable end date/time of the assets, in UTC (Formatted in RFC 3339) ", - "type": "string", - "format": "date-time", - "pattern": "(\\+00:00|Z)$" - }, - "created": { - "title": "Creation Time", - "type": "string", - "format": "date-time", - "pattern": "(\\+00:00|Z)$" - }, - "updated": { - "title": "Last Update Time", - "type": "string", - "format": "date-time", - "pattern": "(\\+00:00|Z)$" - } - } -} \ No newline at end of file diff --git a/stac-spec/item-spec/json-schema/instrument.json b/stac-spec/item-spec/json-schema/instrument.json deleted file mode 100644 index 688c4a49..00000000 --- a/stac-spec/item-spec/json-schema/instrument.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/instrument.json#", - "title": "Instrument Fields", - "type": "object", - "properties": { - "platform": { - "title": "Platform", - "type": "string" - }, - "instruments": { - "title": "Instruments", - "type": "array", - "items": { - "type": "string" - } - }, - "constellation": { - "title": "Constellation", - "type": "string" - }, - "mission": { - "title": "Mission", - "type": "string" - }, - "gsd": { - "title": "Ground Sample Distance", - "type": "number", - "exclusiveMinimum": 0 - } - } -} \ No newline at end of file diff --git a/stac-spec/item-spec/json-schema/item.json b/stac-spec/item-spec/json-schema/item.json deleted file mode 100644 index 8d428678..00000000 --- a/stac-spec/item-spec/json-schema/item.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#", - "title": "STAC Item", - "type": "object", - "description": "This object represents the metadata for an item in a SpatioTemporal Asset Catalog.", - "allOf": [ - { - "$ref": "#/definitions/core" - } - ], - "definitions": { - "common_metadata": { - "allOf": [ - { - "$ref": "basics.json" - }, - { - "$ref": "datetime.json" - }, - { - "$ref": "instrument.json" - }, - { - "$ref": "licensing.json" - }, - { - "$ref": "provider.json" - } - ] - }, - "core": { - "allOf": [ - { - "$ref": "https://geojson.org/schema/Feature.json" - }, - { - "oneOf": [ - { - "type": "object", - "required": [ - "geometry", - "bbox" - ], - "properties": { - "geometry": { - "$ref": "https://geojson.org/schema/Geometry.json" - }, - "bbox": { - "type": "array", - "oneOf": [ - { - "minItems": 4, - "maxItems": 4 - }, - { - "minItems": 6, - "maxItems": 6 - } - ], - "items": { - "type": "number" - } - } - } - }, - { - "type": "object", - "required": [ - "geometry" - ], - "properties": { - "geometry": { - "type": "null" - }, - "bbox": { - "not": {} - } - } - } - ] - }, - { - "type": "object", - "required": [ - "stac_version", - "id", - "links", - "assets", - "properties" - ], - "properties": { - "stac_version": { - "title": "STAC version", - "type": "string", - "const": "1.0.0" - }, - "stac_extensions": { - "title": "STAC extensions", - "type": "array", - "uniqueItems": true, - "items": { - "title": "Reference to a JSON Schema", - "type": "string", - "format": "iri" - } - }, - "id": { - "title": "Provider ID", - "description": "Provider item ID", - "type": "string", - "minLength": 1 - }, - "links": { - "title": "Item links", - "description": "Links to item relations", - "type": "array", - "items": { - "$ref": "#/definitions/link" - } - }, - "assets": { - "$ref": "#/definitions/assets" - }, - "properties": { - "allOf": [ - { - "$ref": "#/definitions/common_metadata" - }, - { - "anyOf": [ - { - "required": [ - "datetime" - ], - "properties": { - "datetime": { - "not": { - "type": "null" - } - } - } - }, - { - "required": [ - "datetime", - "start_datetime", - "end_datetime" - ] - } - ] - } - ] - } - }, - "if": { - "properties": { - "links": { - "contains": { - "required": [ - "rel" - ], - "properties": { - "rel": { - "const": "collection" - } - } - } - } - } - }, - "then": { - "required": [ - "collection" - ], - "properties": { - "collection": { - "title": "Collection ID", - "description": "The ID of the STAC Collection this Item references to.", - "type": "string", - "minLength": 1 - } - } - }, - "else": { - "properties": { - "collection": { - "not": {} - } - } - } - } - ] - }, - "link": { - "type": "object", - "required": [ - "rel", - "href" - ], - "properties": { - "href": { - "title": "Link reference", - "type": "string", - "format": "iri-reference", - "minLength": 1 - }, - "rel": { - "title": "Link relation type", - "type": "string", - "minLength": 1 - }, - "type": { - "title": "Link type", - "type": "string" - }, - "title": { - "title": "Link title", - "type": "string" - } - } - }, - "assets": { - "title": "Asset links", - "description": "Links to assets", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/asset" - } - }, - "asset": { - "allOf": [ - { - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "title": "Asset reference", - "type": "string", - "format": "iri-reference", - "minLength": 1 - }, - "title": { - "title": "Asset title", - "type": "string" - }, - "description": { - "title": "Asset description", - "type": "string" - }, - "type": { - "title": "Asset type", - "type": "string" - }, - "roles": { - "title": "Asset roles", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - { - "$ref": "#/definitions/common_metadata" - } - ] - } - } -} diff --git a/stac-spec/item-spec/json-schema/licensing.json b/stac-spec/item-spec/json-schema/licensing.json deleted file mode 100644 index ca0eed8b..00000000 --- a/stac-spec/item-spec/json-schema/licensing.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/licensing.json#", - "title": "Licensing Fields", - "type": "object", - "properties": { - "license": { - "type": "string", - "pattern": "^[\\w\\-\\.\\+]+$" - } - } -} \ No newline at end of file diff --git a/stac-spec/item-spec/json-schema/provider.json b/stac-spec/item-spec/json-schema/provider.json deleted file mode 100644 index 01cfadce..00000000 --- a/stac-spec/item-spec/json-schema/provider.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/provider.json#", - "title": "Provider Fields", - "type": "object", - "properties": { - "providers": { - "title": "Providers", - "type": "array", - "items": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "title": "Organization name", - "type": "string", - "minLength": 1 - }, - "description": { - "title": "Organization description", - "type": "string" - }, - "roles": { - "title": "Organization roles", - "type": "array", - "items": { - "type": "string", - "enum": [ - "producer", - "licensor", - "processor", - "host" - ] - } - }, - "url": { - "title": "Organization homepage", - "type": "string", - "format": "iri" - } - } - } - } - } -} \ No newline at end of file diff --git a/stac-spec/overview.md b/stac-spec/overview.md deleted file mode 100644 index e87d43ec..00000000 --- a/stac-spec/overview.md +++ /dev/null @@ -1,213 +0,0 @@ -# STAC Overview - -There are three component specifications that together make up the core SpatioTemporal Asset Catalog specification. -Each can be used alone, but they work best in concert with one another. The [STAC API specification](https://github.com/radiantearth/stac-api-spec) -builds on top of that core, but is out of scope for this overview. An [Item](item-spec/item-spec.md) represents a -single [spatiotemporal asset](#what-is-a-spatiotemporal-asset) as [GeoJSON](https://geojson.org/) so it can be searched. -The [Catalog](catalog-spec/catalog-spec.md) specification provides structural elements, to group Items -and [Collections](collection-spec/collection-spec.md). Collections *are* catalogs, that add more required metadata and -describe a group of related Items. For more on the differences see the [section below](#catalogs-vs-collections). - -A [UML diagram](https://en.wikipedia.org/wiki/Unified_Modeling_Language) of the [STAC model](STAC-UML.pdf) is also -provided to help with navigating the specification. - -## Foundations - -STAC is built on top of many great standards and practices. Every part of STAC is -[JSON](https://www.json.org/json-en.html), and [GeoJSON](https://geojson.org/) provides the core geometry fields -and [features](https://en.wikipedia.org/wiki/Simple_Features) definition. All fields are described in the -specifications, and the acceptable values are defined with [JSON Schema](https://json-schema.org/). The released -JSON Schemas provide the core testing definitions, and are used in an array of validation tools. We also rely -on [RFC 8288 (Web Linking)](https://tools.ietf.org/rfc/rfc8288.txt) to express relationships between resources, -and IANA [Media Types](https://en.wikipedia.org/wiki/Media_type) to describe file formats and format contents. -The [OGC API - Features](https://ogcapi.ogc.org/features/) standard is a final core building block. The STAC -Collection extends the [Collection](http://docs.opengeospatial.org/is/17-069r3/17-069r3.html#_collection_) -JSON defined in OGC API - Features (and the full API definition is the foundation for the STAC API specification). - -The STAC specifications are written to be understandable without needing a full background in these. But if you -want to get deep into STAC tool implementation and are not familiar with any of the standards mentioned above it is -recommended to read up on them. STAC development is guided by set of core philosophical tenets, like -building small reusable parts that are loosely coupled, focusing on developers, and more - see our the -[principles](principles.md) document to learn more. - -*Note: Setting a field in JSON to `null` is not equivalent to a field not appearing in STAC, as JSON Schema tools treat -them differently. STAC defines `null` explicitly for some fields, where it has a particular meaning. So `null` should -not be used unless the STAC spec defines its use - instead the field should be left out entirely.* - -## Item Overview - -Fundamental to any SpatioTemporal Asset Catalog, an [Item](item-spec/item-spec.md) object represents a unit of -data and metadata, typically representing a single scene of data at one place and time. A STAC Item is a -[GeoJSON](http://geojson.org/) [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) -and can be easily read by any modern GIS or geospatial library, and it describes a -[SpatioTemporal Asset](#what-is-a-spatiotemporal-asset). -The STAC Item JSON specification uses the GeoJSON geometry to describe the location of the asset, and -then includes additional information: - -- the time the asset represents; -- a thumbnail for quick browsing; -- asset links, to enable direct download or streaming access of the asset; -- relationship links, allowing users to traverse other related resources and STAC Items. - -A STAC Item can contain additional fields and JSON structures to communicate more information about the -asset, so it can be easily searched. STAC provides a core set of -[Common Metadata](item-spec/common-metadata.md) -and there is a wider community working on a variety of [STAC Extensions](extensions/) that provide shared metadata for -more specific domains. Both aim to describe data with well known, well -defined terms to enable consistent publishing and better search. For more recommendations on selecting fields -for an Item see [this section](best-practices.md#field-selection-and-metadata-linking) of the best practices document. - -### What is a SpatioTemporal Asset - -A 'spatiotemporal asset' is any file that represents information about the earth captured in a certain -space and time. Examples include Imagery (from satellites, planes and drones), SAR, Point Clouds (from -LiDAR, Structure from Motion, etc), Data Cubes, Full Motion Video, and data derived from any of those. -The key is that the GeoJSON is not the actual 'thing', but instead references files and serves as an -index to the 'assets'. It is [not recommended](best-practices.md#representing-vector-layers-in-stac) -to use STAC to refer to traditional vector data layers (shapefile, geopackage) as assets, as they -don't quite fit conceptually. - -## Catalogs vs Collections - -Before we go deep into the Catalogs and Collections, it is worth explaining the relationship -between the two and when you might want to use one or the other. - -A Catalog is a very simple construct - it just provides links to Items or to other Catalogs. -The closest analog is a folder in a file structure, it is the container for Items, but it can -also hold other containers (folders / catalogs). - -The Collection entity shares most fields with the Catalog entity but has a number of additional fields: -license, extent (spatial and temporal), providers, keywords and summaries. Every Item in a Collection links -back to their Collection, so clients can easily find fields like the license. Thus every Item implicitly -shares the fields described in their parent Collection. Collection entities can be used just like Catalog -entities to provide structure, as they provide all the same options for linking and organizing. - -But what *should* go in a Collection, versus just in a Catalog? A Collection will generally consist of -a set of assets that are defined with the same properties and share higher level metadata. In the -satellite world these would typically all come from the same sensor or constellation. It corresponds -directly to what others call a "dataset series" (ESA, ISO 19115), "collection" (CNES, NASA), and -"dataset" (JAXA, DCAT). So if all your Items have the same properties, they probably belong in -the same Collection. But the construct is deliberately flexible, as there may be good reasons -to break the recommendation. - -Catalogs in turn are used for two main things: - -- Split overly large collections into groups -- Group collections into a catalog of Collections (e.g. as entry point for navigation to several Collections). - -The first case allows users to browse down into the Items of large collections. A collection like -Landsat usually would start with path and row Catalogs to group by geography, and then year, -month and day groups to enable deeper grouping. [Dynamic catalogs](best-practices.md#dynamic-catalogs) can -provide multiple grouping paths, serving as a sort of faceted search. - -The second case is used when one wants to represent diverse data in a single place. If an organization -has an internal catalog with Landsat 8, Sentinel 2, NAIP data and several commercial imagery providers -then they'd have a root Catalog that would link to a number of different Collections. - -So in conclusion it's best to use Collections for what you want user to find as starting point, and then -Catalogs are just for structuring and grouping the data. Future work includes a mechanism to actually -search Collection-level data, hopefully in concert with other specifications. - -## Catalog Overview - -*NOTE: The below examples all say Catalog, but those can all be Collections as well, as it has all the fields necessary to -serve as a Catalog* - -There are two required element types of a Catalog: Catalog and Item. A STAC Catalog -points to [STAC Items](item-spec/README.md), or to other STAC catalogs. It provides a simple -linking structure that can be used recursively so that many Items can be included in -a single Catalog, organized however the implementor desires. - -STAC makes no formal distinction between a "root" Catalog and the "child" Catalogs. A root Catalog -is simply the top-most Catalog or Collection -- it has no parent. A nested catalog structure is useful (and -recommended) for breaking up massive numbers of catalog Items into logical groupings. For example, -it might make sense to organize a catalog by date (year, month, day), or geography (continent, -country, state/prov). See the [Catalog Layout](best-practices.md#catalog-layout) best practices -section for more. - -A simple STAC structure might look like this: - -- catalog (root) - - catalog - - catalog - - item - - asset - - item - - asset - - item - - asset - - asset - -This example might be considered a somewhat "typical" structure. However, Catalogs and Items can -describe a number of different relationships. The following shows various relationships between -catalogs and items: - -- `Catalog` -> `Item` (this is a common structure for a catalog to list links to Items) -- `Catalog` -> `Catalog` (this is a common tree structure to group sets of Items. Each catalog in - this relationship may also include Item links as well as catalog links) - -The relationships are all described by a common `links` object structure, making use of -the `rel` field to further describe the relationship. - -There are a few types of catalogs that implementors occasionally refer to. These get defined by the `links` structure. - -- A **sub-catalog** is a Catalog that is linked to from another Catalog that is used to better organize data. For example a Landsat collection - might have sub-catalogs for each Path and Row, so as to create a nice tree structure for users to follow. -- A **root catalog** is a Catalog that only links to sub-catalogs. These are typically entry points for browsing data. Often - they will contain the [STAC Collection](collection-spec/) definition, but in implementations that publish diverse information it may - contain sub-catalogs that provide a variety of Collections. -- A **parent catalog** is the Catalog that sits directly above a sub-catalog. Following parent catalog links continuously - will naturally end up at a root catalog definition. - -It should be noted that a Catalog does not have to link back to all the other Catalogs that point to it. Thus a published -root catalog might be a sub-catalog of someone else's structure. The goal is for data providers to publish all the -information and links they want to, while also encouraging a natural web of information to arise as Catalogs and Items are -linked to across the web. - -### Static and Dynamic Catalogs - -The Catalog specification is designed so it can be implemented as easily as possibly. This can be as simple as -simply putting linked json files on a file server or an object storage service (like [AWS S3](https://aws.amazon.com/s3/)), -or it can be generated on the fly by a live server. The first type of implementation is often called a 'static catalog', -and any catalog that is not just files is called a 'dynamic catalog'. You can read more about the two types along with -recommendations in [this section](best-practices.md#static-and-dynamic-catalogs) of the best practices document, -along with how to keep a [dynamic catalog in sync](best-practices.md#static-to-dynamic-best-practices) with a static one. - -### Catalog Best Practices - -In addition to information about different catalog types, the [best practices document](best-practices.md) has -a number of suggestions on how to organize and implement good catalogs. The [catalog specification](catalog-spec/catalog-spec.md) -is designed for maximum flexbility, so none of these are required, but they provide guidance for implementors who -want to follow what most of the STAC community is doing. - -- [Catalog Layout](best-practices.md#catalog-layout) is likely the most important section, as following its -recommendations will enable catalogs to work better with client tooling that optimizes for known layouts. -- [Use of Links](best-practices.md#use-of-links) articulates practices for making catalogs that are portable (with -relative links through out) and ones that are published in stable locations (with absolute self links). -- [Versioning for Catalogs](best-practices.md#versioning-for-catalogs) explains how to use STAC's structure to -keep a history of changes made to Items and catalogs. -- [STAC on the Web](best-practices.md#stac-on-the-web) explains how catalogs should have html versions for -each Item and Catalog, as well as ways to achieve that. - -## Collection Overview - -A STAC Collection includes the core fields of the Catalog entity and also provides additional metadata to describe -the set of Items it contains. The required fields are fairly -minimal - it includes the 4 required Catalog fields (id, description, stac_version and links), and adds license -and extents. But there are a number of other common fields defined in the spec, and more common fields are also -defined in [STAC extensions](extensions/). These serve as basic metadata, and ideally Collections also link to -fuller metadata (ISO 19115, etc) when it is available. - -As Collections contain all of Catalogs' core fields, they can be used just as flexibly. They can have both parent Catalogs and Collections -as well as child Items, Catalogs and Collections. Items are strongly recommended to have a link to the Collection -they are a part of. Items can only belong to one Collection, so if an Item is in a Collection that is the child of -another Collection, then it must pick which one to refer to. Generally the 'closer' Collection, the more specific -one, should be the one linked to. - -The Collection specification is used standalone quite easily - it is used to describe an aggregation of data, -and doesn't require links down to sub-catalogs and Items. This is most often used when the software -does operations at the layer / coverage level, letting users manipulate a whole collection of assets at once. They often -have an optimized internal format that doesn't make sense to expose as Items. [OpenEO](https://openeo.org/) and -[Google Earth Engine](https://earthengine.google.com/) are two examples that only use STAC collections, and -both would be hardpressed to expose individual Items due to their architectures. For others implementing STAC -Collections can also be a nice way to start and achieve some level of interoperability. diff --git a/stac-spec/package.json b/stac-spec/package.json deleted file mode 100644 index 0012c9c4..00000000 --- a/stac-spec/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "stac-spec", - "version": "1.0.0", - "description": "STAC spec helpers to check the spec.", - "repository": "https://github.com/radiantearth/stac-spec", - "license": "Apache-2.0", - "scripts": { - "check": "npm run check-markdown && npm run check-examples", - "check-markdown": "remark . -f -r .circleci/rc.yaml", - "check-examples": "stac-node-validator . --lint --verbose --schemas .", - "format-examples": "stac-node-validator . --format --schemas .", - "publish-schemas": "node .circleci/publish-schemas.js" - }, - "dependencies": { - "gh-pages": "^3.0.0", - "klaw-sync": "^6.0.0", - "remark-cli": "^8.0.0", - "remark-lint": "^7.0.0", - "remark-lint-no-html": "^2.0.0", - "remark-preset-lint-consistent": "^3.0.0", - "remark-preset-lint-markdown-style-guide": "^3.0.0", - "remark-preset-lint-recommended": "^4.0.0", - "remark-validate-links": "^10.0.0", - "stac-node-validator": "^1.1.0" - } -} diff --git a/stac-spec/principles.md b/stac-spec/principles.md deleted file mode 100644 index 72ef53be..00000000 --- a/stac-spec/principles.md +++ /dev/null @@ -1,45 +0,0 @@ -This project will be governed by a set of informal core principles. These principles are not set in stone, -and indeed they should evolve in the same manner that all specifications worked on should - proposed and -reviewed in pull requests, approved by consensus. The goal of the principles is to help avoid -[bikeshedding](http://bikeshed.org/) - lay down some meta-rules so we can focus on creating useful -core geospatial standards. - -- **Creation and evolution of specs in Github**, using Open Source principles -(please read [Producing OSS](http://producingoss.com/) if that phrase doesn't immediately make sense to you). -The collaboration facilities of Github should be used to their full extent. All proposed improvements and -changes should come in the form of pull requests, using code review functionality to discuss changes. - -- **JSON + REST + HTTP at the core.** JSON has won over XML, and REST over SOAP. We embrace them and -are not considering legacy options. Forward looking protocols can be considered as extensions, -but the default specifications should be in JSON, following best REST practices. HTTP caching and -error codes should be leveraged at the core. GeoJSON has already defined the core geospatial JSON response, -so it should also be core. [JSON API](http://jsonapi.org/) should be used as basis of decisions where possible. - -- **Small Reusable Pieces Loosely Coupled** - Each specification should be as focused as possible, -defining one core concept and refraining from describing lots of options. Additional options can be made -as separate specifications that build on the core. But the core specs should be small and easily understandble, -with clear defaults for any choice. Handling complex cases should be possible by combining discrete pieces. -Implementors should not be forced to implement lots of options just for basic compliance - they should be -able to pick and choose which pieces are relevant to the problems they are trying to solve. - -- **Focus on the developer**. Specifications should aim for implementability - any explanation or design choice -should be considered with a developer audience. And specifications should be accessible to developers who do not -have geospatial background. A developer should not need to understand 'projections' to implement a simple feature -access service. But we should think through the spec extensions they could use in the future when their client asks -for data in a different projection. - -- **Working code required.** Proposed changes should be accompanied by working code -(ideally with a link to an online service running the code). A reference implementation should be available -online to power the interactive documentation. Fully accepted specifications should have at least 3 implementations -that cover the entire specification. Extensions have their own [Extension Maturity](./extensions/README.md#extension-maturity) model. - -- **Design for scale.** The design should work great with more data than can be imagined right now. -Ideally implementations are built with large test data sets to validate that they will work. -Everything should be compatible with content distribution network (CDN) caching. - -## Resources - -- Open Source Principles - [Producing Open Source Software](http://producingoss.org) by Karl Fogel. -- Best Practices JSON API Design - [JSON API](http://jsonapi.org/) best practices for making API's with JSON -- Pragmatic REST - [Web API Design: Crafting interfaces that developers love](https://pages.apigee.com/rs/apigee/images/api-design-ebook-2012-03.pdf) -- Open API Initiative - [OpenAPIs.org](https://openapis.org/) diff --git a/stac-spec/process.md b/stac-spec/process.md deleted file mode 100644 index 92fbb7b6..00000000 --- a/stac-spec/process.md +++ /dev/null @@ -1,120 +0,0 @@ -## STAC Development & Release Process - -### Development Process - -The SpatioTemporal Asset Catalog specification is under active development. The goal is to get to a small, flexible stable -release that can be extended in a variety of ways. The core development team aims to release early and often, which generally -has meant a new release between two and four months since the previous one. - -The `master` branch aims to always be stable, meaning that all the pieces of the specification are consistent and well -explained, and all the examples are consistent with the specification. The `dev` branch is a place of active development, -where a new change in one part of the spec might not yet be fully updated everywhere else. The team uses the -[stac-spec issue tracker](https://github.com/radiantearth/stac-spec/issues) to identify and track all that will be done for -a release. Once all the major issues are resolved the core team makes sure everything is consistent across the spec and -examples. - -Any changes to the spec must be made as pull requests to the `dev` branch. Anyone is welcome and encouraged to bring ideas -and improvements, to the issue tracker or (ideally) as pull requests. To merge a new pull request the work must be reviewed -by at least two members of the STAC spec 'core team' (who have write access to the main repository). It also must pass the -Continuous Integration (CI) testing, which checks all markdown and example files for proper formatting, and also validates all -examples against JSON schema. For more information about making pull requests see [CONTRIBUTING.md](CONTRIBUTING.md), -and there is also information on how to [run the CI checks locally](CONTRIBUTING.md#check-files). - -#### Core STAC Team - -The current list of people who are part of the 'core STAC team', and can approve pull requests. - -- [Alex Kaminsky](https://github.com/alkamin) -- [Alexandra Kirk](https://github.com/anayeaye) -- [Chris Holmes](http://github.com/cholmes) -- [Emmanuel Mathot](https://github.com/emmanuelmathot) -- [Michael Smith](https://github.com/hgs-msmith) -- [James Banting](https://github.com/jbants) -- [James Santucci](https://github.com/jisantuc) -- [Josh Fix](https://github.com/joshfix) -- [Rob Emanuele](https://github.com/lossyrob) -- [Matthias Mohr](https://github.com/m-mohr) -- [Matt Hanson](https://github.com/matthewhanson) -- [Phil Varner](https://github.com/philvarner) - -Anyone can be nominated to the core STAC team, and that generally happens after contributing a few pull requests -and/or helping review other PR's. Nominations are reviewed by the [PSC](#project-steering-committee), and must recieve -3 positive votes and no negatives. - -### Release Process - -To release a new version of the STAC spec the following list of tasks must be done. - -- **Update Issue Tracker**: Each release has a [milestone](https://github.com/radiantearth/stac-spec/milestones) in the github -issue tracker, and before a release is done all open issues that are filed against it should be reviewed. All issues do not -need to be completed, but the core release team should all review the issues to make sure that the critical ones for the -release have been addressed. Issues that aren't seen as essential should be moved to future releases, so that there are no -open issues against the milestone. -- **Agreement from the Project Steering Committee**: The PSC should meet (on phone or on gitter) and decided that the release is ready. -This should include review of the issues, as well as looking at the spec holistically, to make sure the new changes keep -with a coherent whole. -- **Final Spec Read Through**: There should be a final read through of the core specification to make sure it makes sense -and there are no typos, errors, etc. -- **Update the version numbers**: There are several places in the spec that use the version number or a branch name in text -or a link. These include the markdown files and the JSON schemas. Right now the best thing to do is just a search & replace -for the last version number and `https://schemas.stacspec.org/dev/` with `https://schemas.stacspec.org//` -(in JSON Schemas, don't replace it here). `` must correspond with the tag on GitHub, usually including a leading `v`. -Hopefully in the future there will be scripts to do this. -- **Update the Changelog**: The [changelog](CHANGELOG.md) should be reviewed to make sure it includes all major improvements -in the release. And anything in 'unreleased' section should move to the version of the spec to be released. -- **Merge dev to master**: As there is no 'build' process, since the specification *is* the markdown files in the github -repository, the key step in a release is to merge the `dev` branch into `master`, as `master` is the current stable state -of the spec. -- **Release on Github**: The final step to create the release is to add a new 'release' on -. This should use a tag like the others, with a 'v' prefix and then the -release number, like v0.5.2. The changelog should be copied over to be the release notes, and then also include a link to -the full milestone of everything closed in the issue tracker. -- **Promote the release**: A blog post and tweet should be composed and sent out, and then inform those in the gitter channel -to post / promote it. - -#### Release Candidates - -Before any release that has *major* changes (made as a judgement call by the core contributors) there should be a 'release -candidate' to ensure the wider community of implementors can try it out -and catch any errors *before* a full release. It is only through actual implementations that we can be sure the new spec -version is good, so this step is essential if there are major changes. The release should proceed as normal, but called -vX.Y.Z-rc.1. The core STAC community should be told and encouraged to update their implementations. At least 2 implementations -should be updated to the new specification before there is a real release. And ideally a client like STAC Browser is also -updated. This provides the core sanity check. If there are changes or fixes to the spec or -schemas needed from their feedback then make fixes and do rc.2. If it is just fixes to the examples or tooling then no -additional RC is needed. After there is no more changes to spec or schemas then the release process should be done on master, -with no changes to the spec - just updating the version numbers. - -### Governance - -The vast majority of decisions on STAC are made by the [Core STAC Team](#core-stac-team) reaching consensus in -discussions in pull requests and issues. Any change to the specification must have two positive reviews and no negative -reviews. - -#### Project Steering Committee - -For the rare case where a decision cannot be reached by consensus, there is a Project Steerting Committee that has ultimate -decision making authority. This consists of individuals who are intended to represent the various communities which have a -stake in the specification and surrounding ecosystem. An odd number is chosen to facilitate the voting process and help prevent ties. -This committee also handles the allocation of any funds that are raised for the project. - -Turnover is allowed and expected to accommodate people only able to become active on the project in intervals. -A PSC member may step down at any time. - -#### Current Project Steering Committee - -- [Matthias Mohr](https://github.com/m-mohr) - University of Muenster, [OpenEO](https://openeo.org/) and [Radiant Earth](https://www.radiant.earth/) -- [Matt Hanson](https://github.com/matthewhanson) - [Element 84](https://www.element84.com/) -- [James Banting](https://github.com/jbants) - [SparkGeo](https://sparkgeo.com/) -- [Rob Emanuele](https://github.com/lossyrob) - [Microsoft](https://microsoft.com/) -- [Chris Holmes](https://github.com/cholmes) - [Planet](https://planet.com) and [Radiant Earth](https://www.radiant.earth/) - -#### PSC Membership - -A new PSC member can be nominated at any time. Voting for a new PSC is done by current active PSC members. PSC nominations are -generally given in recognition to very significant contributions to the specification or the broader ecosystem. PSC members -are not expected to be technical, and we hope to recognized contributions in documentation, outreach and evangelism. - -Nominated PSC members must recieve a majority of +1 vote’s from the PSC, and no -1’s. - -The initial PSC was selected by Chris Holmes, who was deemed the 'Benevolent Dictator for Life' for the bootstrapping phase.