diff --git a/.changeset/calm-turkeys-boil.md b/.changeset/calm-turkeys-boil.md new file mode 100644 index 00000000..670c6ed6 --- /dev/null +++ b/.changeset/calm-turkeys-boil.md @@ -0,0 +1,5 @@ +--- +"trifid-core": minor +--- + +Expose a `query` function that can be used in all plugins to perform a SPARQL query diff --git a/.changeset/funny-jobs-occur.md b/.changeset/funny-jobs-occur.md new file mode 100644 index 00000000..162af991 --- /dev/null +++ b/.changeset/funny-jobs-occur.md @@ -0,0 +1,7 @@ +--- +"trifid-plugin-graph-explorer": major +--- + +The plugin is now using the new Trifid factory, which is a breaking change. + +Assets are served under `/graph-explorer/assets/` and `/graph-explorer/static/` instead of `/graph-explorer-assets/` and `/graph-explorer-static/`. diff --git a/.changeset/gorgeous-points-provide.md b/.changeset/gorgeous-points-provide.md new file mode 100644 index 00000000..37111f5c --- /dev/null +++ b/.changeset/gorgeous-points-provide.md @@ -0,0 +1,5 @@ +--- +"trifid-core": patch +--- + +Add support for JSON-encoded and URL-encoded bodies by default diff --git a/.changeset/happy-suns-sip.md b/.changeset/happy-suns-sip.md new file mode 100644 index 00000000..589d1f92 --- /dev/null +++ b/.changeset/happy-suns-sip.md @@ -0,0 +1,8 @@ +--- +"@zazuko/trifid-markdown-content": patch +"trifid-handler-fetch": patch +"@zazuko/trifid-plugin-ckan": patch +"trifid-core": patch +--- + +Improve included TypeScript types. diff --git a/.changeset/little-beans-train.md b/.changeset/little-beans-train.md new file mode 100644 index 00000000..c52b707c --- /dev/null +++ b/.changeset/little-beans-train.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-plugin-ckan": minor +--- + +The SPARQL query that is made to get all datasets is now querying all graphs by default diff --git a/.changeset/lucky-dingos-hear.md b/.changeset/lucky-dingos-hear.md new file mode 100644 index 00000000..6c88822a --- /dev/null +++ b/.changeset/lucky-dingos-hear.md @@ -0,0 +1,5 @@ +--- +"trifid": major +--- + +Remove the `trifid-handler-sparql` package diff --git a/.changeset/mean-glasses-eat.md b/.changeset/mean-glasses-eat.md new file mode 100644 index 00000000..206bf979 --- /dev/null +++ b/.changeset/mean-glasses-eat.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-plugin-sparql-proxy": major +--- + +The plugin is now using the new Trifid factory, which is a breaking change. diff --git a/.changeset/neat-fireants-attend.md b/.changeset/neat-fireants-attend.md new file mode 100644 index 00000000..e43bf209 --- /dev/null +++ b/.changeset/neat-fireants-attend.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-entity-renderer": major +--- + +The plugin is now using the new Trifid factory, which is a breaking change. diff --git a/.changeset/ninety-socks-kiss.md b/.changeset/ninety-socks-kiss.md new file mode 100644 index 00000000..a0cde16d --- /dev/null +++ b/.changeset/ninety-socks-kiss.md @@ -0,0 +1,5 @@ +--- +"trifid-core": major +--- + +Health check is now exposed at `/healthz` instead of `/health` diff --git a/.changeset/old-houses-count.md b/.changeset/old-houses-count.md new file mode 100644 index 00000000..56b2037b --- /dev/null +++ b/.changeset/old-houses-count.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-markdown-content": major +--- + +The plugin is now using the new Trifid factory, which is a breaking change. diff --git a/.changeset/pretty-days-whisper.md b/.changeset/pretty-days-whisper.md new file mode 100644 index 00000000..5fa11d1a --- /dev/null +++ b/.changeset/pretty-days-whisper.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-entity-renderer": minor +--- + +Remove the use of hijackresponse diff --git a/.changeset/purple-deers-destroy.md b/.changeset/purple-deers-destroy.md new file mode 100644 index 00000000..924fa35a --- /dev/null +++ b/.changeset/purple-deers-destroy.md @@ -0,0 +1,16 @@ +--- +"@zazuko/trifid-markdown-content": major +"@zazuko/trifid-entity-renderer": major +"trifid-plugin-graph-explorer": major +"trifid-handler-fetch": major +"@zazuko/trifid-plugin-sparql-proxy": major +"trifid": major +"trifid-plugin-yasgui": major +"@zazuko/trifid-plugin-ckan": major +"trifid-core": major +"trifid-plugin-i18n": major +"@zazuko/trifid-plugin-iiif": major +"trifid-plugin-spex": major +--- + +Use 'plugins' instead of 'middlewares' diff --git a/.changeset/quick-dancers-suffer.md b/.changeset/quick-dancers-suffer.md new file mode 100644 index 00000000..e4616a40 --- /dev/null +++ b/.changeset/quick-dancers-suffer.md @@ -0,0 +1,5 @@ +--- +"trifid": minor +--- + +Allow to start Trifid using the CLI without requiring a path to a configuration file. diff --git a/.changeset/rich-parents-suffer.md b/.changeset/rich-parents-suffer.md new file mode 100644 index 00000000..2df32a7a --- /dev/null +++ b/.changeset/rich-parents-suffer.md @@ -0,0 +1,42 @@ +--- +"trifid-core": major +--- + +Trifid Plugins should return an object: + +```js +/** @type {import('trifid-core/types/index.js').TrifidPlugin} */ +const factory = async (trifid) => { + return { + defaultConfiguration: async () => { + return { + methods: ["GET"], + paths: ["/hello"], + // ... + }; + }, + routeHandler: async () => { + /** + * Route handler. + * @param {import('fastify').FastifyRequest} _request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (_request, reply) => { + reply.send("Hello, world!"); + }; + return handler; + }, + }; +}; + +export default factory; +``` + +The factory should also be a promise. + +Previously, the factory was a function that returned an Express middleware. +Since the move to Fastify, we are now returning an object with two methods: `defaultConfiguration` and `routeHandler`. +The `routeHandler` method should return a route handler function. +The `defaultConfiguration` method should return the default configuration for the plugin. +This allows the user to use the plugin with the default configuration or to override it. +This can be useful to simplify the Trifid configuration files. diff --git a/.changeset/shaggy-papayas-walk.md b/.changeset/shaggy-papayas-walk.md new file mode 100644 index 00000000..c28aaced --- /dev/null +++ b/.changeset/shaggy-papayas-walk.md @@ -0,0 +1,5 @@ +--- +"trifid-core": major +--- + +Remove the `rewrite` middleware diff --git a/.changeset/shiny-colts-drive.md b/.changeset/shiny-colts-drive.md new file mode 100644 index 00000000..8404e1ea --- /dev/null +++ b/.changeset/shiny-colts-drive.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-plugin-ckan": major +--- + +The plugin is now using the new Trifid factory, which is a breaking change. diff --git a/.changeset/shiny-weeks-do.md b/.changeset/shiny-weeks-do.md new file mode 100644 index 00000000..c45cc853 --- /dev/null +++ b/.changeset/shiny-weeks-do.md @@ -0,0 +1,12 @@ +--- +"trifid-handler-fetch": major +--- + +Completely change the way it is working. + +Instead of being an handler that is made to be called only when dereferencing, it is now a Trifid plugin that is exposing a new endpoint `/query` (for example) that can be used to perform SPARQL queries against the dataset. + +This means that it is now possible to perform SPARQL queries against a dataset that is loaded from a URL, which was not possible before. +This also means that it is possible to use all other Trifid plugins that were only working with a SPARQL endpoint and not with a dataset coming from a simple file. + +Please take a look on how to use it in the documentation here: https://github.com/zazuko/trifid/tree/main/packages/handler-fetch#readme diff --git a/.changeset/silent-meals-mate.md b/.changeset/silent-meals-mate.md new file mode 100644 index 00000000..a0d6ab73 --- /dev/null +++ b/.changeset/silent-meals-mate.md @@ -0,0 +1,5 @@ +--- +"trifid-plugin-i18n": major +--- + +The plugin is now using the new Trifid factory, which is a breaking change. diff --git a/.changeset/silver-knives-smell.md b/.changeset/silver-knives-smell.md new file mode 100644 index 00000000..e6b1ce86 --- /dev/null +++ b/.changeset/silver-knives-smell.md @@ -0,0 +1,5 @@ +--- +"trifid-plugin-spex": major +--- + +The plugin is now using the new Trifid factory, which is a breaking change. diff --git a/.changeset/smooth-grapes-return.md b/.changeset/smooth-grapes-return.md new file mode 100644 index 00000000..4edb085e --- /dev/null +++ b/.changeset/smooth-grapes-return.md @@ -0,0 +1,5 @@ +--- +"trifid-plugin-yasgui": major +--- + +The plugin is now using the new Trifid factory, which is a breaking change. diff --git a/.changeset/spicy-needles-smash.md b/.changeset/spicy-needles-smash.md new file mode 100644 index 00000000..142670f8 --- /dev/null +++ b/.changeset/spicy-needles-smash.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-entity-renderer": minor +--- + +Add support for redirects. diff --git a/.changeset/stale-oranges-deny.md b/.changeset/stale-oranges-deny.md new file mode 100644 index 00000000..aec3bbcf --- /dev/null +++ b/.changeset/stale-oranges-deny.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-entity-renderer": minor +--- + +Support for multiple serializations diff --git a/.changeset/tall-coins-bow.md b/.changeset/tall-coins-bow.md new file mode 100644 index 00000000..1e09891c --- /dev/null +++ b/.changeset/tall-coins-bow.md @@ -0,0 +1,5 @@ +--- +"trifid": major +--- + +Remove morgan logger. diff --git a/.changeset/thin-pugs-tan.md b/.changeset/thin-pugs-tan.md new file mode 100644 index 00000000..563684df --- /dev/null +++ b/.changeset/thin-pugs-tan.md @@ -0,0 +1,5 @@ +--- +"trifid-handler-fetch": patch +--- + +Support `unionDefaultGraph` configuration diff --git a/.changeset/three-rocks-knock.md b/.changeset/three-rocks-knock.md new file mode 100644 index 00000000..ff627d1b --- /dev/null +++ b/.changeset/three-rocks-knock.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-plugin-sparql-proxy": major +--- + +The plugin was completely restructured to remove extra complexity. diff --git a/.changeset/tough-insects-clap.md b/.changeset/tough-insects-clap.md new file mode 100644 index 00000000..cf449358 --- /dev/null +++ b/.changeset/tough-insects-clap.md @@ -0,0 +1,5 @@ +--- +"trifid-core": minor +--- + +Allow listening on a random port by using port `0`. diff --git a/.changeset/tough-pens-retire.md b/.changeset/tough-pens-retire.md new file mode 100644 index 00000000..9f67353f --- /dev/null +++ b/.changeset/tough-pens-retire.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-plugin-sparql-proxy": patch +--- + +Upgrade proxy-agent to 6.4.0 diff --git a/.changeset/unlucky-bats-behave.md b/.changeset/unlucky-bats-behave.md new file mode 100644 index 00000000..1afa1234 --- /dev/null +++ b/.changeset/unlucky-bats-behave.md @@ -0,0 +1,5 @@ +--- +"trifid-handler-fetch": major +--- + +The plugin is now using the new Trifid factory, which is a breaking change. diff --git a/.changeset/weak-windows-count.md b/.changeset/weak-windows-count.md new file mode 100644 index 00000000..0e9ba642 --- /dev/null +++ b/.changeset/weak-windows-count.md @@ -0,0 +1,5 @@ +--- +"@zazuko/trifid-plugin-iiif": minor +--- + +The plugin is now using the new Trifid factory, which is a breaking change. diff --git a/packages/trifid/.dockerignore b/.dockerignore similarity index 69% rename from packages/trifid/.dockerignore rename to .dockerignore index 17e2978a..33e7a218 100644 --- a/packages/trifid/.dockerignore +++ b/.dockerignore @@ -2,3 +2,5 @@ node_modules npm-debug.log .git Dockerfile +.changeset +.github diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index b63bef63..d52f8f9a 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -50,8 +50,8 @@ jobs: id: docker_build uses: docker/build-push-action@v5 with: - context: ./packages/trifid - file: ./packages/trifid/Dockerfile + context: . + file: ./Dockerfile push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d3445ec3..a62dc140 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -30,6 +30,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 + cache: npm - name: Install Dependencies run: npm ci diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 0630bc5a..e88245d9 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -25,6 +25,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} + cache: npm - name: Install dependencies run: npm ci @@ -37,8 +38,12 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - name: Set up NodeJS + uses: actions/setup-node@v4 with: node-version: 20 - - run: npm ci - - run: npx wsrun --report -mc prepack + cache: npm + - name: Install dependencies + run: npm ci + - name: Run build of each package (prepack script, mostly for typings) + run: npm run build diff --git a/.gitignore b/.gitignore index 76c9dad1..7e059d9f 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,12 @@ yarn.lock npm-debug.log* yarn-debug.log* yarn-error.log* + +*.d.ts +*.d.ts.map +*.d.cts +*.d.cts.map +*.d.mts +*.d.mts.map + +dist/ diff --git a/packages/trifid/Dockerfile b/Dockerfile similarity index 56% rename from packages/trifid/Dockerfile rename to Dockerfile index 6abd1285..190c5888 100644 --- a/packages/trifid/Dockerfile +++ b/Dockerfile @@ -2,30 +2,31 @@ FROM docker.io/library/node:20-alpine EXPOSE 8080 -# configure some default values +# Configure some default values ENV TRIFID_CONFIG="instances/docker-sparql/config.yaml" ENV SPARQL_ENDPOINT_USERNAME="public" ENV SPARQL_ENDPOINT_PASSWORD="public" ENV SPARQL_PROXY_CACHE_PREFIX="default" ENV SPARQL_PROXY_CACHE_CLEAR_AT_STARTUP="false" -# some default values for the 'docker-fetch' instance +# Some default values for the 'docker-fetch' instance ENV FETCH_HANDLER_FILE="https://raw.githubusercontent.com/zazuko/tbbt-ld/master/dist/tbbt.nt" ENV FETCH_HANDLER_FILE_TYPE="application/n-triples" -# use tini for PID1 +# Use tini for PID1 # https://github.com/krallin/tini RUN apk add --no-cache tini -# run as node user +# Run as node user USER 1000:1000 WORKDIR /app -# copy package.json and install dependencies -COPY package.json ./ -RUN npm install --omit=dev && npm cache clean --force -COPY . . +# Copy everything, so that it uses local dependencies +COPY --chown=1000:1000 . . +RUN npm install && npm cache clean --force -ENTRYPOINT ["tini", "--", "/app/server.js"] +WORKDIR /app/packages/trifid -HEALTHCHECK CMD wget -q -O- http://localhost:8080/health +ENTRYPOINT ["tini", "--", "/app/packages/trifid/server.js"] + +HEALTHCHECK CMD wget -q -O- http://localhost:8080/healthz diff --git a/README.md b/README.md index de2d326e..1089b6c9 100644 --- a/README.md +++ b/README.md @@ -17,20 +17,18 @@ The serializations include HTML rendering based on customizable templates. If a SPARQL endpoint is the source of the RDF data, some additional plugins are enabled by default. -- SPARQL Proxy: Public access to the configured store. -- YASGUI: UI to write, execute, and analyze SPARQL queries. -- Graph Explorer: UI to explore the data in a graph view -- SPEX: Introspects the data on the endpoint and shows the data model +- [SPARQL Proxy](./packages/sparql-proxy/): Public access to the configured store. +- [YASGUI](./packages/yasgui/): UI to write, execute, and analyze SPARQL queries. +- [Graph Explorer](./packages/graph-explorer/): UI to explore the data in a graph view +- [SPEX](./packages/spex/): Introspects the data on the endpoint and shows the data model ### Further use This server can also be extended with plugins, depending on the use case of the deployment. -[Express](http://expressjs.com/) is used to handle routings and middlewares. -Any compatible middleware can be added to the configuration. #### Examples -- [Trifid plugin iiif](./packages/iiif/) +- [IIIF Trifid plugin](./packages/iiif/) - [CKAN harvester endpoint](./packages/ckan/) ## Who Uses Trifid? @@ -109,18 +107,20 @@ Values of the base file will be overwritten. ### Examples -#### Default configuration +#### Big Bang Theory dataset -The default configuration uses the file system handler and the [Big Bang Theory dataset](https://github.com/zazukoians/tbbt-ld). +If you use [`instances/tbbt/config.yaml`](./packages/trifid/instances/tbbt/config.yaml) as a base configuration, you will get a server that serves the [Big Bang Theory dataset](https://github.com/zazuko/tbbt-ld). + +It will load the triples from the following remote file: https://raw.githubusercontent.com/zazuko/tbbt-ld/master/dist/tbbt.nt. You will then be able to access its content, e.g. [Amy Farrah Fowler](http://localhost:8080/data/person/amy-farrah-fowler). -In a production environment, the SPARQL handler may be the better choice. +This is a good starting point to understand how dereferencing works. #### SPARQL configuration For production systems, we recommend data access via the [SPARQL 1.1 Protocol](http://www.w3.org/TR/sparql11-protocol/) interface. -`instances/docker-sparql/config.yaml` can be used as base configuration. +[`instances/docker-sparql/config.yaml`](./packages/trifid/instances/docker-sparql/config.yaml) can be used as base configuration. ##### SPARQL endpoint with self-signed certificate @@ -152,12 +152,18 @@ docker run --rm -it -p 8080:8080 ghcr.io/zazuko/trifid You can use the following environment variables: -- `TRIFID_CONFIG`: the configuration file to use (default value: `config-docker.json`, which enable the following environment variables) +- `TRIFID_CONFIG`: the configuration file to use (default value: [`instances/docker-sparql/config.yaml`](./packages/trifid/instances/docker-sparql/config.yaml), which enable the following environment variables) - `SPARQL_ENDPOINT_URL`: the SPARQL endpoint URL to use - `DATASET_BASE_URL`: the base URL to use to enable rewriting - `SPARQL_USER`: the user to use to authenticate against the SPARQL endpoint - `SPARQL_PASSWORD`: the password to use to authenticate against the SPARQL endpoint +If you want to use a file that contains your triples instead of a SPARQL endpoint, you can set `TRIFID_CONFIG` to [`instances/docker-fetch/config.yaml`](./packages/trifid/instances/docker-fetch/config.yaml), and you will be able to use the following environment variables to configure your instance: + +- `FETCH_HANDLER_FILE`: the file to use to fetch the data (default value: `https://raw.githubusercontent.com/zazuko/tbbt-ld/master/dist/tbbt.nt`) +- `FETCH_HANDLER_FILE_TYPE`: the type of the file to use to fetch the data (default value: `application/n-triples`) +- `DATASET_BASE_URL`: the base URL to use to enable rewriting + #### Custom build An example of a custom Docker image can be found at [lod.opentransportdata.swiss](https://github.com/zazuko/lod.opentransportdata.swiss). @@ -171,41 +177,36 @@ If you run Trifid behind a reverse proxy, the proxy must set the `X-Forwarded-Ho The log level can be configured by using the `server.logLevel` property. Supported log levels are: `fatal`, `error`, `warn`, `info`, `debug`, `trace` and `silent`. -Some middlewares also uses [`debug`](https://www.npmjs.com/package/debug). -You can get debug logging via: `DEBUG=trifid:` or `DEBUG=trifid:*`. - ## Monorepo To improve the maintenability of the whole project, we decided to use a monorepo architecture. Here is the list of all packages that are maintained here: -| Package | Latest version | | -| ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | -| [`trifid`](./packages/trifid) | [![](https://badge.fury.io/js/trifid.svg)](https://npm.im/trifid) | Bundle with commonly used middlewares | -| [`trifid-core`](./packages/core) | [![](https://badge.fury.io/js/trifid-core.svg)](https://npm.im/trifid-core) | Core package | -| [`@zazuko/trifid-entity-renderer`](./packages/entity-renderer) | [![](https://badge.fury.io/js/@zazuko%2Ftrifid-entity-renderer.svg)](https://npm.im/@zazuko/trifid-entity-renderer) | Entity renderer | -| [`trifid-plugin-graph-explorer`](./packages/graph-explorer) | [![](https://badge.fury.io/js/trifid-plugin-graph-explorer.svg)](https://npm.im/trifid-plugin-graph-explorer) | Graph Explorer plugin | -| [`@zazuko/trifid-plugin-ckan`](./packages/ckan) | [![](https://badge.fury.io/js/@zazuko%2Ftrifid-plugin-ckan.svg)](https://npm.im/@zazuko/trifid-plugin-ckan) | CKAN harvester endpoint | -| [`trifid-handler-fetch`](./packages/handler-fetch) | [![](https://badge.fury.io/js/trifid-handler-fetch.svg)](https://npm.im/trifid-handler-fetch) | Fetch handler for Trifid | -| [`trifid-handler-sparql`](./packages/handler-sparql) | [![](https://badge.fury.io/js/trifid-handler-sparql.svg)](https://npm.im/trifid-handler-sparql) | SPARQL handler for Trifid | -| [`trifid-plugin-i18n`](./packages/i18n) | [![](https://badge.fury.io/js/trifid-plugin-i18n.svg)](https://npm.im/trifid-plugin-i18n) | i18n support for Trifid | -| [`@zazuko/trifid-markdown-content`](./packages/markdown-content) | [![](https://badge.fury.io/js/@zazuko%2Ftrifid-markdown-content.svg)](https://npm.im/@zazuko/trifid-markdown-content) | Create pages from Markdown files | -| [`@zazuko/trifid-handle-redirects`](./packages/redirects) | [![](https://badge.fury.io/js/@zazuko%2Ftrifid-handle-redirects.svg)](https://npm.im/@zazuko/trifid-handle-redirects) | Handle HTTP redirects | -| [`@zazuko/trifid-plugin-sparql-proxy`](./packages/sparql-proxy) | [![](https://badge.fury.io/js/@zazuko%2Ftrifid-plugin-sparql-proxy.svg)](https://npm.im/@zazuko/trifid-plugin-sparql-proxy) | Trifid plugin for SPARQL proxy | -| [`trifid-plugin-spex`](./packages/spex) | [![](https://badge.fury.io/js/trifid-plugin-spex.svg)](https://npm.im/trifid-plugin-spex) | SPEX plugin for Trifid | -| [`trifid-plugin-yasgui`](./packages/yasgui) | [![](https://badge.fury.io/js/trifid-plugin-yasgui.svg)](https://npm.im/trifid-plugin-yasgui) | YASGUI plugin for Trifid | +| Package | Latest version | | +| ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | +| [`trifid`](./packages/trifid) | [![](https://badge.fury.io/js/trifid.svg)](https://npm.im/trifid) | Bundle with commonly used plugins | +| [`trifid-core`](./packages/core) | [![](https://badge.fury.io/js/trifid-core.svg)](https://npm.im/trifid-core) | Core package | +| [`@zazuko/trifid-entity-renderer`](./packages/entity-renderer) | [![](https://badge.fury.io/js/@zazuko%2Ftrifid-entity-renderer.svg)](https://npm.im/@zazuko/trifid-entity-renderer) | Entity renderer | +| [`trifid-plugin-graph-explorer`](./packages/graph-explorer) | [![](https://badge.fury.io/js/trifid-plugin-graph-explorer.svg)](https://npm.im/trifid-plugin-graph-explorer) | Graph Explorer plugin | +| [`@zazuko/trifid-plugin-ckan`](./packages/ckan) | [![](https://badge.fury.io/js/@zazuko%2Ftrifid-plugin-ckan.svg)](https://npm.im/@zazuko/trifid-plugin-ckan) | CKAN harvester endpoint | +| [`trifid-handler-fetch`](./packages/handler-fetch) | [![](https://badge.fury.io/js/trifid-handler-fetch.svg)](https://npm.im/trifid-handler-fetch) | Fetch handler for Trifid | +| [`trifid-plugin-i18n`](./packages/i18n) | [![](https://badge.fury.io/js/trifid-plugin-i18n.svg)](https://npm.im/trifid-plugin-i18n) | i18n support for Trifid | +| [`@zazuko/trifid-markdown-content`](./packages/markdown-content) | [![](https://badge.fury.io/js/@zazuko%2Ftrifid-markdown-content.svg)](https://npm.im/@zazuko/trifid-markdown-content) | Create pages from Markdown files | +| [`@zazuko/trifid-plugin-sparql-proxy`](./packages/sparql-proxy) | [![](https://badge.fury.io/js/@zazuko%2Ftrifid-plugin-sparql-proxy.svg)](https://npm.im/@zazuko/trifid-plugin-sparql-proxy) | Trifid plugin for SPARQL proxy | +| [`trifid-plugin-spex`](./packages/spex) | [![](https://badge.fury.io/js/trifid-plugin-spex.svg)](https://npm.im/trifid-plugin-spex) | SPEX plugin for Trifid | +| [`trifid-plugin-yasgui`](./packages/yasgui) | [![](https://badge.fury.io/js/trifid-plugin-yasgui.svg)](https://npm.im/trifid-plugin-yasgui) | YASGUI plugin for Trifid | More to come as we gradually consolidate other, initially separate repositories. ## Support -Issues & feature requests should be reported on GitHub. +Issues & feature requests should be reported on [GitHub](https://github.com/zazuko/trifid). Pull requests are very welcome. ## License -Copyright 2015-2023 Zazuko GmbH +Copyright Zazuko GmbH. Trifid is licensed under the [Apache License, Version 2.0](./LICENSE). diff --git a/package-lock.json b/package-lock.json index 96139a40..024b1e51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,10 @@ "@changesets/cli": "^2.27.1", "@tpluscode/eslint-config": "^0.4.4", "husky": "^8.0.3", - "lint-staged": "^15.2.0" + "lint-staged": "^15.2.0", + "type-detect": "^4.0.8", + "typescript": "^5.3.3", + "wsrun": "^5.2.4" }, "engines": { "node": ">=18" @@ -22,8 +25,9 @@ }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -31,8 +35,9 @@ }, "node_modules/@ampproject/remapping": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -43,8 +48,9 @@ }, "node_modules/@babel/code-frame": { "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" @@ -55,27 +61,29 @@ }, "node_modules/@babel/compat-data": { "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.5", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.5", - "@babel/parser": "^7.23.5", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -90,20 +98,34 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.23.5", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.23.5", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -112,32 +134,11 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -149,95 +150,44 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", + "node_modules/@babel/helper-compilation-targets/node_modules/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==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "yallist": "^3.0.2" } }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -248,8 +198,9 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -257,21 +208,11 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.15" }, @@ -281,8 +222,9 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -297,72 +239,11 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -372,8 +253,9 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -383,49 +265,40 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.5", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" @@ -433,8 +306,9 @@ }, "node_modules/@babel/highlight": { "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -445,8 +319,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.5", - "license": "MIT", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -454,1708 +329,1657 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@babel/runtime": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", + "node_modules/@babel/template": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.3", + "node_modules/@babel/traverse": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", "dev": true, - "license": "MIT", "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", + "node_modules/@babel/traverse/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==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=4" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", + "node_modules/@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@bergos/jsonparse": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@bergos/jsonparse/-/jsonparse-1.4.1.tgz", + "integrity": "sha512-vXIT0nzZGX/+yMD5bx2VhTzc92H55tPoehh1BW/FZHOndWGFddrH3MAfdx39FRc7irABirW6EQaGxIJYV6CGuA==", + "engines": [ + "node >= 0.2.0" + ], "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "buffer": "^6.0.3" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", + "node_modules/@changesets/apply-release-plan": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.0.tgz", + "integrity": "sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/runtime": "^7.20.1", + "@changesets/config": "^3.0.0", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", + "node_modules/@changesets/assemble-release-plan": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.0.tgz", + "integrity": "sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.0.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", + "node_modules/@changesets/changelog-git": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.0.tgz", + "integrity": "sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@changesets/types": "^6.0.0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", + "node_modules/@changesets/cli": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.1.tgz", + "integrity": "sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/runtime": "^7.20.1", + "@changesets/apply-release-plan": "^7.0.0", + "@changesets/assemble-release-plan": "^6.0.0", + "@changesets/changelog-git": "^0.2.0", + "@changesets/config": "^3.0.0", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.0.0", + "@changesets/get-release-plan": "^4.0.0", + "@changesets/git": "^3.0.0", + "@changesets/logger": "^0.1.0", + "@changesets/pre": "^2.0.0", + "@changesets/read": "^0.6.0", + "@changesets/types": "^6.0.0", + "@changesets/write": "^0.3.0", + "@manypkg/get-packages": "^1.1.3", + "@types/semver": "^7.5.0", + "ansi-colors": "^4.1.3", + "chalk": "^2.1.0", + "ci-info": "^3.7.0", + "enquirer": "^2.3.0", + "external-editor": "^3.1.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "meow": "^6.0.0", + "outdent": "^0.5.0", + "p-limit": "^2.2.0", + "preferred-pm": "^3.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^2.0.0", + "term-size": "^2.1.0", + "tty-table": "^4.1.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "changeset": "bin.js" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", + "node_modules/@changesets/config": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.0.tgz", + "integrity": "sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.0.0", + "@changesets/logger": "^0.1.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.2" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", + "node_modules/@changesets/errors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "extendable-error": "^0.1.5" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", + "node_modules/@changesets/get-dependents-graph": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.0.0.tgz", + "integrity": "sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "chalk": "^2.1.0", + "fs-extra": "^7.0.1", + "semver": "^7.5.3" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", + "node_modules/@changesets/get-release-plan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.0.tgz", + "integrity": "sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/runtime": "^7.20.1", + "@changesets/assemble-release-plan": "^6.0.0", + "@changesets/config": "^3.0.0", + "@changesets/pre": "^2.0.0", + "@changesets/read": "^0.6.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", + "node_modules/@changesets/get-version-range-type": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "dev": true + }, + "node_modules/@changesets/git": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.0.tgz", + "integrity": "sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.2", + "spawndamnit": "^2.0.0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", + "node_modules/@changesets/logger": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.0.tgz", + "integrity": "sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "chalk": "^2.1.0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", + "node_modules/@changesets/parse": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.0.tgz", + "integrity": "sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@changesets/types": "^6.0.0", + "js-yaml": "^3.13.1" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", + "node_modules/@changesets/pre": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.0.tgz", + "integrity": "sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", + "node_modules/@changesets/read": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.0.tgz", + "integrity": "sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/runtime": "^7.20.1", + "@changesets/git": "^3.0.0", + "@changesets/logger": "^0.1.0", + "@changesets/parse": "^0.4.0", + "@changesets/types": "^6.0.0", + "chalk": "^2.1.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", + "node_modules/@changesets/types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.0.0.tgz", + "integrity": "sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==", + "dev": true + }, + "node_modules/@changesets/write": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.0.tgz", + "integrity": "sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/runtime": "^7.20.1", + "@changesets/types": "^6.0.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "prettier": "^2.7.1" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=14.0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", + "node_modules/@eslint/eslintrc/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==", + "dev": true, + "peer": true + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", + "node_modules/@eslint/eslintrc/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==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" + "argparse": "^2.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.4", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "*" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" - }, + "peer": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "node_modules/@fastify/accept-negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", + "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=14" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "dev": true, - "license": "MIT", + "node_modules/@fastify/accepts": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@fastify/accepts/-/accepts-4.3.0.tgz", + "integrity": "sha512-QK4FoqXdwwPmaPOLL6NrxsyaXVvdviYVoS6ltHyOLdFlUyREIaMykHQIp+x0aJz9hB3B3n/Ht6QRdvBeGkptGQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "accepts": "^1.3.5", + "fastify-plugin": "^4.0.0" } }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@fastify/ajv-compiler": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", + "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", + "fast-uri": "^2.0.0" } }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "dev": true, - "license": "MIT", + "node_modules/@fastify/ajv-compiler/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "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/@fastify/ajv-compiler/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/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" + "node": ">=14" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.5", - "dev": true, - "license": "MIT", + "node_modules/@fastify/cookie": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@fastify/cookie/-/cookie-9.3.1.tgz", + "integrity": "sha512-h1NAEhB266+ZbZ0e9qUE6NnNR07i7DnNXWG9VbbZ8uC6O/hxHpl+Zoe5sw1yfdZ2U6XhToUGDnzQtWJdCaPwfg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "cookie-signature": "^1.1.0", + "fastify-plugin": "^4.0.0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@fastify/cors": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-9.0.1.tgz", + "integrity": "sha512-YY9Ho3ovI+QHIL2hW+9X4XqQjXLjJqsU+sMV/xFsxZkE8p3GNnYVFpoOxF7SsP5ZL76gwvbo3V9L+FIekBGU4Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "fastify-plugin": "^4.0.0", + "mnemonist": "0.39.6" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@fastify/error": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", + "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==" + }, + "node_modules/@fastify/fast-json-stringify-compiler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", + "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "fast-json-stringify": "^5.7.0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@fastify/formbody": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@fastify/formbody/-/formbody-7.4.0.tgz", + "integrity": "sha512-H3C6h1GN56/SMrZS8N2vCT2cZr7mIHzBHzOBa5OPpjfB/D6FzP9mMpE02ZzrFX0ANeh0BAJdoXKOF2e7IbV+Og==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "fast-querystring": "^1.0.0", + "fastify-plugin": "^4.0.0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "fast-deep-equal": "^3.1.3" } }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "dev": true, - "license": "MIT", + "node_modules/@fastify/send": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.1.0.tgz", + "integrity": "sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@lukeed/ms": "^2.0.1", + "escape-html": "~1.0.3", + "fast-decode-uri-component": "^1.0.1", + "http-errors": "2.0.0", + "mime": "^3.0.0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@fastify/static": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@fastify/static/-/static-7.0.1.tgz", + "integrity": "sha512-i1p/nELMknAisNfnjo7yhfoUOdKzA+n92QaMirv2NkZrJ1Wl12v2nyTYlDwPN8XoStMBAnRK/Kx6zKmfrXUPXw==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@fastify/accept-negotiator": "^1.0.0", + "@fastify/send": "^2.0.0", + "content-disposition": "^0.5.3", + "fastify-plugin": "^4.0.0", + "fastq": "^1.17.0", + "glob": "^10.3.4" } }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "dev": true, - "license": "MIT", + "node_modules/@fastify/static/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=6.9.0" + "node": ">=16 || 14 >=14.17" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, + "node_modules/@fontsource/playfair-display": { + "version": "5.0.21", + "resolved": "https://registry.npmjs.org/@fontsource/playfair-display/-/playfair-display-5.0.21.tgz", + "integrity": "sha512-jXktXPG9ft+A25XYiEGMuN9CZmLuIrq7PfGEmwSBCqVSZKUUktKK2kYkjE6dlxTkxCeWXP9vMoNCD0vcjxnbYg==" + }, + "node_modules/@fontsource/roboto": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@fontsource/roboto/-/roboto-5.0.12.tgz", + "integrity": "sha512-x0o17jvgoSSbS9OZnUX2+xJmVRvVCfeaYJjkS7w62iN7CuJWtMf5vJj8LqgC7ibqIkitOHVW+XssRjgrcHn62g==" + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "0.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", + "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==", + "hasInstallScript": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", + "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", + "hasInstallScript": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@fortawesome/fontawesome-common-types": "^0.2.36" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6" } }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "dev": true, - "license": "MIT", + "node_modules/@graphy/content.nq.read": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@graphy/content.nq.read/-/content.nq.read-4.3.7.tgz", + "integrity": "sha512-Q1wDp7BK9JLHOgkUu3YW5+HoSo6YKDNQxvfJ8Rrsy4sNXFxuaodx5XjyYjChKoQ0svFw/CZht3A5ndECJPIANw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@graphy/core.data.factory": "^4.3.7", + "@graphy/core.iso.stream": "^4.3.7" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.4.0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@graphy/content.trig.read": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@graphy/content.trig.read/-/content.trig.read-4.3.7.tgz", + "integrity": "sha512-8ff6DB/2zAULSnSr1vU0JpjZQ9SJFxEoYLUtz7P1WUCFbAAV6+RAXDjpJEVqhyCKAVdiozc1Zp7JUh4np3q3Ag==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@graphy/core.data.factory": "^4.3.7", + "@graphy/core.iso.stream": "^4.3.7", + "uri-js": "^4.4.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.4.0" } }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "dev": true, - "license": "MIT", + "node_modules/@graphy/content.trig.write": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@graphy/content.trig.write/-/content.trig.write-4.3.7.tgz", + "integrity": "sha512-NrzWQ3QC/nZwbSnyaW6npVSw2bEQwfCBQfyfnwASGDbtRleSH60jEQcaka3INhfIf25uWZ/XK4TgLS2mCbdXlA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@graphy/core.class.writable": "^4.3.7", + "@graphy/core.data.factory": "^4.3.7", + "big-integer": "^1.6.48" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.4.0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@graphy/content.ttl.write": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@graphy/content.ttl.write/-/content.ttl.write-4.3.7.tgz", + "integrity": "sha512-QpSa3lMmU+DA8udvikrPDji+XvUf5wfU4ShhqXU9mQEdccDTNw/eOOlhtLITAC3Q0dsobAdb71fXtj7zqtDwQA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@graphy/core.class.writable": "^4.3.7", + "@graphy/core.data.factory": "^4.3.7", + "big-integer": "^1.6.48" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.4.0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@graphy/content.xml.scribe": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@graphy/content.xml.scribe/-/content.xml.scribe-4.3.7.tgz", + "integrity": "sha512-V6Ezv7jN4HGQ8a2nQmheDh+AmQ4kq9Rn4fvDmdozbMeDv9zkEyg6tA0/KGnyeOAVpZFQLv8mYfvsWMxMXh7sCw==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@graphy/core.class.writable": "^4.3.7", + "@graphy/core.data.factory": "^4.3.7" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.4.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@graphy/core.class.scribable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@graphy/core.class.scribable/-/core.class.scribable-4.3.7.tgz", + "integrity": "sha512-XOR4hQOKiy34/q8svdcOzgcao27tClebSzpNaOfvdxSOC/E7plOhaLfVtWxPjfIbMJs7OtVihlyXEtD22Xnm1w==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" + "@graphy/core.data.factory": "^4.3.7", + "@graphy/core.iso.stream": "^4.3.7" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.4.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@graphy/core.class.writable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@graphy/core.class.writable/-/core.class.writable-4.3.7.tgz", + "integrity": "sha512-vUvYP9Sine5j9epaOlmkZ0Mll2Vlh/N3zc7weRlSnxNm2HhT/LhzF8PSCZyPg17rwpTabrjKW/Rj0xwQUqeEGQ==", "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" + "@graphy/core.class.scribable": "^4.3.7", + "@graphy/core.data.factory": "^4.3.7" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.4.0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@graphy/core.data.factory": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@graphy/core.data.factory/-/core.data.factory-4.3.7.tgz", + "integrity": "sha512-6uiNrClDnlfN52B8f0ZBjnyETXiCyYOyIUET2aGFTG+TXZTsiO1WcinsIo36YPt29i+boCDf0ldYDKhPKAibdw==", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "uri-js": "^4.4.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8.4.0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "dev": true, - "license": "MIT", + "node_modules/@graphy/core.iso.stream": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@graphy/core.iso.stream/-/core.iso.stream-4.3.7.tgz", + "integrity": "sha512-Rr7C+pPYmFVUGqP8OnYPh7D6VnwucT4LUQBDvlni4OSB9Px0QEenlUBTyqcfIByDTcDNb8fFek9qyjjrO6zlNQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=8.4.0" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@graphy/core.iso.stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 6" } }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "dev": true, - "license": "MIT", + "node_modules/@headlessui/vue": { + "version": "1.7.19", + "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.19.tgz", + "integrity": "sha512-VFjKPybogux/5/QYGSq4zgG/x3RcxId15W8uguAJAjPBxelI23dwjOjTx/mIiMkM/Hd3rzFxcf2aIp56eEWRcA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@tanstack/vue-virtual": "^3.0.0-beta.60" }, "engines": { - "node": ">=6.9.0" + "node": ">=10" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "vue": "^3.2.0" } }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, + "node_modules/@heroicons/vue": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@heroicons/vue/-/vue-2.1.1.tgz", + "integrity": "sha512-Yi5nh/89L193ALgHyJUQUdNLsKXPrrE3yj5yiR8WAlo7nZyXGxGauQcEAmBsa2XJGMhBMuEdoOiuZ8wEwTBxVQ==", "peerDependencies": { - "@babel/core": "^7.0.0-0" + "vue": ">= 3" } }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=10.10.0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "*" } }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, + "peer": true, "engines": { - "node": ">=6.9.0" + "node": ">=12.22" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true, - "license": "MIT", + "peer": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, + "node_modules/@isaacs/cliui/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": ">=6.9.0" + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "engines": { - "node": ">=6.9.0" + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@isaacs/cliui/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/@isaacs/cliui/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": { - "@babel/helper-plugin-utils": "^7.22.5" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", + "node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">= 6" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@json2csv/formatters": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@json2csv/formatters/-/formatters-7.0.6.tgz", + "integrity": "sha512-hjIk1H1TR4ydU5ntIENEPgoMGW+Q7mJ+537sDFDbsk+Y3EPl2i4NfFVjw0NJRgT+ihm8X30M67mA8AS6jPidSA==" + }, + "node_modules/@json2csv/plainjs": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@json2csv/plainjs/-/plainjs-7.0.6.tgz", + "integrity": "sha512-4Md7RPDCSYpmW1HWIpWBOqCd4vWfIqm53S3e/uzQ62iGi7L3r34fK/8nhOMEe+/eVfCx8+gdSCt1d74SlacQHw==", + "dependencies": { + "@json2csv/formatters": "^7.0.6", + "@streamparser/json": "^0.0.20" + } + }, + "node_modules/@lit-labs/ssr": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr/-/ssr-3.2.2.tgz", + "integrity": "sha512-He5TzeNPM9ECmVpgXRYmVlz0UA5YnzHlT43kyLi2Lu6mUidskqJVonk9W5K699+2DKhoXp8Ra4EJmHR6KrcW1Q==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@lit-labs/ssr-client": "^1.1.7", + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "@parse5/tools": "^0.3.0", + "@types/node": "^16.0.0", + "enhanced-resolve": "^5.10.0", + "lit": "^3.1.2", + "lit-element": "^4.0.4", + "lit-html": "^3.1.2", + "node-fetch": "^3.2.8", + "parse5": "^7.1.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=13.9.0" } }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "dev": true, - "license": "MIT", + "node_modules/@lit-labs/ssr-client": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-client/-/ssr-client-1.1.7.tgz", + "integrity": "sha512-VvqhY/iif3FHrlhkzEPsuX/7h/NqnfxLwVf0p8ghNIlKegRyRqgeaJevZ57s/u/LiFyKgqksRP5n+LmNvpxN+A==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@lit/reactive-element": "^2.0.4", + "lit": "^3.1.2", + "lit-html": "^3.1.2" + } + }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", + "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==" + }, + "node_modules/@lit-labs/ssr/node_modules/@types/node": { + "version": "16.18.82", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.82.tgz", + "integrity": "sha512-pcDZtkx9z8XYV+ius2P3Ot2VVrcYOfXffBQUBuiszrlUzKSmoDYqo+mV+IoL8iIiIjjtOMvNSmH1hwJ+Q+f96Q==" + }, + "node_modules/@lit-labs/ssr/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=6.9.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/@babel/preset-env": { - "version": "7.23.6", - "dev": true, - "license": "MIT", + "node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.4", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.5", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.3", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/@lukeed/ms": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", + "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" } }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", + "node_modules/@manypkg/find-root/node_modules/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==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", "dev": true, - "license": "MIT" + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } }, - "node_modules/@babel/runtime": { - "version": "7.23.5", - "license": "MIT", + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true + }, + "node_modules/@manypkg/get-packages/node_modules/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==", + "dev": true, "dependencies": { - "regenerator-runtime": "^0.14.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/@babel/template": { - "version": "7.22.15", + "node_modules/@messageformat/core": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@messageformat/core/-/core-3.3.0.tgz", + "integrity": "sha512-YcXd3remTDdeMxAlbvW6oV9d/01/DZ8DHUFwSttO3LMzIZj3iO0NRw+u1xlsNNORFI+u0EQzD52ZX3+Udi0T3g==", + "dependencies": { + "@messageformat/date-skeleton": "^1.0.0", + "@messageformat/number-skeleton": "^1.0.0", + "@messageformat/parser": "^5.1.0", + "@messageformat/runtime": "^3.0.1", + "make-plural": "^7.0.0", + "safe-identifier": "^0.4.1" + } + }, + "node_modules/@messageformat/date-skeleton": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@messageformat/date-skeleton/-/date-skeleton-1.0.1.tgz", + "integrity": "sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg==" + }, + "node_modules/@messageformat/number-skeleton": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@messageformat/number-skeleton/-/number-skeleton-1.2.0.tgz", + "integrity": "sha512-xsgwcL7J7WhlHJ3RNbaVgssaIwcEyFkBqxHdcdaiJzwTZAWEOD8BuUFxnxV9k5S0qHN3v/KzUpq0IUpjH1seRg==" + }, + "node_modules/@messageformat/parser": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.0.tgz", + "integrity": "sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ==", + "dependencies": { + "moo": "^0.5.1" + } + }, + "node_modules/@messageformat/runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@messageformat/runtime/-/runtime-3.0.1.tgz", + "integrity": "sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==", + "dependencies": { + "make-plural": "^7.0.0" + } + }, + "node_modules/@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==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@babel/traverse": { - "version": "7.23.5", + "node_modules/@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==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.5", - "@babel/types": "^7.23.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@babel/types": { - "version": "7.23.5", + "node_modules/@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==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@bergos/jsonparse": { - "version": "1.4.1", - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT", + "node_modules/@oozcitak/dom": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", "dependencies": { - "buffer": "^6.0.3" + "@oozcitak/infra": "1.0.8", + "@oozcitak/url": "1.0.4", + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/@changesets/apply-release-plan": { - "version": "7.0.0", - "dev": true, - "license": "MIT", + "node_modules/@oozcitak/infra": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", + "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/config": "^3.0.0", - "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.0", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "detect-indent": "^6.0.0", - "fs-extra": "^7.0.1", - "lodash.startcase": "^4.4.0", - "outdent": "^0.5.0", - "prettier": "^2.7.1", - "resolve-from": "^5.0.0", - "semver": "^7.5.3" + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=6.0" } }, - "node_modules/@changesets/assemble-release-plan": { - "version": "6.0.0", - "dev": true, - "license": "MIT", + "node_modules/@oozcitak/url": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", + "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.0.0", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "semver": "^7.5.3" + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=8.0" } }, - "node_modules/@changesets/changelog-git": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.0.0" + "node_modules/@oozcitak/util": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", + "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", + "engines": { + "node": ">=8.0" } }, - "node_modules/@changesets/cli": { - "version": "2.27.1", - "dev": true, - "license": "MIT", + "node_modules/@openlayers-elements/bundle": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@openlayers-elements/bundle/-/bundle-0.1.0.tgz", + "integrity": "sha512-WRfJXq8ln33OI7GayGt/Lwy4VNMXT9TABEcRpaCuRhuhe+NAmpbhfXCJ3UJmeFEL9W0iasWWsCJvmfIwajky7g==" + }, + "node_modules/@parse5/tools": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@parse5/tools/-/tools-0.3.0.tgz", + "integrity": "sha512-zxRyTHkqb7WQMV8kTNBKWb1BeOFUKXBXTBWuxg9H9hfvQB3IwP6Iw2U75Ia5eyRxPNltmY7E8YAlz6zWwUnjKg==", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/apply-release-plan": "^7.0.0", - "@changesets/assemble-release-plan": "^6.0.0", - "@changesets/changelog-git": "^0.2.0", - "@changesets/config": "^3.0.0", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.0.0", - "@changesets/get-release-plan": "^4.0.0", - "@changesets/git": "^3.0.0", - "@changesets/logger": "^0.1.0", - "@changesets/pre": "^2.0.0", - "@changesets/read": "^0.6.0", - "@changesets/types": "^6.0.0", - "@changesets/write": "^0.3.0", - "@manypkg/get-packages": "^1.1.3", - "@types/semver": "^7.5.0", - "ansi-colors": "^4.1.3", - "chalk": "^2.1.0", - "ci-info": "^3.7.0", - "enquirer": "^2.3.0", - "external-editor": "^3.1.0", - "fs-extra": "^7.0.1", - "human-id": "^1.0.2", - "meow": "^6.0.0", - "outdent": "^0.5.0", - "p-limit": "^2.2.0", - "preferred-pm": "^3.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "spawndamnit": "^2.0.0", - "term-size": "^2.1.0", - "tty-table": "^4.1.5" - }, - "bin": { - "changeset": "bin.js" + "parse5": "^7.0.0" } }, - "node_modules/@changesets/config": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.0.0", - "@changesets/logger": "^0.1.0", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1", - "micromatch": "^4.0.2" + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" } }, - "node_modules/@changesets/errors": { - "version": "0.2.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs-elements/editor-base": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@rdfjs-elements/editor-base/-/editor-base-0.5.0.tgz", + "integrity": "sha512-Kd3ktbMa91kKpKDVLykmxtV/+81F3FhXg+34qRPuQ+z+z61/HP5HxTOUCvFL0YY0zS/uiTG4tnmNacDnMCl/bQ==", "dependencies": { - "extendable-error": "^0.1.5" + "@tpluscode/rdf-ns-builders": ">=3.0.2", + "@vanillawc/wc-codemirror": "^1.9.7", + "codemirror": "^5.61.1", + "lit": "^2", + "throttle-debounce": "^3.0.1" } }, - "node_modules/@changesets/get-dependents-graph": { - "version": "2.0.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs-elements/editor-base/node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", "dependencies": { - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "chalk": "^2.1.0", - "fs-extra": "^7.0.1", - "semver": "^7.5.3" + "@lit-labs/ssr-dom-shim": "^1.0.0" } }, - "node_modules/@changesets/get-release-plan": { - "version": "4.0.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs-elements/editor-base/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/assemble-release-plan": "^6.0.0", - "@changesets/config": "^3.0.0", - "@changesets/pre": "^2.0.0", - "@changesets/read": "^0.6.0", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3" + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" } }, - "node_modules/@changesets/get-version-range-type": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@changesets/git": { - "version": "3.0.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs-elements/editor-base/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/errors": "^0.2.0", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "is-subdir": "^1.1.1", - "micromatch": "^4.0.2", - "spawndamnit": "^2.0.0" + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" } }, - "node_modules/@changesets/logger": { - "version": "0.1.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs-elements/editor-base/node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", "dependencies": { - "chalk": "^2.1.0" + "@types/trusted-types": "^2.0.2" } }, - "node_modules/@changesets/parse": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.0.0", - "js-yaml": "^3.13.1" + "node_modules/@rdfjs-elements/formats-pretty": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/@rdfjs-elements/formats-pretty/-/formats-pretty-0.6.7.tgz", + "integrity": "sha512-5tHUEgZsWMUGr0UJRxws4S3mS+eUByRU6T6YGmfIzHCWvETHl31E8Icx8Fa/33CBCzL8nyPF8Gt/lSRaDx+xMg==", + "dependencies": { + "@graphy/content.nq.read": "^4.3.7", + "@graphy/content.trig.read": "^4.3.7", + "@graphy/content.trig.write": "^4.3.7", + "@graphy/content.ttl.write": "^4.3.7", + "@graphy/content.xml.scribe": "^4.3.7", + "@graphy/core.data.factory": "^4.3.7", + "@rdfjs/environment": "^1", + "@rdfjs/formats": "^4.0.0", + "@rdfjs/serializer-jsonld-ext": "^4.0.0", + "@rdfjs/term-map": "^2.0.0", + "@tpluscode/rdf-ns-builders": ">=3.0.2", + "@zazuko/formats-lazy": "^1.0.1", + "@zazuko/prefixes": "^2.0.0", + "readable-stream": ">=3.6.0" } }, - "node_modules/@changesets/pre": { - "version": "2.0.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs-elements/rdf-editor": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@rdfjs-elements/rdf-editor/-/rdf-editor-0.5.7.tgz", + "integrity": "sha512-hDpSkBjeUagNBd4MgKPmTVWklR6PKSHGTB1N2Ioewc7mVbGTcUaFcQPK8+vIY1kCS9r59f1BLUPfSU7gsCyChg==", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/errors": "^0.2.0", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1" + "@rdfjs-elements/editor-base": "^0.5.0", + "@rdfjs-elements/formats-pretty": "^0.6.7", + "@rdfjs/data-model": "^2", + "@rdfjs/environment": "^1", + "@rdfjs/formats": "^4", + "@tpluscode/rdf-ns-builders": ">=3.0.2", + "readable-stream": "^3", + "string-to-stream": "^3.0.1" } }, - "node_modules/@changesets/read": { - "version": "0.6.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs-elements/rdf-editor/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/git": "^3.0.0", - "@changesets/logger": "^0.1.0", - "@changesets/parse": "^0.4.0", - "@changesets/types": "^6.0.0", - "chalk": "^2.1.0", - "fs-extra": "^7.0.1", - "p-filter": "^2.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@changesets/types": { - "version": "6.0.0", - "dev": true, - "license": "MIT" + "node_modules/@rdfjs/data-model": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-2.0.2.tgz", + "integrity": "sha512-v5LRNkLRJazMCGU7VtEzhz5wKwz/IrOdJEKapCtd35HuFbQfeGpoJP6QOXGyFHhWwKmtG+UMlZzYFyNDVE1m6g==", + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } }, - "node_modules/@changesets/write": { - "version": "0.3.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs/dataset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-1.1.1.tgz", + "integrity": "sha512-BNwCSvG0cz0srsG5esq6CQKJc1m8g/M0DZpLuiEp0MMpfwguXX7VeS8TCg4UUG3DV/DqEvhy83ZKSEjdsYseeA==", "dependencies": { - "@babel/runtime": "^7.20.1", - "@changesets/types": "^6.0.0", - "fs-extra": "^7.0.1", - "human-id": "^1.0.2", - "prettier": "^2.7.1" + "@rdfjs/data-model": "^1.2.0" + }, + "bin": { + "rdfjs-dataset-test": "bin/test.js" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "peer": true, + "node_modules/@rdfjs/dataset/node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", + "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@rdfjs/types": ">=1.0.1" }, - "engines": { - "node": ">=12" + "bin": { + "rdfjs-data-model-test": "bin/test.js" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "peer": true, + "node_modules/@rdfjs/environment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/environment/-/environment-1.0.0.tgz", + "integrity": "sha512-+S5YjSvfoQR5r7YQCRCCVHvIEyrWia7FJv2gqM3s5EDfotoAQmFeBagApa9c/eQFi5EiNhmBECE5nB8LIxTaHg==" + }, + "node_modules/@rdfjs/express-handler": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@rdfjs/express-handler/-/express-handler-1.2.2.tgz", + "integrity": "sha512-4BeUtp4XF5I9fnKc1tiN0syr5YFNH1773GKhbb3ZHzdfrPq/hjbp+nmqVgvatq5LSKImdWve8I0rVsXioPuzfg==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@rdfjs/dataset": "^1.0.1", + "@rdfjs/formats-common": "^2.0.0", + "absolute-url": "^1.2.2", + "http-errors": "^1.7.2", + "isstream": "^0.1.2", + "once": "^1.4.0", + "rdf-dataset-ext": "^1.0.0", + "rdf-transform-triple-to-quad": "^1.0.2", + "readable-stream": "^3.6.0" } }, - "node_modules/@digitalbazaar/http-client": { - "version": "1.2.0", - "license": "BSD-3-Clause", - "dependencies": { - "esm": "^3.2.22", - "ky": "^0.25.1", - "ky-universal": "^0.8.2" - }, + "node_modules/@rdfjs/express-handler/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "engines": { - "node": ">=10.0.0" + "node": ">= 0.6" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs/express-handler/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">= 0.6" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/@rdfjs/express-handler/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 6" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0", - "peer": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "node_modules/@rdfjs/express-handler/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/@rdfjs/fetch-lite": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@rdfjs/fetch-lite/-/fetch-lite-3.2.2.tgz", + "integrity": "sha512-hcdg9gvMgaOLPGS1LAYPjyS3rjQg2x8G/do+ZTlHjIHrAtRzXZCa0ui+pzoT98258RQzxEGqajY4ug4IqSuHZw==", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "is-stream": "^3.0.0", + "nodeify-fetch": "^3.1.0", + "readable-stream": "^4.4.2" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "peer": true, + "node_modules/@rdfjs/fetch-lite/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/@eslint/js": { - "version": "8.55.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node_modules/@rdfjs/fetch-lite/node_modules/nodeify-fetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodeify-fetch/-/nodeify-fetch-3.1.0.tgz", + "integrity": "sha512-ZV81vM//sEgTgXwVZlOONzcOCdTGQ53mV65FVSNXgPQHa8oCwRLtLbnGxL/1S/Yw90bcXUDKMz00jEnaeazo+A==", + "dependencies": { + "lodash": "^4.17.21", + "node-fetch": "^3.2.10", + "readable-stream": "^4.2.0", + "stream-chunks": "^1.0.0" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=14" + "node_modules/@rdfjs/formats": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/formats/-/formats-4.0.0.tgz", + "integrity": "sha512-9e0DX+iWi8d958Px6Ggb1otl/EhfyvlfWcop+lS0aZlsGV2YK9Phl5lzCUYTfTefSyyQk8tJd5XN52hhDLb5Wg==", + "dependencies": { + "@rdfjs/parser-jsonld": "^2.1.0", + "@rdfjs/parser-n3": "^2.0.1", + "@rdfjs/serializer-jsonld": "^2.0.0", + "@rdfjs/serializer-jsonld-ext": "^4.0.0", + "@rdfjs/serializer-ntriples": "^2.0.0", + "@rdfjs/serializer-turtle": "^1.1.1", + "@rdfjs/sink-map": "^2.0.0", + "rdfxml-streaming-parser": "^2.3.0" } }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", - "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==", - "hasInstallScript": true, - "engines": { - "node": ">=6" + "node_modules/@rdfjs/formats-common": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@rdfjs/formats-common/-/formats-common-2.2.0.tgz", + "integrity": "sha512-XuW5tfTqN9gfbI/P3Duvai++m1fhp3idb7lmZYyP6F4EvgC7L6U9MgeRkFvqx8Vxq813+R09NeHBT5vC4BU3Lw==", + "dependencies": { + "@rdfjs/parser-jsonld": "^1.2.1", + "@rdfjs/parser-n3": "^1.1.4", + "@rdfjs/serializer-jsonld": "^1.2.3", + "@rdfjs/serializer-ntriples": "^1.0.3", + "@rdfjs/sink-map": "^1.0.0", + "rdfxml-streaming-parser": "^1.4.0" } }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "5.15.4", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", - "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", - "hasInstallScript": true, + "node_modules/@rdfjs/formats-common/node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", + "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.36" + "@rdfjs/types": ">=1.0.1" }, - "engines": { - "node": ">=6" + "bin": { + "rdfjs-data-model-test": "bin/test.js" } }, - "node_modules/@graphy/content.nq.read": { - "version": "4.3.7", - "license": "ISC", + "node_modules/@rdfjs/formats-common/node_modules/@rdfjs/namespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-1.1.0.tgz", + "integrity": "sha512-utO5rtaOKxk8B90qzaQ0N+J5WrCI28DtfAY/zExCmXE7cOfC5uRI/oMKbLaVEPj2P7uArekt/T4IPATtj7Tjug==", "dependencies": { - "@graphy/core.data.factory": "^4.3.7", - "@graphy/core.iso.stream": "^4.3.7" + "@rdfjs/data-model": "^1.1.0" }, "engines": { - "node": ">=8.4.0" + "node": ">=6" } }, - "node_modules/@graphy/content.trig.read": { - "version": "4.3.7", - "license": "ISC", + "node_modules/@rdfjs/formats-common/node_modules/@rdfjs/parser-jsonld": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@rdfjs/parser-jsonld/-/parser-jsonld-1.3.1.tgz", + "integrity": "sha512-5eoG1YCq/uJvEBe0Hiw/TzPvRODLcUmWrGnOpzrvxkEvvmF8FUX8KYFfYtROEIjCuPywG2TBb0ID8F9/sqG0tg==", "dependencies": { - "@graphy/core.data.factory": "^4.3.7", - "@graphy/core.iso.stream": "^4.3.7", - "uri-js": "^4.4.0" - }, - "engines": { - "node": ">=8.4.0" + "@rdfjs/data-model": "^1.3.4", + "@rdfjs/sink": "^1.0.3", + "jsonld-streaming-parser": "^2.4.3", + "readable-stream": "^3.6.0" } }, - "node_modules/@graphy/content.trig.write": { - "version": "4.3.7", - "license": "ISC", + "node_modules/@rdfjs/formats-common/node_modules/@rdfjs/parser-n3": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rdfjs/parser-n3/-/parser-n3-1.1.4.tgz", + "integrity": "sha512-PUKSNlfD2Zq3GcQZuOF2ndfrLbc+N96FUe2gNIzARlR2er0BcOHBHEFUJvVGg1Xmsg3hVKwfg0nwn1JZ7qKKMw==", "dependencies": { - "@graphy/core.class.writable": "^4.3.7", - "@graphy/core.data.factory": "^4.3.7", - "big-integer": "^1.6.48" - }, - "engines": { - "node": ">=8.4.0" + "@rdfjs/data-model": "^1.0.1", + "@rdfjs/sink": "^1.0.2", + "n3": "^1.3.5", + "readable-stream": "^3.6.0", + "readable-to-readable": "^0.1.0" } }, - "node_modules/@graphy/content.ttl.write": { - "version": "4.3.7", - "license": "ISC", + "node_modules/@rdfjs/formats-common/node_modules/@rdfjs/serializer-jsonld": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-jsonld/-/serializer-jsonld-1.2.3.tgz", + "integrity": "sha512-Y6jGvXvtI4eIpHIizkY6WQnwUZNWcNfkwO4ZVTIGZpc7mHrlBMaXpcXc3f6XOBVeeb4k1dNy7Fqu2CL0B5+Uew==", "dependencies": { - "@graphy/core.class.writable": "^4.3.7", - "@graphy/core.data.factory": "^4.3.7", - "big-integer": "^1.6.48" - }, - "engines": { - "node": ">=8.4.0" + "@rdfjs/namespace": "^1.1.0", + "@rdfjs/sink": "^1.0.3", + "readable-stream": "^3.6.0" } }, - "node_modules/@graphy/content.xml.scribe": { - "version": "4.3.7", - "license": "ISC", + "node_modules/@rdfjs/formats-common/node_modules/@rdfjs/serializer-ntriples": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-ntriples/-/serializer-ntriples-1.0.3.tgz", + "integrity": "sha512-XXFgzNJyYrix0YgysqYowKw40hCJ+zeVqA/CGgO3y5XyKY+NL/VJJELMn7cTwjJteiLVCgRNAvaUVn4CjJ2PCg==", "dependencies": { - "@graphy/core.class.writable": "^4.3.7", - "@graphy/core.data.factory": "^4.3.7" - }, + "@rdfjs/sink": "^1.0.3", + "@rdfjs/to-ntriples": "^1.0.2", + "readable-to-readable": "^0.1.0" + } + }, + "node_modules/@rdfjs/formats-common/node_modules/@rdfjs/sink": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rdfjs/sink/-/sink-1.0.3.tgz", + "integrity": "sha512-2KfYa8mAnptRNeogxhQqkWNXqfYVWO04jQThtXKepySrIwYmz83+WlevQtA4VDLFe+kFd2TwgL29ekPe5XVUfA==", "engines": { - "node": ">=8.4.0" + "node": ">=6" } }, - "node_modules/@graphy/core.class.scribable": { - "version": "4.3.7", - "license": "ISC", - "dependencies": { - "@graphy/core.data.factory": "^4.3.7", - "@graphy/core.iso.stream": "^4.3.7" - }, + "node_modules/@rdfjs/formats-common/node_modules/@rdfjs/sink-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/sink-map/-/sink-map-1.0.1.tgz", + "integrity": "sha512-PRp5TjULHe2oRcupR80SClZ/l50wnSuX2Pl+TlkcRazt1w7AT86kLmQYFbDfjqGM7uDwSyD6evLJxXBDf5UuvQ==", "engines": { - "node": ">=8.4.0" + "node": ">=6" } }, - "node_modules/@graphy/core.class.writable": { - "version": "4.3.7", - "license": "ISC", - "dependencies": { - "@graphy/core.class.scribable": "^4.3.7", - "@graphy/core.data.factory": "^4.3.7" - }, + "node_modules/@rdfjs/formats-common/node_modules/@rdfjs/to-ntriples": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-1.0.2.tgz", + "integrity": "sha512-ngw5XAaGHjgGiwWWBPGlfdCclHftonmbje5lMys4G2j4NvfExraPIuRZgjSnd5lg4dnulRVUll8tRbgKO+7EDA==", "engines": { - "node": ">=8.4.0" + "node": ">=6" } }, - "node_modules/@graphy/core.data.factory": { - "version": "4.3.7", - "license": "ISC", + "node_modules/@rdfjs/formats-common/node_modules/jsonld-streaming-parser": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-2.4.3.tgz", + "integrity": "sha512-ysuevJ+l8+Y4W3J/yQW3pa9VCBNDHo2tZkKmPAnfhfsmFMyxuueAeXMmTbpJZdrpagzeeDVr3A8EZVuHliQJ9A==", "dependencies": { - "uri-js": "^4.4.0" - }, - "engines": { - "node": ">=8.4.0" + "@rdfjs/types": "*", + "@types/http-link-header": "^1.0.1", + "canonicalize": "^1.0.1", + "http-link-header": "^1.0.2", + "jsonld-context-parser": "^2.1.3", + "jsonparse": "^1.3.1", + "rdf-data-factory": "^1.1.0" } }, - "node_modules/@graphy/core.iso.stream": { - "version": "4.3.7", - "license": "ISC", + "node_modules/@rdfjs/formats-common/node_modules/rdfxml-streaming-parser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-1.5.0.tgz", + "integrity": "sha512-pnt+7NgeqCMd2/rub+dqxzYJhZwJjBNU2BRwyYdCTmRZu2fr795jCPJB6Io5pjPzAt29ASqy+ODBSRMDKoKGbQ==", "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8.4.0" + "@rdfjs/types": "*", + "rdf-data-factory": "^1.1.0", + "relative-to-absolute-iri": "^1.0.0", + "sax": "^1.2.4" } }, - "node_modules/@graphy/core.iso.stream/node_modules/readable-stream": { + "node_modules/@rdfjs/formats-common/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2165,5957 +1989,2232 @@ "node": ">= 6" } }, - "node_modules/@headlessui/vue": { - "version": "1.7.16", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "vue": "^3.2.0" + "node_modules/@rdfjs/io": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/io/-/io-1.0.0.tgz", + "integrity": "sha512-+yBzq3Tlrw7vd4NFTdKfKjtJi+PiYi5jLqGwNh3H/kqrYBQOK3iuZuUAT8mpIAPNx/ZTs0+egwGcP1Felh79KA==", + "dependencies": { + "duplex-to": "^2.0.0", + "readable-stream": "^4.4.2", + "stream-chunks": "^1.0.0" } }, - "node_modules/@heroicons/vue": { - "version": "2.0.18", - "license": "MIT", - "peerDependencies": { - "vue": ">= 3" + "node_modules/@rdfjs/namespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-2.0.1.tgz", + "integrity": "sha512-U85NWVGnL3gWvOZ4eXwUcv3/bom7PAcutSBQqmVWvOaslPy+kDzAJCH1WYBLpdQd4yMmJ+bpJcDl9rcHtXeixg==", + "dependencies": { + "@rdfjs/data-model": "^2.0.1" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "dev": true, - "license": "Apache-2.0", - "peer": true, + "node_modules/@rdfjs/normalize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/normalize/-/normalize-2.0.1.tgz", + "integrity": "sha512-Cz6AvVdNjxSTTtcYN1z6bSaeD6uWU93jxHqgS1w5l+b99ABUzCTct5/y8DAJFjpH8wrG4eRqwVA4Bpka4ltakg==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" + "rdf-canonize": "^3.4.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node_modules/@rdfjs/parser-jsonld": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@rdfjs/parser-jsonld/-/parser-jsonld-2.1.1.tgz", + "integrity": "sha512-bddq04r/p7booWk+5IqcTlWpDljy8Sv1cdFynpzawNruZTD99n3eSj7LCHPBUzqnpXc1Dnt8tgXiqB02WSYtiw==", + "dependencies": { + "@rdfjs/data-model": "^2.0.2", + "@rdfjs/sink": "^2.0.1", + "duplex-to": "^2.0.0", + "jsonld-streaming-parser": "^3.3.0", + "readable-stream": "^4.5.2" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "dev": true, - "license": "BSD-3-Clause", - "peer": true + "node_modules/@rdfjs/parser-n3": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/parser-n3/-/parser-n3-2.0.2.tgz", + "integrity": "sha512-rrrvyh+kkj9ndwep2h6nYmugIfggDOC9uGpmDAHn/I/z52K7dHxi7xOkPPrezTsIbgNvFhV3zS7mzyObRxcLWA==", + "dependencies": { + "@rdfjs/data-model": "^2.0.2", + "@rdfjs/sink": "^2.0.1", + "duplex-to": "^2.0.0", + "n3": "^1.17.2", + "readable-stream": "^4.5.2" + } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "license": "ISC", + "node_modules/@rdfjs/prefix-map": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@rdfjs/prefix-map/-/prefix-map-0.1.1.tgz", + "integrity": "sha512-w9VrJ/YfMyvdcpuKG0XEzgbH6AXtUSugvgL1U1IvbTYdL2rfIifaYkSyp86lEhD2hHeYUYAGZTKkpDErtXCMxQ==", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "readable-stream": "^4.3.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node_modules/@rdfjs/score": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/score/-/score-0.1.2.tgz", + "integrity": "sha512-HKiC6q6sCsEPYVf9B4k/R0Hd+9e0QsjKr4zRdfuv6V4VPiPyzHfAsSUiFfRdi8UvNfpdKmoSWX8PM/ZIPwvq1g==", + "dependencies": { + "@rdfjs/data-model": "^2.0.2", + "@rdfjs/term-map": "^2.0.1", + "@rdfjs/term-set": "^2.0.2", + "@rdfjs/to-ntriples": "^3.0.1" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node_modules/@rdfjs/serializer-jsonld": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-jsonld/-/serializer-jsonld-2.0.1.tgz", + "integrity": "sha512-O8WzdY7THsse/nMsrMLd2e51ADHO2SIUrkiZ9Va/8W3lXeeeiwDRPMppWy/i9yL4q6EM8iMW1riV7E0mK3fsBQ==", + "dependencies": { + "@rdfjs/sink": "^2.0.1", + "readable-stream": "^4.5.2" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" + "node_modules/@rdfjs/serializer-jsonld-ext": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-jsonld-ext/-/serializer-jsonld-ext-4.0.0.tgz", + "integrity": "sha512-HP5DCmhyfVuQuk58AO5vzNY+dIFVHe2oHY8NX2K+3XmrTmu/yzrFzPbDeU9Cwr71XC4RifEMoksIg+8jnhxmfQ==", + "dependencies": { + "@rdfjs/sink": "^2.0.0", + "jsonld": "^8.1.0", + "readable-stream": "^4.3.0", + "stream-chunks": "^1.0.0" + } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs/serializer-ntriples": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-ntriples/-/serializer-ntriples-2.0.1.tgz", + "integrity": "sha512-G1ZI0qaN/MUHxeCwr59JscO2LdyIb6MNQdXOv7NFBZuodyHsxxhJRFmMVn+3SEXeNJbVeEEbWBrLglCUgJ8XjQ==", "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" + "@rdfjs/sink": "^2.0.1", + "@rdfjs/to-ntriples": "^3.0.1", + "duplex-to": "^2.0.0", + "readable-stream": "^4.5.2" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs/serializer-turtle": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/serializer-turtle/-/serializer-turtle-1.1.2.tgz", + "integrity": "sha512-jLcFpa2TlyK4Se+fjaI0ur+BtlhFqzmAL3QGczBl8oa8Q15deuVVNaOTGO3pcy/TbMQD4jKv7G9PHw56brjQrA==", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/prefix-map": "^0.1.1", + "@rdfjs/sink": "^2.0.0", + "@rdfjs/term-map": "^2.0.0", + "@rdfjs/to-ntriples": "^2.0.0", + "@rdfjs/tree": "^0.2.1", + "readable-stream": "^4.3.0", + "stream-chunks": "^1.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs/serializer-turtle/node_modules/@rdfjs/to-ntriples": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-2.0.0.tgz", + "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==" + }, + "node_modules/@rdfjs/sink": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/sink/-/sink-2.0.1.tgz", + "integrity": "sha512-smzIFGF6EH1sLAJR9F3p2wMNrN44JjPeYAoITTJLqtuNC319K7IXaJ+qNLBGTtapZ/jvpx2Tks0TjcH9KrAvEA==" + }, + "node_modules/@rdfjs/sink-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/sink-map/-/sink-map-2.0.1.tgz", + "integrity": "sha512-BwCTTsMN/tfQl6QzD2oHn9A08e4af+hlzAz/d5XXrlOkYMEDUAqFuh2Odj9EbayhAEeN4wA743Mj2yC0/s69rg==" + }, + "node_modules/@rdfjs/term-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/term-map/-/term-map-2.0.1.tgz", + "integrity": "sha512-kyaq8KfTxnMVclD5trsVkB774Q/4/mj+fwNBRxkMHCu/gTw3S1x7W8ZDFN9Yt1AiRkfG2CQe/b/iLbl5RMHvUQ==", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@rdfjs/to-ntriples": "^2.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", + "node_modules/@rdfjs/term-map/node_modules/@rdfjs/to-ntriples": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-2.0.0.tgz", + "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==" + }, + "node_modules/@rdfjs/term-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/term-set/-/term-set-2.0.2.tgz", + "integrity": "sha512-XSP+G9Q+QxeRcmTvUyFzdPJtGHdYDWr166UARO8UPhG/thUY2aHw7Qx17KTwTV0auJDSzO43AoJ6v/WdjrJ6pg==", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" + "@rdfjs/to-ntriples": "^2.0.0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@rdfjs/term-set/node_modules/@rdfjs/to-ntriples": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-2.0.0.tgz", + "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==" + }, + "node_modules/@rdfjs/to-ntriples": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-3.0.1.tgz", + "integrity": "sha512-gjoPAvh4j7AbGMjcDn/8R4cW+d/FPtbfbMM0uQXkyfBFtNUW2iVgrqsgJ65roLc54Y9A2TTFaeeTGSvY9a0HCQ==" + }, + "node_modules/@rdfjs/traverser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@rdfjs/traverser/-/traverser-0.1.2.tgz", + "integrity": "sha512-EBB/p9LrTMzupZ6VlxtBXyL0bdXFY7e5lAp2tHNwxOoe3kcR6hOJFVWdPT7pdWaSotyXbTIEQxG4PkXMw/OY7w==", + "dependencies": { + "@rdfjs/to-ntriples": "^2.0.0" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs/traverser/node_modules/@rdfjs/to-ntriples": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-2.0.0.tgz", + "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==" + }, + "node_modules/@rdfjs/tree": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@rdfjs/tree/-/tree-0.2.1.tgz", + "integrity": "sha512-J70CQ7R8Ivfs1FFUxtFN7ADb5wTMgbhn0O558NXSXQHItmSavT6cXmQlIokbmboU+grhu56iR/8Bl9do8LCq+w==", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-map": "^2.0.0", + "@rdfjs/term-set": "^2.0.1" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/@rdfjs/types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rdfjs/types/-/types-1.1.0.tgz", + "integrity": "sha512-5zm8bN2/CC634dTcn/0AhTRLaQRjXDZs3QfcAsQKNturHT7XVWcKy/8p3P5gXl+YkZTAmy7T5M/LyiT/jbkENw==", "dependencies": { - "color-convert": "^2.0.1" + "@types/node": "*" + } + }, + "node_modules/@rubensworks/saxes": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@rubensworks/saxes/-/saxes-6.0.1.tgz", + "integrity": "sha512-UW4OTIsOtJ5KSXo2Tchi4lhZqu+tlHrOAs4nNti7CrtB53kAZl3/hyrTi6HkMihxdbDM6m2Zc3swc/ZewEe1xw==", + "dependencies": { + "xmlchars": "^2.2.0" }, "engines": { - "node": ">=8" - }, + "node": ">=v12.22.12" + } + }, + "node_modules/@streamparser/json": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@streamparser/json/-/json-0.0.20.tgz", + "integrity": "sha512-VqAAkydywPpkw63WQhPVKCD3SdwXuihCUVZbbiY3SfSTGQyHmwRoq27y4dmJdZuJwd5JIlQoMPyGvMbUPY0RKQ==" + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.1.2.tgz", + "integrity": "sha512-DATZJs8iejkIUqXZe6ruDAnjFo78BKnIIgqQZrc7CmEFqfLEN/TPD91n4hRfo6hpRB6xC00bwKxv7vdjFNEmOg==", "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "node_modules/@tanstack/vue-virtual": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.1.2.tgz", + "integrity": "sha512-RmUnhsFtRw9p4Ti/+rG2Hr3y4yFhs8Xdsn7x9tkPoKINbVya/5RSCoNUCCAg2iXNjOI5a55iBNzNV0SVwxMwKA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@tanstack/virtual-core": "3.1.2" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" } }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@tarekraafat/autocomplete.js": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@tarekraafat/autocomplete.js/-/autocomplete.js-7.2.0.tgz", + "integrity": "sha512-p1aEcKC/WHpVBuFyRhXq/ie+mgO4QqCNEsdVIPUBgmNqmxV4dVfqYEpk///9vvKyranUUvrlVu4e2tdzAaXKIg==" + }, + "node_modules/@tpluscode/eslint-config": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@tpluscode/eslint-config/-/eslint-config-0.4.5.tgz", + "integrity": "sha512-JF3hkuNhS1Gi/TfMHagmcwLDRscMXAY36+WNwHvX3hnPfM4nrGUHignwSMsHdMdf4aOfhxvXNvucYmw8RbIZxw==", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "optionalDependencies": { + "@typescript-eslint/eslint-plugin": ">=2", + "@typescript-eslint/parser": ">=2", + "eslint-import-resolver-typescript": ">=2" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "eslint": ">=6", + "eslint-config-standard": ">=11", + "eslint-plugin-import": ">=2", + "eslint-plugin-n": ">=15", + "eslint-plugin-node": ">=11", + "eslint-plugin-promise": ">=6", + "eslint-plugin-require-extensions": ">=0.1.3", + "eslint-plugin-unused-imports": "^3.0.0", + "standard": ">=11" } }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@tpluscode/rdf-ns-builders": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tpluscode/rdf-ns-builders/-/rdf-ns-builders-4.3.0.tgz", + "integrity": "sha512-x3uh9mYwAU+PrALaDKhVjml1TCCWWduo6J8rybd9SMEEAoooXq1MYb13MRputjRT/kYaFyCND7LMobzhxZ/+bg==", + "dependencies": { + "@rdfjs/data-model": "^2", + "@rdfjs/namespace": "^2", + "@rdfjs/types": "*", + "@types/rdfjs__namespace": "^2.0.2", + "@zazuko/prefixes": "^2.0.1" } }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/@tpluscode/rdf-string": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@tpluscode/rdf-string/-/rdf-string-1.1.3.tgz", + "integrity": "sha512-1jeS3jrcILQYNtjU6kYQ2wufdCgnDKrsVxcmszDh/RLRxqmrVDNnVdqErg3N2Gg5OR7n2vzC91M5XfNdPSsXAg==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@rdfjs/types": "*", + "@zazuko/env": "^2.0.3", + "@zazuko/prefixes": ">=1" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/@types/clownface": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/clownface/-/clownface-2.0.7.tgz", + "integrity": "sha512-juRApsKi3UgyjmVH9mu1W8VmVe9EBu642BAZ8jdb3tEGOv6oDk2W9JEBRmjTeWVgoGu0GL1GPzlhYt5rIPcL9A==", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "@rdfjs/types": ">=1.0.0", + "@types/rdfjs__environment": "*" } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@types/ms": "*" } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "@types/unist": "*" } }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "node_modules/@types/http-link-header": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/http-link-header/-/http-link-header-1.0.5.tgz", + "integrity": "sha512-AxhIKR8UbyoqCTNp9rRepkktHuUOw3DjfOfDCaO9kwI8AYzjhxyrvZq4+mRw/2daD3hYDknrtSeV6SsPwmc71w==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@types/node": "*" } }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/@types/i18n": { + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/@types/i18n/-/i18n-0.13.10.tgz", + "integrity": "sha512-V5uwFXEzC1BRvDSQkd5zWB7ktZa1yfLKFimlluTFrgBGeFJQNNaLk3J67Sje+c0+m2C7r1BU47cItOk/WRfJcQ==", + "dev": true }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", + "node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "optional": true }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, - "license": "MIT", + "peer": true + }, + "node_modules/@types/jsonld": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@types/jsonld/-/jsonld-1.5.13.tgz", + "integrity": "sha512-n7fUU6W4kSYK8VQlf/LsE9kddBHPKhODoVOjsZswmve+2qLwBy6naWxs/EiuSZN9NU0N06Ra01FR+j87C62T0A==" + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/lodash": "*" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/unist": "*" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/n3": { + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/@types/n3/-/n3-1.16.4.tgz", + "integrity": "sha512-6PmHRYCCdjbbBV2UVC/HjtL6/5Orx9ku2CQjuojucuHvNvPmnm6+02B18YGhHfvU25qmX2jPXyYPHsMNkn+w2w==", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@rdfjs/types": "^1.1.0", + "@types/node": "*" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/rdf-dataset-ext": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/rdf-dataset-ext/-/rdf-dataset-ext-1.0.8.tgz", + "integrity": "sha512-ngMGOzAm+yvrfTzFhlmPNa9lfWO72IkdqYRR+HNIPX3x+RPLf6qRpAi8GAZCg0rkpGt2JJqDQF3FgVxE6ykr/w==", + "peer": true, "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "@rdfjs/types": ">=1.0.0", + "@types/readable-stream": "*" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__data-model": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/rdfjs__data-model/-/rdfjs__data-model-2.0.7.tgz", + "integrity": "sha512-ysEnLulluo12hQLPulSheQIFrU3J+cV0X46NGUFO+TVsMDO4oc25KdrGD+9UnVAlUZTKJO6YYKWbDCl7V/0ADA==", + "peer": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@rdfjs/types": "^1.0.1" } }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__dataset": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/rdfjs__dataset/-/rdfjs__dataset-2.0.7.tgz", + "integrity": "sha512-+GaYIL9C7N1N0HyH+obU4IXuL7DX+fXuf827aUQ2Vx2UghO47+OTxo2v3seEQj/1YHoHBfQFk5Y4P6Q7Ht4Hqw==", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "@rdfjs/types": "*" } }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__environment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/rdfjs__environment/-/rdfjs__environment-1.0.0.tgz", + "integrity": "sha512-MDcnv3qfJvbHoEpUQXj5muT8g3e+xz1D8sGevrq3+Q4TzeEvQf5ijGX5l8485XFYrN/OBApgzXkHMZC04/kd5w==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@rdfjs/types": "*", + "@types/node": "*" } }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@types/rdfjs__formats": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rdfjs__formats/-/rdfjs__formats-4.0.1.tgz", + "integrity": "sha512-Zj7hQEn5HeCj+pJCWshY2gqBcdBdwyc2j20Ht3PH91pkdRuG2AlGDD3N9PQ1oZ3+J6Q96rAlhxUbjQUp9+s3FQ==", + "peer": true, + "dependencies": { + "@rdfjs/types": ">=1.0.0", + "@types/node": "*", + "@types/rdfjs__parser-jsonld": "*", + "@types/rdfjs__parser-n3": "*", + "@types/rdfjs__serializer-jsonld": "*", + "@types/rdfjs__serializer-jsonld-ext": "*", + "@types/rdfjs__serializer-ntriples": "*", + "@types/rdfjs__serializer-turtle": "*", + "@types/rdfjs__sink-map": "*", + "rdfxml-streaming-parser": ">=2" } }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@types/rdfjs__namespace": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/rdfjs__namespace/-/rdfjs__namespace-2.0.10.tgz", + "integrity": "sha512-xoVzEIOxcpyteEmzaj94MSBbrBFs+vqv05joMhzLEiPRwsBBDnhkdBCaaDxR1Tf7wOW0kB2R1IYe4C3vEBFPgA==", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" + "@rdfjs/types": "*" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__parser-jsonld": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@types/rdfjs__parser-jsonld/-/rdfjs__parser-jsonld-2.1.6.tgz", + "integrity": "sha512-2O8584S2yT819CjUFtTde36Wl9olAmg3s4ZWkmvtnd6xCS1MJvCfI1rWfxApP+fy+k5TXsC3gciMbnAJ00NgCw==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@rdfjs/types": ">=1.0.0", + "@types/jsonld": "*" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__parser-n3": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/rdfjs__parser-n3/-/rdfjs__parser-n3-2.0.6.tgz", + "integrity": "sha512-VHfdq7BDV6iMCtHkzTFSOuUWnqGlMUmEF0UZyK4+g9SzLWvc6TMcU5TYwQPQIz/e0s7dZ+xomxx6mVtIzsRQ/A==", "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@rdfjs/types": ">=1.0.0" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__prefix-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/rdfjs__prefix-map/-/rdfjs__prefix-map-0.1.5.tgz", + "integrity": "sha512-RAwyS/2dT9X79QwM0F8KLweTfuBoe6xtiAlU7wKPB+/t/sfk6A50LYtAWaDVP5qBjcu50UkKkZT+VR47CiLkfg==", + "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@rdfjs/types": "*" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__serializer-jsonld": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-jsonld/-/rdfjs__serializer-jsonld-2.0.5.tgz", + "integrity": "sha512-ubdLD9QgZzAt+65NSPzh2qWCPWcGYlHEWgkP6uRwfm7JC48Xh/QjzwOTG13MTomOkQqcN4R7PIG0j3Ca8iyNWQ==", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@rdfjs/types": ">=1.0.0" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__serializer-jsonld-ext": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-jsonld-ext/-/rdfjs__serializer-jsonld-ext-4.0.1.tgz", + "integrity": "sha512-jgbQ/1kV7nESKG7SY8FJED6K4OFznr6Sz3ybF1ncpBR7TUBTuy3InpZOVRK4Wjpy2zi84iIAzJ1CIIo9NZh2Xw==", + "peer": true, "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@rdfjs/types": ">=1.0.0", + "@types/jsonld": "*", + "@types/node": "*" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__serializer-ntriples": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-ntriples/-/rdfjs__serializer-ntriples-2.0.6.tgz", + "integrity": "sha512-Nn3e3eyuymLvbI5MFzI7ODD/X6ZGpbB9fLaWOB00RtFHd2vttk3wQL2fzzsZZQPJ/ihC/xlFE4cNQkO6SoHa7w==", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@rdfjs/types": ">=1.0.0" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__serializer-turtle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-turtle/-/rdfjs__serializer-turtle-1.1.0.tgz", + "integrity": "sha512-NGHnbz5985UwS/YS6WL/FkS94B+QiVTdsfvJCqPwLmY3E7UeClw91c2KbiphZUR/uh7uwLwxeKKhV2T1gYgT5Q==", + "peer": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@rdfjs/types": ">=1.0.0", + "@types/node": "*", + "@types/rdfjs__prefix-map": "*" } }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__sink-map": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/rdfjs__sink-map/-/rdfjs__sink-map-2.0.5.tgz", + "integrity": "sha512-ycUBlOMbp9YpjrBrMwGv3uiqulOWgodess06cinYLxomOTc2ET9rEQklgM5rJqnu5WMsVP8SFG3fFw36/5hADQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "@rdfjs/types": "*" } }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "node_modules/@types/rdfjs__term-map": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/rdfjs__term-map/-/rdfjs__term-map-2.0.10.tgz", + "integrity": "sha512-YlpYkya+Xq9fmcw+BMi1SCh+w2sBu7G0/qd2+ZhB4QIK3V1xq2o3EOAZnlahyQdwrW9t5+Ihw8IVVvZsJvDOTA==", + "peer": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@rdfjs/types": "*" } }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/@types/rdfjs__term-set": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/rdfjs__term-set/-/rdfjs__term-set-2.0.9.tgz", + "integrity": "sha512-RRXs5DwFGanZyT705f7KLSiN68gUVUtGWTp508CXJhLfD7AWmilqc1BLgLUoac48h3pnh9w5lRhwFm6fj1ZE5Q==", + "peer": true, + "dependencies": { + "@rdfjs/types": "*" + } }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/@types/rdfjs__traverser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/rdfjs__traverser/-/rdfjs__traverser-0.1.5.tgz", + "integrity": "sha512-tTpiM6lAddw+bGRDjhzwdpo1EQK73m8gYgMVNfO4OsevnuLZvQJeCJBckpuDC4H5HVAEwCapI0UlH9dVnZ9u5g==", + "peer": true, + "dependencies": { + "@rdfjs/types": "*" } }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@types/node": "*", + "safe-buffer": "~5.1.1" } }, - "node_modules/@jest/types": { - "version": "29.6.3", + "node_modules/@types/readable-stream/node_modules/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==" + }, + "node_modules/@types/semver": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "dev": true + }, + "node_modules/@types/sparql-http-client": { + "version": "2.2.15", + "resolved": "https://registry.npmjs.org/@types/sparql-http-client/-/sparql-http-client-2.2.15.tgz", + "integrity": "sha512-RAHFrVYYbZ/nqlf+X1rfJJOhUeJyOHU0hSz5JEG/U0iaPNNJWdU3fGuf5c7+Gq1AatibI9Exv/J/42unD5agHg==", + "dependencies": { + "@rdfjs/types": ">=1.0.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/yargs-parser": "*" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.2.tgz", + "integrity": "sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg==", "dev": true, - "license": "MIT", + "optional": true, "dependencies": { - "color-convert": "^2.0.1" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.0.2", + "@typescript-eslint/type-utils": "7.0.2", + "@typescript-eslint/utils": "7.0.2", + "@typescript-eslint/visitor-keys": "7.0.2", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=8" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@typescript-eslint/parser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.0.2.tgz", + "integrity": "sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q==", "dev": true, - "license": "MIT", + "optional": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@typescript-eslint/scope-manager": "7.0.2", + "@typescript-eslint/types": "7.0.2", + "@typescript-eslint/typescript-estree": "7.0.2", + "@typescript-eslint/visitor-keys": "7.0.2", + "debug": "^4.3.4" }, "engines": { - "node": ">=10" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.2.tgz", + "integrity": "sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g==", "dev": true, - "license": "MIT", + "optional": true, "dependencies": { - "color-name": "~1.1.4" + "@typescript-eslint/types": "7.0.2", + "@typescript-eslint/visitor-keys": "7.0.2" }, "engines": { - "node": ">=7.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/@typescript-eslint/type-utils": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.2.tgz", + "integrity": "sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ==", "dev": true, - "license": "MIT", + "optional": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.0.2", + "@typescript-eslint/utils": "7.0.2", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/@typescript-eslint/types": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.2.tgz", + "integrity": "sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA==", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, "engines": { - "node": ">=8" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.2.tgz", + "integrity": "sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw==", "dev": true, - "license": "MIT", + "optional": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@typescript-eslint/types": "7.0.2", + "@typescript-eslint/visitor-keys": "7.0.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=6.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "license": "MIT", + "node_modules/@typescript-eslint/utils": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.2.tgz", + "integrity": "sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw==", + "dev": true, + "optional": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.0.2", + "@typescript-eslint/types": "7.0.2", + "@typescript-eslint/typescript-estree": "7.0.2", + "semver": "^7.5.4" + }, "engines": { - "node": ">=6.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.2.tgz", + "integrity": "sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ==", "dev": true, - "license": "MIT", + "optional": true, + "dependencies": { + "@typescript-eslint/types": "7.0.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">=6.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "license": "MIT" + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "dev": true, - "license": "MIT", + "node_modules/@vanillawc/wc-codemirror": { + "version": "1.9.8", + "resolved": "https://registry.npmjs.org/@vanillawc/wc-codemirror/-/wc-codemirror-1.9.8.tgz", + "integrity": "sha512-tdhzg+5MsTEml0at43IAYrwfwLY5l5r56I5l9WlDOheNjMZgAD5yoYYkK3RQY1Pi6JqLpVIxBi9LEqVQggHBPQ==" + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz", + "integrity": "sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.19", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" } }, - "node_modules/@json2csv/formatters": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@json2csv/formatters/-/formatters-7.0.5.tgz", - "integrity": "sha512-ihONIB8S1ZG0ji5nDFpfCUPphVLnEKlLxDmDqRMjmPhzw8WCvyLX2trIrNHCf1t2IV8rx+1tNYaDb1dh87jHgA==" - }, - "node_modules/@json2csv/plainjs": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@json2csv/plainjs/-/plainjs-7.0.5.tgz", - "integrity": "sha512-iJsYEzgRZUhRb8LltCeuBQyexQVUbovRZFF73Lo0iIvi5SUWsfXGTtbriIROsOKgfZPtYxmkZV+FYlsnBu9ybQ==", + "node_modules/@vue/compiler-dom": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz", + "integrity": "sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==", "dependencies": { - "@json2csv/formatters": "^7.0.5", - "@streamparser/json": "^0.0.19" + "@vue/compiler-core": "3.4.19", + "@vue/shared": "3.4.19" } }, - "node_modules/@lit-labs/ssr": { - "version": "3.2.0", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-client": "^1.1.4", - "@lit-labs/ssr-dom-shim": "^1.1.2", - "@lit/reactive-element": "^1.6.1 || ^2.0.0", - "@parse5/tools": "^0.3.0", - "@types/node": "^16.0.0", - "enhanced-resolve": "^5.10.0", - "lit": "^3.1.0", - "lit-element": "^3.3.0 || ^4.0.0", - "lit-html": "^3.1.0", - "node-fetch": "^3.2.8", - "parse5": "^7.1.1" - }, - "engines": { - "node": ">=13.9.0" + "node_modules/@vue/compiler-sfc": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz", + "integrity": "sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==", + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.19", + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.6", + "postcss": "^8.4.33", + "source-map-js": "^1.0.2" } }, - "node_modules/@lit-labs/ssr-client": { - "version": "1.1.5", - "license": "BSD-3-Clause", + "node_modules/@vue/compiler-ssr": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz", + "integrity": "sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==", "dependencies": { - "@lit/reactive-element": "^1.6.1 || ^2.0.0", - "lit": "^2.7.0 || ^3.0.0", - "lit-html": "^2.7.0 || ^3.0.0" + "@vue/compiler-dom": "3.4.19", + "@vue/shared": "3.4.19" } }, - "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.1.2", - "license": "BSD-3-Clause" - }, - "node_modules/@lit-labs/ssr/node_modules/@types/node": { - "version": "16.18.68", - "license": "MIT" + "node_modules/@vue/devtools-api": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz", + "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==" }, - "node_modules/@lit/reactive-element": { - "version": "2.0.2", - "license": "BSD-3-Clause", + "node_modules/@vue/reactivity": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.19.tgz", + "integrity": "sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.2" + "@vue/shared": "3.4.19" } }, - "node_modules/@manypkg/find-root": { - "version": "1.1.0", - "dev": true, - "license": "MIT", + "node_modules/@vue/runtime-core": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.19.tgz", + "integrity": "sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==", "dependencies": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" + "@vue/reactivity": "3.4.19", + "@vue/shared": "3.4.19" } }, - "node_modules/@manypkg/find-root/node_modules/@types/node": { - "version": "12.20.55", - "dev": true, - "license": "MIT" - }, - "node_modules/@manypkg/find-root/node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", + "node_modules/@vue/runtime-dom": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz", + "integrity": "sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "@vue/runtime-core": "3.4.19", + "@vue/shared": "3.4.19", + "csstype": "^3.1.3" } }, - "node_modules/@manypkg/get-packages": { - "version": "1.1.3", - "dev": true, - "license": "MIT", + "node_modules/@vue/server-renderer": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.19.tgz", + "integrity": "sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==", "dependencies": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" + "@vue/compiler-ssr": "3.4.19", + "@vue/shared": "3.4.19" + }, + "peerDependencies": { + "vue": "3.4.19" } }, - "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { - "version": "4.1.0", - "dev": true, - "license": "MIT" + "node_modules/@vue/shared": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.19.tgz", + "integrity": "sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==" }, - "node_modules/@manypkg/get-packages/node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", + "node_modules/@zazuko/env": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@zazuko/env/-/env-2.0.6.tgz", + "integrity": "sha512-xwNT/zQE7TEIQvTcwvxQefILi5Wr/mggHfTLx04EjNphNi23/ObSK7o8Pr4gQkSRzBFw7UkinhIGIq1f/SjQ9Q==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/dataset": "^2.0.1", + "@rdfjs/formats": "^4.0.0", + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-map": "^2.0.0", + "@rdfjs/term-set": "^2.0.1", + "@rdfjs/traverser": "^0.1.2", + "@tpluscode/rdf-ns-builders": "^4.1.0", + "@zazuko/env-core": "^1.0.0", + "@zazuko/prefixes": "^2.1.0", + "clownface": "^2.0.2", + "get-stream": "^8.0.1", + "rdf-dataset-ext": "^1.1.0" }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@messageformat/core": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "@messageformat/date-skeleton": "^1.0.0", - "@messageformat/number-skeleton": "^1.0.0", - "@messageformat/parser": "^5.1.0", - "@messageformat/runtime": "^3.0.1", - "make-plural": "^7.0.0", - "safe-identifier": "^0.4.1" + "peerDependencies": { + "@rdfjs/types": "^1.1.0", + "@types/clownface": "^2.0.0", + "@types/rdf-dataset-ext": "^1", + "@types/rdfjs__data-model": "^2.0.7", + "@types/rdfjs__dataset": "^2.0.7", + "@types/rdfjs__environment": "^1.0.0", + "@types/rdfjs__formats": "^4.0.0", + "@types/rdfjs__namespace": "^2.0.10", + "@types/rdfjs__term-map": "^2.0.9", + "@types/rdfjs__term-set": "^2.0.8", + "@types/rdfjs__traverser": "^0.1.3" } }, - "node_modules/@messageformat/date-skeleton": { + "node_modules/@zazuko/env-core": { "version": "1.0.1", - "license": "MIT" - }, - "node_modules/@messageformat/number-skeleton": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/@messageformat/parser": { - "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@zazuko/env-core/-/env-core-1.0.1.tgz", + "integrity": "sha512-Q0O8UGdKx3BXkBB7IR8NN2h9k3kka47FMKEtMQQFLuRJXOjK3YFvcnuekjk3zKad0cy6XeXWQelHdiM5H+VT2g==", "dependencies": { - "moo": "^0.5.1" + "@rdfjs/environment": "^1.0.0" } }, - "node_modules/@messageformat/runtime": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "make-plural": "^7.0.0" + "node_modules/@zazuko/env/node_modules/@rdfjs/dataset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-2.0.2.tgz", + "integrity": "sha512-6YJx+5n5Uxzq9dd9I0GGcIo6eopZOPfcsAfxSGX5d+YBzDgVa1cbtEBFnaPyPKiQsOm4+Cr3nwypjpg02YKPlA==", + "bin": { + "rdfjs-dataset-test": "bin/test.js" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "license": "MIT", + "node_modules/@zazuko/formats-lazy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@zazuko/formats-lazy/-/formats-lazy-1.0.1.tgz", + "integrity": "sha512-uAfYpFCCvwTzyylwqoeWwQ5e/JsSGbAPCztZZ62XedLaHyxA8Sqaf7Ml7mZBIT+3PLz2vJ921MKYP3a61Lkw4g==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "license": "MIT", - "engines": { - "node": ">= 8" + "@rdfjs/parser-jsonld": "^2.0.0", + "@rdfjs/parser-n3": "^2.0.0", + "@rdfjs/serializer-jsonld": "^2.0.0", + "@rdfjs/serializer-ntriples": "^2.0.0", + "@rdfjs/sink-map": "^2.0.0", + "@types/rdfjs__parser-jsonld": "^2.0.0", + "@types/rdfjs__parser-n3": "^2.0.0", + "@types/rdfjs__serializer-jsonld": "^2.0.0", + "@types/rdfjs__serializer-ntriples": "^2.0.0", + "@types/rdfjs__sink-map": "^2.0.0", + "onetime": "^6.0.0", + "rdfxml-streaming-parser": "^2.2.0", + "readable-stream": "^4" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", + "node_modules/@zazuko/node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@zazuko/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-mrEqq7BJyNBlK5oT7U1S0EfLbFPpVHLXQJswhrN8Mv/3BKmWIBtMBaphK8AXF7XEhgK9vzRs/f3AIG8oHlPdpg==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": "4.x || >=6.0.0" } }, - "node_modules/@oozcitak/dom": { - "version": "1.15.10", - "license": "MIT", + "node_modules/@zazuko/prefixes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@zazuko/prefixes/-/prefixes-2.2.0.tgz", + "integrity": "sha512-mmRS+urGVMcAP5edzFq0V+B2PbbpEklP7BZGVF0+82ClczTwgpIL1tZy2mRfudwRYoAe+WkyWXDnlArPpdzLIg==" + }, + "node_modules/@zazuko/rdf-entity-webcomponent": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@zazuko/rdf-entity-webcomponent/-/rdf-entity-webcomponent-0.7.7.tgz", + "integrity": "sha512-n5v5+pwRBB/ddQwlajGR5tkR0FN/YKtl8sQ8Gnd0LG3mUwMxROSC2G6R+BWwlvwmF5RDx4r0R1yuQ2p8l32utQ==", "dependencies": { - "@oozcitak/infra": "1.0.8", - "@oozcitak/url": "1.0.4", - "@oozcitak/util": "8.3.8" - }, - "engines": { - "node": ">=8.0" + "@rdfjs/dataset": "^2.0.1", + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-map": "^2.0.0", + "@rdfjs/term-set": "^2.0.1", + "@tpluscode/rdf-ns-builders": "^4.1.0", + "clownface": "^2.0.0", + "lit": "^2.8.0", + "n3": "^1.17.1" } }, - "node_modules/@oozcitak/infra": { - "version": "1.0.8", - "license": "MIT", + "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", "dependencies": { - "@oozcitak/util": "8.3.8" - }, - "engines": { - "node": ">=6.0" + "@lit-labs/ssr-dom-shim": "^1.0.0" } }, - "node_modules/@oozcitak/url": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "@oozcitak/infra": "1.0.8", - "@oozcitak/util": "8.3.8" - }, - "engines": { - "node": ">=8.0" + "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/@rdfjs/dataset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-2.0.2.tgz", + "integrity": "sha512-6YJx+5n5Uxzq9dd9I0GGcIo6eopZOPfcsAfxSGX5d+YBzDgVa1cbtEBFnaPyPKiQsOm4+Cr3nwypjpg02YKPlA==", + "bin": { + "rdfjs-dataset-test": "bin/test.js" } }, - "node_modules/@oozcitak/util": { - "version": "8.3.8", - "license": "MIT", - "engines": { - "node": ">=8.0" + "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" } }, - "node_modules/@openlayers-elements/bundle": { - "version": "0.1.0" + "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } }, - "node_modules/@parse5/tools": { - "version": "0.3.0", - "license": "MIT", + "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", "dependencies": { - "parse5": "^7.0.0" + "@types/trusted-types": "^2.0.2" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" + "node_modules/@zazuko/rdf-vocabularies": { + "version": "2023.1.19", + "resolved": "https://registry.npmjs.org/@zazuko/rdf-vocabularies/-/rdf-vocabularies-2023.1.19.tgz", + "integrity": "sha512-/vC/Ok8etIi4kflbOAoRr9JV95auJaUREV9lrWP3wDEMfhu8jVYogwi/OD1yA2pH6KIYPS2+z7LN1jxOe3G56g==", + "dependencies": { + "@rdfjs/parser-n3": "^1.1.4", + "commander": "^5.0.0", + "pkg-dir": "^5.0.0", + "rdf-ext": "^1.3.5", + "readable-stream": "^3.6.0", + "string-to-stream": "^3.0.1" + }, + "bin": { + "rdf-vocab": "bin/vocab.js" } }, - "node_modules/@rdf-esm/data-model": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@rdf-esm/data-model/-/data-model-0.5.4.tgz", - "integrity": "sha512-EINrtebCO6aT9e8vLmkaFFs317sCRj9cdFlKexvZA+7bLwcKrmcQLwC+nnnyBurtypHzWlokbLvp1SZHQWiH3w==", + "node_modules/@zazuko/rdf-vocabularies/node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", + "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", "dependencies": { - "@rdfjs/data-model": "^1.2" + "@rdfjs/types": ">=1.0.1" }, "bin": { "rdfjs-data-model-test": "bin/test.js" - }, - "engines": { - "node": ">=12" } }, - "node_modules/@rdf-esm/namespace": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@rdf-esm/namespace/-/namespace-0.5.5.tgz", - "integrity": "sha512-JF26H4Mx+N93qIOu3KMsjdUW6As+dhvq9wP2Q03fjiS4l1rG+gKwfKUop8CHtVETVeDcNsO3+Srrq0wiQgAPDw==", + "node_modules/@zazuko/rdf-vocabularies/node_modules/@rdfjs/parser-n3": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rdfjs/parser-n3/-/parser-n3-1.1.4.tgz", + "integrity": "sha512-PUKSNlfD2Zq3GcQZuOF2ndfrLbc+N96FUe2gNIzARlR2er0BcOHBHEFUJvVGg1Xmsg3hVKwfg0nwn1JZ7qKKMw==", "dependencies": { - "@rdf-esm/data-model": "^0.5.1", - "@rdfjs/namespace": "^1.1.0", - "@types/rdfjs__namespace": "*" - }, + "@rdfjs/data-model": "^1.0.1", + "@rdfjs/sink": "^1.0.2", + "n3": "^1.3.5", + "readable-stream": "^3.6.0", + "readable-to-readable": "^0.1.0" + } + }, + "node_modules/@zazuko/rdf-vocabularies/node_modules/@rdfjs/sink": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rdfjs/sink/-/sink-1.0.3.tgz", + "integrity": "sha512-2KfYa8mAnptRNeogxhQqkWNXqfYVWO04jQThtXKepySrIwYmz83+WlevQtA4VDLFe+kFd2TwgL29ekPe5XVUfA==", "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/@rdf-esm/namespace/node_modules/@rdfjs/namespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-1.1.0.tgz", - "integrity": "sha512-utO5rtaOKxk8B90qzaQ0N+J5WrCI28DtfAY/zExCmXE7cOfC5uRI/oMKbLaVEPj2P7uArekt/T4IPATtj7Tjug==", - "dependencies": { - "@rdfjs/data-model": "^1.1.0" - }, + "node_modules/@zazuko/rdf-vocabularies/node_modules/@rdfjs/to-ntriples": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-1.0.2.tgz", + "integrity": "sha512-ngw5XAaGHjgGiwWWBPGlfdCclHftonmbje5lMys4G2j4NvfExraPIuRZgjSnd5lg4dnulRVUll8tRbgKO+7EDA==", "engines": { "node": ">=6" } }, - "node_modules/@rdf-esm/term-map": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@rdf-esm/term-map/-/term-map-0.5.1.tgz", - "integrity": "sha512-Yq/5hBFt90q/eru2i9NVBxAayaGI/oWTPH1+6VoFueiaKSVl4Pf4lMX98/Hg/si5Ql0gG4B4wqBbFItl4LDI0A==", - "dependencies": { - "@rdf-esm/to-ntriples": "^0.6.0", - "@rdfjs/term-map": "^1.0.0" - }, + "node_modules/@zazuko/rdf-vocabularies/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/@rdf-esm/term-map/node_modules/@rdfjs/term-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rdfjs/term-map/-/term-map-1.1.0.tgz", - "integrity": "sha512-utCLVQEZdEL664XoYuBQwMIk0Q5MD6qNPEt12DcmuAlQUS0b0kQ+WL50wyJP1BpWYjOJLokIVTUtphZWnj25BQ==", + "node_modules/@zazuko/rdf-vocabularies/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "@rdfjs/to-ntriples": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rdf-esm/to-ntriples": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@rdf-esm/to-ntriples/-/to-ntriples-0.6.0.tgz", - "integrity": "sha512-984lPZhKmFuLuJ74Q8SqtwzDDS43V98QXjpvu6jmlXEF2xQHwItmQk0AZ9Cyf26f3EiTVfLn3JHGWwkB0AK8IQ==", - "deprecated": "Use @rdfjs/to-ntriples", + "node_modules/@zazuko/rdf-vocabularies/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "@rdfjs/to-ntriples": "^2.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rdfjs-elements/editor-base": { - "version": "0.5.0", - "license": "MIT", + "node_modules/@zazuko/rdf-vocabularies/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "@tpluscode/rdf-ns-builders": ">=3.0.2", - "@vanillawc/wc-codemirror": "^1.9.7", - "codemirror": "^5.61.1", - "lit": "^2", - "throttle-debounce": "^3.0.1" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rdfjs-elements/editor-base/node_modules/@lit/reactive-element": { - "version": "1.6.3", - "license": "BSD-3-Clause", + "node_modules/@zazuko/rdf-vocabularies/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rdfjs-elements/editor-base/node_modules/lit": { - "version": "2.8.0", - "license": "BSD-3-Clause", + "node_modules/@zazuko/rdf-vocabularies/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@rdfjs-elements/editor-base/node_modules/lit-element": { - "version": "3.3.3", - "license": "BSD-3-Clause", + "node_modules/@zazuko/rdf-vocabularies/node_modules/rdf-ext": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/rdf-ext/-/rdf-ext-1.3.5.tgz", + "integrity": "sha512-LS/waItwp5aGY9Ay7y147HxWLIaSvw4r172S995aGwVkvg0KwUA0NY8w61p/LoFdQ4V6mzxQdVoRN6x/6OaK0w==", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" + "@rdfjs/data-model": "^1.3.3", + "@rdfjs/dataset": "^1.1.1", + "@rdfjs/to-ntriples": "^1.0.1", + "rdf-normalize": "^1.0.0", + "readable-stream": "^3.6.0" } }, - "node_modules/@rdfjs-elements/editor-base/node_modules/lit-html": { - "version": "2.8.0", - "license": "BSD-3-Clause", + "node_modules/@zazuko/rdf-vocabularies/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { - "@types/trusted-types": "^2.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@rdfjs-elements/formats-pretty": { - "version": "0.6.4", - "license": "MIT", + "node_modules/@zazuko/spex": { + "version": "0.1.20", + "resolved": "https://registry.npmjs.org/@zazuko/spex/-/spex-0.1.20.tgz", + "integrity": "sha512-KCFzhZbhzkrZtCKD25tHmskE7ilo5a1L/M0u6Jx+ZPNykli+3oTpb7nwrZDOQ77U/TbMVBFrkcHtHuCAj7auow==", "dependencies": { - "@graphy/content.nq.read": "^4.3.4", - "@graphy/content.trig.read": "^4.3.4", - "@graphy/content.trig.write": "^4.3.4", - "@graphy/content.ttl.write": "^4.3.4", - "@graphy/content.xml.scribe": "^4.3.4", - "@graphy/core.data.factory": "^4.3.4", - "@rdfjs/environment": "^0.1.2", - "@rdfjs/serializer-jsonld-ext": "^4.0.0", - "@rdfjs/term-map": "^2.0.0", - "@tpluscode/rdf-ns-builders": ">=3.0.2", - "@zazuko/formats-lazy": "^1.0.1", - "@zazuko/prefixes": "^2.0.0", - "readable-stream": ">=3.6.0" + "@headlessui/vue": "^1.7.12", + "@heroicons/vue": "^2.0.16", + "@rdfjs-elements/rdf-editor": "^0.5.4", + "@zazuko/rdf-vocabularies": "^2023.1.19", + "@zazuko/vue-graph-layout": "^0.1.4", + "buffer": "^6.0.3", + "bulma": "^0.9.4", + "core-js": "^3.29.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "n3": "^1.16.2", + "process": "^0.11.10", + "rdf-ext": "^2.2.0", + "register-service-worker": "^1.7.2", + "sparql-http-client": "^2.4.2", + "splitpanes": "^3.1.5", + "stream-browserify": "^3.0.0", + "vue": "^3.2.47", + "vue-router": "^4.1.6" } }, - "node_modules/@rdfjs-elements/formats-pretty/node_modules/@digitalbazaar/http-client": { - "version": "3.4.1", - "license": "BSD-3-Clause", + "node_modules/@zazuko/trifid-entity-renderer": { + "resolved": "packages/entity-renderer", + "link": true + }, + "node_modules/@zazuko/trifid-handle-redirects": { + "resolved": "packages/deprecated-redirects", + "link": true + }, + "node_modules/@zazuko/trifid-markdown-content": { + "resolved": "packages/markdown-content", + "link": true + }, + "node_modules/@zazuko/trifid-plugin-ckan": { + "resolved": "packages/ckan", + "link": true + }, + "node_modules/@zazuko/trifid-plugin-iiif": { + "resolved": "packages/iiif", + "link": true + }, + "node_modules/@zazuko/trifid-plugin-sparql-proxy": { + "resolved": "packages/sparql-proxy", + "link": true + }, + "node_modules/@zazuko/vue-graph-layout": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@zazuko/vue-graph-layout/-/vue-graph-layout-0.1.4.tgz", + "integrity": "sha512-7ajt/EmjT7ZvJVe6zEk4FLMH0F3umjYNJKguTD0tjRRHHq5IR7Kx/oy3uweWjQrzaj5QzU4a1ziOK0Xuc9Q8rA==", "dependencies": { - "ky": "^0.33.3", - "ky-universal": "^0.11.0", - "undici": "^5.21.2" + "d3": "^7.8.2", + "dagre": "^0.8.5" + }, + "peerDependencies": { + "vue": "3.x" + } + }, + "node_modules/@zazuko/yasgui": { + "version": "4.2.34", + "resolved": "https://registry.npmjs.org/@zazuko/yasgui/-/yasgui-4.2.34.tgz", + "integrity": "sha512-MdbsdMtCQe9JzpDKAsmnAqCYIBg6ptV1TnqEtcWsBr8hrWWhP9RnE1ubxSZ2doQC+yvht8kCnsfqgLODHsDBnQ==", + "dependencies": { + "@tarekraafat/autocomplete.js": "^7.2.0", + "@types/lodash-es": "^4.17.3", + "@zazuko/yasgui-utils": "^4.2.34", + "@zazuko/yasqe": "^4.2.34", + "@zazuko/yasr": "^4.2.34", + "autosuggest-highlight": "^3.1.1", + "blueimp-md5": "^2.12.0", + "choices.js": "^9.0.1", + "dompurify": "^2.0.7", + "es6-object-assign": "^1.1.0", + "jsuri": "^1.3.1", + "lodash-es": "^4.17.15", + "sortablejs": "^1.10.2", + "superagent": "^8.1.2" }, "engines": { - "node": ">=14.0" + "node": ">= 8" } }, - "node_modules/@rdfjs-elements/formats-pretty/node_modules/@rdfjs/serializer-jsonld-ext": { - "version": "4.0.0", - "license": "MIT", + "node_modules/@zazuko/yasgui-utils": { + "version": "4.2.34", + "resolved": "https://registry.npmjs.org/@zazuko/yasgui-utils/-/yasgui-utils-4.2.34.tgz", + "integrity": "sha512-UJEPmx8DiEfqFvmCajDHWL6GcjaivIfPP26eqHIXx8brQ5zJnqImsNXfW3nMQCMKUO/3nENFP+d9I6/JK/b68w==", "dependencies": { - "@rdfjs/sink": "^2.0.0", - "jsonld": "^8.1.0", - "readable-stream": "^4.3.0", - "stream-chunks": "^1.0.0" + "@types/node": "^20.10.3", + "dompurify": "^2.0.7", + "store": "^2.0.12" } }, - "node_modules/@rdfjs-elements/formats-pretty/node_modules/jsonld": { - "version": "8.3.2", - "license": "BSD-3-Clause", + "node_modules/@zazuko/yasgui-utils/node_modules/@types/node": { + "version": "20.11.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", + "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" - }, - "engines": { - "node": ">=14" + "undici-types": "~5.26.4" } }, - "node_modules/@rdfjs-elements/formats-pretty/node_modules/ky": { - "version": "0.33.3", - "license": "MIT", + "node_modules/@zazuko/yasqe": { + "version": "4.2.34", + "resolved": "https://registry.npmjs.org/@zazuko/yasqe/-/yasqe-4.2.34.tgz", + "integrity": "sha512-yEtIfCJUY9DcvC/z3JMHwL2dlGKCQgDfbSvtZDRqtE4UU+Vr++qiQVOnoXD3cO62pi5zWpXxrg5IKHZb7bzFmg==", + "dependencies": { + "@types/lodash-es": "^4.17.3", + "@zazuko/yasgui-utils": "^4.2.34", + "codemirror": "^5.51.0", + "lodash-es": "^4.17.15", + "query-string": "^6.10.1", + "superagent": "^8.1.2" + }, "engines": { - "node": ">=14.16" + "node": ">= 8" }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "peerDependencies": { + "@zazuko/yasgui": "4.x" } }, - "node_modules/@rdfjs-elements/formats-pretty/node_modules/ky-universal": { - "version": "0.11.0", - "license": "MIT", + "node_modules/@zazuko/yasr": { + "version": "4.2.34", + "resolved": "https://registry.npmjs.org/@zazuko/yasr/-/yasr-4.2.34.tgz", + "integrity": "sha512-b3U1u/Yuv2+6OZQWDefIO3zr8A48fkgepjN3HRwNZ9XFF6g8wJA8RYPi15Lpo09SGVgcEGrC5wUWkSTgqCNp0Q==", "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "^3.2.10" + "@fortawesome/free-solid-svg-icons": "^5.14.0", + "@json2csv/plainjs": "^7.0.4", + "@types/lodash-es": "^4.17.3", + "@zazuko/yasgui-utils": "^4.2.34", + "@zazuko/yasqe": "^4.2.34", + "codemirror": "^5.51.0", + "colors": "^1.4.0", + "column-resizer": "^1.3.4", + "datatables.net": "^1.10.24", + "datatables.net-dt": "^1.10.24", + "dompurify": "^2.0.7", + "jquery": "^3.5.0", + "lodash-es": "^4.17.15", + "n3": "^1.3.5", + "papaparse": "^5.3.1" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + "node": ">= 8" }, "peerDependencies": { - "ky": ">=0.31.4", - "web-streams-polyfill": ">=3.2.1" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } + "@zazuko/yasgui": "4.x" } }, - "node_modules/@rdfjs-elements/formats-pretty/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/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==", "dependencies": { - "yallist": "^4.0.0" + "event-target-shim": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=6.5" } }, - "node_modules/@rdfjs-elements/formats-pretty/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/absolute-url": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/absolute-url/-/absolute-url-1.2.2.tgz", + "integrity": "sha512-UNdqiGkXTuLQYY6kdaOg+zzspLOvXvLhnUDP0IEyEl10QklL0Bvyktzlt74+6rZ6SkKMPr3fMp/5Z32pI4rmOw==" }, - "node_modules/@rdfjs-elements/rdf-editor": { - "version": "0.5.5", - "license": "MIT", + "node_modules/abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { - "@rdfjs-elements/editor-base": "^0.5.0", - "@rdfjs-elements/formats-pretty": "^0.6.0", - "@rdfjs/environment": "^0.1.2", - "@tpluscode/rdf-ns-builders": ">=3.0.2", - "readable-stream": "^3", - "string-to-stream": "^3.0.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@rdfjs-elements/rdf-editor/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/@rdfjs/data-model": { - "version": "1.3.4", - "license": "MIT", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, "dependencies": { - "@rdfjs/types": ">=1.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "bin": { - "rdfjs-data-model-test": "bin/test.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@rdfjs/dataset": { - "version": "1.1.1", - "license": "MIT", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dependencies": { - "@rdfjs/data-model": "^1.2.0" + "ajv": "^8.0.0" }, - "bin": { - "rdfjs-dataset-test": "bin/test.js" + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/@rdfjs/environment": { - "version": "0.1.2", - "license": "MIT", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/dataset": "^2.0.1", - "@rdfjs/fetch-lite": "^3.2.1", - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/sink-map": "^2.0.0", - "@rdfjs/term-map": "^2.0.0", - "@rdfjs/term-set": "^2.0.1" + "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/@rdfjs/environment/node_modules/@rdfjs/data-model": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } + "node_modules/ajv-formats/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/@rdfjs/environment/node_modules/@rdfjs/dataset": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-dataset-test": "bin/test.js" + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" } }, - "node_modules/@rdfjs/express-handler": { - "version": "1.2.2", - "license": "MIT", + "node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dev": true, "dependencies": { - "@rdfjs/dataset": "^1.0.1", - "@rdfjs/formats-common": "^2.0.0", - "absolute-url": "^1.2.2", - "http-errors": "^1.7.2", - "isstream": "^0.1.2", - "once": "^1.4.0", - "rdf-dataset-ext": "^1.0.0", - "rdf-transform-triple-to-quad": "^1.0.2", - "readable-stream": "^3.6.0" + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rdfjs/express-handler/node_modules/@rdfjs/formats-common": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "@rdfjs/parser-jsonld": "^1.2.1", - "@rdfjs/parser-n3": "^1.1.4", - "@rdfjs/serializer-jsonld": "^1.2.3", - "@rdfjs/serializer-ntriples": "^1.0.3", - "@rdfjs/sink-map": "^1.0.0", - "rdfxml-streaming-parser": "^1.4.0" + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rdfjs/express-handler/node_modules/@rdfjs/namespace": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^1.1.0" - }, + "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": ">=6" + "node": ">=8" } }, - "node_modules/@rdfjs/express-handler/node_modules/@rdfjs/parser-jsonld": { - "version": "1.3.1", - "license": "MIT", + "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==", + "dev": true, "dependencies": { - "@rdfjs/data-model": "^1.3.4", - "@rdfjs/sink": "^1.0.3", - "jsonld-streaming-parser": "^2.4.3", - "readable-stream": "^3.6.0" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@rdfjs/express-handler/node_modules/@rdfjs/parser-n3": { - "version": "1.1.4", - "license": "MIT", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { - "@rdfjs/data-model": "^1.0.1", - "@rdfjs/sink": "^1.0.2", - "n3": "^1.3.5", - "readable-stream": "^3.6.0", - "readable-to-readable": "^0.1.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@rdfjs/express-handler/node_modules/@rdfjs/serializer-jsonld": { - "version": "1.2.3", - "license": "MIT", + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, "dependencies": { - "@rdfjs/namespace": "^1.1.0", - "@rdfjs/sink": "^1.0.3", - "readable-stream": "^3.6.0" + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@rdfjs/express-handler/node_modules/@rdfjs/serializer-ntriples": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "@rdfjs/sink": "^1.0.3", - "@rdfjs/to-ntriples": "^1.0.2", - "readable-to-readable": "^0.1.0" - } + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" }, - "node_modules/@rdfjs/express-handler/node_modules/@rdfjs/sink": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=6" + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@rdfjs/express-handler/node_modules/@rdfjs/sink-map": { + "node_modules/array-buffer-byte-length": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@rdfjs/express-handler/node_modules/@rdfjs/to-ntriples": { - "version": "1.0.2", - "license": "MIT", + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@rdfjs/express-handler/node_modules/depd": { - "version": "1.1.2", - "license": "MIT", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/@rdfjs/express-handler/node_modules/http-errors": { - "version": "1.8.1", - "license": "MIT", + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "dev": true, + "peer": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@rdfjs/express-handler/node_modules/jsonld-streaming-parser": { - "version": "2.4.3", - "license": "MIT", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", + "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "dev": true, + "peer": true, "dependencies": { - "@rdfjs/types": "*", - "@types/http-link-header": "^1.0.1", - "canonicalize": "^1.0.1", - "http-link-header": "^1.0.2", - "jsonld-context-parser": "^2.1.3", - "jsonparse": "^1.3.1", - "rdf-data-factory": "^1.1.0" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@rdfjs/express-handler/node_modules/rdfxml-streaming-parser": { - "version": "1.5.0", - "license": "MIT", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, "dependencies": { - "@rdfjs/types": "*", - "rdf-data-factory": "^1.1.0", - "relative-to-absolute-iri": "^1.0.0", - "sax": "^1.2.4" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@rdfjs/express-handler/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@rdfjs/express-handler/node_modules/statuses": { - "version": "1.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@rdfjs/fetch": { - "version": "3.1.1", - "license": "MIT", + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "peer": true, "dependencies": { - "@rdfjs/dataset": "^2.0.1", - "@rdfjs/fetch-lite": "^3.2.1", - "@rdfjs/formats-common": "^3.1.0" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" } }, - "node_modules/@rdfjs/fetch-lite": { - "version": "3.2.2", - "license": "MIT", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, "dependencies": { - "is-stream": "^3.0.0", - "nodeify-fetch": "^3.1.0", - "readable-stream": "^4.4.2" - } - }, - "node_modules/@rdfjs/fetch-lite/node_modules/is-stream": { - "version": "3.0.0", - "license": "MIT", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@rdfjs/fetch/node_modules/@rdfjs/dataset": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-dataset-test": "bin/test.js" + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@rdfjs/formats": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@rdfjs/parser-jsonld": "^2.1.0", - "@rdfjs/parser-n3": "^2.0.1", - "@rdfjs/serializer-jsonld": "^2.0.0", - "@rdfjs/serializer-jsonld-ext": "^4.0.0", - "@rdfjs/serializer-ntriples": "^2.0.0", - "@rdfjs/serializer-turtle": "^1.1.1", - "@rdfjs/sink-map": "^2.0.0", - "rdfxml-streaming-parser": "^2.3.0" + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" } }, - "node_modules/@rdfjs/formats-common": { - "version": "3.1.0", - "license": "MIT", + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "peer": true, "dependencies": { - "@rdfjs/parser-jsonld": "^2.0.0", - "@rdfjs/parser-n3": "^2.0.0", - "@rdfjs/serializer-jsonld": "^2.0.0", - "@rdfjs/serializer-ntriples": "^2.0.0", - "@rdfjs/sink-map": "^2.0.0", - "rdfxml-streaming-parser": "^2.2.0" + "has-symbols": "^1.0.3" } }, - "node_modules/@rdfjs/formats/node_modules/@digitalbazaar/http-client": { - "version": "3.4.1", - "license": "BSD-3-Clause", - "dependencies": { - "ky": "^0.33.3", - "ky-universal": "^0.11.0", - "undici": "^5.21.2" - }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "engines": { - "node": ">=14.0" + "node": ">=8.0.0" } }, - "node_modules/@rdfjs/formats/node_modules/@rdfjs/serializer-jsonld-ext": { - "version": "4.0.0", - "license": "MIT", + "node_modules/autosuggest-highlight": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/autosuggest-highlight/-/autosuggest-highlight-3.3.4.tgz", + "integrity": "sha512-j6RETBD2xYnrVcoV1S5R4t3WxOlWZKyDQjkwnggDPSjF5L4jV98ZltBpvPvbkM1HtoSe5o+bNrTHyjPbieGeYA==", "dependencies": { - "@rdfjs/sink": "^2.0.0", - "jsonld": "^8.1.0", - "readable-stream": "^4.3.0", - "stream-chunks": "^1.0.0" + "remove-accents": "^0.4.2" } }, - "node_modules/@rdfjs/formats/node_modules/jsonld": { - "version": "8.3.2", - "license": "BSD-3-Clause", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=14" - } - }, - "node_modules/@rdfjs/formats/node_modules/ky": { - "version": "0.33.3", - "license": "MIT", - "engines": { - "node": ">=14.16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@rdfjs/formats/node_modules/ky-universal": { - "version": "0.11.0", - "license": "MIT", + "node_modules/avvio": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz", + "integrity": "sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==", "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "^3.2.10" - }, - "engines": { - "node": ">=14.16" - }, + "@fastify/error": "^3.3.0", + "archy": "^1.0.0", + "debug": "^4.0.0", + "fastq": "^1.17.1" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.31.4", - "web-streams-polyfill": ">=3.2.1" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/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/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/@rdfjs/formats/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "is-windows": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/@rdfjs/formats/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@rdfjs/io": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "duplex-to": "^2.0.0", - "readable-stream": "^4.4.2", - "stream-chunks": "^1.0.0" + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "engines": { + "node": ">=0.6" } }, - "node_modules/@rdfjs/namespace": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2.0.0" + "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==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/@rdfjs/namespace/node_modules/@rdfjs/data-model": { + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==" + }, + "node_modules/brace-expansion": { "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-data-model-test": "bin/test.js" + "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/@rdfjs/normalize": { - "version": "2.0.0", - "license": "MIT", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { - "rdf-canonize": "^3.0.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">= 14.0.0" + "node": ">=8" } }, - "node_modules/@rdfjs/parser-jsonld": { - "version": "2.1.0", - "license": "MIT", + "node_modules/breakword": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/breakword/-/breakword-1.0.6.tgz", + "integrity": "sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==", + "dev": true, "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/sink": "^2.0.0", - "duplex-to": "^2.0.0", - "jsonld-streaming-parser": "^3.0.0", - "readable-stream": "^4.2.0" - } - }, - "node_modules/@rdfjs/parser-jsonld/node_modules/@rdfjs/data-model": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-data-model-test": "bin/test.js" + "wcwidth": "^1.0.1" } }, - "node_modules/@rdfjs/parser-n3": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/sink": "^2.0.0", - "duplex-to": "^2.0.0", - "n3": "^1.16.2", - "readable-stream": "^4.2.0" - } + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, - "node_modules/@rdfjs/parser-n3/node_modules/@rdfjs/data-model": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } - }, - "node_modules/@rdfjs/prefix-map": { - "version": "0.1.1", - "license": "MIT", - "dependencies": { - "readable-stream": "^4.3.0" - } - }, - "node_modules/@rdfjs/score": { - "version": "0.1.1", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/term-map": "^2.0.0", - "@rdfjs/term-set": "^2.0.1", - "@rdfjs/to-ntriples": "^2.0.0" - } - }, - "node_modules/@rdfjs/score/node_modules/@rdfjs/data-model": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } - }, - "node_modules/@rdfjs/serializer-jsonld": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "@rdfjs/sink": "^2.0.0", - "readable-stream": "^4.2.0" - } - }, - "node_modules/@rdfjs/serializer-jsonld-ext": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "@rdfjs/sink": "^1.0.3", - "concat-stream": "^2.0.0", - "jsonld": "^5.2.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/@rdfjs/serializer-jsonld-ext/node_modules/@rdfjs/sink": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@rdfjs/serializer-jsonld-ext/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@rdfjs/serializer-ntriples": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "@rdfjs/to-ntriples": "^2.0.0", - "duplex-to": "^2.0.0", - "readable-stream": "^4.2.0" - } - }, - "node_modules/@rdfjs/serializer-turtle": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/prefix-map": "^0.1.1", - "@rdfjs/sink": "^2.0.0", - "@rdfjs/term-map": "^2.0.0", - "@rdfjs/to-ntriples": "^2.0.0", - "@rdfjs/tree": "^0.2.0", - "readable-stream": "^4.3.0", - "stream-chunks": "^1.0.0" - } - }, - "node_modules/@rdfjs/serializer-turtle/node_modules/@rdfjs/data-model": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } - }, - "node_modules/@rdfjs/sink": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/@rdfjs/sink-map": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/@rdfjs/term-map": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "@rdfjs/to-ntriples": "^2.0.0" - } - }, - "node_modules/@rdfjs/term-set": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "@rdfjs/to-ntriples": "^2.0.0" - } - }, - "node_modules/@rdfjs/to-ntriples": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/@rdfjs/traverser": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "@rdfjs/to-ntriples": "^2.0.0" - } - }, - "node_modules/@rdfjs/tree": { - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-map": "^2.0.0", - "@rdfjs/term-set": "^2.0.1" - } - }, - "node_modules/@rdfjs/types": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@redis/bloom": { - "version": "1.2.0", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/client": { - "version": "1.5.12", - "license": "MIT", - "dependencies": { - "cluster-key-slot": "1.1.2", - "generic-pool": "3.9.0", - "yallist": "4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@redis/client/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@redis/graph": { - "version": "1.1.1", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/json": { - "version": "1.0.6", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/search": { - "version": "1.1.6", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/time-series": { - "version": "1.0.5", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@rubensworks/saxes": { - "version": "6.0.1", - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.12" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@streamparser/json": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/@streamparser/json/-/json-0.0.19.tgz", - "integrity": "sha512-VTxtZGME6ZSWNCSjZ0Zd2LNNodx62XvmARb/liHIwGlInuuvoDzioLuRP8ajV8iLBknsTrsqpRDGlvzKSzpNEw==" - }, - "node_modules/@tarekraafat/autocomplete.js": { - "version": "7.2.0", - "license": "Apache-2.0" - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "license": "MIT" - }, - "node_modules/@tpluscode/eslint-config": { - "version": "0.4.4", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "@typescript-eslint/eslint-plugin": ">=2", - "@typescript-eslint/parser": ">=2", - "eslint-import-resolver-typescript": ">=2" - }, - "peerDependencies": { - "eslint": ">=6", - "eslint-config-standard": ">=11", - "eslint-plugin-import": ">=2", - "eslint-plugin-n": ">=15", - "eslint-plugin-node": ">=11", - "eslint-plugin-promise": ">=6", - "eslint-plugin-require-extensions": ">=0.1.3", - "standard": ">=11" - } - }, - "node_modules/@tpluscode/rdf-ns-builders": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^2", - "@rdfjs/namespace": "^2", - "@rdfjs/types": "*", - "@types/rdfjs__namespace": "^2.0.2", - "@zazuko/prefixes": "^2.0.1" - } - }, - "node_modules/@tpluscode/rdf-ns-builders/node_modules/@rdfjs/data-model": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } - }, - "node_modules/@tpluscode/rdf-string": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@tpluscode/rdf-string/-/rdf-string-1.1.3.tgz", - "integrity": "sha512-1jeS3jrcILQYNtjU6kYQ2wufdCgnDKrsVxcmszDh/RLRxqmrVDNnVdqErg3N2Gg5OR7n2vzC91M5XfNdPSsXAg==", - "dependencies": { - "@rdfjs/types": "*", - "@zazuko/env": "^2.0.3", - "@zazuko/prefixes": ">=1" - } - }, - "node_modules/@tpluscode/rdf-string/node_modules/@rdfjs/data-model": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-2.0.1.tgz", - "integrity": "sha512-oRDYpy7/fJ9NNjS+M7m+dbnhi4lOWYGbBiM/A+u9bBExnN6ifXUF5mUsFxwZaQulmwTDaMhKERdV6iKTBUMgtw==", - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } - }, - "node_modules/@tpluscode/rdf-string/node_modules/@rdfjs/dataset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-2.0.1.tgz", - "integrity": "sha512-hDIaXpUmU/ZdofX/BMFDAchkhN/AjmP5dMCOuVL2VCqWuFjeQxd2KV84E4+7S2Biw8tjEFhPBeQZP7KW+ARV7Q==", - "bin": { - "rdfjs-dataset-test": "bin/test.js" - } - }, - "node_modules/@tpluscode/rdf-string/node_modules/@rdfjs/environment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@rdfjs/environment/-/environment-1.0.0.tgz", - "integrity": "sha512-+S5YjSvfoQR5r7YQCRCCVHvIEyrWia7FJv2gqM3s5EDfotoAQmFeBagApa9c/eQFi5EiNhmBECE5nB8LIxTaHg==" - }, - "node_modules/@tpluscode/rdf-string/node_modules/@types/rdfjs__environment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/rdfjs__environment/-/rdfjs__environment-1.0.0.tgz", - "integrity": "sha512-MDcnv3qfJvbHoEpUQXj5muT8g3e+xz1D8sGevrq3+Q4TzeEvQf5ijGX5l8485XFYrN/OBApgzXkHMZC04/kd5w==", - "peer": true, - "dependencies": { - "@rdfjs/types": "*", - "@types/node": "*" - } - }, - "node_modules/@tpluscode/rdf-string/node_modules/@zazuko/env": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@zazuko/env/-/env-2.0.3.tgz", - "integrity": "sha512-KltMKz2WQs02gsDM5kJi1qI6ejejKjk1p7/tsNNaZM4Opd/5uxyDjsObt6WVbLsLrW2I7xNu31fdXzqfhpuRuA==", - "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/dataset": "^2.0.1", - "@rdfjs/environment": "^1.0.0", - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-map": "^2.0.0", - "@rdfjs/term-set": "^2.0.1", - "@rdfjs/traverser": "^0.1.2", - "@tpluscode/rdf-ns-builders": "^4.1.0", - "@zazuko/prefixes": "^2.1.0", - "clownface": "^2.0.2", - "get-stream": "^8.0.1", - "rdf-dataset-ext": "^1.1.0" - }, - "peerDependencies": { - "@types/clownface": "^2.0.0", - "@types/rdf-dataset-ext": "^1", - "@types/rdfjs__data-model": "^2.0.7", - "@types/rdfjs__dataset": "^2.0.7", - "@types/rdfjs__environment": "^1.0.0", - "@types/rdfjs__formats": "^4.0.0", - "@types/rdfjs__namespace": "^2.0.10", - "@types/rdfjs__term-map": "^2.0.9", - "@types/rdfjs__term-set": "^2.0.8", - "@types/rdfjs__traverser": "^0.1.3" - } - }, - "node_modules/@tpluscode/rdf-string/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ts-morph/common": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.22.0.tgz", - "integrity": "sha512-HqNBuV/oIlMKdkLshXd1zKBqNQCsuPEsgQOkfFQ/eUKjRlwndXW1AjN9LVkBEIukm00gGXSRmfkl0Wv5VXLnlw==", - "peer": true, - "dependencies": { - "fast-glob": "^3.3.2", - "minimatch": "^9.0.3", - "mkdirp": "^3.0.1", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@ts-morph/common/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==", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@ts-morph/common/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "peer": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/clownface": { - "version": "2.0.5", - "license": "MIT", - "dependencies": { - "rdf-js": "^4.0.2" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "3.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-link-header": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/jsonld": { - "version": "1.5.13", - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" - }, - "node_modules/@types/lodash-es": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/mdast": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "license": "MIT" - }, - "node_modules/@types/n3": { - "version": "1.16.4", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "^1.1.0", - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "20.10.6", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.10", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/rdf-dataset-ext": { - "version": "1.0.7", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/readable-stream": "*", - "rdf-js": "^4.0.2" - } - }, - "node_modules/@types/rdfjs__data-model": { - "version": "2.0.7", - "license": "MIT", - "peer": true, - "dependencies": { - "@rdfjs/types": "^1.0.1" - } - }, - "node_modules/@types/rdfjs__dataset": { - "version": "2.0.7", - "license": "MIT", - "peer": true, - "dependencies": { - "@rdfjs/types": "*" - } - }, - "node_modules/@types/rdfjs__environment": { - "version": "0.1.10", - "license": "MIT", - "peer": true, - "dependencies": { - "@rdfjs/types": "*", - "@types/node": "*", - "@types/rdfjs__data-model": "*", - "@types/rdfjs__dataset": "*", - "@types/rdfjs__namespace": "*", - "@types/rdfjs__sink-map": "*", - "@types/rdfjs__term-map": "*", - "@types/rdfjs__term-set": "*" - } - }, - "node_modules/@types/rdfjs__formats": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/rdfjs__formats/-/rdfjs__formats-4.0.1.tgz", - "integrity": "sha512-Zj7hQEn5HeCj+pJCWshY2gqBcdBdwyc2j20Ht3PH91pkdRuG2AlGDD3N9PQ1oZ3+J6Q96rAlhxUbjQUp9+s3FQ==", - "peer": true, - "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/node": "*", - "@types/rdfjs__parser-jsonld": "*", - "@types/rdfjs__parser-n3": "*", - "@types/rdfjs__serializer-jsonld": "*", - "@types/rdfjs__serializer-jsonld-ext": "*", - "@types/rdfjs__serializer-ntriples": "*", - "@types/rdfjs__serializer-turtle": "*", - "@types/rdfjs__sink-map": "*", - "rdfxml-streaming-parser": ">=2" - } - }, - "node_modules/@types/rdfjs__formats-common": { - "version": "3.1.4", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "@types/rdfjs__parser-jsonld": "*", - "@types/rdfjs__parser-n3": "*", - "@types/rdfjs__serializer-jsonld": "*", - "@types/rdfjs__serializer-ntriples": "*", - "@types/rdfjs__sink-map": "*", - "rdf-js": "^4.0.2", - "rdfxml-streaming-parser": ">=2" - } - }, - "node_modules/@types/rdfjs__namespace": { - "version": "2.0.10", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" - } - }, - "node_modules/@types/rdfjs__parser-jsonld": { - "version": "2.1.5", - "license": "MIT", - "dependencies": { - "@types/jsonld": "*", - "rdf-js": "^4.0.2" - } - }, - "node_modules/@types/rdfjs__parser-n3": { - "version": "2.0.5", - "license": "MIT", - "dependencies": { - "rdf-js": "^4.0.2" - } - }, - "node_modules/@types/rdfjs__prefix-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@types/rdfjs__prefix-map/-/rdfjs__prefix-map-0.1.5.tgz", - "integrity": "sha512-RAwyS/2dT9X79QwM0F8KLweTfuBoe6xtiAlU7wKPB+/t/sfk6A50LYtAWaDVP5qBjcu50UkKkZT+VR47CiLkfg==", - "peer": true, - "dependencies": { - "@rdfjs/types": "*" - } - }, - "node_modules/@types/rdfjs__serializer-jsonld": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "rdf-js": "^4.0.2" - } - }, - "node_modules/@types/rdfjs__serializer-jsonld-ext": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-jsonld-ext/-/rdfjs__serializer-jsonld-ext-4.0.1.tgz", - "integrity": "sha512-jgbQ/1kV7nESKG7SY8FJED6K4OFznr6Sz3ybF1ncpBR7TUBTuy3InpZOVRK4Wjpy2zi84iIAzJ1CIIo9NZh2Xw==", - "peer": true, - "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/jsonld": "*", - "@types/node": "*" - } - }, - "node_modules/@types/rdfjs__serializer-ntriples": { - "version": "2.0.5", - "license": "MIT", - "dependencies": { - "rdf-js": "^4.0.2" - } - }, - "node_modules/@types/rdfjs__serializer-turtle": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/rdfjs__serializer-turtle/-/rdfjs__serializer-turtle-1.1.0.tgz", - "integrity": "sha512-NGHnbz5985UwS/YS6WL/FkS94B+QiVTdsfvJCqPwLmY3E7UeClw91c2KbiphZUR/uh7uwLwxeKKhV2T1gYgT5Q==", - "peer": true, - "dependencies": { - "@rdfjs/types": ">=1.0.0", - "@types/node": "*", - "@types/rdfjs__prefix-map": "*" - } - }, - "node_modules/@types/rdfjs__sink-map": { - "version": "2.0.5", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" - } - }, - "node_modules/@types/rdfjs__term-map": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/rdfjs__term-map/-/rdfjs__term-map-2.0.10.tgz", - "integrity": "sha512-YlpYkya+Xq9fmcw+BMi1SCh+w2sBu7G0/qd2+ZhB4QIK3V1xq2o3EOAZnlahyQdwrW9t5+Ihw8IVVvZsJvDOTA==", - "peer": true, - "dependencies": { - "@rdfjs/types": "*" - } - }, - "node_modules/@types/rdfjs__term-set": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@types/rdfjs__term-set/-/rdfjs__term-set-2.0.9.tgz", - "integrity": "sha512-RRXs5DwFGanZyT705f7KLSiN68gUVUtGWTp508CXJhLfD7AWmilqc1BLgLUoac48h3pnh9w5lRhwFm6fj1ZE5Q==", - "peer": true, - "dependencies": { - "@rdfjs/types": "*" - } - }, - "node_modules/@types/rdfjs__traverser": { - "version": "0.1.5", - "license": "MIT", - "peer": true, - "dependencies": { - "@rdfjs/types": "*" - } - }, - "node_modules/@types/readable-stream": { - "version": "4.0.10", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/@types/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT", - "peer": true - }, - "node_modules/@types/semver": { - "version": "7.5.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.13.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.13.2", - "@typescript-eslint/type-utils": "6.13.2", - "@typescript-eslint/utils": "6.13.2", - "@typescript-eslint/visitor-keys": "6.13.2", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.13.2", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.13.2", - "@typescript-eslint/types": "6.13.2", - "@typescript-eslint/typescript-estree": "6.13.2", - "@typescript-eslint/visitor-keys": "6.13.2", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.13.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@typescript-eslint/types": "6.13.2", - "@typescript-eslint/visitor-keys": "6.13.2" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.13.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.13.2", - "@typescript-eslint/utils": "6.13.2", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.13.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.13.2", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "dependencies": { - "@typescript-eslint/types": "6.13.2", - "@typescript-eslint/visitor-keys": "6.13.2", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.13.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.13.2", - "@typescript-eslint/types": "6.13.2", - "@typescript-eslint/typescript-estree": "6.13.2", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.13.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@typescript-eslint/types": "6.13.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/@vanillawc/wc-codemirror": { - "version": "1.9.8", - "license": "MIT" - }, - "node_modules/@vue/compiler-core": { - "version": "3.3.11", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.23.5", - "@vue/shared": "3.3.11", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.3.11", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.3.11", - "@vue/shared": "3.3.11" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.3.11", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.23.5", - "@vue/compiler-core": "3.3.11", - "@vue/compiler-dom": "3.3.11", - "@vue/compiler-ssr": "3.3.11", - "@vue/reactivity-transform": "3.3.11", - "@vue/shared": "3.3.11", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5", - "postcss": "^8.4.32", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.11", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.3.11", - "@vue/shared": "3.3.11" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.5.1", - "license": "MIT" - }, - "node_modules/@vue/reactivity": { - "version": "3.3.11", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.3.11" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.11", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.23.5", - "@vue/compiler-core": "3.3.11", - "@vue/shared": "3.3.11", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.11", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.3.11", - "@vue/shared": "3.3.11" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.11", - "license": "MIT", - "dependencies": { - "@vue/runtime-core": "3.3.11", - "@vue/shared": "3.3.11", - "csstype": "^3.1.2" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.3.11", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.3.11", - "@vue/shared": "3.3.11" - }, - "peerDependencies": { - "vue": "3.3.11" - } - }, - "node_modules/@vue/shared": { - "version": "3.3.11", - "license": "MIT" - }, - "node_modules/@zazuko/env": { - "version": "1.11.0", - "license": "MIT", - "dependencies": { - "@rdfjs/dataset": "^2.0.1", - "@rdfjs/environment": "^0.1.2", - "@rdfjs/traverser": "^0.1.2", - "@tpluscode/rdf-ns-builders": "^4.1.0", - "@zazuko/prefixes": "^2.1.0", - "clownface": "^2.0.1", - "get-stream": "^8.0.1", - "rdf-dataset-ext": "^1.1.0" - }, - "peerDependencies": { - "@types/clownface": "^2.0.0", - "@types/rdf-dataset-ext": "^1", - "@types/rdfjs__environment": "^0.1.7", - "@types/rdfjs__formats-common": "^3.1.0", - "@types/rdfjs__traverser": "^0.1.3" - } - }, - "node_modules/@zazuko/env/node_modules/@rdfjs/dataset": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-dataset-test": "bin/test.js" - } - }, - "node_modules/@zazuko/env/node_modules/get-stream": { - "version": "8.0.1", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@zazuko/formats-lazy": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "@rdfjs/parser-jsonld": "^2.0.0", - "@rdfjs/parser-n3": "^2.0.0", - "@rdfjs/serializer-jsonld": "^2.0.0", - "@rdfjs/serializer-ntriples": "^2.0.0", - "@rdfjs/sink-map": "^2.0.0", - "@types/rdfjs__parser-jsonld": "^2.0.0", - "@types/rdfjs__parser-n3": "^2.0.0", - "@types/rdfjs__serializer-jsonld": "^2.0.0", - "@types/rdfjs__serializer-ntriples": "^2.0.0", - "@types/rdfjs__sink-map": "^2.0.0", - "onetime": "^6.0.0", - "rdfxml-streaming-parser": "^2.2.0", - "readable-stream": "^4" - } - }, - "node_modules/@zazuko/formats-lazy/node_modules/mimic-fn": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@zazuko/formats-lazy/node_modules/onetime": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@zazuko/node-fetch": { - "version": "2.6.6", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/@zazuko/prefixes": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/@zazuko/rdf-entity-webcomponent": { - "version": "0.7.7", - "license": "MIT", - "dependencies": { - "@rdfjs/dataset": "^2.0.1", - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-map": "^2.0.0", - "@rdfjs/term-set": "^2.0.1", - "@tpluscode/rdf-ns-builders": "^4.1.0", - "clownface": "^2.0.0", - "lit": "^2.8.0", - "n3": "^1.17.1" - } - }, - "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/@lit/reactive-element": { - "version": "1.6.3", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.0.0" - } - }, - "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/@rdfjs/dataset": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-dataset-test": "bin/test.js" - } - }, - "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/lit": { - "version": "2.8.0", - "license": "BSD-3-Clause", - "dependencies": { - "@lit/reactive-element": "^1.6.0", - "lit-element": "^3.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/lit-element": { - "version": "3.3.3", - "license": "BSD-3-Clause", - "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.0", - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.8.0" - } - }, - "node_modules/@zazuko/rdf-entity-webcomponent/node_modules/lit-html": { - "version": "2.8.0", - "license": "BSD-3-Clause", - "dependencies": { - "@types/trusted-types": "^2.0.2" - } - }, - "node_modules/@zazuko/rdf-vocabularies": { - "version": "2023.1.19", - "license": "MIT", - "dependencies": { - "@rdfjs/parser-n3": "^1.1.4", - "commander": "^5.0.0", - "pkg-dir": "^5.0.0", - "rdf-ext": "^1.3.5", - "readable-stream": "^3.6.0", - "string-to-stream": "^3.0.1" - }, - "bin": { - "rdf-vocab": "bin/vocab.js" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/@rdfjs/parser-n3": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^1.0.1", - "@rdfjs/sink": "^1.0.2", - "n3": "^1.3.5", - "readable-stream": "^3.6.0", - "readable-to-readable": "^0.1.0" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/@rdfjs/sink": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/@rdfjs/to-ntriples": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/commander": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/find-up": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/locate-path": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/p-limit": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/p-locate": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/pkg-dir": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/rdf-ext": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^1.3.3", - "@rdfjs/dataset": "^1.1.1", - "@rdfjs/to-ntriples": "^1.0.1", - "rdf-normalize": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/@zazuko/rdf-vocabularies/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@zazuko/sparql-proxy": { - "version": "2.6.8", - "license": "MIT", - "dependencies": { - "body-parser": "^1.20.1", - "debug": "^4.3.4", - "express": "^4.18.2", - "lodash": "^4.17.21", - "node-fetch": "^2.6.9", - "redis": "^4.6.4", - "sparql-http-client": "^1.2.0" - } - }, - "node_modules/@zazuko/sparql-proxy/node_modules/node-fetch": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@zazuko/sparql-proxy/node_modules/sparql-http-client": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/@zazuko/spex": { - "version": "0.1.20", - "license": "MIT", - "dependencies": { - "@headlessui/vue": "^1.7.12", - "@heroicons/vue": "^2.0.16", - "@rdfjs-elements/rdf-editor": "^0.5.4", - "@zazuko/rdf-vocabularies": "^2023.1.19", - "@zazuko/vue-graph-layout": "^0.1.4", - "buffer": "^6.0.3", - "bulma": "^0.9.4", - "core-js": "^3.29.0", - "lodash.clonedeep": "^4.5.0", - "lodash.debounce": "^4.0.8", - "n3": "^1.16.2", - "process": "^0.11.10", - "rdf-ext": "^2.2.0", - "register-service-worker": "^1.7.2", - "sparql-http-client": "^2.4.2", - "splitpanes": "^3.1.5", - "stream-browserify": "^3.0.0", - "vue": "^3.2.47", - "vue-router": "^4.1.6" - } - }, - "node_modules/@zazuko/trifid-entity-renderer": { - "resolved": "packages/entity-renderer", - "link": true - }, - "node_modules/@zazuko/trifid-handle-redirects": { - "resolved": "packages/redirects", - "link": true - }, - "node_modules/@zazuko/trifid-markdown-content": { - "resolved": "packages/markdown-content", - "link": true - }, - "node_modules/@zazuko/trifid-plugin-ckan": { - "resolved": "packages/ckan", - "link": true - }, - "node_modules/@zazuko/trifid-plugin-iiif": { - "resolved": "packages/iiif", - "link": true - }, - "node_modules/@zazuko/trifid-plugin-sparql-proxy": { - "resolved": "packages/sparql-proxy", - "link": true - }, - "node_modules/@zazuko/vue-graph-layout": { - "version": "0.1.4", - "license": "MIT", - "dependencies": { - "d3": "^7.8.2", - "dagre": "^0.8.5" - }, - "peerDependencies": { - "vue": "3.x" - } - }, - "node_modules/@zazuko/yasgui": { - "version": "4.2.34", - "resolved": "https://registry.npmjs.org/@zazuko/yasgui/-/yasgui-4.2.34.tgz", - "integrity": "sha512-MdbsdMtCQe9JzpDKAsmnAqCYIBg6ptV1TnqEtcWsBr8hrWWhP9RnE1ubxSZ2doQC+yvht8kCnsfqgLODHsDBnQ==", - "dependencies": { - "@tarekraafat/autocomplete.js": "^7.2.0", - "@types/lodash-es": "^4.17.3", - "@zazuko/yasgui-utils": "^4.2.34", - "@zazuko/yasqe": "^4.2.34", - "@zazuko/yasr": "^4.2.34", - "autosuggest-highlight": "^3.1.1", - "blueimp-md5": "^2.12.0", - "choices.js": "^9.0.1", - "dompurify": "^2.0.7", - "es6-object-assign": "^1.1.0", - "jsuri": "^1.3.1", - "lodash-es": "^4.17.15", - "sortablejs": "^1.10.2", - "superagent": "^8.1.2" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@zazuko/yasgui-utils": { - "version": "4.2.34", - "resolved": "https://registry.npmjs.org/@zazuko/yasgui-utils/-/yasgui-utils-4.2.34.tgz", - "integrity": "sha512-UJEPmx8DiEfqFvmCajDHWL6GcjaivIfPP26eqHIXx8brQ5zJnqImsNXfW3nMQCMKUO/3nENFP+d9I6/JK/b68w==", - "dependencies": { - "@types/node": "^20.10.3", - "dompurify": "^2.0.7", - "store": "^2.0.12" - } - }, - "node_modules/@zazuko/yasqe": { - "version": "4.2.34", - "resolved": "https://registry.npmjs.org/@zazuko/yasqe/-/yasqe-4.2.34.tgz", - "integrity": "sha512-yEtIfCJUY9DcvC/z3JMHwL2dlGKCQgDfbSvtZDRqtE4UU+Vr++qiQVOnoXD3cO62pi5zWpXxrg5IKHZb7bzFmg==", - "dependencies": { - "@types/lodash-es": "^4.17.3", - "@zazuko/yasgui-utils": "^4.2.34", - "codemirror": "^5.51.0", - "lodash-es": "^4.17.15", - "query-string": "^6.10.1", - "superagent": "^8.1.2" - }, - "engines": { - "node": ">= 8" - }, - "peerDependencies": { - "@zazuko/yasgui": "4.x" - } - }, - "node_modules/@zazuko/yasr": { - "version": "4.2.34", - "resolved": "https://registry.npmjs.org/@zazuko/yasr/-/yasr-4.2.34.tgz", - "integrity": "sha512-b3U1u/Yuv2+6OZQWDefIO3zr8A48fkgepjN3HRwNZ9XFF6g8wJA8RYPi15Lpo09SGVgcEGrC5wUWkSTgqCNp0Q==", - "dependencies": { - "@fortawesome/free-solid-svg-icons": "^5.14.0", - "@json2csv/plainjs": "^7.0.4", - "@types/lodash-es": "^4.17.3", - "@zazuko/yasgui-utils": "^4.2.34", - "@zazuko/yasqe": "^4.2.34", - "codemirror": "^5.51.0", - "colors": "^1.4.0", - "column-resizer": "^1.3.4", - "datatables.net": "^1.10.24", - "datatables.net-dt": "^1.10.24", - "dompurify": "^2.0.7", - "jquery": "^3.5.0", - "lodash-es": "^4.17.15", - "n3": "^1.3.5", - "papaparse": "^5.3.1" - }, - "engines": { - "node": ">= 8" - }, - "peerDependencies": { - "@zazuko/yasgui": "4.x" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/absolute-url": { - "version": "1.2.2", - "license": "MIT" - }, - "node_modules/accepts": { - "version": "1.3.8", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.2", - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "peer": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-transform": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "peer": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.1.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/ast-types": { - "version": "0.13.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/autosuggest-highlight": { - "version": "3.3.4", - "license": "MIT", - "dependencies": { - "remove-accents": "^0.4.2" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3", - "core-js-compat": "^3.33.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/basic-ftp": { - "version": "5.0.3", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bcp-47-match": { - "version": "2.0.3", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/better-path-resolve": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-windows": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/big-integer": { - "version": "1.6.52", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "dev": true, - "license": "MIT" - }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.1", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/boolean": { - "version": "3.2.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/breakword": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "wcwidth": "^1.0.1" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "dev": true, - "license": "ISC" - }, - "node_modules/browserslist": { - "version": "4.22.2", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bulma": { - "version": "0.9.4", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/c8": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/c8/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/caching-transform": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/caching-transform/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caching-transform/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/caching-transform/node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camouflage-rewrite": { - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "absolute-url": "^1.2.2", - "hijackresponse": "^4.0.1", - "string-replace-stream": "0.0.2" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001568", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/canonicalize": { - "version": "1.0.8", - "license": "Apache-2.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chai": { - "version": "5.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.0.0", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/chai-subset": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/check-error": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/choices.js": { - "version": "9.1.0", - "license": "MIT", - "dependencies": { - "deepmerge": "^4.2.2", - "fuse.js": "^3.4.6", - "redux": "^4.1.2" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clownface": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clownface/-/clownface-2.0.2.tgz", - "integrity": "sha512-HjTYqVXiCrw4FmoAWF46aQ3c2OmdVLoqZrAGkowdWWUoBBIcBht55pOxkyvoVe2BsPE/HqMzfnu51JpgqM4KEg==", - "dependencies": { - "@rdfjs/data-model": "^2.0.1", - "@rdfjs/environment": "0 - 1", - "@rdfjs/namespace": "^2.0.0" - } - }, - "node_modules/clownface/node_modules/@rdfjs/data-model": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-2.0.1.tgz", - "integrity": "sha512-oRDYpy7/fJ9NNjS+M7m+dbnhi4lOWYGbBiM/A+u9bBExnN6ifXUF5mUsFxwZaQulmwTDaMhKERdV6iKTBUMgtw==", - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } - }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "license": "Apache-2.0", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-block-writer": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", - "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", - "peer": true - }, - "node_modules/codemirror": { - "version": "5.65.16", - "license": "MIT" - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/column-resizer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/column-resizer/-/column-resizer-1.4.0.tgz", - "integrity": "sha512-KM5Jh/UBKwVUr01oEGN/OvxF6gZIEn4c1Qde4iHSqNru9hxq93ao3u93qb9N1E1TZ2Sxjh4x7OHGe8v/P8FgkA==", - "dependencies": { - "string-hash": "~1.1.3" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", - "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", - "engines": { - "node": ">=18" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "engines": [ - "node >= 6.0" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-parser": { - "version": "1.4.6", - "license": "MIT", - "dependencies": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "license": "MIT" - }, - "node_modules/core-js": { - "version": "3.34.0", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.34.0", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.22.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/create-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/create-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/create-jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "peer": true - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-selector-parser": { - "version": "3.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/csv": { - "version": "5.5.3", - "dev": true, - "license": "MIT", - "dependencies": { - "csv-generate": "^3.4.3", - "csv-parse": "^4.16.3", - "csv-stringify": "^5.6.5", - "stream-transform": "^2.1.3" - }, - "engines": { - "node": ">= 0.1.90" - } - }, - "node_modules/csv-generate": { - "version": "3.4.3", - "dev": true, - "license": "MIT" - }, - "node_modules/csv-parse": { - "version": "4.16.3", - "dev": true, - "license": "MIT" - }, - "node_modules/csv-stringify": { - "version": "5.6.5", - "dev": true, - "license": "MIT" - }, - "node_modules/d3": { - "version": "7.8.5", - "license": "ISC", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.2.4", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "4.0.2", - "license": "ISC", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.4", - "license": "ISC", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.1.0", - "license": "ISC", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-random": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "license": "ISC", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "license": "ISC", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "license": "ISC", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "license": "ISC", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dagre": { - "version": "0.8.5", - "license": "MIT", - "dependencies": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/datatables.net": { - "version": "1.13.8", - "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.13.8.tgz", - "integrity": "sha512-2pDamr+GUwPTby2OgriVB9dR9ftFKD2AQyiuCXzZIiG4d9KkKFQ7gqPfNmG7uj9Tc5kDf+rGj86do4LAb/V71g==", - "dependencies": { - "jquery": ">=1.7" - } - }, - "node_modules/datatables.net-dt": { - "version": "1.13.8", - "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.13.8.tgz", - "integrity": "sha512-/ZPzr1hQ+domerlg/MbcQHqeeqxK9fsZmpRs1YeKxsdfr+UyHQTUiiOO7RqekppSLc7MPqxGnzKkCX9vAgqm0w==", - "dependencies": { - "datatables.net": "1.13.8", - "jquery": ">=1.7" - } - }, - "node_modules/dateformat": { - "version": "4.6.3", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "1.5.1", + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } - } - }, - "node_modules/deep-eql": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-require-extensions": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "dev": true, - "license": "MIT", + ], "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/degenerator": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">= 14" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/delaunator": { - "version": "5.0.0", - "license": "ISC", + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-indent": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/detect-newline": { - "version": "3.1.0", + "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==" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": ">=8" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" + "node": ">=6" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dezalgo": { - "version": "1.0.4", - "license": "ISC", + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "peer": true, "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" + "semver": "^7.0.0" } }, - "node_modules/diff": { - "version": "5.0.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } + "node_modules/bulma": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz", + "integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ==" }, - "node_modules/diff-sequences": { - "version": "29.6.3", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.8" } }, - "node_modules/dir-glob": { - "version": "3.0.1", + "node_modules/c8": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", + "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", "dev": true, - "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/direction": { - "version": "2.0.1", - "license": "MIT", "bin": { - "direction": "cli.js" + "c8": "bin/c8.js" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=14.14.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", + "node_modules/c8/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "Apache-2.0", - "peer": true, "dependencies": { - "esutils": "^2.0.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dompurify": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", - "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==" - }, - "node_modules/dotenv": { - "version": "16.3.1", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/duplex-to": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.609", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", + "node_modules/c8/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/emoji-regex": { - "version": "10.3.0", + "node_modules/c8/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/enquirer": { - "version": "2.4.1", + "node_modules/c8/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "node": ">=10" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/error-ex": { - "version": "1.3.2", + "node_modules/c8/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=12" } }, - "node_modules/es-abstract": { - "version": "1.22.3", + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, - "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "node": ">=8" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", + "node_modules/caching-transform/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==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", + "node_modules/caching-transform/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -8124,1428 +4223,1614 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/es6-promise": { - "version": "3.3.1", - "license": "MIT" - }, - "node_modules/escalade": { - "version": "3.1.1", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", + "peer": true, "engines": { "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">=6" } }, - "node_modules/eslint": { - "version": "8.55.0", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-compat-utils": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-standard": { - "version": "17.1.0", + "node_modules/caniuse-lite": { + "version": "1.0.30001588", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", + "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/ai" } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.0.0" + ] + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chai": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.0.tgz", + "integrity": "sha512-kDZ7MZyM6Q1DhR9jy7dalKohXQ2yrlXkk59CR52aRKxJrobmlBNqnFQxX9xOX8w+4mz8SYlKJa/7D7ddltFXCw==", + "dev": true, + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.0.0", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0" + "engines": { + "node": ">=12" } }, - "node_modules/eslint-config-standard-jsx": { - "version": "11.0.0", + "node_modules/chai-subset": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/chai-subset/-/chai-subset-1.6.0.tgz", + "integrity": "sha512-K3d+KmqdS5XKW5DWPd5sgNffL3uxdDe+6GdnJh3AYPhwnBGRY5urfvfcbRtWIvvpz+KxkL9FeBB6MZewLUNwug==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "peer": true, - "peerDependencies": { - "eslint": "^8.8.0", - "eslint-plugin-react": "^7.28.0" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", + "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==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/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==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/check-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.0.0.tgz", + "integrity": "sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==", "dev": true, - "license": "MIT", - "peer": true, + "engines": { + "node": ">= 16" + } + }, + "node_modules/choices.js": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/choices.js/-/choices.js-9.1.0.tgz", + "integrity": "sha512-6NnqiE/MNnNAiMzdW7phJ49nMQylkKMQ6La6PAS1+h1VhrGt38MOPnjzEJ3cRaECieqaGpl9eFGtI2icW27r8A==", "dependencies": { - "ms": "^2.1.1" + "deepmerge": "^4.2.2", + "fuse.js": "^3.4.6", + "redux": "^4.1.2" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "license": "ISC", - "optional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "anymatch": "~3.1.2", + "braces": "~3.0.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" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "node": ">= 8.10.0" }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", + "node_modules/chokidar/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==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">= 6" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" + "node": ">=6" } }, - "node_modules/eslint-plugin-es-x": { - "version": "7.5.0", + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.1.2" + "restore-cursor": "^4.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": ">=8" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.0", + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" }, "engines": { - "node": ">=4" + "node": ">=18" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ms": "^2.1.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "Apache-2.0", - "peer": true, "dependencies": { - "esutils": "^2.0.2" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=12" } }, - "node_modules/eslint-plugin-n": { - "version": "16.4.0", + "node_modules/cliui/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==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", + "node_modules/cliui/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==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=7.0.0" } }, - "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } + "node_modules/cliui/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==", + "dev": true }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, + "node_modules/cliui/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==", + "dev": true + }, + "node_modules/cliui/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==", + "dev": true, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": ">=8" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/cliui/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==", "dev": true, - "license": "Apache-2.0", - "peer": true, "dependencies": { - "esutils": "^2.0.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", + "node_modules/cliui/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==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=0.8" } }, - "node_modules/eslint-plugin-require-extensions": { - "version": "0.1.3", + "node_modules/clownface": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clownface/-/clownface-2.0.2.tgz", + "integrity": "sha512-HjTYqVXiCrw4FmoAWF46aQ3c2OmdVLoqZrAGkowdWWUoBBIcBht55pOxkyvoVe2BsPE/HqMzfnu51JpgqM4KEg==", + "dependencies": { + "@rdfjs/data-model": "^2.0.1", + "@rdfjs/environment": "0 - 1", + "@rdfjs/namespace": "^2.0.0" + } + }, + "node_modules/codemirror": { + "version": "5.65.16", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.16.tgz", + "integrity": "sha512-br21LjYmSlVL0vFCPWPfhzUCT34FM/pAdK7rRIZwa0rrtrIdotvP4Oh4GUHsu2E3IrQMCfRkL/fN3ytMNxVQvg==" + }, + "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==", "dev": true, - "license": "Apache-2.0", - "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "engines": { - "node": ">=16" - }, - "peerDependencies": { - "eslint": "*" + "node": ">=0.1.90" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, + "node_modules/column-resizer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/column-resizer/-/column-resizer-1.4.0.tgz", + "integrity": "sha512-KM5Jh/UBKwVUr01oEGN/OvxF6gZIEn4c1Qde4iHSqNru9hxq93ao3u93qb9N1E1TZ2Sxjh4x7OHGe8v/P8FgkA==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "string-hash": "~1.1.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "funding": { - "url": "https://opencollective.com/eslint" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, - "license": "MIT", - "peer": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "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/concat-stream/node_modules/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==" + }, + "node_modules/concat-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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">= 0.6" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, - "license": "Apache-2.0", - "peer": true, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.1.tgz", + "integrity": "sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" + }, + "node_modules/core-js": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz", + "integrity": "sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==", + "hasInstallScript": true, "funding": { - "url": "https://opencollective.com/eslint" + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/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==" + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/css-selector-parser": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.0.4.tgz", + "integrity": "sha512-pnmS1dbKsz6KA4EW4BznyPL2xxkNDRg62hcD0v8g6DEw2W7hxOln5M953jsp9hmw5Dg57S6o/A8GOn37mbAgcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/csv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", + "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "csv-generate": "^3.4.3", + "csv-parse": "^4.16.3", + "csv-stringify": "^5.6.5", + "stream-transform": "^2.1.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.1.90" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0", - "peer": true + "node_modules/csv-generate": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", + "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==", + "dev": true }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", + "dev": true + }, + "node_modules/csv-stringify": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==", + "dev": true + }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=12" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", "dependencies": { - "color-name": "~1.1.4" + "internmap": "1 - 2" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", "dependencies": { - "type-fest": "^0.20.2" + "d3-path": "1 - 3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", "dependencies": { - "argparse": "^2.0.1" + "d3-array": "^3.2.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=12" } }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", "dependencies": { - "p-locate": "^5.0.0" + "delaunator": "5" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", "dependencies": { - "yocto-queue": "^0.1.0" + "d3-dispatch": "1 - 3", + "d3-selection": "3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", "dependencies": { - "p-limit": "^3.0.2" + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" }, - "engines": { - "node": ">=10" + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" } }, - "node_modules/eslint/node_modules/supports-color": { + "node_modules/d3-dsv/node_modules/commander": { "version": "7.2.0", - "dev": true, - "license": "MIT", - "peer": true, + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "has-flag": "^4.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "peer": true, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/esm": { - "version": "3.2.25", - "license": "MIT", + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/espree": { - "version": "9.6.1", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/esquery": { - "version": "1.5.0", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", "dependencies": { - "estraverse": "^5.1.0" + "d3-array": "2.5.0 - 3" }, "engines": { - "node": ">=0.10" + "node": ">=12" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", "dependencies": { - "estraverse": "^5.2.0" + "d3-color": "1 - 3" }, "engines": { - "node": ">=4.0" + "node": ">=12" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "license": "BSD-2-Clause", + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", "engines": { - "node": ">=4.0" + "node": ">=12" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/etag": { - "version": "1.8.1", - "license": "MIT", + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "license": "MIT", + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "license": "MIT", + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, "engines": { - "node": ">=0.8.x" + "node": ">=12" } }, - "node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=12" } }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "node_modules/expect": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "d3-path": "^3.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/express": { - "version": "4.18.2", - "license": "MIT", + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "d3-array": "2 - 3" }, "engines": { - "node": ">= 0.10.0" + "node": ">=12" } }, - "node_modules/express-as-promise": { - "version": "1.2.0", - "dev": true, - "license": "MIT", + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", "dependencies": { - "express": "^4.16.4", - "node-fetch": "^2.6.1" + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/express-as-promise/node_modules/node-fetch": { - "version": "2.7.0", - "dev": true, - "license": "MIT", + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", "dependencies": { - "whatwg-url": "^5.0.0" + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=12" }, "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "d3-selection": "2 - 3" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "license": "MIT", + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/dagre": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", "dependencies": { - "ms": "2.0.0" + "graphlib": "^2.1.8", + "lodash": "^4.17.15" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/extendable-error": { - "version": "0.1.7", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "engines": { - "node": ">=4" + "node": ">= 12" } }, - "node_modules/fast-copy": { - "version": "3.0.1", - "license": "MIT" + "node_modules/datatables.net": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.13.10.tgz", + "integrity": "sha512-lVjpXGX9VzOpiPYnJ/KxOsYMAVa3oc3UniYGGo6pLBVCyajzMo80yisgXRz8J392wkZOc3bpp6VPs2pDbpKlyw==", + "dependencies": { + "jquery": ">=1.7" + } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" + "node_modules/datatables.net-dt": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.13.10.tgz", + "integrity": "sha512-7Yujk3WGZjUBkQJzlRS2ResAtVXkODXLG73MEsC3tabyCiVXH42eA/79jwDBidmZWD8uvAfpAzWHTxjba4+QIQ==", + "dependencies": { + "datatables.net": "1.13.8", + "jquery": ">=1.7" + } }, - "node_modules/fast-glob": { - "version": "3.3.2", - "license": "MIT", + "node_modules/datatables.net-dt/node_modules/datatables.net": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.13.8.tgz", + "integrity": "sha512-2pDamr+GUwPTby2OgriVB9dR9ftFKD2AQyiuCXzZIiG4d9KkKFQ7gqPfNmG7uj9Tc5kDf+rGj86do4LAb/V71g==", "dependencies": { - "@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" - }, + "jquery": ">=1.7" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "engines": { - "node": ">=8.6.0" + "node": "*" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "is-glob": "^4.0.1" + "ms": "2.1.2" }, "engines": { - "node": ">= 6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/fast-printf": { - "version": "1.6.9", - "license": "BSD-3-Clause", "dependencies": { - "boolean": "^3.1.4" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">=10.0" + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-redact": { - "version": "3.3.0", - "license": "MIT", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, "engines": { - "node": ">=6" - } - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" + "node": ">=0.10.0" } }, - "node_modules/fault": { - "version": "2.0.1", - "license": "MIT", + "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", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dependencies": { - "format": "^0.2.0" + "character-entities": "^2.0.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-eql": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz", + "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" + "engines": { + "node": ">=6" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, + "node_modules/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==", + "dev": true, + "peer": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { - "node": "^12.20 || >= 14.13" + "node": ">=0.10.0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "flat-cache": "^3.0.4" + "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/file-fetch": { - "version": "1.7.0", - "license": "MIT", + "node_modules/default-require-extensions/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, "dependencies": { - "get-stream": "^6.0.1", - "mime-types": "^2.1.30", - "node-fetch": "^2.6.1", - "readable-error": "^1.0.0", - "readable-stream": "^3.6.0" + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/file-fetch/node_modules/node-fetch": { - "version": "2.7.0", - "license": "MIT", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "whatwg-url": "^5.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-fetch/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-saverjs": { - "version": "1.3.6", - "license": "MIT" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "robust-predicates": "^3.0.2" } }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "license": "MIT", - "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": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, "engines": { "node": ">=8" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" } }, - "node_modules/find-up": { - "version": "4.1.0", + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.3.1" } }, - "node_modules/find-yarn-workspace-root2": { - "version": "1.2.16", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "micromatch": "^4.0.2", - "pkg-dir": "^4.2.0" + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/flat": { - "version": "5.0.2", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", "bin": { - "flat": "cli.js" + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/flat-cache": { - "version": "3.2.0", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "esutils": "^2.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6.0.0" } }, - "node_modules/flatted": { - "version": "3.2.9", - "dev": true, - "license": "ISC", - "peer": true + "node_modules/dompurify": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", + "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==" }, - "node_modules/for-each": { - "version": "0.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/foreground-child": { + "node_modules/duplex-to": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/duplex-to/-/duplex-to-2.0.0.tgz", + "integrity": "sha512-f2nMnk11mwDptEFBTv2mcWHpF4ENAbuQ63yTiSy/99rG4Exsxsf0GJhJYq/AHF2cdMYswSx23LPuoijBflpquQ==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.676", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.676.tgz", + "integrity": "sha512-uHt4FB8SeYdhcOsj2ix/C39S7sPSNFJpzShjxGOm1KdF4MHyGqGi389+T5cErsodsijojXilYaHIKKqJfqh7uQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "ISC", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.13.0" } }, - "node_modules/form-data": { - "version": "4.0.0", - "license": "MIT", + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 6" + "node": ">=8.6" } }, - "node_modules/format": { - "version": "0.2.2", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { - "node": ">=0.4.x" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "license": "MIT", + "node_modules/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==", + "dev": true, "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" + "is-arrayish": "^0.2.1" } }, - "node_modules/formidable": { - "version": "2.1.2", - "license": "MIT", - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" + "node_modules/es-abstract": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.1", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "license": "MIT", + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true, + "peer": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/fresh": { - "version": "0.5.2", - "license": "MIT", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "7.0.1", + "node_modules/es-iterator-helpers": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.4", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">= 0.4" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.4" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9554,2737 +5839,3233 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true }, - "node_modules/fuse.js": { - "version": "3.6.1", - "license": "Apache-2.0", + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/generic-pool": { - "version": "3.9.0", - "license": "MIT", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "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==", + "dev": true, "engines": { - "node": ">= 4" + "node": ">=0.8.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, - "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", + "node_modules/eslint-compat-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", + "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", "dev": true, - "license": "ISC", + "peer": true, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/get-east-asian-width": { - "version": "1.2.0", + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, "engines": { - "node": ">=18" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" } }, - "node_modules/get-func-name": { - "version": "2.0.2", + "node_modules/eslint-config-standard-jsx": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz", + "integrity": "sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==", "dev": true, - "license": "MIT", - "engines": { - "node": "*" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "peerDependencies": { + "eslint": "^8.8.0", + "eslint-plugin-react": "^7.28.0" } }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "license": "MIT", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "peer": true, "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/get-package-type": { - "version": "0.1.0", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=8.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/get-stdin": { - "version": "8.0.0", + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, - "license": "MIT", - "peer": true, + "dependencies": { + "debug": "^3.2.7" + }, "engines": { - "node": ">=10" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/get-stream": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8.10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "node_modules/get-tsconfig": { - "version": "4.7.2", + "node_modules/eslint-plugin-es-x": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", + "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.1.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" } }, - "node_modules/get-uri": { - "version": "6.0.2", - "license": "MIT", + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "peer": true, "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.0", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": ">= 14" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/get-uri/node_modules/data-uri-to-buffer": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">= 14" + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "8.1.0", - "license": "MIT", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "ms": "^2.1.1" } }, - "node_modules/github-slugger": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "ISC", + "peer": true, "dependencies": { - "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" + "esutils": "^2.0.2" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { - "is-glob": "^4.0.3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10.13.0" + "node": "*" } }, - "node_modules/globals": { - "version": "11.12.0", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "peer": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/globalthis": { - "version": "1.0.3", + "node_modules/eslint-plugin-n": { + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "define-properties": "^1.1.3" + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "engines": { - "node": ">= 0.4" + "node": ">=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/globby": { - "version": "11.1.0", + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/gopd": { - "version": "1.0.1", - "license": "MIT", + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "*" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/graph-explorer": { - "version": "1.2.0", - "license": "LGPL-2.1", + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "peer": true, "dependencies": { - "@types/n3": "^1.10.4", - "d3-color": "^3.1.0", - "file-saverjs": "~1.3.6", - "lodash": "~4.17.21", - "n3": "~1.16.3", - "rdf-ext": "~0.3.0", - "webcola": "^3.4.0", - "whatwg-fetch": "~2.0.2" + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" }, "peerDependencies": { - "react": "^16.0.0", - "react-dom": "^16.0.0" + "eslint": ">=5.16.0" } }, - "node_modules/graph-explorer/node_modules/n3": { - "version": "1.16.4", - "license": "MIT", + "node_modules/eslint-plugin-node/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, "dependencies": { - "queue-microtask": "^1.1.2", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">=12.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/graph-explorer/node_modules/rdf-ext": { - "version": "0.3.0", - "license": "MIT", + "node_modules/eslint-plugin-node/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, "dependencies": { - "es6-promise": "^3.0.2", - "rdf-graph-array": "^0.3.0", - "rdf-store-inmemory": "^0.3.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT" + "peer": true, + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/graphemer": { - "version": "1.4.0", + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, - "license": "MIT" + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } }, - "node_modules/graphlib": { - "version": "2.1.8", - "license": "MIT", + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "peer": true, "dependencies": { - "lodash": "^4.17.15" + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/grapoi": { - "version": "1.1.0", - "license": "MIT", + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, "dependencies": { - "@rdfjs/namespace": "^2.0.0", - "@rdfjs/term-set": "^2.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/handlebars": { - "version": "4.7.8", - "license": "MIT", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "esutils": "^2.0.2" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">=0.10.0" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/has-bigints": { - "version": "1.0.2", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "license": "MIT", + "peer": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "3.0.0", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "peer": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.2" + "node_modules/eslint-plugin-require-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-require-extensions/-/eslint-plugin-require-extensions-0.1.3.tgz", + "integrity": "sha512-T3c1PZ9PIdI3hjV8LdunfYI8gj017UQjzAnCrxuo3wAjneDbTPHdE3oNWInOjMA+z/aBkUtlW5vC0YepYMZIug==", + "dev": true, + "peer": true, + "engines": { + "node": ">=16" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "eslint": "*" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "license": "MIT", + "node_modules/eslint-plugin-unused-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.1.0.tgz", + "integrity": "sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "6 - 7", + "eslint": "8" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "license": "MIT", + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, + "peer": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "has-symbols": "^1.0.2" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/hasha": { - "version": "5.2.2", + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "peer": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/hasown": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "license": "MIT", + "node_modules/eslint/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==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/hast-util-has-property": { - "version": "3.0.0", - "license": "MIT", + "node_modules/eslint/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==", + "dev": true, + "peer": true + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/hast-util-heading-rank": { - "version": "3.0.0", - "license": "MIT", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/hast-util-is-element": { - "version": "3.0.0", - "license": "MIT", + "node_modules/eslint/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==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0" + "color-name": "~1.1.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/hast-util-parse-selector": { + "node_modules/eslint/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==", + "dev": true, + "peer": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-raw": { - "version": "9.0.1", - "license": "MIT", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-select": { - "version": "6.0.2", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "bcp-47-match": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "css-selector-parser": "^3.0.0", - "devlop": "^1.0.0", - "direction": "^2.0.0", - "hast-util-has-property": "^3.0.0", - "hast-util-to-string": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "not": "^0.1.0", - "nth-check": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/eslint/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==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/hast-util-to-html": { - "version": "9.0.0", - "license": "MIT", + "node_modules/eslint/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==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-raw": "^9.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" + "argparse": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "license": "MIT", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-to-string": { - "version": "3.0.0", - "license": "MIT", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0" + "brace-expansion": "^1.1.7" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "*" } }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "license": "MIT", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hastscript": { - "version": "8.0.0", - "license": "MIT", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "peer": true, "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/he": { - "version": "1.2.0", + "node_modules/eslint/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==", "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/help-me": { - "version": "5.0.0", - "license": "MIT" - }, - "node_modules/hexoid": { - "version": "1.0.0", - "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/hijackresponse": { - "version": "4.0.1", - "license": "ISC" - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/html-escaper": { - "version": "2.0.2", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "MIT" - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", + "peer": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 0.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/http-link-header": { - "version": "1.1.1", - "license": "MIT", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=6.0.0" + "node": ">=4" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.0", - "license": "MIT", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "peer": true, "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "estraverse": "^5.1.0" }, "engines": { - "node": ">= 14" + "node": ">=0.10" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.2", - "license": "MIT", + "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==", + "dev": true, + "peer": true, "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 14" + "node": ">=4.0" } }, - "node_modules/human-id": { - "version": "1.0.2", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "MIT" + "peer": true, + "engines": { + "node": ">=4.0" + } }, - "node_modules/human-signals": { - "version": "2.1.0", + "node_modules/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/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "Apache-2.0", + "peer": true, "engines": { - "node": ">=10.17.0" + "node": ">=0.10.0" } }, - "node_modules/husky": { - "version": "8.0.3", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" + "node": ">= 0.6" } }, - "node_modules/i18n": { - "version": "0.15.1", - "license": "MIT", + "node_modules/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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "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/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, "dependencies": { - "@messageformat/core": "^3.0.0", - "debug": "^4.3.3", - "fast-printf": "^1.6.9", - "make-plural": "^7.0.0", - "math-interval-parser": "^2.0.1", - "mustache": "^4.2.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=16.17" }, "funding": { - "url": "https://github.com/sponsors/mashpie" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" + "node_modules/express-as-promise": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-as-promise/-/express-as-promise-1.2.0.tgz", + "integrity": "sha512-Xx015vpRQ7oYGo0A3NsP0CfsFw0ddrD9aLwV8/MlhnO2ZasnNjwWJcSa1gAb0DFMfmWWrHjJDholXdJPHSUTTw==", + "dev": true, + "dependencies": { + "express": "^4.16.4", + "node-fetch": "^2.6.1" + } }, - "node_modules/ignore": { - "version": "5.3.0", + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, - "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, "engines": { - "node": ">= 4" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", + "node_modules/express/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "ISC" + "dependencies": { + "ms": "2.0.0" + } }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "side-channel": "^1.0.4" }, "engines": { - "node": ">=6" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/express/node_modules/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==", "dev": true, - "license": "MIT", - "peer": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/import-local": { + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "dev": true + }, + "node_modules/external-editor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-content-type-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", + "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==" + }, + "node_modules/fast-copy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", + "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==" + }, + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" + }, + "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/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "@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" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-meta-resolve": { - "version": "2.2.2", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": ">=8.6.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/fast-glob/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==", "dev": true, - "license": "MIT", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=0.8.19" + "node": ">= 6" } }, - "node_modules/indent-string": { - "version": "4.0.0", + "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==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "peer": true + }, + "node_modules/fast-json-stringify": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.12.0.tgz", + "integrity": "sha512-7Nnm9UPa7SfHRbHVA1kJQrGXCRzB7LMlAAqHXQFkEQqueJm1V8owm0FsE/2Do55/4CcdhwiLQERaKomOnKQkyA==", + "dependencies": { + "@fastify/merge-json-schemas": "^0.1.0", + "ajv": "^8.10.0", + "ajv-formats": "^2.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^2.1.0", + "json-schema-ref-resolver": "^1.0.1", + "rfdc": "^1.2.0" } }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", + "node_modules/fast-json-stringify/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "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/inherits": { - "version": "2.0.4", - "license": "ISC" + "node_modules/fast-json-stringify/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/internal-slot": { - "version": "1.0.6", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "license": "MIT", + "peer": true + }, + "node_modules/fast-printf": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", + "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "boolean": "^3.1.4" }, "engines": { - "node": ">= 0.4" + "node": ">=10.0" } }, - "node_modules/internmap": { - "version": "2.0.3", - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/fast-querystring": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "dependencies": { + "fast-decode-uri-component": "^1.0.1" } }, - "node_modules/ip": { - "version": "1.1.8", - "license": "MIT" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", + "node_modules/fast-redact": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", + "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", "engines": { - "node": ">= 0.10" + "node": ">=6" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "dev": true, - "license": "MIT", + "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/fast-uri": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz", + "integrity": "sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==" + }, + "node_modules/fastify": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.26.1.tgz", + "integrity": "sha512-tznA/G55dsxzM5XChBfcvVSloG2ejeeotfPPJSFaWmHyCDVGMpvf3nRNbsCb/JTBF9RmQFBfuujWt3Nphjesng==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@fastify/ajv-compiler": "^3.5.0", + "@fastify/error": "^3.4.0", + "@fastify/fast-json-stringify-compiler": "^4.3.0", + "abstract-logging": "^2.0.1", + "avvio": "^8.3.0", + "fast-content-type-parse": "^1.1.0", + "fast-json-stringify": "^5.8.0", + "find-my-way": "^8.0.0", + "light-my-request": "^5.11.0", + "pino": "^8.17.0", + "process-warning": "^3.0.0", + "proxy-addr": "^2.0.7", + "rfdc": "^1.3.0", + "secure-json-parse": "^2.7.0", + "semver": "^7.5.4", + "toad-cache": "^3.3.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" + "node_modules/fastify-plugin": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", + "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==" }, - "node_modules/is-async-function": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "reusify": "^1.0.4" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "dev": true, - "license": "MIT", + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dependencies": { - "has-bigints": "^1.0.1" + "format": "^0.2.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "dependencies": { - "binary-extensions": "^2.0.0" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": ">=8" + "node": "^12.20 || >= 14.13" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/is-builtin-module": { - "version": "3.2.1", + "node_modules/file-fetch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-fetch/-/file-fetch-2.0.0.tgz", + "integrity": "sha512-zNBKfKZThjf5354uAcfXPMfxwDBiyZluznykkZc1HmMjP3IKKqAydDpDj7MO9oeUD0rVjqyuqhDjDi10blpwRA==", + "dependencies": { + "mime-types": "^2.1.35", + "readable-stream": "^4.4.2", + "stream-chunks": "^1.0.0" + } + }, + "node_modules/file-saverjs": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/file-saverjs/-/file-saverjs-1.3.6.tgz", + "integrity": "sha512-b8Re91Mmhc2i2wRGEhzeBp3Mbv+y/+uZt6Ty5Fld9LNDxS3bzESyvB0a4WTBk8U4vznmFaD5sQtBR90L6W6a0A==" + }, + "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==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "builtin-modules": "^3.3.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "dev": true, - "license": "MIT", + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-core-module": { - "version": "2.13.1", + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, - "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "2.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", + "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==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "call-bind": "^1.0.2" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", + "node_modules/find-cache-dir/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==", "dev": true, - "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/find-my-way": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz", + "integrity": "sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==", "dependencies": { - "has-tostringtag": "^1.0.0" + "fast-deep-equal": "^3.1.3", + "fast-querystring": "^1.0.0", + "safe-regex2": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=14" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "license": "MIT", + "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==", + "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-graph-pointer": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@types/clownface": "^2.0.0" + "node": ">=8" } }, - "node_modules/is-map": { - "version": "2.0.2", + "node_modules/find-yarn-workspace-root2": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", + "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "micromatch": "^4.0.2", + "pkg-dir": "^4.2.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" + "bin": { + "flat": "cli.js" } }, - "node_modules/is-number-object": { - "version": "1.0.7", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } + "peer": true }, - "node_modules/is-plain-obj": { - "version": "1.1.0", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "is-callable": "^1.1.3" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "call-bind": "^1.0.2" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 6" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.x" } }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, - "license": "MIT", + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dependencies": { - "has-tostringtag": "^1.0.0" + "fetch-blob": "^3.1.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12.20.0" } }, - "node_modules/is-subdir": { - "version": "1.2.0", - "dev": true, - "license": "MIT", + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", "dependencies": { - "better-path-resolve": "1.0.0" + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/is-symbol": { - "version": "1.0.4", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "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/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, - "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6 <7 || >=8" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakset": { - "version": "2.0.2", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "dev": true, - "license": "MIT", + "node_modules/fuse.js": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz", + "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isstream": { - "version": "0.1.2", - "license": "MIT" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", + "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==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "append-transform": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": "*" } }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.3", - "dev": true, - "license": "ISC", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-processinfo/node_modules/p-map": { - "version": "3.0.0", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, + "peer": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "node": ">=16" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-reports": { - "version": "3.1.6", + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "resolve-pkg-maps": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, - "node_modules/jackspeak": { - "version": "2.3.6", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "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" }, "engines": { - "node": ">=14" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest": { - "version": "29.7.0", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" + "is-glob": "^4.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=10.13.0" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/jest-changed-files/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "yocto-queue": "^0.1.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { - "color-name": "~1.1.4" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/graph-explorer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/graph-explorer/-/graph-explorer-1.2.0.tgz", + "integrity": "sha512-ZgdyLCJFLd3pouJZPAInJ293/DUmePHvCCaZraMg2IuuCAipoUGU0xCi7NvlWAXBPjeiytPU1qXnCZ9HJOBfXg==", + "dependencies": { + "@types/n3": "^1.10.4", + "d3-color": "^3.1.0", + "file-saverjs": "~1.3.6", + "lodash": "~4.17.21", + "n3": "~1.16.3", + "rdf-ext": "~0.3.0", + "webcola": "^3.4.0", + "whatwg-fetch": "~2.0.2" + }, + "peerDependencies": { + "react": "^16.0.0", + "react-dom": "^16.0.0" } }, - "node_modules/jest-circus/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", + "node_modules/graph-explorer/node_modules/n3": { + "version": "1.16.4", + "resolved": "https://registry.npmjs.org/n3/-/n3-1.16.4.tgz", + "integrity": "sha512-jtC53efM5/q4BYC3qBnegn1MJDKXHH9PEd6gVDNpIicbgXS6gkANz4DdI0jt4aLvza1xSjCcni33riXWvfoEdw==", "dependencies": { - "yocto-queue": "^0.1.0" + "queue-microtask": "^1.1.2", + "readable-stream": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.0" } }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/graph-explorer/node_modules/rdf-ext": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/rdf-ext/-/rdf-ext-0.3.0.tgz", + "integrity": "sha512-4ibT81HvBGEcBwp9rz9HyKEdyPiNRVtRzPQPG5f32wag59nBiopUhA+6lEzAtIzfoITXfr3pnpHcfwYJN3Y4Lg==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "es6-promise": "^3.0.2", + "rdf-graph-array": "^0.3.0", + "rdf-store-inmemory": "^0.3.0" } }, - "node_modules/jest-cli": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "lodash": "^4.17.15" } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/grapoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/grapoi/-/grapoi-1.1.2.tgz", + "integrity": "sha512-FknMk4EPaVroumWDURlAScwr+cYE/e9dVmnTkuhhoghq9PWx2ap+A4+iS37dGoT6mhJbV0O+xgex6lI4c64plQ==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@rdfjs/namespace": "^2.0.0", + "@rdfjs/term-set": "^2.0.0" } }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=10" + "node": ">=0.4.7" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/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==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "has-flag": "^4.0.0" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/jest-diff": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "function-bind": "^1.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@types/hast": "^3.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "node_modules/hast-util-heading-rank": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", + "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", "dependencies": { - "color-name": "~1.1.4" + "@types/hast": "^3.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/jest-diff/node_modules/has-flag": { + "node_modules/hast-util-parse-selector": { "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/hast-util-raw": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz", + "integrity": "sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==", "dependencies": { - "has-flag": "^4.0.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/hast-util-select": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.2.tgz", + "integrity": "sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==", "dependencies": { - "detect-newline": "^3.0.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "bcp-47-match": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "css-selector-parser": "^3.0.0", + "devlop": "^1.0.0", + "direction": "^2.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "not": "^0.1.0", + "nth-check": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-each": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/hast-util-to-html": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz", + "integrity": "sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^9.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "node_modules/hast-util-to-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz", + "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/hast": "^3.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", "dependencies": { - "color-name": "~1.1.4" + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT" + "bin": { + "he": "bin/he" + } }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==" + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", "engines": { "node": ">=8" } }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/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==", "dependencies": { - "has-flag": "^4.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, + "node_modules/http-link-header": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.1.1.tgz", + "integrity": "sha512-mW3N/rTYpCn99s1do0zx6nzFZSwLH9HGfUM4ZqLWJ16ylmYaC2v5eYGqrNTQlByx8AzUgGI+V/32gXPugs1+Sw==", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.0.0" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", + "node_modules/human-id": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", + "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", + "dev": true + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.17.0" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "bin": { + "husky": "lib/bin.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "funding": { + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/i18n": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/i18n/-/i18n-0.15.1.tgz", + "integrity": "sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "@messageformat/core": "^3.0.0", + "debug": "^4.3.3", + "fast-printf": "^1.6.9", + "make-plural": "^7.0.0", + "math-interval-parser": "^2.0.1", + "mustache": "^4.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/mashpie" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 4" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "peer": true, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", + "node_modules/import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.8.19" + } }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { + "node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/jest-message-util": { - "version": "29.7.0", + "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/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", + "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==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/jest-mock": { - "version": "29.7.0", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "builtin-modules": "^3.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "node": ">=6" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "hasown": "^2.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", + "node_modules/is-graph-pointer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-graph-pointer/-/is-graph-pointer-2.1.0.tgz", + "integrity": "sha512-qc9R2PweF7eUoWJ/ggSB5NnJrJuCFInMV/8fvsb8yth7etAk2B5xwXyFnoc9QVrQSzBj2elQx3u9VStZzKM47w==", + "dependencies": { + "@types/clownface": "^2.0.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, - "license": "MIT" + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/p-limit": { - "version": "3.1.0", + "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==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, + "peer": true, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=7.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot": { - "version": "29.7.0", + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" + "better-path-resolve": "1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-snapshot/node_modules/color-convert": { + "node_modules/is-weakmap": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "append-transform": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/jest-util": { - "version": "29.7.0", + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-util/node_modules/has-flag": { + "node_modules/istanbul-lib-report/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-util/node_modules/supports-color": { + "node_modules/istanbul-lib-report/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==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12292,218 +9073,206 @@ "node": ">=8" } }, - "node_modules/jest-validate": { - "version": "29.7.0", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peer": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/jest-changed-files/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">=8" + "node": ">=4.8" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", + "node_modules/jest-changed-files/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, - "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, - "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "pump": "^3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "path-key": "^2.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/jest-changed-files/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/jest-changed-files/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver" } }, - "node_modules/jest-worker": { - "version": "29.7.0", + "node_modules/jest-changed-files/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "shebang-regex": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/jest-changed-files/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/jest-changed-files/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/jest-changed-files/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "isexe": "^2.0.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "bin": { + "which": "bin/which" } }, "node_modules/joycon": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "engines": { "node": ">=10" } @@ -12515,11 +9284,13 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "3.14.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -12530,8 +9301,9 @@ }, "node_modules/jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -12541,71 +9313,86 @@ }, "node_modules/json-buffer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, - "license": "MIT", "peer": true }, "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==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "dev": true, - "license": "MIT" + "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==", + "dev": true + }, + "node_modules/json-schema-ref-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", + "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } }, "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==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, - "license": "ISC" + "peer": true }, "node_modules/json5": { - "version": "2.2.3", - "license": "MIT", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, "bin": { "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" } }, "node_modules/jsonfile": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jsonld": { - "version": "5.2.0", - "license": "BSD-3-Clause", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.2.tgz", + "integrity": "sha512-MwBbq95szLwt8eVQ1Bcfwmgju/Y5P2GdtlHE2ncyfuYjIdEhluUVyj1eudacf1mOkWIoS9GpDBTECqhmq7EOaA==", "dependencies": { - "@digitalbazaar/http-client": "^1.1.0", + "@digitalbazaar/http-client": "^3.4.1", "canonicalize": "^1.0.1", "lru-cache": "^6.0.0", - "rdf-canonize": "^3.0.0" + "rdf-canonize": "^3.4.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/jsonld-context-parser": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonld-context-parser/-/jsonld-context-parser-2.4.0.tgz", + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", "dependencies": { "@types/http-link-header": "^1.0.1", "@types/node": "^18.0.0", @@ -12618,15 +9405,17 @@ } }, "node_modules/jsonld-context-parser/node_modules/@types/node": { - "version": "18.19.3", - "license": "MIT", + "version": "18.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.17.tgz", + "integrity": "sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/jsonld-streaming-parser": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonld-streaming-parser/-/jsonld-streaming-parser-3.3.0.tgz", + "integrity": "sha512-6aWiAsWGZioTB/vNQ3KenREz9ddEOliZoEETi+jLrlL7+vkgMeHjnxyFlGe4UOCU7SVUNPhz/lgLGZjnxgVYtA==", "dependencies": { "@bergos/jsonparse": "^1.4.0", "@rdfjs/types": "*", @@ -12640,42 +9429,18 @@ "readable-stream": "^4.0.0" } }, - "node_modules/jsonld-streaming-parser/node_modules/@types/readable-stream": { - "version": "2.3.15", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/jsonld-streaming-parser/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/jsonld/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonld/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "engines": [ "node >= 0.2.0" - ], - "license": "MIT" + ] }, "node_modules/jsonstream2": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonstream2/-/jsonstream2-3.0.0.tgz", + "integrity": "sha512-8ngq2XB8NjYrpe3+Xtl9lFJl6RoV2dNT4I7iyaHwxUpTBwsj0AlAR7epGfeYVP0z4Z7KxMoSxRgJWrd2jmBT/Q==", "dependencies": { "jsonparse": "1.3.1", "through2": "^3.0.1", @@ -12688,36 +9453,19 @@ "node": ">=5.10.0" } }, - "node_modules/jsonstream2/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jsonstream2/node_modules/through2": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, "node_modules/jsuri": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsuri/-/jsuri-1.3.1.tgz", + "integrity": "sha512-LLdAeqOf88/X0hylAI7oSir6QUsz/8kOW0FcJzzu/SJRfORA/oPHycAOthkNp7eLPlTAbqVDFbqNRHkRVzEA3g==", "engines": { "node": "*" } }, "node_modules/jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "array-includes": "^3.1.6", @@ -12731,8 +9479,9 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "json-buffer": "3.0.1" @@ -12740,46 +9489,50 @@ }, "node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/kleur": { - "version": "3.0.3", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ky": { - "version": "0.25.1", - "license": "MIT", + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sindresorhus/ky?sponsor=1" } }, "node_modules/ky-universal": { - "version": "0.8.2", - "license": "MIT", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", "dependencies": { "abort-controller": "^3.0.0", - "node-fetch": "3.0.0-beta.9" + "node-fetch": "^3.2.10" }, "engines": { - "node": ">=10.17" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" }, "peerDependencies": { - "ky": ">=0.17.0", - "web-streams-polyfill": ">=2.0.0" + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" }, "peerDependenciesMeta": { "web-streams-polyfill": { @@ -12787,248 +9540,111 @@ } } }, - "node_modules/ky-universal/node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/ky-universal/node_modules/fetch-blob": { - "version": "2.1.2", - "license": "MIT", - "engines": { - "node": "^10.17.0 || >=12.3.0" - }, - "peerDependenciesMeta": { - "domexception": { - "optional": true - } - } - }, "node_modules/ky-universal/node_modules/node-fetch": { - "version": "3.0.0-beta.9", - "license": "MIT", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dependencies": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^2.1.1" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": "^10.17 || >=12.3" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/node-fetch" } }, - "node_modules/leven": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "15.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "3.0.0", - "listr2": "8.0.0", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "8.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "8.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "5.0.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "mimic-fn": "^4.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", + "node_modules/light-my-request": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.11.0.tgz", + "integrity": "sha512-qkFCeloXCOMpmEdZ/MV91P8AT4fjwFXWaAFz3lUeStM8RcoM1ks4J/F8r1b3r6y/H4u3ACEJ1T+Gv5bopj7oDA==", + "dependencies": { + "cookie": "^0.5.0", + "process-warning": "^2.0.0", + "set-cookie-parser": "^2.4.1" + } + }, + "node_modules/light-my-request/node_modules/process-warning": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.2.tgz", + "integrity": "sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==" + }, + "node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", "dev": true, - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/lint-staged/node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "15.2.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", + "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", "dev": true, - "license": "ISC", + "dependencies": { + "chalk": "5.3.0", + "commander": "11.1.0", + "debug": "4.3.4", + "execa": "8.0.1", + "lilconfig": "3.0.0", + "listr2": "8.0.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.4" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, "engines": { - "node": ">=14" + "node": ">=18.12.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/listr2": { - "version": "8.0.0", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", + "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", "dev": true, - "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -13042,34 +9658,38 @@ } }, "node_modules/lit": { - "version": "3.1.0", - "license": "BSD-3-Clause", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.2.tgz", + "integrity": "sha512-VZx5iAyMtX7CV4K8iTLdCkMaYZ7ipjJZ0JcSdJ0zIdGxxyurjIn7yuuSxNBD7QmjvcNJwr0JS4cAdAtsy7gZ6w==", "dependencies": { - "@lit/reactive-element": "^2.0.0", - "lit-element": "^4.0.0", - "lit-html": "^3.1.0" + "@lit/reactive-element": "^2.0.4", + "lit-element": "^4.0.4", + "lit-html": "^3.1.2" } }, "node_modules/lit-element": { - "version": "4.0.2", - "license": "BSD-3-Clause", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.4.tgz", + "integrity": "sha512-98CvgulX6eCPs6TyAIQoJZBCQPo80rgXR+dVBs61cstJXqtI+USQZAbA4gFHh6L/mxBx9MrgPLHLsUgDUHAcCQ==", "dependencies": { - "@lit-labs/ssr-dom-shim": "^1.1.2", - "@lit/reactive-element": "^2.0.0", - "lit-html": "^3.1.0" + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.1.2" } }, "node_modules/lit-html": { - "version": "3.1.0", - "license": "BSD-3-Clause", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.2.tgz", + "integrity": "sha512-3OBZSUrPnAHoKJ9AMjRL/m01YJxQMf+TMHanNtTHG68ubjnZxK0RFl102DPzsw4mWnHibfZIBJm3LWCZ/LmMvg==", "dependencies": { "@types/trusted-types": "^2.0.2" } }, "node_modules/load-json-file": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.1.15", @@ -13084,8 +9704,9 @@ }, "node_modules/load-json-file/node_modules/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "error-ex": "^1.3.1", @@ -13095,19 +9716,11 @@ "node": ">=4" } }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/load-json-file/node_modules/type-fest": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "peer": true, "engines": { "node": ">=6" @@ -13115,8 +9728,9 @@ }, "node_modules/load-yaml-file": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz", + "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.13.0", @@ -13127,18 +9741,11 @@ "node": ">=6" } }, - "node_modules/load-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "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==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -13148,7 +9755,8 @@ }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", @@ -13157,32 +9765,38 @@ }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" }, "node_modules/lodash.debounce": { "version": "4.0.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.flattendeep": { "version": "4.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/lodash.startcase": { "version": "4.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -13196,8 +9810,9 @@ }, "node_modules/log-symbols/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==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13210,8 +9825,9 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13225,8 +9841,9 @@ }, "node_modules/log-symbols/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==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13236,21 +9853,24 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-symbols/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/log-symbols/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==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13260,8 +9880,9 @@ }, "node_modules/log-update": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^6.2.0", "cli-cursor": "^4.0.0", @@ -13276,24 +9897,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/log-update/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13303,8 +9911,9 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13314,8 +9923,9 @@ }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, - "license": "MIT", "dependencies": { "get-east-asian-width": "^1.0.0" }, @@ -13328,8 +9938,9 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" @@ -13343,8 +9954,9 @@ }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -13355,20 +9967,10 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/type-fest": { - "version": "3.13.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/longest-streak": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -13376,7 +9978,8 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -13387,23 +9990,28 @@ }, "node_modules/loupe": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.0.tgz", + "integrity": "sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/magic-string": { - "version": "0.30.5", - "license": "MIT", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -13413,8 +10021,9 @@ }, "node_modules/make-dir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -13425,28 +10034,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "peer": true - }, "node_modules/make-plural": { "version": "7.3.0", - "license": "Unicode-DFS-2016" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } + "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.3.0.tgz", + "integrity": "sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw==" }, "node_modules/map-obj": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -13456,7 +10053,8 @@ }, "node_modules/markdown-table": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -13464,14 +10062,16 @@ }, "node_modules/math-interval-parser": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/math-interval-parser/-/math-interval-parser-2.0.1.tgz", + "integrity": "sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==", "engines": { "node": ">=0.10.0" } }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", @@ -13485,7 +10085,8 @@ }, "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { "node": ">=12" }, @@ -13495,7 +10096,8 @@ }, "node_modules/mdast-util-from-markdown": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -13517,7 +10119,8 @@ }, "node_modules/mdast-util-frontmatter": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", @@ -13533,7 +10136,8 @@ }, "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { "node": ">=12" }, @@ -13543,7 +10147,8 @@ }, "node_modules/mdast-util-gfm": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", @@ -13560,7 +10165,8 @@ }, "node_modules/mdast-util-gfm-autolink-literal": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", @@ -13575,7 +10181,8 @@ }, "node_modules/mdast-util-gfm-footnote": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", @@ -13590,7 +10197,8 @@ }, "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", @@ -13603,7 +10211,8 @@ }, "node_modules/mdast-util-gfm-table": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", @@ -13618,7 +10227,8 @@ }, "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", @@ -13631,8 +10241,9 @@ } }, "node_modules/mdast-util-phrasing": { - "version": "4.0.0", - "license": "MIT", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "dependencies": { "@types/mdast": "^4.0.0", "unist-util-is": "^6.0.0" @@ -13643,8 +10254,9 @@ } }, "node_modules/mdast-util-to-hast": { - "version": "13.0.2", - "license": "MIT", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", + "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -13653,7 +10265,8 @@ "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0" + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", @@ -13662,7 +10275,8 @@ }, "node_modules/mdast-util-to-markdown": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -13680,7 +10294,8 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dependencies": { "@types/mdast": "^4.0.0" }, @@ -13691,15 +10306,18 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/meow": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", + "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", "dev": true, - "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -13722,8 +10340,9 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -13733,29 +10352,37 @@ }, "node_modules/merge-descriptors": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true }, "node_modules/merge-stream": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "node_modules/merge2": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } }, "node_modules/micromark": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "funding": [ { "type": "GitHub Sponsors", @@ -13766,7 +10393,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -13789,6 +10415,8 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", "funding": [ { "type": "GitHub Sponsors", @@ -13799,7 +10427,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", @@ -13821,7 +10448,8 @@ }, "node_modules/micromark-extension-frontmatter": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -13835,7 +10463,8 @@ }, "node_modules/micromark-extension-gfm": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", "micromark-extension-gfm-footnote": "^2.0.0", @@ -13853,7 +10482,8 @@ }, "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", @@ -13867,7 +10497,8 @@ }, "node_modules/micromark-extension-gfm-footnote": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", @@ -13885,7 +10516,8 @@ }, "node_modules/micromark-extension-gfm-strikethrough": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", @@ -13901,7 +10533,8 @@ }, "node_modules/micromark-extension-gfm-table": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -13916,7 +10549,8 @@ }, "node_modules/micromark-extension-gfm-tagfilter": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "dependencies": { "micromark-util-types": "^2.0.0" }, @@ -13927,7 +10561,8 @@ }, "node_modules/micromark-extension-gfm-task-list-item": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -13942,6 +10577,8 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "funding": [ { "type": "GitHub Sponsors", @@ -13952,7 +10589,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -13961,6 +10597,8 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "funding": [ { "type": "GitHub Sponsors", @@ -13971,7 +10609,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -13981,6 +10618,8 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "funding": [ { "type": "GitHub Sponsors", @@ -13991,7 +10630,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -13999,6 +10637,8 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "funding": [ { "type": "GitHub Sponsors", @@ -14009,7 +10649,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -14019,6 +10658,8 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "funding": [ { "type": "GitHub Sponsors", @@ -14029,7 +10670,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -14038,7 +10678,9 @@ } }, "node_modules/micromark-util-character": { - "version": "2.0.1", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "funding": [ { "type": "GitHub Sponsors", @@ -14049,7 +10691,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -14057,6 +10698,8 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "funding": [ { "type": "GitHub Sponsors", @@ -14067,13 +10710,14 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "node_modules/micromark-util-classify-character": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "funding": [ { "type": "GitHub Sponsors", @@ -14084,7 +10728,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -14093,6 +10736,8 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "funding": [ { "type": "GitHub Sponsors", @@ -14103,7 +10748,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -14111,6 +10755,8 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "funding": [ { "type": "GitHub Sponsors", @@ -14121,13 +10767,14 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "node_modules/micromark-util-decode-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", "funding": [ { "type": "GitHub Sponsors", @@ -14138,7 +10785,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -14148,6 +10794,8 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "funding": [ { "type": "GitHub Sponsors", @@ -14157,11 +10805,12 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], - "license": "MIT" + ] }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "funding": [ { "type": "GitHub Sponsors", @@ -14171,11 +10820,12 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], - "license": "MIT" + ] }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "funding": [ { "type": "GitHub Sponsors", @@ -14186,13 +10836,14 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } }, "node_modules/micromark-util-resolve-all": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "funding": [ { "type": "GitHub Sponsors", @@ -14203,13 +10854,14 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" } }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "funding": [ { "type": "GitHub Sponsors", @@ -14220,7 +10872,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", @@ -14229,6 +10880,8 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", "funding": [ { "type": "GitHub Sponsors", @@ -14239,7 +10892,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", @@ -14249,6 +10901,8 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "funding": [ { "type": "GitHub Sponsors", @@ -14258,11 +10912,12 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], - "license": "MIT" + ] }, "node_modules/micromark-util-types": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "funding": [ { "type": "GitHub Sponsors", @@ -14272,12 +10927,13 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], - "license": "MIT" + ] }, "node_modules/micromatch": { "version": "4.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -14287,25 +10943,28 @@ } }, "node_modules/mime": { - "version": "1.6.0", - "license": "MIT", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, "node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { "mime-db": "1.52.0" }, @@ -14314,43 +10973,52 @@ } }, "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/min-indent": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minimist-options": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, - "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -14362,39 +11030,34 @@ }, "node_modules/minipass": { "version": "7.0.4", - "dev": true, - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mixme": { "version": "0.5.10", + "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.10.tgz", + "integrity": "sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8.0.0" } }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "peer": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node_modules/mnemonist": { + "version": "0.39.6", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.6.tgz", + "integrity": "sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==", + "dependencies": { + "obliterator": "^2.0.1" } }, "node_modules/mocha": { - "version": "10.2.0", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -14403,13 +11066,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -14424,24 +11086,22 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mocha/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==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14454,13 +11114,15 @@ }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/mocha/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==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -14469,8 +11131,9 @@ }, "node_modules/mocha/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==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14480,18 +11143,21 @@ }, "node_modules/mocha/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/mocha/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -14501,8 +11167,9 @@ }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -14515,55 +11182,47 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mocha/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/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==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -14573,8 +11232,9 @@ }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -14587,8 +11247,9 @@ }, "node_modules/mocha/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==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -14596,23 +11257,17 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -14625,8 +11280,9 @@ }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -14639,8 +11295,9 @@ }, "node_modules/mocha/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==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14652,8 +11309,9 @@ }, "node_modules/mocha/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==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14666,8 +11324,9 @@ }, "node_modules/mocha/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==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14682,8 +11341,9 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -14699,65 +11359,35 @@ }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/moo": { "version": "0.5.2", - "license": "BSD-3-Clause" - }, - "node_modules/morgan": { - "version": "1.10.0", - "license": "MIT", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/morgan/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/morgan/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/morgan/node_modules/on-finished": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" }, "node_modules/ms": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mustache": { "version": "4.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", "bin": { "mustache": "bin/mustache" } }, "node_modules/n3": { "version": "1.17.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/n3/-/n3-1.17.2.tgz", + "integrity": "sha512-BxSM52wYFqXrbQQT5WUEzKUn6qpYV+2L4XZLfn3Gblz2kwZ09S+QxC33WNdVEQy2djenFL8SNkrjejEKlvI6+Q==", "dependencies": { "queue-microtask": "^1.1.2", "readable-stream": "^4.0.0" @@ -14767,9 +11397,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.3", - "dev": true, - "license": "MIT", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -14779,42 +11415,33 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "license": "MIT" - }, - "node_modules/netmask": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "node_modules/nock": { - "version": "13.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "propagate": "^2.0.0" - }, - "engines": { - "node": ">= 10.13" - } + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node_modules/node-domexception": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "funding": [ { "type": "github", @@ -14825,36 +11452,34 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-fetch": { - "version": "3.3.2", - "license": "MIT", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "whatwg-url": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "4.x || >=6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, "node_modules/node-preload": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, - "license": "MIT", "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -14864,23 +11489,40 @@ }, "node_modules/node-releases": { "version": "2.0.14", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true }, "node_modules/nodeify-fetch": { - "version": "3.1.0", - "license": "MIT", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nodeify-fetch/-/nodeify-fetch-2.2.2.tgz", + "integrity": "sha512-4b1Jysy9RGyya0wJpseTQyxUgSbx6kw9ocHTY0OFRXWlxa2Uy5PrSo/P/nwoUn59rBR9YKty2kd7g4LKXmsZVA==", "dependencies": { - "lodash": "^4.17.21", - "node-fetch": "^3.2.10", - "readable-stream": "^4.2.0", - "stream-chunks": "^1.0.0" + "@zazuko/node-fetch": "^2.6.6", + "concat-stream": "^1.6.0", + "cross-fetch": "^3.0.4", + "readable-error": "^1.0.0", + "readable-stream": "^3.5.0" + } + }, + "node_modules/nodeify-fetch/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/nodemon": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.3.tgz", + "integrity": "sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ==", "dev": true, - "license": "MIT", "dependencies": { "chokidar": "^3.5.2", "debug": "^4", @@ -14904,21 +11546,48 @@ "url": "https://opencollective.com/nodemon" } }, + "node_modules/nodemon/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nodemon/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/nopt": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, - "license": "MIT", "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" } }, "node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -14928,37 +11597,58 @@ }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "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==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/not": { - "version": "0.1.0" + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", + "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==" }, "node_modules/npm-run-path": { - "version": "4.0.1", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nth-check": { "version": "2.1.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dependencies": { "boolbase": "^1.0.0" }, @@ -14968,8 +11658,9 @@ }, "node_modules/nyc": { "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -15008,8 +11699,9 @@ }, "node_modules/nyc/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==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15022,8 +11714,9 @@ }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -15032,8 +11725,9 @@ }, "node_modules/nyc/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==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15043,45 +11737,49 @@ }, "node_modules/nyc/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/nyc/node_modules/convert-source-map": { "version": "1.9.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "node_modules/nyc/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/nyc/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/nyc/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/nyc/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", + "node_modules/nyc/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==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, "engines": { "node": ">=8" } }, "node_modules/nyc/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==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -15094,8 +11792,9 @@ }, "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -15105,16 +11804,24 @@ }, "node_modules/nyc/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/nyc/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/nyc/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==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -15126,8 +11833,9 @@ }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -15139,13 +11847,15 @@ }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -15165,30 +11875,35 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -15204,8 +11919,9 @@ }, "node_modules/object.entries": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -15218,8 +11934,9 @@ }, "node_modules/object.fromentries": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -15234,21 +11951,24 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", + "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "array.prototype.filter": "^1.0.3", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0" } }, "node_modules/object.hasown": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "define-properties": "^1.2.0", @@ -15260,8 +11980,9 @@ }, "node_modules/object.values": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -15275,16 +11996,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + }, "node_modules/on-exit-leak-free": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", "engines": { "node": ">=14.0.0" } }, "node_modules/on-finished": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, "dependencies": { "ee-first": "1.1.1" }, @@ -15292,29 +12021,23 @@ "node": ">= 0.8" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -15322,8 +12045,9 @@ }, "node_modules/optionator": { "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", @@ -15339,26 +12063,29 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/outdent": { "version": "0.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", + "dev": true }, "node_modules/oxigraph": { - "version": "0.3.22", - "dev": true, - "license": "MIT OR Apache-2.0" + "version": "0.4.0-alpha.3", + "resolved": "https://registry.npmjs.org/oxigraph/-/oxigraph-0.4.0-alpha.3.tgz", + "integrity": "sha512-eUkIU8dnAwoNixUO7zBO8eZooedIJJ6rIpBPWy99d+EKXrcwOa0pEryQc/BqIofpxJbHAMIXA+sZaXVfoqNx8g==" }, "node_modules/p-filter": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, - "license": "MIT", "dependencies": { "p-map": "^2.0.0" }, @@ -15366,10 +12093,20 @@ "node": ">=8" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "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==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -15382,8 +12119,9 @@ }, "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==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -15393,15 +12131,17 @@ }, "node_modules/p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/p-queue": { "version": "8.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz", + "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==", "dependencies": { "eventemitter3": "^5.0.1", "p-timeout": "^6.1.2" @@ -15415,7 +12155,8 @@ }, "node_modules/p-timeout": { "version": "6.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", + "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", "engines": { "node": ">=14.16" }, @@ -15425,45 +12166,18 @@ }, "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==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/pac-proxy-agent": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "degenerator": "^5.0.0", - "ip": "^1.1.8", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/package-hash": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, - "license": "ISC", "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -15481,8 +12195,9 @@ }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "callsites": "^3.0.0" @@ -15493,8 +12208,9 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -15510,7 +12226,8 @@ }, "node_modules/parse5": { "version": "7.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dependencies": { "entities": "^4.4.0" }, @@ -15520,49 +12237,48 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, "engines": { "node": ">= 0.8" } }, - "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==", - "peer": true - }, "node_modules/path-exists": { "version": "4.0.0", - "license": "MIT", + "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", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-scurry": { "version": "1.10.1", - "dev": true, - "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -15575,40 +12291,47 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.1.0", - "dev": true, - "license": "ISC", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "engines": { "node": "14 || >=16.14" } }, "node_modules/path-to-regexp": { "version": "0.1.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathval": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14.16" } }, "node_modules/picocolors": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -15618,8 +12341,9 @@ }, "node_modules/pidtree": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -15629,22 +12353,24 @@ }, "node_modules/pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pino": { - "version": "8.17.1", - "license": "MIT", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.19.0.tgz", + "integrity": "sha512-oswmokxkav9bADfJ2ifrvfHUwad6MLp73Uat0IkQWY3iAw5xTRoznXbXksZs8oaOUMpmhVWD+PZogNzllWpJaA==", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "v1.1.0", "pino-std-serializers": "^6.0.0", - "process-warning": "^2.0.0", + "process-warning": "^3.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", @@ -15657,7 +12383,8 @@ }, "node_modules/pino-abstract-transport": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", + "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", "dependencies": { "readable-stream": "^4.0.0", "split2": "^4.0.0" @@ -15665,7 +12392,8 @@ }, "node_modules/pino-pretty": { "version": "10.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.1.tgz", + "integrity": "sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g==", "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", @@ -15688,20 +12416,14 @@ }, "node_modules/pino-std-serializers": { "version": "6.2.2", - "license": "MIT" - }, - "node_modules/pirates": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" }, "node_modules/pkg-conf": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "find-up": "^3.0.0", @@ -15713,8 +12435,9 @@ }, "node_modules/pkg-conf/node_modules/find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "locate-path": "^3.0.0" @@ -15725,8 +12448,9 @@ }, "node_modules/pkg-conf/node_modules/locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "p-locate": "^3.0.0", @@ -15738,8 +12462,9 @@ }, "node_modules/pkg-conf/node_modules/p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "p-limit": "^2.0.0" @@ -15750,8 +12475,9 @@ }, "node_modules/pkg-conf/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -15759,8 +12485,9 @@ }, "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==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -15768,8 +12495,19 @@ "node": ">=8" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.32", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "funding": [ { "type": "opencollective", @@ -15784,7 +12522,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -15794,26 +12531,11 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.7", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/preferred-pm": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.2.tgz", + "integrity": "sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^5.0.0", "find-yarn-workspace-root2": "1.2.16", @@ -15826,8 +12548,9 @@ }, "node_modules/preferred-pm/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -15841,8 +12564,9 @@ }, "node_modules/preferred-pm/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -15855,8 +12579,9 @@ }, "node_modules/preferred-pm/node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -15869,8 +12594,9 @@ }, "node_modules/preferred-pm/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -15883,8 +12609,9 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">= 0.8.0" @@ -15892,8 +12619,9 @@ }, "node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -15904,45 +12632,24 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/process": { "version": "0.11.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "license": "MIT" + "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/process-on-spawn": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", "dev": true, - "license": "MIT", "dependencies": { "fromentries": "^1.2.0" }, @@ -15951,28 +12658,19 @@ } }, "node_modules/process-warning": { - "version": "2.3.2", - "license": "MIT" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" }, "node_modules/promise-the-world": { "version": "1.0.1", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } + "resolved": "https://registry.npmjs.org/promise-the-world/-/promise-the-world-1.0.1.tgz", + "integrity": "sha512-eAXctcYU0ksq9YT5LT0N3e8yvdEAp0aYuzIiaJo9CpZwga45i08MW05GMXZIow7N05d1o4EBoR5hjkb7jhzqKg==" }, "node_modules/prop-types": { "version": "15.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "peer": true, "dependencies": { "loose-envify": "^1.4.0", @@ -15980,34 +12678,24 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "license": "MIT", - "peer": true - }, - "node_modules/propagate": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/property-information": { - "version": "6.4.0", - "license": "MIT", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz", + "integrity": "sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/proto-fetch": { - "version": "1.0.0", - "license": "MIT" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proto-fetch/-/proto-fetch-2.0.0.tgz", + "integrity": "sha512-QuhQVYN9WxCbJmfp/s3HLofEaDr/Jkq873++mo126XB2h+TFcKIGCIxeORH5ww9MOi2uP1SfWy4EgQH5PuBfdQ==" }, "node_modules/proxy-addr": { "version": "2.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -16016,47 +12704,22 @@ "node": ">= 0.10" } }, - "node_modules/proxy-agent": { - "version": "6.3.1", - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" - }, "node_modules/pseudomap": { "version": "1.0.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true }, "node_modules/pstree.remy": { "version": "1.1.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true }, "node_modules/pump": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -16064,29 +12727,16 @@ }, "node_modules/punycode": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } }, - "node_modules/pure-rand": { - "version": "6.0.4", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, "node_modules/qs": { - "version": "6.11.0", - "license": "BSD-3-Clause", + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", "dependencies": { "side-channel": "^1.0.4" }, @@ -16116,6 +12766,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -16129,52 +12781,44 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/quick-format-unescaped": { "version": "4.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" }, "node_modules/quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/range-parser": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, "engines": { "node": ">= 0.6" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/rdf-canonize": { "version": "3.4.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", "dependencies": { "setimmediate": "^1.0.5" }, @@ -16184,14 +12828,16 @@ }, "node_modules/rdf-data-factory": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-data-factory/-/rdf-data-factory-1.1.2.tgz", + "integrity": "sha512-TfQD63Lokabd09ES1jAtKK8AA6rkr9rwyUBGo6olOt1CE0Um36CUQIqytyf0am2ouBPR0l7SaHxCiMcPGHkt1A==", "dependencies": { "@rdfjs/types": "*" } }, "node_modules/rdf-dataset-ext": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-dataset-ext/-/rdf-dataset-ext-1.1.0.tgz", + "integrity": "sha512-CH85RfRKN9aSlbju8T7aM8hgCSWMBsh2eh/tGxUUtWMN+waxi6iFDt8/r4PAEmKaEA82guimZJ4ISbmJ2rvWQg==", "dependencies": { "rdf-canonize": "^3.0.0", "readable-stream": "3 - 4" @@ -16199,7 +12845,8 @@ }, "node_modules/rdf-ext": { "version": "2.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-ext/-/rdf-ext-2.5.1.tgz", + "integrity": "sha512-5vpufBzbsjebcyRiS1tcnwhI12au2crufprrGJ6QNmx8A2n4ThiadayhG4GzzdJSq9I0dYuRMoXdZTjDemCINQ==", "dependencies": { "@rdfjs/data-model": "^2.0.1", "@rdfjs/dataset": "^2.0.1", @@ -16222,73 +12869,86 @@ "readable-stream": "^4.3.0" } }, - "node_modules/rdf-ext/node_modules/@rdfjs/data-model": { - "version": "2.0.1", - "license": "MIT", - "bin": { - "rdfjs-data-model-test": "bin/test.js" - } - }, "node_modules/rdf-ext/node_modules/@rdfjs/dataset": { - "version": "2.0.1", - "license": "MIT", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/dataset/-/dataset-2.0.2.tgz", + "integrity": "sha512-6YJx+5n5Uxzq9dd9I0GGcIo6eopZOPfcsAfxSGX5d+YBzDgVa1cbtEBFnaPyPKiQsOm4+Cr3nwypjpg02YKPlA==", "bin": { "rdfjs-dataset-test": "bin/test.js" } }, - "node_modules/rdf-ext/node_modules/@rdfjs/environment": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/rdf-ext/node_modules/file-fetch": { + "node_modules/rdf-ext/node_modules/@rdfjs/to-ntriples": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-2.0.0.tgz", + "integrity": "sha512-nDhpfhx6W6HKsy4HjyLp3H1nbrX1CiUCWhWQwKcYZX1s9GOjcoQTwY7GUUbVec0hzdJDQBR6gnjxtENBDt482Q==" + }, + "node_modules/rdf-ext/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dependencies": { - "mime-types": "^2.1.35", - "readable-stream": "^4.4.2", - "stream-chunks": "^1.0.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/rdf-ext/node_modules/proto-fetch": { - "version": "2.0.0", - "license": "MIT" + "node_modules/rdf-ext/node_modules/nodeify-fetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodeify-fetch/-/nodeify-fetch-3.1.0.tgz", + "integrity": "sha512-ZV81vM//sEgTgXwVZlOONzcOCdTGQ53mV65FVSNXgPQHa8oCwRLtLbnGxL/1S/Yw90bcXUDKMz00jEnaeazo+A==", + "dependencies": { + "lodash": "^4.17.21", + "node-fetch": "^3.2.10", + "readable-stream": "^4.2.0", + "stream-chunks": "^1.0.0" + } }, "node_modules/rdf-graph-abstract": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-graph-abstract/-/rdf-graph-abstract-0.3.0.tgz", + "integrity": "sha512-5FBWirDfy6bCfpobfbMuwWkoes55VntKFADAVWubjPVuSgNfjmpKCUs/H3+6wgA0hc02GP0pe3l4WHm6Imtc0g==", + "deprecated": "This package is no longer maintained", "dependencies": { "rdf-normalize": "^0.3.0" } }, "node_modules/rdf-graph-abstract/node_modules/rdf-normalize": { "version": "0.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/rdf-normalize/-/rdf-normalize-0.3.0.tgz", + "integrity": "sha512-g4a6jx1Ntz+HBzC6MrwaJNiCnPkb0Tml63s+gIyQVUPpDXbHRNKDS3qUShHpZx/3kSHHgb5/4AkufdlM5aXXIg==" }, "node_modules/rdf-graph-array": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-graph-array/-/rdf-graph-array-0.3.0.tgz", + "integrity": "sha512-R2SsyRrMreEu+pG/SLtHkI4DAMJknZ74sJM8H/dCZbFkTj/vW4lNr014I2Yx0jmajIygO6YwueQJzbopwAn2Ew==", + "deprecated": "This package is no longer maintained", "dependencies": { "rdf-graph-abstract": "^0.3.0" } }, - "node_modules/rdf-js": { - "version": "4.0.2", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*" - } - }, "node_modules/rdf-normalize": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/rdf-normalize/-/rdf-normalize-1.0.0.tgz", + "integrity": "sha512-1ocjoxovKc4+AyS4Tgtroay5R33yrtM2kQnAGvVaB0iGSRggukHxMJW0y8xTR7TwKZabS+7oMSQNMdbu/qTtCQ==" }, "node_modules/rdf-store-abstract": { "version": "0.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/rdf-store-abstract/-/rdf-store-abstract-0.3.0.tgz", + "integrity": "sha512-xvoiPo/XGX3E64QRLpprLGjOiR8m6OR75/9CSChBDY8B/e6Lml28YQN23s20v2X6zq8rg1psjwwHbTXWyocfug==", + "deprecated": "This package is no longer maintained" }, "node_modules/rdf-store-inmemory": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-store-inmemory/-/rdf-store-inmemory-0.3.0.tgz", + "integrity": "sha512-1bRNoe6XTT6lcoyaY3BEvOF8jyapg9bRHQzgcz3Qj589qE0zAgEyhcj1AM1gJpw1iouyMyJWr3vgUgFW0agU9g==", + "deprecated": "This package is deprecated and got replaced by rdf-store-dataset", "dependencies": { "rdf-ext": "^0.3.0", "rdf-store-abstract": "^0.3.0" @@ -16296,7 +12956,8 @@ }, "node_modules/rdf-store-inmemory/node_modules/rdf-ext": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-ext/-/rdf-ext-0.3.0.tgz", + "integrity": "sha512-4ibT81HvBGEcBwp9rz9HyKEdyPiNRVtRzPQPG5f32wag59nBiopUhA+6lEzAtIzfoITXfr3pnpHcfwYJN3Y4Lg==", "dependencies": { "es6-promise": "^3.0.2", "rdf-graph-array": "^0.3.0", @@ -16305,15 +12966,28 @@ }, "node_modules/rdf-transform-triple-to-quad": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdf-transform-triple-to-quad/-/rdf-transform-triple-to-quad-1.0.2.tgz", + "integrity": "sha512-cr8wgJcj+SvPLichNhWhUTyXHcoD1EVgajVmvbtwYbMRw479KAaW03TTviQaJAUqgcWzIzkrWLtWkrY2FgwryQ==", "dependencies": { "@rdfjs/data-model": "^1.1.2", "readable-stream": "^3.5.0" } }, + "node_modules/rdf-transform-triple-to-quad/node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", + "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", + "dependencies": { + "@rdfjs/types": ">=1.0.1" + }, + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } + }, "node_modules/rdf-transform-triple-to-quad/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16323,13 +12997,10 @@ "node": ">= 6" } }, - "node_modules/rdfjs": { - "version": "0.0.1", - "license": "ISC" - }, "node_modules/rdfxml-streaming-parser": { "version": "2.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rdfxml-streaming-parser/-/rdfxml-streaming-parser-2.4.0.tgz", + "integrity": "sha512-f+tdI1wxOiPzMbFWRtOwinwPsqac0WIN80668yFKcVdFCSTGOWTM70ucQGUSdDZZo7pce/UvZgV0C3LDj0P7tg==", "dependencies": { "@rdfjs/types": "*", "@rubensworks/saxes": "^6.0.1", @@ -16341,21 +13012,10 @@ "validate-iri": "^1.0.0" } }, - "node_modules/rdfxml-streaming-parser/node_modules/@types/readable-stream": { - "version": "2.3.15", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/rdfxml-streaming-parser/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, "node_modules/react": { "version": "16.14.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "peer": true, "dependencies": { "loose-envify": "^1.1.0", @@ -16368,7 +13028,8 @@ }, "node_modules/react-dom": { "version": "16.14.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", "peer": true, "dependencies": { "loose-envify": "^1.1.0", @@ -16381,14 +13042,16 @@ } }, "node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true }, "node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -16401,8 +13064,9 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -16417,24 +13081,27 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/read-yaml-file": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.6.1", @@ -16445,28 +13112,23 @@ "node": ">=6" } }, - "node_modules/read-yaml-file/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/readable-error": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-error/-/readable-error-1.0.0.tgz", + "integrity": "sha512-CLnInu5bUphmFiZ3pD/BC6+Cg4/BzK6ZMvWfd0b2QMzYo159Z/f/nVFQ9L5IeMrqUxy0EFsp3XJ+BRfLfY13IQ==", "dependencies": { "readable-stream": "^2.3.3" } }, "node_modules/readable-error/node_modules/isarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/readable-error/node_modules/readable-stream": { "version": "2.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -16479,18 +13141,21 @@ }, "node_modules/readable-error/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/readable-error/node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/readable-stream": { - "version": "4.4.2", - "license": "MIT", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -16504,14 +13169,16 @@ }, "node_modules/readable-to-readable": { "version": "0.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-to-readable/-/readable-to-readable-0.1.3.tgz", + "integrity": "sha512-G+0kz01xJM/uTuItKcqC73cifW8S6CZ7tp77NLN87lE5mrSU+GC8geoSAlfmp0NocmXckQ7W8s8ns73HYsIA3w==", "dependencies": { "readable-stream": "^3.6.0" } }, "node_modules/readable-to-readable/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16523,8 +13190,9 @@ }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -16534,15 +13202,17 @@ }, "node_modules/real-require": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", "engines": { "node": ">= 12.13.0" } }, "node_modules/redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -16551,38 +13221,26 @@ "node": ">=8" } }, - "node_modules/redis": { - "version": "4.6.11", - "license": "MIT", - "workspaces": [ - "./packages/*" - ], - "dependencies": { - "@redis/bloom": "1.2.0", - "@redis/client": "1.5.12", - "@redis/graph": "1.1.1", - "@redis/json": "1.0.6", - "@redis/search": "1.1.6", - "@redis/time-series": "1.0.5" - } - }, "node_modules/redux": { "version": "4.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "dependencies": { "@babel/runtime": "^7.9.2" } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", + "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "get-intrinsic": "^1.2.3", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -16593,42 +13251,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -16639,8 +13276,9 @@ }, "node_modules/regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -16649,47 +13287,15 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/register-service-worker": { "version": "1.7.2", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } + "resolved": "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.7.2.tgz", + "integrity": "sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A==" }, "node_modules/rehype-autolink-headings": { "version": "7.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz", + "integrity": "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==", "dependencies": { "@types/hast": "^3.0.0", "@ungap/structured-clone": "^1.0.0", @@ -16705,7 +13311,8 @@ }, "node_modules/rehype-slug": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", + "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", "dependencies": { "@types/hast": "^3.0.0", "github-slugger": "^2.0.0", @@ -16720,7 +13327,8 @@ }, "node_modules/rehype-stringify": { "version": "10.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", "dependencies": { "@types/hast": "^3.0.0", "hast-util-to-html": "^9.0.0", @@ -16733,12 +13341,14 @@ }, "node_modules/relative-to-absolute-iri": { "version": "1.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/relative-to-absolute-iri/-/relative-to-absolute-iri-1.0.7.tgz", + "integrity": "sha512-Xjyl4HmIzg2jzK/Un2gELqbcE8Fxy85A/aLSHE6PE/3+OGsFwmKVA1vRyGaz6vLWSqLDMHA+5rjD/xbibSQN1Q==" }, "node_modules/release-zalgo": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, - "license": "ISC", "dependencies": { "es6-error": "^4.0.1" }, @@ -16748,7 +13358,8 @@ }, "node_modules/remark-frontmatter": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-frontmatter": "^2.0.0", @@ -16762,7 +13373,8 @@ }, "node_modules/remark-gfm": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-gfm": "^3.0.0", @@ -16778,7 +13390,8 @@ }, "node_modules/remark-parse": { "version": "11.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", @@ -16791,8 +13404,9 @@ } }, "node_modules/remark-rehype": { - "version": "11.0.0", - "license": "MIT", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -16807,7 +13421,8 @@ }, "node_modules/remark-stringify": { "version": "11.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", @@ -16820,12 +13435,14 @@ }, "node_modules/remove-accents": { "version": "0.4.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.4.tgz", + "integrity": "sha512-EpFcOa/ISetVHEXqu+VwI96KZBmq+a8LJnGkaeFw45epGlxIZz5dhEEnNZMsQXgORu3qaMoLX4qJCzOik6ytAg==" }, "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==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -16840,13 +13457,15 @@ }, "node_modules/require-main-filename": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "node_modules/resolve": { "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -16859,45 +13478,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/restore-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -16909,23 +13512,63 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/reusify": { "version": "1.0.4", - "license": "MIT", + "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" } }, "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -16938,10 +13581,14 @@ }, "node_modules/robust-predicates": { "version": "3.0.2", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "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==", + "dev": true, "funding": [ { "type": "github", @@ -16956,22 +13603,23 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rw": { "version": "1.3.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/safe-array-concat": { - "version": "1.0.1", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -16984,6 +13632,8 @@ }, "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", @@ -16997,44 +13647,60 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-identifier": { "version": "0.4.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" }, "node_modules/safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-regex2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", + "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", + "dependencies": { + "ret": "~0.2.0" + } + }, "node_modules/safe-stable-stringify": { "version": "2.4.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", "engines": { "node": ">=10" } }, "node_modules/safer-buffer": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sax": { "version": "1.3.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" }, "node_modules/scheduler": { "version": "0.19.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "peer": true, "dependencies": { "loose-envify": "^1.1.0", @@ -17043,11 +13709,13 @@ }, "node_modules/secure-json-parse": { "version": "2.7.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" }, "node_modules/semver": { - "version": "7.5.4", - "license": "ISC", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -17058,23 +13726,11 @@ "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/send": { "version": "0.18.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -17096,29 +13752,49 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/separate-stream": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/separate-stream/-/separate-stream-1.0.1.tgz", + "integrity": "sha512-UKFCzmddW2akOq40YdGehllv5gu6AD3y6nGSVuZuwI1kify2CiW7Zwsxx4ioaNLxx4LZaZMkcjdICHtSxpEpaA==", "dependencies": { "readable-stream": "^3.6.0" } }, "node_modules/separate-stream/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -17130,15 +13806,18 @@ }, "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==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-static": { "version": "1.15.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -17151,30 +13830,41 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" }, "node_modules/set-function-length": { - "version": "1.1.1", - "license": "MIT", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, - "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17182,16 +13872,18 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { "version": "1.2.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shebang-command": { "version": "2.0.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -17201,33 +13893,45 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.4", - "license": "MIT", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/simple-update-notifier": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -17235,23 +13939,20 @@ "node": ">=10" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -17265,8 +13966,9 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -17274,18 +13976,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, "node_modules/smartwrap": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/smartwrap/-/smartwrap-2.0.2.tgz", + "integrity": "sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==", "dev": true, - "license": "MIT", "dependencies": { "array.prototype.flat": "^1.2.3", "breakword": "^1.0.5", @@ -17303,8 +13998,9 @@ }, "node_modules/smartwrap/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==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17317,8 +14013,9 @@ }, "node_modules/smartwrap/node_modules/cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -17327,8 +14024,9 @@ }, "node_modules/smartwrap/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==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -17338,26 +14036,30 @@ }, "node_modules/smartwrap/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/smartwrap/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/smartwrap/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/smartwrap/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==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -17369,8 +14071,9 @@ }, "node_modules/smartwrap/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -17382,13 +14085,15 @@ }, "node_modules/smartwrap/node_modules/y18n": { "version": "4.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/smartwrap/node_modules/yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -17406,71 +14111,39 @@ "node": ">=8" } }, - "node_modules/socks": { - "version": "2.7.1", - "license": "MIT", - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "socks": "^2.7.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks/node_modules/ip": { - "version": "2.0.0", - "license": "MIT" - }, "node_modules/sonic-boom": { - "version": "3.7.0", - "license": "MIT", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.0.tgz", + "integrity": "sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==", "dependencies": { "atomic-sleep": "^1.0.0" } }, "node_modules/sortablejs": { - "version": "1.15.1", - "license": "MIT" + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz", + "integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==" }, "node_modules/source-map": { "version": "0.6.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.0.2", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/space-separated-tokens": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -17478,7 +14151,8 @@ }, "node_modules/sparql-http-client": { "version": "2.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sparql-http-client/-/sparql-http-client-2.4.2.tgz", + "integrity": "sha512-b7KBjs3BEJVQJAbWeaTx4EdBSOU1L0KfWLVgnkeRyBUoSTI8F1kTHuX7wzme/+UlfCS2zYsKGdpma5DwdaVRBQ==", "dependencies": { "@rdfjs/data-model": "^1.1.2", "@rdfjs/parser-n3": "^1.1.3", @@ -17493,60 +14167,49 @@ "separate-stream": "^1.0.0" } }, + "node_modules/sparql-http-client/node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@rdfjs/data-model/-/data-model-1.3.4.tgz", + "integrity": "sha512-iKzNcKvJotgbFDdti7GTQDCYmL7GsGldkYStiP0K8EYtN7deJu5t7U11rKTz+nR7RtesUggT+lriZ7BakFv8QQ==", + "dependencies": { + "@rdfjs/types": ">=1.0.1" + }, + "bin": { + "rdfjs-data-model-test": "bin/test.js" + } + }, "node_modules/sparql-http-client/node_modules/@rdfjs/parser-n3": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@rdfjs/parser-n3/-/parser-n3-1.1.4.tgz", + "integrity": "sha512-PUKSNlfD2Zq3GcQZuOF2ndfrLbc+N96FUe2gNIzARlR2er0BcOHBHEFUJvVGg1Xmsg3hVKwfg0nwn1JZ7qKKMw==", "dependencies": { "@rdfjs/data-model": "^1.0.1", "@rdfjs/sink": "^1.0.2", "n3": "^1.3.5", - "readable-stream": "^3.6.0", - "readable-to-readable": "^0.1.0" - } - }, - "node_modules/sparql-http-client/node_modules/@rdfjs/sink": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/sparql-http-client/node_modules/@rdfjs/to-ntriples": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/sparql-http-client/node_modules/concat-stream": { - "version": "1.6.2", - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "readable-stream": "^3.6.0", + "readable-to-readable": "^0.1.0" } }, - "node_modules/sparql-http-client/node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "license": "MIT", - "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/sparql-http-client/node_modules/@rdfjs/sink": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rdfjs/sink/-/sink-1.0.3.tgz", + "integrity": "sha512-2KfYa8mAnptRNeogxhQqkWNXqfYVWO04jQThtXKepySrIwYmz83+WlevQtA4VDLFe+kFd2TwgL29ekPe5XVUfA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/sparql-http-client/node_modules/@rdfjs/to-ntriples": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rdfjs/to-ntriples/-/to-ntriples-1.0.2.tgz", + "integrity": "sha512-ngw5XAaGHjgGiwWWBPGlfdCclHftonmbje5lMys4G2j4NvfExraPIuRZgjSnd5lg4dnulRVUll8tRbgKO+7EDA==", + "engines": { + "node": ">=6" } }, "node_modules/sparql-http-client/node_modules/get-stream": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" }, @@ -17557,24 +14220,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sparql-http-client/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/sparql-http-client/node_modules/nodeify-fetch": { - "version": "2.2.2", - "license": "MIT", - "dependencies": { - "@zazuko/node-fetch": "^2.6.6", - "concat-stream": "^1.6.0", - "cross-fetch": "^3.0.4", - "readable-error": "^1.0.0", - "readable-stream": "^3.5.0" - } - }, "node_modules/sparql-http-client/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -17584,21 +14233,11 @@ "node": ">= 6" } }, - "node_modules/sparql-http-client/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/sparql-http-client/node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/spawn-wrap": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -17611,10 +14250,24 @@ "node": ">=8" } }, + "node_modules/spawn-wrap/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/spawn-wrap/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==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -17627,16 +14280,24 @@ }, "node_modules/spawn-wrap/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/spawn-wrap/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/spawndamnit": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz", + "integrity": "sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^5.1.0", "signal-exit": "^3.0.2" @@ -17644,8 +14305,9 @@ }, "node_modules/spawndamnit/node_modules/cross-spawn": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, - "license": "MIT", "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -17654,8 +14316,9 @@ }, "node_modules/spawndamnit/node_modules/lru-cache": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -17663,8 +14326,9 @@ }, "node_modules/spawndamnit/node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -17674,16 +14338,24 @@ }, "node_modules/spawndamnit/node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/spawndamnit/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/spawndamnit/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -17693,36 +14365,53 @@ }, "node_modules/spawndamnit/node_modules/yallist": { "version": "2.1.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, - "license": "CC0-1.0" + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } }, "node_modules/split-on-first": { "version": "1.1.0", @@ -17734,43 +14423,29 @@ }, "node_modules/split2": { "version": "4.2.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "engines": { "node": ">= 10.x" } }, "node_modules/splitpanes": { "version": "3.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-3.1.5.tgz", + "integrity": "sha512-r3Mq2ITFQ5a2VXLOy4/Sb2Ptp7OfEO8YIbhVJqJXoFc9hc5nTXXkCvtVDjIGbvC0vdE7tse+xTM9BMjsszP6bw==", "funding": { "url": "https://github.com/sponsors/antoniandre" } }, "node_modules/sprintf-js": { "version": "1.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/standard": { "version": "17.1.0", + "resolved": "https://registry.npmjs.org/standard/-/standard-17.1.0.tgz", + "integrity": "sha512-jaDqlNSzLtWYW4lvQmU0EnxWMUGQiwHasZl5ZEIwx3S/ijZDjZOzs1y1QqKwKs5vqnFpGtizo4NOYX2s0Voq/g==", "dev": true, "funding": [ { @@ -17786,7 +14461,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "peer": true, "dependencies": { "eslint": "^8.41.0", @@ -17808,6 +14482,8 @@ }, "node_modules/standard-engine": { "version": "15.1.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-15.1.0.tgz", + "integrity": "sha512-VHysfoyxFu/ukT+9v49d4BRXIokFRZuH3z1VRxzFArZdjSCFpro6rEIU3ji7e4AoAtuSfKBkiOmsrDqKW5ZSRw==", "dev": true, "funding": [ { @@ -17823,7 +14499,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "peer": true, "dependencies": { "get-stdin": "^8.0.0", @@ -17835,10 +14510,22 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/standard/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/standard/node_modules/eslint-plugin-es": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "eslint-utils": "^2.0.0", @@ -17856,8 +14543,9 @@ }, "node_modules/standard/node_modules/eslint-plugin-n": { "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "builtins": "^5.0.1", @@ -17881,8 +14569,9 @@ }, "node_modules/standard/node_modules/eslint-plugin-n/node_modules/eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" @@ -17899,16 +14588,31 @@ }, "node_modules/standard/node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "Apache-2.0", "peer": true, "engines": { "node": ">=10" } }, + "node_modules/standard/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/statuses": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { "node": ">= 0.8" } @@ -17923,7 +14627,8 @@ }, "node_modules/stream-browserify": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -17931,7 +14636,8 @@ }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -17943,7 +14649,8 @@ }, "node_modules/stream-chunks": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stream-chunks/-/stream-chunks-1.0.0.tgz", + "integrity": "sha512-/G+kinLx3pKXChtuko82taA4gZo56zFG2b2BbhmugmS0TUPBL40c5b2vjonS+gAHYK/cSKM9m0WTvAJYgDUeNw==", "dependencies": { "buffer": "^6.0.3", "string_decoder": "^1.3.0" @@ -17951,8 +14658,9 @@ }, "node_modules/stream-transform": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", + "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==", "dev": true, - "license": "MIT", "dependencies": { "mixme": "^0.5.1" } @@ -17967,15 +14675,17 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "license": "MIT", + "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/string-argv": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.19" } @@ -17985,35 +14695,67 @@ "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/string-replace-stream": { "version": "0.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-replace-stream/-/string-replace-stream-0.0.2.tgz", + "integrity": "sha512-uwlvT/ngCNxcYxY4DofQJsdgW/NE8KAamujI86VsrCOm43z+qCim6dwCUF2KYLgNDSALRBm4rCbZkKXVy9CkVQ==", "dependencies": { "through2": "^2.0.0" } }, + "node_modules/string-replace-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/string-replace-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "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/string-replace-stream/node_modules/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==" + }, + "node_modules/string-replace-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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-replace-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, "node_modules/string-to-stream": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-3.0.1.tgz", + "integrity": "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==", "dependencies": { "readable-stream": "^3.4.0" } }, "node_modules/string-to-stream/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -18024,9 +14766,10 @@ } }, "node_modules/string-width": { - "version": "7.0.0", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -18042,8 +14785,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "dev": true, - "license": "MIT", + "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", @@ -18055,21 +14798,22 @@ }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, - "license": "MIT", + "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/string-width/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -18079,8 +14823,9 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -18093,8 +14838,9 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.2", @@ -18113,8 +14859,9 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -18129,8 +14876,9 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -18142,8 +14890,9 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -18155,7 +14904,8 @@ }, "node_modules/stringify-entities": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" @@ -18167,8 +14917,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -18179,8 +14929,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -18189,25 +14939,40 @@ } }, "node_modules/strip-bom": { - "version": "4.0.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/strip-final-newline": { - "version": "2.0.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-indent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, - "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -18217,7 +14982,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "engines": { "node": ">=8" }, @@ -18227,7 +14993,8 @@ }, "node_modules/superagent": { "version": "8.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", @@ -18246,7 +15013,8 @@ }, "node_modules/superagent/node_modules/mime": { "version": "2.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "bin": { "mime": "cli.js" }, @@ -18269,8 +15037,9 @@ }, "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==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -18280,8 +15049,9 @@ }, "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==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -18291,20 +15061,17 @@ }, "node_modules/tapable": { "version": "2.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "engines": { "node": ">=6" } }, - "node_modules/tbbt-ld": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/term-size": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -18314,77 +15081,102 @@ }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, "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==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/thread-stream": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", + "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", "dependencies": { "real-require": "^0.2.0" } }, + "node_modules/throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==", + "dev": true + }, "node_modules/throttle-debounce": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", + "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", "engines": { "node": ">=10" } }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "node_modules/through2": { - "version": "2.0.5", - "license": "MIT", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "inherits": "^2.0.4", + "readable-stream": "2 || 3" } }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "license": "MIT", - "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/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { - "safe-buffer": "~5.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -18392,22 +15184,20 @@ "node": ">=0.6.0" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -18415,17 +15205,27 @@ "node": ">=8.0" } }, + "node_modules/toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "engines": { + "node": ">=12" + } + }, "node_modules/toidentifier": { "version": "1.0.1", - "license": "MIT", + "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/touch": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, - "license": "ISC", "dependencies": { "nopt": "~1.0.10" }, @@ -18435,7 +15235,8 @@ }, "node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/trifid": { "resolved": "packages/trifid", @@ -18450,7 +15251,7 @@ "link": true }, "node_modules/trifid-handler-sparql": { - "resolved": "packages/handler-sparql", + "resolved": "packages/deprecated-handler-sparql", "link": true }, "node_modules/trifid-plugin-graph-explorer": { @@ -18471,7 +15272,8 @@ }, "node_modules/trim-lines": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -18479,98 +15281,40 @@ }, "node_modules/trim-newlines": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/trough": { - "version": "2.1.0", - "license": "MIT", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/ts-api-utils": { - "version": "1.0.3", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", "dev": true, - "license": "MIT", "optional": true, "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" } }, - "node_modules/ts-morph": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-21.0.1.tgz", - "integrity": "sha512-dbDtVdEAncKctzrVZ+Nr7kHpHkv+0JDJb2MjjpBaj8bFeCkePU9rHfMklmhuLFnpeq/EJZk2IhStY6NzqgjOkg==", - "peer": true, - "dependencies": { - "@ts-morph/common": "~0.22.0", - "code-block-writer": "^12.0.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/tsconfig-paths": { - "version": "3.14.2", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@types/json5": "^0.0.29", @@ -18579,35 +15323,11 @@ "strip-bom": "^3.0.0" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "license": "0BSD" - }, "node_modules/tty-table": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.3.tgz", + "integrity": "sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2", "csv": "^5.5.3", @@ -18626,8 +15346,9 @@ }, "node_modules/tty-table/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==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18640,8 +15361,9 @@ }, "node_modules/tty-table/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18655,8 +15377,9 @@ }, "node_modules/tty-table/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==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18666,29 +15389,24 @@ }, "node_modules/tty-table/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/tty-table/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/tty-table/node_modules/kleur": { - "version": "4.1.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/tty-table/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==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18698,8 +15416,9 @@ }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "prelude-ls": "^1.2.1" @@ -18709,20 +15428,25 @@ } }, "node_modules/type-component": { - "version": "0.0.1" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/type-component/-/type-component-0.0.1.tgz", + "integrity": "sha512-mDZRBQS2yZkwRQKfjJvQ8UIYJeBNNWCq+HBNstl9N5s9jZ4dkVYXEGkVPsSCEh5Ld4JM1kmrZTzjnrqSAIQ7dw==" }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { - "version": "0.21.3", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "peer": true, "engines": { "node": ">=10" }, @@ -18732,7 +15456,9 @@ }, "node_modules/type-is": { "version": "1.6.18", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -18742,13 +15468,14 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -18756,8 +15483,9 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -18772,15 +15500,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.1.tgz", + "integrity": "sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", "for-each": "^0.3.3", + "gopd": "^1.0.1", "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -18791,8 +15521,9 @@ }, "node_modules/typed-array-length": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -18804,19 +15535,23 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { "version": "5.3.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -18827,7 +15562,8 @@ }, "node_modules/uglify-js": { "version": "3.17.4", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -18838,8 +15574,9 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -18852,12 +15589,14 @@ }, "node_modules/undefsafe": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, "node_modules/undici": { - "version": "5.28.2", - "license": "MIT", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -18867,47 +15606,13 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/unified": { "version": "11.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -18924,7 +15629,8 @@ }, "node_modules/unified/node_modules/is-plain-obj": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "engines": { "node": ">=12" }, @@ -18934,7 +15640,8 @@ }, "node_modules/unist-util-is": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dependencies": { "@types/unist": "^3.0.0" }, @@ -18945,7 +15652,8 @@ }, "node_modules/unist-util-position": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dependencies": { "@types/unist": "^3.0.0" }, @@ -18956,7 +15664,8 @@ }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dependencies": { "@types/unist": "^3.0.0" }, @@ -18967,7 +15676,8 @@ }, "node_modules/unist-util-visit": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", @@ -18980,7 +15690,8 @@ }, "node_modules/unist-util-visit-parents": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -18992,20 +15703,26 @@ }, "node_modules/universalify": { "version": "0.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -19021,7 +15738,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -19035,40 +15751,40 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "peer": true - }, "node_modules/v8-to-istanbul": { "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, - "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -19080,12 +15796,14 @@ }, "node_modules/validate-iri": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/validate-iri/-/validate-iri-1.0.1.tgz", + "integrity": "sha512-gLXi7351CoyVVQw8XE5sgpYawRKatxE7kj/xmCxXOZS1kMdtcqC0ILIqLuVEVnAUQSL/evOGG3eQ+8VgbdnstA==" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -19093,15 +15811,18 @@ }, "node_modules/vary": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/version-guard": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/version-guard/-/version-guard-1.1.1.tgz", + "integrity": "sha512-MGQLX89UxmYHgDvcXyjBI0cbmoW+t/dANDppNPrno64rYr8nH4SHSuElQuSYdXGEs0mUzdQe1BY+FhVPNsAmJQ==", "dev": true, - "license": "0BSD", "peer": true, "engines": { "node": ">=0.10.48" @@ -19109,7 +15830,8 @@ }, "node_modules/vfile": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", @@ -19122,7 +15844,8 @@ }, "node_modules/vfile-location": { "version": "5.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" @@ -19134,7 +15857,8 @@ }, "node_modules/vfile-message": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" @@ -19144,22 +15868,16 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vhost": { - "version": "3.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/vue": { - "version": "3.3.11", - "license": "MIT", + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz", + "integrity": "sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==", "dependencies": { - "@vue/compiler-dom": "3.3.11", - "@vue/compiler-sfc": "3.3.11", - "@vue/runtime-dom": "3.3.11", - "@vue/server-renderer": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-dom": "3.4.19", + "@vue/compiler-sfc": "3.4.19", + "@vue/runtime-dom": "3.4.19", + "@vue/server-renderer": "3.4.19", + "@vue/shared": "3.4.19" }, "peerDependencies": { "typescript": "*" @@ -19172,7 +15890,8 @@ }, "node_modules/vue-router": { "version": "4.2.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", "dependencies": { "@vue/devtools-api": "^6.5.0" }, @@ -19183,40 +15902,36 @@ "vue": "^3.2.0" } }, - "node_modules/walker": { - "version": "1.0.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/web-namespaces": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "license": "MIT", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "engines": { "node": ">= 8" } }, "node_modules/webcola": { "version": "3.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/webcola/-/webcola-3.4.0.tgz", + "integrity": "sha512-4BiLXjXw3SJHo3Xd+rF+7fyClT6n7I+AR6TkBqyQ4kTsePSAMDLRCXY1f3B/kXJeP9tYn4G1TblxTO+jAt0gaw==", "dependencies": { "d3-dispatch": "^1.0.3", "d3-drag": "^1.0.4", @@ -19226,11 +15941,13 @@ }, "node_modules/webcola/node_modules/d3-dispatch": { "version": "1.0.6", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" }, "node_modules/webcola/node_modules/d3-drag": { "version": "1.2.5", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", "dependencies": { "d3-dispatch": "1", "d3-selection": "1" @@ -19238,34 +15955,41 @@ }, "node_modules/webcola/node_modules/d3-path": { "version": "1.0.9", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" }, "node_modules/webcola/node_modules/d3-selection": { "version": "1.4.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" }, "node_modules/webcola/node_modules/d3-shape": { "version": "1.3.7", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "dependencies": { "d3-path": "1" } }, "node_modules/webcola/node_modules/d3-timer": { "version": "1.0.10", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" }, "node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/whatwg-fetch": { "version": "2.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" }, "node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "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" @@ -19273,8 +15997,8 @@ }, "node_modules/which": { "version": "2.0.2", - "dev": true, - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { "isexe": "^2.0.0" }, @@ -19287,8 +16011,9 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -19302,8 +16027,9 @@ }, "node_modules/which-builtin-type": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "function.prototype.name": "^1.1.5", @@ -19328,8 +16054,9 @@ }, "node_modules/which-collection": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "is-map": "^2.0.1", @@ -19343,13 +16070,15 @@ }, "node_modules/which-module": { "version": "2.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true }, "node_modules/which-pm": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", + "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", "dev": true, - "license": "MIT", "dependencies": { "load-yaml-file": "^0.2.0", "path-exists": "^4.0.0" @@ -19359,15 +16088,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -19378,17 +16108,20 @@ }, "node_modules/wordwrap": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, "node_modules/workerpool": { "version": "6.2.1", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true }, "node_modules/wrap-ansi": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -19404,8 +16137,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "dev": true, - "license": "MIT", + "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", @@ -19420,8 +16153,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -19434,8 +16167,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", - "dev": true, - "license": "MIT", + "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" }, @@ -19445,26 +16178,26 @@ }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "dev": true, - "license": "MIT", + "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/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", - "dev": true, - "license": "MIT", + "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", @@ -19476,8 +16209,9 @@ }, "node_modules/wrap-ansi/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -19487,8 +16221,9 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -19498,8 +16233,9 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -19512,24 +16248,229 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { - "version": "4.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/wsrun": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/wsrun/-/wsrun-5.2.4.tgz", + "integrity": "sha512-akv3WtKBohdHsD/5uqhYRHw6GXeCXe87FsSg28Szq+2cpoqRW2SY4yPfm1D0za1cS6MgNy5hPgzS5SqYJaGUxg==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.1", + "chalk": "^2.3.0", + "glob": "^7.1.2", + "jest-changed-files": "^24.9.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "split": "^1.0.1", + "throat": "^4.1.0", + "yargs": "^13.0.0" + }, + "bin": { + "wsrun": "bin/wsrun.js" + } + }, + "node_modules/wsrun/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/wsrun/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/wsrun/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/wsrun/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wsrun/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/wsrun/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wsrun/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/wsrun/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/wsrun/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, "node_modules/xdg-basedir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -19537,8 +16478,9 @@ }, "node_modules/xml2js": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "dev": true, - "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -19549,23 +16491,26 @@ }, "node_modules/xml2js-xpath": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/xml2js-xpath/-/xml2js-xpath-0.13.0.tgz", + "integrity": "sha512-OYlPs548WaCC8F/IfyzvyHVkwl9Z/+2cxNaOKK5Bc1rm7PTiUIgze9JWvTpFnYJkvHtb6cam+EcOQH8HJv7qYg==", "dev": true, - "license": "ISC", "dependencies": { "lodash": "^4.17.21" } }, "node_modules/xmlbuilder": { "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0" } }, "node_modules/xmlbuilder2": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", + "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", "dependencies": { "@oozcitak/dom": "1.15.10", "@oozcitak/infra": "1.0.8", @@ -19578,39 +16523,44 @@ }, "node_modules/xmlchars": { "version": "2.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, "node_modules/xtend": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "2.3.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "engines": { "node": ">= 14" } }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -19626,8 +16576,9 @@ }, "node_modules/yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -19638,8 +16589,9 @@ }, "node_modules/yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -19652,8 +16604,9 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -19663,8 +16616,9 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -19674,29 +16628,33 @@ }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/yargs/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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/yargs/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==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -19708,24 +16666,17 @@ }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "engines": { "node": ">=10" }, @@ -19735,7 +16686,8 @@ }, "node_modules/zwitch": { "version": "2.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -19743,11 +16695,11 @@ }, "packages/ckan": { "name": "@zazuko/trifid-plugin-ckan", - "version": "2.4.3", + "version": "3.0.0", "license": "UNLICENSED", "dependencies": { "@tpluscode/rdf-string": "^1.1.3", - "@zazuko/env": "^1.11.0", + "@zazuko/env": "^2.0.6", "@zazuko/prefixes": "^2.1.1", "dotenv": "^16.3.1", "is-graph-pointer": "^2.1.0", @@ -19755,93 +16707,28 @@ "xmlbuilder2": "^3.1.1" }, "devDependencies": { - "c8": "^8.0.1", + "@types/node": "^20.11.16", + "c8": "^9.1.0", "chai": "^5.0.3", "chai-subset": "^1.6.0", - "mocha": "^10.2.0", - "oxigraph": "^0.3.22", - "trifid-core": "^2.7.1", - "typescript": "5.3.3", - "xml2js": "^0.6.2", - "xml2js-xpath": "^0.13.0" - } - }, - "packages/core": { - "name": "trifid-core", - "version": "2.7.1", - "license": "MIT", - "dependencies": { - "absolute-url": "^1.2.2", - "ajv": "^8.12.0", - "camouflage-rewrite": "^1.5.1", - "commander": "^12.0.0", - "cookie-parser": "^1.4.6", - "cors": "^2.8.5", - "express": "^4.18.2", - "handlebars": "^4.7.8", - "json5": "^2.2.3", - "lodash": "^4.17.21", - "pino": "^8.17.1", - "pino-pretty": "^10.3.1", - "vhost": "^3.0.2", - "yaml": "^2.3.2" - }, - "bin": { - "trifid-core": "server.js" - }, - "devDependencies": { - "@babel/core": "^7.22.17", - "@babel/preset-env": "^7.23.6", - "@jest/globals": "^29.7.0", - "@types/express": "^4.17.20", - "@types/node": "^20.10.6", - "babel-jest": "^29.7.0", - "jest": "^29.7.0", - "nodemon": "^3.0.1", - "path-scurry": "^1.10.1", - "rimraf": "^5.0.5", - "supertest": "^6.3.4", - "typescript": "5.3.3" - } - }, - "packages/core/node_modules/ajv": { - "version": "8.12.0", - "license": "MIT", - "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" + "mocha": "^10.2.0", + "rimraf": "^5.0.5", + "trifid-core": "^2.7.1", + "trifid-handler-fetch": "^2.0.1", + "typescript": "^5.3.3", + "xml2js": "^0.6.2", + "xml2js-xpath": "^0.13.0" } }, - "packages/core/node_modules/brace-expansion": { - "version": "2.0.1", + "packages/ckan/node_modules/@types/node": { + "version": "20.11.17", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "packages/core/node_modules/foreground-child": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "undici-types": "~5.26.4" } }, - "packages/core/node_modules/glob": { + "packages/ckan/node_modules/glob": { "version": "10.3.10", "dev": true, "license": "ISC", @@ -19862,25 +16749,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "packages/core/node_modules/json-schema-traverse": { - "version": "1.0.0", - "license": "MIT" - }, - "packages/core/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/core/node_modules/rimraf": { + "packages/ckan/node_modules/rimraf": { "version": "5.0.5", "dev": true, "license": "ISC", @@ -19897,650 +16766,499 @@ "url": "https://github.com/sponsors/isaacs" } }, - "packages/core/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/entity-renderer": { - "name": "@zazuko/trifid-entity-renderer", - "version": "0.6.3", + "packages/core": { + "name": "trifid-core", + "version": "2.7.1", "license": "MIT", "dependencies": { - "@lit-labs/ssr": "^3.1.9", - "@rdfjs/formats-common": "^3.1.0", - "@rdfjs/to-ntriples": "^2.0.0", - "@zazuko/env": "^1.10.1", - "@zazuko/prefixes": "^2.1.0", - "@zazuko/rdf-entity-webcomponent": "^0.7.7", - "express": "^4.18.2", - "hijackresponse": "^5.0.0", - "lit": "^3.0.2", - "p-queue": "^8.0.1", + "@fastify/accepts": "^4.3.0", + "@fastify/cookie": "^9.3.1", + "@fastify/cors": "^9.0.1", + "@fastify/formbody": "^7.4.0", + "@fastify/static": "^7.0.1", + "@fontsource/playfair-display": "^5.0.21", + "@fontsource/roboto": "^5.0.12", + "@rdfjs-elements/formats-pretty": "^0.6.7", + "@types/sparql-http-client": "^2.2.15", + "ajv": "^8.12.0", + "commander": "^12.0.0", + "fastify": "^4.26.1", + "handlebars": "^4.7.8", + "import-meta-resolve": "^4.0.0", + "json5": "^2.2.3", + "lodash": "^4.17.21", + "pino": "^8.17.1", + "pino-pretty": "^10.3.1", "sparql-http-client": "^2.4.2", - "trifid-core": "^2.7.1" - }, - "devDependencies": { - "c8": "^8.0.1", - "mocha": "^10.2.0", - "trifid-handler-fetch": "^2.0.1" - } - }, - "packages/entity-renderer/node_modules/hijackresponse": { - "version": "5.0.0", - "license": "ISC", - "engines": { - "node": ">=8.0.0" - } - }, - "packages/graph-explorer": { - "name": "trifid-plugin-graph-explorer", - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "absolute-url": "^1.2.2", - "express": "^4.18.2", - "graph-explorer": "^1.2.0", - "import-meta-resolve": "^2.2.0" + "string-replace-stream": "^0.0.2", + "yaml": "^2.3.2" }, - "devDependencies": { - "c8": "^8.0.1", - "express-as-promise": "^1.2.0", - "mocha": "^10.2.0" - } - }, - "packages/handler-fetch": { - "name": "trifid-handler-fetch", - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "@rdfjs/express-handler": "^1.2.2", - "@rdfjs/fetch": "^3.1.0", - "@rdfjs/formats-common": "^2.2.0", - "@rdfjs/serializer-jsonld-ext": "^3.0.0", - "file-fetch": "^1.7.0", - "nodeify-fetch": "^3.0.0", - "proto-fetch": "^1.0.0", - "rdf-ext": "^2.0.1", - "rdfjs": "^0.0.1" + "bin": { + "trifid-core": "server.js" }, "devDependencies": { - "bluebird": "^3.7.2", - "express": "^4.18.2", - "mocha": "^10.0.0", - "nock": "^13.2.9", + "@rdfjs/types": "^1.1.0", + "@types/node": "^20.10.6", + "c8": "^9.1.0", + "chai": "^4.4.1", + "chai-as-promised": "^7.1.1", + "mocha": "^10.3.0", + "nodemon": "^3.0.1", + "rimraf": "^5.0.5", "supertest": "^6.3.4", - "tbbt-ld": "^1.1.0" - } - }, - "packages/handler-fetch/node_modules/@rdfjs/formats-common": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "@rdfjs/parser-jsonld": "^1.2.1", - "@rdfjs/parser-n3": "^1.1.4", - "@rdfjs/serializer-jsonld": "^1.2.3", - "@rdfjs/serializer-ntriples": "^1.0.3", - "@rdfjs/sink-map": "^1.0.0", - "rdfxml-streaming-parser": "^1.4.0" - } - }, - "packages/handler-fetch/node_modules/@rdfjs/namespace": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "packages/handler-fetch/node_modules/@rdfjs/parser-jsonld": { - "version": "1.3.1", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^1.3.4", - "@rdfjs/sink": "^1.0.3", - "jsonld-streaming-parser": "^2.4.3", - "readable-stream": "^3.6.0" - } - }, - "packages/handler-fetch/node_modules/@rdfjs/parser-n3": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "@rdfjs/data-model": "^1.0.1", - "@rdfjs/sink": "^1.0.2", - "n3": "^1.3.5", - "readable-stream": "^3.6.0", - "readable-to-readable": "^0.1.0" - } - }, - "packages/handler-fetch/node_modules/@rdfjs/serializer-jsonld": { - "version": "1.2.3", - "license": "MIT", - "dependencies": { - "@rdfjs/namespace": "^1.1.0", - "@rdfjs/sink": "^1.0.3", - "readable-stream": "^3.6.0" - } - }, - "packages/handler-fetch/node_modules/@rdfjs/serializer-ntriples": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "@rdfjs/sink": "^1.0.3", - "@rdfjs/to-ntriples": "^1.0.2", - "readable-to-readable": "^0.1.0" - } - }, - "packages/handler-fetch/node_modules/@rdfjs/sink": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "packages/handler-fetch/node_modules/@rdfjs/sink-map": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "packages/handler-fetch/node_modules/@rdfjs/to-ntriples": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "packages/handler-fetch/node_modules/jsonld-streaming-parser": { - "version": "2.4.3", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "@types/http-link-header": "^1.0.1", - "canonicalize": "^1.0.1", - "http-link-header": "^1.0.2", - "jsonld-context-parser": "^2.1.3", - "jsonparse": "^1.3.1", - "rdf-data-factory": "^1.1.0" - } - }, - "packages/handler-fetch/node_modules/rdfxml-streaming-parser": { - "version": "1.5.0", - "license": "MIT", - "dependencies": { - "@rdfjs/types": "*", - "rdf-data-factory": "^1.1.0", - "relative-to-absolute-iri": "^1.0.0", - "sax": "^1.2.4" - } - }, - "packages/handler-fetch/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "packages/handler-sparql": { - "name": "trifid-handler-sparql", - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "sparql-http-client": "^2.4.2" - }, - "devDependencies": { - "c8": "^8.0.1", - "express-as-promise": "^1.2.0", - "mocha": "^10.2.0" + "typescript": "^5.3.3" } }, - "packages/i18n": { - "name": "trifid-plugin-i18n", - "version": "2.0.1", + "packages/core/node_modules/@types/node": { + "version": "20.11.17", + "dev": true, "license": "MIT", "dependencies": { - "cookie-parser": "^1.4.6", - "express": "^4.18.2", - "i18n": "^0.15.1" - }, - "devDependencies": { - "express-as-promise": "^1.2.0", - "mocha": "^10.2.0", - "nodeify-fetch": "^3.1.0", - "nyc": "^15.1.0" + "undici-types": "~5.26.4" } }, - "packages/iiif": { - "name": "@zazuko/trifid-plugin-iiif", - "version": "0.1.2", + "packages/core/node_modules/ajv": { + "version": "8.12.0", "license": "MIT", "dependencies": { - "@rdfjs/express-handler": "^1.2.2", - "@rdfjs/namespace": "^1.1.0", - "@tpluscode/rdf-string": "^0.2.25", - "clownface": "^1.5.1", - "jsonld": "^8.1.1", - "rdf-ext": "^2.2.0", - "sparql-http-client": "^2.4.0", - "through2": "^4.0.2" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "devDependencies": { - "c8": "^7.13.0", - "express-as-promise": "^1.2.0", - "mocha": "^10.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "packages/iiif/node_modules/@digitalbazaar/http-client": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", - "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", - "dependencies": { - "ky": "^0.33.3", - "ky-universal": "^0.11.0", - "undici": "^5.21.2" - }, + "packages/core/node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14.0" + "node": "*" } }, - "packages/iiif/node_modules/@rdfjs/namespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rdfjs/namespace/-/namespace-1.1.0.tgz", - "integrity": "sha512-utO5rtaOKxk8B90qzaQ0N+J5WrCI28DtfAY/zExCmXE7cOfC5uRI/oMKbLaVEPj2P7uArekt/T4IPATtj7Tjug==", + "packages/core/node_modules/chai": { + "version": "4.4.1", + "dev": true, + "license": "MIT", "dependencies": { - "@rdfjs/data-model": "^1.1.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "packages/iiif/node_modules/@tpluscode/rdf-ns-builders": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tpluscode/rdf-ns-builders/-/rdf-ns-builders-2.0.1.tgz", - "integrity": "sha512-P/pwfjhcj/JOZF3epheHiDd/f9tSkceydQBqBuqThpNX2NIg+4BSgwtG2YfKBa24mmGFfyzN6RVeFclhA8wZBw==", + "packages/core/node_modules/chai-as-promised": { + "version": "7.1.1", + "dev": true, + "license": "WTFPL", "dependencies": { - "@rdf-esm/data-model": "^0.5.4", - "@rdf-esm/namespace": "^0.5.1", - "@rdfjs/types": "*", - "commander": "^7.2.0", - "fs-extra": "^10.0.0" - }, - "bin": { - "rdf-ns-builders": "bin/index.js" + "check-error": "^1.0.2" }, "peerDependencies": { - "@zazuko/rdf-vocabularies": "*", - "clownface": "^1", - "safe-identifier": "^0.4.2", - "ts-morph": ">=11", - "ts-node": ">= 8" + "chai": ">= 2.1.2 < 5" } }, - "packages/iiif/node_modules/@tpluscode/rdf-string": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/@tpluscode/rdf-string/-/rdf-string-0.2.27.tgz", - "integrity": "sha512-+h7FdEE9AwP+B0kA2u0lScWq0+wIfpAcsau6cHZRQfToTCQjq+xo5eyGqzC96SmVfULl73DHys5DE/VOtA3Ewg==", + "packages/core/node_modules/check-error": { + "version": "1.0.3", + "dev": true, + "license": "MIT", "dependencies": { - "@rdf-esm/data-model": "^0.5.3", - "@rdf-esm/term-map": "^0.5.0", - "@rdfjs/types": "*", - "@tpluscode/rdf-ns-builders": "^2", - "@zazuko/rdf-vocabularies": ">=2023.01.17" + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" } }, - "packages/iiif/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==", + "packages/core/node_modules/commander": { + "version": "12.0.0", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "packages/core/node_modules/deep-eql": { + "version": "4.1.3", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "type-detect": "^4.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6" } }, - "packages/iiif/node_modules/c8": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", - "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", + "packages/core/node_modules/glob": { + "version": "10.3.10", "dev": true, + "license": "ISC", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { - "c8": "bin/c8.js" + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=10.12.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "packages/iiif/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==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "packages/core/node_modules/import-meta-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", + "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "packages/iiif/node_modules/clownface": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/clownface/-/clownface-1.5.1.tgz", - "integrity": "sha512-Ko8N/UFsnhEGmPlyE1bUFhbRhVgDbxqlIjcqxtLysc4dWaY0A7iCdg3savhAxs7Lheb7FCygIyRh7ADYZWVIng==", - "dependencies": { - "@rdfjs/data-model": "^1.1.0", - "@rdfjs/namespace": "^1.0.0" - } + "packages/core/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" }, - "packages/iiif/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "packages/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "packages/iiif/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==", - "dev": true + "packages/core/node_modules/loupe": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } }, - "packages/iiif/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "packages/core/node_modules/pathval": { + "version": "1.1.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": "*" } }, - "packages/iiif/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==", - "dev": true - }, - "packages/iiif/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "packages/core/node_modules/rimraf": { + "version": "5.0.5", "dev": true, + "license": "ISC", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "packages/iiif/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "packages/deprecated-handler-sparql": { + "name": "trifid-handler-sparql", + "version": "2.1.1", + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "debug": "^4.3.4", + "sparql-http-client": "^2.4.2" }, - "engines": { - "node": ">=12" + "devDependencies": { + "c8": "^9.1.0", + "express-as-promise": "^1.2.0", + "mocha": "^10.2.0" } }, - "packages/iiif/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==", - "dev": true, - "engines": { - "node": ">=8" + "packages/deprecated-redirects": { + "name": "@zazuko/trifid-handle-redirects", + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sparql-http-client": "^2.4.2" } }, - "packages/iiif/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "packages/entity-renderer": { + "name": "@zazuko/trifid-entity-renderer", + "version": "0.6.3", + "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "@lit-labs/ssr": "^3.1.9", + "@rdfjs/formats-common": "^3.1.0", + "@rdfjs/to-ntriples": "^2.0.0", + "@zazuko/env": "^2.0.6", + "@zazuko/prefixes": "^2.1.0", + "@zazuko/rdf-entity-webcomponent": "^0.7.7", + "lit": "^3.0.2", + "p-queue": "^8.0.1", + "trifid-core": "^2.7.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "devDependencies": { + "@rdfjs/types": "^1.1.0", + "c8": "^9.1.0", + "mocha": "^10.2.0", + "trifid-handler-fetch": "^2.0.1", + "trifid-plugin-yasgui": "^2.2.5" } }, - "packages/iiif/node_modules/jsonld": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.2.tgz", - "integrity": "sha512-MwBbq95szLwt8eVQ1Bcfwmgju/Y5P2GdtlHE2ncyfuYjIdEhluUVyj1eudacf1mOkWIoS9GpDBTECqhmq7EOaA==", + "packages/entity-renderer/node_modules/@rdfjs/formats-common": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "@digitalbazaar/http-client": "^3.4.1", - "canonicalize": "^1.0.1", - "lru-cache": "^6.0.0", - "rdf-canonize": "^3.4.0" + "@rdfjs/parser-jsonld": "^2.0.0", + "@rdfjs/parser-n3": "^2.0.0", + "@rdfjs/serializer-jsonld": "^2.0.0", + "@rdfjs/serializer-ntriples": "^2.0.0", + "@rdfjs/sink-map": "^2.0.0", + "rdfxml-streaming-parser": "^2.2.0" + } + }, + "packages/entity-renderer/node_modules/@rdfjs/to-ntriples": { + "version": "2.0.0", + "license": "MIT" + }, + "packages/graph-explorer": { + "name": "trifid-plugin-graph-explorer", + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "@fastify/static": "^7.0.1", + "graph-explorer": "^1.2.0", + "import-meta-resolve": "^2.2.0" }, - "engines": { - "node": ">=14" + "devDependencies": { + "@types/node": "^20.11.20", + "c8": "^9.1.0", + "mocha": "^10.2.0", + "trifid-core": "^2.7.1" } }, - "packages/iiif/node_modules/ky": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", - "engines": { - "node": ">=14.16" + "packages/graph-explorer/node_modules/@types/node": { + "version": "20.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", + "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "packages/handler-fetch": { + "name": "trifid-handler-fetch", + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "oxigraph": "^0.4.0-alpha.2", + "uuid": "^9.0.1" }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" + "devDependencies": { + "@types/node": "^20.11.16", + "@types/uuid": "^9.0.8", + "c8": "^9.1.0", + "mocha": "^10.2.0", + "rimraf": "^5.0.5", + "typescript": "^5.3.3" } }, - "packages/iiif/node_modules/ky-universal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", - "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "packages/handler-fetch/node_modules/@types/node": { + "version": "20.11.17", + "dev": true, + "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "^3.2.10" + "undici-types": "~5.26.4" + } + }, + "packages/handler-fetch/node_modules/glob": { + "version": "10.3.10", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=14.16" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.31.4", - "web-streams-polyfill": ">=3.2.1" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } + "url": "https://github.com/sponsors/isaacs" } }, - "packages/iiif/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "packages/handler-fetch/node_modules/rimraf": { + "version": "5.0.5", "dev": true, + "license": "ISC", "dependencies": { - "p-locate": "^5.0.0" + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "packages/iiif/node_modules/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==", + "packages/handler-fetch/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "packages/handler-sparql": { + "name": "trifid-handler-sparql", + "version": "2.1.1", + "extraneous": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "debug": "^4.3.4", + "sparql-http-client": "^2.4.2" }, - "engines": { - "node": ">=10" + "devDependencies": { + "c8": "^9.1.0", + "express-as-promise": "^1.2.0", + "mocha": "^10.2.0" } }, - "packages/iiif/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, + "packages/i18n": { + "name": "trifid-plugin-i18n", + "version": "2.0.1", + "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "i18n": "^0.15.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "devDependencies": { + "@types/i18n": "^0.13.10", + "mocha": "^10.2.0", + "nodeify-fetch": "^3.1.0", + "nyc": "^15.1.0", + "trifid-core": "^2.7.1" } }, - "packages/iiif/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "packages/i18n/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "packages/iiif/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "packages/i18n/node_modules/nodeify-fetch": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "lodash": "^4.17.21", + "node-fetch": "^3.2.10", + "readable-stream": "^4.2.0", + "stream-chunks": "^1.0.0" } }, - "packages/iiif/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==", - "dev": true, + "packages/iiif": { + "name": "@zazuko/trifid-plugin-iiif", + "version": "0.1.2", + "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@rdfjs/express-handler": "^1.2.2", + "@rdfjs/namespace": "^1.1.0", + "@tpluscode/rdf-string": "^1.1.3", + "clownface": "^1.5.1", + "jsonld": "^8.3.2", + "rdf-ext": "^2.2.0", + "sparql-http-client": "^2.4.2", + "through2": "^4.0.2" }, - "engines": { - "node": ">=8" + "devDependencies": { + "c8": "^9.1.0", + "mocha": "^10.3.0", + "trifid-core": "^2.7.1" } }, - "packages/iiif/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "packages/iiif/node_modules/@rdfjs/data-model": { + "version": "1.3.4", + "license": "MIT", "dependencies": { - "readable-stream": "3" - } - }, - "packages/iiif/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" + "@rdfjs/types": ">=1.0.1" + }, + "bin": { + "rdfjs-data-model-test": "bin/test.js" } }, - "packages/iiif/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==", - "dev": true, + "packages/iiif/node_modules/@rdfjs/namespace": { + "version": "1.1.0", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@rdfjs/data-model": "^1.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=6" } }, - "packages/iiif/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "packages/iiif/node_modules/clownface": { + "version": "1.5.1", + "license": "MIT", + "dependencies": { + "@rdfjs/data-model": "^1.1.0", + "@rdfjs/namespace": "^1.0.0" + } }, - "packages/iiif/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, + "packages/iiif/node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", "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" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 6" } }, - "packages/iiif/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==", - "dev": true, - "engines": { - "node": ">=10" + "packages/iiif/node_modules/through2": { + "version": "4.0.2", + "license": "MIT", + "dependencies": { + "readable-stream": "3" } }, "packages/markdown-content": { @@ -20559,14 +17277,63 @@ "unified": "^11.0.4" }, "devDependencies": { - "c8": "^8.0.1", + "@types/node": "^20.11.16", + "c8": "^9.1.0", "mocha": "^10.2.0", + "rimraf": "^5.0.5", "trifid-core": "^2.7.1" } }, + "packages/markdown-content/node_modules/@types/node": { + "version": "20.11.17", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "packages/markdown-content/node_modules/glob": { + "version": "10.3.10", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/markdown-content/node_modules/rimraf": { + "version": "5.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "packages/redirects": { "name": "@zazuko/trifid-handle-redirects", "version": "0.1.3", + "extraneous": true, "license": "MIT", "dependencies": { "debug": "^4.3.4", @@ -20578,8 +17345,20 @@ "version": "1.2.0", "license": "MIT", "dependencies": { - "@zazuko/sparql-proxy": "^2.6.8", - "proxy-agent": "^6.3.1" + "string-replace-stream": "^0.0.2", + "trifid-core": "^2.7.1" + }, + "devDependencies": { + "@types/node": "^20.11.24" + } + }, + "packages/sparql-proxy/node_modules/@types/node": { + "version": "20.11.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", + "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" } }, "packages/spex": { @@ -20587,15 +17366,14 @@ "version": "1.1.4", "license": "Apache-2.0", "dependencies": { + "@fastify/static": "^7.0.1", "@zazuko/spex": "^0.1.20", - "absolute-url": "^1.2.2", - "express": "^4.18.2", "import-meta-resolve": "^3.0.0" }, "devDependencies": { - "c8": "^8.0.1", + "c8": "^9.1.0", "mocha": "^10.2.0", - "supertest": "^6.3.4" + "trifid-core": "^2.7.1" } }, "packages/spex/node_modules/import-meta-resolve": { @@ -20614,10 +17392,8 @@ "@zazuko/trifid-handle-redirects": "^0.1.3", "@zazuko/trifid-plugin-sparql-proxy": "^1.2.0", "commander": "^12.0.0", - "morgan": "^1.10.0", "trifid-core": "^2.7.1", "trifid-handler-fetch": "^2.0.1", - "trifid-handler-sparql": "^2.1.1", "trifid-plugin-graph-explorer": "^1.0.2", "trifid-plugin-i18n": "^2.0.1", "trifid-plugin-spex": "^1.1.4", @@ -20627,21 +17403,27 @@ "trifid": "server.js" } }, + "packages/trifid/node_modules/commander": { + "version": "12.0.0", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "packages/yasgui": { "name": "trifid-plugin-yasgui", "version": "2.2.6", "license": "MIT", "dependencies": { + "@fastify/static": "^7.0.1", "@openlayers-elements/bundle": "^0.1.0", "@zazuko/yasgui": "^4.2.34", - "express": "^4.18.2", "import-meta-resolve": "^3.0.0" }, "devDependencies": { - "absolute-url": "^1.2.2", - "c8": "^8.0.1", + "c8": "^9.1.0", "mocha": "^10.2.0", - "supertest": "^6.3.4" + "trifid-core": "^2.7.1" } }, "packages/yasgui/node_modules/import-meta-resolve": { diff --git a/package.json b/package.json index 5b407887..93a5c929 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,11 @@ "type": "module", "scripts": { "lint": "eslint . --quiet --ignore-path .gitignore", - "test": "npm run test --workspaces", + "test": "npx wsrun --report -msc test", "release": "changeset publish", - "prepare": "husky install" + "prepare": "husky install", + "build": "npx wsrun --report -msc prepack", + "clean": "npx wsrun --report -msc clean" }, "workspaces": [ "packages/*" @@ -25,6 +27,9 @@ "@changesets/cli": "^2.27.1", "@tpluscode/eslint-config": "^0.4.4", "husky": "^8.0.3", - "lint-staged": "^15.2.0" + "lint-staged": "^15.2.0", + "type-detect": "^4.0.8", + "typescript": "^5.3.3", + "wsrun": "^5.2.4" } } diff --git a/packages/ckan/.npmignore b/packages/ckan/.npmignore deleted file mode 100644 index 05ac32e1..00000000 --- a/packages/ckan/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules/ -.gitignore -test/ -coverage/ -tsconfig.json diff --git a/packages/ckan/README.md b/packages/ckan/README.md index c5fedde0..016648e0 100644 --- a/packages/ckan/README.md +++ b/packages/ckan/README.md @@ -89,8 +89,8 @@ The following options are supported: Configuring Trifid to use `@zazuko/trifid-plugin-ckan` is easy, just add the following in your configuration file: ```yaml -middlewares: - # …other middlewares +plugins: + # …other plugins ckan: module: "@zazuko/trifid-plugin-ckan" diff --git a/packages/ckan/package.json b/packages/ckan/package.json index d2ec2cf3..b241c4ce 100644 --- a/packages/ckan/package.json +++ b/packages/ckan/package.json @@ -3,13 +3,21 @@ "version": "3.0.0", "description": "Endpoint for opendata.swiss CKAN harvester", "main": "src/index.js", + "types": "dist/ckan/src/index.d.ts", "type": "module", "scripts": { "test": "c8 --reporter=lcov --reporter=text mocha", - "prebuild": "rimraf src/*.d.ts src/*.d.ts.map", + "example-instance": "node test/support/run-instance.js", + "clean": "rimraf dist/", + "prebuild": "npm run clean", "build": "tsc", "prepack": "npm run build" }, + "files": [ + "dist", + "src", + "CHANGELOG.md" + ], "repository": { "type": "git", "url": "https://github.com/zazuko/trifid.git", @@ -23,7 +31,7 @@ "license": "UNLICENSED", "dependencies": { "@tpluscode/rdf-string": "^1.1.3", - "@zazuko/env": "^1.11.0", + "@zazuko/env": "^2.0.6", "@zazuko/prefixes": "^2.1.1", "dotenv": "^16.3.1", "is-graph-pointer": "^2.1.0", @@ -31,13 +39,15 @@ "xmlbuilder2": "^3.1.1" }, "devDependencies": { - "c8": "^8.0.1", + "@types/node": "^20.11.16", + "c8": "^9.1.0", "chai": "^5.0.3", "chai-subset": "^1.6.0", "mocha": "^10.2.0", - "oxigraph": "^0.3.22", + "rimraf": "^5.0.5", "trifid-core": "^2.7.1", - "typescript": "5.3.3", + "trifid-handler-fetch": "^2.0.1", + "typescript": "^5.3.3", "xml2js": "^0.6.2", "xml2js-xpath": "^0.13.0" } diff --git a/packages/ckan/src/ckan.js b/packages/ckan/src/ckan.js index 9b583e6c..fed85b19 100644 --- a/packages/ckan/src/ckan.js +++ b/packages/ckan/src/ckan.js @@ -1,8 +1,30 @@ // @ts-check + import ParsingClient from 'sparql-http-client/ParsingClient.js' import { toXML } from './xml.js' import { datasetsQuery } from './query.js' +/** + * API Configuration. + * + * @typedef {Object} APIConfig + * @property {string} endpointUrl The SPARQL endpoint URL. + * @property {string} user The user for the endpoint. + * @property {string} password The password for the endpoint. + */ + +/** + * Fetch datasets. + * + * @typedef {(organizationId: import('@rdfjs/types').NamedNode) => Promise} FetchDatasets + */ + +/** + * Create CKAN API. + * + * @param {APIConfig} config API configuration. + * @returns {{ fetchDatasets: FetchDatasets, toXML: (dataset: import('@rdfjs/types').Quad[]) => string}} + */ export const createAPI = (config) => { const client = new ParsingClient({ endpointUrl: config.endpointUrl, @@ -10,6 +32,9 @@ export const createAPI = (config) => { password: config.password, }) + /** + * @type {FetchDatasets} + */ const fetchDatasets = async (organizationId) => { const query = datasetsQuery(organizationId) return await client.query.construct(query.toString()) diff --git a/packages/ckan/src/index.js b/packages/ckan/src/index.js index e5d7a6a8..8dfe34d0 100644 --- a/packages/ckan/src/index.js +++ b/packages/ckan/src/index.js @@ -1,43 +1,68 @@ // @ts-check + import rdf from '@zazuko/env' import { createAPI } from './ckan.js' -/** @type {import('trifid-core/types/index.d.ts').TrifidMiddleware} */ -const factory = (trifid) => { +/** @type {import('../../core/types/index.js').TrifidPlugin} */ +const factory = async (trifid) => { const { config, logger } = trifid const { endpointUrl, user, password } = config const configuredEndpoint = endpointUrl || '/query' - return async (req, res, _next) => { - const endpoint = new URL(configuredEndpoint, req.absoluteUrl()) - const { fetchDatasets, toXML } = createAPI({ - endpointUrl: endpoint, - user, - password, - }) + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + paths: ['/ckan'], + } + }, + routeHandler: async () => { + /** + * Query string type. + * + * @typedef {Object} QueryString + * @property {string} [organization] The organization to fetch. + */ + + /** + * Route handler. + * @param {import('fastify').FastifyRequest<{Querystring: QueryString}>} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + const fullUrl = `${request.protocol}://${request.hostname}${request.raw.url}` + const endpoint = new URL(configuredEndpoint, fullUrl) + const { fetchDatasets, toXML } = createAPI({ + endpointUrl: endpoint.toString(), + user, + password, + }) - const organization = req?.query?.organization - if (!organization) { - return res.status(400).send('Missing `organization` query param') - } + const organization = request.query?.organization + if (!organization) { + reply.status(400).send('Missing `organization` query param') + return + } - logger.debug(`asked for the '${organization}' organization`) + logger.debug(`Asked for the '${organization}' organization`) - try { - const uri = rdf.namedNode(organization) + try { + const uri = rdf.namedNode(organization) - const dataset = await fetchDatasets(uri) - const xml = toXML(dataset) + const dataset = await fetchDatasets(uri) + const xml = toXML(dataset) - const format = 'application/rdf+xml' - res.setHeader('Content-Type', format) + const format = 'application/rdf+xml' - return res.send(xml.toString()) - } catch (e) { - logger.error(e) - return res.status(500).send('Error') - } + reply.type(format).send(xml.toString()) + } catch (e) { + logger.error(e) + reply.status(500).send('Error') + } + } + return handler + }, } } diff --git a/packages/ckan/src/namespace.js b/packages/ckan/src/namespace.js index d0381f3a..cfd153af 100644 --- a/packages/ckan/src/namespace.js +++ b/packages/ckan/src/namespace.js @@ -1,4 +1,5 @@ // @ts-check + import _rdf from '@zazuko/env' const { dcat, dcterms, rdf, schema, skos, vcard, xsd, foaf, rdfs } = _rdf.ns diff --git a/packages/ckan/src/query.js b/packages/ckan/src/query.js index 13bcb53a..4fc6b412 100644 --- a/packages/ckan/src/query.js +++ b/packages/ckan/src/query.js @@ -1,11 +1,12 @@ // @ts-check + import { sparql } from '@tpluscode/rdf-string' import * as ns from './namespace.js' /** * Query to retrieve all datasets for a given organization. * - * @param {string} organizationId The organization identifier. + * @param {import('@rdfjs/types').NamedNode} organizationId The organization identifier. * @returns {import('@tpluscode/rdf-string').SparqlTemplateResult} */ const datasetsQuery = (organizationId) => { @@ -19,44 +20,42 @@ const datasetsQuery = (organizationId) => { ?dataset ${ns.dcat.theme} ?euTheme . } WHERE { - GRAPH ?graph { - ?dataset ?p ?o . - - ?dataset ${ns.dcterms.creator} ${organizationId} . - ?dataset ${ns.schema.workExample} . - ?dataset ${ns.schema.creativeWorkStatus} . + ?dataset ?p ?o . - FILTER ( NOT EXISTS { ?dataset ${ns.schema.validThrough} ?expiration1 . } ) - FILTER ( NOT EXISTS { ?dataset ${ns.schema.expires} ?expiration2 . } ) + ?dataset ${ns.dcterms.creator} ${organizationId} . + ?dataset ${ns.schema.workExample} . + ?dataset ${ns.schema.creativeWorkStatus} . - OPTIONAL { - ?o ?nestedP ?nestedO . - FILTER( ?nestedP != ) - } + FILTER ( NOT EXISTS { ?dataset ${ns.schema.validThrough} ?expiration1 . } ) + FILTER ( NOT EXISTS { ?dataset ${ns.schema.expires} ?expiration2 . } ) - OPTIONAL { - ?dataset ${ns.dcterms.rights} ?copyright . - GRAPH ?copyrightGraph { - ?copyright ${ns.schema.identifier} ?copyrightIdentifier . - } - } + OPTIONAL { + ?o ?nestedP ?nestedO . + FILTER( ?nestedP != ) + } - OPTIONAL { - ?dataset ${ns.dcterms.accrualPeriodicity} ?accrualPeriodicity . + OPTIONAL { + ?dataset ${ns.dcterms.rights} ?copyright . + GRAPH ?copyrightGraph { + ?copyright ${ns.schema.identifier} ?copyrightIdentifier . } + } - OPTIONAL { - ?dataset ${ns.dcterms.publisher} ?publisher . - ?publisher ${ns.schema.name} ?publisherName . - } + OPTIONAL { + ?dataset ${ns.dcterms.accrualPeriodicity} ?accrualPeriodicity . + } - OPTIONAL { - ?dataset ${ns.dcat.theme} ?theme . - ?theme ${ns.schema.supersededBy}?/${ns.schema.sameAs} ?euTheme . - } + OPTIONAL { + ?dataset ${ns.dcterms.publisher} ?publisher . + ?publisher ${ns.schema.name} ?publisherName . + } - FILTER (?p != ${ns.dcat.theme}) + OPTIONAL { + ?dataset ${ns.dcat.theme} ?theme . + ?theme ${ns.schema.supersededBy}?/${ns.schema.sameAs} ?euTheme . } + + FILTER (?p != ${ns.dcat.theme}) } ` } diff --git a/packages/ckan/src/xml.js b/packages/ckan/src/xml.js index 5d541fb9..c84cc539 100644 --- a/packages/ckan/src/xml.js +++ b/packages/ckan/src/xml.js @@ -1,4 +1,5 @@ // @ts-check + import rdf from '@zazuko/env' import prefixes, { shrink } from '@zazuko/prefixes' import { create as createXml } from 'xmlbuilder2' @@ -8,7 +9,7 @@ import * as ns from './namespace.js' /** * Generate a CKAN-compatible XML representation of the dataset. * - * @param {any[]} dataset Dataset to convert. + * @param {import('@rdfjs/types').Quad[]} dataset Dataset to convert. * @returns {string} XML representation of the dataset. */ const toXML = (dataset) => { @@ -145,6 +146,7 @@ const toXML = (dataset) => { 'dcterms:spatial': serializeTerm(dataset.out(ns.dcterms.spatial)), 'dcterms:coverage': serializeTerm(dataset.out(ns.dcterms.coverage)), 'dcterms:temporal': serializeTerm(dataset.out(ns.dcterms.temporal)), + // @ts-ignore 'dcterms:accrualPeriodicity': serializeTerm(accrualPeriodicity), 'dcat:distribution': distributions, 'foaf:page': serializeTerm(dataset.out(ns.foaf.page)), @@ -158,6 +160,7 @@ const toXML = (dataset) => { /** * Serialize a term. + * * @param {import('clownface').MultiPointer | Array} pointer Pointer to serialize. * @param {object} [options] * @param {import('@rdfjs/types').NamedNode[]} [options.properties] diff --git a/packages/ckan/test/ckan.test.js b/packages/ckan/test/ckan.test.js index fe545fb5..534fd288 100644 --- a/packages/ckan/test/ckan.test.js +++ b/packages/ckan/test/ckan.test.js @@ -8,37 +8,19 @@ import chaiSubset from 'chai-subset' import * as xml from 'xml2js' import xpath from 'xml2js-xpath' import { describe, it } from 'mocha' -import trifidCore from 'trifid-core' -import ckanTrifidPlugin from '../src/index.js' import { convertLegacyFrequency } from '../src/xml.js' -import { storeMiddleware } from './support/store.js' -import { getListenerURL } from './support/utils.js' +import { createTrifidInstance, getListenerURL } from './support/utils.js' chai.use(chaiSubset) -const createTrifidInstance = async () => { - return await trifidCore({ - server: { - listener: { - port: 4242, - }, - logLevel: 'warn', - }, - }, { - store: { - module: storeMiddleware, - paths: ['/query'], - methods: ['GET', 'POST'], - }, - ckan: { - module: ckanTrifidPlugin, - paths: ['/ckan'], - methods: ['GET'], - config: { - endpointUrl: '/query', - }, - }, - }) +/** + * Remove prefixes from the body. + * + * @param {string} body The body to remove prefixes from. + * @returns {string} The body with prefixes removed. + */ +const removePrefixesFromBody = (body) => { + return body.replace(//g, '') } describe('@zazuko/trifid-plugin-ckan', () => { @@ -48,12 +30,12 @@ describe('@zazuko/trifid-plugin-ckan', () => { }) beforeEach(async () => { - const trifidInstance = await createTrifidInstance() + const trifidInstance = await createTrifidInstance({ logLevel: 'warn' }) trifidListener = await trifidInstance.start() }) - afterEach(() => { - trifidListener.close() + afterEach(async () => { + await trifidListener.close() }) describe('basic tests', () => { @@ -71,7 +53,7 @@ describe('@zazuko/trifid-plugin-ckan', () => { const expectedResult = await readFile(new URL('./support/empty-result.xml', import.meta.url), 'utf8') strictEqual(res.status, 200) - strictEqual(body, expectedResult) + strictEqual(removePrefixesFromBody(body), expectedResult) }) describe('example organization', () => { @@ -90,7 +72,7 @@ describe('@zazuko/trifid-plugin-ckan', () => { const expectedResult = await readFile(new URL('./support/basic-result.xml', import.meta.url), 'utf8') strictEqual(res.status, 200) - strictEqual(xmlText, expectedResult) + strictEqual(removePrefixesFromBody(xmlText), expectedResult) }) it('should take publisher at face value', async () => { diff --git a/packages/ckan/test/support/basic-result.xml b/packages/ckan/test/support/basic-result.xml index b84b8874..5ab7bb15 100644 --- a/packages/ckan/test/support/basic-result.xml +++ b/packages/ckan/test/support/basic-result.xml @@ -1,5 +1,5 @@ - + diff --git a/packages/ckan/test/support/empty-result.xml b/packages/ckan/test/support/empty-result.xml index e7a95cf7..201ef47e 100644 --- a/packages/ckan/test/support/empty-result.xml +++ b/packages/ckan/test/support/empty-result.xml @@ -1,4 +1,4 @@ - + diff --git a/packages/ckan/test/support/run-instance.js b/packages/ckan/test/support/run-instance.js new file mode 100644 index 00000000..ae4f8ba6 --- /dev/null +++ b/packages/ckan/test/support/run-instance.js @@ -0,0 +1,6 @@ +// @ts-check + +import { createTrifidInstance } from './utils.js' + +const instance = await createTrifidInstance({ logLevel: 'debug' }) +await instance.start() diff --git a/packages/ckan/test/support/utils.js b/packages/ckan/test/support/utils.js index 372e1cbb..5d9405dc 100644 --- a/packages/ckan/test/support/utils.js +++ b/packages/ckan/test/support/utils.js @@ -1,20 +1,63 @@ // @ts-check +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + +import trifidCore from 'trifid-core' +import handlerFetch from 'trifid-handler-fetch' +import ckanTrifidPlugin from '../../src/index.js' + +const currentDir = dirname(fileURLToPath(import.meta.url)) + /** - * Get the URL of a listener. + * Get an endpoint of the Fastify Instance. * - * @param {import('http').Server} listener HTTP listener + * @param {import('fastify').FastifyInstance} server Server. * @returns {string} */ -export const getListenerURL = (listener) => { - const address = listener.address() - if (!address) { +export const getListenerURL = (server) => { + const addresses = server.addresses().map((address) => { + if (typeof address === 'string') { + return address + } + return `http://${address.address}:${address.port}` + }) + + if (addresses.length < 1) { throw new Error('The listener is not listening') } - if (typeof address === 'string') { - return address - } - const { address: hostname, port } = address - return `http://${hostname}:${port}` + return addresses[0] +} + +export const createTrifidInstance = async ({ logLevel }) => { + return await trifidCore({ + server: { + listener: { + port: 0, + }, + logLevel, + }, + }, { + store: { + module: handlerFetch, + paths: ['/query'], + methods: ['GET', 'POST'], + config: { + contentType: 'text/turtle', + url: join(currentDir, 'data.ttl'), + baseIri: 'http://example.com/', + graphName: undefined, // as we use a turtle file, we don't need to specify a graph name + unionDefaultGraph: true, + }, + }, + ckan: { + module: ckanTrifidPlugin, + paths: ['/ckan'], + methods: ['GET'], + config: { + endpointUrl: '/query', + }, + }, + }) } diff --git a/packages/ckan/tsconfig.json b/packages/ckan/tsconfig.json index 808777b0..b4e69ae1 100644 --- a/packages/ckan/tsconfig.json +++ b/packages/ckan/tsconfig.json @@ -1,22 +1,6 @@ { - // Change this to match your project - "include": ["src/*.js"], + "extends": "../../tsconfig.json", "compilerOptions": { - // Tells TypeScript to read JS files, as - // normally they are ignored as source files - "allowJs": true, - // Generate d.ts files - "declaration": true, - // This compiler run should - // only output d.ts files - "emitDeclarationOnly": true, - // Types should go next to the .js files - // "outDir": "dist", - // go to js file when using IDE functions like - // "Go to Definition" in VSCode - "declarationMap": true, - "esModuleInterop": true, - "moduleResolution": "NodeNext", - "module": "NodeNext" + "outDir": "dist" } } diff --git a/packages/core/babel.config.cjs b/packages/core/babel.config.cjs deleted file mode 100644 index f5c1c3c6..00000000 --- a/packages/core/babel.config.cjs +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [['@babel/preset-env', { targets: { node: 'current' } }]] -} diff --git a/packages/core/config.yaml b/packages/core/config.yaml index c252cdb9..1cc9ef99 100644 --- a/packages/core/config.yaml +++ b/packages/core/config.yaml @@ -1,3 +1,5 @@ +# yaml-language-server: $schema=./lib/config/schema.json + extends: - file:./config2.json @@ -10,22 +12,22 @@ globals: value: config config1: config1 -middlewares: +plugins: staticFiles: order: 100 - module: file:./middlewares/static.js + module: file:./plugins/static.js paths: "/sources" config: directory: cwd:. zazuko-redirect: - module: file:./middlewares/redirect.js + module: file:./plugins/redirect.js paths: "/zazuko" config: target: https://zazuko.com/ throw: - module: file:./middlewares/throw.js + module: file:./plugins/throw.js paths: "/oops" config: message: This is a custom error message! diff --git a/packages/core/config2.json b/packages/core/config2.json index 63e3c556..5bec502c 100644 --- a/packages/core/config2.json +++ b/packages/core/config2.json @@ -1,12 +1,13 @@ { + "$schema": "./lib/config/schema.json", "globals": { "value": "config2", "config2": "config2" }, - "middlewares": { + "plugins": { "tests": { "order": 120, - "module": "file:./middlewares/static.js", + "module": "file:./plugins/static.js", "paths": "/tests-dir", "config": { "directory": "cwd:./test" diff --git a/packages/core/index.js b/packages/core/index.js index d98e385b..50f9e02d 100644 --- a/packages/core/index.js +++ b/packages/core/index.js @@ -1,8 +1,12 @@ // @ts-check -import express from 'express' +import EventEmitter from 'node:events' + import { pino } from 'pino' -import cors from 'cors' -import cookieParser from 'cookie-parser' +import fastify from 'fastify' +import fastifyCors from '@fastify/cors' +import fastifyCookie from '@fastify/cookie' +import fastifyAccepts from '@fastify/accepts' +import fastifyFormBody from '@fastify/formbody' import handler from './lib/config/handler.js' import { @@ -10,9 +14,18 @@ import { defaultLogLevel, defaultPort, } from './lib/config/default.js' -import middlewaresAssembler from './lib/middlewares/assembler.js' -import applyMiddlewares from './lib/middlewares/apply.js' +import pluginsAssembler from './lib/plugins/assembler.js' +import applyPlugins from './lib/plugins/apply.js' import templateEngine from './lib/templateEngine.js' +import { errorsHandler, notFoundHandler } from './lib/handlers/index.js' + +// Export some useful functions to work with SPARQL +export { + supportedTypes as sparqlSupportedTypes, + serializeFormattedStream as sparqlSerializeFormattedStream, + serializeQuadStream as sparqlSerializeQuadStream, + getRewriteConfiguration as sparqlGetRewriteConfiguration, +} from './lib/sparql.js' /** * Create a new Trifid instance. @@ -20,53 +33,45 @@ import templateEngine from './lib/templateEngine.js' * @param {import('./types/index.js').TrifidConfigWithExtends?} config Trifid configuration. * @param {Record; - * }>?} additionalMiddlewares Add additional middlewares. + * }>?} additionalPlugins Add additional plugins. * @returns {Promise<{ - * start: () => Promise; - * server: import('express').Express; + * start: () => Promise; + * server: import('fastify').FastifyInstance; * config: import('./types/index.js').TrifidConfig * }>} Trifid instance. */ -const trifid = async (config, additionalMiddlewares = {}) => { +const trifid = async (config, additionalPlugins = {}) => { + const trifidEvents = new EventEmitter() const fullConfig = await handler(config) - const server = express() - server.disable('x-powered-by') - - // add required middlewares - server.use( - cors({ - credentials: true, - origin: true, - }), - ) - server.use(cookieParser()) - - // configure Express server - if (fullConfig?.server?.express) { - for (const expressSettingKey in fullConfig.server.express) { - server.set( - expressSettingKey, - fullConfig.server.express[expressSettingKey], - ) - } - } - // dynamic server configuration - const port = fullConfig?.server?.listener?.port || defaultPort + // // Configure Express server + // if (fullConfig?.server?.express) { + // for (const expressSettingKey in fullConfig.server.express) { + // server.set( + // expressSettingKey, + // fullConfig.server.express[expressSettingKey], + // ) + // } + // } + + // Dynamic server configuration + const portFromConfig = fullConfig?.server?.listener?.port + const port = (portFromConfig === 0 || portFromConfig === '0') ? 0 : (portFromConfig || defaultPort) const host = fullConfig?.server?.listener?.host || defaultHost const portNumber = typeof port === 'string' ? parseInt(port, 10) : port - // logger configuration + // Logger configuration const logLevel = fullConfig?.server?.logLevel || defaultLogLevel - // template configuration + // Template configuration const template = fullConfig?.template || {} + // Custom logger instance const logger = pino({ name: 'trifid-core', level: logLevel, @@ -75,30 +80,96 @@ const trifid = async (config, additionalMiddlewares = {}) => { }, }) - const templateEngineInstance = await templateEngine(template) - const middlewares = await middlewaresAssembler( + const server = fastify({ + logger: false, + trustProxy: true, + }) + + // This can be used to pass data from multiple plugins + /** @type {Map} */ + const trifidLocals = new Map() + server.decorate('locals', trifidLocals) + + /** + * Handler to add a session to the request. + * + * @param {import('fastify').FastifyRequest & { session: Map }} request Request. + * @param {import('fastify').FastifyReply} _reply Reply. + * @param {import('fastify').DoneFuncWithErrOrRes} done Done. + */ + const addSessionHandler = (request, _reply, done) => { + request.session = new Map() + done() + } + server.addHook('onRequest', addSessionHandler) + + // Add required plugins + server.register(fastifyCors, { + credentials: true, + origin: true, + }) + + // Add support for cookies + server.register(fastifyCookie) + + // Add support for Accept header parser + server.register(fastifyAccepts) + + // Add support for `application/x-www-form-urlencoded` content type + server.register(fastifyFormBody) + + // Template engine configuration + const templateEngineInstance = await templateEngine(template, trifidLocals) + const { render } = templateEngineInstance + + // Add error and not found handlers (requires template engine to be ready) + server.setErrorHandler(errorsHandler) + server.setNotFoundHandler(await notFoundHandler({ render })) + + const plugins = await pluginsAssembler( fullConfig, - additionalMiddlewares, + additionalPlugins, ) - await applyMiddlewares( + await applyPlugins( server, fullConfig.globals, - middlewares, + plugins, logger, templateEngineInstance, + `http://${host}:${portNumber}/`, + trifidEvents, ) const start = async () => { - return await new Promise((resolve, reject) => { - const listener = server.listen(portNumber, host, (err) => { - if (err) { - return reject(err) - } - - logger.info(`Trifid instance listening on: http://${host}:${portNumber}/`) - resolve(listener) - }) + // Forward server events to the Trifid plugins + server.addHook('onListen', () => { + trifidEvents.emit('listen') }) + + server.addHook('onClose', () => { + trifidEvents.emit('close') + }) + + server.addHook('onReady', () => { + trifidEvents.emit('ready') + }) + + // Start server + await server.listen({ + port: portNumber, + host, + }) + + // Log server address + const fastifyAddresses = server.addresses().map((address) => { + if (typeof address === 'string') { + return address + } + return `http://${address.address}:${address.port}` + }) + logger.info(`Server listening on ${fastifyAddresses.join(', ')}`) + + return server } return { diff --git a/packages/core/lib/config/default.js b/packages/core/lib/config/default.js index 48cec751..e566a426 100644 --- a/packages/core/lib/config/default.js +++ b/packages/core/lib/config/default.js @@ -1,7 +1,6 @@ // @ts-check -// some default configuration - +// Some default configuration values export const maxDepth = 50 export const defaultPort = 8080 export const defaultHost = '0.0.0.0' diff --git a/packages/core/lib/config/handler.js b/packages/core/lib/config/handler.js index 82039a0d..19bacefa 100644 --- a/packages/core/lib/config/handler.js +++ b/packages/core/lib/config/handler.js @@ -1,6 +1,7 @@ // @ts-check -import fs from 'fs/promises' -import { dirname } from 'path' +import fs from 'node:fs/promises' +import { dirname } from 'node:path' + import merge from 'lodash/merge.js' import JSON5 from 'json5' import { parse } from 'yaml' @@ -10,7 +11,7 @@ import parser from './parser.js' import { extendsResolver, globalsResolver, - middlewaresResolver, + pluginsResolver, serverResolver, templateResolver, } from './resolvers.js' @@ -48,24 +49,24 @@ const resolveConfig = async ( } // merge all fields - const middlewares = {} + const plugins = {} configs.forEach((c) => { // merge template, globals and server parts config.globals = merge({}, c.globals, config.globals) config.server = merge({}, c.server, config.server) config.template = merge({}, c.template, config.template) - // merge middlewares - Object.keys(c.middlewares).forEach((m) => { - middlewares[m] = c.middlewares[m] + // merge plugins + Object.keys(c.plugins).forEach((m) => { + plugins[m] = c.plugins[m] }) }) - Object.keys(config.middlewares).forEach((m) => { - middlewares[m] = config.middlewares[m] + Object.keys(config.plugins).forEach((m) => { + plugins[m] = config.plugins[m] }) // apply all resolvers - config.middlewares = middlewaresResolver(middlewares, context) + config.plugins = pluginsResolver(plugins, context) config.globals = globalsResolver(config.globals, context) config.server = serverResolver(config.server, context) config.template = templateResolver(config.template, context) @@ -111,8 +112,8 @@ const addDefaultFields = (config) => { config.globals = {} } - if (!config.middlewares) { - config.middlewares = {} + if (!config.plugins) { + config.plugins = {} } } diff --git a/packages/core/lib/config/parser.js b/packages/core/lib/config/parser.js index 93f0f44c..92825fc7 100644 --- a/packages/core/lib/config/parser.js +++ b/packages/core/lib/config/parser.js @@ -1,6 +1,15 @@ // @ts-check + +import { readFile } from 'node:fs/promises' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' + import Ajv from 'ajv' -import schema from './schema.js' + +const currentDir = dirname(fileURLToPath(import.meta.url)) +const schemaPath = join(currentDir, 'schema.json') +const schemaContent = await readFile(schemaPath, 'utf8') +const schema = JSON.parse(schemaContent) // @ts-ignore const ajv = new Ajv() @@ -8,7 +17,7 @@ const ajv = new Ajv() /** * Return the configuration object if it is valid or throw an error in other cases. * - * @param {import('../../types/index.js').TrifidConfigWithExtends} config Configuration to validate. + * @param {import('../../types/index.js').TrifidConfigWithExtends} [config] Configuration to validate. * @returns {import('../../types/index.js').TrifidConfigWithExtends} Valid configuration. */ const parser = (config) => { diff --git a/packages/core/lib/config/resolvers.js b/packages/core/lib/config/resolvers.js index 47da258d..0c03f9f7 100644 --- a/packages/core/lib/config/resolvers.js +++ b/packages/core/lib/config/resolvers.js @@ -46,6 +46,6 @@ export const globalsResolver = (value, context) => { return applyResolvers(value, context) } -export const middlewaresResolver = (value, context) => { +export const pluginsResolver = (value, context) => { return applyResolvers(value, context) } diff --git a/packages/core/lib/config/schema.js b/packages/core/lib/config/schema.js deleted file mode 100644 index 26b488a7..00000000 --- a/packages/core/lib/config/schema.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * This is the JSON schema representation of the configuration file. - */ - -const server = { - type: 'object', - properties: { - listener: { - type: 'object', - properties: { - port: { - anyOf: [ - { type: 'number', minimum: 0, maximum: 65535 }, - { type: 'string', minLength: 1 }, - ], - }, - host: { type: 'string', minLength: 1 }, - }, - additionalProperties: false, - }, - logLevel: { - type: 'string', - enum: ['fatal', 'error', 'warn', 'info', 'debug', 'trace', 'silent'], - }, - express: { - type: 'object', - additionalProperties: true, - }, - }, - additionalProperties: false, -} - -const globals = { - type: 'object', - additionalProperties: true, -} - -const middleware = { - type: 'object', - properties: { - order: { type: 'number', minimum: 0 }, - module: { type: 'string', minLength: 1 }, - paths: { - anyOf: [ - { type: 'string', minLength: 1 }, - { type: 'array', items: { type: 'string' } }, - ], - }, - methods: { - anyOf: [ - { type: 'string', minLength: 1 }, - { type: 'array', items: { type: 'string' } }, - ], - }, - hosts: { - anyOf: [ - { type: 'string', minLength: 1 }, - { type: 'array', items: { type: 'string' } }, - ], - }, - config: { type: 'object', additionalProperties: true }, - }, - required: ['module'], - additionalProperties: false, -} - -const middlewares = { - type: 'object', - patternProperties: { - '.*': middleware, - }, -} - -const schema = { - type: 'object', - properties: { - extends: { - type: 'array', - items: { - type: 'string', - }, - }, - server, - globals, - middlewares, - template: { - type: 'object', - additionalProperties: true, - }, - }, - additionalProperties: false, -} - -export default schema diff --git a/packages/core/lib/config/schema.json b/packages/core/lib/config/schema.json new file mode 100644 index 00000000..013172b6 --- /dev/null +++ b/packages/core/lib/config/schema.json @@ -0,0 +1,151 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "extends": { + "type": "array", + "items": { + "type": "string" + } + }, + "server": { + "$ref": "#/definitions/server" + }, + "globals": { + "$ref": "#/definitions/globals" + }, + "plugins": { + "$ref": "#/definitions/plugins" + }, + "template": { + "type": "object", + "additionalProperties": true + }, + "$schema": { + "type": "string" + } + }, + "additionalProperties": false, + "definitions": { + "server": { + "type": "object", + "properties": { + "listener": { + "type": "object", + "properties": { + "port": { + "anyOf": [ + { + "type": "number", + "minimum": 0, + "maximum": 65535 + }, + { + "type": "string", + "minLength": 1 + } + ] + }, + "host": { + "type": "string", + "minLength": 1 + } + }, + "additionalProperties": false + }, + "logLevel": { + "type": "string", + "enum": [ + "fatal", + "error", + "warn", + "info", + "debug", + "trace", + "silent" + ] + }, + "express": { + "type": "object", + "additionalProperties": true + } + }, + "additionalProperties": false + }, + "globals": { + "type": "object", + "additionalProperties": true + }, + "plugin": { + "type": "object", + "properties": { + "order": { + "type": "number", + "minimum": 0 + }, + "module": { + "type": "string", + "minLength": 1 + }, + "paths": { + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "methods": { + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "hosts": { + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "config": { + "type": "object", + "additionalProperties": true + } + }, + "required": [ + "module" + ], + "additionalProperties": false + }, + "plugins": { + "type": "object", + "patternProperties": { + ".*": { + "$ref": "#/definitions/plugin" + } + } + } + } +} diff --git a/packages/core/lib/handlers/errors.js b/packages/core/lib/handlers/errors.js new file mode 100644 index 00000000..d0ba126c --- /dev/null +++ b/packages/core/lib/handlers/errors.js @@ -0,0 +1,23 @@ +// @ts-check + +/** + * Error handler. + * + * @param {import('fastify').FastifyError} error Error. + * @param {import('fastify').FastifyRequest} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ +const handler = async (error, request, reply) => { + request.log.error(error) + + let statusCode = error.statusCode || 500 + + // Handle the case where there is an error, but no specific status code has been set + if (statusCode < 400) { + statusCode = 500 + } + + reply.status(500).send("Internal Server Error") +} + +export default handler diff --git a/packages/core/lib/handlers/index.js b/packages/core/lib/handlers/index.js new file mode 100644 index 00000000..46b5ca82 --- /dev/null +++ b/packages/core/lib/handlers/index.js @@ -0,0 +1,2 @@ +export { default as errorsHandler } from './errors.js' +export { default as notFoundHandler } from './notFound.js' diff --git a/packages/core/lib/handlers/notFound.js b/packages/core/lib/handlers/notFound.js new file mode 100644 index 00000000..4a5b3d5d --- /dev/null +++ b/packages/core/lib/handlers/notFound.js @@ -0,0 +1,56 @@ +// @ts-check + +import { dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + +const currentDir = dirname(fileURLToPath(import.meta.url)) + +/* + * Using the factory pattern to create the handler, + * so that it can have access to the `render` function. + */ +const factory = async ({ render }) => { + /** + * Not found handler. + * + * @param {import('fastify').FastifyRequest} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + request.log.debug(`path '${request.url}' returned a 404 error (Not Found)`) + + const accept = request.accepts() + + reply.status(404) + + switch (accept.type([ + 'text/plain', + 'json', + 'html', + ])) { + case 'json': + reply.send({ success: false, message: 'Not found', status: 404 }) + break + + case 'html': + reply.type('text/html').send( + await render( + `${currentDir}/../../views/404.hbs`, + { + url: request.url, + }, + { title: 'Not Found' }, + ), + ) + break + + default: + reply.type('text/plain').send('Not Found\n') + break + } + } + + return handler +} + +export default factory diff --git a/packages/core/lib/middlewares/apply.js b/packages/core/lib/middlewares/apply.js deleted file mode 100644 index 10ac1299..00000000 --- a/packages/core/lib/middlewares/apply.js +++ /dev/null @@ -1,62 +0,0 @@ -import merge from 'lodash/merge.js' -import vhost from 'vhost' - -const apply = async (server, globals, middlewares, logger, templateEngine) => { - for (const middleware of middlewares) { - const name = middleware[0] - const m = middleware[1] - - const { paths, hosts, methods, module, config } = m - - delete m.paths - delete m.hosts - delete m.methods - delete m.order - delete m.module - - const middlewareLogger = logger.child({ name }) - - const { render, registerHelper } = templateEngine - const loadedMiddleware = await module({ - config: merge({}, globals, config), - server, - logger: middlewareLogger, - render, - registerTemplateHelper: registerHelper, - }) - - // default path is '/' (see: https://github.com/expressjs/express/blob/d854c43ea177d1faeea56189249fff8c24a764bd/lib/router/index.js#L425) - if (paths.length === 0) { - paths.push('/') - } - - // if no methods are specified, use 'use' - if (methods.length === 0) { - methods.push('use') - } - - // mount the middleware the way it should - for (const path of paths) { - if (hosts.length === 0) { - // keeping this to be called without 'vhost' is needed for the error handler to work - methods.map((method) => { - logger.debug( - `mount '${name}' middleware (method=${method}, path=${path})`, - ) - return server[method](path, loadedMiddleware) - }) - } else { - hosts.map((host) => { - return methods.map((method) => { - logger.debug( - `mount '${name}' middleware (method=${method}, path=${path}, host=${host})`, - ) - return server[method](path, vhost(host, loadedMiddleware)) - }) - }) - } - } - } -} - -export default apply diff --git a/packages/core/lib/middlewares/assembler.js b/packages/core/lib/middlewares/assembler.js deleted file mode 100644 index 36748ba7..00000000 --- a/packages/core/lib/middlewares/assembler.js +++ /dev/null @@ -1,22 +0,0 @@ -import defaultMiddlewares from './default.js' -import load from './loader.js' -import sort from './sort.js' -import standardize from './standardize.js' - -const assembler = async (config, additionalMiddlewares = {}) => { - const loadedMiddlewares = await load(config) - - const middlewares = { - ...defaultMiddlewares, - ...additionalMiddlewares, - ...loadedMiddlewares, - } - - return sort( - Object.entries(middlewares).map((m) => { - return [m[0], standardize(m[1])] - }), - ) -} - -export default assembler diff --git a/packages/core/lib/middlewares/default.js b/packages/core/lib/middlewares/default.js deleted file mode 100644 index 7d0954f1..00000000 --- a/packages/core/lib/middlewares/default.js +++ /dev/null @@ -1,54 +0,0 @@ -import { dirname } from 'path' -import { fileURLToPath } from 'url' - -import healthMiddleware from '../../middlewares/health.js' -import errorsMiddleware from '../../middlewares/errors.js' -import notFoundMiddleware from '../../middlewares/notFound.js' -import staticMiddleware from '../../middlewares/static.js' -import iriMiddleware from '../../middlewares/iri.js' -import localsMiddleware from '../../middlewares/locals.js' - -const currentDir = dirname(fileURLToPath(import.meta.url)) - -const health = { - paths: '/health', - methods: 'GET', - module: healthMiddleware, -} - -const errors = { - module: errorsMiddleware, - order: 1200, -} - -const notFound = { - module: notFoundMiddleware, - order: 1100, -} - -const templateStaticFiles = { - module: staticMiddleware, - paths: '/static/core', - config: { - directory: `${currentDir}/../../static`, - }, -} - -const iri = { - module: iriMiddleware, - order: 10, -} - -const locals = { - module: localsMiddleware, - order: 11, -} - -export default { - health, - errors, - notFound, - templateStaticFiles, - iri, - locals, -} diff --git a/packages/core/lib/middlewares/loader.js b/packages/core/lib/middlewares/loader.js deleted file mode 100644 index 0333c6e8..00000000 --- a/packages/core/lib/middlewares/loader.js +++ /dev/null @@ -1,41 +0,0 @@ -import path from 'path' -import cloneDeep from 'lodash/cloneDeep.js' - -const resolvePath = (modulePath) => { - if (['.', '/'].includes(modulePath.slice(0, 1))) { - return path.resolve(modulePath) - } else { - return modulePath - } -} - -export const loader = async (modulePath) => { - const middleware = await import(resolvePath(modulePath)) - return middleware.default -} - -const load = async (config) => { - let middlewares = {} - if (config.middlewares && typeof config.middlewares === 'object') { - middlewares = cloneDeep(config.middlewares) - } - - await Promise.all( - Object.keys(middlewares).map(async (m) => { - if (middlewares[m] === null) { - delete middlewares[m] - return - } - - if (!middlewares[m].module) { - throw new Error(`middleware '${m}' has no module configured`) - } - - middlewares[m].module = await loader(middlewares[m].module) - }), - ) - - return middlewares -} - -export default load diff --git a/packages/core/lib/middlewares/sort.js b/packages/core/lib/middlewares/sort.js deleted file mode 100644 index 577868c1..00000000 --- a/packages/core/lib/middlewares/sort.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Sort middlewares - * @param {*} middlewares Object.entries from each middlewares - * @returns - */ -const sort = (middlewares) => - middlewares.sort((a, b) => { - return a[1].order - b[1].order - }) - -export default sort diff --git a/packages/core/lib/plugins/apply.js b/packages/core/lib/plugins/apply.js new file mode 100644 index 00000000..a5cf1443 --- /dev/null +++ b/packages/core/lib/plugins/apply.js @@ -0,0 +1,112 @@ +import merge from 'lodash/merge.js' +import { initQuery } from '../sparql.js' + +/** + * + * @param {import('fastify').FastifyInstance} server + * @param {*} globals + * @param {*} plugins + * @param {import('pino').Logger} logger + * @param {*} templateEngine + * @param {string} instanceHostname + * @param {import('node:events').EventEmitter} trifidEvents + */ +const apply = async (server, globals, plugins, logger, templateEngine, instanceHostname, trifidEvents) => { + const { query: querySparql } = initQuery(logger, globals.endpoints, instanceHostname) + + for (const plugin of plugins) { + const name = plugin[0] + const m = plugin[1] + + const { paths, hosts, methods, module, config } = m + + delete m.paths + delete m.hosts + delete m.methods + delete m.order + delete m.module + + const pluginLogger = logger.child({ name }) + const query = querySparql(logger.child({ name: `${name}:query` })) + + const pluginConfig = { + paths, + hosts, + methods, + config: merge({}, globals, config), + } + + const { render, registerHelper } = templateEngine + const loadedPlugin = await module({ + ...pluginConfig, + server, + logger: pluginLogger, + render, + query, + registerTemplateHelper: registerHelper, + trifidEvents, + }) + + let routeHandler + if (loadedPlugin) { + if (loadedPlugin.defaultConfiguration) { + const defaultConfiguration = await loadedPlugin.defaultConfiguration() + if (defaultConfiguration) { + if (defaultConfiguration.paths && pluginConfig.paths.length === 0) { + pluginConfig.paths = defaultConfiguration.paths + } + if (defaultConfiguration.hosts && pluginConfig.hosts.length === 0) { + pluginConfig.hosts = defaultConfiguration.hosts + } + if (defaultConfiguration.methods && pluginConfig.methods.length === 0) { + pluginConfig.methods = defaultConfiguration.methods + } + } + } + + if (loadedPlugin.routeHandler) { + routeHandler = await loadedPlugin.routeHandler() + } + } + + if (!routeHandler) { + continue + } + + const { hosts: pluginHosts, methods: pluginMethods, paths: pluginPaths } = pluginConfig + + const baseRouteOptions = { + method: pluginMethods, + handler: routeHandler, + } + + if (pluginHosts.length === 0) { + for (const path of pluginPaths) { + logger.debug( + `mount '${name}' plugin (methods=${baseRouteOptions.method}, path=${path})`, + ) + server.route({ + ...baseRouteOptions, + url: path, + }) + } + } else { + for (const host of pluginHosts) { + for (const path of pluginPaths) { + logger.debug( + `mount '${name}' plugin (methods=${baseRouteOptions.methods}, path=${path}, host=${host})`, + ) + server.route({ + ...baseRouteOptions, + url: path, + constraints: { + host, + }, + }) + } + } + } + } +} + +export default apply diff --git a/packages/core/lib/plugins/assembler.js b/packages/core/lib/plugins/assembler.js new file mode 100644 index 00000000..6dbb8ea6 --- /dev/null +++ b/packages/core/lib/plugins/assembler.js @@ -0,0 +1,22 @@ +import defaultPlugins from './default.js' +import load from './loader.js' +import sort from './sort.js' +import standardize from './standardize.js' + +const assembler = async (config, additionalPlugins = {}) => { + const loadedPlugins = await load(config) + + const plugins = { + ...defaultPlugins, + ...additionalPlugins, + ...loadedPlugins, + } + + return sort( + Object.entries(plugins).map((m) => { + return [m[0], standardize(m[1])] + }), + ) +} + +export default assembler diff --git a/packages/core/lib/plugins/default.js b/packages/core/lib/plugins/default.js new file mode 100644 index 00000000..cc4c2a59 --- /dev/null +++ b/packages/core/lib/plugins/default.js @@ -0,0 +1,53 @@ +import { dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { resolve } from 'import-meta-resolve' + +import healthPlugin from '../../plugins/health.js' +import staticPlugin from '../../plugins/static.js' +import localsPlugin from '../../plugins/locals.js' + +const currentDir = dirname(fileURLToPath(import.meta.url)) + +const health = { + module: healthPlugin, +} + +const templateStaticFiles = { + module: staticPlugin, + paths: '/static/core', + config: { + directory: `${currentDir}/../../static`, + }, +} + +const robotoPath = resolve('@fontsource/roboto', import.meta.url).replace(/^file:\/\//, '') +const robotoFont = { + module: staticPlugin, + paths: '/static/core-fonts/roboto', + config: { + directory: dirname(robotoPath), + }, +} + +const playfairDisplayPath = resolve('@fontsource/playfair-display', import.meta.url).replace(/^file:\/\//, '') +const playfairDisplayFont = { + module: staticPlugin, + paths: '/static/core-fonts/playfair-display', + config: { + directory: dirname(playfairDisplayPath), + }, +} + +const locals = { + module: localsPlugin, + order: 11, +} + +export default { + health, + templateStaticFiles, + robotoFont, + playfairDisplayFont, + locals, +} diff --git a/packages/core/lib/plugins/loader.js b/packages/core/lib/plugins/loader.js new file mode 100644 index 00000000..6fb492f1 --- /dev/null +++ b/packages/core/lib/plugins/loader.js @@ -0,0 +1,41 @@ +import { resolve } from 'node:path' +import cloneDeep from 'lodash/cloneDeep.js' + +const resolvePath = (modulePath) => { + if (['.', '/'].includes(modulePath.slice(0, 1))) { + return resolve(modulePath) + } else { + return modulePath + } +} + +export const loader = async (modulePath) => { + const plugin = await import(resolvePath(modulePath)) + return plugin.default +} + +const load = async (config) => { + let plugins = {} + if (config.plugins && typeof config.plugins === 'object') { + plugins = cloneDeep(config.plugins) + } + + await Promise.all( + Object.keys(plugins).map(async (m) => { + if (plugins[m] === null) { + delete plugins[m] + return + } + + if (!plugins[m].module) { + throw new Error(`plugin '${m}' has no module configured`) + } + + plugins[m].module = await loader(plugins[m].module) + }), + ) + + return plugins +} + +export default load diff --git a/packages/core/lib/plugins/sort.js b/packages/core/lib/plugins/sort.js new file mode 100644 index 00000000..62187fe5 --- /dev/null +++ b/packages/core/lib/plugins/sort.js @@ -0,0 +1,11 @@ +/** + * Sort plugins + * @param {*} plugins Object.entries from each plugins + * @returns + */ +const sort = (plugins) => + plugins.sort((a, b) => { + return a[1].order - b[1].order + }) + +export default sort diff --git a/packages/core/lib/middlewares/standardize.js b/packages/core/lib/plugins/standardize.js similarity index 67% rename from packages/core/lib/middlewares/standardize.js rename to packages/core/lib/plugins/standardize.js index eae01e55..db7af99b 100644 --- a/packages/core/lib/middlewares/standardize.js +++ b/packages/core/lib/plugins/standardize.js @@ -1,35 +1,27 @@ import cloneDeep from 'lodash/cloneDeep.js' -// see: https://expressjs.com/fr/api.html#routing-methods (+all) +// see: https://fastify.dev/docs/latest/Reference/Routes/#routes-options const supportedMethods = [ - 'all', - 'checkout', - 'copy', - 'delete', - 'get', - 'head', - 'lock', - 'merge', - 'mkactivity', - 'mkcol', - 'move', - 'm-search', - 'notify', - 'options', - 'patch', - 'post', - 'purge', - 'put', - 'report', - 'search', - 'subscribe', - 'trace', - 'unlock', - 'unsubscribe', + 'DELETE', + 'GET', + 'HEAD', + 'PATCH', + 'POST', + 'PUT', + 'OPTIONS', + 'SEARCH', + 'TRACE', + 'PROPFIND', + 'PROPPATCH', + 'MKCOL', + 'COPY', + 'MOVE', + 'LOCK', + 'UNLOCK', ] -const standardize = (middleware) => { - const m = cloneDeep(middleware) +const standardize = (plugin) => { + const m = cloneDeep(plugin) // make sure order is defined if (m.order === undefined) { @@ -53,7 +45,7 @@ const standardize = (middleware) => { } m.methods = m.methods .map((method) => { - return method.toLocaleLowerCase() + return method.toLocaleUpperCase() }) .filter((method) => { return supportedMethods.includes(method) diff --git a/packages/core/lib/resolvers.js b/packages/core/lib/resolvers.js index cb17aa76..d6cbc566 100644 --- a/packages/core/lib/resolvers.js +++ b/packages/core/lib/resolvers.js @@ -1,4 +1,4 @@ -import { resolve, join } from 'path' +import { resolve, join } from 'node:path' /** * Register a resolver. @@ -60,9 +60,9 @@ export const cwdResolver = (value) => { /** * File resolver. + * @param {any | undefined} [base] */ - -export const fileCallback = (base = undefined) => { +export const fileCallback = (base) => { return (name) => { if (base === undefined) { base = process.cwd() @@ -71,6 +71,12 @@ export const fileCallback = (base = undefined) => { } } -export const fileResolver = (value, base = undefined) => { +/** + * Register the file resolver. + * + * @param {any | undefined} value + * @param {any | undefined} [base] + */ +export const fileResolver = (value, base) => { return registerResolver('file', fileCallback(base), value) } diff --git a/packages/core/lib/sparql.js b/packages/core/lib/sparql.js new file mode 100644 index 00000000..168795be --- /dev/null +++ b/packages/core/lib/sparql.js @@ -0,0 +1,342 @@ +// @ts-check + +import replaceStream from 'string-replace-stream' +import formats from '@rdfjs-elements/formats-pretty' +import ParsingClient from 'sparql-http-client/ParsingClient.js' +import SimpleClient from 'sparql-http-client/SimpleClient.js' + +/** + * Supported types for the serialization. + */ +export const supportedTypes = [ + 'application/ld+json', + 'application/n-triples', + 'application/rdf+xml', + 'text/turtle', + 'application/trig', + 'text/csv', +] + +/** + * Convert a JSON-LD object to a CSV string. + * Works for simple JSON-LD objects got from a DESCRIBE query. + * + * @param {Object} jsonLD JSON-LD object to convert to CSV + * @returns {string} CSV string + */ +const jsonLDToCSV = (jsonLD) => { + const rows = ['"key","value"'] + + /** + * Process a value and add it to the rows array. + * + * @param {string} key Key of the value. + * @param {any} value Value to process. + */ + const processValue = (key, value) => { + if (Array.isArray(value)) { + // For each array item, check if it's an object with '@id', else use the item directly + value.forEach(item => { + const itemValue = (item && typeof item === 'object' && item['@id']) ? item['@id'] : item + rows.push(`"${key.replace(/"/g, '""')}","${itemValue.toString().replace(/"/g, '""')}"`) + }) + } else if (value && typeof value === 'object' && value['@id']) { + // Handle object with '@id' + rows.push(`"${key.replace(/"/g, '""')}","${value['@id'].replace(/"/g, '""')}"`) + } else { + // Handle other values (null/undefined will become empty strings) + rows.push(`"${key.replace(/"/g, '""')}","${(value || '').toString().replace(/"/g, '""')}"`) + } + } + + // Process each entry of the JSON-LD object + for (const key in jsonLD) { + if (Object.prototype.hasOwnProperty.call(jsonLD, key)) { + processValue(key, jsonLD[key]) + } + } + + // Add an empty row to make sure the CSV is ending with a blank line + rows.push('') + + return rows.join('\n') +} + +/** + * Serialize a formatted stream to a string. + * + * @param {import('@rdfjs/types').Stream | import('node:stream').EventEmitter | null} quadStream + * @returns {Promise} The serialized string. + */ +export const serializeFormattedStream = async (quadStream) => { + if (quadStream === null) { + throw new Error('No quad stream available') + } + + let serialized = '' + // @ts-ignore + for await (const chunk of quadStream) { + serialized += chunk + } + return serialized +} + +/** + * Serialize a quad stream to a string. + * + * @param {import('@rdfjs/types').Stream | null} quadStream The quad stream to serialize. + * @param {string} mimeType The mime type to serialize to. + * @param {Object?} _options Options (reserved for further use). + * @returns {Promise} The serialized string. + */ +export const serializeQuadStream = async (quadStream, mimeType, _options = {}) => { + const isCsv = mimeType === 'text/csv' + const serializerMimeType = isCsv ? 'application/ld+json' : mimeType + const formatted = formats.serializers.import(serializerMimeType, quadStream) + let serialized = await serializeFormattedStream(formatted) + // Pretty print JSON-LD + if (serializerMimeType === 'application/ld+json') { + serialized = JSON.stringify(JSON.parse(serialized), null, 2) + } + if (isCsv) { + serialized = jsonLDToCSV(JSON.parse(serialized)) + } + return serialized +} + +/** + * Compute the value for the `rewrite` option. + * + * @param {*} value The value from the configuration (ideally: true, false or auto ; default="auto"). + * @param {string} [datasetBaseUrl] The dataset base URL to use in case rewriting is enabled. + * @returns {boolean} The computed value of the `rewrite` option. + */ +const getRewriteOptionValue = (value, datasetBaseUrl) => { + const jsonValue = JSON.stringify(`${value}`.toLocaleLowerCase()) + + if (jsonValue === '"false"') { + return false + } + + if (jsonValue === '"true"') { + // Check if `datasetBaseUrl` is a valid URL if present + if (datasetBaseUrl) { + try { + new URL(datasetBaseUrl) // eslint-disable-line no-new + } catch (_e) { + throw new Error( + `The current value you have for 'datasetBaseUrl' is '${datasetBaseUrl}', which is not a valid URL.`, + ) + } + } else { + throw new Error('Rewriting is enabled but no datasetBaseUrl is configured.') + } + + return true + } + + // Let's assume that we are in "auto" mode. + + // Check if `datasetBaseUrl` is a valid URL if present + if (datasetBaseUrl) { + try { + new URL(datasetBaseUrl) // eslint-disable-line no-new + return true + } catch (_e) { + // Don't throw in case of an invalid URL + return false + } + } + + return false +} + +/** + * Compute the value for the `rewrite` option and the `datasetBaseUrl`. + * + * @param {*} value The value from the configuration (ideally: true, false or auto ; default="auto"). + * @param {string} [datasetBaseUrl] The dataset base URL to use in case rewriting is enabled. + * @returns {{ rewrite: boolean, datasetBaseUrl: string | null, replaceIri: (iri: string) => string, iriOrigin: (iri: string) => string}} The computed value of the `rewrite` option. + */ +export const getRewriteConfiguration = (value, datasetBaseUrl) => { + const iriOrigin = (iri) => { + const parts = new URL(iri) + parts.pathname = '/' + parts.search = '' + parts.username = '' + parts.password = '' + + return parts.toString() + } + + const rewriteValue = getRewriteOptionValue(value, datasetBaseUrl) + if (!rewriteValue) { + return { + rewrite: false, + datasetBaseUrl: null, + replaceIri: (iri) => iri, + iriOrigin, + } + } + + const datasetBaseUrlValue = new URL(datasetBaseUrl) + datasetBaseUrlValue.search = '' + datasetBaseUrlValue.searchParams.forEach((_value, key) => datasetBaseUrlValue.searchParams.delete(key)) + const datasetBaseUrlString = datasetBaseUrlValue.toString() + + return { + rewrite: rewriteValue, + datasetBaseUrl: datasetBaseUrlString, + replaceIri: (iri) => iri.replace(iriOrigin(iri), datasetBaseUrlString), + iriOrigin, + } +} + +/** + * @typedef {Object} QueryResult + * @property {any} response The response body. + * @property {string} contentType The response content type. + */ + +/** + * @typedef {Object} RewriteResponseOptions + * @property {string} find The string to find. + * @property {string} replace The string to replace with. + */ + +/** + * @typedef {Object} QueryOptions + * @property {boolean} [ask] Is it a ASK query? + * @property {boolean} [select] Is it a SELECT query? + * @property {Array} [rewriteResponse] Replace strings in the response. + */ + +/** + * @typedef {Object} SPARQLClient + * @property {{parsing: ParsingClient, simple: SimpleClient}} clients Supported clients. + * @property {(query: string, options?: QueryOptions) => Promise | boolean>} query Query function. + */ + +/** + * Generate a SPARQL client. + * + * @param {string} sparqlEndpoint The SPARQL endpoint URL. + * @param {QueryOptions} options Options. + * @returns {SPARQLClient} The SPARQL client. + */ +export const generateClient = (sparqlEndpoint, options) => { + const clients = { + parsing: new ParsingClient({ endpointUrl: sparqlEndpoint, ...options }), + simple: new SimpleClient({ endpointUrl: sparqlEndpoint, ...options }), + } + + /** + * + * @param {string} query The SPARQL query to use. + * @param {QueryOptions?} [options] Query options. + * @returns {Promise | boolean>} The quad stream or boolean for ASK queries. + */ + const query = async (query, options = {}) => { + const isAsk = options && options.ask + const isSelect = options && options.select + const rewriteResponse = (options && options.rewriteResponse) || [] + + if (isAsk) { + return await clients.parsing.query.ask(query) + } + + if (isSelect) { + const selectResults = await clients.parsing.query.select(query) + const replacedSelectResults = selectResults.map((row) => { + for (const key in row) { + if (!Object.prototype.hasOwnProperty.call(row, key) || !row[key].value) { + continue + } + + let value = row[key].value + if (typeof value !== 'string') { + continue + } + + for (const replacement of rewriteResponse) { + value = value.replace(replacement.find, replacement.replace) + } + row[key].value = value + } + return row + }) + return replacedSelectResults + } + + const result = await clients.simple.query.construct(query) + const contentType = result.headers.get('Content-Type') || 'application/n-triples' + const body = result.body + + // Function to apply all replacements in sequence + const applyReplacements = (stream, replacements) => { + let pipeline = stream + for (const replacement of replacements) { + pipeline = pipeline.pipe(replaceStream(replacement.find, replacement.replace)) + } + return pipeline + } + + return { + response: applyReplacements(body, rewriteResponse), + contentType, + } + } + + return { + clients, + query, + } +} + +/** + * SPARQL Endpoint configuration. + * + * @typedef {Object} SPARQLEndpointConfig + * @property {string} url SPARQL endpoint URL. + */ + +/** + * Create a SPARQL query function that can be used inside Trifid plugins. + * + * @param {import('pino').Logger} logger Logger instance. + * @param {Record} configuredEndpoints Configured endpoints. + * @param {string} instanceHostname Instance hostname, used to resolve relative URLs. + * @returns {{endpoints: Record, query: (pluginLogger: import('pino').Logger) => import('../types/index.js').TrifidQuery}} Query function. + */ +export const initQuery = (logger, configuredEndpoints = {}, instanceHostname) => { + const endpoints = Object.fromEntries(Object.entries(configuredEndpoints).map(([name, options]) => { + logger.debug(`Configured following SPARQL endpoint: ${name}`) + const { url: endpointUrl, ...otherOptions } = options + const url = new URL(endpointUrl, instanceHostname) + return [name, generateClient(url.toString(), otherOptions)] + })) + + /** + * Execute a SPARQL query. + * + * @param {import('pino').Logger} pluginLogger Plugin logger instance. + * @returns {(query: string, options?: Record) => Promise} Query result. + */ + const query = (pluginLogger) => async (query, options = {}) => { + pluginLogger.debug(`SPARQL query: \n${query}`) + + const { endpoint: configuredEndpoint, ...otherOptions } = options + + const endpoint = configuredEndpoint || 'default' + if (!(endpoint in endpoints)) { + throw new Error(`Unknown SPARQL endpoint: ${endpoint}`) + } + + return await endpoints[endpoint].query(query, otherOptions) + } + + return { + endpoints, + query, + } +} diff --git a/packages/core/lib/templateEngine.js b/packages/core/lib/templateEngine.js index ac93a39b..6ce81a4d 100644 --- a/packages/core/lib/templateEngine.js +++ b/packages/core/lib/templateEngine.js @@ -1,6 +1,8 @@ -import fs from 'fs/promises' -import { dirname } from 'path' -import { fileURLToPath } from 'url' +// @ts-check + +import fs from 'node:fs/promises' +import { dirname } from 'node:path' +import { fileURLToPath } from 'node:url' import Handlebars from 'handlebars' import merge from 'lodash/merge.js' @@ -21,12 +23,32 @@ const defaultConfig = { disableFooter: false, } -const templateEngine = async (defaultOptions = {}, forceRefresh = false) => { +const forceRefresh = false + +/** + * Register a new helper. + * - name: Name of the helper. + * - fn: Helper function. + * + * @typedef {(name: string, fn: import('handlebars').HelperDelegate) => void} RegisterHelperFunction + */ + +/** + * Render a view. + * + * @typedef {(templatePath: string, context: Record, options: Record) => Promise} RenderFunction + */ + +/** + * Create a new template engine instance. + * + * @param {Object} defaultOptions Default optioons for the template engine. + * @param {Map} locals Trifid locals. + * @returns {Promise<{ render: RenderFunction, registerHelper: RegisterHelperFunction }>} Template engine instance. + */ +const templateEngine = async (defaultOptions, locals) => { /** - * Register a new helper. - * - * @param {string} name Name of the helper. - * @param {Function} fn Helper function. + * @type {RegisterHelperFunction} */ const registerHelper = (name, fn) => { Handlebars.registerHelper(name, fn) @@ -57,7 +79,7 @@ const templateEngine = async (defaultOptions = {}, forceRefresh = false) => { throw new Error("no 'main' template was defined") } - // register all partials + // Register all partials Object.entries(templateOptions.partials).map(async (t) => { const partialName = t[0] const partialPath = t[1] @@ -79,18 +101,17 @@ const templateEngine = async (defaultOptions = {}, forceRefresh = false) => { const mainTemplate = templates.main /** - * Render the full page. - * - * @param {string} templatePath Handlebars template path. - * @param {Record} context Context for the rendered view. - * @param {Record} options Options to pass for the main view. - * @returns {string} The rendered view. + * @type {RenderFunction} */ const render = async (templatePath, context, options = {}) => { const template = await resolveTemplate(templatePath) - const body = template(context) + const localsObject = Object.fromEntries(locals.entries()) + const mergedLocals = merge(localsObject, context.locals) + const mergedContext = merge({}, context) + mergedContext.locals = mergedLocals + const body = template(mergedContext) - const renderedOptions = merge({}, context, templateOptions, options) + const renderedOptions = merge({}, mergedContext, templateOptions, options) const renderedPartials = Object.fromEntries( Object.entries(templatesWithoutMain).map((t) => [ t[0], diff --git a/packages/core/middlewares/errors.js b/packages/core/middlewares/errors.js deleted file mode 100644 index 2c6bdcfc..00000000 --- a/packages/core/middlewares/errors.js +++ /dev/null @@ -1,20 +0,0 @@ -// @ts-check - -/** @type {import('../types/index.d.ts').TrifidMiddleware} */ -const factory = (trifid) => { - const { logger } = trifid - - return (err, _req, res, _next) => { - logger.error(err.stack) - - res.statusCode = res.statusCode || 500 - // handle the case where there is an error, but no specific status code has been set - if (res.statusCode < 400) { - res.statusCode = 500 - } - - res.end() - } -} - -export default factory diff --git a/packages/core/middlewares/express.js b/packages/core/middlewares/express.js deleted file mode 100644 index 93dfa908..00000000 --- a/packages/core/middlewares/express.js +++ /dev/null @@ -1,28 +0,0 @@ -// @ts-check -import { loader } from '../lib/middlewares/loader.js' - -/** - * Import a plain Express middleware. - * - * Configuration fields: - * - module (string, required): the name of the NPM module to load - * - options (any, optional): some options to pass to the Express middleware - * - * @param {import('../types/index.d.ts').TrifidMiddlewareArgument} trifid Trifid object containing the configuration, and other utility functions. - * @returns {Promise} Express middleware. - */ -const factory = async (trifid) => { - const { config } = trifid - const { module, options } = config - if (!module) { - throw new Error( - "configuration requires 'module' field, specifying the Express middleware NPM module to load", - ) - } - - const middleware = await loader(module) - - return middleware(options) -} - -export default factory diff --git a/packages/core/middlewares/health.js b/packages/core/middlewares/health.js deleted file mode 100644 index 26a4cf8d..00000000 --- a/packages/core/middlewares/health.js +++ /dev/null @@ -1,15 +0,0 @@ -// @ts-check - -/** @type {import('../types/index.d.ts').TrifidMiddleware} */ -const factory = (trifid) => { - const { logger } = trifid - - return (_req, res, _next) => { - logger.debug('reached health endpoint') - - res.set('Content-Type', 'text/plain') - res.send('ok') - } -} - -export default factory diff --git a/packages/core/middlewares/iri.js b/packages/core/middlewares/iri.js deleted file mode 100644 index 3696763b..00000000 --- a/packages/core/middlewares/iri.js +++ /dev/null @@ -1,65 +0,0 @@ -// @ts-check - -import { URL } from 'url' -import absoluteUrl from 'absolute-url' - -/** - * Replacement for `url.format` which is deprecated. - * - * @param {URL} urlObject The URL object. - * @returns {string} URL as a string. - */ -const urlFrom = (urlObject) => urlObject.toString() - -/** - * Remove the searchParams part of a URL. - * - * @param {string} originalUrl Original URL. - * @returns {string} The URL without the searchParams part. - */ -const removeSearchParams = (originalUrl) => { - const url = new URL(originalUrl) - url.search = '' - url.searchParams.forEach((_value, key) => url.searchParams.delete(key)) - return urlFrom(url) -} - -/** @type {import('../types/index.d.ts').TrifidMiddleware} */ -const factory = (trifid) => { - const { config, logger } = trifid - const { datasetBaseUrl } = config - - // check if `datasetBaseUrl` is a valid URL if present - if (datasetBaseUrl) { - try { - new URL(datasetBaseUrl) // eslint-disable-line no-new - } catch (_e) { - throw new Error( - `The current value you have for 'datasetBaseUrl' is '${datasetBaseUrl}', which is not a valid URL.`, - ) - } - } - - return (req, res, next) => { - absoluteUrl.attach(req) - const url = req.absoluteUrl() - req.iri = decodeURI(removeSearchParams(url)) - - // set current path, so that middlewares can access it - res.locals.currentPath = req.path - - // update `req.iri` if a value for `datasetBaseUrl` is provided - if (datasetBaseUrl) { - const absoluteBaseUrl = new URL('/', url) - const currentBaseUrl = absoluteBaseUrl.toString() - req.iri = req.iri.replace(currentBaseUrl, datasetBaseUrl) - logger.debug(`value for req.iri: ${req.iri} (rewritten)`) - return next() - } - - logger.debug(`value for req.iri: ${req.iri}`) - return next() - } -} - -export default factory diff --git a/packages/core/middlewares/locals.js b/packages/core/middlewares/locals.js deleted file mode 100644 index 3ea2e90b..00000000 --- a/packages/core/middlewares/locals.js +++ /dev/null @@ -1,47 +0,0 @@ -// @ts-check -import url from 'url' -import absoluteUrl from 'absolute-url' - -/** @type {import('../types/index.d.ts').TrifidMiddleware} */ -const factory = (trifid) => { - const { logger } = trifid - - const defaultLanguage = 'en' - const supportedLanguages = ['en', 'fr', 'de', 'it'] - - const oneMonthMilliseconds = 60 * 60 * 24 * 30 * 1000 - - return (req, res, next) => { - absoluteUrl.attach(req) - - // export language information for other middlewares - res.locals.defaultLanguage = defaultLanguage - res.locals.currentLanguage = req?.cookies?.i18n || defaultLanguage - - // update langage by setting `lang` query parameter - const lang = req.query.lang - if (lang && supportedLanguages.includes(lang)) { - logger.debug(`set default language to '${lang}'`) - res.cookie('i18n', lang, { maxAge: oneMonthMilliseconds }) - res.locals.currentLanguage = lang - } - - // requested resource - res.locals.iri = req.iri - - // requested resource parsed into URL object - res.locals.url = new url.URL(res.locals.iri) - - // dummy translation - res.locals.t = - res.locals.t || - ((x) => { - const translation = x.substring(x.indexOf(':') + 1) - logger.debug(`translation value: ${translation}`) - return translation - }) - next() - } -} - -export default factory diff --git a/packages/core/middlewares/notFound.js b/packages/core/middlewares/notFound.js deleted file mode 100644 index 64cf2cf7..00000000 --- a/packages/core/middlewares/notFound.js +++ /dev/null @@ -1,49 +0,0 @@ -// @ts-check - -import { dirname } from 'path' -import { fileURLToPath } from 'url' - -const currentDir = dirname(fileURLToPath(import.meta.url)) - -/** @type {import('../types/index.d.ts').TrifidMiddleware} */ -const factory = (trifid) => { - const { logger, render } = trifid - - return async (req, res, _next) => { - logger.debug(`path '${req.url}' returned a 404 error (Not Found)`) - - res.status(404) - - const accepts = req.accepts([ - 'text/plain', - 'json', - 'html', - 'application/n-quads', - ]) - switch (accepts) { - case 'json': - res.send({ success: false, message: 'Not found', status: 404 }) - break - - case 'application/n-quads': - case 'html': - res.send( - await render( - `${currentDir}/../views/404.hbs`, - { - url: req.url, - locals: res.locals, - }, - { title: 'Not Found' }, - ), - ) - break - - default: - res.send('Not Found\n') - break - } - } -} - -export default factory diff --git a/packages/core/middlewares/redirect.js b/packages/core/middlewares/redirect.js deleted file mode 100644 index 489a54d3..00000000 --- a/packages/core/middlewares/redirect.js +++ /dev/null @@ -1,17 +0,0 @@ -// @ts-check - -/** @type {import('../types/index.d.ts').TrifidMiddleware} */ -const factory = (trifid) => { - const { config, logger } = trifid - const { target } = config - if (!target) { - throw new Error("configuration is missing 'target' field") - } - - return (_req, res, _next) => { - logger.debug(`redirect to: ${target}`) - res.redirect(target) - } -} - -export default factory diff --git a/packages/core/middlewares/rewrite.js b/packages/core/middlewares/rewrite.js deleted file mode 100644 index 12b57a74..00000000 --- a/packages/core/middlewares/rewrite.js +++ /dev/null @@ -1,38 +0,0 @@ -import camouflageRewrite from 'camouflage-rewrite' - -/** - * Rewrite the dataset base URL. - * - * Configuration fields: - * - datasetBaseUrl (string): the base URL to rewrite - * - rewriteContent (boolean): rewrite response content - * - * Other available options are documented here: https://github.com/zazuko/camouflage-rewrite#usage - * - * @param {import('../types/index.d.ts').TrifidMiddlewareArgument} trifid Trifid object containing the configuration, and other utility functions. - * @returns {Promise} Express middleware. - */ -const factory = (trifid) => { - const { config } = trifid - const { rewriteContent, datasetBaseUrl } = config - - let rewriteContentValue = true - if (rewriteContent !== undefined) { - rewriteContentValue = rewriteContent - } - - // skip rewriting if the `datasetBaseUrl` is empty - if (!datasetBaseUrl) { - return (_req, _res, next) => { - next() - } - } - - return camouflageRewrite({ - ...config, - url: datasetBaseUrl, - rewriteContent: rewriteContentValue, - }) -} - -export default factory diff --git a/packages/core/middlewares/static.js b/packages/core/middlewares/static.js deleted file mode 100644 index 774eec9a..00000000 --- a/packages/core/middlewares/static.js +++ /dev/null @@ -1,13 +0,0 @@ -// @ts-check -import express from 'express' - -/** @type {import('../types/index.d.ts').TrifidMiddleware} */ -const factory = (trifid) => { - const { directory } = trifid.config - if (!directory) { - throw new Error("configuration is missing 'directory' field") - } - return express.static(directory) -} - -export default factory diff --git a/packages/core/middlewares/throw.js b/packages/core/middlewares/throw.js deleted file mode 100644 index f94f6f43..00000000 --- a/packages/core/middlewares/throw.js +++ /dev/null @@ -1,17 +0,0 @@ -// @ts-check - -/** @type {import('../types/index.d.ts').TrifidMiddleware} */ -const factory = (trifid) => { - const { message } = trifid.config - - let messageToThrow = 'Oops, something went wrong :-(' - if (message) { - messageToThrow = `${message}` - } - - return (_req, _res, _next) => { - throw new Error(messageToThrow) - } -} - -export default factory diff --git a/packages/core/package.json b/packages/core/package.json index 42c69adb..e49f515f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -14,55 +14,66 @@ "url": "https://github.com/zazuko/trifid/issues" }, "scripts": { - "test": "node --experimental-vm-modules ../../node_modules/jest/bin/jest.js", + "test": "c8 --reporter=lcov --reporter=text mocha test/**.test.js test/**/*.test.js", "watch": "nodemon server.js", "typings": "tsc", - "clean": "rimraf *.tgz *.d.ts* lib/*.d.ts* lib/**/*.d.ts* middlewares/*.d.ts* middlewares/**/*.d.ts*", + "clean": "rimraf *.tgz dist/", "prepack": "npm run clean && npm run typings", "postpublish": "npm run clean", "release": "changeset publish" }, + "files": [ + "dist/", + "lib/", + "plugins/", + "static/", + "views/", + "config.yaml", + "config2.json", + "logo.svg", + "index.js", + "server.js", + "CHANGELOG.md" + ], "main": "index.js", - "types": "./index.d.ts", + "types": "./dist/index.d.ts", "bin": { "trifid-core": "./server.js" }, "dependencies": { - "absolute-url": "^1.2.2", + "@fastify/accepts": "^4.3.0", + "@fastify/cookie": "^9.3.1", + "@fastify/cors": "^9.0.1", + "@fastify/formbody": "^7.4.0", + "@fastify/static": "^7.0.1", + "@fontsource/playfair-display": "^5.0.21", + "@fontsource/roboto": "^5.0.12", + "@rdfjs-elements/formats-pretty": "^0.6.7", + "@types/sparql-http-client": "^2.2.15", "ajv": "^8.12.0", - "camouflage-rewrite": "^1.5.1", "commander": "^12.0.0", - "cookie-parser": "^1.4.6", - "cors": "^2.8.5", - "express": "^4.18.2", + "fastify": "^4.26.1", "handlebars": "^4.7.8", + "import-meta-resolve": "^4.0.0", "json5": "^2.2.3", "lodash": "^4.17.21", "pino": "^8.17.1", "pino-pretty": "^10.3.1", - "vhost": "^3.0.2", + "sparql-http-client": "^2.4.2", + "string-replace-stream": "^0.0.2", "yaml": "^2.3.2" }, "devDependencies": { - "@babel/core": "^7.22.17", - "@babel/preset-env": "^7.23.6", - "@jest/globals": "^29.7.0", - "@types/express": "^4.17.20", + "@rdfjs/types": "^1.1.0", "@types/node": "^20.10.6", - "babel-jest": "^29.7.0", - "jest": "^29.7.0", + "c8": "^9.1.0", + "chai": "^4.4.1", + "chai-as-promised": "^7.1.1", + "mocha": "^10.3.0", "nodemon": "^3.0.1", - "path-scurry": "^1.10.1", "rimraf": "^5.0.5", "supertest": "^6.3.4", - "typescript": "5.3.3" - }, - "jest": { - "collectCoverage": true, - "coveragePathIgnorePatterns": [ - "/node_modules/", - "/test/" - ] + "typescript": "^5.3.3" }, "publishConfig": { "access": "public" diff --git a/packages/core/plugins/health.js b/packages/core/plugins/health.js new file mode 100644 index 00000000..2967ad3a --- /dev/null +++ b/packages/core/plugins/health.js @@ -0,0 +1,29 @@ +// @ts-check + +/** + * Health route handler. + * + * @param {import('fastify').FastifyRequest} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ +const healthRouteHandler = async (request, reply) => { + request.log.debug('reached health endpoint') + reply.type('text/plain').send('OK\n') +} + +/** @type {import('../types/index.js').TrifidPlugin} */ +const factory = async (_trifid) => { + return { + defaultConfiguration: async () => { + return { + paths: ['/healthz'], + methods: ['GET'], + } + }, + routeHandler: async () => { + return healthRouteHandler + }, + } +} + +export default factory diff --git a/packages/core/plugins/locals.js b/packages/core/plugins/locals.js new file mode 100644 index 00000000..2a7b68c3 --- /dev/null +++ b/packages/core/plugins/locals.js @@ -0,0 +1,53 @@ +// @ts-check + +/** @type {import('../types/index.js').TrifidPlugin} */ +const factory = async (trifid) => { + const { logger, server } = trifid + + const locals = server.locals + + const defaultLanguage = 'en' + const supportedLanguages = ['en', 'fr', 'de', 'it'] + + const oneMonthMilliseconds = 60 * 60 * 24 * 30 * 1000 + + /** + * Hook to configure the language in the locals. + * + * @param {import('fastify').FastifyRequest<{ Querystring: { lang: string }}> & { session: Map }} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + * @param {import('fastify').DoneFuncWithErrOrRes} done Done function. + */ + const onRequestHookHandler = (request, reply, done) => { + const session = request.session + const currentLanguage = request.cookies.i18n || defaultLanguage + session.set('defaultLanguage', defaultLanguage) + session.set('currentLanguage', currentLanguage) + + const langQuery = request.query.lang || '' + if (langQuery && supportedLanguages.includes(langQuery)) { + logger.debug(`set default language to '${langQuery}'`) + reply.setCookie('i18n', langQuery, { maxAge: oneMonthMilliseconds }) + session.set('currentLanguage', langQuery) + } + + if (!session.has('t') || typeof session.get('t') !== 'function') { + /** + * Dummy translation function. + * @param {string} x Translation key. + * @returns {string} Translation value. + */ + const t = (x) => { + const translation = x.substring(x.indexOf(':') + 1) + logger.debug(`translation value: ${translation}`) + return translation + } + session.set('t', t) + } + + done() + } + server.addHook('onRequest', onRequestHookHandler) +} + +export default factory diff --git a/packages/core/plugins/redirect.js b/packages/core/plugins/redirect.js new file mode 100644 index 00000000..e5bf46d1 --- /dev/null +++ b/packages/core/plugins/redirect.js @@ -0,0 +1,32 @@ +// @ts-check + +/** @type {import('../types/index.js').TrifidPlugin} */ +const factory = async (trifid) => { + const { config, logger } = trifid + const { target } = config + if (!target) { + throw new Error("configuration is missing 'target' field") + } + + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + } + }, + routeHandler: async () => { + /** + * Route handler. + * @param {import('fastify').FastifyRequest} _request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (_request, reply) => { + logger.debug(`redirect to: ${target}`) + reply.redirect(target) + } + return handler + }, + } +} + +export default factory diff --git a/packages/core/plugins/static.js b/packages/core/plugins/static.js new file mode 100644 index 00000000..9760429a --- /dev/null +++ b/packages/core/plugins/static.js @@ -0,0 +1,45 @@ +// @ts-check + +import fastifyStatic from '@fastify/static' + +/** @type {import('../types/index.js').TrifidPlugin} */ +const factory = async (trifid) => { + const { config, paths } = trifid + const { directory } = config + if (!directory) { + throw new Error("configuration is missing 'directory' field") + } + + const staticConfiguration = { + root: directory, + decorateReply: false, + } + + if (!paths) { + // Register static file serving for the root path + trifid.server.register(fastifyStatic, { + ...staticConfiguration, + prefix: '/', + }) + } else { + // Register static file serving for each configured path + paths.forEach((path) => { + trifid.server.register(fastifyStatic, { + ...staticConfiguration, + prefix: path, + }) + }) + } + + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + // Serve static files after other routes + order: 1200, + } + }, + } +} + +export default factory diff --git a/packages/core/plugins/throw.js b/packages/core/plugins/throw.js new file mode 100644 index 00000000..3873aebb --- /dev/null +++ b/packages/core/plugins/throw.js @@ -0,0 +1,32 @@ +// @ts-check + +/** @type {import('../types/index.js').TrifidPlugin} */ +const factory = async (trifid) => { + const { message } = trifid.config + + let messageToThrow = 'Oops, something went wrong :-(' + if (message) { + messageToThrow = `${message}` + } + + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + } + }, + routeHandler: async () => { + /** + * Route handler. + * @param {import('fastify').FastifyRequest} _request Request. + * @param {import('fastify').FastifyReply} _reply Reply. + */ + const handler = async (_request, _reply) => { + throw new Error(messageToThrow) + } + return handler + }, + } +} + +export default factory diff --git a/packages/core/middlewares/view.js b/packages/core/plugins/view.js similarity index 56% rename from packages/core/middlewares/view.js rename to packages/core/plugins/view.js index de689acd..51832072 100644 --- a/packages/core/middlewares/view.js +++ b/packages/core/plugins/view.js @@ -8,8 +8,7 @@ * - context (object, optional): context to give to this specific template file (some variables) * - options (object, optional): options to pass to the Trifid render function (change the title of the page, …) * - * @param {import('../types/index.d.ts').TrifidMiddlewareArgument} trifid Trifid object containing the configuration, and other utility functions. - * @returns Express middleware. + * @type {import('../types/index.js').TrifidPlugin} */ const factory = async (trifid) => { const { config, render } = trifid @@ -28,9 +27,23 @@ const factory = async (trifid) => { options = {} } - return async (_req, res, _next) => { - res.status(200) - res.send(await render(path, { ...context, locals: res.locals }, options)) + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + } + }, + routeHandler: async () => { + /** + * Route handler. + * @param {import('fastify').FastifyRequest} _request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (_request, reply) => { + reply.status(200).type('text/html').send(await render(path, { ...context }, options)) + } + return handler + }, } } diff --git a/packages/core/server.js b/packages/core/server.js index 7068cea0..611173dd 100755 --- a/packages/core/server.js +++ b/packages/core/server.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { join } from 'path' +import { join } from 'node:path' import { Command } from 'commander' import trifid from './index.js' @@ -15,7 +15,7 @@ program const opts = program.opts() const configFile = join(process.cwd(), opts.config) -// create a minimal configuration that extends the specified one +// Create a minimal configuration that extends the specified one const config = { extends: [configFile], server: { @@ -23,11 +23,11 @@ const config = { }, } -// add optional arguments to the configuration +// Add optional arguments to the configuration if (opts.port) { config.server.listener.port = opts.port } -// load the configuration and start the server +// Load the configuration and start the server const instance = await trifid(config) -instance.start() +await instance.start() diff --git a/packages/core/static/favicon.ico b/packages/core/static/favicon.ico new file mode 100644 index 00000000..26e7f877 Binary files /dev/null and b/packages/core/static/favicon.ico differ diff --git a/packages/core/static/style.css b/packages/core/static/style.css index de8faeb5..8a236c81 100644 --- a/packages/core/static/style.css +++ b/packages/core/static/style.css @@ -1,3 +1,7 @@ +/* Import fonts */ +@import url('/static/core-fonts/roboto/index.css'); +@import url('/static/core-fonts/playfair-display/index.css'); + * { box-sizing: border-box; } @@ -28,6 +32,7 @@ a { .trifid-footer { background-color: #ffb15e; height: 100px; + box-sizing: border-box; } .trifid-header .logo-block { @@ -71,3 +76,103 @@ a { .trifid-main { flex: 1; } + +@media screen and (max-width: 1200px) { + .trifid-content { + padding: 16px; + } + + .trifid-header .trifid-content, + .trifid-footer .trifid-content { + padding: 0; + } + + .trifid-header, + .trifid-header .logo-block { + height: 50px; + } + + .trifid-header img { + height: 32px; + } +} + +/* Header title */ +.trifid-header-title { + padding: 100px 0; + text-align: center; + background: #fcfcfc; + border-bottom: 1px solid #e5e5e5; + margin-bottom: 100px; + font-family: "Roboto", sans-serif; +} + +.trifid-header-title h1 { + font-size: 50px; + line-height: 50px; + padding-bottom: 16px; + font-weight: 700; + font-family: "Playfair Display", serif; +} + +.trifid-header-title p { + font-size: 24px; + line-height: 28px; +} + +/* Small header title */ +.trifid-header-title-small { + padding: 42px 0; + text-align: center; + background: #fcfcfc; + border-bottom: 1px solid #e5e5e5; + margin-bottom: 18px; + font-family: "Roboto", sans-serif; +} + +.trifid-header-title-small h1 { + font-size: 42px; + line-height: 42px; + padding-bottom: 12px; + font-weight: 700; + font-family: "Playfair Display", serif; +} + +.trifid-header-title-small p { + font-size: 24px; + line-height: 28px; +} + +@media screen and (max-width: 1200px) { + .trifid-header-title { + padding: 48px 0; + margin-bottom: 48px; + } + + .trifid-header-title h1 { + font-size: 42px; + line-height: 42px; + padding-bottom: 12px; + } + + .trifid-header-title p { + font-size: 18px; + line-height: 22px; + } + + .trifid-header-title-small { + padding: 24px 0; + margin-bottom: 12px; + } + + .trifid-header-title-small h1 { + font-size: 32px; + line-height: 32px; + padding-bottom: 8px; + } + + .trifid-header-title-small p { + font-size: 18px; + line-height: 22px; + } +} diff --git a/packages/core/test/config.handler.test.js b/packages/core/test/config.handler.test.js index 78262633..085663ca 100644 --- a/packages/core/test/config.handler.test.js +++ b/packages/core/test/config.handler.test.js @@ -1,132 +1,139 @@ -import { dirname } from 'path' -import { fileURLToPath } from 'url' -import { describe, expect, test } from '@jest/globals' +// @ts-check + +import { dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + +import { describe, it } from 'mocha' +import chai, { expect } from 'chai' +import chaiAsPromised from 'chai-as-promised' import handler from '../lib/config/handler.js' import { fileCallback } from '../lib/resolvers.js' +chai.use(chaiAsPromised) + describe('config handler', () => { - test('should not throw when loading an empty configuration file', async () => { + it('should not throw when loading an empty configuration file', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/empty.json')), - ).resolves.not.toThrow() + ).to.not.throw }) - test('should not throw when loading an empty configuration', async () => { - await expect(handler({})).resolves.not.toThrow() + it('should not throw when loading an empty configuration', () => { + return expect(handler({})).to.not.eventually.be.rejected }) - test('should not throw when loading a configuration that extends an existing one', async () => { + it('should not throw when loading a configuration that extends an existing one', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler({ extends: [`${currentDir}/support/empty.json`], }), - ).resolves.not.toThrow() + ).to.not.eventually.be.rejected }) - test('should throw when loading a configuration that extends a non-existant one', async () => { + it('should throw when loading a configuration that extends a non-existant one', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler({ extends: [`${currentDir}/support/non-existant.json`], }), - ).rejects.toThrow() + ).to.eventually.be.rejected }) - test('should not throw when loading a basic configuration file', async () => { + it('should not throw when loading a basic configuration file', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/basic.json')), - ).resolves.not.toThrow() + ).to.not.eventually.be.rejected }) - test('should not throw when loading a basic YAML configuration file', async () => { + it('should not throw when loading a basic YAML configuration file', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/basic.yaml')), - ).resolves.not.toThrow() + ).to.not.eventually.be.rejected }) - test('should throw when trying to load a non-existant configuration file', async () => { + it('should throw when trying to load a non-existant configuration file', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/non-existant.json')), - ).rejects.toThrow() + ).to.eventually.be.rejected }) - test('should throw when trying to read an invalid configuration file', async () => { + it('should throw when trying to read an invalid configuration file', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/invalid.json')), - ).rejects.toThrow() + ).to.eventually.be.rejected }) - test('should throw when trying to read an invalid JSON file', async () => { + it('should throw when trying to read an invalid JSON file', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/invalid-json.json')), - ).rejects.toThrow() + ).to.eventually.be.rejected }) - test('should support comments in JSON configuration file', async () => { + it('should support comments in JSON configuration file', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/basic-commented.json')), - ).resolves.not.toThrow() + ).to.not.eventually.be.rejected }) - test('simple chain should work', async () => { + it('simple chain should work', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/chain/chain1.json')), - ).resolves.not.toThrow() + ).to.not.eventually.be.rejected }) - test('check if expected values are here on extended config', async () => { + it('check if expected values are here on extended config', async () => { const currentDir = dirname(fileURLToPath(import.meta.url)) const config = await handler( fileCallback(currentDir)('./support/chain/chain1.json'), ) - expect(config.globals).toBeDefined() - expect(config.globals.value3).toBeDefined() - expect(config.globals.value3).toEqual('chain3') - expect(config.globals.value2).toBeDefined() - expect(config.globals.value2).toEqual('chain2') - expect(config.globals.value1).toBeDefined() - expect(config.globals.value1).toEqual('chain1') - expect(config.globals.value).toBeDefined() - expect(config.globals.value).toEqual('chain1') + expect(config.globals).to.not.be.undefined + expect(config.globals.value3).to.not.be.undefined + expect(config.globals.value3).to.equal('chain3') + expect(config.globals.value2).to.not.be.undefined + expect(config.globals.value2).to.equal('chain2') + expect(config.globals.value1).to.not.be.undefined + expect(config.globals.value1).to.equal('chain1') + expect(config.globals.value).to.not.be.undefined + expect(config.globals.value).to.equal('chain1') }) - test('simple check using the file resolver should work', async () => { + it('simple check using the file resolver should work', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/chain-file/chain1.json')), - ).resolves.not.toThrow() + ).to.not.eventually.be.rejected }) - test('check if expected values are here on extended config with file prefix', async () => { + it('check if expected values are here on extended config with file prefix', async () => { const currentDir = dirname(fileURLToPath(import.meta.url)) const config = await handler( fileCallback(currentDir)('./support/chain-file/chain1.json'), ) - expect(config.globals).toBeDefined() - expect(config.globals.value3).toBeDefined() - expect(config.globals.value3).toEqual('chain3') - expect(config.globals.value2).toBeDefined() - expect(config.globals.value2).toEqual('chain2') - expect(config.globals.value1).toBeDefined() - expect(config.globals.value1).toEqual('chain1') - expect(config.globals.value).toBeDefined() - expect(config.globals.value).toEqual('chain1') + expect(config.globals).to.not.be.undefined + expect(config.globals.value3).to.not.be.undefined + expect(config.globals.value3).to.equal('chain3') + expect(config.globals.value2).to.not.be.undefined + expect(config.globals.value2).to.equal('chain2') + expect(config.globals.value1).to.not.be.undefined + expect(config.globals.value1).to.equal('chain1') + expect(config.globals.value).to.not.be.undefined + expect(config.globals.value).to.equal('chain1') }) - test('should throw in case of infinite loop', async () => { + it('should throw in case of infinite loop', () => { const currentDir = dirname(fileURLToPath(import.meta.url)) - await expect( + return expect( handler(fileCallback(currentDir)('./support/infinite-loop/chain1.json')), - ).rejects.toThrow() + ).to.eventually.be.rejected }) }) diff --git a/packages/core/test/config.test.js b/packages/core/test/config.test.js index ea8788fb..301a039a 100644 --- a/packages/core/test/config.test.js +++ b/packages/core/test/config.test.js @@ -1,70 +1,73 @@ -import { describe, expect, test } from '@jest/globals' +// @ts-check + +import { describe, it } from 'mocha' +import { expect } from 'chai' import parser from '../lib/config/parser.js' describe('config', () => { - test('should not throw if the configuration is empty', () => { - expect(() => parser()).not.toThrow() - expect(() => parser({})).not.toThrow() + it('should not throw if the configuration is empty', () => { + expect(() => parser()).to.not.throw() + expect(() => parser({})).to.not.throw() }) - test('sould throw if we add some non-supported fields', () => { - expect(() => parser({ thisFieldIsNotSupported: true })).toThrow() + it('sould throw if we add some non-supported fields', () => { + expect(() => parser({ thisFieldIsNotSupported: true })).to.throw() }) - test('should not throw if supported properties are empty', () => { + it('should not throw if supported properties are empty', () => { expect(() => parser({ extends: [], globals: {}, server: {}, - middlewares: {}, + plugins: {}, }), - ).not.toThrow() + ).to.not.throw() }) - test('should not throw on valid values for extends', () => { + it('should not throw on valid values for extends', () => { expect(() => parser({ extends: [], }), - ).not.toThrow() + ).to.not.throw() expect(() => parser({ extends: ['path'], }), - ).not.toThrow() + ).to.not.throw() expect(() => parser({ extends: ['path1', 'path2', 'path3'], }), - ).not.toThrow() + ).to.not.throw() }) - test('should throw on invalid values for extends', () => { + it('should throw on invalid values for extends', () => { // this is a string instead of an array of strings expect(() => { parser({ extends: 'this is a string instead of an array', }) - }).toThrow() + }).to.throw() // this is not an array of strings, but an array of integers expect(() => { parser({ extends: [1, 2, 3], }) - }).toThrow() + }).to.throw() }) - test('should not throw on valid values for server', () => { + it('should not throw on valid values for server', () => { expect(() => { parser({ server: {}, }) - }).not.toThrow() + }).to.not.throw() expect(() => { parser({ @@ -73,7 +76,7 @@ describe('config', () => { express: {}, }, }) - }).not.toThrow() + }).to.not.throw() expect(() => { parser({ @@ -82,7 +85,7 @@ describe('config', () => { express: {}, }, }) - }).not.toThrow() + }).to.not.throw() expect(() => { parser({ @@ -93,7 +96,7 @@ describe('config', () => { express: {}, }, }) - }).not.toThrow() + }).to.not.throw() expect(() => { parser({ @@ -106,16 +109,16 @@ describe('config', () => { }, }, }) - }).not.toThrow() + }).to.not.throw() }) - test('should throw on invalid values for server', () => { + it('should throw on invalid values for server', () => { // this is a string instead of an object expect(() => { parser({ server: 'this is a string instead of an object', }) - }).toThrow() + }).to.throw() // unsupported field expect(() => { @@ -126,7 +129,7 @@ describe('config', () => { unsupportedField: true, }, }) - }).toThrow() + }).to.throw() // invalid port number expect(() => { @@ -138,7 +141,7 @@ describe('config', () => { express: {}, }, }) - }).toThrow() + }).to.throw() // unsupported listener property expect(() => { @@ -151,15 +154,15 @@ describe('config', () => { express: {}, }, }) - }).toThrow() + }).to.throw() }) - test('should not throw on valid values for globals', () => { + it('should not throw on valid values for globals', () => { expect(() => { parser({ globals: {}, }) - }).not.toThrow() + }).to.not.throw() expect(() => { parser({ @@ -167,7 +170,7 @@ describe('config', () => { foo: 'bar', }, }) - }).not.toThrow() + }).to.not.throw() expect(() => { parser({ @@ -176,7 +179,7 @@ describe('config', () => { jon: 'doe', }, }) - }).not.toThrow() + }).to.not.throw() // multi-level globals expect(() => { @@ -187,39 +190,39 @@ describe('config', () => { }, }, }) - }).not.toThrow() + }).to.not.throw() }) - test('should throw on invalid values for globals', () => { + it('should throw on invalid values for globals', () => { // this is a string instead of an object expect(() => { parser({ globals: 'this is a string instead of an object', }) - }).toThrow() + }).to.throw() }) - test('should not throw on valid values for middlewares', () => { + it('should not throw on valid values for plugins', () => { expect(() => { parser({ - middlewares: {}, + plugins: {}, }) - }).not.toThrow() + }).to.not.throw() expect(() => { parser({ - middlewares: { + plugins: { module: { order: 42, module: 'module', }, }, }) - }).not.toThrow() + }).to.not.throw() expect(() => { parser({ - middlewares: { + plugins: { module: { order: 42, module: 'module', @@ -229,11 +232,11 @@ describe('config', () => { }, }, }) - }).not.toThrow() + }).to.not.throw() expect(() => { parser({ - middlewares: { + plugins: { module: { order: 42, module: 'module', @@ -244,12 +247,12 @@ describe('config', () => { }, }, }) - }).not.toThrow() + }).to.not.throw() // allow complex config object expect(() => { parser({ - middlewares: { + plugins: { module: { order: 42, module: 'module', @@ -261,36 +264,39 @@ describe('config', () => { }, }, }) - }).not.toThrow() + }).to.not.throw() }) - test('should throw on invalid values for middlewares', () => { - // this is a string instead of an object - expect(() => { - parser({ - middlewares: 'this is a string instead of an object', - }) - }).toThrow() - - // not scoped into an object per middleware - expect(() => { - parser({ - middlewares: { - order: 42, - name: 'module', - }, - }) - }).toThrow() + describe('should throw on invalid values for plugins', () => { + it('should throw if plugins is a string', () => { + return expect(() => { + parser({ + plugins: 'this is a string instead of an object', + }) + }).to.throw() + }) - // missing "module" property - expect(() => { - parser({ - middlewares: { - module: { + it('should throw if plugins is not an object of plugins', () => { + return expect(() => { + parser({ + plugins: { order: 42, + name: 'module', }, - }, - }) - }).toThrow() + }) + }).to.throw() + }) + + it('should throw if the "module" property is missing', () => { + expect(() => { + parser({ + plugins: { + module: { + order: 42, + }, + }, + }) + }).to.throw() + }) }) }) diff --git a/packages/core/test/middlewares/errors.test.js b/packages/core/test/middlewares/errors.test.js index 75957be3..f561977a 100644 --- a/packages/core/test/middlewares/errors.test.js +++ b/packages/core/test/middlewares/errors.test.js @@ -1,64 +1,66 @@ -import express from 'express' -import request from 'supertest' -import { describe, test } from '@jest/globals' +// // @ts-check -import errorsMiddleware from '../../middlewares/errors.js' +// import express from 'express' +// import request from 'supertest' +// import { describe, test } from '@jest/globals' -describe('errors middleware', () => { - test('should return a 500 status code', async () => { - const app = express() +// import errorsPlugin from '../../plugins/errors.js' - const throwingMiddleware = (_req, _res, _next) => { - throw new Error('Oops, something went wrong…') - } +// describe('errors plugin', () => { +// test('should return a 500 status code', async () => { +// const app = express() - app.use(throwingMiddleware) - app.use( - errorsMiddleware({ - logger: { - error: (_msg) => { }, - }, - }), - ) +// const throwingPlugin = (_req, _res, _next) => { +// throw new Error('Oops, something went wrong…') +// } - return request(app).get('/').expect(500) - }) +// app.use(throwingPlugin) +// app.use( +// errorsPlugin({ +// logger: { +// error: (_msg) => { }, +// }, +// }), +// ) - test('should forward status code', async () => { - const app = express() +// return request(app).get('/').expect(500) +// }) - const throwingMiddleware = (_req, res, _next) => { - res.status(502).send('Something went wrong :-(') - } +// test('should forward status code', async () => { +// const app = express() - app.use(throwingMiddleware) - app.use( - errorsMiddleware({ - logger: { - error: (_msg) => { }, - }, - }), - ) +// const throwingPlugin = (_req, res, _next) => { +// res.status(502).send('Something went wrong :-(') +// } - return request(app).get('/').expect(502) - }) +// app.use(throwingPlugin) +// app.use( +// errorsPlugin({ +// logger: { +// error: (_msg) => { }, +// }, +// }), +// ) - test('should return an empty body in case of internal error', async () => { - const app = express() +// return request(app).get('/').expect(502) +// }) - const throwingMiddleware = (_req, _res, _next) => { - throw new Error('Oops, something went wrong…') - } +// test('should return an empty body in case of internal error', async () => { +// const app = express() - app.use(throwingMiddleware) - app.use( - errorsMiddleware({ - logger: { - error: (_msg) => { }, - }, - }), - ) +// const throwingPlugin = (_req, _res, _next) => { +// throw new Error('Oops, something went wrong…') +// } - return request(app).get('/').expect('') - }) -}) +// app.use(throwingPlugin) +// app.use( +// errorsPlugin({ +// logger: { +// error: (_msg) => { }, +// }, +// }), +// ) + +// return request(app).get('/').expect('') +// }) +// }) diff --git a/packages/core/test/middlewares/health.test.js b/packages/core/test/middlewares/health.test.js index f083920d..7a9aae19 100644 --- a/packages/core/test/middlewares/health.test.js +++ b/packages/core/test/middlewares/health.test.js @@ -1,88 +1,90 @@ -import express from 'express' -import request from 'supertest' -import { describe, test } from '@jest/globals' - -import healthMiddleware from '../../middlewares/health.js' - -describe('health middleware', () => { - test('should return expected content-type', async () => { - const app = express() - - app.use( - '/health', - healthMiddleware({ - logger: { - debug: (_msg) => { }, - }, - }), - ) - - return request(app) - .get('/health') - .expect('Content-Type', /text\/plain/) - }) - - test('should return expected body', async () => { - const app = express() - - app.use( - '/health', - healthMiddleware({ - logger: { - debug: (_msg) => { }, - }, - }), - ) - - return request(app).get('/health').expect('ok') - }) - - test('should return expected status code', async () => { - const app = express() - - app.use( - '/health', - healthMiddleware({ - logger: { - debug: (_msg) => { }, - }, - }), - ) - - return request(app).get('/health').expect(200) - }) - - test('should call health request with valid response', async () => { - const app = express() - - app.use( - '/health', - healthMiddleware({ - logger: { - debug: (_msg) => { }, - }, - }), - ) - - return request(app) - .get('/health') - .expect('Content-Type', /text\/plain/) - .expect('ok') - .expect(200) - }) - - test('should not call health request', async () => { - const app = express() - - app.use( - '/health', - healthMiddleware({ - logger: { - debug: (_msg) => { }, - }, - }), - ) - - return request(app).get('/non-existant-route').expect(404) - }) -}) +// // @ts-check + +// import express from 'express' +// import request from 'supertest' +// import { describe, test } from '@jest/globals' + +// import healthPlugin from '../../plugins/health.js' + +// describe('health plugin', () => { +// test('should return expected content-type', async () => { +// const app = express() + +// app.use( +// '/health', +// healthPlugin({ +// logger: { +// debug: (_msg) => { }, +// }, +// }), +// ) + +// return request(app) +// .get('/health') +// .expect('Content-Type', /text\/plain/) +// }) + +// test('should return expected body', async () => { +// const app = express() + +// app.use( +// '/health', +// healthPlugin({ +// logger: { +// debug: (_msg) => { }, +// }, +// }), +// ) + +// return request(app).get('/health').expect('ok') +// }) + +// test('should return expected status code', async () => { +// const app = express() + +// app.use( +// '/health', +// healthPlugin({ +// logger: { +// debug: (_msg) => { }, +// }, +// }), +// ) + +// return request(app).get('/health').expect(200) +// }) + +// test('should call health request with valid response', async () => { +// const app = express() + +// app.use( +// '/health', +// healthPlugin({ +// logger: { +// debug: (_msg) => { }, +// }, +// }), +// ) + +// return request(app) +// .get('/health') +// .expect('Content-Type', /text\/plain/) +// .expect('ok') +// .expect(200) +// }) + +// test('should not call health request', async () => { +// const app = express() + +// app.use( +// '/health', +// healthPlugin({ +// logger: { +// debug: (_msg) => { }, +// }, +// }), +// ) + +// return request(app).get('/non-existant-route').expect(404) +// }) +// }) diff --git a/packages/core/test/middlewares/redirect.test.js b/packages/core/test/middlewares/redirect.test.js index c3ea7786..6041405c 100644 --- a/packages/core/test/middlewares/redirect.test.js +++ b/packages/core/test/middlewares/redirect.test.js @@ -1,47 +1,49 @@ -import express from 'express' -import request from 'supertest' -import { describe, expect, test } from '@jest/globals' - -import redirectMiddleware from '../../middlewares/redirect.js' - -describe('redirect middleware', () => { - test('should throw if the target parameter is not set', () => { - expect(() => redirectMiddleware({ config: {} })).toThrow() - }) - - test('should redirect request', async () => { - const app = express() - - app.use( - '/redirect', - redirectMiddleware({ - config: { - target: '/', - }, - logger: { - debug: (_) => { }, - }, - }), - ) - - return request(app).get('/redirect').expect(302) - }) - - test('should not redirect request', async () => { - const app = express() - - app.use( - '/redirect', - redirectMiddleware({ - config: { - target: '/', - }, - logger: { - debug: (_) => { }, - }, - }), - ) - - return request(app).get('/non-existant-route').expect(404) - }) -}) +// // @ts-check + +// import express from 'express' +// import request from 'supertest' +// import { describe, expect, test } from '@jest/globals' + +// import redirectPlugin from '../../plugins/redirect.js' + +// describe('redirect plugin', () => { +// test('should throw if the target parameter is not set', () => { +// expect(() => redirectPlugin({ config: {} })).toThrow() +// }) + +// test('should redirect request', async () => { +// const app = express() + +// app.use( +// '/redirect', +// redirectPlugin({ +// config: { +// target: '/', +// }, +// logger: { +// debug: (_) => { }, +// }, +// }), +// ) + +// return request(app).get('/redirect').expect(302) +// }) + +// test('should not redirect request', async () => { +// const app = express() + +// app.use( +// '/redirect', +// redirectPlugin({ +// config: { +// target: '/', +// }, +// logger: { +// debug: (_) => { }, +// }, +// }), +// ) + +// return request(app).get('/non-existant-route').expect(404) +// }) +// }) diff --git a/packages/core/test/middlewares/static.test.js b/packages/core/test/middlewares/static.test.js index 96d6f6e4..409c4174 100644 --- a/packages/core/test/middlewares/static.test.js +++ b/packages/core/test/middlewares/static.test.js @@ -1,58 +1,60 @@ -import { dirname } from 'path' -import { fileURLToPath } from 'url' -import express from 'express' -import request from 'supertest' -import { describe, expect, test } from '@jest/globals' - -import staticMiddleware from '../../middlewares/static.js' - -describe('static middleware', () => { - test('should throw if the directory parameter is not set', () => { - expect(() => staticMiddleware({ config: {} })).toThrow() - }) - - test('should not throw if the directory parameter is set', () => { - const currentDir = dirname(fileURLToPath(import.meta.url)) - expect(() => - staticMiddleware({ - config: { - directory: `${currentDir}/../support/`, - }, - }), - ).not.toThrow() - }) - - test('should serve the specified resource', () => { - const currentDir = dirname(fileURLToPath(import.meta.url)) - const app = express() - - app.use( - staticMiddleware({ - config: { - directory: `${currentDir}/../support`, - }, - }), - ) - - return request(app) - .get('/test.txt') - .expect(200) - .expect('Content-Type', /text\/plain/) - .expect(/some text/) - }) - - test('should return a 404 on non-existant resources', () => { - const currentDir = dirname(fileURLToPath(import.meta.url)) - const app = express() - - app.use( - staticMiddleware({ - config: { - directory: `${currentDir}/../support/`, - }, - }), - ) - - return request(app).get('/test-not-exist.txt').expect(404) - }) -}) +// // @ts-check + +// import { dirname } from 'path' +// import { fileURLToPath } from 'url' +// import express from 'express' +// import request from 'supertest' +// import { describe, expect, test } from '@jest/globals' + +// import staticPlugin from '../../plugins/static.js' + +// describe('static plugin', () => { +// test('should throw if the directory parameter is not set', () => { +// expect(() => staticPlugin({ config: {} })).toThrow() +// }) + +// test('should not throw if the directory parameter is set', () => { +// const currentDir = dirname(fileURLToPath(import.meta.url)) +// expect(() => +// staticPlugin({ +// config: { +// directory: `${currentDir}/../support/`, +// }, +// }), +// ).not.toThrow() +// }) + +// test('should serve the specified resource', () => { +// const currentDir = dirname(fileURLToPath(import.meta.url)) +// const app = express() + +// app.use( +// staticPlugin({ +// config: { +// directory: `${currentDir}/../support`, +// }, +// }), +// ) + +// return request(app) +// .get('/test.txt') +// .expect(200) +// .expect('Content-Type', /text\/plain/) +// .expect(/some text/) +// }) + +// test('should return a 404 on non-existant resources', () => { +// const currentDir = dirname(fileURLToPath(import.meta.url)) +// const app = express() + +// app.use( +// staticPlugin({ +// config: { +// directory: `${currentDir}/../support/`, +// }, +// }), +// ) + +// return request(app).get('/test-not-exist.txt').expect(404) +// }) +// }) diff --git a/packages/core/test/resolvers.test.js b/packages/core/test/resolvers.test.js index ff5d4973..056653ca 100644 --- a/packages/core/test/resolvers.test.js +++ b/packages/core/test/resolvers.test.js @@ -1,4 +1,7 @@ -import { describe, test, expect } from '@jest/globals' +// @ts-check + +import { describe, it } from 'mocha' +import { expect } from 'chai' import { cwdCallback, @@ -12,170 +15,170 @@ import { describe('resolvers', () => { // Environment variables resolver - test('should be able to resolve an environment variable', () => { + it('should be able to resolve an environment variable', () => { process.env.TEST_VARIABLE = 'test' - expect(envCallback('TEST_VARIABLE')).toEqual('test') + expect(envCallback('TEST_VARIABLE')).to.equal('test') delete process.env.TEST_VARIABLE }) - test('should return an empty string on non-existant environment variables', () => { + it('should return an empty string on non-existant environment variables', () => { delete process.env.TEST_VARIABLE - expect(envCallback('TEST_VARIABLE')).toEqual('') + expect(envCallback('TEST_VARIABLE')).to.equal('') }) - test('env should not resolve to anything if it is another prefix', () => { - expect(envResolver('something:TEST_VARIABLE')).toEqual( + it('env should not resolve to anything if it is another prefix', () => { + expect(envResolver('something:TEST_VARIABLE')).to.equal( 'something:TEST_VARIABLE', ) }) - test('env should resolve with the right prefix', () => { + it('env should resolve with the right prefix', () => { process.env.TEST_VARIABLE = 'test' - expect(envResolver('env:TEST_VARIABLE')).toEqual('test') + expect(envResolver('env:TEST_VARIABLE')).to.equal('test') delete process.env.TEST_VARIABLE }) - test('env should resolve to empty string for non-existant variable with the right prefix', () => { + it('env should resolve to empty string for non-existant variable with the right prefix', () => { delete process.env.TEST_VARIABLE - expect(envResolver('env:TEST_VARIABLE')).toEqual('') + expect(envResolver('env:TEST_VARIABLE')).to.equal('') }) // Current working directory resolver - test('should return the current working directory', () => { - expect(cwdCallback('.')).toEqual(process.cwd()) + it('should return the current working directory', () => { + expect(cwdCallback('.')).to.equal(process.cwd()) }) - test('cwd should be able to resolve paths', () => { - expect(cwdCallback('./test.js')).toEqual(`${process.cwd()}/test.js`) - expect(cwdCallback('test.js')).toEqual(`${process.cwd()}/test.js`) - expect(cwdCallback('././././test.js')).toEqual(`${process.cwd()}/test.js`) - expect(cwdCallback('./a/.././test.js')).toEqual(`${process.cwd()}/test.js`) - expect(cwdCallback('/test.js')).toEqual('/test.js') - expect(cwdCallback('/a/b/c/test.js')).toEqual('/a/b/c/test.js') + it('cwd should be able to resolve paths', () => { + expect(cwdCallback('./test.js')).to.equal(`${process.cwd()}/test.js`) + expect(cwdCallback('test.js')).to.equal(`${process.cwd()}/test.js`) + expect(cwdCallback('././././test.js')).to.equal(`${process.cwd()}/test.js`) + expect(cwdCallback('./a/.././test.js')).to.equal(`${process.cwd()}/test.js`) + expect(cwdCallback('/test.js')).to.equal('/test.js') + expect(cwdCallback('/a/b/c/test.js')).to.equal('/a/b/c/test.js') }) - test('cwd resolver should not resolve on other prefix', () => { - expect(cwdResolver('something:test.js')).toEqual('something:test.js') + it('cwd resolver should not resolve on other prefix', () => { + expect(cwdResolver('something:test.js')).to.equal('something:test.js') }) - test('cwd resolver should resolve on the cwd prefix', () => { - expect(cwdResolver('cwd:test.js')).toEqual(`${process.cwd()}/test.js`) + it('cwd resolver should resolve on the cwd prefix', () => { + expect(cwdResolver('cwd:test.js')).to.equal(`${process.cwd()}/test.js`) }) - test('cwd resolver should give the same results than the callback', () => { - expect(cwdResolver('cwd:.')).toEqual(process.cwd()) - expect(cwdResolver('cwd:./test.js')).toEqual(`${process.cwd()}/test.js`) - expect(cwdResolver('cwd:test.js')).toEqual(`${process.cwd()}/test.js`) - expect(cwdResolver('cwd:././././test.js')).toEqual( + it('cwd resolver should give the same results than the callback', () => { + expect(cwdResolver('cwd:.')).to.equal(process.cwd()) + expect(cwdResolver('cwd:./test.js')).to.equal(`${process.cwd()}/test.js`) + expect(cwdResolver('cwd:test.js')).to.equal(`${process.cwd()}/test.js`) + expect(cwdResolver('cwd:././././test.js')).to.equal( `${process.cwd()}/test.js`, ) - expect(cwdResolver('cwd:./a/.././test.js')).toEqual( + expect(cwdResolver('cwd:./a/.././test.js')).to.equal( `${process.cwd()}/test.js`, ) - expect(cwdResolver('cwd:/test.js')).toEqual('/test.js') - expect(cwdResolver('cwd:/a/b/c/test.js')).toEqual('/a/b/c/test.js') + expect(cwdResolver('cwd:/test.js')).to.equal('/test.js') + expect(cwdResolver('cwd:/a/b/c/test.js')).to.equal('/a/b/c/test.js') }) // File resolver - test('file callback should behave the same as cwd if no base is defined', () => { - expect(fileCallback()('.')).toEqual(process.cwd()) - expect(fileCallback()('./test.js')).toEqual(`${process.cwd()}/test.js`) - expect(fileCallback()('test.js')).toEqual(`${process.cwd()}/test.js`) - expect(fileCallback()('././././test.js')).toEqual( + it('file callback should behave the same as cwd if no base is defined', () => { + expect(fileCallback()('.')).to.equal(process.cwd()) + expect(fileCallback()('./test.js')).to.equal(`${process.cwd()}/test.js`) + expect(fileCallback()('test.js')).to.equal(`${process.cwd()}/test.js`) + expect(fileCallback()('././././test.js')).to.equal( `${process.cwd()}/test.js`, ) - expect(fileCallback()('./a/.././test.js')).toEqual( + expect(fileCallback()('./a/.././test.js')).to.equal( `${process.cwd()}/test.js`, ) - expect(fileCallback()('/test.js')).toEqual('/test.js') - expect(fileCallback()('/a/b/c/test.js')).toEqual('/a/b/c/test.js') + expect(fileCallback()('/test.js')).to.equal('/test.js') + expect(fileCallback()('/a/b/c/test.js')).to.equal('/a/b/c/test.js') // test with explicit 'undefined' base - expect(fileCallback(undefined)('.')).toEqual(process.cwd()) - expect(fileCallback(undefined)('./test.js')).toEqual( + expect(fileCallback(undefined)('.')).to.equal(process.cwd()) + expect(fileCallback(undefined)('./test.js')).to.equal( `${process.cwd()}/test.js`, ) - expect(fileCallback(undefined)('test.js')).toEqual( + expect(fileCallback(undefined)('test.js')).to.equal( `${process.cwd()}/test.js`, ) - expect(fileCallback(undefined)('././././test.js')).toEqual( + expect(fileCallback(undefined)('././././test.js')).to.equal( `${process.cwd()}/test.js`, ) - expect(fileCallback(undefined)('./a/.././test.js')).toEqual( + expect(fileCallback(undefined)('./a/.././test.js')).to.equal( `${process.cwd()}/test.js`, ) - expect(fileCallback(undefined)('/test.js')).toEqual('/test.js') - expect(fileCallback(undefined)('/a/b/c/test.js')).toEqual('/a/b/c/test.js') + expect(fileCallback(undefined)('/test.js')).to.equal('/test.js') + expect(fileCallback(undefined)('/a/b/c/test.js')).to.equal('/a/b/c/test.js') }) - test('file callback should resolve as expected with the specified base', () => { - expect(fileCallback('/path/test')('.')).toEqual('/path/test') - expect(fileCallback('/path/test')('..')).toEqual('/path') + it('file callback should resolve as expected with the specified base', () => { + expect(fileCallback('/path/test')('.')).to.equal('/path/test') + expect(fileCallback('/path/test')('..')).to.equal('/path') // note the '/' at the end - expect(fileCallback('/path/test')('../')).toEqual('/path/') + expect(fileCallback('/path/test')('../')).to.equal('/path/') - expect(fileCallback('/path/test')('../..')).toEqual('/') - expect(fileCallback('/path/test')('../../')).toEqual('/') - expect(fileCallback('/path/test')('../../..')).toEqual('/') - expect(fileCallback('/path/test')('../../../')).toEqual('/') - expect(fileCallback('/path/test')('./test.js')).toEqual( + expect(fileCallback('/path/test')('../..')).to.equal('/') + expect(fileCallback('/path/test')('../../')).to.equal('/') + expect(fileCallback('/path/test')('../../..')).to.equal('/') + expect(fileCallback('/path/test')('../../../')).to.equal('/') + expect(fileCallback('/path/test')('./test.js')).to.equal( '/path/test/test.js', ) - expect(fileCallback('/path/test')('test.js')).toEqual('/path/test/test.js') - expect(fileCallback('/path/test')('././././test.js')).toEqual( + expect(fileCallback('/path/test')('test.js')).to.equal('/path/test/test.js') + expect(fileCallback('/path/test')('././././test.js')).to.equal( '/path/test/test.js', ) - expect(fileCallback('/path/test')('./a/.././test.js')).toEqual( + expect(fileCallback('/path/test')('./a/.././test.js')).to.equal( '/path/test/test.js', ) - expect(fileCallback('/path/test')('/test.js')).toEqual('/test.js') - expect(fileCallback('/path/test')('/a/b/c/test.js')).toEqual( + expect(fileCallback('/path/test')('/test.js')).to.equal('/test.js') + expect(fileCallback('/path/test')('/a/b/c/test.js')).to.equal( '/a/b/c/test.js', ) }) - test('file resolver should not resolve on other prefix', () => { - expect(fileResolver('something:test.js')).toEqual('something:test.js') + it('file resolver should not resolve on other prefix', () => { + expect(fileResolver('something:test.js')).to.equal('something:test.js') }) - test('file resolver should resolve on the file prefix', () => { - expect(fileResolver('file:test.js')).toEqual(`${process.cwd()}/test.js`) - expect(fileResolver('file:test.js', undefined)).toEqual( + it('file resolver should resolve on the file prefix', () => { + expect(fileResolver('file:test.js')).to.equal(`${process.cwd()}/test.js`) + expect(fileResolver('file:test.js', undefined)).to.equal( `${process.cwd()}/test.js`, ) - expect(fileResolver('file:test.js', '/path/test')).toEqual( + expect(fileResolver('file:test.js', '/path/test')).to.equal( '/path/test/test.js', ) }) - test('file resolver should behave the same as the file callback', () => { - expect(fileResolver('file:.', '/path/test')).toEqual('/path/test') - expect(fileResolver('file:..', '/path/test')).toEqual('/path') + it('file resolver should behave the same as the file callback', () => { + expect(fileResolver('file:.', '/path/test')).to.equal('/path/test') + expect(fileResolver('file:..', '/path/test')).to.equal('/path') // note the '/' at the end - expect(fileResolver('file:../', '/path/test')).toEqual('/path/') + expect(fileResolver('file:../', '/path/test')).to.equal('/path/') - expect(fileResolver('file:../..', '/path/test')).toEqual('/') - expect(fileResolver('file:../../', '/path/test')).toEqual('/') - expect(fileResolver('file:../../..', '/path/test')).toEqual('/') - expect(fileResolver('file:../../../', '/path/test')).toEqual('/') - expect(fileResolver('file:./test.js', '/path/test')).toEqual( + expect(fileResolver('file:../..', '/path/test')).to.equal('/') + expect(fileResolver('file:../../', '/path/test')).to.equal('/') + expect(fileResolver('file:../../..', '/path/test')).to.equal('/') + expect(fileResolver('file:../../../', '/path/test')).to.equal('/') + expect(fileResolver('file:./test.js', '/path/test')).to.equal( '/path/test/test.js', ) - expect(fileResolver('file:test.js', '/path/test')).toEqual( + expect(fileResolver('file:test.js', '/path/test')).to.equal( '/path/test/test.js', ) - expect(fileResolver('file:././././test.js', '/path/test')).toEqual( + expect(fileResolver('file:././././test.js', '/path/test')).to.equal( '/path/test/test.js', ) - expect(fileResolver('file:./a/.././test.js', '/path/test')).toEqual( + expect(fileResolver('file:./a/.././test.js', '/path/test')).to.equal( '/path/test/test.js', ) - expect(fileResolver('file:/test.js', '/path/test')).toEqual('/test.js') - expect(fileResolver('file:/a/b/c/test.js', '/path/test')).toEqual( + expect(fileResolver('file:/test.js', '/path/test')).to.equal('/test.js') + expect(fileResolver('file:/a/b/c/test.js', '/path/test')).to.equal( '/a/b/c/test.js', ) }) diff --git a/packages/core/test/support/basic-commented.json b/packages/core/test/support/basic-commented.json index aba736c2..a61716b6 100644 --- a/packages/core/test/support/basic-commented.json +++ b/packages/core/test/support/basic-commented.json @@ -1,5 +1,5 @@ { - "middlewares": { + "plugins": { "staticFiles": { "order": 100, // name of the module to load diff --git a/packages/core/test/support/basic.json b/packages/core/test/support/basic.json index 6421fb3f..e6945416 100644 --- a/packages/core/test/support/basic.json +++ b/packages/core/test/support/basic.json @@ -1,5 +1,5 @@ { - "middlewares": { + "plugins": { "staticFiles": { "order": 100, "module": "file:./plugins/static-files.js", diff --git a/packages/core/test/support/basic.yaml b/packages/core/test/support/basic.yaml index 4e5890a7..ee578166 100644 --- a/packages/core/test/support/basic.yaml +++ b/packages/core/test/support/basic.yaml @@ -1,4 +1,4 @@ -middlewares: +plugins: staticFiles: order: 100 module: file:./plugins/static-files.js diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index f4f54a83..b4e69ae1 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,23 +1,6 @@ { - // Change this to match your project - "include": ["*.js", "lib/**/*.js", "middlewares/**/*.js", "types/index.d.ts"], - "exclude": ["coverage", "test", "node_modules"], + "extends": "../../tsconfig.json", "compilerOptions": { - // Tells TypeScript to read JS files, as - // normally they are ignored as source files - "allowJs": true, - // Generate d.ts files - "declaration": true, - // This compiler run should - // only output d.ts files - "emitDeclarationOnly": true, - // Types should go next to the .js files - // "outDir": "dist", - // go to js file when using IDE functions like - // "Go to Definition" in VSCode - "declarationMap": true, - "esModuleInterop": true, - "moduleResolution": "NodeNext", - "module": "NodeNext" + "outDir": "dist" } } diff --git a/packages/core/types/index.d.ts b/packages/core/types/index.d.ts deleted file mode 100644 index ac5b4d9f..00000000 --- a/packages/core/types/index.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Request, Response, NextFunction } from "express"; - -/** - * Trifid configuration - */ -export type TrifidConfig = { - server?: { - listener: { - host?: string; - port?: number | string; - }; - logLevel?: - | "fatal" - | "error" - | "warn" - | "info" - | "debug" - | "trace" - | "silent"; - express?: Record; - }; - globals?: Record; - template?: Record; - middlewares?: Record< - string, - { - order?: number; - module: string; - paths?: string | string[]; - methods?: string | string[]; - hosts?: string | string[]; - config?: Record; - } - >; -}; - -/** - * Trifid configuration with `extends` field - */ -export type TrifidConfigWithExtends = { - extends?: string[]; -} & TrifidConfig; - -/** Express middleware */ -export type ExpressMiddleware = - | ((req: Request, res: Response, next: NextFunction) => void) - | ((error: Error, req: Request, res: Response, next: NextFunction) => void); - -/** Trifid Middleware Argument */ -export type TrifidMiddlewareArgument = { - logger: any; - server: import("express").Express; - config: Record; - render: ( - templatePath: string, - context: Record, - options: Record - ) => Promise; -}; - -/** Trifid Middleware */ -export type TrifidMiddleware = ( - trifid: TrifidMiddlewareArgument -) => Promise | ExpressMiddleware; diff --git a/packages/core/types/index.js b/packages/core/types/index.js new file mode 100644 index 00000000..fd4104a0 --- /dev/null +++ b/packages/core/types/index.js @@ -0,0 +1,90 @@ +// @ts-check + +/** + * @module trifid-core/types/index.js + */ + +/** + * Trifid Plugin Configuration. + * + * @typedef {Object} TrifidPluginConfig + * @property {number} [order] The order of the plugin (for loading them). + * @property {string} [module] The NPM module of the plugin. + * @property {string | string[]} [paths] The paths to apply the plugin to. + * @property {string | string[]} [methods] The HTTP methods to apply the plugin to. + * @property {string | string[]} [hosts] The hosts to apply the plugin to. + * @property {Object.} [config] The plugin configuration. + */ + +/** + * Trifid configuration. + * + * @typedef {Object} TrifidConfig + * @property {Object} [server] Fastify server. + * @property {Object} [server.listener] Fastify server listener. + * @property {string} [server.listener.host] The host to listen on. + * @property {number|string} [server.listener.port] The port to listen on. + * @property {"fatal"|"error"|"warn"|"info"|"debug"|"trace"|"silent"} [server.logLevel] The log level. + * @property {Object.} [server.express] Server settings. + * @property {Object.} [globals] Global settings. + * @property {Object.} [template] Template settings. + * @property {Object.} [plugins] Plugins. + */ + +/** + * Object that have an optional `extends` field. + * + * @typedef {Object} ObjectWithExtends + * @property {string[]} [extends] The configuration to extend. + */ + +/** + * Trifid configuration with `extends` field. + * + * @typedef {TrifidConfig & ObjectWithExtends} TrifidConfigWithExtends + */ + +/** + * Fastify route handler. + * + * @typedef {Function} FastifyRouteHandler + * @param {import('fastify').FastifyRequest} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + * @returns {void | Promise} + */ + +/** + * Trifid Plugin Argument. + * + * @typedef {Object} TrifidPluginArgument + * @property {string[]} [paths] The paths to apply the plugin to. + * @property {string[]} [methods] The HTTP methods to apply the plugin to. + * @property {string[]} [hosts] The hosts to apply the plugin to. + * @property {import('pino').Logger} logger The logger instance. + * @property {import('fastify').FastifyInstance & {locals: Map}} server The Fastify server instance. + * @property {Object.} config The Trifid configuration. + * @property {(templatePath: string, context: Object., options?: Object.) => Promise} render The render function. + * @property {TrifidQuery} query The SPARQL query function. + * @property {import('node:events').EventEmitter} trifidEvents The Trifid events emitter. + * @property {(name: string, fn: import('handlebars').HelperDelegate) => void} registerTemplateHelper Register a template helper, that can be used by the template engine. + */ + +/** + * Trifid Plugin Setup. + * + * @typedef {Object} TrifidPluginSetup + * @property {() => Promise} [defaultConfiguration] Default configurations for this plugin. + * @property {() => Promise} [routeHandler] Route handler. + */ + +/** + * Trifid Plugin. + * + * @typedef {(trifid: TrifidPluginArgument) => Promise} TrifidPlugin + */ + +/** + * Trifid Query. + * + * @typedef {(query: string, options?: Object.) => Promise} TrifidQuery + */ diff --git a/packages/core/views/404.hbs b/packages/core/views/404.hbs index 757c8303..27202908 100644 --- a/packages/core/views/404.hbs +++ b/packages/core/views/404.hbs @@ -1,4 +1,12 @@ +
+
+
+

Not Found

+
+
+
+
-

Not Found

The requested path {{ url }} was not found.

+

Go back to the homepage?

diff --git a/packages/core/views/layouts/main.hbs b/packages/core/views/layouts/main.hbs index ab92840b..fdbb14db 100644 --- a/packages/core/views/layouts/main.hbs +++ b/packages/core/views/layouts/main.hbs @@ -8,6 +8,7 @@ {{#each styles}} {{/each}} + diff --git a/packages/handler-sparql/README.md b/packages/deprecated-handler-sparql/README.md similarity index 83% rename from packages/handler-sparql/README.md rename to packages/deprecated-handler-sparql/README.md index 3b3b1f30..d49bd946 100644 --- a/packages/handler-sparql/README.md +++ b/packages/deprecated-handler-sparql/README.md @@ -1,5 +1,9 @@ # trifid-handler-sparql +> [!WARNING] +> This package is deprecated and will be removed in the future. +> The functionality is now part of the entity renderer plugin. + SPARQL handler for [Trifid](https://github.com/zazuko/trifid). Fetches the graphs for a given IRI from a SPARQL endpoint. @@ -33,7 +37,7 @@ This configuration tells Trifid to use the `trifid-handler-sparql` handler and t It also defines the queries to fetch the resources and containers: ```yaml -middlewares: +plugins: # […] sparql-handler: module: trifid-handler-sparql @@ -41,8 +45,8 @@ middlewares: endpointUrl: https://dbpedia.org/sparql resourceExistsQuery: "ASK { <${iri}> ?p ?o }" resourceGraphQuery: "DESCRIBE <${iri}>" - containerExistsQuery: "ASK { ?s a ?o. FILTER REGEX(STR(?s), \"^${iri}\") }" - containerGraphQuery: "CONSTRUCT { ?s a ?o. } WHERE { ?s a ?o. FILTER REGEX(STR(?s), \"^${iri}\") }" + containerExistsQuery: 'ASK { ?s a ?o. FILTER REGEX(STR(?s), "^${iri}") }' + containerGraphQuery: 'CONSTRUCT { ?s a ?o. } WHERE { ?s a ?o. FILTER REGEX(STR(?s), "^${iri}") }' ``` ## Debug diff --git a/packages/handler-sparql/index.js b/packages/deprecated-handler-sparql/index.js similarity index 100% rename from packages/handler-sparql/index.js rename to packages/deprecated-handler-sparql/index.js diff --git a/packages/handler-sparql/package.json b/packages/deprecated-handler-sparql/package.json similarity index 97% rename from packages/handler-sparql/package.json rename to packages/deprecated-handler-sparql/package.json index f1fbf3ca..1770d01f 100644 --- a/packages/handler-sparql/package.json +++ b/packages/deprecated-handler-sparql/package.json @@ -23,7 +23,7 @@ "sparql-http-client": "^2.4.2" }, "devDependencies": { - "c8": "^8.0.1", + "c8": "^9.1.0", "express-as-promise": "^1.2.0", "mocha": "^10.2.0" }, diff --git a/packages/handler-sparql/test/support/createEndpoint.js b/packages/deprecated-handler-sparql/test/support/createEndpoint.js similarity index 100% rename from packages/handler-sparql/test/support/createEndpoint.js rename to packages/deprecated-handler-sparql/test/support/createEndpoint.js diff --git a/packages/handler-sparql/test/support/setIri.js b/packages/deprecated-handler-sparql/test/support/setIri.js similarity index 100% rename from packages/handler-sparql/test/support/setIri.js rename to packages/deprecated-handler-sparql/test/support/setIri.js diff --git a/packages/handler-sparql/test/test.js b/packages/deprecated-handler-sparql/test/test.js similarity index 100% rename from packages/handler-sparql/test/test.js rename to packages/deprecated-handler-sparql/test/test.js diff --git a/packages/redirects/CHANGELOG.md b/packages/deprecated-redirects/CHANGELOG.md similarity index 100% rename from packages/redirects/CHANGELOG.md rename to packages/deprecated-redirects/CHANGELOG.md diff --git a/packages/redirects/LICENSE b/packages/deprecated-redirects/LICENSE similarity index 100% rename from packages/redirects/LICENSE rename to packages/deprecated-redirects/LICENSE diff --git a/packages/deprecated-redirects/README.md b/packages/deprecated-redirects/README.md new file mode 100644 index 00000000..b99321f8 --- /dev/null +++ b/packages/deprecated-redirects/README.md @@ -0,0 +1,147 @@ +# trifid-handle-redirects + +> [!WARNING] +> This package is deprecated and will be removed in the future. +> Please configure redirects directly using the entity renderer plugin. + +## Overview + +This document provides guidance for using the `trifid-handle-redirects` plugin with [Trifid](https://github.com/zazuko/trifid), a versatile handler for managing HTTP redirects of RDF IRIs. +In the RDF world, IRIs ideally remain constant, but occasionally they change. +This plugin facilitates HTTP redirects for such scenarios, ensuring that HTTP dereferencing remains functional and that users are informed of any IRI changes. + +## Workflow + +The operation of this plugin involves a simple yet effective process: + +1. **Request Reception:** Trifid receives a request for a specific HTTP IRI. +2. **SPARQL Lookup:** It queries this resource via SPARQL. +3. **Redirect Triggering:** If the returned triples include a redirect (as detailed below), Trifid issues an HTTP redirect to the client. + +### Example + +Consider the following command: + +```sh +curl -v https://politics.ld.admin.ch/council/FA +``` + +This would yield: + +``` +[HTTPS logs removed for brevity] +> GET /council/FA HTTP/2 +> Host: politics.ld.admin.ch +> ... [additional request headers] ... +< HTTP/2 302 +< ... [response headers] ... +< location: https://ld.admin.ch/FA +... +Found. Redirecting to https://ld.admin.ch/FA +``` + +In SPARQL, the corresponding representation is shown at [this link](https://s.zazuko.com/2FBeyAp). Note that redirects only affect dereferencing. +In SPARQL queries, you'll receive the configured triples as is from the specified endpoint. + +## Installation and Configuration + +### Installation + +Install the plugin via npm: + +```sh +npm install @zazuko/trifid-handle-redirects +``` + +### Configuration + +Incorporate the plugin into your Trifid configuration file: + +```yaml +plugins: + # […] + arbitrary-name: + module: "@zazuko/trifid-handle-redirects" +``` + +## Defaults + +### Redirect Description + +Redirects should be defined as follows: + +```ttl +@prefix http: . +@prefix rdf: . +@prefix ex: . + +ex:redirect a http:GetRequest ; + http:response [ + a http:Response ; + http:responseCode http:301 ; + http:location ex:redirectedTo ; + ] ; + http:requestURI ex:exampleResource . +``` + +In this example, `ex:exampleResource` is redirected to `ex:redirectedTo`. +Adjust these URIs to suit your namespace. + +### Default SPARQL Query + +The default query used by the plugin is as follows: + +```sparql +PREFIX http2011: +PREFIX http2006: +PREFIX rdf: + +SELECT ?req ?res ?location ?responseCode ?validFrom +WHERE { + GRAPH ?g { + + # Handle 2011 version + { + ?req2011 rdf:type http2011:GetRequest. + ?req2011 http2011:requestURI <\${iri}>. + ?req2011 http2011:response ?res2011. + + ?res2011 rdf:type http2011:Response. + ?res2011 http2011:location ?location2011. + ?res2011 http2011:responseCode ?responseCode2011. + + OPTIONAL { + ?res2011 ?validFrom2011. + } + } + + UNION + + # Handle 2006 version + { + ?req2006 rdf:type http2006:GetRequest. + ?req2006 http2006:requestURI <\${iri}>. + ?req2006 http2006:response ?res2006. + + ?res2006 rdf:type http2006:Response. + ?res2006 http2006:location ?location2006. + ?res2006 http2006:responseCode ?responseCode2006. + + OPTIONAL { + ?res2006 ?validFrom2006. + } + } + + # Combine results, using priority for 2011 version over 2006 version + BIND(COALESCE(?req2011, ?req2006) AS ?req) + BIND(COALESCE(?res2011, ?res2006) AS ?res) + BIND(COALESCE(?location2011, ?location2006) AS ?location) + BIND(COALESCE(?validFrom2011, ?validFrom2006) AS ?validFrom) + # Just get the response code as a string instead of the full IRI + BIND(STRAFTER(STR(COALESCE(?responseCode2011, ?responseCode2006)), "#") AS ?responseCode) + } +} +LIMIT 1 +``` + +This supports `http://www.w3.org/2011/http#` and `http://www.w3.org/2006/http#` prefixes. diff --git a/packages/redirects/index.js b/packages/deprecated-redirects/index.js similarity index 100% rename from packages/redirects/index.js rename to packages/deprecated-redirects/index.js diff --git a/packages/redirects/package.json b/packages/deprecated-redirects/package.json similarity index 93% rename from packages/redirects/package.json rename to packages/deprecated-redirects/package.json index ad09a889..cfae4ca5 100644 --- a/packages/redirects/package.json +++ b/packages/deprecated-redirects/package.json @@ -17,9 +17,6 @@ "bugs": { "url": "https://github.com/zazuko/trifid/issues" }, - "scripts": { - "test": "true" - }, "dependencies": { "debug": "^4.3.4", "sparql-http-client": "^2.4.2" diff --git a/packages/entity-renderer/README.md b/packages/entity-renderer/README.md index 00a09a93..f07ddbbc 100644 --- a/packages/entity-renderer/README.md +++ b/packages/entity-renderer/README.md @@ -11,7 +11,7 @@ npm install @zazuko/trifid-entity-renderer And then add in the `config.yaml` file the following part: ```yaml -middlewares: +plugins: # […] entity-renderer: module: "@zazuko/trifid-entity-renderer" @@ -26,7 +26,7 @@ middlewares: Specify the path where the handlebars template is located: ```yaml -middlewares: +plugins: # […] entity-renderer: module: "@zazuko/trifid-entity-renderer" @@ -41,7 +41,7 @@ Under the hood, this plugin uses [rdf-entity-webcomponent](https://github.com/za Add any of these options under the config section: ```yaml -middlewares: +plugins: # […] entity-renderer: module: "@zazuko/trifid-entity-renderer" @@ -51,6 +51,46 @@ middlewares: embedNamedNodes: false ``` +## Rewriting + +You can configure if the plugin needs to perform any rewriting on the result to the SPARQL queries. + +You can use the following configuration option `rewrite` and set it to one of those value: + +- `auto` (default value): if the `datasetBaseUrl` configuration value is defined (globally or at the scope of this plugin), then it will behaves as if the value was set to `true`, else like `false` +- `true`: rewrite the result of the SPARQL queries by replacing the `datasetBaseUrl` value with the current domain. +- `false`: this will disable the rewriting mechanism. This is useful if your triples are already matching the domain name where your Trifid instance is deployed. + +## Follow redirects + +Using SPARQL it is possible to define some redirects. +This plugin can follow those redirects and render the final resource, if the `followRedirects` configuration option is set to `true`. + +The default value is `false`. + +```yaml +plugins: + # […] + entity-renderer: + module: "@zazuko/trifid-entity-renderer" + config: + followRedirects: true + redirectQuery: "…" # Select query used to get the redirect target ; needs to return a row with `?responseCode` and `?location` bindings. +``` + +The default redirect query supports `http://www.w3.org/2011/http#` and `http://www.w3.org/2006/http#` prefixes. + +## Other configuration options + +- `resourceExistsQuery`: The `ASK` query to check whether the resources exists or not +- `resourceGraphQuery`: The query to fetch the actual triples of the resource +- `containerExistsQuery`: The `ASK` query to check whether the container exists or not +- `containerGraphQuery`: The query to fetch the actual triples of the container +- `resourceNoSlash`: The handler will also check if there is a resource with a URL ending + with a slash before running the container logic. + Set this option to true to disable the resource exists query. + Useful if you know there are no triples with container URLs. + ## Run an example instance ```sh diff --git a/packages/entity-renderer/examples/config/trifid.yaml b/packages/entity-renderer/examples/config/trifid.yaml index 927d4e41..03ce228e 100644 --- a/packages/entity-renderer/examples/config/trifid.yaml +++ b/packages/entity-renderer/examples/config/trifid.yaml @@ -1,18 +1,33 @@ +# yaml-language-server: $schema=../../../core/lib/config/schema.json + server: logLevel: debug -middlewares: - entity-host-web-page: - module: trifid-core/middlewares/view.js +globals: + datasetBaseUrl: http://localhost:3000/ + endpoints: + default: + url: /query + +plugins: + welcome-page: + module: trifid-core/plugins/view.js paths: / - methods: GET config: path: file:../views/welcome.hbs + yasgui: + module: trifid-plugin-yasgui + paths: + - /sparql + - /sparql/ + fetch-handler: module: trifid-handler-fetch + paths: /query config: url: file:../data/people.ttl - contentType: application/n-triples - split: true - cache: true + contentType: text/turtle + baseIRI: http://example.com + graphName: http://example.com/graph + unionDefaultGraph: true diff --git a/packages/entity-renderer/examples/instance.js b/packages/entity-renderer/examples/instance.js index d2a14b2d..82ca3455 100644 --- a/packages/entity-renderer/examples/instance.js +++ b/packages/entity-renderer/examples/instance.js @@ -18,6 +18,9 @@ export const createTrifidInstance = async (configFilePath, logLevel = 'debug') = }, { entityRenderer: { module: entityRendererTrifidPlugin, + config: { + followRedirects: true, + }, }, }) } diff --git a/packages/entity-renderer/examples/views/welcome.hbs b/packages/entity-renderer/examples/views/welcome.hbs index f6ea7c69..2c353a72 100644 --- a/packages/entity-renderer/examples/views/welcome.hbs +++ b/packages/entity-renderer/examples/views/welcome.hbs @@ -1,49 +1,30 @@ -
-
-

Parameters

- -

The parameters can be configured through a trifid-config or through query - parameters

- -
Simplified mode example: - - Gomez (simplifiedMode=true) -
- -
Compact mode example: - - Amy (compactMode=true) -
- -
Embed blank nodes example: - - Gomez (embedBlankNodes=true) -
- -
Technical cues example: - - Amy (technicalCues=true) - -
- -
Embed ordered lists example: - Gomez - (embedLists=true) -
- -
Highlight language example: - - Eudora (highlightLanguage=es) - -
- -
Show named graphs example: - - Eudora (showNamedGraphs=true) - +
+
+
+

Welcome to Trifid!

+

This instance illustrates the different parameters for the entity renderer plugin

+
+
+
+
+

Parameters

+

The parameters can be configured through the Trifid configuration or through query parameters:

+ + +

Tools

+

This instance also comes with the following plugins:

+
    +
  • YASGUI: allows you to query your SPARQL endpoint
  • +
diff --git a/packages/entity-renderer/index.js b/packages/entity-renderer/index.js index 31ef42cd..7b504937 100644 --- a/packages/entity-renderer/index.js +++ b/packages/entity-renderer/index.js @@ -1,9 +1,9 @@ import { dirname } from 'path' import { fileURLToPath } from 'url' import { parsers } from '@rdfjs/formats-common' -import hijackResponse from 'hijackresponse' import rdf from '@zazuko/env' +import { sparqlSerializeQuadStream, sparqlSupportedTypes, sparqlGetRewriteConfiguration } from 'trifid-core' import { createEntityRenderer } from './renderer/entity.js' import { createMetadataProvider } from './renderer/metadata.js' @@ -17,6 +17,8 @@ const getAcceptHeader = (req) => { jsonld: 'application/ld+json', xml: 'application/rdf+xml', nt: 'application/n-triples', + trig: 'application/trig', + csv: 'text/csv', } if ( @@ -25,92 +27,219 @@ const getAcceptHeader = (req) => { return supportedQueryStringValues[queryStringValue] } - return req.headers.accept + return `${req.headers.accept || ''}`.toLocaleLowerCase() +} + +const replaceIriInQuery = (query, iri) => { + return query.split('{{iri}}').join(iri) +} + +const defaultConfiguration = { + resourceNoSlash: true, + resourceExistsQuery: 'ASK { <{{iri}}> ?p ?o }', + resourceGraphQuery: 'DESCRIBE <{{iri}}>', + containerExistsQuery: 'ASK { ?s a ?o. FILTER REGEX(STR(?s), "^{{iri}}") }', + containerGraphQuery: + 'CONSTRUCT { ?s a ?o. } WHERE { ?s a ?o. FILTER REGEX(STR(?s), "^{{iri}}") }', + redirectQuery: ` + PREFIX http2011: + PREFIX http2006: + PREFIX rdf: + + SELECT ?req ?res ?location ?responseCode ?validFrom + WHERE { + GRAPH ?g { + + # Handle 2011 version + { + ?req2011 rdf:type http2011:GetRequest. + ?req2011 http2011:requestURI <{{iri}}>. + ?req2011 http2011:response ?res2011. + + ?res2011 rdf:type http2011:Response. + ?res2011 http2011:location ?location2011. + ?res2011 http2011:responseCode ?responseCode2011. + + OPTIONAL { + ?res2011 ?validFrom2011. + } + } + + UNION + + # Handle 2006 version + { + ?req2006 rdf:type http2006:GetRequest. + ?req2006 http2006:requestURI <{{iri}}>. + ?req2006 http2006:response ?res2006. + + ?res2006 rdf:type http2006:Response. + ?res2006 http2006:location ?location2006. + ?res2006 http2006:responseCode ?responseCode2006. + + OPTIONAL { + ?res2006 ?validFrom2006. + } + } + + # Combine results, using priority for 2011 version over 2006 version + BIND(COALESCE(?req2011, ?req2006) AS ?req) + BIND(COALESCE(?res2011, ?res2006) AS ?res) + BIND(COALESCE(?location2011, ?location2006) AS ?location) + BIND(COALESCE(?validFrom2011, ?validFrom2006) AS ?validFrom) + # Just get the response code as a string instead of the full IRI + BIND(STRAFTER(STR(COALESCE(?responseCode2011, ?responseCode2006)), "#") AS ?responseCode) + } + } + LIMIT 1 + `, + followRedirects: false, +} + +const fixContentTypeHeader = (contentType) => { + return contentType.split(';')[0].trim().toLocaleLowerCase() } const factory = async (trifid) => { - const { render, logger, config } = trifid - const entityRenderer = createEntityRenderer({ options: config, logger }) + const { render, logger, config, query } = trifid + const mergedConfig = { ...defaultConfiguration, ...config } + const entityRenderer = createEntityRenderer({ options: config, logger, query }) const metadataProvider = createMetadataProvider({ options: config }) - const { path, ignorePaths } = config + const { path, ignorePaths, rewrite: rewriteConfigValue, datasetBaseUrl } = config const entityTemplatePath = path || `${currentDir}/views/render.hbs` + const rewriteConfig = sparqlGetRewriteConfiguration(rewriteConfigValue, datasetBaseUrl) + const { rewrite: rewriteValue, replaceIri, iriOrigin } = rewriteConfig + logger.debug(`Rewriting is ${rewriteValue ? 'enabled' : 'disabled'}`) + + if (rewriteValue) { + if (!datasetBaseUrl.endsWith('/')) { + logger.warn('The value for `datasetBaseUrl` should usually end with a `/`') + } + logger.debug(`Using '${datasetBaseUrl}' as dataset base URL`) + } - // if `ignorePaths` is not provided or invalid, we configure some defaults values + // If `ignorePaths` is not provided or invalid, we configure some defaults values let ignoredPaths = ignorePaths if (!ignorePaths || !Array.isArray(ignorePaths)) { ignoredPaths = ['/query'] } - return async (req, res, next) => { - // check if it is a path that needs to be ignored (check of type is already done at the load of the middleware) - if (ignoredPaths.includes(req.path)) { - return next() - } - - // update "Accept" HTTP header depending on the requested type - req.headers.accept = getAcceptHeader(req) - - // only take care of the rendering if HTML is requested - const accepts = req.accepts(['text/plain', 'json', 'html']) - if (accepts !== 'html') { - return next() - } - - req.headers.accept = 'application/n-quads' - - const { readable, writable } = await hijackResponse(res, next) - - const contentType = res.getHeader('Content-Type') - if (!contentType) { - return readable.pipe(writable) - } - - const mimeType = contentType.toLowerCase().split(';')[0].trim() - const hijackFormats = [ - 'application/ld+json', - 'application/trig', - 'application/n-quads', - 'application/n-triples', - 'text/n3', - 'text/turtle', - 'application/rdf+xml', - ] - - if (!hijackFormats.includes(mimeType)) { - return readable.pipe(writable) - } - - const quadStream = parsers.import(mimeType, readable) - const dataset = await rdf.dataset().import(quadStream) - - let contentToForward - try { - const { entityHtml, entityLabel, entityUrl } = await entityRenderer( - req, - res, - { dataset }, - ) - const metadata = await metadataProvider(req, { dataset }) - contentToForward = await render(entityTemplatePath, { - dataset: entityHtml, - locals: res.locals, - entityLabel, - entityUrl, - metadata, - config, - }) - res.setHeader('Content-Type', 'text/html') - - // Without this, the browser will try to download the HTML file if the `Content-Disposition` header is set by the SPARQL endpoint - res.removeHeader('Content-Disposition') - } catch (e) { - logger.error(e) - return readable.pipe(writable) - } - - writable.write(contentToForward) - writable.end() + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + paths: ['/*'], + } + }, + routeHandler: async () => { + /** + * Route handler. + * @param {import('fastify').FastifyRequest} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + const currentPath = request.url.split('?')[0] + // Check if it is a path that needs to be ignored (check of type is already done at the load of the plugin) + if (ignoredPaths.includes(currentPath)) { + return reply.callNotFound() + } + + // Get the expected format from the Accept header or from the `format` query parameter + const acceptHeader = getAcceptHeader(request) + + // Generate the IRI we expect + const fullUrl = `${request.protocol}://${request.hostname}${request.raw.url}` + const iriUrl = new URL(fullUrl) + iriUrl.search = '' + iriUrl.searchParams.forEach((_value, key) => iriUrl.searchParams.delete(key)) + const iriUrlString = iriUrl.toString() + const iri = replaceIri(iriUrlString) + const isContainer = mergedConfig.resourceNoSlash && iri.endsWith('/') + logger.debug(`IRI value: ${iri}${rewriteValue ? ' (rewritten)' : ''} - is container: ${isContainer ? 'true' : 'false'}`) + const rewriteResponse = rewriteValue + ? [ + { find: datasetBaseUrl, replace: iriOrigin(iriUrlString) }, + ] + : [] + + // Check if the IRI exists in the dataset + const askQuery = isContainer ? mergedConfig.containerExistsQuery : mergedConfig.resourceExistsQuery + const exists = await query(replaceIriInQuery(askQuery, iri), { ask: true }) + if (!exists) { + return reply.callNotFound() + } + + try { + // Check if there is a redirect for the IRI + if (mergedConfig.followRedirects) { + const redirect = await query(replaceIriInQuery(mergedConfig.redirectQuery, iri), { + ask: false, + select: true, // Force the parsing of the response + rewriteResponse, + }) + if (redirect.length > 0) { + const entityRedirect = redirect[0] + const { responseCode, location } = entityRedirect + if (responseCode && location && responseCode.value && location.value) { + logger.debug(`Redirecting <${iri}> to <${location.value}> (HTTP ${responseCode.value})`) + return reply.status(parseInt(responseCode.value, 10)).redirect(location.value) + } else { + logger.warn('Redirect query did not return the expected results') + } + } + } + + // Get the entity from the dataset + const describeQuery = isContainer ? mergedConfig.containerGraphQuery : mergedConfig.resourceGraphQuery + const entity = await query(replaceIriInQuery(describeQuery, iri), { + ask: false, + rewriteResponse, + }) + const entityContentType = entity.contentType || 'application/n-triples' + const entityStream = entity.response + if (!entityStream) { + return reply.callNotFound() + } + + // Make sure the Content-Type is lower case and without parameters (e.g. charset) + const fixedContentType = fixContentTypeHeader(entityContentType) + const quadStream = parsers.import(fixedContentType, entityStream) + + if (sparqlSupportedTypes.includes(acceptHeader)) { + const serialized = await sparqlSerializeQuadStream(quadStream, acceptHeader) + reply.type(acceptHeader).send(serialized) + return + } + + const dataset = await rdf.dataset().import(quadStream) + + const { entityHtml, entityLabel, entityUrl } = await entityRenderer( + request, + { + dataset, + rewriteResponse, + replaceIri, + entityRoot: rewriteValue ? iri.replace(datasetBaseUrl, iriOrigin(iriUrlString)) : iri, + }, + ) + const metadata = await metadataProvider(request, { dataset }) + + reply.type('text/html').send(await render(entityTemplatePath, { + dataset: entityHtml, + locals: {}, + entityLabel, + entityUrl, + metadata, + config, + })) + } catch (e) { + logger.error(e) + return reply.callNotFound() + } + } + return handler + }, } } diff --git a/packages/entity-renderer/package.json b/packages/entity-renderer/package.json index 7586770d..cbb28dd9 100644 --- a/packages/entity-renderer/package.json +++ b/packages/entity-renderer/package.json @@ -23,20 +23,19 @@ "@lit-labs/ssr": "^3.1.9", "@rdfjs/formats-common": "^3.1.0", "@rdfjs/to-ntriples": "^2.0.0", - "@zazuko/env": "^1.10.1", + "@zazuko/env": "^2.0.6", "@zazuko/prefixes": "^2.1.0", "@zazuko/rdf-entity-webcomponent": "^0.7.7", - "express": "^4.18.2", - "hijackresponse": "^5.0.0", "lit": "^3.0.2", "p-queue": "^8.0.1", - "sparql-http-client": "^2.4.2", "trifid-core": "^2.7.1" }, "devDependencies": { - "c8": "^8.0.1", + "@rdfjs/types": "^1.1.0", + "c8": "^9.1.0", "mocha": "^10.2.0", - "trifid-handler-fetch": "^2.0.1" + "trifid-handler-fetch": "^2.0.1", + "trifid-plugin-yasgui": "^2.2.5" }, "files": [ "index.js", diff --git a/packages/entity-renderer/renderer/entity.js b/packages/entity-renderer/renderer/entity.js index dc9d4ca7..67a95952 100644 --- a/packages/entity-renderer/renderer/entity.js +++ b/packages/entity-renderer/renderer/entity.js @@ -33,13 +33,10 @@ const toBoolean = (val) => { /** * Render HTML. - * - * @param {*} req Express request. - * @param {*} graph Graph from a handler (JSON object). - * @returns {function(*, *): Promise} Rendered output as string. */ -const createEntityRenderer = ({ options = {}, logger }) => { - return async (req, res, { dataset }) => { +const createEntityRenderer = ({ options = {}, logger, query }) => { + return async (req, { dataset, rewriteResponse, replaceIri, entityRoot }) => { + const currentLanguage = req.session.get('currentLanguage') || req.session.get('defaultLanguage') || 'en' const rendererConfig = { ...DEFAULTS, ...options } // Honor parameters in the request @@ -75,8 +72,8 @@ const createEntityRenderer = ({ options = {}, logger }) => { } rendererConfig.highlightLanguage = - req.query.highlightLanguage ?? - res.locals.currentLanguage ?? + req.query.highlightLanguage || + currentLanguage || rendererConfig.preferredLanguages[0] if (req.query.compactMode !== undefined) { @@ -100,7 +97,6 @@ const createEntityRenderer = ({ options = {}, logger }) => { } // rendererConfig.showImages = true - const entityRoot = res.locals?.camouflageRewriteOriginalUrl ?? req.iri const term = rdf.namedNode(entityRoot) logger?.debug(`Entity root: ${entityRoot}`) @@ -114,22 +110,18 @@ const createEntityRenderer = ({ options = {}, logger }) => { const externalLabels = rdf.clownface({ dataset: rdf.dataset() }) // If a labelLoader is configured, try to fetch the labels if (options.labelLoader) { - const endpoint = options.labelLoader.endpointUrl || '/query' - const absoluteUrl = - res.locals.camouflageRewriteOriginalUrl || req.absoluteUrl() - const endpointUrl = new URL(endpoint, absoluteUrl) - const labelLoader = new LabelLoader({ ...options.labelLoader, - endpointUrl, + query, + replaceIri, + rewriteResponse, logger, }) const quadChunks = await labelLoader.tryFetchAll(cf) - const labelQuads = quadChunks.filter((notNull) => notNull).flat() - logger?.debug( - `Got ${labelQuads.length} new labels from endpointUrl:${endpointUrl}`, - ) - externalLabels.dataset.addAll(labelQuads) + + quadChunks.forEach((chunk) => { + externalLabels.dataset.addAll(chunk) + }) } rendererConfig.externalLabels = externalLabels @@ -139,7 +131,7 @@ const createEntityRenderer = ({ options = {}, logger }) => { const entityLabel = cf.term ? getLabel(cf, rendererConfig)?.value : '' const entityUrl = cf.term?.value - logger?.debug(`Label for term: ${cf.term?.value}: ${entityLabel}`) + logger?.debug(`Label for term: ${entityUrl}: ${entityLabel}`) return { entityHtml, diff --git a/packages/entity-renderer/renderer/labels/labelLoader.js b/packages/entity-renderer/renderer/labels/labelLoader.js index a6c56d5a..8111e06b 100644 --- a/packages/entity-renderer/renderer/labels/labelLoader.js +++ b/packages/entity-renderer/renderer/labels/labelLoader.js @@ -1,11 +1,10 @@ import { ns } from '@zazuko/rdf-entity-webcomponent/src/namespaces.js' // eslint-disable-next-line import/no-unresolved import PQueue from 'p-queue' -import ParsingClient from 'sparql-http-client/ParsingClient.js' import rdf from '@zazuko/env' +import { parsers } from '@rdfjs/formats-common' /** - * endpointUrl: From where the labels are retrieved * labelNamespace: If specified, only fetches labels for iris starting with this * chunkSize: The number of labels to be fetched by each query * concurrency: Number of concurrent queries' @@ -15,30 +14,21 @@ import rdf from '@zazuko/env' class LabelLoader { constructor(options) { const { - endpointUrl, + query, + replaceIri, + rewriteResponse, labelNamespace, labelNamespaces, chunkSize, concurrency, timeout, - authentication, logger, } = options - if (!endpointUrl) { - throw Error('requires a endpointUrl') - } - const clientOptions = { - endpointUrl, - } - if (authentication?.user) { - clientOptions.user = authentication.user - } - if (authentication?.password) { - clientOptions.password = authentication.password - } + this.query = query + this.replaceIri = replaceIri + this.rewriteResponse = rewriteResponse - this.client = new ParsingClient(clientOptions) this.labelNamespaces = labelNamespace ? [labelNamespace] : labelNamespaces this.chunkSize = chunkSize || 30 this.queue = new PQueue({ @@ -88,9 +78,9 @@ class LabelLoader { } async fetchLabels (iris) { - const uris = iris.map((x) => `<${x.value}> `).join(' ') + const uris = iris.map((x) => `<${this.replaceIri(x.value)}> `).join(' ') this.logger?.debug(`Fetching labels for terms without label: ${uris}`) - return await this.client.query.construct(` + const response = await this.query(` PREFIX schema: CONSTRUCT { @@ -100,7 +90,12 @@ CONSTRUCT { ?uri schema:name ?label VALUES ?uri { ${uris} } } -}`) +}`, { ask: false, rewriteResponse: this.rewriteResponse }) + // Make sure the Content-Type is lower case and without parameters (e.g. charset) + const fixedContentType = response.contentType.split(';')[0].trim().toLocaleLowerCase() + const quadStream = parsers.import(fixedContentType, response.response) + const dataset = await rdf.dataset().import(quadStream) + return dataset } async tryFetchAll (pointer) { diff --git a/packages/entity-renderer/test/entity-renderer.test.js b/packages/entity-renderer/test/entity-renderer.test.js index 33083a65..7f336d55 100644 --- a/packages/entity-renderer/test/entity-renderer.test.js +++ b/packages/entity-renderer/test/entity-renderer.test.js @@ -3,73 +3,51 @@ /* eslint-disable no-useless-catch */ import { strictEqual } from 'assert' -import { describe, it } from 'mocha' +import { describe, it, beforeEach, afterEach } from 'mocha' import { createTrifidInstance } from '../examples/instance.js' import { getListenerURL } from './support/utils.js' const trifidConfigUrl = './examples/config/trifid.yaml' -describe('@zazuko/trifid-plugin-ckan', () => { - describe('basic tests', () => { - it('should create a middleware with factory and default options', async () => { - const trifidInstance = await createTrifidInstance(trifidConfigUrl, 'warn') - const trifidListener = await trifidInstance.start() - trifidListener.close() - }) +describe('@zazuko/trifid-entity-renderer', () => { + let trifidListener - it('should be able to load a rendered entity', async () => { - const trifidInstance = await createTrifidInstance(trifidConfigUrl, 'warn') - const trifidListener = await trifidInstance.start() + beforeEach(async () => { + const trifidInstance = await createTrifidInstance(trifidConfigUrl, 'warn') + trifidListener = await trifidInstance.start() + }) + + afterEach(async () => { + await trifidListener.close() + }) - try { - const entityUrl = `${getListenerURL(trifidListener)}/person/amy-farrah-fowler` - const res = await fetch(entityUrl) - strictEqual(res.status, 200) - const resText = await res.text() - strictEqual(resText.toLocaleLowerCase().includes('amy'), true) - } catch (e) { - throw e - } finally { - trifidListener.close() - } + describe('basic tests', () => { + it('should be able to load a rendered entity', async () => { + const entityUrl = `${getListenerURL(trifidListener)}/person/amy-farrah-fowler` + const res = await fetch(entityUrl) + strictEqual(res.status, 200) + const resText = await res.text() + strictEqual(resText.toLocaleLowerCase().includes('amy'), true) }) it('should be able to load a rendered entity using HTML', async () => { - const trifidInstance = await createTrifidInstance(trifidConfigUrl, 'warn') - const trifidListener = await trifidInstance.start() - - try { - const entityUrl = `${getListenerURL(trifidListener)}/person/amy-farrah-fowler` - const res = await fetch(entityUrl, { - headers: { - accept: 'text/html', - }, - }) - strictEqual(res.status, 200) - const resText = await res.text() - strictEqual(resText.toLocaleLowerCase().includes(' { - const trifidInstance = await createTrifidInstance(trifidConfigUrl, 'warn') - const trifidListener = await trifidInstance.start() - - try { - const entityUrl = `${getListenerURL(trifidListener)}/person/someone-that-does-not-exist` - const res = await fetch(entityUrl) - strictEqual(res.status, 404) - } catch (e) { - throw e - } finally { - trifidListener.close() - } + const entityUrl = `${getListenerURL(trifidListener)}/person/someone-that-does-not-exist` + const res = await fetch(entityUrl) + strictEqual(res.status, 404) }) }) }) diff --git a/packages/entity-renderer/test/support/utils.js b/packages/entity-renderer/test/support/utils.js index 372e1cbb..76808b36 100644 --- a/packages/entity-renderer/test/support/utils.js +++ b/packages/entity-renderer/test/support/utils.js @@ -1,20 +1,22 @@ // @ts-check /** - * Get the URL of a listener. + * Get an endpoint of the Fastify Instance. * - * @param {import('http').Server} listener HTTP listener + * @param {import('fastify').FastifyInstance} server Server. * @returns {string} */ -export const getListenerURL = (listener) => { - const address = listener.address() - if (!address) { +export const getListenerURL = (server) => { + const addresses = server.addresses().map((address) => { + if (typeof address === 'string') { + return address + } + return `http://${address.address}:${address.port}` + }) + + if (addresses.length < 1) { throw new Error('The listener is not listening') } - if (typeof address === 'string') { - return address - } - const { address: hostname, port } = address - return `http://${hostname}:${port}` + return addresses[0] } diff --git a/packages/entity-renderer/views/render.hbs b/packages/entity-renderer/views/render.hbs index c6069cb9..6513bb97 100644 --- a/packages/entity-renderer/views/render.hbs +++ b/packages/entity-renderer/views/render.hbs @@ -1,233 +1,148 @@ {{#if entityLabel}} -
+

{{entityLabel}}

@@ -244,17 +159,28 @@ {{{ dataset }}} {{#if metadata.namedGraphs}} - diff --git a/packages/graph-explorer/README.md b/packages/graph-explorer/README.md index fd241357..7a6067cf 100644 --- a/packages/graph-explorer/README.md +++ b/packages/graph-explorer/README.md @@ -1,7 +1,7 @@ # trifid-plugin-graph-explorer [Graph Explorer](https://github.com/zazuko/graph-explorer) for [Trifid](https://github.com/zazuko/trifid). -This middleware does the static file hosting for all Graph Explorer files and renders an index page that points to the given endpoint URL. +This plugin does the static file hosting for all Graph Explorer files and renders an index page that points to the given endpoint URL. ## Quick start @@ -14,11 +14,13 @@ npm install trifid-plugin-graph-explorer And then add in the `config.yaml` file the following part: ```yaml -middlewares: - # […] your other middlewares +plugins: + # […] your other plugins yasgui: module: trifid-plugin-graph-explorer - paths: /graph-explorer + paths: # by default + - /graph-explorer + - /graph-explorer/ config: endpointUrl: https://example.com/query # …other configuration fields diff --git a/packages/graph-explorer/index.js b/packages/graph-explorer/index.js index bcf54def..2bc2c8ac 100644 --- a/packages/graph-explorer/index.js +++ b/packages/graph-explorer/index.js @@ -1,11 +1,14 @@ -import { dirname } from 'path' -import { fileURLToPath } from 'url' -import absoluteUrl from 'absolute-url' +// @ts-check + +import { dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + import { resolve } from 'import-meta-resolve' -import express from 'express' +import fastifyStatic from '@fastify/static' const currentDir = dirname(fileURLToPath(import.meta.url)) +/** @type {import('../core/types/index.js').TrifidPlugin} */ const factory = async (trifid) => { const { config, server, render } = trifid const { @@ -20,16 +23,18 @@ const factory = async (trifid) => { const view = !template ? `${currentDir}/views/graph-explorer.hbs` : template - // serve static files for graph-explorer + // Serve static files for graph-explorer const distPath = await resolve('graph-explorer/dist/', import.meta.url) - server.use( - '/graph-explorer-assets/', - express.static(distPath.replace(/^file:\/\//, '')), - ) - server.use( - '/graph-explorer-static/', - express.static(`${currentDir}/static/`), - ) + server.register(fastifyStatic, { + root: distPath.replace(/^file:\/\//, ''), + prefix: '/graph-explorer/assets/', + decorateReply: false, + }) + server.register(fastifyStatic, { + root: `${currentDir}/static/`, + prefix: '/graph-explorer/static/', + decorateReply: false, + }) const endpoint = endpointUrl || '/query' const acceptBlankNodes = !!acceptBlankNodesConfig @@ -43,39 +48,55 @@ const factory = async (trifid) => { { code: 'it', label: 'Italian' }, ] - return async (req, res, _next) => { - absoluteUrl.attach(req) - - const urlPathname = new URL(req.originalUrl, req.absoluteUrl()).pathname - - // redirect to trailing slash URL - if (urlPathname.slice(-1) !== '/') { - return res.redirect(`${urlPathname}/`) - } + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + paths: [ + '/graph-explorer', + '/graph-explorer/', + ], + } + }, + routeHandler: async () => { + /** + * Route handler. + * @param {import('fastify').FastifyRequest} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + const fullUrl = `${request.protocol}://${request.hostname}${request.raw.url}` + const fullUrlObject = new URL(fullUrl) + const fullUrlPathname = fullUrlObject.pathname - const content = await render( - view, - { - // just forward all the config as a string - graphExplorerConfig: JSON.stringify({ - // read SPARQL endpoint URL from configuration and resolve with absoluteUrl - endpointUrl: new URL(endpoint, req.absoluteUrl()).href, + // Enforce trailing slash + if (fullUrlPathname.slice(-1) !== '/') { + return reply.redirect(`${fullUrlPathname}/`) + } - // all other configured options - acceptBlankNodes, - dataLabelProperty, - schemaLabelProperty, - language, - languages, - }).replace(/'/g, "\\'"), + const content = await render( + view, + { + // Just forward all the config as a string + graphExplorerConfig: JSON.stringify({ + // Read SPARQL endpoint URL from configuration and resolve with the current full URL + endpointUrl: new URL(endpoint, fullUrl).href, - // good practice: forward locals to templates - locals: res.locals, - }, - { title: 'Graph Explorer' }, - ) + // All other configured options + acceptBlankNodes, + dataLabelProperty, + schemaLabelProperty, + language, + languages, + }).replace(/'/g, "\\'"), + }, + { title: 'Graph Explorer' }, + ) - res.send(content) + return reply.type('text/html').send(content) + } + return handler + }, } } diff --git a/packages/graph-explorer/package.json b/packages/graph-explorer/package.json index 682b0bca..f5d77b96 100644 --- a/packages/graph-explorer/package.json +++ b/packages/graph-explorer/package.json @@ -19,14 +19,14 @@ "test": "c8 --reporter=lcov --reporter=text mocha" }, "dependencies": { - "absolute-url": "^1.2.2", - "express": "^4.18.2", + "@fastify/static": "^7.0.1", "graph-explorer": "^1.2.0", "import-meta-resolve": "^2.2.0" }, "devDependencies": { - "c8": "^8.0.1", - "express-as-promise": "^1.2.0", - "mocha": "^10.2.0" + "@types/node": "^20.11.20", + "c8": "^9.1.0", + "mocha": "^10.2.0", + "trifid-core": "^2.7.1" } } diff --git a/packages/graph-explorer/static/app.js b/packages/graph-explorer/static/app.js index ab318f5e..5c8bfab7 100644 --- a/packages/graph-explorer/static/app.js +++ b/packages/graph-explorer/static/app.js @@ -4,7 +4,7 @@ const SparqlDialect = GraphExplorer.OWLStatsSettings SparqlDialect.dataLabelProperty = graphExplorerConfig.dataLabelProperty SparqlDialect.schemaLabelProperty = graphExplorerConfig.schemaLabelProperty -function onWorkspaceMounted(workspace) { +const onWorkspaceMounted = async (workspace) => { if (!workspace) { return } @@ -30,37 +30,31 @@ function onWorkspaceMounted(workspace) { const resources = url.searchParams.get('resources') if (resources) { - const elm = model.dataProvider.elementInfo({ + const elm = await model.dataProvider.elementInfo({ elementIds: resources.split(';'), }) - elm - .then(function (arg) { - const elmIds = [] - resources.split(';').forEach(function (item) { - const node = model.createElement(arg[item]) - elmIds[item] = node.id - workspace.forceLayout() - }) - return elmIds - }) - .then(function (elmIds) { - /* now that we have the resources, add the links */ - const lnk = model.dataProvider.linksInfo({ - elementIds: resources.split(';'), - }) - lnk.then(function (arg) { - arg.forEach(function (link) { - const newLink = new GraphExplorer.Link({ - typeId: link.linkTypeId, - sourceId: elmIds[link.sourceId], - targetId: elmIds[link.targetId], - }) - model.addLink(newLink) - workspace.forceLayout() - }) - }) + const elmIds = [] + resources.split(';').forEach((item) => { + const node = model.createElement(elm[item]) + elmIds[item] = node.id + workspace.forceLayout() + }) + + /* now that we have the resources, add the links */ + const lnk = await model.dataProvider.linksInfo({ + elementIds: resources.split(';'), + }) + + lnk.forEach((link) => { + const newLink = new GraphExplorer.Link({ + typeId: link.linkTypeId, + sourceId: elmIds[link.sourceId], + targetId: elmIds[link.targetId], }) + model.addLink(newLink) + workspace.forceLayout() + }) } } diff --git a/packages/graph-explorer/static/style.css b/packages/graph-explorer/static/style.css new file mode 100644 index 00000000..a79cde0b --- /dev/null +++ b/packages/graph-explorer/static/style.css @@ -0,0 +1,3 @@ +#trifid-plugin-graph-explorer { + height: 750px; +} diff --git a/packages/graph-explorer/test/test.js b/packages/graph-explorer/test/test.js index 2ff56bca..27590e13 100644 --- a/packages/graph-explorer/test/test.js +++ b/packages/graph-explorer/test/test.js @@ -1,24 +1,81 @@ -import withServer from 'express-as-promise/withServer.js' -import { describe, it } from 'mocha' -import trifidFactory from '../index.js' +// @ts-check -const createTrifidConfig = (config, server = {}) => { - const loggerSpy = [] +import { strictEqual } from 'node:assert' - return { - logger: (str) => loggerSpy.push(str), - server, - config, +import trifidCore from 'trifid-core' +import { describe } from 'mocha' + +import trifidPluginFactory from '../index.js' + +/** + * Get an endpoint of the Fastify Instance. + * + * @param {import('fastify').FastifyInstance} server Server. + * @returns {string} + */ +const getListenerURL = (server) => { + const addresses = server.addresses().map((address) => { + if (typeof address === 'string') { + return address + } + return `http://${address.address}:${address.port}` + }) + + if (addresses.length < 1) { + throw new Error('The listener is not listening') } + + return addresses[0] } describe('trifid-plugin-graph-explorer', () => { - describe('trifid factory', () => { - it('should create a middleware with factory and default options', async () => { - await withServer(async (server) => { - const trifid = createTrifidConfig({}, server.app) - trifidFactory(trifid) - }) - }) + let trifidListener + + beforeEach(async () => { + const trifidServer = await trifidCore( + { + server: { + listener: { + port: 0, + }, + logLevel: 'warn', + }, + }, + { + graphExplorer: { + module: trifidPluginFactory, + }, + }, + ) + trifidListener = await trifidServer.start() + }) + + afterEach(async () => { + await trifidListener.close() + }) + + it('can serve Graph Explorer', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/graph-explorer`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) + }) + + it('should redirect if trailing slash is missing', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/graph-explorer`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) // The redirection should lead to a correct page + strictEqual(res.redirected, true) // Check the redirection + }) + + it('can serve static CSS style', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/graph-explorer/static/style.css`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) + }) + + it('can serve static JavaScript script', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/graph-explorer/static/app.js`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) }) }) diff --git a/packages/graph-explorer/views/graph-explorer.hbs b/packages/graph-explorer/views/graph-explorer.hbs index ad9b55fd..9bab38df 100644 --- a/packages/graph-explorer/views/graph-explorer.hbs +++ b/packages/graph-explorer/views/graph-explorer.hbs @@ -1,8 +1,18 @@ +
+
+
+

Graph Explorer

+

Explore RDF graphs from this instance

+
+
+
+
- + @@ -11,5 +21,5 @@ - +
diff --git a/packages/handler-fetch/.npmignore b/packages/handler-fetch/.npmignore deleted file mode 100644 index 14458248..00000000 --- a/packages/handler-fetch/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.github/ -node_modules/ -.eslintrc -.gitignore -yarn.lock -*.tgz diff --git a/packages/handler-fetch/README.md b/packages/handler-fetch/README.md index dce7ae8a..a408c6d2 100644 --- a/packages/handler-fetch/README.md +++ b/packages/handler-fetch/README.md @@ -1,40 +1,52 @@ # trifid-handler-fetch -Handler for Trifid which reads the data from a URL. -[fetch-lite](https://github.com/rdfjs-base/fetch-lite) is used for `http://` and `https://` URLs. -[file-fetch](https://www.npmjs.com/package/file-fetch) is used for `file://` URLs. +This Trifid plugin exposes an endpoint where you can perform SPARQL queries against a dataset which is loaded from a URL. + +The URL can be a local file or a remote resource. + +At the start of the server, the dataset is loaded from the URL and stored in memory, using [Oxigraph](https://github.com/oxigraph/oxigraph). +The dataset is not updated automatically when the resource changes. ## Usage Add the `trifid-handler-fetch` package to your dependencies: - npm install trifid-handler-fetch --save +```sh +npm install trifid-handler-fetch +``` -Change the `handler` property in the config like in the example below and adapt the options. +And update the Trifid configuration to something similar as shown in the example below. ## Example This example config uses [The Big Bang Theory dataset](https://www.npmjs.com/package/tbbt-ld/): -``` -{ - "baseConfig": "trifid:config.json", - "handler": { - "module": "trifid-handler-fetch", - "options": { - "url": "https://raw.githubusercontent.com/zazuko/tbbt-ld/master/dist/tbbt.nt", - "contentType": "application/n-triples", - "split": "true", - "cache": "true" - } - } -} +```yaml +plugins: + # […] + handler-fetch: + module: "trifid-handler-fetch" + paths: /query + config: + url: https://raw.githubusercontent.com/zazuko/tbbt-ld/master/dist/tbbt.nt + contentType: application/n-triples + baseIRI: http://example.com + graphName: http://example.com/graph ``` ## Options - `url`: URL to the resource which contains the dataset -- `contentType`: If set, parse the content with a parser for the given media type -- `resource`: If set, the dataset will be loaded into the given Named Graph -- `split`: If true, the dataset will be split into subgraphs for each Named Node -- `cache`: Reads the resource only once at the first request and caches the dataset for other request +- `contentType`: the format of the serialization. See below for the supported formats. +- `baseIRI`: the base IRI to use to resolve the relative IRIs in the serialization. +- `graphName`: for triple serialization formats, the name of the named graph the triple should be loaded to. +- `unionDefaultGraph`: for triple serialization formats, if the triples should be loaded to the default graph or to the named graph specified in `graphName`. This impacts also the need or not to query a specific graph in SPARQL queries. Defaults to `false`. + +Supported formats: + +- [Turtle](https://www.w3.org/TR/turtle/): `text/turtle` or `ttl` +- [TriG](https://www.w3.org/TR/trig/): `application/trig` or `trig` +- [N-Triples](https://www.w3.org/TR/n-triples/): `application/n-triples` or `nt` +- [N-Quads](https://www.w3.org/TR/n-quads/): `application/n-quads` or `nq` +- [N3](https://w3c.github.io/N3/spec/): `text/n3` or `n3` +- [RDF/XML](https://www.w3.org/TR/rdf-syntax-grammar/): `application/rdf+xml` or `rdf` diff --git a/packages/handler-fetch/index.js b/packages/handler-fetch/index.js index 01bad469..b3edacdf 100644 --- a/packages/handler-fetch/index.js +++ b/packages/handler-fetch/index.js @@ -1,90 +1,165 @@ -import path from 'path' -import url from 'url' -import formats from '@rdfjs/formats-common/index.js' -import rdf from 'rdf-ext' -import rdfHandler from '@rdfjs/express-handler' - -import SerializerJsonld from '@rdfjs/serializer-jsonld-ext' -import Fetcher from './lib/Fetcher.js' - -// @TODO discuss what are the best serialization options. -const jsonLdSerializer = new SerializerJsonld({ - encoding: 'string', - // compact: true, - // flatten: true -}) - -formats.serializers.set('application/json', jsonLdSerializer) -formats.serializers.set('application/ld+json', jsonLdSerializer) - -const guessProtocol = (candidate) => { - try { - return new url.URL(candidate).protocol - } catch (error) { - return undefined - } -} +// @ts-check -export class FetchHandler { - constructor(options) { - this.dataset = rdf.dataset() - this.url = options.url - this.cache = options.cache - this.contentType = options.contentType - this.options = options.options || {} - this.resource = options.resource - this.split = options.split - - // add file:// and resolve with cwd if no protocol was given - if (this.url && !guessProtocol(this.url)) { - this.url = 'file://' + path.resolve(this.url) - } +import { Worker } from 'node:worker_threads' +import { v4 as uuidv4 } from 'uuid' +import { waitForVariableToBeTrue } from './lib/utils.js' - this.handle = this._handle.bind(this) +/** @type {import('../core/types/index.d.ts').TrifidPlugin} */ +export const factory = async (trifid) => { + const { config, logger, trifidEvents } = trifid + const { contentType, url, baseIri, graphName, unionDefaultGraph } = config - // legacy interface - this.get = this._get.bind(this) - } + const queryTimeout = 30000 - _handle(req, res, next) { - rdfHandler - .attach(req, res, { formats }) - .then(() => { - return Fetcher.load(this.dataset, this) - }) - .then(async () => { - const dataset = this.dataset.match( - null, - null, - null, - rdf.namedNode(req.iri), - ) - - if (dataset.size === 0) { - next() - return null - } + const workerUrl = new URL('./lib/worker.js', import.meta.url) + const worker = new Worker(workerUrl) + + let ready = false - await res.dataset(dataset) + trifidEvents.on('close', async () => { + logger.debug('Got "close" event from Trifid ; closing worker…') + await worker.terminate() + logger.debug('Worker terminated') + }) + + worker.on('message', async (message) => { + const { type, data } = message + if (type === 'log') { + logger.debug(data) + } + if (type === 'ready') { + ready = true + } + }) + + worker.on('error', (error) => { + ready = false + logger.error(`Error from worker: ${error.message}`) + }) + + worker.on('exit', (code) => { + ready = false + logger.info(`Worker exited with code ${code}`) + }) + + worker.postMessage({ + type: 'config', + data: { + contentType, url, baseIri, graphName, unionDefaultGraph, + }, + }) + + /** + * Send the query to the worker and wait for the response. + * + * @param {string} query The SPARQL query + * @returns {Promise<{ response: string, contentType: string }>} The response and its content type + */ + const handleQuery = async (query) => { + return new Promise((resolve, reject) => { + if (!ready) { + return reject(new Error('Worker is not ready')) + } + + const queryId = uuidv4() + + const timeoutId = setTimeout(() => { + worker.off('message', messageHandler) + reject(new Error(`Query timed out after ${queryTimeout / 1000} seconds`)) + }, queryTimeout) + + worker.postMessage({ + type: 'query', + data: { + queryId, + query, + }, }) - .catch(next) - } - // legacy interface - _get(req, res, next, iri) { - req.iri = iri + const messageHandler = (message) => { + const { type, data } = message + if (type === 'query' && data.queryId === queryId) { + clearTimeout(timeoutId) + worker.off('message', messageHandler) + if (!data.success) { + reject(new Error(data.response)) + return + } + resolve(data) + } + } - this.handle(req, res, next) + worker.on('message', messageHandler) + }) } -} -const factory = (trifid) => { - const { config } = trifid + // Wait for the worker to become ready, so we can be sure it can handle queries + await waitForVariableToBeTrue( + () => ready, + 30000, + 20, + 'Worker did not become ready within 30 seconds', + ) + + return { + defaultConfiguration: async () => { + return { + methods: ['GET', 'POST'], + paths: ['/query'], + } + }, + routeHandler: async () => { + /** + * Query string type. + * + * @typedef {Object} QueryString + * @property {string} [query] The SPARQL query. + */ + + /** + * Request body type. + * @typedef {Object} RequestBody + * @property {string} [query] The SPARQL query. + */ + + /** + * Route handler. + * @param {import('fastify').FastifyRequest<{ Querystring: QueryString, Body: RequestBody}>} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + let query + if (request.method === 'GET') { + query = request.query.query + } else if (request.method === 'POST') { + query = request.body.query + if (!query && request.body) { + query = request.body + if (typeof query !== 'string') { + query = JSON.stringify(query) + } + } + } + + if (!query) { + reply.status(400).send('Missing query parameter') + return + } - const handler = new FetchHandler(config) + logger.debug(`Received query: ${query}`) - return (req, res, next) => { - handler.handle(req, res, next) + try { + const { response, contentType } = await handleQuery(query) + reply.type(contentType) + logger.debug(`Sending the following ${contentType} response:\n${response}`) + reply.status(200).send(response) + } catch (error) { + logger.error(error) + reply.status(500).send(error.message) + } + } + return handler + }, } } diff --git a/packages/handler-fetch/lib/Fetcher.js b/packages/handler-fetch/lib/Fetcher.js deleted file mode 100644 index 662acb60..00000000 --- a/packages/handler-fetch/lib/Fetcher.js +++ /dev/null @@ -1,77 +0,0 @@ -import fileFetch from 'file-fetch' -import protoFetch from 'proto-fetch' -import rdf from 'rdf-ext' -import rdfFetch from '@rdfjs/fetch' -import splitIntoGraphs from './spread/splitIntoGraphs.js' - -const fetch = protoFetch({ - file: fileFetch, - http: rdf.fetch, - https: rdf.fetch, -}) - -class Fetcher { - static isCached(options) { - return options.cache && options.fetched - } - - static clearDataset(dataset, options) { - if (!options.resources) { - return - } - - options.resources.forEach((resource) => { - dataset.deleteMatches(null, null, null, rdf.namedNode(resource)) - }) - } - - static async fetchDataset(options) { - options.options = options.options || {} - options.options.fetch = fetch - - const res = await rdfFetch(options.url, { - ...options.options, - factory: rdf, - }) - if (options.contentType) { - res.headers.set('content-type', options.contentType) - } - options.fetched = new Date() - return res.dataset() - } - - static spreadDataset(inputDataset, outputDataset, options) { - if (options.resource) { - outputDataset.addAll( - rdf.dataset(inputDataset, rdf.namedNode(options.resource)), - ) - } else if (options.split) { - outputDataset.addAll(splitIntoGraphs(inputDataset)) - } else { - outputDataset.addAll(inputDataset) - } - - options.resources = Object.keys( - [...outputDataset].reduce((resources, quad) => { - resources[quad.graph.value] = true - - return resources - }, {}), - ) - - return outputDataset - } - - static async load(dataset, options) { - if (Fetcher.isCached(options)) { - return Promise.resolve() - } - - Fetcher.clearDataset(dataset, options) - - const input = await Fetcher.fetchDataset(options) - return Fetcher.spreadDataset(input, dataset, options) - } -} - -export default Fetcher diff --git a/packages/ckan/test/support/store.js b/packages/handler-fetch/lib/query.js similarity index 76% rename from packages/ckan/test/support/store.js rename to packages/handler-fetch/lib/query.js index 40c681d8..74072c07 100644 --- a/packages/ckan/test/support/store.js +++ b/packages/handler-fetch/lib/query.js @@ -1,6 +1,4 @@ // @ts-check -import { readFile } from 'fs/promises' -import oxigraph from 'oxigraph' /** * Convert Oxigraph termType to SPARQL termType. @@ -8,7 +6,7 @@ import oxigraph from 'oxigraph' * @param {string} termType Oxigraph termType value * @returns {string} SPARQL termType value */ -const convertTermType = (termType) => { +export const convertTermType = (termType) => { switch (termType) { case 'Literal': return 'literal' @@ -33,7 +31,7 @@ const convertTermType = (termType) => { * type: 'ASK' | 'SELECT' | 'CONSTRUCT'; * }>} SPARQL response. */ -const handleOxigraphResult = async (results, isConstructQuery = false) => { +export const handleOxigraphResult = async (results, isConstructQuery = false) => { let sparqlResponse = {} // Handle ASK queries @@ -149,36 +147,8 @@ const handleOxigraphResult = async (results, isConstructQuery = false) => { * type: 'ASK' | 'SELECT' | 'CONSTRUCT'; * }>} SPARQL response. */ -const performOxigraphQuery = async (store, query) => { - const results = await store.query(query) +export const performOxigraphQuery = async (store, query) => { + const results = store.query(query) const isConstructQuery = query.toUpperCase().includes('CONSTRUCT') return await handleOxigraphResult(results, isConstructQuery) } - -/** @type {import('trifid-core/types/index.d.ts').TrifidMiddleware} */ -export const storeMiddleware = async (_trifid) => { - // read quads from file - const data = await readFile(new URL('./data.ttl', import.meta.url)) - const stringData = data.toString() - - // create a store and load the quads - const store = new oxigraph.Store() - store.load(stringData, 'text/turtle', 'http://example.com', oxigraph.namedNode('http://example.com/graph')) - - return async (req, res, _next) => { - let query - if (req.method === 'GET') { - query = req.query.query - } else if (req.method === 'POST') { - query = req.body.query || req.body - } - - if (!query) { - return res.status(400).send('Missing query parameter') - } - - const { response, contentType } = await performOxigraphQuery(store, query) - res.set('Content-Type', contentType) - return res.status(200).send(response) - } -} diff --git a/packages/handler-fetch/lib/spread/boundedDescriptionGraph.js b/packages/handler-fetch/lib/spread/boundedDescriptionGraph.js deleted file mode 100644 index 02795abe..00000000 --- a/packages/handler-fetch/lib/spread/boundedDescriptionGraph.js +++ /dev/null @@ -1,27 +0,0 @@ -import rdf from 'rdf-ext' - -function boundedDescriptionGraph(inputDataset, subject) { - const input = inputDataset.clone() - - const siblings = rdf.termSet() - input.forEach((quad) => { - if (quad.subject.value.split('#')[0] === subject.value.split('#')[0]) { - siblings.add(quad.subject) - } - }) - - const descriptionWithBlankNodes = rdf.traverser( - ({ dataset, level, quad }) => - level === 0 || quad.subject.termType === 'BlankNode', - ) - - const result = rdf.dataset() - siblings.forEach((subject) => { - result.addAll( - descriptionWithBlankNodes.match({ term: subject, dataset: input }), - ) - }) - return result -} - -export default boundedDescriptionGraph diff --git a/packages/handler-fetch/lib/spread/splitIntoGraphs.js b/packages/handler-fetch/lib/spread/splitIntoGraphs.js deleted file mode 100644 index 5fb013bd..00000000 --- a/packages/handler-fetch/lib/spread/splitIntoGraphs.js +++ /dev/null @@ -1,37 +0,0 @@ -import rdf from 'rdf-ext' -import boundedDescriptionGraph from './boundedDescriptionGraph.js' - -function splitIntoGraphs(inputDataset) { - const input = inputDataset.clone() - - const result = rdf.dataset() - - const allIRIs = [...input].reduce((iriSet, quad) => { - if (quad.subject.termType !== 'NamedNode') { - return iriSet - } - iriSet.add(quad.subject.value.split('#')[0]) - return iriSet - }, new Set()) - - allIRIs.forEach((resourceIRI) => { - const resourceNode = rdf.namedNode(resourceIRI) - const resourceTriples = boundedDescriptionGraph(input, resourceNode) - - resourceTriples.forEach((triple) => { - if (triple.subject.termType !== 'BlankNode') { - input.delete(triple) - } - }) - - result.addAll( - resourceTriples.map((quad) => - rdf.quad(quad.subject, quad.predicate, quad.object, resourceNode), - ), - ) - }) - - return result -} - -export default splitIntoGraphs diff --git a/packages/handler-fetch/lib/utils.js b/packages/handler-fetch/lib/utils.js new file mode 100644 index 00000000..c1d29180 --- /dev/null +++ b/packages/handler-fetch/lib/utils.js @@ -0,0 +1,33 @@ +// @ts-check + +/** + * Wait for a variable to be truthy, with a timeout. + * + * @param {Function} getValueFunction A function that needs to return a truthy value to resolve the promise + * @param {number} [timeoutMs] The maximum time to wait for the variable to be truthy, in milliseconds + * @param {number} [checkIntervalMs] The interval at which to check the variable's value, in milliseconds + * @param {string} [errorMessage] The error message to use if the promise is rejected + * @returns {Promise} + */ +export const waitForVariableToBeTrue = async (getValueFunction, timeoutMs = 30000, checkIntervalMs = 20, errorMessage = 'Reached Timeout') => { + return new Promise((resolve, reject) => { + let timeoutId = null + + // Check the variable's value periodically + const interval = setInterval(() => { + if (getValueFunction()) { + if (timeoutId) { + clearTimeout(timeoutId) + } + clearInterval(interval) + resolve() + } + }, checkIntervalMs) + + // Set a timeout to reject the promise if the time exceeds the specified duration + timeoutId = setTimeout(() => { + clearInterval(interval) + reject(new Error(errorMessage)) + }, timeoutMs) + }) +} diff --git a/packages/handler-fetch/lib/worker.js b/packages/handler-fetch/lib/worker.js new file mode 100644 index 00000000..2470e776 --- /dev/null +++ b/packages/handler-fetch/lib/worker.js @@ -0,0 +1,108 @@ +// @ts-check + +import { parentPort } from 'node:worker_threads' +import { readFile } from 'node:fs/promises' +import { resolve as pathResolve } from 'node:path' + +import oxigraph from 'oxigraph' + +import { performOxigraphQuery } from './query.js' + +/** + * Fetch file content from URL or path. + * + * @param {string} url URL or path to file to fetch. + * @returns {Promise} File content. + */ +const getContent = async (url) => { + let content + + if (url.startsWith('http://') || url.startsWith('https://')) { + const response = await fetch(url) + content = await response.text() + } else { + const resolvedPath = pathResolve(url) + content = await readFile(resolvedPath, 'utf8') + } + + return content +} + +// Create a store +const store = new oxigraph.Store() +parentPort.postMessage({ + type: 'log', + data: 'Created store', +}) + +// Handle configuration +const handleConfig = async (config) => { + const { graphName, unionDefaultGraph, url, contentType, baseIri } = config + let graphNameIri = graphName + if ((typeof unionDefaultGraph === 'boolean' && unionDefaultGraph) || unionDefaultGraph === 'true') { + graphNameIri = oxigraph.defaultGraph() + } + + // Read data from file or URL + const data = await getContent(url) + parentPort.postMessage({ + type: 'log', + data: `Loaded ${data.length} bytes of data from ${url}`, + }) + + // Load the data into the store + store.load(data, contentType, baseIri, graphNameIri) + parentPort.postMessage({ + type: 'log', + data: 'Loaded data into store', + }) + + // Tell the parent that the worker is ready to handle queries + parentPort.postMessage({ + type: 'ready', + data: true, + }) +} + +// Handle query +const handleQuery = async (data) => { + const { query, queryId } = data + let response = '' + let contentType = 'text/plain' + let success = false + + // Perform the query and catch any errors + try { + const { response: storeResponse, contentType: storeContentType } = await performOxigraphQuery(store, query) + response = storeResponse + contentType = storeContentType + success = true + } catch (error) { + response = error.message + } + + parentPort.postMessage({ + type: 'query', + data: { + queryId, + response, + contentType, + success, + }, + }) +} + +parentPort.on('message', async (event) => { + if (!event || !event.type) { + return + } + + switch (event.type) { + case 'config': + await handleConfig(event.data) + break + case 'query': + await handleQuery(event.data) + break + } +}) diff --git a/packages/handler-fetch/package.json b/packages/handler-fetch/package.json index 443d2089..92bd5380 100644 --- a/packages/handler-fetch/package.json +++ b/packages/handler-fetch/package.json @@ -5,6 +5,7 @@ "version": "2.0.1", "license": "MIT", "main": "index.js", + "types": "dist/index.d.ts", "homepage": "https://github.com/zazuko/trifid", "repository": { "type": "git", @@ -14,26 +15,28 @@ "bugs": { "url": "https://github.com/zazuko/trifid/issues" }, + "files": [ + "dist", + "lib", + "index.js", + "CHANGELOG.md" + ], "scripts": { - "test": "mocha" + "test": "c8 --reporter=lcov --reporter=text mocha", + "prebuild": "rimraf dist/", + "build": "tsc", + "prepack": "npm run build" }, "dependencies": { - "@rdfjs/express-handler": "^1.2.2", - "@rdfjs/formats-common": "^2.2.0", - "@rdfjs/serializer-jsonld-ext": "^3.0.0", - "file-fetch": "^1.7.0", - "@rdfjs/fetch": "^3.1.0", - "nodeify-fetch": "^3.0.0", - "proto-fetch": "^1.0.0", - "rdf-ext": "^2.0.1", - "rdfjs": "^0.0.1" + "oxigraph": "^0.4.0-alpha.2", + "uuid": "^9.0.1" }, "devDependencies": { - "bluebird": "^3.7.2", - "express": "^4.18.2", - "mocha": "^10.0.0", - "nock": "^13.2.9", - "supertest": "^6.3.4", - "tbbt-ld": "^1.1.0" + "@types/node": "^20.11.16", + "@types/uuid": "^9.0.8", + "c8": "^9.1.0", + "mocha": "^10.2.0", + "rimraf": "^5.0.5", + "typescript": "^5.3.3" } } diff --git a/packages/handler-fetch/test/Fetcher.js b/packages/handler-fetch/test/Fetcher.js deleted file mode 100644 index 9942e0e9..00000000 --- a/packages/handler-fetch/test/Fetcher.js +++ /dev/null @@ -1,228 +0,0 @@ -/* global describe, it */ - -import assert from 'assert' -import fs from 'fs' -import { createRequire } from 'module' -import nock from 'nock' -import rdf from 'rdf-ext' -import Fetcher from '../lib/Fetcher.js' - -const require = createRequire(import.meta.url) - -describe('Fetcher', () => { - const fileUrlDataset = `file://${require.resolve('tbbt-ld/dist/tbbt.nq')}` - - describe('.isCached', () => { - it('should return false if caching is not enabled', () => { - assert(!Fetcher.isCached({})) - }) - - it('should return false if caching is enabled but fetched date is not set', () => { - assert(!Fetcher.isCached({ cache: true })) - }) - - it('should return true if caching is enabled and fetched date is set', () => { - assert( - Fetcher.isCached({ - cache: true, - fetched: new Date(), - }), - ) - }) - }) - - describe('.fetchDataset', () => { - it('should load a dataset from a file URL', async () => { - const options = { - url: fileUrlDataset, - options: { - contentTypeLookup: () => { - return 'application/n-quads' - }, - }, - } - - const dataset = await Fetcher.fetchDataset(options) - const graphs = Array.from(dataset).reduce((graph, quad) => { - graph[quad.graph.value] = true - return graph - }, {}) - assert(graphs['http://localhost:8080/data/person/amy-farrah-fowler']) - assert(graphs['http://localhost:8080/data/person/sheldon-cooper']) - }) - - it('should load a dataset from a http URL', async () => { - const content = fs.readFileSync(new URL(fileUrlDataset)) - - nock('http://example.org').get('/dataset').reply(200, content, { - 'content-type': 'application/n-quads', - }) - - const options = { - url: 'http://example.org/dataset', - } - - const dataset = await Fetcher.fetchDataset(options) - const graphs = Array.from(dataset).reduce((graph, quad) => { - graph[quad.graph.value] = true - return graph - }, {}) - assert(graphs['http://localhost:8080/data/person/amy-farrah-fowler']) - assert(graphs['http://localhost:8080/data/person/sheldon-cooper']) - }) - - it('should load a dataset from a http URL and use the given content type to parse it', async () => { - const content = fs.readFileSync(new URL(fileUrlDataset)) - - nock('http://example.org') - .get('/dataset-content-type') - .reply(200, content, { - 'content-type': 'text/turtle', - }) - - const options = { - url: 'http://example.org/dataset-content-type', - contentType: 'application/n-quads', - } - - const dataset = await Fetcher.fetchDataset(options) - const graphs = Array.from(dataset).reduce((graph, quad) => { - graph[quad.graph.value] = true - return graph - }, {}) - assert(graphs['http://localhost:8080/data/person/amy-farrah-fowler']) - assert(graphs['http://localhost:8080/data/person/sheldon-cooper']) - }) - }) - - describe('.spreadDataset', () => { - it('should forward the dataset if no options are given', () => { - const input = rdf.dataset([ - rdf.quad( - rdf.namedNode('http://example.org/subject1'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/graph'), - ), - rdf.quad( - rdf.namedNode('http://example.org/subject2'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/graph'), - ), - ]) - - const output = rdf.dataset() - - Fetcher.spreadDataset(input, output, {}) - - assert.equal(output.toCanonical(), input.toCanonical()) - }) - - it('should load the triples into the given named node if resource is set', () => { - const resource = 'http://example.org/resource' - - const input = rdf.dataset([ - rdf.quad( - rdf.namedNode('http://example.org/subject1'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/graph'), - ), - rdf.quad( - rdf.namedNode('http://example.org/subject2'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/graph'), - ), - ]) - - const output = rdf.dataset() - - const expected = rdf.dataset([ - rdf.quad( - rdf.namedNode('http://example.org/subject1'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode(resource), - ), - rdf.quad( - rdf.namedNode('http://example.org/subject2'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode(resource), - ), - ]) - - Fetcher.spreadDataset(input, output, { resource }) - - assert.equal(output.toCanonical(), expected.toCanonical()) - }) - - it('should split the dataset if split option is true', () => { - const input = rdf.dataset([ - rdf.quad( - rdf.namedNode('http://example.org/subject1'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/graph'), - ), - rdf.quad( - rdf.namedNode('http://example.org/subject2'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/graph'), - ), - ]) - - const output = rdf.dataset() - - const expected = rdf.dataset([ - rdf.quad( - rdf.namedNode('http://example.org/subject1'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/subject1'), - ), - rdf.quad( - rdf.namedNode('http://example.org/subject2'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/subject2'), - ), - ]) - - Fetcher.spreadDataset(input, output, { split: true }) - - assert.equal(output.toCanonical(), expected.toCanonical()) - }) - - it('should assign an array of all resources to the options object', () => { - const input = rdf.dataset([ - rdf.quad( - rdf.namedNode('http://example.org/subject1'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/graph1'), - ), - rdf.quad( - rdf.namedNode('http://example.org/subject2'), - rdf.namedNode('http://example.org/predicate'), - rdf.literal('object'), - rdf.namedNode('http://example.org/graph2'), - ), - ]) - - const output = rdf.dataset() - - const options = {} - - Fetcher.spreadDataset(input, output, options) - - assert.deepEqual(options.resources, [ - 'http://example.org/graph1', - 'http://example.org/graph2', - ]) - }) - }) -}) diff --git a/packages/handler-fetch/test/handler-fetch.test.js b/packages/handler-fetch/test/handler-fetch.test.js new file mode 100644 index 00000000..fbb077be --- /dev/null +++ b/packages/handler-fetch/test/handler-fetch.test.js @@ -0,0 +1,116 @@ +// @ts-check + +import { strictEqual, deepEqual } from 'node:assert' +import { describe, it } from 'mocha' +import { convertTermType, handleOxigraphResult } from '../lib/query.js' + +describe('trifid-handler-fetch', () => { + describe('check that required functions are defined', () => { + it('fetch', () => { + strictEqual(typeof fetch, 'function') + }) + }) + + describe('query', () => { + it('should convert to the expected TermType', () => { + strictEqual(convertTermType('Literal'), 'literal') + strictEqual(convertTermType('BlankNode'), 'bnode') + strictEqual(convertTermType('NamedNode'), 'uri') + strictEqual(convertTermType(''), 'literal') + }) + + it('should handle ASK queries', async () => { + const results = true + const { raw, response, contentType, type } = await handleOxigraphResult(results) + if (typeof raw === 'string' || Array.isArray(raw)) { + throw new Error('raw should be an object, not a string or an array') + } + strictEqual(raw.boolean, results) + strictEqual(response, JSON.stringify(raw, null, 2)) + strictEqual(contentType, 'application/sparql-results+json') + strictEqual(type, 'ASK') + }) + + it('should handle empty results', async () => { + const results = [] + const expectedResult = { + head: { + vars: [], + }, + results: { + bindings: [], + }, + } + const { raw, response, contentType, type } = await handleOxigraphResult(results) + deepEqual(raw, expectedResult) + strictEqual(response, JSON.stringify(expectedResult, null, 2)) + strictEqual(contentType, 'application/sparql-results+json') + strictEqual(type, 'SELECT') + }) + + it('should handle CONSTRUCT queries', async () => { + const results = [] + const { raw, response, contentType, type } = await handleOxigraphResult(results, true) + strictEqual(raw, '') + strictEqual(response, '') + strictEqual(contentType, 'application/n-triples') + strictEqual(type, 'CONSTRUCT') + }) + + it('should handle SELECT queries', async () => { + const results = [] + const resultsMap = new Map() + resultsMap.set('s', { termType: 'NamedNode', value: 'http://example.org/subject' }) + resultsMap.set('p', { termType: 'NamedNode', value: 'http://example.org/predicate' }) + resultsMap.set('o', { termType: 'Literal', value: 'object' }) + results.push(resultsMap) + + const expectedResult = { + head: { + vars: ['s', 'p', 'o'], + }, + results: { + bindings: [ + { + s: { + type: 'uri', + value: 'http://example.org/subject', + }, + p: { + type: 'uri', + value: 'http://example.org/predicate', + }, + o: { + type: 'literal', + value: 'object', + }, + }, + ], + }, + } + + const { raw, response, contentType, type } = await handleOxigraphResult(results) + deepEqual(raw, expectedResult) + deepEqual(JSON.parse(response), expectedResult) + strictEqual(contentType, 'application/sparql-results+json') + strictEqual(type, 'SELECT') + }) + + it('should handle CONSTRUCT queries', async () => { + const results = [ + { toString: () => ' "object1"' }, + { toString: () => ' "object2"' }, + { toString: () => ' "object3"' }, + ] + + const expectedRawResult = results.map((result) => result.toString()) + const expectedResult = `${expectedRawResult.join(' . \n')} .` + + const { raw, response, contentType, type } = await handleOxigraphResult(results, true) + deepEqual(raw, expectedRawResult) + deepEqual(response, expectedResult) + strictEqual(contentType, 'application/n-triples') + strictEqual(type, 'CONSTRUCT') + }) + }) +}) diff --git a/packages/handler-fetch/test/index.js b/packages/handler-fetch/test/index.js deleted file mode 100644 index 1db2924b..00000000 --- a/packages/handler-fetch/test/index.js +++ /dev/null @@ -1,279 +0,0 @@ -/* global describe, it */ - -import assert from 'assert' -import fs from 'fs' -import path, { dirname } from 'path' -import { fileURLToPath } from 'url' -import { createRequire } from 'module' -import Promise from 'bluebird' - -import request from 'supertest' -import express from 'express' -import { FetchHandler as Handler } from '../index.js' - -const require = createRequire(import.meta.url) -const __dirname = dirname(fileURLToPath(import.meta.url)) - -describe('trifid-handler-fetch', () => { - const fileUrlDataset = 'file://' + require.resolve('tbbt-ld/dist/tbbt.nq') - - const attachIri = (req, res, next) => { - req.iri = new URL(decodeURI(req.url), 'http://localhost:8080/').href - - next() - } - - it('should assign url option', () => { - const iri = 'http://example.org/dataset' - - const handler = new Handler({ url: iri }) - - assert.equal(handler.url, iri) - }) - - it('should use file:// and resolve to cwd if no protocol was given', () => { - const handler = new Handler({ url: 'test' }) - - assert.equal(handler.url, 'file://' + path.resolve('test')) - }) - - it('should assign cache option', () => { - const handler = new Handler({ cache: 'test' }) - - assert.equal(handler.cache, 'test') - }) - - it('should assign contentType option', () => { - const handler = new Handler({ contentType: 'test' }) - - assert.equal(handler.contentType, 'test') - }) - - it('should assign options option', () => { - const handler = new Handler({ options: 'test' }) - - assert.equal(handler.options, 'test') - }) - - it('should assign resource option', () => { - const handler = new Handler({ resource: 'test' }) - - assert.equal(handler.resource, 'test') - }) - - it('should assign split option', () => { - const handler = new Handler({ split: 'test' }) - - assert.equal(handler.split, 'test') - }) - - it('should implement the handler interface', () => { - const handler = new Handler({ url: fileUrlDataset }) - - assert.equal(typeof handler.handle, 'function') - }) - - it('should implement the legacy handler interface', () => { - const handler = new Handler({ url: fileUrlDataset }) - - assert.equal(typeof handler.get, 'function') - }) - - it('should send a response', async () => { - const includeNt = - '' - const excludeNt = - '' - - const app = express() - - const handler = new Handler({ - url: fileUrlDataset, - options: { - contentTypeLookup: () => { - return 'application/n-quads' - }, - }, - }) - - app.use(attachIri) - app.use(handler.handle) - - const res = await request(app) - .get('/data/person/amy-farrah-fowler') - .set('accept', 'text/turtle') - const text = res.text.split(' ').join('') - assert.equal(text.indexOf(includeNt) >= 0, true) - assert.equal(text.indexOf(excludeNt) >= 0, false) - }) - - it('should not process next middleware after sending content', async () => { - const app = express() - - const handler = new Handler({ - url: fileUrlDataset, - options: { - contentType: () => 'application/n-quads', - }, - }) - - let touched = false - - app.use(attachIri) - app.use(handler.handle) - app.use(() => { - touched = true - }) - - await request(app) - .get('/data/person/amy-farrah-fowler') - .set('accept', 'text/turtle') - await Promise.delay(500) - assert(!touched) - }) - - it('retrieves JSON-LD responses', async () => { - const app = express() - - const handler = new Handler({ - url: fileUrlDataset, - options: { - contentTypeLookup: () => { - return 'application/n-quads' - }, - }, - }) - - app.use(attachIri) - app.use(handler.handle) - - const res = await request(app) - .get('/data/person/amy-farrah-fowler') - .set('accept', 'application/ld+json') - const jsonld = JSON.parse(res.text) - assert(Array.isArray(jsonld)) - assert(jsonld.length > 0) - assert.equal( - jsonld[0]['@id'], - 'http://localhost:8080/data/person/amy-farrah-fowler', - ) - }) - - it('should send a 404 response for unknown resources', () => { - const app = express() - - const handler = new Handler({ - url: fileUrlDataset, - options: { - contentTypeLookup: () => { - return 'application/n-quads' - }, - }, - }) - - app.use(attachIri) - app.use(handler.handle) - - return request(app) - .get('/data/person/dr-who') - .set('accept', 'text/turtle') - .expect(404) - }) - - it('should cache the dataset if cache option is true', async () => { - const base = 'http://localhost:8080' - const fileUrl = `file://${path.join(__dirname, 'test.nt')}` - - const datasetBefore = `<${base}/subject0> <${base}/predicate> "object0" .\n<${base}/subject1> <${base}/predicate> "object1" .\n` - - const datasetAfter = `<${base}/subject0> <${base}/predicate> "object0" .\n<${base}/subject0> <${base}/predicate> "object1" .\n` - - const app = express() - - const handler = new Handler({ - url: fileUrl, - options: { - contentTypeLookup: () => { - return 'application/n-triples' - }, - }, - cache: true, - split: true, - }) - - app.use(attachIri) - app.use(handler.handle) - - fs.writeFileSync(new URL(fileUrl), datasetBefore) - - await request(app) - .get('/subject1') - .set('accept', 'text/turtle') - .expect(200) - fs.writeFileSync(new URL(fileUrl), datasetAfter) - return await request(app) - .get('/subject1') - .set('accept', 'text/turtle') - .expect(200) - }) - - it('should not cache the dataset if cache options is not true', async () => { - const base = 'http://localhost:8080' - const fileUrl = `file://${path.join(__dirname, 'test.nt')}` - - const datasetBefore = `<${base}/subject0> <${base}/predicate> "object0" .\n<${base}/subject1> <${base}/predicate> "object1" .\n` - - const datasetAfter = `<${base}/subject0> <${base}/predicate> "object0" .\n<${base}/subject0> <${base}/predicate> "object1" .\n` - - const app = express() - - const handler = new Handler({ - url: fileUrl, - options: { - contentTypeLookup: () => { - return 'application/n-triples' - }, - }, - split: true, - }) - - app.use(attachIri) - app.use(handler.handle) - - fs.writeFileSync(new URL(fileUrl), datasetBefore) - - await request(app) - .get('/subject1') - .set('accept', 'text/turtle') - .expect(200) - fs.writeFileSync(new URL(fileUrl), datasetAfter) - await request(app) - .get('/subject1') - .set('accept', 'text/turtle') - .expect(404) - fs.unlinkSync(new URL(fileUrl)) - }) - - it('should implement the legacy interface', () => { - const app = express() - - const handler = new Handler({ - url: fileUrlDataset, - options: { - contentTypeLookup: () => { - return 'application/n-quads' - }, - }, - }) - - app.use(attachIri) - app.use((req, res, next) => { - handler.get(req, res, next, req.iri) - }) - - return request(app) - .get('/data/person/amy-farrah-fowler') - .set('accept', 'text/turtle') - .expect(200) - }) -}) diff --git a/packages/handler-fetch/test/spread/boundedDescriptionGraph.js b/packages/handler-fetch/test/spread/boundedDescriptionGraph.js deleted file mode 100644 index da33732e..00000000 --- a/packages/handler-fetch/test/spread/boundedDescriptionGraph.js +++ /dev/null @@ -1,59 +0,0 @@ -/* global describe, it */ - -import assert from 'assert' -import rdf from 'rdf-ext' -import boundedDescriptionGraph from '../../lib/spread/boundedDescriptionGraph.js' - -const ex = rdf.namespace('http://example.org/') - -describe('resource', () => { - it('should create sub graph for a resource', () => { - const blankNode0 = rdf.blankNode() - const blankNode1 = rdf.blankNode() - - const input = rdf.dataset([ - rdf.quad(ex.node0, ex.predicate, blankNode0), - rdf.quad(blankNode0, ex.predicate, ex.node1), - rdf.quad(ex.node1, ex.predicate, blankNode1), - ]) - - const output = boundedDescriptionGraph(input, ex.node0) - - const expected = rdf.dataset([ - rdf.quad(ex.node0, ex.predicate, blankNode0), - rdf.quad(blankNode0, ex.predicate, ex.node1), - ]) - - assert.equal(output.toCanonical(), expected.toCanonical()) - }) - - it('should handle circular links', () => { - const blankNode = rdf.blankNode() - - const input = rdf.dataset([ - rdf.quad(ex.node, ex.predicate, blankNode), - rdf.quad(blankNode, ex.predicate, ex.node), - ]) - - const output = boundedDescriptionGraph(input, ex.node) - - assert.equal(output.toCanonical(), input.toCanonical()) - }) - - it('should ignore the fragment part of the subject', () => { - const blankNode = rdf.blankNode() - - const input = rdf.dataset([ - rdf.quad(ex.node, ex.predicate, blankNode), - rdf.quad( - rdf.namedNode('http://example.org/node#fragment'), - ex.predicate, - blankNode, - ), - ]) - - const output = boundedDescriptionGraph(input, ex.node) - - assert.equal(output.toCanonical(), input.toCanonical()) - }) -}) diff --git a/packages/handler-fetch/test/spread/splitIntoGraphs.js b/packages/handler-fetch/test/spread/splitIntoGraphs.js deleted file mode 100644 index 7d96287a..00000000 --- a/packages/handler-fetch/test/spread/splitIntoGraphs.js +++ /dev/null @@ -1,55 +0,0 @@ -/* global describe, it */ - -import assert from 'assert' -import rdf from 'rdf-ext' -import splitIntoGraphs from '../../lib/spread/splitIntoGraphs.js' - -const ex = rdf.namespace('http://example.org/') - -describe('resourcesToGraph', () => { - it('should split resources in separate graphs', () => { - const namedNode0 = rdf.namedNode('http://example.org/node0') - const namedNode1 = rdf.namedNode('http://example.org/node1') - const blankNode0 = rdf.blankNode() - const blankNode1 = rdf.blankNode() - - const input = rdf.dataset([ - rdf.quad(namedNode0, ex.predicate, blankNode0), - rdf.quad(blankNode0, ex.predicate, namedNode1), - rdf.quad(namedNode1, ex.predicate, blankNode1), - ]) - - const output = splitIntoGraphs(input) - - const expected = rdf.dataset([ - rdf.quad(namedNode0, ex.predicate, blankNode0, namedNode0), - rdf.quad(blankNode0, ex.predicate, namedNode1, namedNode0), - rdf.quad(namedNode1, ex.predicate, blankNode1, namedNode1), - ]) - - assert.equal(output.toCanonical(), expected.toCanonical()) - }) - - it('should ignore the fragment part of the subject', () => { - const namedNode0 = rdf.namedNode('http://example.org/node') - const namedNode1 = rdf.namedNode('http://example.org/node#fragment') - const blankNode0 = rdf.blankNode() - const blankNode1 = rdf.blankNode() - - const input = rdf.dataset([ - rdf.quad(namedNode0, ex.predicate, blankNode0), - rdf.quad(blankNode0, ex.predicate, namedNode1), - rdf.quad(namedNode1, ex.predicate, blankNode1), - ]) - - const output = splitIntoGraphs(input) - - const expected = rdf.dataset([ - rdf.quad(namedNode0, ex.predicate, blankNode0, namedNode0), - rdf.quad(blankNode0, ex.predicate, namedNode1, namedNode0), - rdf.quad(namedNode1, ex.predicate, blankNode1, namedNode0), - ]) - - assert.equal(output.toCanonical(), expected.toCanonical()) - }) -}) diff --git a/packages/handler-fetch/tsconfig.json b/packages/handler-fetch/tsconfig.json new file mode 100644 index 00000000..b4e69ae1 --- /dev/null +++ b/packages/handler-fetch/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + } +} diff --git a/packages/i18n/README.md b/packages/i18n/README.md index dfdeeb70..04798547 100644 --- a/packages/i18n/README.md +++ b/packages/i18n/README.md @@ -10,9 +10,9 @@ Install this Trifid plugin using: npm install trifid-plugin-i18n ``` -The plugin needs to be added to the Trifid config under the `middlewares` property. -It should be loaded before the `locals` middleware and the template engine. -In the following example order 5 is used which works for the default config where the `locals` middleware uses a higher order value. +The plugin needs to be added to the Trifid config under the `plugins` property. +It should be loaded before the `locals` plugin and the template engine. +In the following example order 5 is used which works for the default config where the `locals` plugin uses a higher order value. The config for the [i18n](https://www.npmjs.com/package/i18n) package can be set using the `config` property. The `directory` configuration field is required, and should point to the directory where you i18n JSON files are stored. See the [i18n list of configuration options](https://www.npmjs.com/package/i18n#list-of-all-configuration-options) for more details. @@ -21,8 +21,8 @@ Some default values are defined in the `index.js` file. Example of configuration: ```yaml -middlewares: - # […] your other middlewares +plugins: + # […] your other plugins i18n: module: "trifid-plugin-i18n" order: 5 diff --git a/packages/i18n/index.js b/packages/i18n/index.js index 3205dab2..6917f02a 100644 --- a/packages/i18n/index.js +++ b/packages/i18n/index.js @@ -1,42 +1,24 @@ -import cookieParser from 'cookie-parser' +// @ts-check + import i18n from 'i18n' -import express from 'express' -const { configure: i18nConfigure, init: i18nInit } = i18n +const I18n = i18n.I18n +/** @type {i18n.ConfigurationOptions} */ const defaults = { - cookie: 'i18n', queryParameter: 'lang', directory: 'locales', - api: { - __: 't', - __n: 'tn', - }, - cookieMaxAge: 30 * 24 * 60 * 60 * 1000, + indent: ' ', + extension: '.json', + objectNotation: true, + logDebugFn: (_msg) => { }, + logWarnFn: (_msg) => { }, + logErrorFn: (_msg) => { }, } -export const middleware = (config) => { - config = { ...defaults, ...config } - - const middlewareRouter = express.Router() - - i18nConfigure(config) - - middlewareRouter.use(cookieParser(), i18nInit, (req, res, next) => { - if (req.cookies.i18n !== res.locals.locale) { - res.cookie(config.cookie, res.locals.locale, { - maxAge: config.cookieMaxAge, - }) - } - - next() - }) - - return middlewareRouter -} - -const factory = (trifid) => { - const { config, registerTemplateHelper } = trifid +/** @type {import('../core/types/index.js').TrifidPlugin} */ +const factory = async (trifid) => { + const { config, registerTemplateHelper, server } = trifid // Force user to define the `directory` parameter if (!config.directory || typeof config.directory !== 'string') { @@ -45,21 +27,35 @@ const factory = (trifid) => { ) } - // Use the middleware - trifid.server.use(middleware(config)) + const i18nInstance = new I18n({ + ...defaults, + ...config, + }) - // Register the 'i18n' helper for the template engine - return (_req, res, next) => { - registerTemplateHelper('i18n', (value) => { - if (!res.locals.t || typeof res.locals.t !== 'function') { - return value - } + /** + * Hook to configure the language in the locals. + * + * @param {import('fastify').FastifyRequest<{ Querystring: { lang: string }}> & { session: Map }} request Request. + * @param {import('fastify').FastifyReply} _reply Reply. + * @param {import('fastify').DoneFuncWithErrOrRes} done Done function. + */ + const onRequestHookHandler = (request, _reply, done) => { + const session = request.session + const currentLanguage = session.get('currentLanguage') || session.get('defaultLanguage') || 'en' + i18nInstance.setLocale(currentLanguage) + const t = (/** @type {string} **/ phrase) => i18nInstance.__({ + phrase, + locale: currentLanguage, + }) + session.set('t', t) - return res.locals.t(value) + registerTemplateHelper('i18n', (/** @type {string} **/ value) => { + return t(value) }) - next() + done() } + server.addHook('onRequest', onRequestHookHandler) } export default factory diff --git a/packages/i18n/package.json b/packages/i18n/package.json index b9dbc3d4..789aa148 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -19,8 +19,6 @@ }, "homepage": "https://github.com/zazuko/trifid", "dependencies": { - "cookie-parser": "^1.4.6", - "express": "^4.18.2", "i18n": "^0.15.1" }, "files": [ @@ -28,9 +26,10 @@ "test" ], "devDependencies": { - "express-as-promise": "^1.2.0", + "@types/i18n": "^0.13.10", "mocha": "^10.2.0", "nodeify-fetch": "^3.1.0", - "nyc": "^15.1.0" + "nyc": "^15.1.0", + "trifid-core": "^2.7.1" } } diff --git a/packages/i18n/test/support/locales/fr.json b/packages/i18n/test/support/locales/fr.json new file mode 100644 index 00000000..120ef3e6 --- /dev/null +++ b/packages/i18n/test/support/locales/fr.json @@ -0,0 +1,3 @@ +{ + "test": "test-fr" +} diff --git a/packages/i18n/test/test.js b/packages/i18n/test/test.js index 437f0357..5e8641ae 100644 --- a/packages/i18n/test/test.js +++ b/packages/i18n/test/test.js @@ -1,158 +1,175 @@ -import { strictEqual, throws } from 'assert' -import { dirname, resolve } from 'path' -import { fileURLToPath, URL } from 'url' -import fetch from 'nodeify-fetch' -import { describe, it } from 'mocha' -import factory, { middleware as trifidPluginI18n } from '../index.js' -import withServer from './support/withServer.js' +// @ts-check -const currentDir = dirname(fileURLToPath(import.meta.url)) - -describe('trifid-plugin-i18n', () => { - it('should add the .t method to to res to translate a string', async () => { - await withServer(async (server) => { - const middleware = trifidPluginI18n({ - locales: ['en', 'de'], - defaultLocale: 'en', - directory: resolve(currentDir, 'support/locales'), - }) - server.app.use(middleware) - - let t = null +import { strictEqual } from 'node:assert' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' - server.app.get('/', (_req, res, next) => { - t = res.t +import trifidCore from 'trifid-core' +import { describe } from 'mocha' - next() - }) +import trifidPluginFactory from '../index.js' - const baseUrl = await server.listen() - await (await fetch(baseUrl)).text() +const currentDir = dirname(fileURLToPath(import.meta.url)) - strictEqual(typeof t, 'function') - }) +/** + * Get an endpoint of the Fastify Instance. + * + * @param {import('fastify').FastifyInstance} server Server. + * @returns {string} + */ +const getListenerURL = (server) => { + const addresses = server.addresses().map((address) => { + if (typeof address === 'string') { + return address + } + return `http://${address.address}:${address.port}` }) - it('should translate the string in the default language', async () => { - await withServer(async (server) => { - const middleware = trifidPluginI18n({ - locales: ['en', 'de'], - defaultLocale: 'en', - directory: resolve(currentDir, 'support/locales'), - }) - server.app.use(middleware) + if (addresses.length < 1) { + throw new Error('The listener is not listening') + } - server.app.get('/', (_req, res) => { - res.end(`${res.t('test')}`) - }) + return addresses[0] +} - const baseUrl = await server.listen() - const content = await (await fetch(baseUrl)).text() +const createTrifidInstance = (config) => { + return trifidCore( + { + server: { + listener: { + port: 0, + }, + logLevel: 'warn', + }, + }, + { + i18n: { + module: trifidPluginFactory, + config, + }, + testPage: { + module: async () => { + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + paths: [ + '/', + ], + } + }, + routeHandler: async () => { + /** + * Route handler. + * @param {import('fastify').FastifyRequest & { session: Map }} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + const session = request.session + reply.send(session.get('t')('test')) + } + return handler + }, + } + }, + }, + }, + ) +} - strictEqual(content, 'test-en') - }) +describe('trifid-plugin-i18n', () => { + let trifidListener + + afterEach(async () => { + if (!trifidListener) { + return + } + await trifidListener.close() + trifidListener = undefined }) - it('should translate the string in the language given as query parameter', async () => { - await withServer(async (server) => { - const middleware = trifidPluginI18n({ - locales: ['en', 'de'], - defaultLocale: 'en', - directory: resolve(currentDir, 'support/locales'), - }) - server.app.use(middleware) - - server.app.get('/', (_req, res) => { - res.end(`${res.t('test')}`) - }) - - const baseUrl = new URL(await server.listen()) - baseUrl.searchParams.append('lang', 'de') - - const content = await (await fetch(baseUrl)).text() + it('should throw if no directory is defined', async () => { + try { + await createTrifidInstance({}) + } catch (error) { + strictEqual(error.message, "The 'directory' configuration field should be a non-empty string.") + } + }) - strictEqual(content, 'test-de') + it('should work with EN as default locale', async () => { + const trifidInstance = await createTrifidInstance({ + locales: ['en', 'fr', 'de'], + defaultLocale: 'en', + directory: resolve(currentDir, 'support/locales'), }) + trifidListener = await trifidInstance.start() + const res = await fetch(`${getListenerURL(trifidListener)}/`) + const body = await res.text() + strictEqual(res.status, 200) + strictEqual(body, 'test-en') }) - it('should translate the string in the language given as cookie', async () => { - await withServer(async (server) => { - const middleware = trifidPluginI18n({ - locales: ['en', 'de'], - defaultLocale: 'en', - directory: resolve(currentDir, 'support/locales'), - }) - server.app.use(middleware) - - server.app.get('/', (_req, res) => { - res.end(`${res.t('test')}`) - }) - - const baseUrl = await server.listen() - const content = await ( - await fetch(baseUrl, { - headers: { - cookie: 'i18n=de', - }, - }) - ).text() - - strictEqual(content, 'test-de') + it('should work with DE as default locale (should return EN)', async () => { + const trifidInstance = await createTrifidInstance({ + locales: ['en', 'fr', 'de'], + defaultLocale: 'de', + directory: resolve(currentDir, 'support/locales'), }) + trifidListener = await trifidInstance.start() + const res = await fetch(`${getListenerURL(trifidListener)}/`) + const body = await res.text() + strictEqual(res.status, 200) + strictEqual(body, 'test-en') }) - it('should send a cookie if the language changed', async () => { - await withServer(async (server) => { - const middleware = trifidPluginI18n({ - locales: ['en', 'de'], - defaultLocale: 'en', - directory: resolve(currentDir, 'support/locales'), - }) - server.app.use(middleware) - - const baseUrl = new URL(await server.listen()) - baseUrl.searchParams.append('lang', 'de') - - const res = await fetch(baseUrl) - - strictEqual(res.headers.get('set-cookie').startsWith('i18n=de'), true) + it('should set a cookie in case the language changed', async () => { + const trifidInstance = await createTrifidInstance({ + locales: ['en', 'fr', 'de'], + defaultLocale: 'en', + directory: resolve(currentDir, 'support/locales'), }) + trifidListener = await trifidInstance.start() + const res = await fetch(`${getListenerURL(trifidListener)}/?lang=fr`) + const cookies = res.headers.get('set-cookie') || '' + strictEqual(cookies.startsWith('i18n=fr'), true) + const body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) + strictEqual(body, 'test-fr') }) -}) -describe('Trifid factory', () => { - it('should throw if no directory is defined', async () => { - await withServer(async (server) => { - throws(() => - factory({ - config: { - locales: ['en', 'de'], - defaultLocale: 'en', - }, - }), - ) + it('should use the language from the cookie', async () => { + const trifidInstance = await createTrifidInstance({ + locales: ['en', 'fr', 'de'], + defaultLocale: 'en', + directory: resolve(currentDir, 'support/locales'), }) + trifidListener = await trifidInstance.start() + const res = await fetch(`${getListenerURL(trifidListener)}/`, { + headers: { + cookie: 'i18n=fr', + }, + }) + const body = await res.text() + strictEqual(res.status, 200) + strictEqual(body, 'test-fr') }) - it('should work as expected', async () => { - await withServer(async (server) => { - const middleware = factory({ - registerTemplateHelper: (_name, _fn) => { }, - server: server.app, - config: { - locales: ['en', 'de'], - defaultLocale: 'en', - directory: resolve(currentDir, 'support/locales'), - }, - }) - server.app.use(middleware) - - const baseUrl = new URL(await server.listen()) - baseUrl.searchParams.append('lang', 'de') - - const res = await fetch(baseUrl) - - strictEqual(res.headers.get('set-cookie').startsWith('i18n=de'), true) + it('should override cookie value if language is specified in query parameter', async () => { + const trifidInstance = await createTrifidInstance({ + locales: ['en', 'fr', 'de'], + defaultLocale: 'en', + directory: resolve(currentDir, 'support/locales'), + }) + trifidListener = await trifidInstance.start() + const res = await fetch(`${getListenerURL(trifidListener)}/?lang=fr`, { + headers: { + cookie: 'i18n=de', + }, }) + const cookies = res.headers.get('set-cookie') || '' + strictEqual(cookies.startsWith('i18n=fr'), true) + const body = await res.text() + strictEqual(res.status, 200) + strictEqual(body, 'test-fr') }) }) diff --git a/packages/iiif/index.js b/packages/iiif/index.js index ab902099..a68b0cdf 100644 --- a/packages/iiif/index.js +++ b/packages/iiif/index.js @@ -6,41 +6,7 @@ import SparqlHttpClient from 'sparql-http-client' import frame from './src/frame.js' import { createApi } from './src/iiif.js' -/** - * Create the Express middleware. - */ -const createMiddleware = (api, options = {}, logger = (str) => console.log(str)) => { - const { uriPrefix } = options - - return async (req, res, next) => { - const url = req.url - if (req.method !== 'GET') { - return next() - } - - if (!(uriPrefix || req.query.uri)) { - logger('No uri query parameter') - return next() - } - - const uri = uriPrefix ? rdf.namedNode(`${uriPrefix}${url}`) : rdf.namedNode(req.query.uri) - - if (!await api.exists(uri)) { - logger(`uri: ${uri} not found`) - return next() - } - logger(`fetching uri: ${uri}`) - - const dataset = await api.getBasicDataset(uri) - const augmented = await api.augmentDataset(dataset) - const doc = await jsonld.fromRDF(augmented, {}) - const framed = await frame(doc) - - res.send(framed) - } -} - -const trifidFactory = (trifid) => { +const trifidFactory = async (trifid) => { const { config, logger } = trifid if (!config || !config.endpointUrl) { @@ -57,8 +23,49 @@ const trifidFactory = (trifid) => { }) const uriPrefix = config.uriPrefix ? config.uriPrefix : '' - return createMiddleware(api, { uriPrefix }, logger) + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + paths: [ + '/iiif/', + ], + } + }, + routeHandler: async () => { + /** + * Route handler. + * @param {import('fastify').FastifyRequest} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + const fullUrl = `${request.protocol}://${request.hostname}${request.raw.url}` + const fullUrlObject = new URL(fullUrl) + const fullUrlPathname = fullUrlObject.pathname + + if (!(uriPrefix || request.query.uri)) { + logger.debug('No uri query parameter') + return reply.callNotFound() + } + + const uri = uriPrefix ? rdf.namedNode(`${uriPrefix}${fullUrlPathname}`) : rdf.namedNode(request.query.uri) + logger.debug(`uri: ${uri.value}`) + if (!await api.exists(uri)) { + logger.debug(`uri: ${uri} not found`) + return reply.callNotFound() + } + logger.debug(`fetching uri: ${uri}`) + + const dataset = await api.getBasicDataset(uri) + const augmented = await api.augmentDataset(dataset) + const doc = await jsonld.fromRDF(augmented, {}) + const framed = await frame(doc) + + return reply.send(framed) + } + return handler + }, + } } export default trifidFactory -export { createMiddleware } diff --git a/packages/iiif/package.json b/packages/iiif/package.json index dbbb3ed3..8bbfeb27 100644 --- a/packages/iiif/package.json +++ b/packages/iiif/package.json @@ -25,17 +25,17 @@ "dependencies": { "@rdfjs/express-handler": "^1.2.2", "@rdfjs/namespace": "^1.1.0", - "@tpluscode/rdf-string": "^0.2.25", + "@tpluscode/rdf-string": "^1.1.3", "clownface": "^1.5.1", - "jsonld": "^8.1.1", + "jsonld": "^8.3.2", "rdf-ext": "^2.2.0", - "sparql-http-client": "^2.4.0", + "sparql-http-client": "^2.4.2", "through2": "^4.0.2" }, "devDependencies": { - "c8": "^7.13.0", - "express-as-promise": "^1.2.0", - "mocha": "^10.0.0" + "c8": "^9.1.0", + "mocha": "^10.3.0", + "trifid-core": "^2.7.1" }, "publishConfig": { "access": "public" diff --git a/packages/iiif/test/support/createTrifidConfig.js b/packages/iiif/test/support/createTrifidConfig.js deleted file mode 100644 index 02926db1..00000000 --- a/packages/iiif/test/support/createTrifidConfig.js +++ /dev/null @@ -1,8 +0,0 @@ -const createTrifidConfig = (config, loggerSpy = []) => { - return { - logger: (str) => loggerSpy.push(str), - config, - } -} - -export { createTrifidConfig } diff --git a/packages/iiif/test/test.js b/packages/iiif/test/test.js index ca1f0f0a..a788bd0b 100644 --- a/packages/iiif/test/test.js +++ b/packages/iiif/test/test.js @@ -1,38 +1,84 @@ -import assert from 'assert' -import withServer from 'express-as-promise/withServer.js' +// @ts-check + +import { strictEqual } from 'node:assert' + +import trifidCore from 'trifid-core' import { describe, it } from 'mocha' -import trifidFactory from '../index.js' -import { createTrifidConfig } from './support/createTrifidConfig.js' -describe('trifid-plugin-iiif', () => { - describe('trifid factory', () => { - it('should be a factory', () => { - assert.strictEqual(typeof trifidFactory, 'function') +import trifidPluginFactory from '../index.js' + +/** + * Get an endpoint of the Fastify Instance. + * + * @param {import('fastify').FastifyInstance} server Server. + * @returns {string} + */ +const getListenerURL = (server) => { + const addresses = server.addresses().map((address) => { + if (typeof address === 'string') { + return address + } + return `http://${address.address}:${address.port}` + }) + + if (addresses.length < 1) { + throw new Error('The listener is not listening') + } + + return addresses[0] +} + +describe('@zazuko/trifid-plugin-iiif', () => { + describe('Trifid plugin', () => { + it('should throw an error if no endpoint parameter is provided', async () => { + try { + await trifidPluginFactory({}) + } catch (e) { + strictEqual(e.message, 'missing endpointUrl parameter') + } }) + }) + + describe('Trifid instance', () => { + let trifidListener - it('should error if endpoint parameter is missing', () => { - const trifid = createTrifidConfig({}) - assert.throws(() => trifidFactory(trifid), Error) + beforeEach(async () => { + const trifidServer = await trifidCore( + { + server: { + listener: { + port: 0, + }, + logLevel: 'warn', + }, + }, + { + iiif: { + module: trifidPluginFactory, + config: { + endpointUrl: 'http://example.org/query', + }, + }, + }, + ) + trifidListener = await trifidServer.start() }) - it('should create a middleware with factory and default options', () => { - const trifid = createTrifidConfig({ endpointUrl: '/test' }) - const middleware = trifidFactory(trifid) + afterEach(async () => { + await trifidListener.close() + }) - assert.strictEqual(typeof middleware, 'function') + it('should 404', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/iiif/`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 404) }) - }) - describe('middleware', () => { - it('warns about no uri parameter', async () => { - await withServer(async (server) => { - const loggerSpy = [] - const trifid = createTrifidConfig({ endpointUrl: '/test' }, loggerSpy) - const middleware = trifidFactory(trifid) - server.app.use(middleware) - await server.fetch('/test') - assert.strictEqual(loggerSpy[0], 'No uri query parameter') - }) + it('can serve IIIF', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/iiif/?uri=http://example.org/data`) + const _body = await res.text() // Just make sure that the stream is consumed + // @TODO: use a real SPARQL endpoint to get real results ; the 500 is due to the fact that the SPARQL endpoint is not real + strictEqual(res.status, 500) }) }) }) diff --git a/packages/markdown-content/README.md b/packages/markdown-content/README.md index 6599c516..302edb40 100644 --- a/packages/markdown-content/README.md +++ b/packages/markdown-content/README.md @@ -25,8 +25,8 @@ npm install @zazuko/trifid-markdown-content And then add in the `config.yaml` file the following part: ```yaml -middlewares: - # […] your other middlewares +plugins: + # […] your other plugins markdown-content: module: "@zazuko/trifid-markdown-content" order: 80 @@ -64,15 +64,15 @@ Those options are all optional. The following options are required for each namespace: - `directory`: The directory where the content is located. This should be a local directory (required). -- `mountPath`: The path where the content should be mounted. This should be a path that is not used by other middlewares (required). +- `mountPath`: The path where the content should be mounted. This should be a path that is not used by other plugins (required). ### Example This is a more complete example on how this plugin can be used: ```yaml -middlewares: - # […] your other middlewares +plugins: + # […] your other plugins markdown-content: module: "@zazuko/trifid-markdown-content" order: 80 @@ -131,8 +131,8 @@ Inside the `contact` directory, move the `contact.md` file and rename it to `def If you want to create the pages directly at the root of your Trifid instance, you can use the following Plugin configuration: ```yaml -middlewares: - # […] your other middlewares +plugins: + # […] your other plugins markdown-content: module: "@zazuko/trifid-markdown-content" order: 80 diff --git a/packages/markdown-content/package.json b/packages/markdown-content/package.json index 1640896a..34b9b44e 100644 --- a/packages/markdown-content/package.json +++ b/packages/markdown-content/package.json @@ -4,8 +4,12 @@ "description": "Trifid plugin to handle Markdown files", "main": "src/index.js", "type": "module", + "types": "dist/index.d.ts", "scripts": { - "test": "c8 --reporter=lcov --reporter=text mocha" + "test": "c8 --reporter=lcov --reporter=text mocha", + "prebuild": "rimraf dist/", + "build": "tsc", + "prepack": "npm run build" }, "author": "Zazuko GmbH", "license": "MIT", @@ -22,11 +26,15 @@ }, "files": [ "src", - "views" + "views", + "dist", + "CHANGELOG.md" ], "devDependencies": { - "c8": "^8.0.1", + "@types/node": "^20.11.16", + "c8": "^9.1.0", "mocha": "^10.2.0", + "rimraf": "^5.0.5", "trifid-core": "^2.7.1" }, "publishConfig": { diff --git a/packages/markdown-content/src/index.js b/packages/markdown-content/src/index.js index c676276c..16ede1c9 100644 --- a/packages/markdown-content/src/index.js +++ b/packages/markdown-content/src/index.js @@ -159,24 +159,19 @@ const entriesForLanguage = (store, language = 'en') => { return finalStore } -const contentMiddleware = ({ logger, namespace, store }) => async (_req, res, next) => { - logger.debug(`loaded store into '${namespace}' namespace`) +/** @type {import('../../core/types/index.js').TrifidPlugin} */ +const factory = async (trifid) => { + const { config, logger, server, render } = trifid - // just make sure that the `content-plugin` entry exists - if (!res.locals[LOCALS_PLUGIN_KEY]) { - res.locals[LOCALS_PLUGIN_KEY] = {} + const locals = server.locals + if (!locals) { + throw new Error('locals not found') } - // add all configured entries for the specified namespace - const lang = res?.locals?.currentLanguage || 'en' - res.locals[LOCALS_PLUGIN_KEY][namespace] = entriesForLanguage(store, lang) - - // let's forward all of this to other middlewares - return next() -} + if (!locals.has(LOCALS_PLUGIN_KEY)) { + locals.set(LOCALS_PLUGIN_KEY, {}) + } -const factory = async (trifid) => { - const { config, logger, server, render } = trifid const entries = config?.entries || {} const defaults = config?.defaults || {} @@ -209,28 +204,43 @@ const factory = async (trifid) => { store[item.name] = await getContent(item.path, contentConfiguration) } - // apply the middleware in all cases - server.use(contentMiddleware({ logger, namespace, store })) + /** + * Handler to load the content into the locals, using the user language. + * + * @param {import('fastify').FastifyRequest & { session: Map }} request Request. + * @param {import('fastify').FastifyReply} _reply Reply. + * @param {import('fastify').DoneFuncWithErrOrRes} done Done. + */ + const onRequestHook = (request, _reply, done) => { + const currentLanguage = request.session.get('currentLanguage') || request.session.get('defaultLanguage') || 'en' + logger.debug(`loaded store into '${namespace}' namespace (lang=${currentLanguage})`) + const currentContent = locals.get(LOCALS_PLUGIN_KEY) || {} + currentContent[namespace] = entriesForLanguage(store, currentLanguage) + locals.set(LOCALS_PLUGIN_KEY, currentContent) + done() + } + server.addHook('onRequest', onRequestHook) // create a route for each entry if (mountPath) { const mountAtPathSlash = mountPath.endsWith('/') ? mountPath : `${mountPath}/` for (const item of items) { - server.get(`${mountAtPathSlash}${item.name}`, async (_req, res, _next) => { - return res.send(await render(defaultValue('template', entry, template), { - content: res.locals[LOCALS_PLUGIN_KEY][namespace][item.name] || '', - locals: res.locals, + /** + * Route handler for the specific content. + * @param {import('fastify').FastifyRequest} _request Request. + * @param {import('fastify').FastifyReply} reply Reply. + * @returns {Promise} + */ + const routeHandler = async (_request, reply) => { + reply.send(await render(defaultValue('template', entry, template), { + content: locals.get(LOCALS_PLUGIN_KEY)?.[namespace]?.[item.name] || '', })) - }) + } + server.get(`${mountAtPathSlash}${item.name}`, routeHandler) } } } - - // just return a dummy middleware - return (_req, _res, next) => { - return next() - } } export default factory diff --git a/packages/markdown-content/src/utils.js b/packages/markdown-content/src/utils.js index dcf1d1da..10c29133 100644 --- a/packages/markdown-content/src/utils.js +++ b/packages/markdown-content/src/utils.js @@ -4,10 +4,11 @@ * Return the value for the specific key. * If the value is not present, return the default value. * + * @template T * @param {string} key Key to search for - * @param {Record} values Values to search in - * @param {any} defaultValue Default value to return - * @returns {any} Value for the specific key or the default value + * @param {Record} values Values to search in + * @param {T} defaultValue Default value to return + * @returns {T} Value for the specific key or the default value */ export const defaultValue = (key, values, defaultValue) => { if (values[key] === undefined) { diff --git a/packages/markdown-content/test/index.test.js b/packages/markdown-content/test/index.test.js index b89fe409..af336880 100644 --- a/packages/markdown-content/test/index.test.js +++ b/packages/markdown-content/test/index.test.js @@ -1,4 +1,6 @@ -import { strictEqual, notEqual } from 'assert' +// @ts-check + +import { strictEqual } from 'node:assert' import { describe, it } from 'mocha' import trifidCore from 'trifid-core' @@ -14,7 +16,7 @@ const createTrifidInstance = async (config) => { logLevel: 'warn', }, }, { - ckan: { + markdownContent: { module: markdownContentTrifidPlugin, methods: ['GET'], config, @@ -35,27 +37,7 @@ describe('@zazuko/trifid-markdown-content', () => { strictEqual(e.message, 'should have thrown') } finally { if (trifidListener) { - trifidListener.close() - } - } - }) - - it('should throw if the configured directory is not existing', async () => { - const trifidInstance = createTrifidInstance({ - directory: 'non-existing-directory', - }) - let trifidListener - - try { - await trifidInstance - trifidListener = await trifidInstance.start() - throw new Error('should have thrown') - } catch (e) { - notEqual(e.message, 'should have thrown') - notEqual(e.message, "'directory' should be a non-empty string") - } finally { - if (trifidListener) { - trifidListener.close() + await trifidListener.close() } } }) @@ -87,7 +69,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -116,7 +98,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -145,7 +127,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -178,7 +160,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) }) @@ -209,7 +191,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -238,7 +220,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -267,7 +249,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -296,7 +278,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) }) @@ -330,7 +312,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -360,7 +342,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -390,7 +372,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -420,7 +402,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -451,7 +433,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -481,7 +463,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) }) @@ -517,7 +499,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -549,7 +531,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -581,7 +563,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -613,7 +595,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -646,7 +628,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) @@ -678,7 +660,7 @@ describe('@zazuko/trifid-markdown-content', () => { } catch (e) { throw e } finally { - trifidListener.close() + await trifidListener.close() } }) }) diff --git a/packages/markdown-content/test/support/utils.js b/packages/markdown-content/test/support/utils.js index 372e1cbb..76808b36 100644 --- a/packages/markdown-content/test/support/utils.js +++ b/packages/markdown-content/test/support/utils.js @@ -1,20 +1,22 @@ // @ts-check /** - * Get the URL of a listener. + * Get an endpoint of the Fastify Instance. * - * @param {import('http').Server} listener HTTP listener + * @param {import('fastify').FastifyInstance} server Server. * @returns {string} */ -export const getListenerURL = (listener) => { - const address = listener.address() - if (!address) { +export const getListenerURL = (server) => { + const addresses = server.addresses().map((address) => { + if (typeof address === 'string') { + return address + } + return `http://${address.address}:${address.port}` + }) + + if (addresses.length < 1) { throw new Error('The listener is not listening') } - if (typeof address === 'string') { - return address - } - const { address: hostname, port } = address - return `http://${hostname}:${port}` + return addresses[0] } diff --git a/packages/markdown-content/tsconfig.json b/packages/markdown-content/tsconfig.json new file mode 100644 index 00000000..b4e69ae1 --- /dev/null +++ b/packages/markdown-content/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist" + } +} diff --git a/packages/redirects/README.md b/packages/redirects/README.md deleted file mode 100644 index d58aedd0..00000000 --- a/packages/redirects/README.md +++ /dev/null @@ -1,99 +0,0 @@ -# trifid-handle-redirects - -## Overview - -This document provides guidance for using the `trifid-handle-redirects` plugin with [Trifid](https://github.com/zazuko/trifid), a versatile handler for managing HTTP redirects of RDF IRIs. In the RDF world, IRIs ideally remain constant, but occasionally they change. This plugin facilitates HTTP redirects for such scenarios, ensuring that HTTP dereferencing remains functional and that users are informed of any IRI changes. - -## Workflow - -The operation of this plugin involves a simple yet effective process: - -1. **Request Reception:** Trifid receives a request for a specific HTTP IRI. -2. **SPARQL Lookup:** It queries this resource via SPARQL. -3. **Redirect Triggering:** If the returned triples include a redirect (as detailed below), Trifid issues an HTTP redirect to the client. - -### Example - -Consider the following command: - -```bash -curl -v https://politics.ld.admin.ch/council/FA -``` - -This would yield: - -```plaintext -[HTTPS logs removed for brevity] -> GET /council/FA HTTP/2 -> Host: politics.ld.admin.ch -> ... [additional request headers] ... -< HTTP/2 302 -< ... [response headers] ... -< location: https://ld.admin.ch/FA -... -Found. Redirecting to https://ld.admin.ch/FA -``` - -In SPARQL, the corresponding representation is shown at [this link](https://s.zazuko.com/2FBeyAp). Note that redirects only affect dereferencing. In SPARQL queries, you'll receive the configured triples as is from the specified endpoint. - -## Installation and Configuration - -### Installation - -Install the plugin via npm: - -```sh -npm install @zazuko/trifid-handle-redirects -``` - -### Configuration - -Incorporate the plugin into your Trifid configuration file: - -```yaml -middlewares: - # […] - arbitrary-name: - module: "@zazuko/trifid-handle-redirects" -``` - -## Defaults - -### Redirect Description - -Redirects should be defined as follows: - -```turtle -@prefix http: . -@prefix rdf: . -@prefix ex: . - -ex:redirect a http:GetRequest ; - http:response [ - a http:Response ; - http:responseCode http:301 ; - http:location ex:redirectedTo ; - ] ; - http:requestURI ex:exampleResource . -``` - -In this example, `ex:exampleResource` is redirected to `ex:redirectedTo`. Adjust these URIs to suit your namespace. - -### Default SPARQL Query - -The default query used by the plugin is as follows: - -```sparql -PREFIX http: -SELECT ?location ?code WHERE { - GRAPH ?g { - ?request a http:GetRequest ; - http:response [ - a http:Response ; - http:responseCode ?code ; - http:location ?location - ] ; - http:requestURI - } -} LIMIT 1 -``` diff --git a/packages/sparql-proxy/README.md b/packages/sparql-proxy/README.md index 33c94358..b49092d7 100644 --- a/packages/sparql-proxy/README.md +++ b/packages/sparql-proxy/README.md @@ -1,9 +1,5 @@ # Trifid plugin for `sparql-proxy` -## Supported options - -Here are all supported options: https://github.com/zazuko/sparql-proxy#usage - ## Quick start Install this Trifid plugin using: @@ -15,16 +11,22 @@ npm install @zazuko/trifid-plugin-sparql-proxy And then add in the `config.yaml` file the following part: ```yaml -middlewares: - # […] your other middlewares +plugins: + # […] your other plugins sparql-proxy: module: "@zazuko/trifid-plugin-sparql-proxy" paths: /query config: - enableProxy: true # enable support for `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY` environment variables - sparqlEndpoint: - url: https://example.com/query - username: admin - password: secret - # …other configuration fields + # The endpoint URL is the only required field + endpointUrl: https://example.com/query + + # In case your endpoint requires authentication: + username: admin + password: secret + + # Rewriting configuration + allowRewriteToggle: true # Allow the user to toggle the rewrite configuration using the `rewrite` query parameter, even if `rewrite` is set to false + rewrite: false # Rewrite by default + rewriteQuery: true # Allow rewriting the query (in case of rewriting) + rewriteResults: true # Allow rewriting the results (in case of rewriting) ``` diff --git a/packages/sparql-proxy/index.js b/packages/sparql-proxy/index.js index f60133d2..fb376a2c 100644 --- a/packages/sparql-proxy/index.js +++ b/packages/sparql-proxy/index.js @@ -1,42 +1,181 @@ -import sparqlProxy from '@zazuko/sparql-proxy' -import { ProxyAgent } from 'proxy-agent' - -const factory = (trifid) => { - const { config } = trifid - - const { - endpointUrl: _e, // ignore this field - authentication: _a, // ignore this field - enableProxy, // enable/disable the support for `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY` environment variables - sparqlEndpoint, // get the configuration about the endpoint - ...proxyConfig // rest of the configuration - } = config - - if (sparqlEndpoint) { - if (Object.hasOwnProperty.call(sparqlEndpoint, 'url')) { - proxyConfig.endpointUrl = sparqlEndpoint.url - } - - const hasProperties = - Object.hasOwnProperty.call(sparqlEndpoint, 'username') && - Object.hasOwnProperty.call(sparqlEndpoint, 'password') - if ( - hasProperties && - sparqlEndpoint.username !== '' && - sparqlEndpoint.password !== '' - ) { - proxyConfig.authentication = { - user: sparqlEndpoint.username, - password: sparqlEndpoint.password, - } - } +// @ts-check + +import { Readable } from 'node:stream' +import { sparqlGetRewriteConfiguration } from 'trifid-core' +import replaceStream from 'string-replace-stream' + +const defaultConfiguration = { + endpointUrl: '', + username: '', + password: '', + datasetBaseUrl: '', + allowRewriteToggle: true, // Allow the user to toggle the rewrite configuration using the `rewrite` query parameter. + rewrite: false, // Rewrite by default + rewriteQuery: true, // Allow rewriting the query + rewriteResults: true, // Allow rewriting the results +} + +/** + * Generate the value for the Authorization header for basic authentication. + * + * @param {string} user The username. + * @param {string} password The password of that user. + * @returns {string} The value of the Authorization header to use. + */ +const authBasicHeader = (user, password) => { + const base64String = Buffer.from(`${user}:${password}`).toString('base64') + return `Basic ${base64String}` +} + +/** @type {import('../core/types/index.js').TrifidPlugin} */ +const factory = async (trifid) => { + const { logger, config } = trifid + + const options = { ...defaultConfiguration, ...config } + if (!options.endpointUrl) { + throw Error('Missing endpointUrl parameter') } - if (enableProxy && enableProxy !== 'false') { - proxyConfig.agent = new ProxyAgent() + let authorizationHeader = '' + if (options.username && options.password) { + authorizationHeader = authBasicHeader(options.username, options.password) } - return sparqlProxy(proxyConfig) + const datasetBaseUrl = options.datasetBaseUrl + const allowRewriteToggle = options.allowRewriteToggle + const rewriteConfigValue = options.rewrite + const rewriteConfig = sparqlGetRewriteConfiguration(rewriteConfigValue, datasetBaseUrl) + + return { + defaultConfiguration: async () => { + return { + methods: ['GET', 'POST'], + paths: [ + '/query', + '/query/', + ], + } + }, + routeHandler: async () => { + /** + * Query string type. + * + * @typedef {Object} QueryString + * @property {string} [query] The SPARQL query. + * @property {string} [rewrite] Should the query and the results be rewritten? + */ + + /** + * Request body type. + * @typedef {Object} RequestBody + * @property {string} [query] The SPARQL query. + */ + + /** + * Route handler. + * @param {import('fastify').FastifyRequest<{ Querystring: QueryString, Body: RequestBody | string }>} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + const fullUrl = `${request.protocol}://${request.hostname}${request.raw.url}` + const fullUrlObject = new URL(fullUrl) + const fullUrlPathname = fullUrlObject.pathname + + // Generate the IRI we expect + fullUrlObject.search = '' + fullUrlObject.searchParams.forEach((_value, key) => fullUrlObject.searchParams.delete(key)) + const iriUrlString = fullUrlObject.toString() + + // Enforce non-trailing slash + if (fullUrlPathname.slice(-1) === '/') { + return reply.redirect(`${fullUrlPathname.slice(0, -1)}`) + } + + let currentRewriteConfig = rewriteConfig + if (allowRewriteToggle) { + const rewriteConfigValueFromQuery = `${request.query.rewrite}` || rewriteConfigValue + currentRewriteConfig = sparqlGetRewriteConfiguration(rewriteConfigValueFromQuery, datasetBaseUrl) + } + const { rewrite: rewriteValue, iriOrigin } = currentRewriteConfig + const rewriteResponse = rewriteValue + ? { + origin: datasetBaseUrl, + replacement: iriOrigin(iriUrlString), + } + : false + + let query = '' + switch (request.method) { + case 'GET': + query = request.query.query + break + case 'POST': + if (typeof request.body === 'string') { + query = request.body + } + + if (typeof request.body !== 'string' && request.body.query) { + query = request.body.query + } + + if (typeof query !== 'string') { + query = JSON.stringify(query) + } + + break + default: + return reply.code(405).send('Method Not Allowed') + } + + if (rewriteResponse && options.rewriteQuery) { + query = query.replaceAll(rewriteResponse.replacement, rewriteResponse.origin) + } + + logger.debug('Got a request to the sparql proxy') + logger.debug(`Received query${rewriteValue ? ' (rewritten)' : ''}:\n${query}`) + + try { + const acceptHeader = request.headers.accept || 'application/sparql-results+json' + const headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + Accept: acceptHeader, + } + if (authorizationHeader) { + headers.Authorization = authorizationHeader + } + const response = await fetch(options.endpointUrl, { + method: 'POST', + headers, + body: new URLSearchParams({ query }), + }) + + const contentType = response.headers.get('content-type') + + let responseStream = response.body + if (rewriteResponse && options.rewriteResults) { + responseStream = Readable + .from(responseStream) + .pipe(replaceStream( + rewriteResponse.origin, + rewriteResponse.replacement, + )) + } + + return reply + .status(response.status) + .header('content-type', contentType) + .send(responseStream) + } catch (error) { + logger.error('Error while querying the endpoint') + logger.error(error) + return reply + .code(500) + .send('Error while querying the endpoint') + } + } + return handler + }, + } } export default factory diff --git a/packages/sparql-proxy/package.json b/packages/sparql-proxy/package.json index 665d82f8..0044328b 100644 --- a/packages/sparql-proxy/package.json +++ b/packages/sparql-proxy/package.json @@ -17,11 +17,11 @@ "files": [ "index.js" ], - "scripts": { - "test": "true" - }, "dependencies": { - "@zazuko/sparql-proxy": "^2.6.8", - "proxy-agent": "^6.3.1" + "string-replace-stream": "^0.0.2", + "trifid-core": "^2.7.1" + }, + "devDependencies": { + "@types/node": "^20.11.24" } } diff --git a/packages/spex/README.md b/packages/spex/README.md index 8b657702..6f598156 100644 --- a/packages/spex/README.md +++ b/packages/spex/README.md @@ -2,7 +2,7 @@ [SPEX](https://github.com/zazuko/spex) for Trifid. -This middleware does the static file hosting for all SPEX files and renders a view page that points to the configured endpoint URL. +This plugin does the static file hosting for all SPEX files and renders a view page that points to the configured endpoint URL. ## Quick start @@ -15,11 +15,13 @@ npm install trifid-plugin-spex And then add in the `config.yaml` file the following part: ```yaml -middlewares: - # […] your other middlewares +plugins: + # […] your other plugins spex: module: trifid-plugin-spex - paths: /spex + paths: # by default + - /spex + - /spex/ config: prefixes: - prefix: ex diff --git a/packages/spex/index.js b/packages/spex/index.js index 3886b2a9..414185b8 100644 --- a/packages/spex/index.js +++ b/packages/spex/index.js @@ -1,8 +1,8 @@ -import path, { dirname } from 'path' -import { fileURLToPath } from 'url' -import absoluteUrl from 'absolute-url' +import path, { dirname } from 'node:path' +import { fileURLToPath } from 'node:url' + import { resolve } from 'import-meta-resolve' -import express from 'express' +import fastifyStatic from '@fastify/static' const __dirname = dirname(fileURLToPath(import.meta.url)) @@ -19,9 +19,15 @@ const defaultOptions = { forceIntrospection: false, } -const createMiddleWare = async (config, render) => { - const router = express.Router() - +/** + * Create Plugin. + * + * @param {import('fastify').FastifyInstance} server + * @param {*} config + * @param {*} render + * @returns + */ +const createPlugin = async (server, config, render) => { const options = { ...defaultOptions, ...(config || {}) } const spexOptions = { sparqlEndpoint: options.url, @@ -33,45 +39,65 @@ const createMiddleWare = async (config, render) => { } config = { ...defaults, ...config, spexOptions } - // render index page - router.get('/', async (req, res) => { - // Enforce trailing slash to ensure that static files are served from the correct URL - if (!req.originalUrl.endsWith('/')) { - return res.redirect(req.originalUrl + '/') - } + // Serve static files from SPEX dist folder + const distPath = resolve('@zazuko/spex/dist', import.meta.url) + server.register(fastifyStatic, { + root: distPath.replace(/^file:\/\//, ''), + prefix: '/spex/static/', + decorateReply: false, + }) + + /** + * Route handler. + * @param {import('fastify').FastifyRequest} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + const fullUrl = `${request.protocol}://${request.hostname}${request.raw.url}` + const fullUrlObject = new URL(fullUrl) + const fullUrlPathname = fullUrlObject.pathname - absoluteUrl.attach(req) + // Enforce trailing slash + if (fullUrlPathname.slice(-1) !== '/') { + return reply.redirect(`${fullUrlPathname}/`) + } // Create an absolute URL if a relative URL is provided spexOptions.sparqlEndpoint = new URL( spexOptions.sparqlEndpoint || '/query', - req.absoluteUrl(), + fullUrl, ).toString() - res.send( - await render( - config.template, - { - options: JSON.stringify(spexOptions), - locals: res.locals, - }, - { - title: 'SPEX', - }, - ), + const content = await render( + config.template, + { + options: JSON.stringify(spexOptions), + }, + { title: 'SPEX' }, ) - }) - // static files from spex dist folder - const distPath = resolve('@zazuko/spex/dist', import.meta.url) - router.use('/static/', express.static(distPath.replace(/^file:\/\//, ''))) - return router + reply.type('text/html').send(content) + } + return handler } +/** @type {import('../core/types/index.js').TrifidPlugin} */ const trifidFactory = async (trifid) => { - const { config, render } = trifid - return await createMiddleWare(config, render) + const { server, config, render } = trifid + + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + paths: [ + '/spex', + '/spex/', + ], + } + }, + routeHandler: async () => createPlugin(server, config, render), + } } export default trifidFactory -export { createMiddleWare } +export { createPlugin } diff --git a/packages/spex/package.json b/packages/spex/package.json index 742ba932..fae61d8c 100644 --- a/packages/spex/package.json +++ b/packages/spex/package.json @@ -18,9 +18,8 @@ "test": "c8 --reporter=lcov --reporter=text mocha" }, "dependencies": { + "@fastify/static": "^7.0.1", "@zazuko/spex": "^0.1.20", - "absolute-url": "^1.2.2", - "express": "^4.18.2", "import-meta-resolve": "^3.0.0" }, "files": [ @@ -28,9 +27,9 @@ "views/" ], "devDependencies": { - "c8": "^8.0.1", + "c8": "^9.1.0", "mocha": "^10.2.0", - "supertest": "^6.3.4" + "trifid-core": "^2.7.1" }, "publishConfig": { "access": "public" diff --git a/packages/spex/test/test.js b/packages/spex/test/test.js index bb05e9b9..cab87bc2 100644 --- a/packages/spex/test/test.js +++ b/packages/spex/test/test.js @@ -1,77 +1,85 @@ -import assert from 'assert' -import { describe, it } from 'mocha' -import request from 'supertest' -import express from 'express' -import trifidFactory from '../index.js' +// @ts-check -const createTrifidConfig = (config) => { - return { - config, - render: async (_templatePath, _templateOptions, _layoutOptions) => { - return 'OK' - }, - } -} +import { strictEqual } from 'node:assert' -describe('trifid-plugin-spex', () => { - describe('trifid factory', () => { - it('should create a middleware with factory and default options', async () => { - const trifid = createTrifidConfig({}) - const middleware = await trifidFactory(trifid) +import trifidCore from 'trifid-core' +import { describe } from 'mocha' - assert.strictEqual(typeof middleware, 'function') - }) - }) +import trifidPluginFactory from '../index.js' - describe('middleware', () => { - it('should redirect to a version with a trailing slash', async () => { - const trifid = createTrifidConfig({ - endpointUrl: '/test', - }) - const middleware = await trifidFactory(trifid) - - const app = express() - app.use('/spex', middleware) +/** + * Get an endpoint of the Fastify Instance. + * + * @param {import('fastify').FastifyInstance} server Server. + * @returns {string} + */ +const getListenerURL = (server) => { + const addresses = server.addresses().map((address) => { + if (typeof address === 'string') { + return address + } + return `http://${address.address}:${address.port}` + }) - await request(app).get('/spex').expect(302) - }) + if (addresses.length < 1) { + throw new Error('The listener is not listening') + } - it('can execute', async () => { - const trifid = createTrifidConfig({ - endpointUrl: '/test', - }) - const middleware = await trifidFactory(trifid) + return addresses[0] +} - const app = express() - app.use('/spex', middleware) +describe('trifid-plugin-spex', () => { + let trifidListener - await request(app).get('/spex/').expect(200) - }) + beforeEach(async () => { + const trifidServer = await trifidCore( + { + server: { + listener: { + port: 0, + }, + logLevel: 'warn', + }, + }, + { + spex: { + module: trifidPluginFactory, + config: { + endpointUrl: '/test', + }, + }, + }, + ) + trifidListener = await trifidServer.start() }) - describe('static assets', () => { - it('should be able to provide the static JavaScript file', async () => { - const trifid = createTrifidConfig({ - endpointUrl: '/test', - }) - const middleware = await trifidFactory(trifid) - - const app = express() - app.use('/spex', middleware) + afterEach(async () => { + await trifidListener.close() + }) - await request(app).get('/spex/static/spex.umd.min.js').expect(200) - }) + it('can serve SPEX', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/spex/`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) + strictEqual(res.redirected, false) // Should not redirect on this case + }) - it('should be able to provide the static CSS file', async () => { - const trifid = createTrifidConfig({ - endpointUrl: '/test', - }) - const middleware = await trifidFactory(trifid) + it('should redirect if trailing slash is missing', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/spex`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) // The redirection should lead to a correct page + strictEqual(res.redirected, true) // Check the redirection + }) - const app = express() - app.use('/spex', middleware) + it('should serve the static JavaScript file', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/spex/static/spex.umd.min.js`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) + }) - await request(app).get('/spex/static/spex.css').expect(200) - }) + it('should serve the static CSS file', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/spex/static/spex.css`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) }) }) diff --git a/packages/trifid/README.md b/packages/trifid/README.md index 0675033b..646383d6 100644 --- a/packages/trifid/README.md +++ b/packages/trifid/README.md @@ -1,187 +1,24 @@ # Trifid -Trifid-ld Logo +Trifid is a Linked Data server that provides a web interface to browse and query RDF data. -## What is Trifid? +One of the main feature is the aibility to dereference URIs and to provide a human-readable representation of the data. -It's a Web server specialized in Linked Data. - -The main functionalities of Trifid are: - -### Dereference Linked data entities - -Providing different serializations using content-negotiation of entities in a file or queried using a SPARQL endpoint. -The serializations include HTML rendering based on customizable templates. - -### Using a SPARQL endpoint - -If a SPARQL endpoint is the source of the RDF data, some additional plugins are enabled by default. - -- SPARQL Proxy: Public access to the configured store. -- YASGUI: UI to write, execute, and analyze SPARQL queries. -- Graph Explorer: UI to explore the data in a graph view -- SPEX: Introspects the data on the endpoint and shows the data model - -### Further use - -This server can also be extended with plugins, depending on the use case of the deployment. -[Express](http://expressjs.com/) is used to handle routings and middlewares. -Any compatible middleware can be added to the configuration. - -#### Examples - -- [Trifid plugin iiif](https://github.com/zazuko/trifid-plugin-iiif/) -- [CKAN harvester endpoint](https://github.com/zazuko/trifid-plugin-ckan) - -## Who Uses Trifid? - -Trifid is open source and meant to work out of the box for data publishers. -Most users will use only the main features. -We, or people that dive deeper into the code, maintain and develop instances with additional plugins. - -### Installations - -Example resources using Trifid: - -- Default view: http://lod.opentransportdata.swiss/didok/8500011 -- Customized for one gov entity in Switzerland: https://ld.geo.admin.ch/boundaries/municipality/296 - -## Trifid objectives - -The main [trifid](https://github.com/zazuko/trifid) package provides some default plugins: - -- Handlers to read RDF data from the file system and SPARQL endpoints -- The [handlebars](https://handlebarsjs.com/) template engine -- A HTML renderer for the RDF data -- The plugins mentioned [here](#Using a SPARQL endpoint) +It uses content-negotiation to serialize entities in a file or from a SPARQL endpoint in various formats, including HTML based on customizable templates. ## Documentation -- See the [configuration](https://github.com/zazuko/trifid/wiki/Configuration) wiki page for more details on the configuration system. -- See the [customize-the-templates](https://github.com/zazuko/trifid/wiki/Customize-the-templates) wiki page for more details on the template system. - -## Trifid Core - -Trifid Core contains the HTTP server component and a configuration system to load plugins. -Usually, it's not required to use the Trifid Core package. -The main [trifid](https://github.com/zazuko/trifid) package provides an opinionated setup that works for most use cases. - -## Installation - -Trifid is a [Node.js](http://nodejs.org/)-based application. -To install and run it, you will need to install [Node.js](http://nodejs.org/) on your system. - -Install the npm package: - -```sh -npm install -g trifid -``` - -## Usage - -To start the server, execute the following command: - -```sh -npx trifid -``` - -If you want to run Trifid using a SPARQL endpoint and default settings, you can run it even without a config file: - -```sh -trifid --sparql-endpoint-url=http://localhost:3030/sparql -``` - -### Parameters - -The following parameters are available: - -- `-c` or `--config`: Expects a path to a config as value, which will be used by Trifid -- `-p` or `--port`: Expects a port number as value, which will be used by the HTTP listener of Trifid -- `--sparql-endpoint-url`: Expects a SPARQL HTTP query interface URL value, which will be used by the Trifid SPARQL handler -- `--dataset-base-url`: Expects a Base URL value, which will be used to translate the request URLs - -## Configuration - -Trifid uses YAML or JSON configuration files. -One configuration file can use another file as base. -The `extends` property must point to the other file. -Values of the base file will be overwritten. - -### Examples - -#### Default configuration - -The default configuration uses the file system handler and the [Big Bang Theory dataset](https://github.com/zazukoians/tbbt-ld). - -You will then be able to access its content, e.g. [Amy Farrah Fowler](http://localhost:8080/data/person/amy-farrah-fowler). - -In a production environment, the SPARQL handler may be the better choice. - -#### SPARQL configuration - -For production systems, we recommend data access via the [SPARQL 1.1 Protocol](http://www.w3.org/TR/sparql11-protocol/) interface. -`instances/docker-sparql/config.yaml` can be used as base configuration. - -##### SPARQL endpoint with self-signed certificate - -Sometimes SPARQL endpoints are running on TLS/SSL but provide an incomplete configuration or a self-signed certificate. -In that case, one can disable strict certificate checking by setting the environment variable `NODE_TLS_REJECT_UNAUTHORIZED`. - -For example: - -```sh -export NODE_TLS_REJECT_UNAUTHORIZED=0 -``` - -## Production Best Practices - -Note that it is not recommended to run Node applications on [well-known ports](http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports) (< 1024). -You should use a reverse proxy instead. - -### Using with Docker - -Trifid can be installed using Docker. -With this method, you only need to have Docker installed. -See https://docs.docker.com/installation/ for installation instructions for your platform. - -```sh -docker run --rm -it -p 8080:8080 ghcr.io/zazuko/trifid -``` - -#### Trifid environment variables - -You can use the following environment variables: - -- `TRIFID_CONFIG`: the configuration file to use (default value: `config-docker.json`, which enable the following environment variables) -- `SPARQL_ENDPOINT_URL`: the SPARQL endpoint URL to use -- `DATASET_BASE_URL`: the base URL to use to enable rewriting -- `SPARQL_USER`: the user to use to authenticate against the SPARQL endpoint -- `SPARQL_PASSWORD`: the password to use to authenticate against the SPARQL endpoint - -#### Custom build - -An example of a custom Docker image can be found at [lod.opentransportdata.swiss](https://github.com/zazuko/lod.opentransportdata.swiss). - -### Reverse Proxy - -If you run Trifid behind a reverse proxy, the proxy must set the `X-Forwarded-Host` header field. - -## Debugging - -The log level can be configured by using the `server.logLevel` property. -Supported log levels are: `fatal`, `error`, `warn`, `info`, `debug`, `trace` and `silent`. - -Some middlewares also uses [`debug`](https://www.npmjs.com/package/debug). -You can get debug logging via: `DEBUG=trifid:` or `DEBUG=trifid:*`. +- [GitHub repository](https://github.com/zazuko/trifid?tab=readme-ov-file#readme) +- [Wiki](https://github.com/zazuko/trifid/wiki) ## Support -Issues & feature requests should be reported on Github. +Issues & feature requests should be reported on [GitHub](https://github.com/zazuko/trifid). Pull requests are very welcome. ## License -Copyright 2015-2023 Zazuko GmbH +Copyright Zazuko GmbH. -Trifid is licensed under the Apache License, Version 2.0. Please see LICENSE and NOTICE for details. +Trifid is licensed under the [Apache License, Version 2.0](./LICENSE). diff --git a/packages/trifid/instances/docker-fetch/config.yaml b/packages/trifid/instances/docker-fetch/config.yaml index 60873353..41d26595 100644 --- a/packages/trifid/instances/docker-fetch/config.yaml +++ b/packages/trifid/instances/docker-fetch/config.yaml @@ -1,34 +1,60 @@ +# server: +# logLevel: debug + globals: datasetBaseUrl: env:DATASET_BASE_URL + endpoints: + default: + url: /query -middlewares: - morgan: - module: file:../../middlewares/morgan.js - +plugins: static-assets: - module: trifid-core/middlewares/static.js + module: trifid-core/plugins/static.js order: 0 paths: /static-assets config: directory: file:static - rewrite: - module: trifid-core/middlewares/rewrite.js - welcome: - module: trifid-core/middlewares/view.js + module: trifid-core/plugins/view.js paths: / methods: GET config: path: file:welcome.hbs + yasgui: + module: trifid-plugin-yasgui + paths: + - /sparql + - /sparql/ + + graph-explorer: + module: trifid-plugin-graph-explorer + paths: + - /graph-explorer + - /graph-explorer/ + + spex: + module: trifid-plugin-spex + paths: + - /spex + - /spex/ + entity-renderer: module: "@zazuko/trifid-entity-renderer" + config: + followRedirects: true + labelLoader: + chunkSize: 30 + concurrency: 2 + timeout: 4000 fetch-handler: module: trifid-handler-fetch + paths: /query config: url: env:FETCH_HANDLER_FILE contentType: env:FETCH_HANDLER_FILE_TYPE - split: true - cache: true + baseIRI: http://localhost:8080 + graphName: http://example.com/graph + unionDefaultGraph: true diff --git a/packages/trifid/instances/docker-fetch/welcome.hbs b/packages/trifid/instances/docker-fetch/welcome.hbs index c0b839eb..672049f3 100644 --- a/packages/trifid/instances/docker-fetch/welcome.hbs +++ b/packages/trifid/instances/docker-fetch/welcome.hbs @@ -1,3 +1,24 @@ +
+
+
+

Welcome to Trifid!

+

This instance is used to dereference triples and lets you browse the data

+
+
+
+
-

Welcome to Trifid!

+

Explore

+ + +

Resources

+
diff --git a/packages/trifid/instances/docker-sparql/config.yaml b/packages/trifid/instances/docker-sparql/config.yaml index da8b71fb..43bc977b 100644 --- a/packages/trifid/instances/docker-sparql/config.yaml +++ b/packages/trifid/instances/docker-sparql/config.yaml @@ -1,26 +1,22 @@ +server: + logLevel: debug + globals: datasetBaseUrl: env:DATASET_BASE_URL - sparqlEndpoint: - url: env:SPARQL_ENDPOINT_URL - username: env:SPARQL_ENDPOINT_USERNAME - password: env:SPARQL_ENDPOINT_PASSWORD - -middlewares: - morgan: - module: file:../../middlewares/morgan.js + endpoints: + default: + url: /query +plugins: static-assets: - module: trifid-core/middlewares/static.js + module: trifid-core/plugins/static.js order: 0 paths: /static-assets config: directory: file:static - rewrite: - module: trifid-core/middlewares/rewrite.js - welcome: - module: trifid-core/middlewares/view.js + module: trifid-core/plugins/view.js paths: / methods: GET config: @@ -29,6 +25,7 @@ middlewares: entity-renderer: module: "@zazuko/trifid-entity-renderer" config: + followRedirects: true labelLoader: chunkSize: 30 concurrency: 2 @@ -36,35 +33,30 @@ middlewares: yasgui: module: trifid-plugin-yasgui - paths: /sparql - config: - urlShortener: https://s.zazuko.com/api/v1/shorten + paths: + - /sparql + - /sparql/ graph-explorer: module: trifid-plugin-graph-explorer - paths: /graph-explorer + paths: + - /graph-explorer + - /graph-explorer/ spex: module: trifid-plugin-spex - paths: /spex + paths: + - /spex + - /spex/ sparql-proxy: module: "@zazuko/trifid-plugin-sparql-proxy" paths: /query config: - queryOperation: postQueryUrlencoded - rewriteQueries: true - cache: - prefix: env:SPARQL_PROXY_CACHE_PREFIX - url: env:SPARQL_PROXY_CACHE_URL - clearAtStartup: env:SPARQL_PROXY_CACHE_CLEAR_AT_STARTUP - - handle-redirects-demo: - module: "@zazuko/trifid-handle-redirects" - - sparql-handler: - module: trifid-handler-sparql - config: - containerExistsQuery: 'ASK { ?s a ?o. FILTER REGEX(STR(?s), "^${iri}") }' - resourceGraphQuery: "#pragma describe.strategy cbd\nDESCRIBE <${iri}>" - containerGraphQuery: 'CONSTRUCT { ?s a ?o. ?s ?label. } WHERE { ?s a ?o. OPTIONAL {?s ?label.} FILTER REGEX(STR(?s), "^${iri}") }' + allowRewriteToggle: true + rewrite: false + rewriteQuery: true + rewriteResults: true + endpointUrl: env:SPARQL_ENDPOINT_URL + username: env:SPARQL_ENDPOINT_USERNAME + password: env:SPARQL_ENDPOINT_PASSWORD diff --git a/packages/trifid/instances/docker-sparql/welcome.hbs b/packages/trifid/instances/docker-sparql/welcome.hbs index 8eb4ec34..672049f3 100644 --- a/packages/trifid/instances/docker-sparql/welcome.hbs +++ b/packages/trifid/instances/docker-sparql/welcome.hbs @@ -1,13 +1,22 @@ +
+
+
+

Welcome to Trifid!

+

This instance is used to dereference triples and lets you browse the data

+
+
+
+
-

Welcome to Trifid!

-

Here are some interesting pages to get started:

+

Explore

- {{!-- GitHub links --}} +

Resources

+
  • Trifid documentation
  • Trifid GitHub repository
  • Report a bug
  • diff --git a/packages/trifid/instances/tbbt/config.yaml b/packages/trifid/instances/tbbt/config.yaml index 2a2f251d..0b65e826 100644 --- a/packages/trifid/instances/tbbt/config.yaml +++ b/packages/trifid/instances/tbbt/config.yaml @@ -1,31 +1,56 @@ -# This loads the TBBT dataset from a remote file using the `trifid-handler-fetch` middleware. +# This loads the TBBT dataset from a remote file using the `trifid-handler-fetch` plugin. # Start this example by running: `npm run start:tbbt` # Example of a working URL: http://localhost:8080/data/person/amy-farrah-fowler +# server: +# logLevel: debug + globals: datasetBaseUrl: http://localhost:8080/ + endpoints: + default: + url: /query -middlewares: - morgan: - module: file:../../middlewares/morgan.js - - rewrite: - module: trifid-core/middlewares/rewrite.js - +plugins: welcome: - module: trifid-core/middlewares/view.js + module: trifid-core/plugins/view.js paths: / methods: GET config: path: file:welcome.hbs + yasgui: + module: trifid-plugin-yasgui + paths: + - /sparql + - /sparql/ + + graph-explorer: + module: trifid-plugin-graph-explorer + paths: + - /graph-explorer + - /graph-explorer/ + + spex: + module: trifid-plugin-spex + paths: + - /spex + - /spex/ + entity-renderer: module: "@zazuko/trifid-entity-renderer" + config: + labelLoader: + chunkSize: 30 + concurrency: 2 + timeout: 4000 fetch-handler: module: trifid-handler-fetch + paths: /query config: url: https://raw.githubusercontent.com/zazuko/tbbt-ld/master/dist/tbbt.nt contentType: application/n-triples - split: true - cache: true + baseIRI: http://localhost:8080 + graphName: http://example.com/graph + unionDefaultGraph: true diff --git a/packages/trifid/instances/tbbt/welcome.hbs b/packages/trifid/instances/tbbt/welcome.hbs index 573c489d..4eb3bd3b 100644 --- a/packages/trifid/instances/tbbt/welcome.hbs +++ b/packages/trifid/instances/tbbt/welcome.hbs @@ -1,11 +1,23 @@ +
    +
    +
    +

    Welcome to Trifid!

    +

    This instance is serving The Big Bang Theory dataset

    +
    +
    +
    +
    -

    Welcome to Trifid!

    -

    Here are some interesting pages to get started:

    +

    Demo of plugins

    - {{!-- GitHub links --}} +

    Resources

    +
    • Trifid documentation
    • Trifid GitHub repository
    • Report a bug
    • diff --git a/packages/trifid/middlewares/morgan.js b/packages/trifid/middlewares/morgan.js deleted file mode 100644 index 873b99a8..00000000 --- a/packages/trifid/middlewares/morgan.js +++ /dev/null @@ -1,28 +0,0 @@ -import morgan from 'morgan' - -/** - * Log requests. - * - * Configuration fields: - * - format (string): format for the morgan logger (default: "combined") - * see: https://github.com/expressjs/morgan#predefined-formats - * - disabled (boolean|string): disable morgan logger (default: false) - * - * @param {*} trifid Trifid object containing the configuration, and other utility functions. - * @returns Express middleware. - */ -const factory = (trifid) => { - const { config } = trifid - const format = config.format ?? 'combined' - const disabled = `${config.disabled}` === 'true' - - if (disabled) { - return (_req, _res, next) => { - next() - } - } - - return morgan(format) -} - -export default factory diff --git a/packages/trifid/package.json b/packages/trifid/package.json index 390c4407..de1edeb7 100644 --- a/packages/trifid/package.json +++ b/packages/trifid/package.json @@ -15,7 +15,6 @@ "url": "https://github.com/zazuko/trifid/issues" }, "scripts": { - "test": "true", "help": "node server.js --help", "start:tbbt": "node server.js -c instances/tbbt/config.yaml", "start": "npm run start:tbbt" @@ -28,10 +27,8 @@ "@zazuko/trifid-plugin-sparql-proxy": "^1.2.0", "@zazuko/trifid-entity-renderer": "^0.6.2", "commander": "^12.0.0", - "morgan": "^1.10.0", "trifid-core": "^2.7.1", "trifid-handler-fetch": "^2.0.1", - "trifid-handler-sparql": "^2.1.1", "trifid-plugin-graph-explorer": "^1.0.2", "trifid-plugin-i18n": "^2.0.1", "trifid-plugin-spex": "^1.1.4", diff --git a/packages/trifid/server.js b/packages/trifid/server.js index f8d110b4..d35e03fc 100755 --- a/packages/trifid/server.js +++ b/packages/trifid/server.js @@ -1,13 +1,16 @@ #!/usr/bin/env node -import { join } from 'path' -import { Command } from 'commander' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' +import { Command } from 'commander' import trifid from 'trifid-core' const program = new Command() -const defaultConfigurationFile = process.env.TRIFID_CONFIG ?? 'config.yaml' +const currentDir = dirname(fileURLToPath(import.meta.url)) +const sparqlConfigPath = join(currentDir, 'instances', 'docker-sparql', 'config.yaml') +const defaultConfigurationFile = process.env.TRIFID_CONFIG || sparqlConfigPath program .option('-c, --config ', 'configuration file', defaultConfigurationFile) @@ -20,7 +23,9 @@ program .parse(process.argv) const opts = program.opts() -const configFile = join(process.cwd(), opts.config) +const configFile = (opts.config && !opts.config.startsWith('/')) + ? join(process.cwd(), opts.config) + : opts.config // create a minimal configuration that extends the specified one const config = { @@ -39,9 +44,11 @@ if (opts.sparqlEndpointUrl) { config.globals.sparqlEndpoint = { url: opts.sparqlEndpointUrl, } + process.env.SPARQL_ENDPOINT_URL = opts.sparqlEndpointUrl } if (opts.datasetBaseUrl) { config.globals.datasetBaseUrl = opts.datasetBaseUrl + process.env.DATASET_BASE_URL = opts.datasetBaseUrl } // load the configuration and start the server diff --git a/packages/yasgui/README.md b/packages/yasgui/README.md index 06e521af..87d0694a 100644 --- a/packages/yasgui/README.md +++ b/packages/yasgui/README.md @@ -1,7 +1,7 @@ # trifid-plugin-yasgui YASGUI for Trifid. -This middleware does the static file hosting for all YASGUI files and renders an index page that points to the given endpoint URL. +This plugin does the static file hosting for all YASGUI files and renders an index page that points to the given endpoint URL. ## Quick start @@ -14,11 +14,13 @@ npm install trifid-plugin-yasgui And then add in the `config.yaml` file the following part: ```yaml -middlewares: - # […] your other middlewares +plugins: + # […] your other plugins yasgui: module: trifid-plugin-yasgui - paths: /sparql + paths: # by default + - /sparql + - /sparql/ config: endpointUrl: https://example.com/query urlShortener: https://example.com/api/v1/shorten diff --git a/packages/yasgui/index.js b/packages/yasgui/index.js index 360df87a..effa8dfe 100644 --- a/packages/yasgui/index.js +++ b/packages/yasgui/index.js @@ -1,48 +1,86 @@ -import url, { fileURLToPath } from 'url' -import { dirname } from 'path' -import express from 'express' +import { fileURLToPath } from 'node:url' +import { dirname } from 'node:path' + import { resolve } from 'import-meta-resolve' +import fastifyStatic from '@fastify/static' const currentDir = dirname(fileURLToPath(import.meta.url)) +/** @type {import('../core/types/index.js').TrifidPlugin} */ const trifidFactory = async (trifid) => { - const { config, logger, render, server } = trifid + const { config, render, server } = trifid const { template, endpointUrl, urlShortener } = config const endpoint = endpointUrl || '/query' const view = !template ? `${currentDir}/views/yasgui.hbs` : template - // serve static files for YASGUI + // Serve static files for YASGUI const yasguiPath = resolve('@zazuko/yasgui/build/', import.meta.url) - server.use( - '/yasgui-dist/', - express.static(yasguiPath.replace(/^file:\/\//, '')), - ) + server.register(fastifyStatic, { + root: yasguiPath.replace(/^file:\/\//, ''), + prefix: '/yasgui-dist/', + decorateReply: false, + }) - // serve static files for openlayers (maps) + // Serve static files for openlayers (maps) const olPath = resolve('@openlayers-elements/bundle/dist/', import.meta.url) - server.use('/yasgui-ol/', express.static(olPath.replace(/^file:\/\//, ''))) + server.register(fastifyStatic, { + root: olPath.replace(/^file:\/\//, ''), + prefix: '/yasgui-ol/', + decorateReply: false, + }) - // serve static files for custom plugins + // Serve static files for custom plugins const pluginsUrl = new URL('plugins/', import.meta.url) const pluginsPath = fileURLToPath(pluginsUrl) - server.use('/yasgui-plugins/', express.static(pluginsPath)) - - return async (req, res, _next) => { - logger.debug('Yasgui plugin was called') - - const content = await render( - view, - { - // read SPARQL endpoint URL from configuration and resolve with absoluteUrl - endpointUrl: url.resolve(req.absoluteUrl(), endpoint), // eslint-disable-line - urlShortener, - locals: res.locals, - }, - { title: 'YASGUI' }, - ) - - res.send(content) + server.register(fastifyStatic, { + root: pluginsPath.replace(/^file:\/\//, ''), + prefix: '/yasgui-plugins/', + decorateReply: false, + }) + + return { + defaultConfiguration: async () => { + return { + methods: ['GET'], + paths: [ + '/sparql', + '/sparql/', + ], + } + }, + routeHandler: async () => { + /** + * Route handler. + * @param {import('fastify').FastifyRequest} request Request. + * @param {import('fastify').FastifyReply} reply Reply. + */ + const handler = async (request, reply) => { + const fullUrl = `${request.protocol}://${request.hostname}${request.raw.url}` + const fullUrlObject = new URL(fullUrl) + const fullUrlPathname = fullUrlObject.pathname + + // Enforce trailing slash + if (fullUrlPathname.slice(-1) !== '/') { + return reply.redirect(`${fullUrlPathname}/`) + } + + // Read SPARQL endpoint URL from configuration and resolve with full URL + const endpointUrl = new URL(endpoint, fullUrl) + + const content = await render( + view, + { + endpointUrl: endpointUrl.toString(), + urlShortener, + }, + { title: 'YASGUI' }, + ) + + reply.type('text/html').send(content) + } + return handler + }, } } diff --git a/packages/yasgui/package.json b/packages/yasgui/package.json index 6ae9e39a..2555d6a4 100644 --- a/packages/yasgui/package.json +++ b/packages/yasgui/package.json @@ -24,15 +24,14 @@ "test": "mocha" }, "dependencies": { + "@fastify/static": "^7.0.1", "@openlayers-elements/bundle": "^0.1.0", "@zazuko/yasgui": "^4.2.34", - "express": "^4.18.2", "import-meta-resolve": "^3.0.0" }, "devDependencies": { - "absolute-url": "^1.2.2", - "c8": "^8.0.1", + "c8": "^9.1.0", "mocha": "^10.2.0", - "supertest": "^6.3.4" + "trifid-core": "^2.7.1" } } diff --git a/packages/yasgui/test/test.js b/packages/yasgui/test/test.js index afe0640c..85266595 100644 --- a/packages/yasgui/test/test.js +++ b/packages/yasgui/test/test.js @@ -1,105 +1,81 @@ -import assert from 'assert' -import request from 'supertest' -import { describe, it } from 'mocha' -import express from 'express' -import absoluteUrl from 'absolute-url' -import trifidFactory from '../index.js' +// @ts-check -const createTrifidConfig = (app, config) => { - const server = app - const logger = console - const render = (filePath, context, options) => { - return JSON.stringify( - { - filePath, - context, - options, - }, - null, - 2, - ) - } +import { strictEqual } from 'node:assert' + +import trifidCore from 'trifid-core' +import { describe } from 'mocha' - return { - config, - server, - logger, - render, +import trifidPluginFactory from '../index.js' + +/** + * Get an endpoint of the Fastify Instance. + * + * @param {import('fastify').FastifyInstance} server Server. + * @returns {string} + */ +const getListenerURL = (server) => { + const addresses = server.addresses().map((address) => { + if (typeof address === 'string') { + return address + } + return `http://${address.address}:${address.port}` + }) + + if (addresses.length < 1) { + throw new Error('The listener is not listening') } + + return addresses[0] } describe('trifid-plugin-yasgui', () => { - describe('trifid factory', () => { - it('should create a middleware with factory and default options', async () => { - const app = express() - const trifid = createTrifidConfig(app, {}) - const middleware = await trifidFactory(trifid) + let trifidListener - assert.strictEqual(typeof middleware, 'function') - }) + beforeEach(async () => { + const trifidServer = await trifidCore( + { + server: { + listener: { + port: 0, + }, + logLevel: 'warn', + }, + }, + { + yasgui: { + module: trifidPluginFactory, + }, + }, + ) + trifidListener = await trifidServer.start() }) - describe('middleware', () => { - it('can execute', (done) => { - const app = express() - app.use(absoluteUrl()) - - const trifidConfig = createTrifidConfig(app, {}) - trifidFactory(trifidConfig).then((middleware) => { - app.use('/sparql', middleware) - request(app) - .get('/sparql') - .expect(200) - .end((err, _res) => { - if (err) { - done(err) - } else { - done() - } - }) - }) - }) + afterEach(async () => { + await trifidListener.close() }) - describe('YASGUI dist', () => { - it('can serve static CSS style', (done) => { - const app = express() - app.use(absoluteUrl()) + it('can serve YASGUI', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/sparql/`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) + }) - const trifidConfig = createTrifidConfig(app, {}) - trifidFactory(trifidConfig).then((middleware) => { - app.use('/sparql', middleware) - request(app) - .get('/yasgui-dist/yasgui.min.css') - .expect(200) - .end((err, _res) => { - if (err) { - done(err) - } else { - done() - } - }) - }) - }) + it('should redirect if trailing slash is missing', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/sparql`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) // The redirection should lead to a correct page + strictEqual(res.redirected, true) // Check the redirection + }) - it('can serve static JavaScript script', (done) => { - const app = express() - app.use(absoluteUrl()) + it('can serve static CSS style', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/yasgui-dist/yasgui.min.css`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) + }) - const trifidConfig = createTrifidConfig(app, {}) - trifidFactory(trifidConfig).then((middleware) => { - app.use('/sparql', middleware) - request(app) - .get('/yasgui-dist/yasgui.min.js') - .expect(200) - .end((err, _res) => { - if (err) { - done(err) - } else { - done() - } - }) - }) - }) + it('can serve static JavaScript script', async () => { + const res = await fetch(`${getListenerURL(trifidListener)}/yasgui-dist/yasgui.min.js`) + const _body = await res.text() // Just make sure that the stream is consumed + strictEqual(res.status, 200) }) }) diff --git a/packages/yasgui/views/yasgui.hbs b/packages/yasgui/views/yasgui.hbs index 72b4ac34..659d0f47 100644 --- a/packages/yasgui/views/yasgui.hbs +++ b/packages/yasgui/views/yasgui.hbs @@ -1,3 +1,12 @@ +
      +
      +
      +

      Query Data

      +

      Write some SPARQL requests to query the SPARQL endpoint

      +
      +
      +
      +