diff --git a/.changeset/clean-seas-work.md b/.changeset/clean-seas-work.md new file mode 100644 index 00000000..ff8e1971 --- /dev/null +++ b/.changeset/clean-seas-work.md @@ -0,0 +1,7 @@ +--- +'graphql-ws': major +--- + +Drop support for `ws` v7 + +`ws` v7 has been deprecated. Please upgrade and use v8. diff --git a/.changeset/friendly-cats-sing.md b/.changeset/friendly-cats-sing.md new file mode 100644 index 00000000..762178a1 --- /dev/null +++ b/.changeset/friendly-cats-sing.md @@ -0,0 +1,7 @@ +--- +'graphql-ws': major +--- + +Drop support for deprecated `fastify-websocket` + +[`fastify-websocket` has been deprecated since v4.3.0.](https://www.npmjs.com/package/fastify-websocket). Please upgrade and use [`@fastify/websocket`](https://github.com/fastify/fastify-websocket). diff --git a/.changeset/lemon-dolls-check.md b/.changeset/lemon-dolls-check.md new file mode 100644 index 00000000..67da30c1 --- /dev/null +++ b/.changeset/lemon-dolls-check.md @@ -0,0 +1,44 @@ +--- +'graphql-ws': major +--- + +The `/lib/` part from imports has been removed, for example `graphql-ws/lib/use/ws` becomes `graphql-ws/use/ws` + +### Migrating from v5 to v6 + +Simply remove the `/lib/` part from your graphql-ws imports that use a handler. + +#### ws + +```diff +- import { useServer } from 'graphql-ws/lib/use/ws'; ++ import { useServer } from 'graphql-ws/use/ws'; +``` + +#### uWebSockets.js + +```diff +- import { makeBehavior } from 'graphql-ws/lib/use/uWebSockets'; ++ import { makeBehavior } from 'graphql-ws/use/uWebSockets'; +``` + +#### @fastify/websocket + +```diff +- import { makeHandler } from 'graphql-ws/lib/use/@fastify/websocket'; ++ import { makeHandler } from 'graphql-ws/use/@fastify/websocket'; +``` + +#### Bun + +```diff +- import { handleProtocols, makeHandler } from 'graphql-ws/lib/use/bun'; ++ import { handleProtocols, makeHandler } from 'graphql-ws/use/bun'; +``` + +#### Deno + +```diff +- import { makeHandler } from 'https://esm.sh/graphql-ws/lib/use/deno'; ++ import { makeHandler } from 'https://esm.sh/graphql-ws/use/deno'; +``` diff --git a/.changeset/long-glasses-drive.md b/.changeset/long-glasses-drive.md new file mode 100644 index 00000000..380d1aab --- /dev/null +++ b/.changeset/long-glasses-drive.md @@ -0,0 +1,5 @@ +--- +'graphql-ws': major +--- + +`ErrorMessage` uses and `onError` returns `GraphQLFormattedError` (instead of `GraphQLError`) diff --git a/.changeset/nervous-peaches-hide.md b/.changeset/nervous-peaches-hide.md new file mode 100644 index 00000000..b2c69846 --- /dev/null +++ b/.changeset/nervous-peaches-hide.md @@ -0,0 +1,17 @@ +--- +'graphql-ws': minor +--- + +Client is truly zero-dependency, not even a peer dependency on `graphql` + +In non-browser environments, you can use only the client and not even depend on `graphql` by importing from `graphql-ws/client`. + +```ts +import { createClient } from 'graphql-ws/client'; + +const client = createClient({ + url: 'ws://localhost:4000/graphql' +}); +``` + +Note that, in browser envirments (and of course having your bundler use the [`browser` package.json field](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#browser)), you don't have to import from `graphql-ws/client` - simply importing from `graphql-ws` will only have the `createClient` available. diff --git a/.changeset/proud-emus-clean.md b/.changeset/proud-emus-clean.md new file mode 100644 index 00000000..900f7ab2 --- /dev/null +++ b/.changeset/proud-emus-clean.md @@ -0,0 +1,7 @@ +--- +'graphql-ws': major +--- + +Least supported Node version is v20 + +Node v10 has been deprecated for years now. There is no reason to support it. Bumping the engine to the current LTS (v20) also allows the code to be leaner and use less polyfills. diff --git a/.changeset/shaggy-geese-learn.md b/.changeset/shaggy-geese-learn.md new file mode 100644 index 00000000..ba7a0b04 --- /dev/null +++ b/.changeset/shaggy-geese-learn.md @@ -0,0 +1,7 @@ +--- +'graphql-ws': major +--- + +Least supported `graphql` peer dependency is ^15.10.0 and ^16.10.0 + +Users are advised to use the latest of `graphql` because of various improvements in performance and security. diff --git a/.changeset/stale-tomatoes-deny.md b/.changeset/stale-tomatoes-deny.md new file mode 100644 index 00000000..778afc2f --- /dev/null +++ b/.changeset/stale-tomatoes-deny.md @@ -0,0 +1,5 @@ +--- +'graphql-ws': major +--- + +`NextMessage` uses and `onNext` returns `FormattedExecutionResult` (instead of `ExecutionResult`) diff --git a/.changeset/strange-ties-mix.md b/.changeset/strange-ties-mix.md new file mode 100644 index 00000000..109b5da1 --- /dev/null +++ b/.changeset/strange-ties-mix.md @@ -0,0 +1,107 @@ +--- +'graphql-ws': major +--- + +`onSubscribe`, `onOperation`, `onError`, `onNext` and `onComplete` hooks don't have the full accompanying message anymore, only the ID and the relevant part from the message + +There is really no need to pass the full `SubscribeMessage` to the `onSubscribe` hook. The only relevant parts from the message are the `id` and the `payload`, the `type` is useless since the hook inherently has it (`onNext` is `next` type, `onError` is `error` type, etc). + +The actual techincal reason for not having the full message is to avoid serialising results and errors twice. Both `onNext` and `onError` allow the user to augment the result and return it to be used instead. `onNext` originally had the `NextMessage` argument which already has the `FormattedExecutionResult`, and `onError` originally had the `ErrorMessage` argument which already has the `GraphQLFormattedError`, and they both also returned `FormattedExecutionResult` and `GraphQLFormattedError` respectivelly - meaning, if the user serialised the results - the serialisation would happen **twice**. + +### Migrating from v5 to v6 + +#### `onSubscribe` + +```diff +import { ServerOptions, SubscribePayload } from 'graphql-ws'; + +const opts: ServerOptions = { +- onSubscribe(ctx, message) { +- const messageId = message.id; +- const messagePayload: SubscribePayload = message.payload; +- }, ++ onSubscribe(ctx, id, payload) { ++ const messageId = id; ++ const messagePayload: SubscribePayload = payload; ++ }, +}; +``` + +#### `onOperation` + +The `SubscribeMessage.payload` is not useful here at all, the `payload` has been parsed to ready-to-use graphql execution args and should be used instead. + +```diff +import { ExecutionArgs } from 'graphql'; +import { ServerOptions, SubscribePayload } from 'graphql-ws'; + +const opts: ServerOptions = { +- onOperation(ctx, message) { +- const messageId = message.id; +- const messagePayload: SubscribePayload = message.payload; +- }, ++ onOperation(ctx, id, args) { ++ const messageId = id; ++ const executionArgs: ExecutionArgs = args; ++ }, +}; +``` + +#### `onError` + +The `ErrorMessage.payload` (`GraphQLFormattedError[]`) is not useful here at all, the user has access to `GraphQLError[]` that are true instances of the error containing object references to `originalError`s and other properties. The user can always convert and return `GraphQLFormattedError[]` by using the `.toJSON()` method. + +```diff +import { GraphQLError, GraphQLFormattedError } from 'graphql'; +import { ServerOptions } from 'graphql-ws'; + +const opts: ServerOptions = { +- onError(ctx, message, errors) { +- const messageId = message.id; +- const graphqlErrors: readonly GraphQLError[] = errors; +- const messagePayload: readonly GraphQLFormattedError[] = message.payload; +- }, ++ onError(ctx, id, errors) { ++ const messageId = id; ++ const graphqlErrors: readonly GraphQLError[] = errors; ++ const messagePayload: readonly GraphQLFormattedError[] = errors.map((e) => e.toJSON()); ++ }, +}; +``` + +#### `onNext` + +The `NextMessage.payload` (`FormattedExecutionResult`) is not useful here at all, the user has access to `ExecutionResult` that contains actual object references to error instances. The user can always convert and return `FormattedExecutionResult` by serialising the errors with `GraphQLError.toJSON()` method. + +```diff +import { ExecutionResult, FormattedExecutionResult } from 'graphql'; +import { ServerOptions } from 'graphql-ws'; + +const opts: ServerOptions = { +- onNext(ctx, message, result) { +- const messageId = message.id; +- const graphqlResult: ExecutionResult = result; +- const messagePayload: FormattedExecutionResult = message.payload; +- }, ++ onNext(ctx, id, result) { ++ const messageId = id; ++ const graphqlResult: ExecutionResult = result; ++ const messagePayload: FormattedExecutionResult = { ...result, errors: result.errors?.map((e) => e.toJSON()) }; ++ }, +}; +``` + +#### `onComplete` + +```diff +import { ServerOptions } from 'graphql-ws'; + +const opts: ServerOptions = { +- onComplete(ctx, message) { +- const messageId = message.id; +- }, ++ onComplete(ctx, id) { ++ const messageId = id; ++ }, +}; +``` diff --git a/.changeset/tiny-worms-fry.md b/.changeset/tiny-worms-fry.md new file mode 100644 index 00000000..8f30b226 --- /dev/null +++ b/.changeset/tiny-worms-fry.md @@ -0,0 +1,49 @@ +--- +'graphql-ws': major +--- + +Errors thrown from subscription iterables will be caught and reported through the `ErrorMessage` + +Compared to the behaviour before, which terminated the whole WebSocket connection - those errors are now gracefully reported and terminate only the specific subscription that threw the error. + +There's been [an editorial change in the GraphQL Spec suggesting this being the correct approach](https://github.com/graphql/graphql-spec/pull/1099). + +Also, if you'd like to get involved and ideally drop your opinion about whether iterable errors should be reported as errors or `ExecutionResult`s with `errors` field set, [please read more here](https://github.com/graphql/graphql-spec/pull/1127). + +### Migrating from v5 to v6 + +If you had used the suggested "ws server usage with custom subscribe method that gracefully handles thrown errors" recipe, you can simply remove it since this behaviour is now baked in. + +```diff +import { subscribe } from 'graphql'; +import { useServer } from 'graphql-ws/use/ws'; +import { WebSocketServer } from 'ws'; // yarn add ws + +const wsServer = new WebSocketServer({ + port: 4000, + path: '/graphql', +}); + +useServer( + { + schema, +- async subscribe(...args) { +- const result = await subscribe(...args); +- if ('next' in result) { +- // is an async iterable, augment the next method to handle thrown errors +- const originalNext = result.next; +- result.next = async () => { +- try { +- return await originalNext(); +- } catch (err) { +- // gracefully handle the error thrown from the next method +- return { value: { errors: [err] } }; +- } +- }; +- } +- return result; +- }, + }, + wsServer, +); +``` diff --git a/.changeset/twelve-rabbits-beam.md b/.changeset/twelve-rabbits-beam.md new file mode 100644 index 00000000..76a203da --- /dev/null +++ b/.changeset/twelve-rabbits-beam.md @@ -0,0 +1,24 @@ +--- +'graphql-ws': major +--- + +Remove deprecated `isMessage`, use `validateMessage` instead + +### Migrating from v5 to v6 + +Replace all ocurrances of `isMessage` with `validateMessage`. Note that `validateMessage` throws if the message is not valid, compared with `isMessage` that simply returned true/false. + +```diff +- import { isMessage } from 'graphql-ws'; ++ import { validateMessage } from 'graphql-ws'; + +function isGraphQLWSMessage(val) { +- return isMessage(val); ++ try { ++ validateMessage(val); ++ return true; ++ } catch { ++ return false; ++ } +} +``` diff --git a/.changeset/wet-teachers-hang.md b/.changeset/wet-teachers-hang.md new file mode 100644 index 00000000..6938f5da --- /dev/null +++ b/.changeset/wet-teachers-hang.md @@ -0,0 +1,19 @@ +--- +'graphql-ws': major +--- + +Removed deprecated `isFatalConnectionProblem`, use `shouldRetry` instead + +### Migrating from v5 to v6 + +Replace all ocurrances of `isFatalConnectionProblem` with `shouldRetry`. Note that the result is inverted, where you returned `false` in `isFatalConnectionProblem` you should return `true` in `shouldRetry`. + +```diff +import { createClient } from 'graphql-ws'; + +const client = createClient({ + url: 'ws://localhost:4000/graphql', +- isFatalConnectionProblem: () => false, ++ shouldRetry: () => true, +}); +``` diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 07c2ac0f..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @type {import('eslint').Linter.Config} - */ -const opts = { - env: { - es2020: true, - node: true, - jest: true, - }, - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], - rules: { - // unused vars will be handled by the TS compiler - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/ban-ts-comment': [ - 'error', - { - 'ts-expect-error': 'allow-with-description', - }, - ], - '@typescript-eslint/no-explicit-any': 'warn', - }, -}; -module.exports = opts; diff --git a/.github/workflows/ci.yml b/.github/workflows/check.yml similarity index 63% rename from .github/workflows/ci.yml rename to .github/workflows/check.yml index 9d6831ef..ec3ed352 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/check.yml @@ -1,4 +1,4 @@ -name: CI +name: Check on: push: @@ -7,15 +7,8 @@ on: pull_request: jobs: - check: - strategy: - fail-fast: false - matrix: - check: - - format - - lint - - type - name: Check ${{ matrix.check }} + format: + name: Format runs-on: ubuntu-latest steps: - name: Checkout @@ -25,11 +18,15 @@ jobs: with: node-version-file: .node-version - name: Check - run: yarn check:${{ matrix.check }} + run: yarn check:format - test: - name: Test + types: + name: Types with graphql@${{matrix.graphql}} runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + graphql: [15, 16] steps: - name: Checkout uses: actions/checkout@v3 @@ -37,5 +34,9 @@ jobs: uses: the-guild-org/shared-config/setup@v1 with: node-version-file: .node-version - - name: Test - run: yarn test + - name: Install + run: yarn add --dev graphql@${{matrix.graphql}} + - name: Info + run: yarn info graphql + - name: Check + run: yarn check:types diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 23ec4d60..d4305544 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,6 @@ jobs: uses: the-guild-org/shared-config/.github/workflows/release-snapshot.yml@v1 with: node-version-file: .node-version - buildScript: build npmTag: ${{ github.event.pull_request.title == 'Upcoming Release Changes' && 'rc' || 'alpha' }} restoreDeletedChangesets: ${{ github.event.pull_request.title == 'Upcoming Release Changes' && true || false }} secrets: @@ -27,7 +26,6 @@ jobs: uses: the-guild-org/shared-config/.github/workflows/release-stable.yml@v1 with: node-version-file: .node-version - releaseScript: release secrets: githubToken: ${{ secrets.BOT_GITHUB_TOKEN }} npmToken: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..e2f52bb5 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,30 @@ +name: Test + +on: + push: + branches: + - master + pull_request: + +jobs: + test: + name: Node v${{matrix.node}} with graphql@${{matrix.graphql}} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + node: [20, 22, 23] + graphql: [15, 16] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup + uses: the-guild-org/shared-config/setup@v1 + with: + node-version: ${{matrix.node}} + - name: Install + run: yarn add --dev graphql@${{matrix.graphql}} + - name: Info + run: yarn info graphql + - name: Test + run: yarn test diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index 5d237a3b..90127531 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -7,12 +7,13 @@ on: pull_request: branches: - master - paths: - - website/** + # we always want new site previews because the api reference changes are in code + # paths: + # - website/** jobs: - check-type: - name: Check type + check-types: + name: Check types runs-on: ubuntu-latest steps: - name: Checkout @@ -24,7 +25,7 @@ jobs: working-directory: website - name: Check working-directory: website - run: yarn check:type + run: yarn check:types deploy: name: Deploy diff --git a/.gitignore b/.gitignore index 2c487461..b9a9fbac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ .DS_Store node_modules/ -lib/ umd/ dist/ out/ diff --git a/.node-version b/.node-version index 16894376..53d1c14d 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v21 +v22 diff --git a/.yarn/patches/pkgroll-npm-2.6.1-193e78e84e.patch b/.yarn/patches/pkgroll-npm-2.6.1-193e78e84e.patch new file mode 100644 index 00000000..d94f51e1 --- /dev/null +++ b/.yarn/patches/pkgroll-npm-2.6.1-193e78e84e.patch @@ -0,0 +1,10 @@ +diff --git a/dist/cli.js b/dist/cli.js +index 0b4fa2e8ea536888965886802a2c8831812475aa..fdf167f57cd620b1dd674653b4d13cd508f6e1bc 100755 +--- a/dist/cli.js ++++ b/dist/cli.js +@@ -34,4 +34,4 @@ + `+" ".repeat(e)),new Array(q).fill(0).map((u,e)=>"\r"+" ".repeat(e)),new Array(q).fill(0).map((u,e)=>`\r + `+" ".repeat(e)),new Array(q).fill(0).map((u,e)=>` + `+" ".repeat(e)),new Array(q).fill(0).map((u,e)=>"\r"+" ".repeat(e)),new Array(q).fill(0).map((u,e)=>`\r +-`+" ".repeat(e));var nu;(function(u){u.DEFAULT={allowTrailingComma:!1}})(nu||(nu={}));function AD(u,e=[],t=nu.DEFAULT){let D=null,r=[];const n=[];function o(i){Array.isArray(r)?r.push(i):D!==null&&(r[D]=i)}return s(o,"r"),F(o,"onValue"),bD(u,{onObjectBegin:F(()=>{const i={};o(i),n.push(r),r=i,D=null},"onObjectBegin"),onObjectProperty:F(i=>{D=i},"onObjectProperty"),onObjectEnd:F(()=>{r=n.pop()},"onObjectEnd"),onArrayBegin:F(()=>{const i=[];o(i),n.push(r),r=i,D=null},"onArrayBegin"),onArrayEnd:F(()=>{r=n.pop()},"onArrayEnd"),onLiteralValue:o,onError:F((i,a,l)=>{e.push({error:i,offset:a,length:l})},"onError")},t),r[0]}s(AD,"$e"),F(AD,"parse$1");function bD(u,e,t=nu.DEFAULT){const D=mD(u,!1),r=[];function n(A){return A?()=>A(D.getTokenOffset(),D.getTokenLength(),D.getTokenStartLine(),D.getTokenStartCharacter()):()=>!0}s(n,"s"),F(n,"toNoArgVisit");function o(A){return A?()=>A(D.getTokenOffset(),D.getTokenLength(),D.getTokenStartLine(),D.getTokenStartCharacter(),()=>r.slice()):()=>!0}s(o,"r"),F(o,"toNoArgVisitWithPath");function i(A){return A?$=>A($,D.getTokenOffset(),D.getTokenLength(),D.getTokenStartLine(),D.getTokenStartCharacter()):()=>!0}s(i,"f"),F(i,"toOneArgVisit");function a(A){return A?$=>A($,D.getTokenOffset(),D.getTokenLength(),D.getTokenStartLine(),D.getTokenStartCharacter(),()=>r.slice()):()=>!0}s(a,"u"),F(a,"toOneArgVisitWithPath");const l=o(e.onObjectBegin),f=a(e.onObjectProperty),C=n(e.onObjectEnd),c=o(e.onArrayBegin),d=n(e.onArrayEnd),E=a(e.onLiteralValue),g=i(e.onSeparator),b=n(e.onComment),k=i(e.onError),v=t&&t.disallowComments,p=t&&t.allowTrailingComma;function B(){for(;;){const A=D.scan();switch(D.getTokenError()){case 4:m(14);break;case 5:m(15);break;case 3:m(13);break;case 1:v||m(11);break;case 2:m(12);break;case 6:m(16);break}switch(A){case 12:case 13:v?m(10):b();break;case 16:m(1);break;case 15:case 14:break;default:return A}}}s(B,"m"),F(B,"scanNext");function m(A,$=[],_u=[]){if(k(A),$.length+_u.length>0){let Y=D.getToken();for(;Y!==17;){if($.indexOf(Y)!==-1){B();break}else if(_u.indexOf(Y)!==-1)break;Y=B()}}}s(m,"g"),F(m,"handleError");function y(A){const $=D.getTokenValue();return A?E($):(f($),r.push($)),B(),!0}s(y,"y"),F(y,"parseString");function w(){switch(D.getToken()){case 11:const A=D.getTokenValue();let $=Number(A);isNaN($)&&(m(2),$=0),E($);break;case 7:E(null);break;case 8:E(!0);break;case 9:E(!1);break;default:return!1}return B(),!0}s(w,"j"),F(w,"parseLiteral");function lu(){return D.getToken()!==10?(m(3,[],[2,5]),!1):(y(!1),D.getToken()===6?(g(":"),B(),H()||m(4,[],[2,5])):m(5,[],[2,5]),r.pop(),!0)}s(lu,"ke"),F(lu,"parseProperty");function Iu(){l(),B();let A=!1;for(;D.getToken()!==2&&D.getToken()!==17;){if(D.getToken()===5){if(A||m(4,[],[]),g(","),B(),D.getToken()===2&&p)break}else A&&m(6,[],[]);lu()||m(4,[],[2,5]),A=!0}return C(),D.getToken()!==2?m(7,[2],[]):B(),!0}s(Iu,"be"),F(Iu,"parseObject");function Ru(){c(),B();let A=!0,$=!1;for(;D.getToken()!==4&&D.getToken()!==17;){if(D.getToken()===5){if($||m(4,[],[]),g(","),B(),D.getToken()===4&&p)break}else $&&m(6,[],[]);A?(r.push(0),A=!1):r[r.length-1]++,H()||m(4,[],[4,5]),$=!0}return d(),A||r.pop(),D.getToken()!==4?m(8,[4],[]):B(),!0}s(Ru,"we"),F(Ru,"parseArray");function H(){switch(D.getToken()){case 3:return Ru();case 1:return Iu();case 10:return y(!0);default:return w()}}return s(H,"V"),F(H,"parseValue"),B(),D.getToken()===17?t.allowEmptyContent?!0:(m(4,[],[]),!1):H()?(D.getToken()!==17&&m(9,[],[]),!0):(m(4,[],[]),!1)}s(bD,"ye"),F(bD,"visit");var yD;(function(u){u[u.None=0]="None",u[u.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",u[u.UnexpectedEndOfString=2]="UnexpectedEndOfString",u[u.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",u[u.InvalidUnicode=4]="InvalidUnicode",u[u.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",u[u.InvalidCharacter=6]="InvalidCharacter"})(yD||(yD={}));var wD;(function(u){u[u.OpenBraceToken=1]="OpenBraceToken",u[u.CloseBraceToken=2]="CloseBraceToken",u[u.OpenBracketToken=3]="OpenBracketToken",u[u.CloseBracketToken=4]="CloseBracketToken",u[u.CommaToken=5]="CommaToken",u[u.ColonToken=6]="ColonToken",u[u.NullKeyword=7]="NullKeyword",u[u.TrueKeyword=8]="TrueKeyword",u[u.FalseKeyword=9]="FalseKeyword",u[u.StringLiteral=10]="StringLiteral",u[u.NumericLiteral=11]="NumericLiteral",u[u.LineCommentTrivia=12]="LineCommentTrivia",u[u.BlockCommentTrivia=13]="BlockCommentTrivia",u[u.LineBreakTrivia=14]="LineBreakTrivia",u[u.Trivia=15]="Trivia",u[u.Unknown=16]="Unknown",u[u.EOF=17]="EOF"})(wD||(wD={}));const Zt=AD;var $D;(function(u){u[u.InvalidSymbol=1]="InvalidSymbol",u[u.InvalidNumberFormat=2]="InvalidNumberFormat",u[u.PropertyNameExpected=3]="PropertyNameExpected",u[u.ValueExpected=4]="ValueExpected",u[u.ColonExpected=5]="ColonExpected",u[u.CommaExpected=6]="CommaExpected",u[u.CloseBraceExpected=7]="CloseBraceExpected",u[u.CloseBracketExpected=8]="CloseBracketExpected",u[u.EndOfFileExpected=9]="EndOfFileExpected",u[u.InvalidCommentToken=10]="InvalidCommentToken",u[u.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",u[u.UnexpectedEndOfString=12]="UnexpectedEndOfString",u[u.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",u[u.InvalidUnicode=14]="InvalidUnicode",u[u.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",u[u.InvalidCharacter=16]="InvalidCharacter"})($D||($D={}));const vD=F((u,e)=>Zt(Jt(e,u,"utf8")),"readJsonc"),vu=Symbol("implicitBaseUrl"),N="${configDir}",Ht=F(()=>{const{findPnpApi:u}=Uu;return u&&u(process.cwd())},"getPnpApi"),xu=F((u,e,t,D)=>{const r=`resolveFromPackageJsonPath:${u}:${e}:${t}`;if(D!=null&&D.has(r))return D.get(r);const n=vD(u,D);if(!n)return;let o=e||"tsconfig.json";if(!t&&n.exports)try{const[i]=Gt(n.exports,e,["require","types"]);o=i}catch{return!1}else!e&&n.tsconfig&&(o=n.tsconfig);return o=h.join(u,"..",o),D?.set(r,o),o},"resolveFromPackageJsonPath"),Ou="package.json",ku="tsconfig.json",Yt=F((u,e,t)=>{let D=u;if(u===".."&&(D=h.join(D,ku)),u[0]==="."&&(D=h.resolve(e,D)),h.isAbsolute(D)){if(j(t,D)){if(tu(t,D).isFile())return D}else if(!D.endsWith(".json")){const d=`${D}.json`;if(j(t,d))return d}return}const[r,...n]=u.split("/"),o=r[0]==="@"?`${r}/${n.shift()}`:r,i=n.join("/"),a=Ht();if(a){const{resolveRequest:d}=a;try{if(o===u){const E=d(h.join(o,Ou),e);if(E){const g=xu(E,i,!1,t);if(g&&j(t,g))return g}}else{let E;try{E=d(u,e,{extensions:[".json"]})}catch{E=d(h.join(u,ku),e)}if(E)return E}}catch{}}const l=gD(h.resolve(e),h.join("node_modules",o),t);if(!l||!tu(t,l).isDirectory())return;const f=h.join(l,Ou);if(j(t,f)){const d=xu(f,i,!1,t);if(d===!1)return;if(d&&j(t,d)&&tu(t,d).isFile())return d}const C=h.join(l,i),c=C.endsWith(".json");if(!c){const d=`${C}.json`;if(j(t,d))return d}if(j(t,C)){if(tu(t,C).isDirectory()){const d=h.join(C,Ou);if(j(t,d)){const g=xu(d,"",!0,t);if(g&&j(t,g))return g}const E=h.join(C,ku);if(j(t,E))return E}else if(c)return C}},"resolveExtendsPath"),ju=F((u,e)=>$u(h.relative(u,e)),"pathRelative"),xD=["files","include","exclude"],Qt=F((u,e,t,D)=>{const r=Yt(u,e,D);if(!r)throw new Error(`File '${u}' not found.`);if(t.has(r))throw new Error(`Circularity detected while resolving configuration: ${r}`);t.add(r);const n=h.dirname(r),o=OD(r,D,t);delete o.references;const{compilerOptions:i}=o;if(i){const{baseUrl:a}=i;a&&!a.startsWith(N)&&(i.baseUrl=O(h.relative(e,h.join(n,a)))||"./");let{outDir:l}=i;l&&(l.startsWith(N)||(l=h.relative(e,h.join(n,l))),i.outDir=O(l)||"./")}for(const a of xD){const l=o[a];l&&(o[a]=l.map(f=>f.startsWith(N)?f:O(h.relative(e,h.join(n,f)))))}return o},"resolveExtends"),Xt=["outDir","declarationDir"],OD=F((u,e,t=new Set)=>{let D;try{D=vD(u,e)||{}}catch{throw new Error(`Cannot resolve tsconfig at path: ${u}`)}if(typeof D!="object")throw new SyntaxError(`Failed to parse tsconfig at: ${u}`);const r=h.dirname(u);if(D.compilerOptions){const{compilerOptions:n}=D;n.paths&&!n.baseUrl&&(n[vu]=r)}if(D.extends){const n=Array.isArray(D.extends)?D.extends:[D.extends];delete D.extends;for(const o of n.reverse()){const i=Qt(o,r,new Set(t),e),a={...i,...D,compilerOptions:{...i.compilerOptions,...D.compilerOptions}};i.watchOptions&&(a.watchOptions={...i.watchOptions,...D.watchOptions}),D=a}}if(D.compilerOptions){const{compilerOptions:n}=D,o=["baseUrl","rootDir"];for(const i of o){const a=n[i];if(a&&!a.startsWith(N)){const l=h.resolve(r,a),f=ju(r,l);n[i]=f}}for(const i of Xt){let a=n[i];a&&(Array.isArray(D.exclude)||(D.exclude=[]),D.exclude.includes(a)||D.exclude.push(a),a.startsWith(N)||(a=$u(a)),n[i]=a)}}else D.compilerOptions={};if(D.include?(D.include=D.include.map(O),D.files&&delete D.files):D.files&&(D.files=D.files.map(n=>n.startsWith(N)?n:$u(n))),D.watchOptions){const{watchOptions:n}=D;n.excludeDirectories&&(n.excludeDirectories=n.excludeDirectories.map(o=>O(h.resolve(r,o))))}return D},"_parseTsconfig"),ou=F((u,e)=>{if(u.startsWith(N))return O(h.join(e,u.slice(N.length)))},"interpolateConfigDir"),ur=["outDir","declarationDir","outFile","rootDir","baseUrl","tsBuildInfoFile"],kD=F((u,e=new Map)=>{const t=h.resolve(u),D=OD(t,e),r=h.dirname(t),{compilerOptions:n}=D;if(n){for(const i of ur){const a=n[i];if(a){const l=ou(a,r);n[i]=l?ju(r,l):a}}for(const i of["rootDirs","typeRoots"]){const a=n[i];a&&(n[i]=a.map(l=>{const f=ou(l,r);return f?ju(r,f):l}))}const{paths:o}=n;if(o)for(const i of Object.keys(o))o[i]=o[i].map(a=>{var l;return(l=ou(a,r))!=null?l:a})}for(const o of xD){const i=D[o];i&&(D[o]=i.map(a=>{var l;return(l=ou(a,r))!=null?l:a}))}return D},"parseTsconfig"),Dr=F((u=process.cwd(),e="tsconfig.json",t=new Map)=>{const D=gD(O(u),e,t);if(!D)return null;const r=kD(D,t);return{path:D,config:r}},"getTsconfig"),er=/\*/g,jD=F((u,e)=>{const t=u.match(er);if(t&&t.length>1)throw new Error(e)},"assertStarCount"),tr=F(u=>{if(u.includes("*")){const[e,t]=u.split("*");return{prefix:e,suffix:t}}return u},"parsePattern"),rr=F(({prefix:u,suffix:e},t)=>t.startsWith(u)&&t.endsWith(e),"isPatternMatch"),nr=F((u,e,t)=>Object.entries(u).map(([D,r])=>(jD(D,`Pattern '${D}' can have at most one '*' character.`),{pattern:tr(D),substitutions:r.map(n=>{if(jD(n,`Substitution '${n}' in pattern '${D}' can have at most one '*' character.`),!e&&!wu.test(n))throw new Error("Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?");return h.resolve(t,n)})})),"parsePaths"),or=F(u=>{const{compilerOptions:e}=u.config;if(!e)return null;const{baseUrl:t,paths:D}=e;if(!t&&!D)return null;const r=vu in e&&e[vu],n=h.resolve(h.dirname(u.path),t||r||"."),o=D?nr(D,t,n):[];return i=>{if(wu.test(i))return[];const a=[];for(const c of o){if(c.pattern===i)return c.substitutions.map(O);typeof c.pattern!="string"&&a.push(c)}let l,f=-1;for(const c of a)rr(c.pattern,i)&&c.pattern.prefix.length>f&&(f=c.pattern.prefix.length,l=c);if(!l)return t?[O(h.join(n,i))]:[];const C=i.slice(l.pattern.prefix.length,i.length-l.pattern.suffix.length);return l.substitutions.map(c=>O(c.replace("*",C)))}},"createPathsMatcher"),TD=F(u=>{let e="";for(let t=0;tMath.floor(Math.random()*26),"m"),lr=F(u=>Array.from({length:u},()=>String.fromCodePoint(ar()+(Math.random()>.5?sr:ir))).join(""),"S"),cr=F((u=te)=>{const e=process.execPath;if(u.existsSync(e))return!u.existsSync(TD(e));const t=`/${lr(10)}`;u.writeFileSync(t,"");const D=!u.existsSync(TD(t));return u.unlinkSync(t),D},"l"),{join:su}=h.posix,Tu={ts:[".ts",".tsx",".d.ts"],cts:[".cts",".d.cts"],mts:[".mts",".d.mts"]},Fr=F(u=>{const e=[...Tu.ts],t=[...Tu.cts],D=[...Tu.mts];return u!=null&&u.allowJs&&(e.push(".js",".jsx"),t.push(".cjs"),D.push(".mjs")),[...e,...t,...D]},"getSupportedExtensions"),Cr=F(u=>{const e=[];if(!u)return e;const{outDir:t,declarationDir:D}=u;return t&&e.push(t),D&&e.push(D),e},"getDefaultExcludeSpec"),SD=F(u=>u.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),"escapeForRegexp"),fr=["node_modules","bower_components","jspm_packages"],Su=`(?!(${fr.join("|")})(/|$))`,pr=/(?:^|\/)[^.*?]+$/,PD="**/*",iu="[^/]",Pu="[^./]",ND=process.platform==="win32";F(({config:u,path:e},t=cr())=>{if("extends"in u)throw new Error("tsconfig#extends must be resolved. Use getTsconfig or parseTsconfig to resolve it.");if(!h.isAbsolute(e))throw new Error("The tsconfig path must be absolute");ND&&(e=O(e));const D=h.dirname(e),{files:r,include:n,exclude:o,compilerOptions:i}=u,a=r?.map(E=>su(D,E)),l=Fr(i),f=t?"":"i",C=(o||Cr(i)).map(E=>{const g=su(D,E),b=SD(g).replaceAll(String.raw`\*\*/`,"(.+/)?").replaceAll(String.raw`\*`,`${iu}*`).replaceAll(String.raw`\?`,iu);return new RegExp(`^${b}($|/)`,f)}),c=r||n?n:[PD],d=c?c.map(E=>{let g=su(D,E);pr.test(g)&&(g=su(g,PD));const b=SD(g).replaceAll(String.raw`/\*\*`,`(/${Su}${Pu}${iu}*)*?`).replaceAll(/(\/)?\\\*/g,(k,v)=>{const p=`(${Pu}|(\\.(?!min\\.js$))?)*`;return v?`/${Su}${Pu}${p}`:p}).replaceAll(/(\/)?\\\?/g,(k,v)=>{const p=iu;return v?`/${Su}${p}`:p});return new RegExp(`^${b}$`,f)}):void 0;return E=>{if(!h.isAbsolute(E))throw new Error("filePath must be absolute");if(ND&&(E=O(E)),a!=null&&a.includes(E)||!(!l.some(g=>E.endsWith(g))||C.some(g=>g.test(E)))&&d&&d.some(g=>g.test(E)))return u}},"createFilesMatcher");const ID="resolve-tsconfig-paths",Er=s(u=>u[0]===".","isRelative"),dr=s(u=>u[0]==="/"||/^[\s\S]:/.test(u),"isAbsolute"),hr=s(u=>u[0]==="#","isImports"),RD=s(u=>{const e=or(u);return e?{name:ID,async resolveId(t,D,r){if(!D||Er(t)||dr(t)||hr(t)||t.startsWith("\0"))return null;const n=e(t);for(const o of n){const i=await this.resolve(o,D,{skipSelf:!0,...r});if(i)return i}return null}}:{name:ID}},"resolveTsconfigPaths"),_D=/^#!.*/,gr=s(()=>({name:"strip-hashbang",transform:s(u=>{if(!_D.test(u))return null;const e=new qu(u);return e.replace(_D,""),{code:e.toString(),map:e.generateMap({hires:!0})}},"transform")}),"stripHashbang"),mr=["peerDependencies","dependencies","optionalDependencies"],Nu="@types/",LD=s((u,e,t=!1)=>{const D=[],{devDependencies:r}=u;for(const n of mr){const o=u[n];if(!o)continue;const i=Object.keys(o);for(const a of i)if(!(a in e))if(a.startsWith(Nu)){if(t){let l=a.slice(Nu.length);l.includes("__")&&(l=`@${l.replace("__","/")}`),D.push(l)}}else{if(r&&t){const l=Nu+a.replace("@","").replace("/","__");r[l]&&!(l in o)&&console.warn(`Recommendation: "${l}" is externalized because "${a}" is in "${n}". Place "${l}" in "${n}" as well so users don't have missing types.`)}D.push(a)}}return D.flatMap(n=>[n,new RegExp(`^${n}/`)])},"getExternalDependencies"),MD=s(u=>u.split("?")[0],"stripQuery"),WD={type:s(async(u,e)=>{const[t,D]=await Promise.all([Promise.resolve().then(function(){return require("./rollup-plugin-dts-wFwILfkI.js")}),Promise.resolve().then(function(){return require("./local-typescript-loader-DFqhlpcR.js")}).then(function(r){return r.localTypescriptLoader})]);return{input:[],preserveEntrySignatures:"strict",plugins:[fD(u),...e?[RD(e)]:[],pD(),t.default({respectExternal:!0,compilerOptions:{composite:!1,preserveSymlinks:!1,module:D.default.ModuleKind.Preserve,moduleResolution:D.default.ModuleResolutionKind.Bundler},tsconfig:e?.path})],output:[],external:[]}},"type"),app:s((u,e,t,D,r)=>{const n={target:u.target,tsconfigRaw:r?.config};return{input:[],preserveEntrySignatures:"strict",plugins:[fD(u),...r?[RD(r)]:[],pD(),XD({entries:e}),HD({extensions:[".mjs",".js",".ts",".jsx",".tsx",".json"],exportConditions:u.exportCondition}),...Object.keys(t).length>0?[Mu({preventAssignment:!0,objectGuards:!0,values:t})]:[],gr(),YD(),QD(),Pt(n),Tt(),ue({warnOnError:!0}),...u.minify?[It(n)]:[],Rt(D)],output:[],external:[]}},"app")},Br=s(async(u,e,t,D,r,n,o)=>{const i=t.filter(({exportEntry:c})=>c.isExecutable).map(({exportEntry:c})=>c.outputPath),a=Object.create(null),l=Object.fromEntries(D.env.map(({key:c,value:d})=>[`process.env.${c}`,JSON.stringify(d)])),f=LD(n,r),C=LD(n,r,!0);for(const{input:c,srcExtension:d,distExtension:E,exportEntry:g}of t){if(g.type==="types"){let B=a.type;B||(B=await WD.type(D,o),B.external=C,a.type=B),B.input.includes(c)||B.input.push(c),B.output.push({dir:e,entryFileNames:s(m=>S.realpathSync.native(MD(m.facadeModuleId)).slice(u.length,-d.length)+E,"entryFileNames"),exports:"auto",format:"esm"});continue}let b=a.app;b||(b=WD.app(D,r,l,i,o),b.external=f,a.app=b),b.input.includes(c)||b.input.push(c);const k=b.output,v=h.extname(g.outputPath),p=`${g.type}-${v}`;if(!k[p]){const B={dir:e,exports:"auto",format:g.type,chunkFileNames:`[name]-[hash]${v}`,sourcemap:D.sourcemap,plugins:[St(g.type==="module")],entryFileNames:s(m=>{const w=S.realpathSync.native(MD(m.facadeModuleId)).slice(u.length);return h.join(h.dirname(w),m.name)+E},"entryFileNames")};k.push(B),k[p]=B}}return a},"getRollupConfigs"),Ar=s(u=>{if(!u)return Dr();const e=h.resolve(u),t=kD(e);return{path:e,config:t}},"getTsconfig");let _=!0;const V=typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{};let J=0;if(V.process&&V.process.env&&V.process.stdout){const{FORCE_COLOR:u,NODE_DISABLE_COLORS:e,NO_COLOR:t,TERM:D,COLORTERM:r}=V.process.env;e||t||u==="0"?_=!1:u==="1"||u==="2"||u==="3"?_=!0:D==="dumb"?_=!1:"CI"in V.process.env&&["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE","DRONE"].some(n=>n in V.process.env)?_=!0:_=process.stdout.isTTY,_&&(process.platform==="win32"||r&&(r==="truecolor"||r==="24bit")?J=3:D&&(D.endsWith("-256color")||D.endsWith("256"))?J=2:J=1)}let UD={enabled:_,supportLevel:J};function br(u,e,t=1){const D=`\x1B[${u}m`,r=`\x1B[${e}m`,n=new RegExp(`\\x1b\\[${e}m`,"g");return o=>UD.enabled&&UD.supportLevel>=t?D+(""+o).replace(n,D)+r:""+o}s(br,"kolorist");const yr=br(90,39),wr=s(()=>new Date().toLocaleTimeString(),"currentTime"),au=s((...u)=>console.log(`[${yr(wr())}]`,...u),"log"),$r=s(async u=>{await hu(u)&&await S.promises.rm(u,{recursive:!0,force:!0})},"cleanDist"),{stringify:qD}=JSON,L=At({name:"pkgroll",version:bt,flags:{src:{type:String,description:"Source directory",default:"./src"},dist:{type:String,description:"Distribution directory",default:"./dist"},minify:{type:Boolean,description:"Minify output",alias:"m",default:!1},target:{type:[String],default:[`node${process.versions.node}`],description:"Environments to support. `target` in tsconfig.json is automatically added. Defaults to the current Node.js version.",alias:"t"},tsconfig:{type:String,description:"Custom tsconfig.json file path",alias:"p"},watch:{type:Boolean,description:"Watch mode",alias:"w",default:!1},env:{type:[u=>{const[e,t]=u.split("=");return{key:e,value:t}}],description:"Compile-time environment variables (eg. --env.NODE_ENV=production)"},exportCondition:{type:[String],description:"Export conditions for resolving dependency export and import maps (eg. --export-condition=node)"},sourcemap:{type:s(u=>{if(u==="")return!0;if(u==="inline")return u;throw new Error(`Invalid sourcemap option ${qD(u)}`)},"type"),description:"Sourcemap generation. Provide `inline` option for inline sourcemap (eg. --sourcemap, --sourcemap=inline)"},cleanDist:{type:Boolean,description:"Clean dist before bundling",default:!1}},help:{description:"Minimalistic package bundler",render:s((u,e)=>(e.flagOperator=t=>t.name==="env"?".key=":" ",e.render(u)),"render")}}),VD=process.cwd(),zD=eu(L.flags.src,!0),Z=eu(L.flags.dist,!0),GD=Ar(L.flags.tsconfig),KD=GD?.config.compilerOptions?.target;KD&&L.flags.target.push(KD),(async()=>{const u=await yt(VD);let e=$t(u);if(e=e.filter(r=>{const n=r.outputPath.startsWith(Z);return n||console.warn(`Ignoring entry outside of ${Z} directory: package.json#${r.from}=${qD(r.outputPath)}`),n}),e.length===0)throw new Error("No export entries found in package.json");const t=await Promise.all(e.map(async r=>({...await jt(r,zD,Z),exportEntry:r}))),D=await Br(eu(S.realpathSync.native(zD),!0),Z,t,L.flags,vt(u,VD),u,GD);L.flags.cleanDist&&await $r(Z),L.flags.watch?(au("Watch initialized"),Object.values(D).map(async r=>{Lu.watch(r).on("event",async o=>{o.code==="BUNDLE_START"&&au("Building",...Array.isArray(o.input)?o.input:[o.input]),o.code==="BUNDLE_END"&&(await Promise.all(r.output.map(i=>o.result.write(i))),au("Built",...Array.isArray(o.input)?o.input:[o.input])),o.code==="ERROR"&&au("Error:",o.error.message)})})):await Promise.all(Object.values(D).map(async r=>{const n=await Lu.rollup(r);return Promise.all(r.output.map(o=>n.write(o)))}))})().catch(u=>{console.error(u),process.exit(1)}); ++`+" ".repeat(e));var nu;(function(u){u.DEFAULT={allowTrailingComma:!1}})(nu||(nu={}));function AD(u,e=[],t=nu.DEFAULT){let D=null,r=[];const n=[];function o(i){Array.isArray(r)?r.push(i):D!==null&&(r[D]=i)}return s(o,"r"),F(o,"onValue"),bD(u,{onObjectBegin:F(()=>{const i={};o(i),n.push(r),r=i,D=null},"onObjectBegin"),onObjectProperty:F(i=>{D=i},"onObjectProperty"),onObjectEnd:F(()=>{r=n.pop()},"onObjectEnd"),onArrayBegin:F(()=>{const i=[];o(i),n.push(r),r=i,D=null},"onArrayBegin"),onArrayEnd:F(()=>{r=n.pop()},"onArrayEnd"),onLiteralValue:o,onError:F((i,a,l)=>{e.push({error:i,offset:a,length:l})},"onError")},t),r[0]}s(AD,"$e"),F(AD,"parse$1");function bD(u,e,t=nu.DEFAULT){const D=mD(u,!1),r=[];function n(A){return A?()=>A(D.getTokenOffset(),D.getTokenLength(),D.getTokenStartLine(),D.getTokenStartCharacter()):()=>!0}s(n,"s"),F(n,"toNoArgVisit");function o(A){return A?()=>A(D.getTokenOffset(),D.getTokenLength(),D.getTokenStartLine(),D.getTokenStartCharacter(),()=>r.slice()):()=>!0}s(o,"r"),F(o,"toNoArgVisitWithPath");function i(A){return A?$=>A($,D.getTokenOffset(),D.getTokenLength(),D.getTokenStartLine(),D.getTokenStartCharacter()):()=>!0}s(i,"f"),F(i,"toOneArgVisit");function a(A){return A?$=>A($,D.getTokenOffset(),D.getTokenLength(),D.getTokenStartLine(),D.getTokenStartCharacter(),()=>r.slice()):()=>!0}s(a,"u"),F(a,"toOneArgVisitWithPath");const l=o(e.onObjectBegin),f=a(e.onObjectProperty),C=n(e.onObjectEnd),c=o(e.onArrayBegin),d=n(e.onArrayEnd),E=a(e.onLiteralValue),g=i(e.onSeparator),b=n(e.onComment),k=i(e.onError),v=t&&t.disallowComments,p=t&&t.allowTrailingComma;function B(){for(;;){const A=D.scan();switch(D.getTokenError()){case 4:m(14);break;case 5:m(15);break;case 3:m(13);break;case 1:v||m(11);break;case 2:m(12);break;case 6:m(16);break}switch(A){case 12:case 13:v?m(10):b();break;case 16:m(1);break;case 15:case 14:break;default:return A}}}s(B,"m"),F(B,"scanNext");function m(A,$=[],_u=[]){if(k(A),$.length+_u.length>0){let Y=D.getToken();for(;Y!==17;){if($.indexOf(Y)!==-1){B();break}else if(_u.indexOf(Y)!==-1)break;Y=B()}}}s(m,"g"),F(m,"handleError");function y(A){const $=D.getTokenValue();return A?E($):(f($),r.push($)),B(),!0}s(y,"y"),F(y,"parseString");function w(){switch(D.getToken()){case 11:const A=D.getTokenValue();let $=Number(A);isNaN($)&&(m(2),$=0),E($);break;case 7:E(null);break;case 8:E(!0);break;case 9:E(!1);break;default:return!1}return B(),!0}s(w,"j"),F(w,"parseLiteral");function lu(){return D.getToken()!==10?(m(3,[],[2,5]),!1):(y(!1),D.getToken()===6?(g(":"),B(),H()||m(4,[],[2,5])):m(5,[],[2,5]),r.pop(),!0)}s(lu,"ke"),F(lu,"parseProperty");function Iu(){l(),B();let A=!1;for(;D.getToken()!==2&&D.getToken()!==17;){if(D.getToken()===5){if(A||m(4,[],[]),g(","),B(),D.getToken()===2&&p)break}else A&&m(6,[],[]);lu()||m(4,[],[2,5]),A=!0}return C(),D.getToken()!==2?m(7,[2],[]):B(),!0}s(Iu,"be"),F(Iu,"parseObject");function Ru(){c(),B();let A=!0,$=!1;for(;D.getToken()!==4&&D.getToken()!==17;){if(D.getToken()===5){if($||m(4,[],[]),g(","),B(),D.getToken()===4&&p)break}else $&&m(6,[],[]);A?(r.push(0),A=!1):r[r.length-1]++,H()||m(4,[],[4,5]),$=!0}return d(),A||r.pop(),D.getToken()!==4?m(8,[4],[]):B(),!0}s(Ru,"we"),F(Ru,"parseArray");function H(){switch(D.getToken()){case 3:return Ru();case 1:return Iu();case 10:return y(!0);default:return w()}}return s(H,"V"),F(H,"parseValue"),B(),D.getToken()===17?t.allowEmptyContent?!0:(m(4,[],[]),!1):H()?(D.getToken()!==17&&m(9,[],[]),!0):(m(4,[],[]),!1)}s(bD,"ye"),F(bD,"visit");var yD;(function(u){u[u.None=0]="None",u[u.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",u[u.UnexpectedEndOfString=2]="UnexpectedEndOfString",u[u.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",u[u.InvalidUnicode=4]="InvalidUnicode",u[u.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",u[u.InvalidCharacter=6]="InvalidCharacter"})(yD||(yD={}));var wD;(function(u){u[u.OpenBraceToken=1]="OpenBraceToken",u[u.CloseBraceToken=2]="CloseBraceToken",u[u.OpenBracketToken=3]="OpenBracketToken",u[u.CloseBracketToken=4]="CloseBracketToken",u[u.CommaToken=5]="CommaToken",u[u.ColonToken=6]="ColonToken",u[u.NullKeyword=7]="NullKeyword",u[u.TrueKeyword=8]="TrueKeyword",u[u.FalseKeyword=9]="FalseKeyword",u[u.StringLiteral=10]="StringLiteral",u[u.NumericLiteral=11]="NumericLiteral",u[u.LineCommentTrivia=12]="LineCommentTrivia",u[u.BlockCommentTrivia=13]="BlockCommentTrivia",u[u.LineBreakTrivia=14]="LineBreakTrivia",u[u.Trivia=15]="Trivia",u[u.Unknown=16]="Unknown",u[u.EOF=17]="EOF"})(wD||(wD={}));const Zt=AD;var $D;(function(u){u[u.InvalidSymbol=1]="InvalidSymbol",u[u.InvalidNumberFormat=2]="InvalidNumberFormat",u[u.PropertyNameExpected=3]="PropertyNameExpected",u[u.ValueExpected=4]="ValueExpected",u[u.ColonExpected=5]="ColonExpected",u[u.CommaExpected=6]="CommaExpected",u[u.CloseBraceExpected=7]="CloseBraceExpected",u[u.CloseBracketExpected=8]="CloseBracketExpected",u[u.EndOfFileExpected=9]="EndOfFileExpected",u[u.InvalidCommentToken=10]="InvalidCommentToken",u[u.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",u[u.UnexpectedEndOfString=12]="UnexpectedEndOfString",u[u.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",u[u.InvalidUnicode=14]="InvalidUnicode",u[u.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",u[u.InvalidCharacter=16]="InvalidCharacter"})($D||($D={}));const vD=F((u,e)=>Zt(Jt(e,u,"utf8")),"readJsonc"),vu=Symbol("implicitBaseUrl"),N="${configDir}",Ht=F(()=>{const{findPnpApi:u}=Uu;return u&&u(process.cwd())},"getPnpApi"),xu=F((u,e,t,D)=>{const r=`resolveFromPackageJsonPath:${u}:${e}:${t}`;if(D!=null&&D.has(r))return D.get(r);const n=vD(u,D);if(!n)return;let o=e||"tsconfig.json";if(!t&&n.exports)try{const[i]=Gt(n.exports,e,["require","types"]);o=i}catch{return!1}else!e&&n.tsconfig&&(o=n.tsconfig);return o=h.join(u,"..",o),D?.set(r,o),o},"resolveFromPackageJsonPath"),Ou="package.json",ku="tsconfig.json",Yt=F((u,e,t)=>{let D=u;if(u===".."&&(D=h.join(D,ku)),u[0]==="."&&(D=h.resolve(e,D)),h.isAbsolute(D)){if(j(t,D)){if(tu(t,D).isFile())return D}else if(!D.endsWith(".json")){const d=`${D}.json`;if(j(t,d))return d}return}const[r,...n]=u.split("/"),o=r[0]==="@"?`${r}/${n.shift()}`:r,i=n.join("/"),a=Ht();if(a){const{resolveRequest:d}=a;try{if(o===u){const E=d(h.join(o,Ou),e);if(E){const g=xu(E,i,!1,t);if(g&&j(t,g))return g}}else{let E;try{E=d(u,e,{extensions:[".json"]})}catch{E=d(h.join(u,ku),e)}if(E)return E}}catch{}}const l=gD(h.resolve(e),h.join("node_modules",o),t);if(!l||!tu(t,l).isDirectory())return;const f=h.join(l,Ou);if(j(t,f)){const d=xu(f,i,!1,t);if(d===!1)return;if(d&&j(t,d)&&tu(t,d).isFile())return d}const C=h.join(l,i),c=C.endsWith(".json");if(!c){const d=`${C}.json`;if(j(t,d))return d}if(j(t,C)){if(tu(t,C).isDirectory()){const d=h.join(C,Ou);if(j(t,d)){const g=xu(d,"",!0,t);if(g&&j(t,g))return g}const E=h.join(C,ku);if(j(t,E))return E}else if(c)return C}},"resolveExtendsPath"),ju=F((u,e)=>$u(h.relative(u,e)),"pathRelative"),xD=["files","include","exclude"],Qt=F((u,e,t,D)=>{const r=Yt(u,e,D);if(!r)throw new Error(`File '${u}' not found.`);if(t.has(r))throw new Error(`Circularity detected while resolving configuration: ${r}`);t.add(r);const n=h.dirname(r),o=OD(r,D,t);delete o.references;const{compilerOptions:i}=o;if(i){const{baseUrl:a}=i;a&&!a.startsWith(N)&&(i.baseUrl=O(h.relative(e,h.join(n,a)))||"./");let{outDir:l}=i;l&&(l.startsWith(N)||(l=h.relative(e,h.join(n,l))),i.outDir=O(l)||"./")}for(const a of xD){const l=o[a];l&&(o[a]=l.map(f=>f.startsWith(N)?f:O(h.relative(e,h.join(n,f)))))}return o},"resolveExtends"),Xt=["outDir","declarationDir"],OD=F((u,e,t=new Set)=>{let D;try{D=vD(u,e)||{}}catch{throw new Error(`Cannot resolve tsconfig at path: ${u}`)}if(typeof D!="object")throw new SyntaxError(`Failed to parse tsconfig at: ${u}`);const r=h.dirname(u);if(D.compilerOptions){const{compilerOptions:n}=D;n.paths&&!n.baseUrl&&(n[vu]=r)}if(D.extends){const n=Array.isArray(D.extends)?D.extends:[D.extends];delete D.extends;for(const o of n.reverse()){const i=Qt(o,r,new Set(t),e),a={...i,...D,compilerOptions:{...i.compilerOptions,...D.compilerOptions}};i.watchOptions&&(a.watchOptions={...i.watchOptions,...D.watchOptions}),D=a}}if(D.compilerOptions){const{compilerOptions:n}=D,o=["baseUrl","rootDir"];for(const i of o){const a=n[i];if(a&&!a.startsWith(N)){const l=h.resolve(r,a),f=ju(r,l);n[i]=f}}for(const i of Xt){let a=n[i];a&&(Array.isArray(D.exclude)||(D.exclude=[]),D.exclude.includes(a)||D.exclude.push(a),a.startsWith(N)||(a=$u(a)),n[i]=a)}}else D.compilerOptions={};if(D.include?(D.include=D.include.map(O),D.files&&delete D.files):D.files&&(D.files=D.files.map(n=>n.startsWith(N)?n:$u(n))),D.watchOptions){const{watchOptions:n}=D;n.excludeDirectories&&(n.excludeDirectories=n.excludeDirectories.map(o=>O(h.resolve(r,o))))}return D},"_parseTsconfig"),ou=F((u,e)=>{if(u.startsWith(N))return O(h.join(e,u.slice(N.length)))},"interpolateConfigDir"),ur=["outDir","declarationDir","outFile","rootDir","baseUrl","tsBuildInfoFile"],kD=F((u,e=new Map)=>{const t=h.resolve(u),D=OD(t,e),r=h.dirname(t),{compilerOptions:n}=D;if(n){for(const i of ur){const a=n[i];if(a){const l=ou(a,r);n[i]=l?ju(r,l):a}}for(const i of["rootDirs","typeRoots"]){const a=n[i];a&&(n[i]=a.map(l=>{const f=ou(l,r);return f?ju(r,f):l}))}const{paths:o}=n;if(o)for(const i of Object.keys(o))o[i]=o[i].map(a=>{var l;return(l=ou(a,r))!=null?l:a})}for(const o of xD){const i=D[o];i&&(D[o]=i.map(a=>{var l;return(l=ou(a,r))!=null?l:a}))}return D},"parseTsconfig"),Dr=F((u=process.cwd(),e="tsconfig.json",t=new Map)=>{const D=gD(O(u),e,t);if(!D)return null;const r=kD(D,t);return{path:D,config:r}},"getTsconfig"),er=/\*/g,jD=F((u,e)=>{const t=u.match(er);if(t&&t.length>1)throw new Error(e)},"assertStarCount"),tr=F(u=>{if(u.includes("*")){const[e,t]=u.split("*");return{prefix:e,suffix:t}}return u},"parsePattern"),rr=F(({prefix:u,suffix:e},t)=>t.startsWith(u)&&t.endsWith(e),"isPatternMatch"),nr=F((u,e,t)=>Object.entries(u).map(([D,r])=>(jD(D,`Pattern '${D}' can have at most one '*' character.`),{pattern:tr(D),substitutions:r.map(n=>{if(jD(n,`Substitution '${n}' in pattern '${D}' can have at most one '*' character.`),!e&&!wu.test(n))throw new Error("Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?");return h.resolve(t,n)})})),"parsePaths"),or=F(u=>{const{compilerOptions:e}=u.config;if(!e)return null;const{baseUrl:t,paths:D}=e;if(!t&&!D)return null;const r=vu in e&&e[vu],n=h.resolve(h.dirname(u.path),t||r||"."),o=D?nr(D,t,n):[];return i=>{if(wu.test(i))return[];const a=[];for(const c of o){if(c.pattern===i)return c.substitutions.map(O);typeof c.pattern!="string"&&a.push(c)}let l,f=-1;for(const c of a)rr(c.pattern,i)&&c.pattern.prefix.length>f&&(f=c.pattern.prefix.length,l=c);if(!l)return t?[O(h.join(n,i))]:[];const C=i.slice(l.pattern.prefix.length,i.length-l.pattern.suffix.length);return l.substitutions.map(c=>O(c.replace("*",C)))}},"createPathsMatcher"),TD=F(u=>{let e="";for(let t=0;tMath.floor(Math.random()*26),"m"),lr=F(u=>Array.from({length:u},()=>String.fromCodePoint(ar()+(Math.random()>.5?sr:ir))).join(""),"S"),cr=F((u=te)=>{const e=process.execPath;if(u.existsSync(e))return!u.existsSync(TD(e));const t=`/${lr(10)}`;u.writeFileSync(t,"");const D=!u.existsSync(TD(t));return u.unlinkSync(t),D},"l"),{join:su}=h.posix,Tu={ts:[".ts",".tsx",".d.ts"],cts:[".cts",".d.cts"],mts:[".mts",".d.mts"]},Fr=F(u=>{const e=[...Tu.ts],t=[...Tu.cts],D=[...Tu.mts];return u!=null&&u.allowJs&&(e.push(".js",".jsx"),t.push(".cjs"),D.push(".mjs")),[...e,...t,...D]},"getSupportedExtensions"),Cr=F(u=>{const e=[];if(!u)return e;const{outDir:t,declarationDir:D}=u;return t&&e.push(t),D&&e.push(D),e},"getDefaultExcludeSpec"),SD=F(u=>u.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),"escapeForRegexp"),fr=["node_modules","bower_components","jspm_packages"],Su=`(?!(${fr.join("|")})(/|$))`,pr=/(?:^|\/)[^.*?]+$/,PD="**/*",iu="[^/]",Pu="[^./]",ND=process.platform==="win32";F(({config:u,path:e},t=cr())=>{if("extends"in u)throw new Error("tsconfig#extends must be resolved. Use getTsconfig or parseTsconfig to resolve it.");if(!h.isAbsolute(e))throw new Error("The tsconfig path must be absolute");ND&&(e=O(e));const D=h.dirname(e),{files:r,include:n,exclude:o,compilerOptions:i}=u,a=r?.map(E=>su(D,E)),l=Fr(i),f=t?"":"i",C=(o||Cr(i)).map(E=>{const g=su(D,E),b=SD(g).replaceAll(String.raw`\*\*/`,"(.+/)?").replaceAll(String.raw`\*`,`${iu}*`).replaceAll(String.raw`\?`,iu);return new RegExp(`^${b}($|/)`,f)}),c=r||n?n:[PD],d=c?c.map(E=>{let g=su(D,E);pr.test(g)&&(g=su(g,PD));const b=SD(g).replaceAll(String.raw`/\*\*`,`(/${Su}${Pu}${iu}*)*?`).replaceAll(/(\/)?\\\*/g,(k,v)=>{const p=`(${Pu}|(\\.(?!min\\.js$))?)*`;return v?`/${Su}${Pu}${p}`:p}).replaceAll(/(\/)?\\\?/g,(k,v)=>{const p=iu;return v?`/${Su}${p}`:p});return new RegExp(`^${b}$`,f)}):void 0;return E=>{if(!h.isAbsolute(E))throw new Error("filePath must be absolute");if(ND&&(E=O(E)),a!=null&&a.includes(E)||!(!l.some(g=>E.endsWith(g))||C.some(g=>g.test(E)))&&d&&d.some(g=>g.test(E)))return u}},"createFilesMatcher");const ID="resolve-tsconfig-paths",Er=s(u=>u[0]===".","isRelative"),dr=s(u=>u[0]==="/"||/^[\s\S]:/.test(u),"isAbsolute"),hr=s(u=>u[0]==="#","isImports"),RD=s(u=>{const e=or(u);return e?{name:ID,async resolveId(t,D,r){if(!D||Er(t)||dr(t)||hr(t)||t.startsWith("\0"))return null;const n=e(t);for(const o of n){const i=await this.resolve(o,D,{skipSelf:!0,...r});if(i)return i}return null}}:{name:ID}},"resolveTsconfigPaths"),_D=/^#!.*/,gr=s(()=>({name:"strip-hashbang",transform:s(u=>{if(!_D.test(u))return null;const e=new qu(u);return e.replace(_D,""),{code:e.toString(),map:e.generateMap({hires:!0})}},"transform")}),"stripHashbang"),mr=["peerDependencies","dependencies","optionalDependencies"],Nu="@types/",LD=s((u,e,t=!1)=>{const D=[],{devDependencies:r}=u;for(const n of mr){const o=u[n];if(!o)continue;const i=Object.keys(o);for(const a of i)if(!(a in e))if(a.startsWith(Nu)){if(t){let l=a.slice(Nu.length);l.includes("__")&&(l=`@${l.replace("__","/")}`),D.push(l)}}else{if(r&&t){const l=Nu+a.replace("@","").replace("/","__");r[l]&&!(l in o)&&console.warn(`Recommendation: "${l}" is externalized because "${a}" is in "${n}". Place "${l}" in "${n}" as well so users don't have missing types.`)}D.push(a)}}return D.flatMap(n=>[n,new RegExp(`^${n}/`)])},"getExternalDependencies"),MD=s(u=>u.split("?")[0],"stripQuery"),WD={type:s(async(u,e)=>{const[t,D]=await Promise.all([Promise.resolve().then(function(){return require("./rollup-plugin-dts-wFwILfkI.js")}),Promise.resolve().then(function(){return require("./local-typescript-loader-DFqhlpcR.js")}).then(function(r){return r.localTypescriptLoader})]);return{input:[],preserveEntrySignatures:"strict",plugins:[fD(u),...e?[RD(e)]:[],pD(),t.default({respectExternal:!1,compilerOptions:{composite:!1,preserveSymlinks:!1,module:D.default.ModuleKind.Preserve,moduleResolution:D.default.ModuleResolutionKind.Bundler},tsconfig:e?.path})],output:[],external:[]}},"type"),app:s((u,e,t,D,r)=>{const n={target:u.target,tsconfigRaw:r?.config};return{input:[],preserveEntrySignatures:"strict",plugins:[fD(u),...r?[RD(r)]:[],pD(),XD({entries:e}),HD({extensions:[".mjs",".js",".ts",".jsx",".tsx",".json"],exportConditions:u.exportCondition}),...Object.keys(t).length>0?[Mu({preventAssignment:!0,objectGuards:!0,values:t})]:[],gr(),YD(),QD(),Pt(n),Tt(),ue({warnOnError:!0}),...u.minify?[It(n)]:[],Rt(D)],output:[],external:[]}},"app")},Br=s(async(u,e,t,D,r,n,o)=>{const i=t.filter(({exportEntry:c})=>c.isExecutable).map(({exportEntry:c})=>c.outputPath),a=Object.create(null),l=Object.fromEntries(D.env.map(({key:c,value:d})=>[`process.env.${c}`,JSON.stringify(d)])),f=LD(n,r),C=LD(n,r,!0);for(const{input:c,srcExtension:d,distExtension:E,exportEntry:g}of t){if(g.type==="types"){let B=a.type;B||(B=await WD.type(D,o),B.external=C,a.type=B),B.input.includes(c)||B.input.push(c),B.output.push({dir:e,entryFileNames:s(m=>S.realpathSync.native(MD(m.facadeModuleId)).slice(u.length,-d.length)+E,"entryFileNames"),exports:"auto",format:"esm"});continue}let b=a.app;b||(b=WD.app(D,r,l,i,o),b.external=f,a.app=b),b.input.includes(c)||b.input.push(c);const k=b.output,v=h.extname(g.outputPath),p=`${g.type}-${v}`;if(!k[p]){const B={dir:e,exports:"auto",format:g.type,chunkFileNames:`[name]-[hash]${v}`,sourcemap:D.sourcemap,plugins:[St(g.type==="module")],entryFileNames:s(m=>{const w=S.realpathSync.native(MD(m.facadeModuleId)).slice(u.length);return h.join(h.dirname(w),m.name)+E},"entryFileNames")};k.push(B),k[p]=B}}return a},"getRollupConfigs"),Ar=s(u=>{if(!u)return Dr();const e=h.resolve(u),t=kD(e);return{path:e,config:t}},"getTsconfig");let _=!0;const V=typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{};let J=0;if(V.process&&V.process.env&&V.process.stdout){const{FORCE_COLOR:u,NODE_DISABLE_COLORS:e,NO_COLOR:t,TERM:D,COLORTERM:r}=V.process.env;e||t||u==="0"?_=!1:u==="1"||u==="2"||u==="3"?_=!0:D==="dumb"?_=!1:"CI"in V.process.env&&["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE","DRONE"].some(n=>n in V.process.env)?_=!0:_=process.stdout.isTTY,_&&(process.platform==="win32"||r&&(r==="truecolor"||r==="24bit")?J=3:D&&(D.endsWith("-256color")||D.endsWith("256"))?J=2:J=1)}let UD={enabled:_,supportLevel:J};function br(u,e,t=1){const D=`\x1B[${u}m`,r=`\x1B[${e}m`,n=new RegExp(`\\x1b\\[${e}m`,"g");return o=>UD.enabled&&UD.supportLevel>=t?D+(""+o).replace(n,D)+r:""+o}s(br,"kolorist");const yr=br(90,39),wr=s(()=>new Date().toLocaleTimeString(),"currentTime"),au=s((...u)=>console.log(`[${yr(wr())}]`,...u),"log"),$r=s(async u=>{await hu(u)&&await S.promises.rm(u,{recursive:!0,force:!0})},"cleanDist"),{stringify:qD}=JSON,L=At({name:"pkgroll",version:bt,flags:{src:{type:String,description:"Source directory",default:"./src"},dist:{type:String,description:"Distribution directory",default:"./dist"},minify:{type:Boolean,description:"Minify output",alias:"m",default:!1},target:{type:[String],default:[`node${process.versions.node}`],description:"Environments to support. `target` in tsconfig.json is automatically added. Defaults to the current Node.js version.",alias:"t"},tsconfig:{type:String,description:"Custom tsconfig.json file path",alias:"p"},watch:{type:Boolean,description:"Watch mode",alias:"w",default:!1},env:{type:[u=>{const[e,t]=u.split("=");return{key:e,value:t}}],description:"Compile-time environment variables (eg. --env.NODE_ENV=production)"},exportCondition:{type:[String],description:"Export conditions for resolving dependency export and import maps (eg. --export-condition=node)"},sourcemap:{type:s(u=>{if(u==="")return!0;if(u==="inline")return u;throw new Error(`Invalid sourcemap option ${qD(u)}`)},"type"),description:"Sourcemap generation. Provide `inline` option for inline sourcemap (eg. --sourcemap, --sourcemap=inline)"},cleanDist:{type:Boolean,description:"Clean dist before bundling",default:!1}},help:{description:"Minimalistic package bundler",render:s((u,e)=>(e.flagOperator=t=>t.name==="env"?".key=":" ",e.render(u)),"render")}}),VD=process.cwd(),zD=eu(L.flags.src,!0),Z=eu(L.flags.dist,!0),GD=Ar(L.flags.tsconfig),KD=GD?.config.compilerOptions?.target;KD&&L.flags.target.push(KD),(async()=>{const u=await yt(VD);let e=$t(u);if(e=e.filter(r=>{const n=r.outputPath.startsWith(Z);return n||console.warn(`Ignoring entry outside of ${Z} directory: package.json#${r.from}=${qD(r.outputPath)}`),n}),e.length===0)throw new Error("No export entries found in package.json");const t=await Promise.all(e.map(async r=>({...await jt(r,zD,Z),exportEntry:r}))),D=await Br(eu(S.realpathSync.native(zD),!0),Z,t,L.flags,vt(u,VD),u,GD);L.flags.cleanDist&&await $r(Z),L.flags.watch?(au("Watch initialized"),Object.values(D).map(async r=>{Lu.watch(r).on("event",async o=>{o.code==="BUNDLE_START"&&au("Building",...Array.isArray(o.input)?o.input:[o.input]),o.code==="BUNDLE_END"&&(await Promise.all(r.output.map(i=>o.result.write(i))),au("Built",...Array.isArray(o.input)?o.input:[o.input])),o.code==="ERROR"&&au("Error:",o.error.message)})})):await Promise.all(Object.values(D).map(async r=>{const n=await Lu.rollup(r);return Promise.all(r.output.map(o=>n.write(o)))}))})().catch(u=>{console.error(u),process.exit(1)}); diff --git a/PATCHES.md b/PATCHES.md new file mode 100644 index 00000000..c0e12344 --- /dev/null +++ b/PATCHES.md @@ -0,0 +1,7 @@ +# Notes about dependency patches in [package.json](/package.json) + +Here we collect reasons and write explanations about why some resolutions or patches have been added. + +### pkgroll + +1. Skip libchecking while generating type declarations because we never bundle `@types` by disabling `respectExternal` ([read more](https://github.com/Swatinem/rollup-plugin-dts?tab=readme-ov-file#what-to-expect)) diff --git a/package.json b/package.json index dae32043..476c74c0 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "graphql-ws", "version": "5.16.2", "description": "Coherent, zero-dependency, lazy, simple, GraphQL over WebSocket Protocol compliant server and client", + "type": "module", "repository": { "type": "git", "url": "git+https://github.com/enisdenjo/graphql-ws.git" @@ -11,59 +12,58 @@ "license": "MIT", "packageManager": "yarn@4.6.0", "engines": { - "node": ">=10" + "node": ">=20" }, - "main": "lib/index.js", - "module": "lib/index.mjs", + "main": "dist/index.js", "exports": { ".": { - "types": "./lib/index.d.ts", - "require": "./lib/index.js", - "import": "./lib/index.mjs", - "browser": "./umd/graphql-ws.js" + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.js", + "browser": "./dist/client.js" }, - "./lib/use/ws": { - "types": "./lib/use/ws.d.ts", - "require": "./lib/use/ws.js", - "import": "./lib/use/ws.mjs" + "./client": { + "types": "./dist/client.d.ts", + "require": "./dist/client.cjs", + "import": "./dist/client.js", + "browser": "./dist/client.js" }, - "./lib/use/uWebSockets": { - "types": "./lib/use/uWebSockets.d.ts", - "require": "./lib/use/uWebSockets.js", - "import": "./lib/use/uWebSockets.mjs" + "./use/ws": { + "types": "./dist/use/ws.d.ts", + "require": "./dist/use/ws.cjs", + "import": "./dist/use/ws.js" }, - "./lib/use/@fastify/websocket": { - "types": "./lib/use/@fastify/websocket.d.ts", - "require": "./lib/use/@fastify/websocket.js", - "import": "./lib/use/@fastify/websocket.mjs" + "./use/uWebSockets": { + "types": "./dist/use/uWebSockets.d.ts", + "require": "./dist/use/uWebSockets.cjs", + "import": "./dist/use/uWebSockets.js" }, - "./lib/use/fastify-websocket": { - "types": "./lib/use/fastify-websocket.d.ts", - "require": "./lib/use/fastify-websocket.js", - "import": "./lib/use/fastify-websocket.mjs" + "./use/@fastify/websocket": { + "types": "./dist/use/@fastify/websocket.d.ts", + "require": "./dist/use/@fastify/websocket.cjs", + "import": "./dist/use/@fastify/websocket.js" }, - "./lib/use/bun": { - "bun": "./lib/use/bun.mjs", - "types": "./lib/use/bun.d.ts", - "require": "./lib/use/bun.js", - "import": "./lib/use/bun.mjs" + "./use/bun": { + "types": "./dist/use/bun.d.ts", + "require": "./dist/use/bun.cjs", + "import": "./dist/use/bun.js" }, - "./lib/use/deno": { - "types": "./lib/use/deno.d.ts", - "require": "./lib/use/deno.js", - "import": "./lib/use/deno.mjs" + "./use/deno": { + "types": "./dist/use/deno.d.ts", + "require": "./dist/use/deno.cjs", + "import": "./dist/use/deno.js" }, "./package.json": "./package.json" }, - "browser": "umd/graphql-ws.js", - "types": "lib/index.d.ts", + "browser": "./dist/client.js", + "types": "./dist/index.d.ts", "sideEffects": [ "umd/*" ], "files": [ "LICENSE.md", "PROTOCOL.md", - "lib", + "dist", "umd", "README.md" ], @@ -83,54 +83,41 @@ "uwebsockets" ], "scripts": { - "build": "yarn build:esm && yarn build:cjs && yarn build:umd && yarn postbuild", - "build:cjs": "tsc -b tsconfig.cjs.json", - "build:esm": "tsc -b tsconfig.esm.json && node scripts/esm-post-process.mjs", - "build:umd": "rollup --bundleConfigAsCjs --config rollup.config.ts --configPlugin typescript && gzip umd/graphql-ws.min.js -c > umd/graphql-ws.min.js.gz", "changeset": "changeset", "check:format": "prettier --check .", - "check:lint": "eslint 'src'", - "check:type": "tsc --noEmit", "format": "yarn check:format --write", - "gendocs": "typedoc --options typedoc.js src/ && node scripts/post-gendocs.mjs", - "postbuild": "node scripts/fix-declaration-directives.mjs", + "check:types": "tsc --noEmit", "test": "vitest", - "release": "yarn build && yarn changeset publish" + "build": "pkgroll --clean-dist && rollup -c rollup.config.js && gzip umd/graphql-ws.min.js -c > umd/graphql-ws.min.js.gz", + "prepack": "yarn build", + "gendocs": "typedoc --options typedoc.js src/ && node scripts/post-gendocs.js" }, "peerDependencies": { - "graphql": ">=0.11 <=16" + "graphql": "^15.10.1 || ^16.10.0" }, "devDependencies": { "@changesets/changelog-github": "^0.5.0", "@changesets/cli": "^2.27.11", - "@fastify/websocket": "^9.0.0", - "@ianvs/prettier-plugin-sort-imports": "^4.4.0", + "@fastify/websocket": "^11.0.2", + "@ianvs/prettier-plugin-sort-imports": "^4.4.1", "@rollup/plugin-terser": "^0.4.4", - "@rollup/plugin-typescript": "^11.1.6", - "@types/eslint": "^8.56.10", + "@tsconfig/strictest": "^2.0.5", "@types/glob": "^8.1.0", - "@types/ws": "^8.5.10", - "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", - "bun-types": "^1.1.4", - "eslint": "^8.57.0", - "fastify": "^4.26.2", - "fastify-websocket": "4.2.2", - "glob": "^10.3.12", - "graphql": "^16.8.1", - "jsdom": "^25.0.1", + "@types/ws": "^8.5.13", + "bun-types": "^1.1.43", + "fastify": "^5.2.1", + "glob": "^11.0.1", + "graphql": "^16.10.0", + "jsdom": "^26.0.0", + "pkgroll": "patch:pkgroll@npm%3A2.6.1#~/.yarn/patches/pkgroll-npm-2.6.1-193e78e84e.patch", "prettier": "^3.4.2", "prettier-plugin-sh": "^0.14.0", - "replacestream": "^4.0.3", - "rollup": "^4.14.3", - "subscriptions-transport-ws": "^0.11.0", - "tslib": "^2.6.2", - "typedoc": "^0.25.13", - "typedoc-plugin-markdown": "^3.17.1", - "typescript": "^5.4.5", - "uWebSockets.js": "uNetworking/uWebSockets.js#v20.43.0", + "rollup": "^4.30.1", + "typedoc": "^0.27.6", + "typedoc-plugin-markdown": "^4.4.1", + "typescript": "^5.7.3", + "uWebSockets.js": "uNetworking/uWebSockets.js#v20.51.0", "vitest": "^2.1.8", - "ws": "8.12.0", - "ws7": "npm:ws@^7.5.9" + "ws": "^8.18.0" } } diff --git a/rollup.config.ts b/rollup.config.js similarity index 73% rename from rollup.config.ts rename to rollup.config.js index d30b58e5..f18fb1ae 100644 --- a/rollup.config.ts +++ b/rollup.config.js @@ -1,9 +1,7 @@ import terser from '@rollup/plugin-terser'; -import typescript from '@rollup/plugin-typescript'; export default { - input: './src/client.ts', - plugins: [typescript()], + input: './dist/client.js', output: [ { file: './umd/graphql-ws.js', diff --git a/scripts/esm-post-process.mjs b/scripts/esm-post-process.mjs deleted file mode 100644 index 80f567bc..00000000 --- a/scripts/esm-post-process.mjs +++ /dev/null @@ -1,66 +0,0 @@ -import fs from 'fs/promises'; -import path from 'path'; -import { glob, globIterate } from 'glob'; - -const rootDir = 'lib'; - -(async () => { - const matches = await glob(`${rootDir}/**/*.js`); - - for (const path of matches) { - await buildEsm(path); - } - - // we delete after build to not mess with import/export statement replacer - for (const path of matches) { - await fs.unlink(path); - } -})(); - -(async () => { - for await (const path of globIterate(`${rootDir}/**/*.d.ts`)) { - await buildEsm(path); - } - - // we dont delete raw d.ts files, they're still needed for imports/exports -})(); - -/** - * @param {string} filePath - */ -async function buildEsm(filePath) { - const pathParts = filePath.split('.'); - const fileExt = pathParts.pop(); - - const file = await fs.readFile(path.join(process.cwd(), filePath)); - let content = file.toString(); - - if (fileExt === 'js' || fileExt === 'ts') { - // add .mjs to all import/export statements, also in the type definitions - for (const match of content.matchAll(/from '(\.?\.\/[^']*)'/g)) { - const [statement, relImportPath] = match; - const absImportPath = path.resolve( - process.cwd(), - path.dirname(filePath), - relImportPath, - ); - - try { - await fs.stat(absImportPath + '.js'); - - // file import - content = content.replace(statement, `from '${relImportPath}.mjs'`); - } catch { - // directory import - content = content.replace( - statement, - `from '${relImportPath}/index.mjs'`, - ); - } - } - } - - // write to file with prepended "m" in extension (.js -> .mjs, .ts -> .mts) - const esmFilePath = pathParts.join('.') + '.m' + fileExt; - await fs.writeFile(esmFilePath, content); -} diff --git a/scripts/fix-declaration-directives.mjs b/scripts/fix-declaration-directives.mjs deleted file mode 100644 index 8eb05af5..00000000 --- a/scripts/fix-declaration-directives.mjs +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Adding Bun's typings through the tripple-slash directive adds it everywhere - * where Node primitives are used (probably because Bun and Node share interfaces). - * - * This script removes the bun-typings directive everywhere except for Bun. - */ -import fs from 'fs/promises'; -import { glob } from 'glob'; - -(async () => { - const matches = await glob('lib/**/*.d.?(m)ts'); - const notBunMatches = matches.filter((match) => !match.includes('bun.d')); - - const directive = '/// \n'; - - for (const path of notBunMatches) { - const src = (await fs.readFile(path)).toString(); - if (src.includes(src)) { - await fs.writeFile(path, src.replace(directive, '')); - } - } -})(); diff --git a/scripts/post-gendocs.mjs b/scripts/post-gendocs.js similarity index 85% rename from scripts/post-gendocs.mjs rename to scripts/post-gendocs.js index 629caa10..f647e64f 100644 --- a/scripts/post-gendocs.mjs +++ b/scripts/post-gendocs.js @@ -12,7 +12,7 @@ const docsDir = path.join('website', 'src', 'pages', 'docs'); }); /** - * Fixes links in markdown files by removing the `.md` extension. + * Fixes links in markdown files by removing the `.md` extension and by removing the last `/index` if available. * * @param {string} dirPath */ @@ -28,8 +28,14 @@ async function fixLinksInDir(dirPath) { continue; } const contents = await fsp.readFile(filePath); - const src = contents.toString(); - await fsp.writeFile(filePath, src.replaceAll('.md', '')); + let src = contents.toString(); + + // remove .md extensions everywhere + src = src.replaceAll('.md', ''); + // remove /index from all links `](/some/where/index)` -> `](/some/where)` + src = src.replaceAll(/]\((.*)\/index\)/g, ']($1)'); + + await fsp.writeFile(filePath, src); } } diff --git a/src/client.ts b/src/client.ts index b5a3f6b0..96618647 100644 --- a/src/client.ts +++ b/src/client.ts @@ -4,12 +4,13 @@ * */ -import { ExecutionResult } from 'graphql'; import { CloseCode, ConnectionAckMessage, ConnectionInitMessage, Disposable, + FormattedExecutionPatchResult, + FormattedExecutionResult, GRAPHQL_TRANSPORT_WS_PROTOCOL, ID, JSONMessageReplacer, @@ -370,24 +371,6 @@ export interface ClientOptions< * @default 'Only `CloseEvent`s' */ shouldRetry?: (errOrCloseEvent: unknown) => boolean; - /** - * @deprecated Use `shouldRetry` instead. - * - * Check if the close event or connection error is fatal. If you return `true`, - * the client will fail immediately without additional retries; however, if you - * return `false`, the client will keep retrying until the `retryAttempts` have - * been exceeded. - * - * The argument is either a WebSocket `CloseEvent` or an error thrown during - * the connection phase. - * - * Beware, the library classifies a few close events as fatal regardless of - * what is returned. They are listed in the documentation of the `retryAttempts` - * option. - * - * @default 'Any non-`CloseEvent`' - */ - isFatalConnectionProblem?: (errOrCloseEvent: unknown) => boolean; /** * Register listeners before initialising the client. This way * you can ensure to catch all client relevant emitted events. @@ -439,7 +422,10 @@ export interface Client extends Disposable { */ subscribe, Extensions = unknown>( payload: SubscribePayload, - sink: Sink>, + sink: Sink< + | FormattedExecutionResult + | FormattedExecutionPatchResult + >, ): () => void; /** * Subscribes and iterates over emitted results from the WebSocket @@ -447,7 +433,10 @@ export interface Client extends Disposable { */ iterate, Extensions = unknown>( payload: SubscribePayload, - ): AsyncIterableIterator>; + ): AsyncIterableIterator< + | FormattedExecutionResult + | FormattedExecutionPatchResult + >; /** * Terminates the WebSocket abruptly and immediately. * @@ -496,7 +485,6 @@ export function createClient< ); }, shouldRetry = isLikeCloseEvent, - isFatalConnectionProblem, on, webSocketImpl, /** @@ -718,7 +706,7 @@ export function createClient< socket.close( CloseCode.InternalClientError, limitCloseReason( - err instanceof Error ? err.message : new Error(err).message, + err instanceof Error ? err.message : String(err), 'Internal client error', ), ); @@ -774,7 +762,7 @@ export function createClient< socket.close( CloseCode.BadResponse, limitCloseReason( - err instanceof Error ? err.message : new Error(err).message, + err instanceof Error ? err.message : String(err), 'Bad response', ), ); @@ -857,9 +845,6 @@ export function createClient< // throw non-retryable connection problems if (!shouldRetry(errOrCloseEvent)) throw errOrCloseEvent; - // @deprecated throw fatal connection problems immediately - if (isFatalConnectionProblem?.(errOrCloseEvent)) throw errOrCloseEvent; - // looks good, start retrying return (retrying = true); } @@ -983,7 +968,7 @@ export function createClient< on: emitter.on, subscribe, iterate(request) { - const pending: ExecutionResult[] = []; + const pending: any[] = []; const deferred = { done: false, error: null as unknown, @@ -993,8 +978,7 @@ export function createClient< }; const dispose = subscribe(request, { next(val) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any -- payload will fit type - pending.push(val as any); + pending.push(val); deferred.resolve(); }, error(err) { @@ -1071,8 +1055,8 @@ export function createClient< * can happen on iOS Safari, see: https://github.com/enisdenjo/graphql-ws/discussions/290. */ export class TerminatedCloseEvent extends Error { - public name = 'TerminatedCloseEvent'; - public message = '4499: Terminated'; + public override name = 'TerminatedCloseEvent'; + public override message = '4499: Terminated'; public code = 4499; public reason = 'Terminated'; public wasClean = false; diff --git a/src/common.ts b/src/common.ts index b1dfa7b1..cf7a9b4b 100644 --- a/src/common.ts +++ b/src/common.ts @@ -4,8 +4,8 @@ * */ -import { GraphQLError } from 'graphql'; -import { areGraphQLErrors, extendedTypeof, isObject } from './utils'; +import type { GraphQLError, GraphQLFormattedError } from 'graphql'; +import { areGraphQLFormattedErrors, extendedTypeof, isObject } from './utils'; /** * The WebSocket sub-protocol used for the [GraphQL over WebSocket Protocol](https://github.com/graphql/graphql-over-http/blob/main/rfcs/GraphQLOverWebSocket.md). @@ -128,10 +128,10 @@ export interface SubscribeMessage { /** @category Common */ export interface SubscribePayload { - readonly operationName?: string | null; + readonly operationName?: string | null | undefined; readonly query: string; - readonly variables?: Record | null; - readonly extensions?: Record | null; + readonly variables?: Record | null | undefined; + readonly extensions?: Record | null | undefined; } /** @category Common */ @@ -139,10 +139,10 @@ export interface ExecutionResult< Data = Record, Extensions = Record, > { - errors?: ReadonlyArray; - data?: Data | null; - hasNext?: boolean; - extensions?: Extensions; + errors?: ReadonlyArray | undefined; + data?: Data | null | undefined; + hasNext?: boolean | undefined; + extensions?: Extensions | undefined; } /** @category Common */ @@ -150,26 +150,50 @@ export interface ExecutionPatchResult< Data = unknown, Extensions = Record, > { - errors?: ReadonlyArray; - data?: Data | null; - path?: ReadonlyArray; - label?: string; + errors?: ReadonlyArray | undefined; + data?: Data | null | undefined; + path?: ReadonlyArray | undefined; + label?: string | undefined; hasNext: boolean; - extensions?: Extensions; + extensions?: Extensions | undefined; +} + +/** @category Common */ +export interface FormattedExecutionResult< + Data = Record, + Extensions = Record, +> { + errors?: ReadonlyArray | undefined; + data?: Data | null | undefined; + hasNext?: boolean | undefined; + extensions?: Extensions | undefined; +} + +/** @category Common */ +export interface FormattedExecutionPatchResult< + Data = unknown, + Extensions = Record, +> { + errors?: ReadonlyArray | undefined; + data?: Data | null | undefined; + path?: ReadonlyArray | undefined; + label?: string | undefined; + hasNext: boolean; + extensions?: Extensions | undefined; } /** @category Common */ export interface NextMessage { readonly id: ID; readonly type: MessageType.Next; - readonly payload: ExecutionResult | ExecutionPatchResult; + readonly payload: FormattedExecutionResult | FormattedExecutionPatchResult; } /** @category Common */ export interface ErrorMessage { readonly id: ID; readonly type: MessageType.Error; - readonly payload: readonly GraphQLError[]; + readonly payload: readonly GraphQLFormattedError[]; } /** @category Common */ @@ -354,7 +378,7 @@ export function validateMessage(val: unknown): Message { ); } - if (!areGraphQLErrors(val.payload)) { + if (!areGraphQLFormattedErrors(val.payload)) { throw new Error( `"${ val.type @@ -393,22 +417,6 @@ export function validateMessage(val: unknown): Message { return val as unknown as Message; } -/** - * Checks if the provided value is a valid GraphQL over WebSocket message. - * - * @deprecated Use `validateMessage` instead. - * - * @category Common - */ -export function isMessage(val: unknown): val is Message { - try { - validateMessage(val); - return true; - } catch { - return false; - } -} - /** * Function for transforming values within a message during JSON parsing * The values are produced by parsing the incoming raw JSON. diff --git a/src/server.ts b/src/server.ts index ca88a9b4..80710551 100644 --- a/src/server.ts +++ b/src/server.ts @@ -6,42 +6,38 @@ import { ExecutionArgs, + FormattedExecutionResult, getOperationAST, GraphQLError, execute as graphqlExecute, + GraphQLFormattedError, GraphQLSchema, subscribe as graphqlSubscribe, validate as graphqlValidate, OperationTypeNode, parse, - SubscriptionArgs, + versionInfo, } from 'graphql'; import { CloseCode, - CompleteMessage, ConnectionInitMessage, - ErrorMessage, ExecutionPatchResult, ExecutionResult, + FormattedExecutionPatchResult, GRAPHQL_TRANSPORT_WS_PROTOCOL, ID, JSONMessageReplacer, JSONMessageReviver, Message, MessageType, - NextMessage, parseMessage, PingMessage, PongMessage, stringifyMessage, SubscribeMessage, + SubscribePayload, } from './common'; -import { - areGraphQLErrors, - isAsyncGenerator, - isAsyncIterable, - isObject, -} from './utils'; +import { isAsyncGenerator, isAsyncIterable, isObject } from './utils'; /** @category Server */ export type OperationResult = @@ -96,6 +92,7 @@ export interface ServerOptions< * in the close event reason. */ schema?: + | undefined | GraphQLSchema | (( ctx: Context, @@ -122,6 +119,7 @@ export interface ServerOptions< * in subscriptions here: https://github.com/graphql/graphql-js/issues/894. */ context?: + | undefined | GraphQLExecutionContextValue | (( ctx: Context, @@ -139,12 +137,14 @@ export interface ServerOptions< * missing the `rootValue` field, the relevant operation root * will be used instead. */ - roots?: { - [operation in OperationTypeNode]?: Record< - string, - NonNullable - >; - }; + roots?: + | undefined + | { + [operation in OperationTypeNode]?: Record< + string, + NonNullable + >; + }; /** * A custom GraphQL validate function allowing you to apply your * own validation rules. @@ -158,7 +158,7 @@ export interface ServerOptions< * Throwing an error from within this function will close the socket * with the `Error` message in the close event reason. */ - validate?: typeof graphqlValidate; + validate?: undefined | typeof graphqlValidate; /** * Is the `execute` function from GraphQL which is * used to execute the query and mutation operations. @@ -167,7 +167,7 @@ export interface ServerOptions< * close the socket with the `Error` message * in the close event reason. */ - execute?: (args: ExecutionArgs) => OperationResult; + execute?: undefined | ((args: ExecutionArgs) => OperationResult); /** * Is the `subscribe` function from GraphQL which is * used to execute the subscription operation. @@ -176,7 +176,7 @@ export interface ServerOptions< * close the socket with the `Error` message * in the close event reason. */ - subscribe?: (args: ExecutionArgs) => OperationResult; + subscribe?: undefined | ((args: ExecutionArgs) => OperationResult); /** * The amount of time for which the server will wait * for `ConnectionInit` message. @@ -190,7 +190,7 @@ export interface ServerOptions< * * @default 3_000 // 3 seconds */ - connectionInitWaitTimeout?: number; + connectionInitWaitTimeout?: undefined | number; /** * Is the connection callback called when the * client requests the connection initialisation @@ -215,13 +215,15 @@ export interface ServerOptions< * close the socket with the `Error` message * in the close event reason. */ - onConnect?: ( - ctx: Context, - ) => - | Promise | boolean | void> - | Record - | boolean - | void; + onConnect?: + | undefined + | (( + ctx: Context, + ) => + | Promise | boolean | void> + | Record + | boolean + | void); /** * Called when the client disconnects for whatever reason after * he successfully went through the connection initialisation phase. @@ -238,11 +240,13 @@ export interface ServerOptions< * For tracking socket closures at any point in time, regardless * of the connection state - consider using the `onClose` callback. */ - onDisconnect?: ( - ctx: Context, - code?: number, - reason?: string, - ) => Promise | void; + onDisconnect?: + | undefined + | (( + ctx: Context, + code?: number, + reason?: string, + ) => Promise | void); /** * Called when the socket closes for whatever reason, at any * point in time. Provides the close event too. Beware @@ -257,11 +261,13 @@ export interface ServerOptions< * the connection initialisation or not. `onConnect` might not * called before the `onClose`. */ - onClose?: ( - ctx: Context, - code?: number, - reason?: string, - ) => Promise | void; + onClose?: + | undefined + | (( + ctx: Context, + code?: number, + reason?: string, + ) => Promise | void); /** * The subscribe callback executed right after * acknowledging the request before any payload @@ -291,14 +297,17 @@ export interface ServerOptions< * close the socket with the `Error` message * in the close event reason. */ - onSubscribe?: ( - ctx: Context, - message: SubscribeMessage, - ) => - | Promise - | ExecutionArgs - | readonly GraphQLError[] - | void; + onSubscribe?: + | undefined + | (( + ctx: Context, + id: string, + payload: SubscribePayload, + ) => + | Promise + | ExecutionArgs + | readonly GraphQLError[] + | void); /** * Executed after the operation call resolves. For streaming * operations, triggering this callback does not necessarily @@ -319,12 +328,14 @@ export interface ServerOptions< * close the socket with the `Error` message * in the close event reason. */ - onOperation?: ( - ctx: Context, - message: SubscribeMessage, - args: ExecutionArgs, - result: OperationResult, - ) => Promise | OperationResult | void; + onOperation?: + | undefined + | (( + ctx: Context, + id: string, + args: ExecutionArgs, + result: OperationResult, + ) => Promise | OperationResult | void); /** * Executed after an error occurred right before it * has been dispatched to the client. @@ -338,11 +349,16 @@ export interface ServerOptions< * close the socket with the `Error` message * in the close event reason. */ - onError?: ( - ctx: Context, - message: ErrorMessage, - errors: readonly GraphQLError[], - ) => Promise | readonly GraphQLError[] | void; + onError?: + | undefined + | (( + ctx: Context, + id: string, + errors: readonly GraphQLError[], + ) => + | Promise + | readonly GraphQLFormattedError[] + | void); /** * Executed after an operation has emitted a result right before * that result has been sent to the client. Results from both @@ -357,16 +373,20 @@ export interface ServerOptions< * close the socket with the `Error` message * in the close event reason. */ - onNext?: ( - ctx: Context, - message: NextMessage, - args: ExecutionArgs, - result: ExecutionResult | ExecutionPatchResult, - ) => - | Promise - | ExecutionResult - | ExecutionPatchResult - | void; + onNext?: + | undefined + | (( + ctx: Context, + id: string, + args: ExecutionArgs, + result: ExecutionResult | ExecutionPatchResult, + ) => + | Promise< + FormattedExecutionResult | FormattedExecutionPatchResult | void + > + | FormattedExecutionResult + | FormattedExecutionPatchResult + | void); /** * The complete callback is executed after the * operation has completed right before sending @@ -380,22 +400,21 @@ export interface ServerOptions< * operations even after an abrupt closure, this callback * will still be called. */ - onComplete?: ( - ctx: Context, - message: CompleteMessage, - ) => Promise | void; + onComplete?: + | undefined + | ((ctx: Context, id: string) => Promise | void); /** * An optional override for the JSON.parse function used to hydrate * incoming messages to this server. Useful for parsing custom datatypes * out of the incoming JSON. */ - jsonMessageReviver?: JSONMessageReviver; + jsonMessageReviver?: undefined | JSONMessageReviver; /** * An optional override for the JSON.stringify function used to serialize * outgoing messages to from server. Useful for serializing custom * datatypes out to the client. */ - jsonMessageReplacer?: JSONMessageReplacer; + jsonMessageReplacer?: undefined | JSONMessageReplacer; } /** @category Server */ @@ -673,52 +692,47 @@ export function makeServer< result: ExecutionResult | ExecutionPatchResult, args: ExecutionArgs, ) => { - let nextMessage: NextMessage = { - id, - type: MessageType.Next, - payload: result, - }; - const maybeResult = await onNext?.( - ctx, - nextMessage, - args, - result, - ); - if (maybeResult) - nextMessage = { - ...nextMessage, - payload: maybeResult, - }; + const { errors, ...resultWithoutErrors } = result; + const maybeResult = await onNext?.(ctx, id, args, result); await socket.send( - stringifyMessage(nextMessage, replacer), + stringifyMessage( + { + id, + type: MessageType.Next, + payload: maybeResult || { + ...resultWithoutErrors, + // omit errors completely if not defined + ...(errors + ? { errors: errors.map((e) => e.toJSON()) } + : {}), + }, + }, + replacer, + ), ); }, error: async (errors: readonly GraphQLError[]) => { - let errorMessage: ErrorMessage = { - id, - type: MessageType.Error, - payload: errors, - }; - const maybeErrors = await onError?.(ctx, errorMessage, errors); - if (maybeErrors) - errorMessage = { - ...errorMessage, - payload: maybeErrors, - }; + const maybeErrors = await onError?.(ctx, id, errors); await socket.send( - stringifyMessage(errorMessage, replacer), + stringifyMessage( + { + id, + type: MessageType.Error, + payload: maybeErrors || errors.map((e) => e.toJSON()), + }, + replacer, + ), ); }, complete: async (notifyClient: boolean) => { - const completeMessage: CompleteMessage = { - id, - type: MessageType.Complete, - }; - await onComplete?.(ctx, completeMessage); + await onComplete?.(ctx, id); if (notifyClient) await socket.send( stringifyMessage( - completeMessage, + { + id, + type: MessageType.Complete, + }, replacer, ), ); @@ -727,7 +741,11 @@ export function makeServer< try { let execArgs: ExecutionArgs; - const maybeExecArgsOrErrors = await onSubscribe?.(ctx, message); + const maybeExecArgsOrErrors = await onSubscribe?.( + ctx, + message.id, + message.payload, + ); if (maybeExecArgsOrErrors) { if (areGraphQLErrors(maybeExecArgsOrErrors)) return id in ctx.subscriptions @@ -802,7 +820,7 @@ export function makeServer< const maybeResult = await onOperation?.( ctx, - message, + message.id, execArgs, operationResult, ); @@ -816,8 +834,30 @@ export function makeServer< operationResult.return(undefined); } else { ctx.subscriptions[id] = operationResult; - for await (const result of operationResult) { - await emit.next(result, execArgs); + try { + for await (const result of operationResult) { + await emit.next(result, execArgs); + } + } catch (err) { + const originalError = + err instanceof Error ? err : new Error(String(err)); + await emit.error([ + versionInfo.major >= 16 + ? new GraphQLError( + originalError.message, + // @ts-ignore graphql@15 and less dont have the second arg as object (version is ensured by versionInfo.major check above) + { originalError }, + ) + : // versionInfo.major <= 15 + new GraphQLError( + originalError.message, + null, + null, + null, + null, + originalError, + ), + ]); } } } else { @@ -905,3 +945,14 @@ export function handleProtocols( return false; } } + +/** @private */ +export function areGraphQLErrors(obj: unknown): obj is readonly GraphQLError[] { + return ( + Array.isArray(obj) && + // must be at least one error + obj.length > 0 && + // error has at least a message + obj.every((ob) => ob instanceof GraphQLError) + ); +} diff --git a/src/use/@fastify/websocket.ts b/src/use/@fastify/websocket.ts index 9dfda0f3..0e349a30 100644 --- a/src/use/@fastify/websocket.ts +++ b/src/use/@fastify/websocket.ts @@ -1,4 +1,4 @@ -import type * as fastifyWebsocket from '@fastify/websocket'; +import type { WebSocket, WebsocketHandler } from '@fastify/websocket'; import type { FastifyRequest } from 'fastify'; import { CloseCode, @@ -18,7 +18,7 @@ export interface Extra { * The underlying socket connection between the server and the client. * The WebSocket socket is located under the `socket` parameter. */ - readonly connection: fastifyWebsocket.SocketStream; + readonly socket: WebSocket; /** * The initial HTTP upgrade request before the actual * socket and connection is established. @@ -45,7 +45,7 @@ export function makeHandler< * @default 12_000 // 12 seconds */ keepAlive = 12_000, -): fastifyWebsocket.WebsocketHandler { +): WebsocketHandler { const isProd = process.env.NODE_ENV === 'production'; const server = makeServer(options); @@ -53,16 +53,14 @@ export function makeHandler< // register an error handler on first connection ONCE only let handlingServerEmittedErrors = false; - return function handler(connection, request) { - const { socket } = connection; - + return function handler(socket, request) { // might be too late, but meh this.websocketServer.options.handleProtocols = handleProtocols; // handle server emitted errors only if not already handling if (!handlingServerEmittedErrors) { handlingServerEmittedErrors = true; - this.websocketServer.once('error', (err) => { + this.websocketServer.once('error', (err: unknown) => { console.error( 'Internal error emitted on the WebSocket server. ' + 'Please check your implementation.', @@ -70,7 +68,7 @@ export function makeHandler< ); // catch the first thrown error and re-throw it once all clients have been notified - let firstErr: Error | null = null; + let firstErr: unknown = null; // report server errors by erroring out all clients with the same error for (const client of this.websocketServer.clients) { @@ -114,9 +112,6 @@ export function makeHandler< ); } - // fastify-websocket uses the WebSocket.createWebSocketStream, - // therefore errors get emitted on both the connection and the socket - connection.once('error', handleEmittedError); socket.once('error', handleEmittedError); // keep alive through ping-pong messages @@ -175,7 +170,7 @@ export function makeHandler< } }), }, - { connection, request } as Extra & Partial, + { socket, request } as Extra & Partial, ); socket.once('close', (code, reason) => { diff --git a/src/use/fastify-websocket.ts b/src/use/fastify-websocket.ts deleted file mode 100644 index f832fd89..00000000 --- a/src/use/fastify-websocket.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { FastifyRequest } from 'fastify'; -import type * as fastifyWebsocket from 'fastify-websocket'; -import { ConnectionInitMessage } from '../common'; -import { ServerOptions } from '../server'; -import { makeHandler as makeHandlerCurrent } from './@fastify/websocket'; - -/** - * The extra that will be put in the `Context`. - * - * @deprecated Use `@fastify/websocket` instead. - * - * @category Server/fastify-websocket - */ -export interface Extra { - /** - * The underlying socket connection between the server and the client. - * The WebSocket socket is located under the `socket` parameter. - */ - readonly connection: fastifyWebsocket.SocketStream; - /** - * The initial HTTP upgrade request before the actual - * socket and connection is established. - */ - readonly request: FastifyRequest; -} - -/** - * Make a handler to use on a [fastify-websocket](https://github.com/fastify/fastify-websocket) route. - * This is a basic starter, feel free to copy the code over and adjust it to your needs - * - * @deprecated Use `@fastify/websocket` instead. - * - * @category Server/fastify-websocket - */ -export function makeHandler< - P extends ConnectionInitMessage['payload'] = ConnectionInitMessage['payload'], - E extends Record = Record, ->( - options: ServerOptions>, - /** - * The timout between dispatched keep-alive messages. Internally uses the [ws Ping and Pongs](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#pings_and_pongs_the_heartbeat_of_websockets) - * to check that the link between the clients and the server is operating and to prevent the link - * from being broken due to idling. - * - * @default 12_000 // 12 seconds - */ - keepAlive = 12_000, -): fastifyWebsocket.WebsocketHandler { - // new handler can be reused, the semantics stayed the same - return makeHandlerCurrent(options, keepAlive); -} diff --git a/src/use/ws.ts b/src/use/ws.ts index 795fc2ee..b2e9986d 100644 --- a/src/use/ws.ts +++ b/src/use/ws.ts @@ -1,5 +1,5 @@ import type * as http from 'http'; -import type { WebSocket, WebSocketServer } from 'ws'; +import type WebSocket from 'ws'; import { CloseCode, ConnectionInitMessage, @@ -9,8 +9,10 @@ import { import { handleProtocols, makeServer, ServerOptions } from '../server'; import { limitCloseReason } from '../utils'; +export type WebSocketServer = WebSocket.Server; + // for nicer documentation -export type { WebSocket, WebSocketServer }; +export type { WebSocket }; /** * The extra that will be put in the `Context`. @@ -63,7 +65,7 @@ export function useServer< ); // catch the first thrown error and re-throw it once all clients have been notified - let firstErr: Error | null = null; + let firstErr: unknown = null; // report server errors by erroring out all clients with the same error for (const client of ws.clients) { diff --git a/src/utils.ts b/src/utils.ts index 1762a4d4..5b9ed95f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -3,7 +3,7 @@ * utils * */ -import { GraphQLError } from 'graphql'; +import type { GraphQLFormattedError } from 'graphql'; /** @private */ export function extendedTypeof( @@ -55,7 +55,9 @@ export function isAsyncGenerator( } /** @private */ -export function areGraphQLErrors(obj: unknown): obj is readonly GraphQLError[] { +export function areGraphQLFormattedErrors( + obj: unknown, +): obj is readonly GraphQLFormattedError[] { return ( Array.isArray(obj) && // must be at least one error diff --git a/tests/client.test.ts b/tests/client.test.ts index 5f5f649c..14009b58 100644 --- a/tests/client.test.ts +++ b/tests/client.test.ts @@ -1,8 +1,6 @@ // @vitest-environment jsdom -import { randomUUID } from 'crypto'; import { EventEmitter } from 'events'; -import { ExecutionResult } from 'graphql'; import { afterAll, beforeAll, beforeEach, describe, it, vitest } from 'vitest'; import WebSocket from 'ws'; import { @@ -13,6 +11,8 @@ import { } from '../src/client'; import { CloseCode, + FormattedExecutionPatchResult, + FormattedExecutionResult, MessageType, parseMessage, stringifyMessage, @@ -47,7 +47,11 @@ function noop(): void { interface TSubscribe { waitForNext: ( - test?: (value: ExecutionResult) => void, + test?: ( + value: + | FormattedExecutionResult + | FormattedExecutionPatchResult, + ) => void, expire?: number, ) => Promise; waitForError: ( @@ -63,7 +67,10 @@ function tsubscribe( payload: SubscribePayload, ): TSubscribe { const emitter = new EventEmitter(); - const results: ExecutionResult[] = []; + const results: ( + | FormattedExecutionResult + | FormattedExecutionPatchResult + )[] = []; let error: unknown, completed = false; const dispose = client.subscribe(payload, { @@ -398,7 +405,9 @@ it('should report close events when `connectionParams` takes too long', async ({ await waitForNonLazyError; }); -it('should not send the complete message if the socket is not open', async () => { +it('should not send the complete message if the socket is not open', async ({ + task, +}) => { const { url, waitForOperation } = await startTServer(); let close = () => { @@ -411,7 +420,7 @@ it('should not send the complete message if the socket is not open', async () => close = () => this.close(); } - public send(data: string) { + public override send(data: string) { if (this.readyState !== WebSocket.OPEN) throw new Error("Shouldn't send anything through a non-OPEN socket"); super.send(data); @@ -424,7 +433,9 @@ it('should not send the complete message if the socket is not open', async () => retryAttempts: 0, onNonLazyError: noop, }); - const sub = tsubscribe(client, { query: 'subscription { ping }' }); + const sub = tsubscribe(client, { + query: `subscription { ping(key: "${task.id}") }`, + }); await waitForOperation(); // client leaves @@ -855,7 +866,7 @@ it('should terminate socket immediately on terminate', async ({ expect }) => { super(...args); } - public close() { + public override close() { // unresponsive } } @@ -1089,6 +1100,7 @@ describe.concurrent('query operation', () => { describe.concurrent('subscription operation', () => { it('should execute and "next" the emitted results until disposed', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -1100,12 +1112,12 @@ describe.concurrent('subscription operation', () => { }); const sub = tsubscribe(client, { - query: 'subscription Ping { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); await server.waitForOperation(); - server.pong(); - server.pong(); + server.pong(task.id); + server.pong(task.id); await sub.waitForNext((result) => { expect(result).toEqual({ data: { ping: 'pong' } }); @@ -1116,8 +1128,8 @@ describe.concurrent('subscription operation', () => { sub.dispose(); - server.pong(); - server.pong(); + server.pong(task.id); + server.pong(task.id); await sub.waitForNext(() => { throw new Error('Next shouldnt have been called'); @@ -1125,7 +1137,10 @@ describe.concurrent('subscription operation', () => { await sub.waitForComplete(); }); - it('should emit results to correct distinct sinks', async ({ expect }) => { + it('should emit results to correct distinct sinks', async ({ + task, + expect, + }) => { const { url, ...server } = await startTServer(); const client = createClient({ @@ -1134,7 +1149,7 @@ describe.concurrent('subscription operation', () => { onNonLazyError: noop, }); - const sub1Key = randomUUID(); + const sub1Key = task.id + '1'; const sub1 = tsubscribe(client, { query: `subscription Ping($key: String!) { ping(key: $key) @@ -1143,7 +1158,7 @@ describe.concurrent('subscription operation', () => { }); await server.waitForOperation(); - const sub2Key = randomUUID(); + const sub2Key = task.id + '2'; const sub2 = tsubscribe(client, { query: `subscription Ping($key: String!) { ping(key: $key) @@ -1325,6 +1340,7 @@ describe.concurrent('subscription operation', () => { describe.concurrent('"concurrency"', () => { it('should dispatch and receive messages even if one subscriber disposes while another one subscribes', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -1336,17 +1352,17 @@ describe.concurrent('"concurrency"', () => { }); const sub1 = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}_1") }`, }); await server.waitForOperation(); sub1.dispose(); const sub2 = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}_2") }`, }); await server.waitForOperation(); - server.pong(); + server.pong(task.id + '_2'); await sub2.waitForNext((result) => { expect(result).toEqual({ data: { ping: 'pong' } }); @@ -1422,7 +1438,9 @@ describe.concurrent('lazy', () => { await server.waitForClient(); }); - it('should disconnect on last unsubscribe when mode is enabled', async () => { + it('should disconnect on last unsubscribe when mode is enabled', async ({ + task, + }) => { const { url, ...server } = await startTServer(); const client = createClient({ @@ -1438,14 +1456,14 @@ describe.concurrent('lazy', () => { const sub1 = tsubscribe(client, { operationName: 'PingPlease', - query: 'subscription PingPlease { ping }', + query: `subscription PingPlease { ping(key: "${task.id}_please") }`, }); await server.waitForOperation(); const sub2 = tsubscribe(client, { operationName: 'Pong', query: 'subscription Pong($key: String!) { ping(key: $key) }', - variables: { key: randomUUID() }, + variables: { key: task.id }, }); await server.waitForOperation(); @@ -1462,7 +1480,9 @@ describe.concurrent('lazy', () => { await server.waitForClientClose(); }); - it('should disconnect after the lazyCloseTimeout has passed after last unsubscribe', async () => { + it('should disconnect after the lazyCloseTimeout has passed after last unsubscribe', async ({ + task, + }) => { const { url, ...server } = await startTServer(); const client = createClient({ @@ -1474,7 +1494,7 @@ describe.concurrent('lazy', () => { }); const sub = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); await server.waitForOperation(); @@ -1555,7 +1575,9 @@ describe.concurrent('lazy', () => { await waitForNonLazyError; }); - it('should not close connection if a subscription is disposed multiple times', async () => { + it('should not close connection if a subscription is disposed multiple times', async ({ + task, + }) => { const { url, ...server } = await startTServer(); const client = createClient({ @@ -1566,12 +1588,12 @@ describe.concurrent('lazy', () => { // create 2 subscriptions const sub0 = tsubscribe(client, { - query: `subscription { ping(key: "${randomUUID()}") }`, + query: `subscription { ping(key: "${task.id}_0") }`, }); await server.waitForOperation(); const sub1 = tsubscribe(client, { - query: `subscription { ping(key: "${randomUUID()}") }`, + query: `subscription { ping(key: "${task.id}_1") }`, }); await server.waitForOperation(); @@ -1591,7 +1613,10 @@ describe.concurrent('lazy', () => { }); describe.concurrent('reconnecting', () => { - it('should not reconnect if retry attempts is zero', async ({ expect }) => { + it('should not reconnect if retry attempts is zero', async ({ + task, + expect, + }) => { const { url, ...server } = await startTServer(); const sub = tsubscribe( @@ -1601,7 +1626,7 @@ describe.concurrent('reconnecting', () => { onNonLazyError: noop, }), { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }, ); @@ -1615,7 +1640,10 @@ describe.concurrent('reconnecting', () => { }); }); - it('should reconnect silently after socket closes', async ({ expect }) => { + it('should reconnect silently after socket closes', async ({ + task, + expect, + }) => { const { url, ...server } = await startTServer(); const client = createClient({ @@ -1624,7 +1652,7 @@ describe.concurrent('reconnecting', () => { retryWait: () => Promise.resolve(), }); const sub = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); await server.waitForClient((client) => { @@ -1652,7 +1680,9 @@ describe.concurrent('reconnecting', () => { }); }); - it('should resubscribe all subscribers on silent reconnects', async () => { + it('should resubscribe all subscribers on silent reconnects', async ({ + task, + }) => { const { url, ...server } = await startTServer(); const client = createClient({ @@ -1666,7 +1696,7 @@ describe.concurrent('reconnecting', () => { for (let i = 0; i < 50; i++) { subs.push( tsubscribe(client, { - query: `subscription Sub${i} { ping(key: "${randomUUID()}") }`, + query: `subscription Sub${i} { ping(key: "${task.id + i}") }`, }), ); await server.waitForOperation(); @@ -1702,7 +1732,9 @@ describe.concurrent('reconnecting', () => { client.dispose(); }); - it('should resubscribe all subscribers on silent reconnect when using retry wait delay', async () => { + it('should resubscribe all subscribers on silent reconnect when using retry wait delay', async ({ + task, + }) => { const { url, ...server } = await startTServer(); const client = createClient({ @@ -1716,7 +1748,7 @@ describe.concurrent('reconnecting', () => { for (let i = 0; i < 50; i++) { subs.push( tsubscribe(client, { - query: `subscription Sub${i} { ping(key: "${randomUUID()}") }`, + query: `subscription Sub${i} { ping(key: "${task.id + i}") }`, }), ); await server.waitForOperation(); @@ -1747,6 +1779,7 @@ describe.concurrent('reconnecting', () => { }); it('should report some close events immediately and not reconnect', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -1758,11 +1791,9 @@ describe.concurrent('reconnecting', () => { retryAttempts: Infinity, // keep retrying forever // even if all connection problems are fatal shouldRetry: () => false, - // @deprecated - isFatalConnectionProblem: () => true, }), { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }, ); @@ -1792,6 +1823,7 @@ describe.concurrent('reconnecting', () => { }); it('should report fatal connection problems immediately', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -1807,36 +1839,7 @@ describe.concurrent('reconnecting', () => { }, }), { - query: 'subscription { ping }', - }, - ); - - await server.waitForClient((client) => { - client.close(4444, 'Is fatal?'); - }); - - await sub.waitForError((err) => { - expect((err as CloseEvent).code).toBe(4444); - }, 20); - }); - - it('should report fatal connection problems immediately (using deprecated `isFatalConnectionProblem`)', async ({ - expect, - }) => { - const { url, ...server } = await startTServer(); - - const sub = tsubscribe( - createClient({ - url, - retryAttempts: Infinity, // keep retrying forever - isFatalConnectionProblem: (err) => { - expect((err as CloseEvent).code).toBe(4444); - expect((err as CloseEvent).reason).toBe('Is fatal?'); - return true; - }, - }), - { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }, ); @@ -1877,6 +1880,7 @@ describe.concurrent('reconnecting', () => { ); it('should lazy disconnect after retries when all subscriptions are completed', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -1889,7 +1893,7 @@ describe.concurrent('reconnecting', () => { }); const sub = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); await server.waitForClient((client) => client.close()); @@ -1916,6 +1920,7 @@ describe.concurrent('reconnecting', () => { }); it('should lazy disconnect even if subscription is created during retries after all get completed', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -1928,7 +1933,7 @@ describe.concurrent('reconnecting', () => { }); const sub1 = tsubscribe(client, { - query: `subscription { ping(key: "${randomUUID()}") }`, + query: `subscription { ping(key: "${task.id}_1") }`, }); await server.waitForClient((client) => client.close()); @@ -1938,7 +1943,7 @@ describe.concurrent('reconnecting', () => { await server.waitForClientClose(); const sub2 = tsubscribe(client, { - query: `subscription { ping(key: "${randomUUID()}") }`, + query: `subscription { ping(key: "${task.id}_2") }`, }); await server.waitForClient((client) => client.close()); @@ -1971,7 +1976,9 @@ describe.concurrent('reconnecting', () => { expect(server.getClients().length).toBe(0); }); - it('should not reconnect if the subscription completes while waiting for a retry', async () => { + it('should not reconnect if the subscription completes while waiting for a retry', async ({ + task, + }) => { const { url, ...server } = await startTServer(); let retryAttempt = () => { @@ -1995,7 +2002,7 @@ describe.concurrent('reconnecting', () => { // subscribe and wait for operation let sub = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); await server.waitForOperation(); @@ -2018,7 +2025,7 @@ describe.concurrent('reconnecting', () => { // subscribe but close connection immediately (dont wait for operation) sub = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); retry(); // this still counts as a retry, so retry @@ -2039,6 +2046,7 @@ describe.concurrent('reconnecting', () => { }); it('should not count lazy connect after succesful reconnect as another retry', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -2054,7 +2062,7 @@ describe.concurrent('reconnecting', () => { }); let sub = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); // closed connection, retried and successfully subscribed @@ -2070,7 +2078,7 @@ describe.concurrent('reconnecting', () => { // new subscription, connect again sub = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); await server.waitForClient(); @@ -2082,7 +2090,9 @@ describe.concurrent('reconnecting', () => { expect(retry).toHaveBeenCalledTimes(1); }); - it('should subscribe even if socket is in CLOSING state due to all subscriptions being completed', async () => { + it('should subscribe even if socket is in CLOSING state due to all subscriptions being completed', async ({ + task, + }) => { const { url, ...server } = await startTServer(); const client = createClient({ @@ -2093,7 +2103,7 @@ describe.concurrent('reconnecting', () => { // subscribe and wait for operation let sub = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); await server.waitForOperation(); @@ -2105,7 +2115,7 @@ describe.concurrent('reconnecting', () => { // immediately subscribe again sub = tsubscribe(client, { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }); // the new subscription should go through @@ -2115,6 +2125,7 @@ describe.concurrent('reconnecting', () => { describe.concurrent('events', () => { it('should emit to relevant listeners with expected arguments', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -2125,8 +2136,6 @@ describe.concurrent('events', () => { const messageFn = vitest.fn(noop as EventListener<'message'>); const closedFn = vitest.fn(noop as EventListener<'closed'>); - const pongKey = randomUUID(); - // wait for connected const [client, sub] = await new Promise<[Client, TSubscribe]>( (resolve) => { @@ -2150,7 +2159,7 @@ describe.concurrent('events', () => { // trigger connecting const sub = tsubscribe(client, { - query: `subscription { ping(key: "${pongKey}") }`, + query: `subscription { ping(key: "${task.id}") }`, }); // resolve once subscribed @@ -2159,7 +2168,7 @@ describe.concurrent('events', () => { ); expect(connectingFn).toHaveBeenCalledTimes(2); - expect(connectingFn.mock.calls[0].length).toBe(1); + expect(connectingFn.mock.calls[0]?.length).toBe(1); expect(openedFn).toHaveBeenCalledTimes(2); // initial and registered listener openedFn.mock.calls.forEach((cal) => { @@ -2172,7 +2181,7 @@ describe.concurrent('events', () => { }); // (connection ack + pong) * 2 - server.pong(pongKey); + server.pong(task.id); await sub.waitForNext(); expect(messageFn).toHaveBeenCalledTimes(4); @@ -2335,16 +2344,16 @@ describe.concurrent('events', () => { }); expect(pingFn).toHaveBeenCalledTimes(2); - expect(pingFn.mock.calls[0][0]).toBeFalsy(); - expect(pingFn.mock.calls[0][1]).toBeUndefined(); - expect(pingFn.mock.calls[1][0]).toBeFalsy(); - expect(pingFn.mock.calls[1][1]).toBeUndefined(); + expect(pingFn.mock.calls[0]?.[0]).toBeFalsy(); + expect(pingFn.mock.calls[0]?.[1]).toBeUndefined(); + expect(pingFn.mock.calls[1]?.[0]).toBeFalsy(); + expect(pingFn.mock.calls[1]?.[1]).toBeUndefined(); expect(pongFn).toHaveBeenCalledTimes(2); - expect(pongFn.mock.calls[0][0]).toBeTruthy(); - expect(pongFn.mock.calls[0][1]).toBeUndefined(); - expect(pongFn.mock.calls[1][0]).toBeTruthy(); - expect(pongFn.mock.calls[1][1]).toBeUndefined(); + expect(pongFn.mock.calls[0]?.[0]).toBeTruthy(); + expect(pongFn.mock.calls[0]?.[1]).toBeUndefined(); + expect(pongFn.mock.calls[1]?.[0]).toBeTruthy(); + expect(pongFn.mock.calls[1]?.[1]).toBeUndefined(); }); it('should emit ping and pong events when receiving server pings', async ({ @@ -2379,16 +2388,16 @@ describe.concurrent('events', () => { }); expect(pingFn).toHaveBeenCalledTimes(2); - expect(pingFn.mock.calls[0][0]).toBeTruthy(); - expect(pingFn.mock.calls[0][1]).toEqual({ some: 'data' }); - expect(pingFn.mock.calls[1][0]).toBeTruthy(); - expect(pingFn.mock.calls[1][1]).toEqual({ some: 'data' }); + expect(pingFn.mock.calls[0]?.[0]).toBeTruthy(); + expect(pingFn.mock.calls[0]?.[1]).toEqual({ some: 'data' }); + expect(pingFn.mock.calls[1]?.[0]).toBeTruthy(); + expect(pingFn.mock.calls[1]?.[1]).toEqual({ some: 'data' }); expect(pongFn).toHaveBeenCalledTimes(2); - expect(pongFn.mock.calls[0][0]).toBeFalsy(); - expect(pongFn.mock.calls[0][1]).toEqual({ some: 'data' }); - expect(pongFn.mock.calls[1][0]).toBeFalsy(); - expect(pongFn.mock.calls[1][1]).toEqual({ some: 'data' }); + expect(pongFn.mock.calls[0]?.[0]).toBeFalsy(); + expect(pongFn.mock.calls[0]?.[1]).toEqual({ some: 'data' }); + expect(pongFn.mock.calls[1]?.[0]).toBeFalsy(); + expect(pongFn.mock.calls[1]?.[1]).toEqual({ some: 'data' }); }); it('should provide the latest socket reference to event listeners', async ({ @@ -2516,7 +2525,9 @@ describe.concurrent('iterate', () => { `); }); - it('should report execution errors to iterator', async ({ expect }) => { + it('should report errors thrown from query execution through execution result', async ({ + expect, + }) => { const { url } = await startTServer(); const client = createClient({ @@ -2526,22 +2537,23 @@ describe.concurrent('iterate', () => { }); const iterator = client.iterate({ - query: 'subscription { throwing }', + query: '{ throwing }', }); await expect(iterator.next()).resolves.toMatchInlineSnapshot(` { "done": false, "value": { + "data": null, "errors": [ { "locations": [ { - "column": 16, + "column": 3, "line": 1, }, ], - "message": "Kaboom!", + "message": "Query Kaboom!", "path": [ "throwing", ], @@ -2559,7 +2571,38 @@ describe.concurrent('iterate', () => { `); }); - it('should throw in iterator connection errors', async ({ expect }) => { + it('should report errors thrown from subscription iterable by throwing', async ({ + expect, + }) => { + const { url } = await startTServer(); + + const client = createClient({ + url, + retryAttempts: 0, + onNonLazyError: noop, + }); + + const iterator = client.iterate({ + query: 'subscription { throwing }', + }); + + await expect(iterator.next()).rejects.toMatchInlineSnapshot(` + [ + { + "message": "Subscribe Kaboom!", + }, + ] + `); + + await expect(iterator.next()).resolves.toMatchInlineSnapshot(` + { + "done": true, + "value": undefined, + } + `); + }); + + it('should throw in iterator connection errors', async ({ task, expect }) => { const { url, ...server } = await startTServer(); const client = createClient({ @@ -2568,12 +2611,11 @@ describe.concurrent('iterate', () => { onNonLazyError: noop, }); - const pingKey = randomUUID(); const iterator = client.iterate({ - query: `subscription { ping(key: "${pingKey}") }`, + query: `subscription { ping(key: "${task.id}") }`, }); - pong(pingKey); + pong(task.id); await expect(iterator.next()).resolves.toMatchInlineSnapshot(` { "done": false, @@ -2597,6 +2639,7 @@ describe.concurrent('iterate', () => { }); it('should complete subscription when iterator loop breaks', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -2607,13 +2650,12 @@ describe.concurrent('iterate', () => { onNonLazyError: noop, }); - const pingKey = randomUUID(); const iterator = client.iterate({ - query: `subscription { ping(key: "${pingKey}") }`, + query: `subscription { ping(key: "${task.id}") }`, }); iterator.return = vitest.fn(iterator.return); - setTimeout(() => pong(pingKey), 0); + setTimeout(() => pong(task.id), 0); for await (const val of iterator) { expect(val).toMatchInlineSnapshot(` @@ -2632,6 +2674,7 @@ describe.concurrent('iterate', () => { }); it('should complete subscription when iterator loop throws', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -2642,13 +2685,12 @@ describe.concurrent('iterate', () => { onNonLazyError: noop, }); - const pingKey = randomUUID(); const iterator = client.iterate({ - query: `subscription { ping(key: "${pingKey}") }`, + query: `subscription { ping(key: "${task.id}") }`, }); iterator.return = vitest.fn(iterator.return); - setTimeout(() => pong(pingKey), 0); + setTimeout(() => pong(task.id), 0); await expect(async () => { for await (const val of iterator) { @@ -2669,6 +2711,7 @@ describe.concurrent('iterate', () => { }); it('should complete subscription when calling return directly on iterator', async ({ + task, expect, }) => { const { url, ...server } = await startTServer(); @@ -2679,12 +2722,11 @@ describe.concurrent('iterate', () => { onNonLazyError: noop, }); - const pingKey = randomUUID(); const iterator = client.iterate({ - query: `subscription { ping(key: "${pingKey}") }`, + query: `subscription { ping(key: "${task.id}") }`, }); - pong(pingKey); + pong(task.id); await expect(iterator.next()).resolves.toMatchInlineSnapshot(` { diff --git a/tests/fixtures/simple.ts b/tests/fixtures/simple.ts index 6ed23b52..c5dfc5ff 100644 --- a/tests/fixtures/simple.ts +++ b/tests/fixtures/simple.ts @@ -9,7 +9,7 @@ import { // use for dispatching a `pong` to the `ping` subscription const pendingPongs: Record = {}; const pongListeners: Record void) | undefined> = {}; -export function pong(key = 'global'): void { +export function pong(key: string): void { if (pongListeners[key]) { pongListeners[key]?.(false); } else { @@ -26,6 +26,12 @@ export const schemaConfig: GraphQLSchemaConfig = { type: new GraphQLNonNull(GraphQLString), resolve: () => 'value', }, + throwing: { + type: new GraphQLNonNull(GraphQLString), + resolve: function () { + throw new Error('Query Kaboom!'); + }, + }, }, }), subscription: new GraphQLObjectType({ @@ -43,11 +49,11 @@ export const schemaConfig: GraphQLSchemaConfig = { type: new GraphQLNonNull(GraphQLString), args: { key: { - type: GraphQLString, + type: new GraphQLNonNull(GraphQLString), }, }, subscribe: function (_src, args) { - const key = args.key ? args.key : 'global'; + const key = args.key; return { [Symbol.asyncIterator]() { return this; @@ -102,8 +108,8 @@ export const schemaConfig: GraphQLSchemaConfig = { }, throwing: { type: new GraphQLNonNull(GraphQLString), - subscribe: async function () { - throw new Error('Kaboom!'); + subscribe: async function* () { + throw new Error('Subscribe Kaboom!'); }, }, }, diff --git a/tests/server.test.ts b/tests/server.test.ts index 9ea903b9..9d285d98 100644 --- a/tests/server.test.ts +++ b/tests/server.test.ts @@ -8,7 +8,7 @@ import { parse, subscribe, } from 'graphql'; -import { afterAll, beforeAll, describe, expect, it, vitest } from 'vitest'; +import { afterAll, beforeAll, describe, it, vitest } from 'vitest'; import { CloseCode, GRAPHQL_TRANSPORT_WS_PROTOCOL, @@ -36,7 +36,9 @@ afterAll(() => { * Tests */ -it('should use the schema resolved from a promise on subscribe', async () => { +it('should use the schema resolved from a promise on subscribe', async ({ + expect, +}) => { expect.assertions(2); const { resolve: completed, promise: waitForComplete } = createDeferred(); @@ -74,7 +76,7 @@ it('should use the schema resolved from a promise on subscribe', async () => { await waitForComplete; }); -it('should use the provided validate function', async () => { +it('should use the provided validate function', async ({ expect }) => { const { url } = await startTServer({ schema, validate: () => [new GraphQLError('Nothing is valid')], @@ -105,7 +107,7 @@ it('should use the provided validate function', async () => { }); }); -it('should use the provided roots as resolvers', async () => { +it('should use the provided roots as resolvers', async ({ expect }) => { const schema = buildSchema(` type Query { hello: String @@ -192,7 +194,7 @@ it('should use the provided roots as resolvers', async () => { }); }); -it('should pass in the context value from the config', async () => { +it('should pass in the context value from the config', async ({ expect }) => { const context = {}; const executeFn = vitest.fn((args) => execute(args)); @@ -237,7 +239,7 @@ it('should pass in the context value from the config', async () => { }); expect(executeFn).toBeCalled(); - expect(executeFn.mock.calls[0][0].contextValue).toBe(context); + expect(executeFn.mock.calls[0]?.[0].contextValue).toBe(context); client.ws.send( stringifyMessage({ @@ -256,10 +258,12 @@ it('should pass in the context value from the config', async () => { }); expect(subscribeFn).toBeCalled(); - expect(subscribeFn.mock.calls[0][0].contextValue).toBe(context); + expect(subscribeFn.mock.calls[0]?.[0].contextValue).toBe(context); }); -it('should pass the `onSubscribe` exec args to the `context` option and use it', async () => { +it('should pass the `onSubscribe` exec args to the `context` option and use it', async ({ + expect, +}) => { const { resolve: executionDone, promise: waitForExecuteDone } = createDeferred(); @@ -310,7 +314,9 @@ it('should pass the `onSubscribe` exec args to the `context` option and use it', await waitForExecuteDone; }); -it('should use the root from the `roots` option if the `onSubscribe` doesnt provide one', async () => { +it('should use the root from the `roots` option if the `onSubscribe` doesnt provide one', async ({ + expect, +}) => { const { resolve: executionDone, promise: waitForExecuteDone } = createDeferred(); @@ -360,7 +366,9 @@ it('should use the root from the `roots` option if the `onSubscribe` doesnt prov await waitForExecuteDone; }); -it('should prefer the `onSubscribe` context value even if `context` option is set', async () => { +it('should prefer the `onSubscribe` context value even if `context` option is set', async ({ + expect, +}) => { const { resolve: executionDone, promise: waitForExecuteDone } = createDeferred(); @@ -408,7 +416,7 @@ it('should prefer the `onSubscribe` context value even if `context` option is se await waitForExecuteDone; }); -it('should use a custom JSON message replacer function', async () => { +it('should use a custom JSON message replacer function', async ({ expect }) => { const { url } = await startTServer({ schema, jsonMessageReplacer: (key, value) => { @@ -431,7 +439,7 @@ it('should use a custom JSON message replacer function', async () => { }); }); -it('should use a custom JSON message reviver function', async () => { +it('should use a custom JSON message reviver function', async ({ expect }) => { const { url } = await startTServer({ schema, jsonMessageReviver: (key, value) => { @@ -454,8 +462,10 @@ it('should use a custom JSON message reviver function', async () => { }); }); -describe('Connect', () => { - it('should refuse connection and close socket if returning `false`', async () => { +describe.concurrent('Connect', () => { + it('should refuse connection and close socket if returning `false`', async ({ + expect, + }) => { const { url } = await startTServer({ onConnect: () => { return false; @@ -477,7 +487,9 @@ describe('Connect', () => { }); }); - it('should acknowledge connection if not implemented, returning `true` or nothing', async () => { + it('should acknowledge connection if not implemented, returning `true` or nothing', async ({ + expect, + }) => { async function test(url: string) { const client = await createTClient(url); client.ws.send( @@ -513,7 +525,9 @@ describe('Connect', () => { await test(server.url); }); - it('should send optional payload with connection ack message', async () => { + it('should send optional payload with connection ack message', async ({ + expect, + }) => { const { url } = await startTServer({ onConnect: () => { return { @@ -537,7 +551,9 @@ describe('Connect', () => { }); }); - it('should pass in the `connectionParams` through the context and have other flags correctly set', async () => { + it('should pass in the `connectionParams` through the context and have other flags correctly set', async ({ + expect, + }) => { const { resolve: connected, promise: waitForConnect } = createDeferred(); const connectionParams = { @@ -566,7 +582,9 @@ describe('Connect', () => { await waitForConnect; }); - it('should close the socket after the `connectionInitWaitTimeout` has passed without having received a `ConnectionInit` message', async () => { + it('should close the socket after the `connectionInitWaitTimeout` has passed without having received a `ConnectionInit` message', async ({ + expect, + }) => { const { url } = await startTServer({ connectionInitWaitTimeout: 10 }); await ( @@ -578,7 +596,9 @@ describe('Connect', () => { }); }); - it('should not close the socket after the `connectionInitWaitTimeout` has passed but the callback is still resolving', async () => { + it('should not close the socket after the `connectionInitWaitTimeout` has passed but the callback is still resolving', async ({ + expect, + }) => { const { url } = await startTServer({ connectionInitWaitTimeout: 10, onConnect: () => @@ -601,7 +621,9 @@ describe('Connect', () => { }, 30); }); - it('should close the socket if an additional `ConnectionInit` message is received while one is pending', async () => { + it('should close the socket if an additional `ConnectionInit` message is received while one is pending', async ({ + expect, + }) => { const { url } = await startTServer({ connectionInitWaitTimeout: 10, onConnect: () => @@ -632,7 +654,9 @@ describe('Connect', () => { }); }); - it('should close the socket if more than one `ConnectionInit` message is received at any given time', async () => { + it('should close the socket if more than one `ConnectionInit` message is received at any given time', async ({ + expect, + }) => { const { url } = await startTServer(); const client = await createTClient(url); @@ -660,7 +684,9 @@ describe('Connect', () => { }); }); - it("should have acknowledged connection even if ack message send didn't resolve", async () => { + it("should have acknowledged connection even if ack message send didn't resolve", async ({ + expect, + }) => { const { resolve: subscribed, promise: waitForSubscribe } = createDeferred(); let sent: Promise | null = null; @@ -720,8 +746,8 @@ describe('Connect', () => { }); }); -describe('Ping/Pong', () => { - it('should respond with a pong to a ping', async () => { +describe.concurrent('Ping/Pong', () => { + it('should respond with a pong to a ping', async ({ expect }) => { const { url } = await startTServer(); const client = await createTClient(url); @@ -739,7 +765,7 @@ describe('Ping/Pong', () => { }); }); - it("should return ping's payload through the pong", async () => { + it("should return ping's payload through the pong", async ({ expect }) => { const { url } = await startTServer(); const client = await createTClient(url); @@ -779,7 +805,9 @@ describe('Ping/Pong', () => { }, 20); }); - it('should invoke the websocket callback on ping and not reply automatically', async () => { + it('should invoke the websocket callback on ping and not reply automatically', async ({ + expect, + }) => { const { resolve: pinged, promise: waitForPing } = createDeferred(); const payload = { not: 'relevant' }; @@ -813,7 +841,7 @@ describe('Ping/Pong', () => { await waitForPing; }); - it('should invoke the websocket callback on pong', async () => { + it('should invoke the websocket callback on pong', async ({ expect }) => { const { resolve: ponged, promise: waitForPong } = createDeferred(); const payload = { not: 'relevant' }; @@ -846,8 +874,10 @@ describe('Ping/Pong', () => { }); }); -describe('Subscribe', () => { - it('should close the socket on request if connection is not acknowledged', async () => { +describe.concurrent('Subscribe', () => { + it('should close the socket on request if connection is not acknowledged', async ({ + expect, + }) => { const { url } = await startTServer(); const client = await createTClient(url); @@ -871,7 +901,10 @@ describe('Subscribe', () => { }); }); - it('should directly use the execution arguments returned from `onSubscribe`', async () => { + it('should directly use the execution arguments returned from `onSubscribe`', async ({ + expect, + task, + }) => { const nopeArgs = { schema, operationName: 'Nope', @@ -911,9 +944,7 @@ describe('Subscribe', () => { type: MessageType.Subscribe, payload: { operationName: 'Ping', - query: `subscribe Ping { - ping - }`, + query: `subscription Ping { ping(key: "${task.id}") }`, variables: {}, }, }), @@ -935,7 +966,10 @@ describe('Subscribe', () => { }, 30); }); - it('should report the graphql errors returned from `onSubscribe`', async () => { + it('should report the graphql errors returned from `onSubscribe`', async ({ + expect, + task, + }) => { const { url } = await startTServer({ onSubscribe: (_ctx, _message) => { return [new GraphQLError('Report'), new GraphQLError('Me')]; @@ -958,9 +992,7 @@ describe('Subscribe', () => { type: MessageType.Subscribe, payload: { operationName: 'Ping', - query: `subscribe Ping { - ping - }`, + query: `subscription Ping { ping(key: "${task.id}") }`, variables: {}, }, }), @@ -982,7 +1014,9 @@ describe('Subscribe', () => { }, 30); }); - it('should use the execution result returned from `onNext`', async () => { + it('should use the execution result returned from `onNext`', async ({ + expect, + }) => { const { url } = await startTServer({ onNext: (_ctx, _message) => { return { @@ -1038,10 +1072,15 @@ describe('Subscribe', () => { }, 30); }); - it('should use the graphql errors returned from `onError`', async () => { + it('should use the graphql errors returned from `onError`', async ({ + expect, + }) => { const { url } = await startTServer({ onError: (_ctx, _message) => { - return [new GraphQLError('Itsa me!'), new GraphQLError('Anda me!')]; + return [ + new GraphQLError('Itsa me!').toJSON(), + new GraphQLError('Anda me!').toJSON(), + ]; }, }); @@ -1084,7 +1123,9 @@ describe('Subscribe', () => { }, 30); }); - it('should use the operation result returned from `onOperation`', async () => { + it('should use the operation result returned from `onOperation`', async ({ + expect, + }) => { const { url } = await startTServer({ onOperation: (_ctx, _message) => { return (async function* () { @@ -1136,7 +1177,9 @@ describe('Subscribe', () => { }, 30); }); - it('should execute the query of `string` type, "next" the result and then "complete"', async () => { + it('should execute the query of `string` type, "next" the result and then "complete"', async ({ + expect, + }) => { const { url } = await startTServer({ schema, }); @@ -1181,7 +1224,9 @@ describe('Subscribe', () => { }); }); - it('should execute the live query, "next" multiple results and then "complete"', async () => { + it('should execute the live query, "next" multiple results and then "complete"', async ({ + expect, + }) => { const { url } = await startTServer({ schema, execute: async function* () { @@ -1251,7 +1296,9 @@ describe('Subscribe', () => { }); }); - it('should be able to complete a long running query before the result becomes available', async () => { + it('should be able to complete a long running query before the result becomes available', async ({ + expect, + }) => { let resultIsHere = (_result: ExecutionResult) => { /* noop for calming typescript */ }, @@ -1317,7 +1364,9 @@ describe('Subscribe', () => { }, 30); }); - it('should execute the query and "error" out because of validation errors', async () => { + it('should execute the query and "error" out because of validation errors', async ({ + expect, + }) => { const { url } = await startTServer({ schema, }); @@ -1379,7 +1428,9 @@ describe('Subscribe', () => { }, 30); }); - it('should execute the subscription and "next" the published payload', async () => { + it('should execute the subscription and "next" the published payload', async ({ + expect, + }) => { const { url } = await startTServer({ schema, }); @@ -1421,7 +1472,10 @@ describe('Subscribe', () => { }); }); - it('should stop dispatching messages after completing a subscription', async () => { + it('should stop dispatching messages after completing a subscription', async ({ + expect, + task, + }) => { const server = await startTServer({ schema, }); @@ -1440,13 +1494,13 @@ describe('Subscribe', () => { id: '1', type: MessageType.Subscribe, payload: { - query: `subscription { ping }`, + query: `subscription { ping(key: "${task.id}") }`, }, }), ); }); - server.pong(); + server.pong(task.id); await client.waitForMessage(({ data }) => { expect(parseMessage(data)).toEqual({ @@ -1466,16 +1520,19 @@ describe('Subscribe', () => { await server.waitForComplete(); - server.pong(); - server.pong(); - server.pong(); + server.pong(task.id); + server.pong(task.id); + server.pong(task.id); await client.waitForMessage(() => { throw new Error("Shouldn't have received a message"); }, 30); }); - it('should close the socket on duplicate operation requests', async () => { + it('should close the socket on duplicate operation requests', async ({ + expect, + task, + }) => { const { url } = await startTServer(); const client = await createTClient(url); @@ -1492,7 +1549,7 @@ describe('Subscribe', () => { id: 'not-unique', type: MessageType.Subscribe, payload: { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }, }), ); @@ -1516,7 +1573,9 @@ describe('Subscribe', () => { }); }); - it('should close the socket on duplicate operation requests even if one is still preparing', async () => { + it('should close the socket on duplicate operation requests even if one is still preparing', async ({ + expect, + }) => { const { url } = await startTServer({ onSubscribe: () => new Promise(() => { @@ -1561,7 +1620,7 @@ describe('Subscribe', () => { }); }); - it('should support persisted queries', async () => { + it('should support persisted queries', async ({ expect }) => { const queriesStore: Record = { iWantTheValue: { schema, @@ -1570,13 +1629,13 @@ describe('Subscribe', () => { }; const { url } = await startTServer({ - onSubscribe: (_ctx, msg) => { + onSubscribe: (_ctx, _id, payload) => { // search using `SubscriptionPayload.query` as QueryID // check the client example below for better understanding - const hit = queriesStore[msg.payload.query as string]; + const hit = queriesStore[payload.query as string]!; return { ...hit, - variableValues: msg.payload.variables, // use the variables from the client + variableValues: payload.variables, // use the variables from the client }; }, }); @@ -1610,7 +1669,10 @@ describe('Subscribe', () => { }); }); - it('should call `onComplete` callback when client completes', async () => { + it('should call `onComplete` callback when client completes', async ({ + expect, + task, + }) => { const { resolve: completed, promise: waitForComplete } = createDeferred(); const server = await startTServer({ @@ -1635,14 +1697,14 @@ describe('Subscribe', () => { id: '1', type: MessageType.Subscribe, payload: { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }, }), ); await server.waitForOperation(); // just to make sure we're streaming - server.pong(); + server.pong(task.id); await client.waitForMessage(({ data }) => { expect(parseMessage(data).type).toBe(MessageType.Next); }); @@ -1658,7 +1720,10 @@ describe('Subscribe', () => { await waitForComplete; }); - it('should call `onComplete` callback even if socket terminates abruptly', async () => { + it('should call `onComplete` callback even if socket terminates abruptly', async ({ + expect, + task, + }) => { const { resolve: completed, promise: waitForComplete } = createDeferred(); const server = await startTServer({ @@ -1683,14 +1748,14 @@ describe('Subscribe', () => { id: '1', type: MessageType.Subscribe, payload: { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }, }), ); await server.waitForOperation(); // just to make sure we're streaming - server.pong(); + server.pong(task.id); await client.waitForMessage(({ data }) => { expect(parseMessage(data).type).toBe(MessageType.Next); }); @@ -1701,7 +1766,9 @@ describe('Subscribe', () => { await waitForComplete; }); - it('should respect completed subscriptions even if subscribe operation stalls', async () => { + it('should respect completed subscriptions even if subscribe operation stalls', async ({ + task, + }) => { let continueSubscribe: (() => void) | undefined = undefined; const server = await startTServer({ subscribe: async (...args) => { @@ -1723,7 +1790,7 @@ describe('Subscribe', () => { id: '1', type: MessageType.Subscribe, payload: { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }, }), ); @@ -1755,7 +1822,7 @@ describe('Subscribe', () => { (continueSubscribe as () => void)(); // emit - server.pong(); + server.pong(task.id); await client.waitForMessage(() => { throw new Error("Shouldn't have received a message"); @@ -1764,7 +1831,9 @@ describe('Subscribe', () => { await server.waitForComplete(); }); - it('should clean up subscription reservations on abrupt errors without relying on close', async () => { + it('should clean up subscription reservations on abrupt errors without relying on close', async ({ + expect, + }) => { const { resolve: messaged, promise: waitForMessage } = createDeferred(); let currCtx: Context; @@ -1850,7 +1919,9 @@ describe('Subscribe', () => { }, 20); }); - it('should not send error messages if socket closes before onSubscribe hooks resolves', async () => { + it('should not send error messages if socket closes before onSubscribe hooks resolves', async ({ + expect, + }) => { let resolveOnSubscribe: () => void = () => { throw new Error('On subscribe resolved early'); }; @@ -1908,10 +1979,48 @@ describe('Subscribe', () => { expect(sendFn).toHaveBeenCalledTimes(1); // only the ack message }); + + it('should not close connection if a subscription iterable throws', async ({ + expect, + }) => { + const server = await startTServer(); + + const client = await createTClient(server.url); + + client.ws.send( + stringifyMessage({ + type: MessageType.ConnectionInit, + }), + ); + await client.waitForMessage(); // MessageType.ConnectionAck + + client.ws.send( + stringifyMessage({ + id: '1', + type: MessageType.Subscribe, + payload: { + query: 'subscription { throwing }', + }, + }), + ); + await server.waitForOperation(); + + await client.waitForClose(() => { + throw new Error("Shouldn't have closed"); + }, 20); + + await client.waitForMessage((msg) => { + expect(msg.data).toMatchInlineSnapshot( + `"{"id":"1","type":"error","payload":[{"message":"Subscribe Kaboom!"}]}"`, + ); + }); + }); }); -describe('Disconnect/close', () => { - it('should report close code and reason to disconnect and close callback after connection acknowledgement', async () => { +describe.concurrent('Disconnect/close', () => { + it('should report close code and reason to disconnect and close callback after connection acknowledgement', async ({ + expect, + }) => { const { resolve: closed, promise: waitForClose } = createDeferred(); const { url, waitForConnect } = await startTServer({ @@ -1942,7 +2051,9 @@ describe('Disconnect/close', () => { await waitForClose; }); - it('should trigger the close callback instead of disconnect if connection is not acknowledged', async () => { + it('should trigger the close callback instead of disconnect if connection is not acknowledged', async ({ + expect, + }) => { const { resolve: closed, promise: waitForClose } = createDeferred(); const { url } = await startTServer({ @@ -1963,7 +2074,9 @@ describe('Disconnect/close', () => { await waitForClose; }); - it('should dispose of subscriptions on close even if added late to the subscriptions list', async () => { + it('should dispose of subscriptions on close even if added late to the subscriptions list', async ({ + task, + }) => { let resolveOnOperation: () => void = () => { throw new Error('On operation resolved early'); }; @@ -1995,7 +2108,7 @@ describe('Disconnect/close', () => { type: MessageType.Subscribe, id: '1', payload: { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }, }), ); @@ -2010,7 +2123,9 @@ describe('Disconnect/close', () => { await waitForComplete(); }); - it('should dispose of all subscriptions on close even if some return is problematic', async () => { + it('should dispose of all subscriptions on close even if some return is problematic', async ({ + task, + }) => { let resolveReturn: () => void = () => { throw new Error('Return resolved early'); }; @@ -2050,7 +2165,7 @@ describe('Disconnect/close', () => { type: MessageType.Subscribe, id: '1', payload: { - query: 'subscription { ping(key: "slow") }', + query: `subscription { ping(key: "${task.id}_slow") }`, }, }), ); @@ -2061,7 +2176,7 @@ describe('Disconnect/close', () => { type: MessageType.Subscribe, id: '2', payload: { - query: 'subscription { ping(key: "ok") }', + query: `subscription { ping(key: "${task.id}_ok") }`, }, }), ); @@ -2076,7 +2191,9 @@ describe('Disconnect/close', () => { }); }); -it('should only accept a Set, Array or string in handleProtocol', () => { +it('should only accept a Set, Array or string in handleProtocol', ({ + expect, +}) => { for (const test of [ { in: new Set(['not', 'me']), diff --git a/tests/use.test.ts b/tests/use.test.ts index 2ff53331..2be89312 100644 --- a/tests/use.test.ts +++ b/tests/use.test.ts @@ -1,10 +1,7 @@ import http from 'http'; -import stream from 'stream'; import { setTimeout } from 'timers/promises'; import { afterAll, beforeAll, describe, it } from 'vitest'; import ws from 'ws'; -// @ts-expect-error: ws7 has no definitions -import ws7 from 'ws7'; import { CloseCode, GRAPHQL_TRANSPORT_WS_PROTOCOL, @@ -144,18 +141,10 @@ for (const { tServer, skipUWS, startTServer } of tServers) { expect((ctx.extra as WSExtra).request).toBeInstanceOf( http.IncomingMessage, ); - } else if (tServer === 'ws7') { - expect((ctx.extra as WSExtra).socket).toBeInstanceOf(ws7); - expect((ctx.extra as WSExtra).request).toBeInstanceOf( - http.IncomingMessage, - ); } else if (tServer === '@fastify/websocket') { - expect((ctx.extra as FastifyExtra).connection).toBeInstanceOf( - stream.Duplex, + expect((ctx.extra as FastifyExtra).socket.constructor.name).toBe( + 'WebSocket', ); - expect( - (ctx.extra as FastifyExtra).connection.socket.constructor.name, - ).toBe('WebSocket'); expect((ctx.extra as FastifyExtra).request.constructor.name).toBe( '_Request', ); @@ -335,6 +324,7 @@ for (const { tServer, skipUWS, startTServer } of tServers) { }); it('should close the socket on empty arrays returned from `onSubscribe`', async ({ + task, expect, }) => { const { url } = await startTServer({ @@ -360,7 +350,7 @@ for (const { tServer, skipUWS, startTServer } of tServers) { id: '1', type: MessageType.Subscribe, payload: { - query: 'subscription { ping }', + query: `subscription { ping(key: "${task.id}") }`, }, }), ); @@ -547,7 +537,7 @@ for (const { tServer, skipUWS, startTServer } of tServers) { }); }); - describe('Keep-Alive', () => { + describe.concurrent('Keep-Alive', () => { it('should dispatch pings after the timeout has passed', async () => { const { url } = await startTServer(undefined, 50); diff --git a/tests/utils/tclient.ts b/tests/utils/tclient.ts index 041b6a48..71d7abd6 100644 --- a/tests/utils/tclient.ts +++ b/tests/utils/tclient.ts @@ -29,13 +29,17 @@ export function createTClient( resolve({ ws, async waitForMessage(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { const done = () => { // the onmessage listener above will be called before our listener, populating the queue // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const next = queue.shift()!; - test?.(next); - resolve(); + try { + test?.(next); + resolve(); + } catch (err) { + reject(err); + } }; if (queue.length > 0) return done(); ws.once('message', done); @@ -50,15 +54,19 @@ export function createTClient( test?: (event: WebSocket.CloseEvent) => void, expire?: number, ) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { if (closeEvent) { test?.(closeEvent); return resolve(); } ws.onclose = (event) => { closeEvent = event; - test?.(event); - resolve(); + try { + test?.(event); + resolve(); + } catch (err) { + reject(err); + } }; if (expire) setTimeout(() => { diff --git a/tests/utils/tservers.ts b/tests/utils/tservers.ts index e0d62ce8..cf57219a 100644 --- a/tests/utils/tservers.ts +++ b/tests/utils/tservers.ts @@ -5,8 +5,6 @@ import Fastify from 'fastify'; import uWS from 'uWebSockets.js'; import { afterAll, it } from 'vitest'; import ws, { WebSocketServer } from 'ws'; -// @ts-expect-error: ws7 has no definitions -import ws7 from 'ws7'; import { Context, ServerOptions } from '../../src/server'; import { Extra as FastifyExtra, @@ -17,9 +15,10 @@ import { Extra as UWSExtra, } from '../../src/use/uWebSockets'; import { useServer as useWSServer, Extra as WSExtra } from '../../src/use/ws'; +import { isObject } from '../../src/utils'; import { pong, schema } from '../fixtures/simple'; -export { WSExtra, UWSExtra, FastifyExtra }; +export type { WSExtra, UWSExtra, FastifyExtra }; // distinct server for each test; if you forget to dispose, the fixture wont const leftovers: Dispose[] = []; @@ -40,7 +39,7 @@ export interface TServer { url: string; server: WebSocketServer | null; // null when uWS because it does not have a server instance getClients: () => TServerClient[]; - pong: (key?: string) => void; + pong: (key: string) => void; waitForClient: ( test?: (client: TServerClient) => void, expire?: number, @@ -74,7 +73,7 @@ async function getAvailablePort() { }); break; // listening } catch (err) { - if ('code' in err && err.code === 'EADDRINUSE') { + if (isObject(err) && 'code' in err && err.code === 'EADDRINUSE') { tried++; if (tried > 10) throw new Error( @@ -140,17 +139,11 @@ export async function startRawServer(): Promise<{ export async function startWSTServer( options: Partial = {}, keepAlive?: number, // for ws tests sake - v7?: boolean, ): Promise { const path = '/simple'; const emitter = new EventEmitter(); const port = await getAvailablePort(); - let wsServer: ws.Server; - if (v7) { - wsServer = new ws7.Server({ port, path }); - } else { - wsServer = new WebSocketServer({ port, path }); - } + const wsServer = new WebSocketServer({ port, path }); // sockets to kick off on teardown const sockets = new Set(); @@ -244,13 +237,17 @@ export async function startWSTServer( return Array.from(wsServer.clients, toClient); }, waitForClient(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { // the on connect listener below will be called before our listener, populating the queue // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const client = pendingClients.shift()!; - test?.(client); - resolve(); + try { + test?.(client); + resolve(); + } catch (err) { + reject(err); + } } if (pendingClients.length > 0) return done(); wsServer.once('connection', done); @@ -262,11 +259,15 @@ export async function startWSTServer( }); }, waitForClientClose(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { pendingCloses--; - test?.(); - resolve(); + try { + test?.(); + resolve(); + } catch (err) { + reject(err); + } } if (pendingCloses > 0) return done(); @@ -280,13 +281,17 @@ export async function startWSTServer( }, pong, waitForConnect(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { // the on connect listener below will be called before our listener, populating the queue // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const ctx = pendingConnections.shift()!; - test?.(ctx); - resolve(); + try { + test?.(ctx); + resolve(); + } catch (err) { + reject(err); + } } if (pendingConnections.length > 0) return done(); emitter.once('conn', done); @@ -298,11 +303,15 @@ export async function startWSTServer( }); }, waitForOperation(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { pendingOperations--; - test?.(); - resolve(); + try { + test?.(); + resolve(); + } catch (err) { + reject(err); + } } if (pendingOperations > 0) return done(); emitter.once('operation', done); @@ -314,11 +323,15 @@ export async function startWSTServer( }); }, waitForComplete(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { pendingCompletes--; - test?.(); - resolve(); + try { + test?.(); + resolve(); + } catch (err) { + reject(err); + } } if (pendingCompletes > 0) return done(); emitter.once('compl', done); @@ -421,13 +434,17 @@ export async function startUWSTServer( waitForClientClose: null, pong, waitForConnect(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { // the on connect listener below will be called before our listener, populating the queue // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const ctx = pendingConnections.shift()!; - test?.(ctx); - resolve(); + try { + test?.(ctx); + resolve(); + } catch (err) { + reject(err); + } } if (pendingConnections.length > 0) return done(); emitter.once('conn', done); @@ -439,11 +456,15 @@ export async function startUWSTServer( }); }, waitForOperation(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { pendingOperations--; - test?.(); - resolve(); + try { + test?.(); + resolve(); + } catch (err) { + reject(err); + } } if (pendingOperations > 0) return done(); emitter.once('operation', done); @@ -455,11 +476,15 @@ export async function startUWSTServer( }); }, waitForComplete(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { pendingCompletes--; - test?.(); - resolve(); + try { + test?.(); + resolve(); + } catch (err) { + reject(err); + } } if (pendingCompletes > 0) return done(); emitter.once('compl', done); @@ -507,11 +532,11 @@ export async function startFastifyWSTServer( const fastify = Fastify(); fastify.register(fastifyWebsocket); fastify.register(async (fastify) => { - fastify.get(path, { websocket: true }, (connection, request) => { - sockets.add(connection.socket); - pendingClients.push(toClient(connection.socket)); - connection.socket.once('close', () => { - sockets.delete(connection.socket); + fastify.get(path, { websocket: true }, (socket, request) => { + sockets.add(socket); + pendingClients.push(toClient(socket)); + socket.once('close', () => { + sockets.delete(socket); pendingCloses++; emitter.emit('close'); }); @@ -544,7 +569,7 @@ export async function startFastifyWSTServer( }, }, keepAlive, - ).call(fastify, connection, request); + ).call(fastify, socket, request); }); }); @@ -560,7 +585,7 @@ export async function startFastifyWSTServer( sockets.delete(socket); } - fastify.websocketServer.close((err) => { + fastify.websocketServer.close((err: unknown) => { if (err) return reject(err); fastify.close(() => { resolve(); @@ -579,13 +604,17 @@ export async function startFastifyWSTServer( return Array.from(fastify.websocketServer.clients, toClient); }, waitForClient(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { // the on connect listener below will be called before our listener, populating the queue // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const client = pendingClients.shift()!; - test?.(client); - resolve(); + try { + test?.(client); + resolve(); + } catch (err) { + reject(err); + } } if (pendingClients.length > 0) return done(); fastify.websocketServer.once('connection', done); @@ -597,11 +626,15 @@ export async function startFastifyWSTServer( }); }, waitForClientClose(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { pendingCloses--; - test?.(); - resolve(); + try { + test?.(); + resolve(); + } catch (err) { + reject(err); + } } if (pendingCloses > 0) return done(); @@ -615,13 +648,17 @@ export async function startFastifyWSTServer( }, pong, waitForConnect(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { // the on connect listener below will be called before our listener, populating the queue // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const ctx = pendingConnections.shift()!; - test?.(ctx); - resolve(); + try { + test?.(ctx); + resolve(); + } catch (err) { + reject(err); + } } if (pendingConnections.length > 0) return done(); emitter.once('conn', done); @@ -633,11 +670,15 @@ export async function startFastifyWSTServer( }); }, waitForOperation(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { pendingOperations--; - test?.(); - resolve(); + try { + test?.(); + resolve(); + } catch (err) { + reject(err); + } } if (pendingOperations > 0) return done(); emitter.once('operation', done); @@ -649,11 +690,15 @@ export async function startFastifyWSTServer( }); }, waitForComplete(test, expire) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { function done() { pendingCompletes--; - test?.(); - resolve(); + try { + test?.(); + resolve(); + } catch (err) { + reject(err); + } } if (pendingCompletes > 0) return done(); emitter.once('compl', done); @@ -679,17 +724,6 @@ export const tServers = [ itForUWS: it.skip, itForFastify: it.skip, }, - { - tServer: 'ws7' as const, - startTServer: (options?: Partial, keepAlive?: number) => - startWSTServer(options, keepAlive, true), - skipWS: it.skip, - skipUWS: it, - skipFastify: it, - itForWS: it, - itForUWS: it.skip, - itForFastify: it.skip, - }, { tServer: 'uWebSockets.js' as const, startTServer: startUWSTServer, diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json deleted file mode 100644 index 395cad81..00000000 --- a/tsconfig.cjs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "commonjs", - "rootDir": "./src", - "outDir": "./lib", - "declaration": false // already built by `tsconfig.esm.json` - }, - "include": ["src"], - "exclude": ["src/__tests__"] -} diff --git a/tsconfig.esm.json b/tsconfig.esm.json deleted file mode 100644 index 5a37ce8c..00000000 --- a/tsconfig.esm.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "es2015", - "rootDir": "./src", - "outDir": "./lib", - "declaration": true - }, - "include": ["src"], - "exclude": ["src/__tests__"] -} diff --git a/tsconfig.json b/tsconfig.json index 55b4d78c..08a77606 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,17 @@ { + "extends": ["@tsconfig/strictest/tsconfig.json"], "compilerOptions": { - "moduleResolution": "node", - "target": "es2017", - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "useUnknownInCatchVariables": false, - "checkJs": true, - "jsx": "preserve" + "noEmit": true, + "target": "esnext", + "module": "esnext", + "moduleResolution": "bundler", + "noPropertyAccessFromIndexSignature": false }, "include": [ "src", "tests", "scripts", - "rollup.config.ts", + "rollup.config.js", "babel.config.js", "jest.config.js", ".eslintrc.js", diff --git a/typedoc.js b/typedoc.js index 5fc13623..eb140f6d 100644 --- a/typedoc.js +++ b/typedoc.js @@ -1,5 +1,5 @@ /** - * @type {Partial & Partial} + * @type {Partial & Partial} */ const opts = { entryPointStrategy: 'expand', @@ -11,9 +11,9 @@ const opts = { categorizeByGroup: false, // removes redundant category names in matching modules githubPages: false, exclude: ['**/index.ts', '**/utils.ts', '**/parser.ts', '**/__tests__/**/*'], - entryDocument: 'index.md', - hideInPageTOC: true, + hidePageHeader: true, + entryFileName: 'index.md', publicPath: '/docs/', hideBreadcrumbs: true, }; -module.exports = opts; +export default opts; diff --git a/website/package.json b/website/package.json index 9b2449c2..431d5bb3 100644 --- a/website/package.json +++ b/website/package.json @@ -3,7 +3,7 @@ "private": true, "scripts": { "build": "next build && next-sitemap --config next-sitemap.config.cjs", - "check:type": "tsc --noEmit", + "check:types": "tsc --noEmit", "start": "next" }, "dependencies": { diff --git a/yarn.lock b/yarn.lock index 57b2f039..dbc9bfd2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,19 @@ __metadata: version: 8 cacheKey: 10c0 +"@asamuzakjp/css-color@npm:^2.8.2": + version: 2.8.2 + resolution: "@asamuzakjp/css-color@npm:2.8.2" + dependencies: + "@csstools/css-calc": "npm:^2.1.1" + "@csstools/css-color-parser": "npm:^3.0.7" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + lru-cache: "npm:^11.0.2" + checksum: 10c0/352b91ca7741876e459cd3cb350a969e842da1e532577157d38365a6da89b7d6e6944249489366ee61b8a225ede1b521e7ab305b70ad4c688b01404061eecca8 + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.2": version: 7.26.2 resolution: "@babel/code-frame@npm:7.26.2" @@ -16,16 +29,16 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.26.2, @babel/generator@npm:^7.26.3": - version: 7.26.3 - resolution: "@babel/generator@npm:7.26.3" +"@babel/generator@npm:^7.26.2, @babel/generator@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/generator@npm:7.26.5" dependencies: - "@babel/parser": "npm:^7.26.3" - "@babel/types": "npm:^7.26.3" + "@babel/parser": "npm:^7.26.5" + "@babel/types": "npm:^7.26.5" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/54f260558e3e4ec8942da3cde607c35349bb983c3a7c5121243f96893fba3e8cd62e1f1773b2051f936f8c8a10987b758d5c7d76dbf2784e95bb63ab4843fa00 + checksum: 10c0/3be79e0aa03f38858a465d12ee2e468320b9122dc44fc85984713e32f16f4d77ce34a16a1a9505972782590e0b8d847b6f373621f9c6fafa1906d90f31416cb0 languageName: node linkType: hard @@ -43,14 +56,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2, @babel/parser@npm:^7.26.3": - version: 7.26.3 - resolution: "@babel/parser@npm:7.26.3" +"@babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2, @babel/parser@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/parser@npm:7.26.5" dependencies: - "@babel/types": "npm:^7.26.3" + "@babel/types": "npm:^7.26.5" bin: parser: ./bin/babel-parser.js - checksum: 10c0/48f736374e61cfd10ddbf7b80678514ae1f16d0e88bc793d2b505d73d9b987ea786fc8c2f7ee8f8b8c467df062030eb07fd0eb2168f0f541ca1f542775852cad + checksum: 10c0/2e77dd99ee028ee3c10fa03517ae1169f2432751adf71315e4dc0d90b61639d51760d622f418f6ac665ae4ea65f8485232a112ea0e76f18e5900225d3d19a61e languageName: node linkType: hard @@ -75,27 +88,27 @@ __metadata: linkType: hard "@babel/traverse@npm:^7.25.9": - version: 7.26.4 - resolution: "@babel/traverse@npm:7.26.4" + version: 7.26.5 + resolution: "@babel/traverse@npm:7.26.5" dependencies: "@babel/code-frame": "npm:^7.26.2" - "@babel/generator": "npm:^7.26.3" - "@babel/parser": "npm:^7.26.3" + "@babel/generator": "npm:^7.26.5" + "@babel/parser": "npm:^7.26.5" "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.26.3" + "@babel/types": "npm:^7.26.5" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/cf25d0eda9505daa0f0832ad786b9e28c9d967e823aaf7fbe425250ab198c656085495aa6bed678b27929e095c84eea9fd778b851a31803da94c9bc4bf4eaef7 + checksum: 10c0/0779059ecf63e31446564cf31adf170e701e8017ef02c819c57924a9a83d6b2ce41dbff3ef295589da9410497a3e575655bb8084ca470e0ab1bc193128afa9fe languageName: node linkType: hard -"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.3": - version: 7.26.3 - resolution: "@babel/types@npm:7.26.3" +"@babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/types@npm:7.26.5" dependencies: "@babel/helper-string-parser": "npm:^7.25.9" "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/966c5242c5e55c8704bf7a7418e7be2703a0afa4d19a8480999d5a4ef13d095dd60686615fe5983cb7593b4b06ba3a7de8d6ca501c1d78bdd233a10d90be787b + checksum: 10c0/0278053b69d7c2b8573aa36dc5242cad95f0d965e1c0ed21ccacac6330092e59ba5949753448f6d6eccf6ad59baaef270295cc05218352e060ea8c68388638c4 languageName: node linkType: hard @@ -354,6 +367,52 @@ __metadata: languageName: node linkType: hard +"@csstools/color-helpers@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/color-helpers@npm:5.0.1" + checksum: 10c0/77fa3b7236eaa3f36dea24708ac0d5e53168903624ac5aed54615752a0730cd20773fda50e742ce868012eca8c000cc39688e05869e79f34714230ab6968d1e6 + languageName: node + linkType: hard + +"@csstools/css-calc@npm:^2.1.1": + version: 2.1.1 + resolution: "@csstools/css-calc@npm:2.1.1" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/857c8dac40eb6ba8810408dad141bbcad060b28bce69dfd3bcf095a060fcaa23d5c4dbf52be88fcb57e12ce32c666e855dc68de1d8020851f6b432e3f9b29950 + languageName: node + linkType: hard + +"@csstools/css-color-parser@npm:^3.0.7": + version: 3.0.7 + resolution: "@csstools/css-color-parser@npm:3.0.7" + dependencies: + "@csstools/color-helpers": "npm:^5.0.1" + "@csstools/css-calc": "npm:^2.1.1" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/b81780e6c50f0b0605776bd39bbd6203780231a561601853a9835cc70788560e7a281d0fbfe47ebe8affcb07dd64b0b1dcd4b67552520cfbe0e5088df158f12c + languageName: node + linkType: hard + +"@csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/css-parser-algorithms@npm:3.0.4" + peerDependencies: + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/d411f07765e14eede17bccc6bd4f90ff303694df09aabfede3fd104b2dfacfd4fe3697cd25ddad14684c850328f3f9420ebfa9f78380892492974db24ae47dbd + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-tokenizer@npm:3.0.3" + checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/aix-ppc64@npm:0.21.5" @@ -361,6 +420,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/aix-ppc64@npm:0.24.2" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/android-arm64@npm:0.21.5" @@ -368,6 +434,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm64@npm:0.24.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/android-arm@npm:0.21.5" @@ -375,6 +448,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-arm@npm:0.24.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/android-x64@npm:0.21.5" @@ -382,6 +462,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/android-x64@npm:0.24.2" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/darwin-arm64@npm:0.21.5" @@ -389,6 +476,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-arm64@npm:0.24.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/darwin-x64@npm:0.21.5" @@ -396,6 +490,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/darwin-x64@npm:0.24.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/freebsd-arm64@npm:0.21.5" @@ -403,6 +504,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-arm64@npm:0.24.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/freebsd-x64@npm:0.21.5" @@ -410,6 +518,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/freebsd-x64@npm:0.24.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-arm64@npm:0.21.5" @@ -417,6 +532,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm64@npm:0.24.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-arm@npm:0.21.5" @@ -424,6 +546,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-arm@npm:0.24.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-ia32@npm:0.21.5" @@ -431,6 +560,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ia32@npm:0.24.2" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-loong64@npm:0.21.5" @@ -438,6 +574,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-loong64@npm:0.24.2" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-mips64el@npm:0.21.5" @@ -445,6 +588,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-mips64el@npm:0.24.2" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-ppc64@npm:0.21.5" @@ -452,6 +602,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-ppc64@npm:0.24.2" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-riscv64@npm:0.21.5" @@ -459,6 +616,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-riscv64@npm:0.24.2" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-s390x@npm:0.21.5" @@ -466,6 +630,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-s390x@npm:0.24.2" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/linux-x64@npm:0.21.5" @@ -473,6 +644,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/linux-x64@npm:0.24.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-arm64@npm:0.24.2" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/netbsd-x64@npm:0.21.5" @@ -480,6 +665,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/netbsd-x64@npm:0.24.2" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-arm64@npm:0.24.2" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/openbsd-x64@npm:0.21.5" @@ -487,6 +686,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/openbsd-x64@npm:0.24.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/sunos-x64@npm:0.21.5" @@ -494,6 +700,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/sunos-x64@npm:0.24.2" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/win32-arm64@npm:0.21.5" @@ -501,6 +714,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-arm64@npm:0.24.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/win32-ia32@npm:0.21.5" @@ -508,6 +728,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-ia32@npm:0.24.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/win32-x64@npm:0.21.5" @@ -515,76 +742,48 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": - version: 4.4.1 - resolution: "@eslint-community/eslint-utils@npm:4.4.1" - dependencies: - eslint-visitor-keys: "npm:^3.4.3" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.12.1 - resolution: "@eslint-community/regexpp@npm:4.12.1" - checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 +"@esbuild/win32-x64@npm:0.24.2": + version: 0.24.2 + resolution: "@esbuild/win32-x64@npm:0.24.2" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" +"@fastify/ajv-compiler@npm:^4.0.0": + version: 4.0.2 + resolution: "@fastify/ajv-compiler@npm:4.0.2" dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^9.6.0" - globals: "npm:^13.19.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + ajv: "npm:^8.12.0" + ajv-formats: "npm:^3.0.1" + fast-uri: "npm:^3.0.0" + checksum: 10c0/ca048db219cc958fb1b962f5dfc141f29e067ecb28a8dbe782bbef80ae3c920021468009cad613f0ed68db410890bb09c773ba2f33cb13e055b48c9c338bd8fa languageName: node linkType: hard -"@eslint/js@npm:8.57.1": - version: 8.57.1 - resolution: "@eslint/js@npm:8.57.1" - checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 +"@fastify/error@npm:^4.0.0": + version: 4.0.0 + resolution: "@fastify/error@npm:4.0.0" + checksum: 10c0/074b8a6c350c29a8fc8314298d9457fe0c1ba6e7f160e9ae6ba0e18853f1ec7427d768f966700cbf67a4694f3a9a593c6a23e42ce3ed62e40fecdf8026040d9a languageName: node linkType: hard -"@fastify/ajv-compiler@npm:^3.5.0": - version: 3.6.0 - resolution: "@fastify/ajv-compiler@npm:3.6.0" +"@fastify/fast-json-stringify-compiler@npm:^5.0.0": + version: 5.0.2 + resolution: "@fastify/fast-json-stringify-compiler@npm:5.0.2" dependencies: - ajv: "npm:^8.11.0" - ajv-formats: "npm:^2.1.1" - fast-uri: "npm:^2.0.0" - checksum: 10c0/f0be2ca1f75833492829c52c5f5ef0ec118bdd010614e002a6366952c27297c0f6a7dafb5917a0f9c4aaa84aa32a39e520c6d837fa251748717d58590cfc8177 - languageName: node - linkType: hard - -"@fastify/error@npm:^3.3.0, @fastify/error@npm:^3.4.0": - version: 3.4.1 - resolution: "@fastify/error@npm:3.4.1" - checksum: 10c0/1f1a0faa8c86639afb6f4bd47a9cdc1f0f20ce0d6944340fbdec8218aaba91dc9cae9ed78e24e61bceb782a867efda2b9a6320091f00dcbb896d9c8a9bdf5f96 + fast-json-stringify: "npm:^6.0.0" + checksum: 10c0/835f91cdb4911bbf50884ce60fa6937564e50f81cb134e81e251344ad7ec022ac500a54843e5167819a214828a369c996e68fbd5347965d336908b44904812e3 languageName: node linkType: hard -"@fastify/fast-json-stringify-compiler@npm:^4.3.0": - version: 4.3.0 - resolution: "@fastify/fast-json-stringify-compiler@npm:4.3.0" - dependencies: - fast-json-stringify: "npm:^5.7.0" - checksum: 10c0/513ef296f5ed682f7a460cfa6c5fb917a32fc540111b873c9937f944558e021492b18f30f9fd8dd20db252381a4428adbcc9f03a077f16c86d02f081eb490c7b +"@fastify/forwarded@npm:^3.0.0": + version: 3.0.0 + resolution: "@fastify/forwarded@npm:3.0.0" + checksum: 10c0/bd139ee46c193ed9e04af2539f31fcb9e542b91917820f6cf401d5715c4c8bcccaae4a148e0ca14eeddee077ad8a3ab73e6f0f1ad769aff861fcef5f0a28e0d2 languageName: node linkType: hard -"@fastify/merge-json-schemas@npm:^0.1.0": +"@fastify/merge-json-schemas@npm:^0.1.1": version: 0.1.1 resolution: "@fastify/merge-json-schemas@npm:0.1.1" dependencies: @@ -593,45 +792,41 @@ __metadata: languageName: node linkType: hard -"@fastify/websocket@npm:^9.0.0": - version: 9.0.0 - resolution: "@fastify/websocket@npm:9.0.0" +"@fastify/proxy-addr@npm:^5.0.0": + version: 5.0.0 + resolution: "@fastify/proxy-addr@npm:5.0.0" dependencies: - duplexify: "npm:^4.1.2" - fastify-plugin: "npm:^4.0.0" - ws: "npm:^8.0.0" - checksum: 10c0/7e0e32179464918bc9b3fca180c507dbc32a7d9c9891517ba9356339a1a5017f09e6dd0df9e6f25632b8b9c5cb31171315b4fcc919318169118d2c01c28915d2 + "@fastify/forwarded": "npm:^3.0.0" + ipaddr.js: "npm:^2.1.0" + checksum: 10c0/5a7d667480c3699015aa9bc12a47b6044106f412725d91a1b90f4a7845390c710486f05d322a895c633fb32a5ba1a17e598cb72e727337862034034443d59bcd languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" +"@fastify/websocket@npm:^11.0.2": + version: 11.0.2 + resolution: "@fastify/websocket@npm:11.0.2" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.3" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + duplexify: "npm:^4.1.3" + fastify-plugin: "npm:^5.0.0" + ws: "npm:^8.16.0" + checksum: 10c0/ccdaf645d768f427542d5133d3a0f8b4ce49e4bc2496543e1fb6f1d4b8c4e07af6fb80bde7bf50acf7536cb35c839c54d94a0a6b6f1aec76d413f0e68b92e04e languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c +"@gerrit0/mini-shiki@npm:^1.24.0": + version: 1.26.1 + resolution: "@gerrit0/mini-shiki@npm:1.26.1" + dependencies: + "@shikijs/engine-oniguruma": "npm:^1.26.1" + "@shikijs/types": "npm:^1.26.1" + "@shikijs/vscode-textmate": "npm:^10.0.1" + checksum: 10c0/044ff495b39105c63e0a8fdd9f46891761a89019e318ffc472a0bd25e632f8593b158efb24a00e6654d8021c7ffd4e8dbbdfe96823da85360e66ebe45e4b8538 languageName: node linkType: hard -"@ianvs/prettier-plugin-sort-imports@npm:^4.4.0": - version: 4.4.0 - resolution: "@ianvs/prettier-plugin-sort-imports@npm:4.4.0" +"@ianvs/prettier-plugin-sort-imports@npm:^4.4.1": + version: 4.4.1 + resolution: "@ianvs/prettier-plugin-sort-imports@npm:4.4.1" dependencies: "@babel/generator": "npm:^7.26.2" "@babel/parser": "npm:^7.26.2" @@ -644,7 +839,7 @@ __metadata: peerDependenciesMeta: "@vue/compiler-sfc": optional: true - checksum: 10c0/8578ae3de4c965e59196388c2ce5d06cb16cbb445c3ba9ce301cf167facfdf9049cfcc343cacc3e383e2bda051b73c1620c8d18812decf1a3a17acacc1dee61b + checksum: 10c0/bdf2f658f495d0899318c6d4542b10007bc7343d53c5436cc6eb82cc29e57be97e19fb74004c282c4a44da2e015c5ddaa2c3c451fbc7fec64b1a96ff0e4d0f6d languageName: node linkType: hard @@ -662,6 +857,15 @@ __metadata: languageName: node linkType: hard +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.8 resolution: "@jridgewell/gen-mapping@npm:0.3.8" @@ -757,7 +961,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": +"@nodelib/fs.walk@npm:^1.2.3": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -767,25 +971,25 @@ __metadata: languageName: node linkType: hard -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" dependencies: agent-base: "npm:^7.1.0" http-proxy-agent: "npm:^7.0.0" https-proxy-agent: "npm:^7.0.1" lru-cache: "npm:^10.0.1" socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 languageName: node linkType: hard -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" dependencies: semver: "npm:^7.3.5" - checksum: 10c0/162b4a0b8705cd6f5c2470b851d1dc6cd228c86d2170e1769d738c1fbb69a87160901411c3c035331e9e99db72f1f1099a8b734bf1637cc32b9a5be1660e4e1e + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 languageName: node linkType: hard @@ -796,42 +1000,136 @@ __metadata: languageName: node linkType: hard -"@rollup/plugin-terser@npm:^0.4.4": - version: 0.4.4 - resolution: "@rollup/plugin-terser@npm:0.4.4" +"@rollup/plugin-alias@npm:^5.1.1": + version: 5.1.1 + resolution: "@rollup/plugin-alias@npm:5.1.1" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/00592400563b65689631e820bd72ff440f5cd21021bbd2f21b8558582ab58fd109067da77000091e40fcb8c20cabcd3a09b239a30e012bb47f6bc1a15b68ca59 + languageName: node + linkType: hard + +"@rollup/plugin-commonjs@npm:^28.0.2": + version: 28.0.2 + resolution: "@rollup/plugin-commonjs@npm:28.0.2" dependencies: - serialize-javascript: "npm:^6.0.1" - smob: "npm:^1.0.0" - terser: "npm:^5.17.4" + "@rollup/pluginutils": "npm:^5.0.1" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.2" + fdir: "npm:^6.2.0" + is-reference: "npm:1.2.1" + magic-string: "npm:^0.30.3" + picomatch: "npm:^4.0.2" peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 + rollup: ^2.68.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - checksum: 10c0/b9cb6c8f02ac1c1344019e9fb854321b74f880efebc41b6bdd84f18331fce0f4a2aadcdb481042245cd3f409b429ac363af71f9efec4a2024731d67d32af36ee + checksum: 10c0/e90a443e63bfed567d5a4854960240d256818a0b3c69a45e95e196c40a755959406dabe4fbccb886eeb45d3445ddc8f966632563a7d590808be7eee8084384f1 + languageName: node + linkType: hard + +"@rollup/plugin-dynamic-import-vars@npm:^2.1.5": + version: 2.1.5 + resolution: "@rollup/plugin-dynamic-import-vars@npm:2.1.5" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + astring: "npm:^1.8.5" + estree-walker: "npm:^2.0.2" + fast-glob: "npm:^3.2.12" + magic-string: "npm:^0.30.3" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/b738dc6e627572a382b64c699886fc9d2cc067e17390ac318a506ee8eb6793f9d6091ea75257468eaa4f627bfa79b380109bb4ee8df24e728c1a19c8f9c0cf2f + languageName: node + linkType: hard + +"@rollup/plugin-inject@npm:^5.0.5": + version: 5.0.5 + resolution: "@rollup/plugin-inject@npm:5.0.5" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + estree-walker: "npm:^2.0.2" + magic-string: "npm:^0.30.3" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/22d10cf44fa56a6683d5ac4df24a9003379b3dcaae9897f5c30c844afc2ebca83cfaa5557f13a1399b1c8a0d312c3217bcacd508b7ebc4b2cbee401bd1ec8be2 languageName: node linkType: hard -"@rollup/plugin-typescript@npm:^11.1.6": - version: 11.1.6 - resolution: "@rollup/plugin-typescript@npm:11.1.6" +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" dependencies: "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/9400c431b5e0cf3088ba2eb2d038809a2b0fb2a84ed004997da85582f48cd64958ed3168893c4f2c8109e38652400ed68282d0c92bf8ec07a3b2ef2e1ceab0b7 + languageName: node + linkType: hard + +"@rollup/plugin-node-resolve@npm:^16.0.0": + version: 16.0.0 + resolution: "@rollup/plugin-node-resolve@npm:16.0.0" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + "@types/resolve": "npm:1.20.2" + deepmerge: "npm:^4.2.2" + is-module: "npm:^1.0.0" resolve: "npm:^1.22.1" peerDependencies: - rollup: ^2.14.0||^3.0.0||^4.0.0 - tslib: "*" - typescript: ">=3.7.0" + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/b63deb6fc14b37070ccaffacc8c10c9720f28ce7632f4fe2ee77064c0c79bcc3fe060fb77160e673c9fd847307252f25a2983030bd54f1888324063c69ae1399 + languageName: node + linkType: hard + +"@rollup/plugin-replace@npm:^6.0.2": + version: 6.0.2 + resolution: "@rollup/plugin-replace@npm:6.0.2" + dependencies: + "@rollup/pluginutils": "npm:^5.0.1" + magic-string: "npm:^0.30.3" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - tslib: + checksum: 10c0/71c0dea46f560c8dff59853446d43fa0e8258139a74d2af09fce5790d0540ff3d874c8fd9962cb049577d25327262bfc97485ef90b2a0a21bf28a9d3bd8c6d44 + languageName: node + linkType: hard + +"@rollup/plugin-terser@npm:^0.4.4": + version: 0.4.4 + resolution: "@rollup/plugin-terser@npm:0.4.4" + dependencies: + serialize-javascript: "npm:^6.0.1" + smob: "npm:^1.0.0" + terser: "npm:^5.17.4" + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: optional: true - checksum: 10c0/5347cd73ac28d4cf2401a3e689864a1a0df8f3ae029abd9c38525cbc84bcfa16c3a32a0ac5698dac65ec531ba7cf8332e14f5fc7f8fa501193da23320a134c5c + checksum: 10c0/b9cb6c8f02ac1c1344019e9fb854321b74f880efebc41b6bdd84f18331fce0f4a2aadcdb481042245cd3f409b429ac363af71f9efec4a2024731d67d32af36ee languageName: node linkType: hard -"@rollup/pluginutils@npm:^5.1.0": +"@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.1.0, @rollup/pluginutils@npm:^5.1.4": version: 5.1.4 resolution: "@rollup/pluginutils@npm:5.1.4" dependencies: @@ -980,13 +1278,37 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:^8.56.10": - version: 8.56.12 - resolution: "@types/eslint@npm:8.56.12" +"@shikijs/engine-oniguruma@npm:^1.26.1": + version: 1.27.0 + resolution: "@shikijs/engine-oniguruma@npm:1.27.0" dependencies: - "@types/estree": "npm:*" - "@types/json-schema": "npm:*" - checksum: 10c0/e4ca426abe9d55f82b69a3250bec78b6d340ad1e567f91c97ecc59d3b2d6a1d8494955ac62ad0ea14b97519db580611c02be8277cbea370bdfb0f96aa2910504 + "@shikijs/types": "npm:1.27.0" + "@shikijs/vscode-textmate": "npm:^10.0.1" + checksum: 10c0/ed7e85fc79cd4ebf02047e8d16915d33495f2fd879e4d46563a6fc62ab9ccfc6f32f0aee2979feca3afe0f48ee3e5cce0ab674582cc1c09f307eafc61da2df19 + languageName: node + linkType: hard + +"@shikijs/types@npm:1.27.0, @shikijs/types@npm:^1.26.1": + version: 1.27.0 + resolution: "@shikijs/types@npm:1.27.0" + dependencies: + "@shikijs/vscode-textmate": "npm:^10.0.1" + "@types/hast": "npm:^3.0.4" + checksum: 10c0/c3c3559cfa73d9b4e7ea989fd707fc38d80a41e7144b4868abee3dfd84f1bca2124be51a7456c736e772c74db483f0ff5529bbab0175a53c19a55dd04694e690 + languageName: node + linkType: hard + +"@shikijs/vscode-textmate@npm:^10.0.1": + version: 10.0.1 + resolution: "@shikijs/vscode-textmate@npm:10.0.1" + checksum: 10c0/acdbcf1b00d2503620ab50c2a23c7876444850ae0610c8e8b85a29587a333be40c9b98406ff17b9f87cbc64674dac6a2ada680374bde3e51a890e16cf1407490 + languageName: node + linkType: hard + +"@tsconfig/strictest@npm:^2.0.5": + version: 2.0.5 + resolution: "@tsconfig/strictest@npm:2.0.5" + checksum: 10c0/cfc86da2d57f7b4b0827701b132c37a4974284e5c40649656c0e474866dfd8a69f57c6718230d8a8139967e2a95438586b8224c13ab0ff9d3a43eda771c50cc4 languageName: node linkType: hard @@ -1007,10 +1329,12 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db +"@types/hast@npm:^3.0.4": + version: 3.0.4 + resolution: "@types/hast@npm:3.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10c0/3249781a511b38f1d330fd1e3344eed3c4e7ea8eff82e835d35da78e637480d36fad37a78be5a7aed8465d237ad0446abc1150859d0fde395354ea634decf9f7 languageName: node linkType: hard @@ -1022,11 +1346,11 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 22.10.5 - resolution: "@types/node@npm:22.10.5" + version: 22.10.6 + resolution: "@types/node@npm:22.10.6" dependencies: undici-types: "npm:~6.20.0" - checksum: 10c0/6a0e7d1fe6a86ef6ee19c3c6af4c15542e61aea2f4cee655b6252efb356795f1f228bc8299921e82924e80ff8eca29b74d9dd0dd5cc1a90983f892f740b480df + checksum: 10c0/8b67affc211e5f9c74f7949cda04ca669721e50b83d71b8772a7bed7a4a3c41d663b3a794413f618e763ca6c5da8c234c25ffebcb0737983fc3e7415818ab9a7 languageName: node linkType: hard @@ -1046,7 +1370,21 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:^8.5.10, @types/ws@npm:~8.5.10": +"@types/resolve@npm:1.20.2": + version: 1.20.2 + resolution: "@types/resolve@npm:1.20.2" + checksum: 10c0/c5b7e1770feb5ccfb6802f6ad82a7b0d50874c99331e0c9b259e415e55a38d7a86ad0901c57665d93f75938be2a6a0bc9aa06c9749192cadb2e4512800bbc6e6 + languageName: node + linkType: hard + +"@types/unist@npm:*": + version: 3.0.3 + resolution: "@types/unist@npm:3.0.3" + checksum: 10c0/2b1e4adcab78388e088fcc3c0ae8700f76619dbcb4741d7d201f87e2cb346bfc29a89003cfea2d76c996e1061452e14fcd737e8b25aacf949c1f2d6b2bc3dd60 + languageName: node + linkType: hard + +"@types/ws@npm:^8.5.13, @types/ws@npm:~8.5.10": version: 8.5.13 resolution: "@types/ws@npm:8.5.13" dependencies: @@ -1055,134 +1393,9 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^7.7.0": - version: 7.18.0 - resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" - dependencies: - "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/type-utils": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.3.1" - natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - "@typescript-eslint/parser": ^7.0.0 - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/2b37948fa1b0dab77138909dabef242a4d49ab93e4019d4ef930626f0a7d96b03e696cd027fa0087881c20e73be7be77c942606b4a76fa599e6b37f6985304c3 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^7.7.0": - version: 7.18.0 - resolution: "@typescript-eslint/parser@npm:7.18.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/370e73fca4278091bc1b657f85e7d74cd52b24257ea20c927a8e17546107ce04fbf313fec99aed0cc2a145ddbae1d3b12e9cc2c1320117636dc1281bcfd08059 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/scope-manager@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - checksum: 10c0/038cd58c2271de146b3a594afe2c99290034033326d57ff1f902976022c8b0138ffd3cb893ae439ae41003b5e4bcc00cabf6b244ce40e8668f9412cc96d97b8e - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/type-utils@npm:7.18.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:7.18.0" - "@typescript-eslint/utils": "npm:7.18.0" - debug: "npm:^4.3.4" - ts-api-utils: "npm:^1.3.0" - peerDependencies: - eslint: ^8.56.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/ad92a38007be620f3f7036f10e234abdc2fdc518787b5a7227e55fd12896dacf56e8b34578723fbf9bea8128df2510ba8eb6739439a3879eda9519476d5783fd - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/types@npm:7.18.0" - checksum: 10c0/eb7371ac55ca77db8e59ba0310b41a74523f17e06f485a0ef819491bc3dd8909bb930120ff7d30aaf54e888167e0005aa1337011f3663dc90fb19203ce478054 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/typescript-estree@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/visitor-keys": "npm:7.18.0" - debug: "npm:^4.3.4" - globby: "npm:^11.1.0" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^1.3.0" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10c0/0c7f109a2e460ec8a1524339479cf78ff17814d23c83aa5112c77fb345e87b3642616291908dcddea1e671da63686403dfb712e4a4435104f92abdfddf9aba81 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/utils@npm:7.18.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - "@typescript-eslint/scope-manager": "npm:7.18.0" - "@typescript-eslint/types": "npm:7.18.0" - "@typescript-eslint/typescript-estree": "npm:7.18.0" - peerDependencies: - eslint: ^8.56.0 - checksum: 10c0/a25a6d50eb45c514469a01ff01f215115a4725fb18401055a847ddf20d1b681409c4027f349033a95c4ff7138d28c3b0a70253dfe8262eb732df4b87c547bd1e - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:7.18.0": - version: 7.18.0 - resolution: "@typescript-eslint/visitor-keys@npm:7.18.0" - dependencies: - "@typescript-eslint/types": "npm:7.18.0" - eslint-visitor-keys: "npm:^3.4.3" - checksum: 10c0/538b645f8ff1d9debf264865c69a317074eaff0255e63d7407046176b0f6a6beba34a6c51d511f12444bae12a98c69891eb6f403c9f54c6c2e2849d1c1cb73c0 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.2.0": - version: 1.2.1 - resolution: "@ungap/structured-clone@npm:1.2.1" - checksum: 10c0/127afbcc75ff1532f7b1eb85ee992f9faa70e8d5bb2558da05355d423b966fc279d0a485bf19da2883280e7c299ae4170809a72e78eab086da71c6bcdda5d1e2 - languageName: node - linkType: hard - -"@vitest/expect@npm:2.1.8": - version: 2.1.8 - resolution: "@vitest/expect@npm:2.1.8" +"@vitest/expect@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/expect@npm:2.1.8" dependencies: "@vitest/spy": "npm:2.1.8" "@vitest/utils": "npm:2.1.8" @@ -1275,30 +1488,12 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 - languageName: node - linkType: hard - -"acorn@npm:^8.8.2, acorn@npm:^8.9.0": - version: 8.11.3 - resolution: "acorn@npm:8.11.3" +"acorn@npm:^8.8.2": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" bin: acorn: bin/acorn - checksum: 10c0/3ff155f8812e4a746fee8ecff1f227d527c4c45655bb1fad6347c3cb58e46190598217551b1500f18542d2bbe5c87120cb6927f5a074a59166fbdd9468f0a299 - languageName: node - linkType: hard - -"agent-base@npm:^7.0.2": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: "npm:^4.3.4" - checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 languageName: node linkType: hard @@ -1309,30 +1504,6 @@ __metadata: languageName: node linkType: hard -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 - languageName: node - linkType: hard - -"ajv-formats@npm:^2.1.1": - version: 2.1.1 - resolution: "ajv-formats@npm:2.1.1" - dependencies: - ajv: "npm:^8.0.0" - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 - languageName: node - linkType: hard - "ajv-formats@npm:^3.0.1": version: 3.0.1 resolution: "ajv-formats@npm:3.0.1" @@ -1347,19 +1518,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 - languageName: node - linkType: hard - -"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.0": +"ajv@npm:^8.0.0, ajv@npm:^8.12.0": version: 8.17.1 resolution: "ajv@npm:8.17.1" dependencies: @@ -1392,14 +1551,7 @@ __metadata: languageName: node linkType: hard -"ansi-sequence-parser@npm:^1.1.0": - version: 1.1.1 - resolution: "ansi-sequence-parser@npm:1.1.1" - checksum: 10c0/ab2259ccf69f145ecf1418d4e71524158828f44afdf37c7536677871f4cebaa8b176fcb95de8f94a68129357dddc59586597da25f9d4ebf9968f6ef022bf0b31 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": +"ansi-styles@npm:^4.0.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -1445,6 +1597,15 @@ __metadata: languageName: node linkType: hard +"astring@npm:^1.8.5": + version: 1.9.0 + resolution: "astring@npm:1.9.0" + bin: + astring: bin/astring + checksum: 10c0/e7519544d9824494e80ef0e722bb3a0c543a31440d59691c13aeaceb75b14502af536b23f08db50aa6c632dafaade54caa25f0788aa7550b6b2d6e2df89e0830 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -1459,20 +1620,13 @@ __metadata: languageName: node linkType: hard -"avvio@npm:^8.3.0": - version: 8.4.0 - resolution: "avvio@npm:8.4.0" +"avvio@npm:^9.0.0": + version: 9.1.0 + resolution: "avvio@npm:9.1.0" dependencies: - "@fastify/error": "npm:^3.3.0" + "@fastify/error": "npm:^4.0.0" fastq: "npm:^1.17.1" - checksum: 10c0/bea7f28e38b57755786852226f380ea087d572f8bbcfe14b59d1239551ef89cecc40229a6ac85e17af44c81a481d03280576586385e93d76bb9f2c5bc75c6067 - languageName: node - linkType: hard - -"backo2@npm:^1.0.2": - version: 1.0.2 - resolution: "backo2@npm:1.0.2" - checksum: 10c0/a9e825a6a38a6d1c4a94476eabc13d6127dfaafb0967baf104affbb67806ae26abbb58dab8d572d2cd21ef06634ff57c3ad48dff14b904e18de1474cc2f22bf3 + checksum: 10c0/bdc294a7e8f38e1e21f9d338d97d7240025db54f1005fc419cfe0499a35edf2276ab1fe91135739faa3a9437358ec6912d5a56f23361b061880333cb4f1c7884 languageName: node linkType: hard @@ -1492,16 +1646,6 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 - languageName: node - linkType: hard - "brace-expansion@npm:^2.0.1": version: 2.0.1 resolution: "brace-expansion@npm:2.0.1" @@ -1527,13 +1671,13 @@ __metadata: languageName: node linkType: hard -"bun-types@npm:^1.1.4": - version: 1.1.42 - resolution: "bun-types@npm:1.1.42" +"bun-types@npm:^1.1.43": + version: 1.1.43 + resolution: "bun-types@npm:1.1.43" dependencies: "@types/node": "npm:~20.12.8" "@types/ws": "npm:~8.5.10" - checksum: 10c0/8b5db9062be170799bb21bc671af0b1c5ac88f3cd6862ada9bd095172a7dbc11a0d43fed734b8803e6f815e996f4d456f4fa645d4a10b22317db8c95b0bd65c9 + checksum: 10c0/aea1d4f0c020c0e19c5eee60ce06c8daaae7b30b6263bec4b2143ec5c0e53e4a140d291a8083fcacffbc81f3513e11c7f5161a3cd094515222788e5ae534ed79 languageName: node linkType: hard @@ -1544,11 +1688,11 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^18.0.0": - version: 18.0.2 - resolution: "cacache@npm:18.0.2" +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" dependencies: - "@npmcli/fs": "npm:^3.1.0" + "@npmcli/fs": "npm:^4.0.0" fs-minipass: "npm:^3.0.0" glob: "npm:^10.2.2" lru-cache: "npm:^10.0.1" @@ -1556,18 +1700,11 @@ __metadata: minipass-collect: "npm:^2.0.1" minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10c0/7992665305cc251a984f4fdbab1449d50e88c635bc43bf2785530c61d239c61b349e5734461baa461caaee65f040ab14e2d58e694f479c0810cffd181ba5eabc - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c languageName: node linkType: hard @@ -1584,16 +1721,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -1608,10 +1735,10 @@ __metadata: languageName: node linkType: hard -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 languageName: node linkType: hard @@ -1622,13 +1749,6 @@ __metadata: languageName: node linkType: hard -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 - languageName: node - linkType: hard - "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -1661,28 +1781,21 @@ __metadata: languageName: node linkType: hard -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"cookie@npm:^0.7.0": - version: 0.7.2 - resolution: "cookie@npm:0.7.2" - checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2 +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 languageName: node linkType: hard -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 +"cookie@npm:^1.0.1": + version: 1.0.2 + resolution: "cookie@npm:1.0.2" + checksum: 10c0/fd25fe79e8fbcfcaf6aa61cd081c55d144eeeba755206c058682257cb38c4bd6795c6620de3f064c740695bb65b7949ebb1db7a95e4636efb8357a335ad3f54b languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.5": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.5": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -1693,12 +1806,13 @@ __metadata: languageName: node linkType: hard -"cssstyle@npm:^4.1.0": - version: 4.1.0 - resolution: "cssstyle@npm:4.1.0" +"cssstyle@npm:^4.2.1": + version: 4.2.1 + resolution: "cssstyle@npm:4.2.1" dependencies: - rrweb-cssom: "npm:^0.7.1" - checksum: 10c0/05c6597e5d3e0ec6b15221f2c0ce9a0443a46cc50a6089a3ba9ee1ac27f83ff86a445a8f95435137dadd859f091fc61b6d342abaf396d3c910471b5b33cfcbfa + "@asamuzakjp/css-color": "npm:^2.8.2" + rrweb-cssom: "npm:^0.8.0" + checksum: 10c0/02ba8c47c0caaab57acadacb3eb6c0f5f009000f55d61f6563670e07d389b26edefeed497e6c1847fcd2e6bbe0b6974c2d4291f97fa0c6ec6add13a7fa926d84 languageName: node linkType: hard @@ -1719,7 +1833,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.7": +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.3.7": version: 4.4.0 resolution: "debug@npm:4.4.0" dependencies: @@ -1745,10 +1859,10 @@ __metadata: languageName: node linkType: hard -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 languageName: node linkType: hard @@ -1775,15 +1889,6 @@ __metadata: languageName: node linkType: hard -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: "npm:^2.0.2" - checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 - languageName: node - linkType: hard - "dotenv@npm:^8.1.0": version: 8.6.0 resolution: "dotenv@npm:8.6.0" @@ -1791,7 +1896,7 @@ __metadata: languageName: node linkType: hard -"duplexify@npm:^4.1.2": +"duplexify@npm:^4.1.3": version: 4.1.3 resolution: "duplexify@npm:4.1.3" dependencies: @@ -1852,7 +1957,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.5.0": +"entities@npm:^4.4.0, entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 @@ -1960,93 +2065,89 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^1.0.3": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 - languageName: node - linkType: hard - -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^5.2.0" - checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 - languageName: node - linkType: hard - -"eslint@npm:^8.57.0": - version: 8.57.1 - resolution: "eslint@npm:8.57.1" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.1" - "@humanwhocodes/config-array": "npm:^0.13.0" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" - debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" +"esbuild@npm:^0.24.2": + version: 0.24.2 + resolution: "esbuild@npm:0.24.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.24.2" + "@esbuild/android-arm": "npm:0.24.2" + "@esbuild/android-arm64": "npm:0.24.2" + "@esbuild/android-x64": "npm:0.24.2" + "@esbuild/darwin-arm64": "npm:0.24.2" + "@esbuild/darwin-x64": "npm:0.24.2" + "@esbuild/freebsd-arm64": "npm:0.24.2" + "@esbuild/freebsd-x64": "npm:0.24.2" + "@esbuild/linux-arm": "npm:0.24.2" + "@esbuild/linux-arm64": "npm:0.24.2" + "@esbuild/linux-ia32": "npm:0.24.2" + "@esbuild/linux-loong64": "npm:0.24.2" + "@esbuild/linux-mips64el": "npm:0.24.2" + "@esbuild/linux-ppc64": "npm:0.24.2" + "@esbuild/linux-riscv64": "npm:0.24.2" + "@esbuild/linux-s390x": "npm:0.24.2" + "@esbuild/linux-x64": "npm:0.24.2" + "@esbuild/netbsd-arm64": "npm:0.24.2" + "@esbuild/netbsd-x64": "npm:0.24.2" + "@esbuild/openbsd-arm64": "npm:0.24.2" + "@esbuild/openbsd-x64": "npm:0.24.2" + "@esbuild/sunos-x64": "npm:0.24.2" + "@esbuild/win32-arm64": "npm:0.24.2" + "@esbuild/win32-ia32": "npm:0.24.2" + "@esbuild/win32-x64": "npm:0.24.2" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true bin: - eslint: bin/eslint.js - checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 - languageName: node - linkType: hard - -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: "npm:^8.9.0" - acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + esbuild: bin/esbuild + checksum: 10c0/5a25bb08b6ba23db6e66851828d848bd3ff87c005a48c02d83e38879058929878a6baa5a414e1141faee0d1dece3f32b5fbc2a87b82ed6a7aa857cf40359aeb5 languageName: node linkType: hard @@ -2060,31 +2161,6 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: "npm:^5.1.0" - checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: "npm:^5.2.0" - checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 - languageName: node - linkType: hard - "estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" @@ -2101,20 +2177,6 @@ __metadata: languageName: node linkType: hard -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 - languageName: node - linkType: hard - -"eventemitter3@npm:^3.1.0": - version: 3.1.2 - resolution: "eventemitter3@npm:3.1.2" - checksum: 10c0/c67262eccbf85848b7cc6d4abb6c6e34155e15686db2a01c57669fd0d44441a574a19d44d25948b442929e065774cbe5003d8e77eed47674fbf876ac77887793 - languageName: node - linkType: hard - "expect-type@npm:^1.1.0": version: 1.1.0 resolution: "expect-type@npm:1.1.0" @@ -2147,13 +2209,6 @@ __metadata: languageName: node linkType: hard -"fast-content-type-parse@npm:^1.1.0": - version: 1.1.0 - resolution: "fast-content-type-parse@npm:1.1.0" - checksum: 10c0/882bf990fa5d64be1825ce183818db43900ece0d7ef184cb9409bae8ed1001acbe536a657b1496382cb3e308e71ab39cc399bbdae70cba1745eecaeca4e55384 - languageName: node - linkType: hard - "fast-decode-uri-component@npm:^1.0.1": version: 1.0.1 resolution: "fast-decode-uri-component@npm:1.0.1" @@ -2161,14 +2216,14 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": +"fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 languageName: node linkType: hard -"fast-glob@npm:^3.2.9": +"fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9": version: 3.3.3 resolution: "fast-glob@npm:3.3.3" dependencies: @@ -2181,32 +2236,18 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b - languageName: node - linkType: hard - -"fast-json-stringify@npm:^5.7.0, fast-json-stringify@npm:^5.8.0": - version: 5.16.1 - resolution: "fast-json-stringify@npm:5.16.1" +"fast-json-stringify@npm:^6.0.0": + version: 6.0.0 + resolution: "fast-json-stringify@npm:6.0.0" dependencies: - "@fastify/merge-json-schemas": "npm:^0.1.0" - ajv: "npm:^8.10.0" + "@fastify/merge-json-schemas": "npm:^0.1.1" + ajv: "npm:^8.12.0" ajv-formats: "npm:^3.0.1" fast-deep-equal: "npm:^3.1.3" - fast-uri: "npm:^2.1.0" + fast-uri: "npm:^2.3.0" json-schema-ref-resolver: "npm:^1.0.1" rfdc: "npm:^1.2.0" - checksum: 10c0/bbf955d9912fb827dff0e097fdbff3c11aec540ea8019a19593a16224cac70d49d0cebd98e412843fc72259184f73a78a45e63040d3c44349f4735a492f2f1a4 - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + checksum: 10c0/590bbb284df45972822773ebc41c8592c412cc8c2d123d43a41579c9972ff8004d1aea7d0c7cffaebf246ee28be964d605ad9d52bb96c26d8dc5fa4e225c1998 languageName: node linkType: hard @@ -2226,65 +2267,47 @@ __metadata: languageName: node linkType: hard -"fast-uri@npm:^2.0.0, fast-uri@npm:^2.1.0": +"fast-uri@npm:^2.3.0": version: 2.4.0 resolution: "fast-uri@npm:2.4.0" checksum: 10c0/300453cfe2f7d5ec16be0f2c8dc5b280edbaca59440b2deb4ab56ac0f584637179e9ee7539d0b70ef0fce9608245ebfa75307c84fa4829b1065c3b7ef7dcf706 languageName: node linkType: hard -"fast-uri@npm:^3.0.1": +"fast-uri@npm:^3.0.0, fast-uri@npm:^3.0.1": version: 3.0.5 resolution: "fast-uri@npm:3.0.5" checksum: 10c0/f5501fd849e02f16f1730d2c8628078718c492b5bc00198068bc5c2880363ae948287fdc8cebfff47465229b517dbeaf668866fbabdff829b4138a899e5c2ba3 languageName: node linkType: hard -"fastify-plugin@npm:^3.0.0": - version: 3.0.1 - resolution: "fastify-plugin@npm:3.0.1" - checksum: 10c0/045a107d2e1962d0967ec21e4417fb31e4f49059cf45d28a612025bdc841092fc897d4ab29eded5a977ad8fdd602c0b30c1a08ae5508f8bff97ece4a30d96032 - languageName: node - linkType: hard - -"fastify-plugin@npm:^4.0.0": - version: 4.5.1 - resolution: "fastify-plugin@npm:4.5.1" - checksum: 10c0/f58f79cd9d3c88fd7f79a3270276c6339fc57bbe72ef14d20b73779193c404e317ac18e8eae2c5071b3909ebee45d7eb6871da4e65464ac64ed0d9746b4e9b9f - languageName: node - linkType: hard - -"fastify-websocket@npm:4.2.2": - version: 4.2.2 - resolution: "fastify-websocket@npm:4.2.2" - dependencies: - fastify-plugin: "npm:^3.0.0" - ws: "npm:^8.0.0" - checksum: 10c0/a8d810ddab1bd5f0cba15b8ee5bcb2f97649f920180bc2d5a51b152d525412988d84c29bd787fe333d29f57c3f2b2054e39ad05107af2c8f50a5f5f62c82020f +"fastify-plugin@npm:^5.0.0": + version: 5.0.1 + resolution: "fastify-plugin@npm:5.0.1" + checksum: 10c0/c5e5932e7b8c5713ff881adeade3e8ee8fc288e8249d79cd193a2a2438eef1ad58ae5814f12835acbf04025dbddf2628787cd845f3e550dee847f494a08f7c5b languageName: node linkType: hard -"fastify@npm:^4.26.2": - version: 4.29.0 - resolution: "fastify@npm:4.29.0" +"fastify@npm:^5.2.1": + version: 5.2.1 + resolution: "fastify@npm:5.2.1" dependencies: - "@fastify/ajv-compiler": "npm:^3.5.0" - "@fastify/error": "npm:^3.4.0" - "@fastify/fast-json-stringify-compiler": "npm:^4.3.0" + "@fastify/ajv-compiler": "npm:^4.0.0" + "@fastify/error": "npm:^4.0.0" + "@fastify/fast-json-stringify-compiler": "npm:^5.0.0" + "@fastify/proxy-addr": "npm:^5.0.0" abstract-logging: "npm:^2.0.1" - avvio: "npm:^8.3.0" - fast-content-type-parse: "npm:^1.1.0" - fast-json-stringify: "npm:^5.8.0" - find-my-way: "npm:^8.0.0" - light-my-request: "npm:^5.11.0" + avvio: "npm:^9.0.0" + fast-json-stringify: "npm:^6.0.0" + find-my-way: "npm:^9.0.0" + light-my-request: "npm:^6.0.0" pino: "npm:^9.0.0" - process-warning: "npm:^3.0.0" - proxy-addr: "npm:^2.0.7" - rfdc: "npm:^1.3.0" - secure-json-parse: "npm:^2.7.0" - semver: "npm:^7.5.4" - toad-cache: "npm:^3.3.0" - checksum: 10c0/8bfdac5c4be943c57dfcc8d16b400f11a9bc8d4f096b4b28b06c9bb85ffedae1e5ec7a00eaa736813ebe075aa79f72a4b10d9744013229dd7cd3922c605e8e1f + process-warning: "npm:^4.0.0" + rfdc: "npm:^1.3.1" + secure-json-parse: "npm:^3.0.1" + semver: "npm:^7.6.0" + toad-cache: "npm:^3.7.0" + checksum: 10c0/00163bcac121e5fcb097dec0230d8e7918f0d5aa4be1ddce87f6571a13d31c9691d20def5dbd12df047bc3fc372cb0a72a392feecf3e2c958dc0931e52d262cb languageName: node linkType: hard @@ -2297,12 +2320,15 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: "npm:^3.0.4" - checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd +"fdir@npm:^6.2.0": + version: 6.4.2 + resolution: "fdir@npm:6.4.2" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/34829886f34a3ca4170eca7c7180ec4de51a3abb4d380344063c0ae2e289b11d2ba8b724afee974598c83027fea363ff598caf2b51bc4e6b1e0d8b80cc530573 languageName: node linkType: hard @@ -2315,14 +2341,14 @@ __metadata: languageName: node linkType: hard -"find-my-way@npm:^8.0.0": - version: 8.2.2 - resolution: "find-my-way@npm:8.2.2" +"find-my-way@npm:^9.0.0": + version: 9.1.0 + resolution: "find-my-way@npm:9.1.0" dependencies: fast-deep-equal: "npm:^3.1.3" fast-querystring: "npm:^1.0.0" - safe-regex2: "npm:^3.1.0" - checksum: 10c0/ce462b2033e08a82fa79b837e4ef9e637d5f3e6763564631ad835b4e50b22e2123c0bf27c4fe6b02bc4006cd7949c0351d2b6b6f32248e839b10bdcbd3a3269f + safe-regex2: "npm:^4.0.0" + checksum: 10c0/ddde633673b512940f8d183c8684f1441d623464364f931af979a71baa0cb5b774ed574a80eaddba40fc605c7d35bc1c74c9469732eaf381a1c4a3e59611686f languageName: node linkType: hard @@ -2336,34 +2362,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" - dependencies: - flatted: "npm:^3.2.9" - keyv: "npm:^4.5.3" - rimraf: "npm:^3.0.2" - checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.3.2 - resolution: "flatted@npm:3.3.2" - checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 - languageName: node - linkType: hard - "foreground-child@npm:^3.1.0": version: 3.3.0 resolution: "foreground-child@npm:3.3.0" @@ -2374,7 +2372,7 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.0": +"form-data@npm:^4.0.1": version: 4.0.1 resolution: "form-data@npm:4.0.1" dependencies: @@ -2385,13 +2383,6 @@ __metadata: languageName: node linkType: hard -"forwarded@npm:0.2.0": - version: 0.2.0 - resolution: "forwarded@npm:0.2.0" - checksum: 10c0/9b67c3fac86acdbc9ae47ba1ddd5f2f81526fa4c8226863ede5600a3f7c7416ef451f6f1e240a3cc32d0fd79fcfe6beb08fd0da454f360032bde70bf80afbb33 - languageName: node - linkType: hard - "fs-extra@npm:^7.0.1": version: 7.0.1 resolution: "fs-extra@npm:7.0.1" @@ -2414,15 +2405,6 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 - languageName: node - linkType: hard - "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -2432,13 +2414,6 @@ __metadata: languageName: node linkType: hard -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - "fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" @@ -2474,16 +2449,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.12": +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -2499,17 +2465,19 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3": - version: 7.2.3 - resolution: "glob@npm:7.2.3" +"glob@npm:^11.0.1": + version: 11.0.1 + resolution: "glob@npm:11.0.1" dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^4.0.1" + minimatch: "npm:^10.0.0" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^2.0.0" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/2b32588be52e9e90f914c7d8dec32f3144b81b84054b0f70e9adfebf37cd7014570489f2a79d21f7801b9a4bd4cca94f426966bfd00fb64a5b705cfe10da3a03 languageName: node linkType: hard @@ -2520,16 +2488,7 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.19.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: "npm:^0.20.2" - checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd - languageName: node - linkType: hard - -"globby@npm:^11.0.0, globby@npm:^11.1.0": +"globby@npm:^11.0.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -2550,85 +2509,45 @@ __metadata: languageName: node linkType: hard -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 - languageName: node - linkType: hard - "graphql-ws@workspace:.": version: 0.0.0-use.local resolution: "graphql-ws@workspace:." dependencies: "@changesets/changelog-github": "npm:^0.5.0" "@changesets/cli": "npm:^2.27.11" - "@fastify/websocket": "npm:^9.0.0" - "@ianvs/prettier-plugin-sort-imports": "npm:^4.4.0" + "@fastify/websocket": "npm:^11.0.2" + "@ianvs/prettier-plugin-sort-imports": "npm:^4.4.1" "@rollup/plugin-terser": "npm:^0.4.4" - "@rollup/plugin-typescript": "npm:^11.1.6" - "@types/eslint": "npm:^8.56.10" + "@tsconfig/strictest": "npm:^2.0.5" "@types/glob": "npm:^8.1.0" - "@types/ws": "npm:^8.5.10" - "@typescript-eslint/eslint-plugin": "npm:^7.7.0" - "@typescript-eslint/parser": "npm:^7.7.0" - bun-types: "npm:^1.1.4" - eslint: "npm:^8.57.0" - fastify: "npm:^4.26.2" - fastify-websocket: "npm:4.2.2" - glob: "npm:^10.3.12" - graphql: "npm:^16.8.1" - jsdom: "npm:^25.0.1" + "@types/ws": "npm:^8.5.13" + bun-types: "npm:^1.1.43" + fastify: "npm:^5.2.1" + glob: "npm:^11.0.1" + graphql: "npm:^16.10.0" + jsdom: "npm:^26.0.0" + pkgroll: "patch:pkgroll@npm%3A2.6.1#~/.yarn/patches/pkgroll-npm-2.6.1-193e78e84e.patch" prettier: "npm:^3.4.2" prettier-plugin-sh: "npm:^0.14.0" - replacestream: "npm:^4.0.3" - rollup: "npm:^4.14.3" - subscriptions-transport-ws: "npm:^0.11.0" - tslib: "npm:^2.6.2" - typedoc: "npm:^0.25.13" - typedoc-plugin-markdown: "npm:^3.17.1" - typescript: "npm:^5.4.5" - uWebSockets.js: "uNetworking/uWebSockets.js#v20.43.0" + rollup: "npm:^4.30.1" + typedoc: "npm:^0.27.6" + typedoc-plugin-markdown: "npm:^4.4.1" + typescript: "npm:^5.7.3" + uWebSockets.js: "uNetworking/uWebSockets.js#v20.51.0" vitest: "npm:^2.1.8" - ws: "npm:8.12.0" - ws7: "npm:ws@^7.5.9" + ws: "npm:^8.18.0" peerDependencies: - graphql: ">=0.11 <=16" + graphql: ^15.10.1 || ^16.10.0 languageName: unknown linkType: soft -"graphql@npm:^16.8.1": +"graphql@npm:^16.10.0": version: 16.10.0 resolution: "graphql@npm:16.10.0" checksum: 10c0/303730675538c8bd6c76b447dc6f03e61242e2d2596b408c34759666ec4877409e5593a7a0467d590ac5407b8c663b093b599556a77f24f281abea69ddc53de6 languageName: node linkType: hard -"handlebars@npm:^4.7.7": - version: 4.7.8 - resolution: "handlebars@npm:4.7.8" - dependencies: - minimist: "npm:^1.2.5" - neo-async: "npm:^2.6.2" - source-map: "npm:^0.6.1" - uglify-js: "npm:^3.1.4" - wordwrap: "npm:^1.0.0" - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 10c0/7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 - languageName: node - linkType: hard - "hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -2664,17 +2583,7 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^7.0.1": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" - dependencies: - agent-base: "npm:^7.0.2" - debug: "npm:4" - checksum: 10c0/bc4f7c38da32a5fc622450b6cb49a24ff596f9bd48dcedb52d2da3fa1c1a80e100fb506bd59b326c012f21c863c69b275c23de1a01d0b84db396822fdf25e52b - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.5": +"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": version: 7.0.6 resolution: "https-proxy-agent@npm:7.0.6" dependencies: @@ -2709,20 +2618,10 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0, ignore@npm:^5.3.1": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: "npm:^1.0.0" - resolve-from: "npm:^4.0.0" - checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard @@ -2733,24 +2632,7 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:~2.0.3": +"inherits@npm:^2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -2767,10 +2649,10 @@ __metadata: languageName: node linkType: hard -"ipaddr.js@npm:1.9.1": - version: 1.9.1 - resolution: "ipaddr.js@npm:1.9.1" - checksum: 10c0/0486e775047971d3fdb5fb4f063829bac45af299ae0b82dcf3afa2145338e08290563a2a70f34b732d795ecc8311902e541a8530eeb30d75860a78ff4e94ce2a +"ipaddr.js@npm:^2.1.0": + version: 2.2.0 + resolution: "ipaddr.js@npm:2.2.0" + checksum: 10c0/e4ee875dc1bd92ac9d27e06cfd87cdb63ca786ff9fd7718f1d4f7a8ef27db6e5d516128f52d2c560408cbb75796ac2f83ead669e73507c86282d45f84c5abbb6 languageName: node linkType: hard @@ -2797,7 +2679,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": +"is-glob@npm:^4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -2806,10 +2688,10 @@ __metadata: languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d +"is-module@npm:^1.0.0": + version: 1.0.0 + resolution: "is-module@npm:1.0.0" + checksum: 10c0/795a3914bcae7c26a1c23a1e5574c42eac13429625045737bf3e324ce865c0601d61aee7a5afbca1bee8cb300c7d9647e7dc98860c9bdbc3b7fdc51d8ac0bffc languageName: node linkType: hard @@ -2820,13 +2702,6 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 - languageName: node - linkType: hard - "is-potential-custom-element-name@npm:^1.0.1": version: 1.0.1 resolution: "is-potential-custom-element-name@npm:1.0.1" @@ -2834,6 +2709,15 @@ __metadata: languageName: node linkType: hard +"is-reference@npm:1.2.1": + version: 1.2.1 + resolution: "is-reference@npm:1.2.1" + dependencies: + "@types/estree": "npm:*" + checksum: 10c0/7dc819fc8de7790264a0a5d531164f9f5b9ef5aa1cd05f35322d14db39c8a2ec78fd5d4bf57f9789f3ddd2b3abeea7728432b759636157a42db12a9e8c3b549b + languageName: node + linkType: hard + "is-subdir@npm:^1.1.1": version: 1.2.0 resolution: "is-subdir@npm:1.2.0" @@ -2850,13 +2734,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d - languageName: node - linkType: hard - "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -2871,13 +2748,6 @@ __metadata: languageName: node linkType: hard -"iterall@npm:^1.2.1": - version: 1.3.0 - resolution: "iterall@npm:1.3.0" - checksum: 10c0/40de624e5fe937c4c0e511981b91caea9ff2142bfc0316cccc8506eaa03aa253820cc17c5bc5f0a98706c7268a373e5ebee9af9a0c8a359730cf7c05938b57b5 - languageName: node - linkType: hard - "jackspeak@npm:^3.1.2": version: 3.4.3 resolution: "jackspeak@npm:3.4.3" @@ -2891,6 +2761,15 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^4.0.1": + version: 4.0.2 + resolution: "jackspeak@npm:4.0.2" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + checksum: 10c0/b26039d11c0163a95b1e58851b9ac453cce64ad6d1eb98a00b303ad5eeb761b29d33c9419d1e16c016d3f7151c8edf7df223e6cf93a1907655fd95d6ce85c0de + languageName: node + linkType: hard + "js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -2910,17 +2789,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: "npm:^2.0.1" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f - languageName: node - linkType: hard - "jsbn@npm:1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" @@ -2928,21 +2796,21 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^25.0.1": - version: 25.0.1 - resolution: "jsdom@npm:25.0.1" +"jsdom@npm:^26.0.0": + version: 26.0.0 + resolution: "jsdom@npm:26.0.0" dependencies: - cssstyle: "npm:^4.1.0" + cssstyle: "npm:^4.2.1" data-urls: "npm:^5.0.0" decimal.js: "npm:^10.4.3" - form-data: "npm:^4.0.0" + form-data: "npm:^4.0.1" html-encoding-sniffer: "npm:^4.0.0" http-proxy-agent: "npm:^7.0.2" - https-proxy-agent: "npm:^7.0.5" + https-proxy-agent: "npm:^7.0.6" is-potential-custom-element-name: "npm:^1.0.1" - nwsapi: "npm:^2.2.12" - parse5: "npm:^7.1.2" - rrweb-cssom: "npm:^0.7.1" + nwsapi: "npm:^2.2.16" + parse5: "npm:^7.2.1" + rrweb-cssom: "npm:^0.8.0" saxes: "npm:^6.0.0" symbol-tree: "npm:^3.2.4" tough-cookie: "npm:^5.0.0" @@ -2950,15 +2818,15 @@ __metadata: webidl-conversions: "npm:^7.0.0" whatwg-encoding: "npm:^3.1.1" whatwg-mimetype: "npm:^4.0.0" - whatwg-url: "npm:^14.0.0" + whatwg-url: "npm:^14.1.0" ws: "npm:^8.18.0" xml-name-validator: "npm:^5.0.0" peerDependencies: - canvas: ^2.11.2 + canvas: ^3.0.0 peerDependenciesMeta: canvas: optional: true - checksum: 10c0/6bda32a6dfe4e37a30568bf51136bdb3ba9c0b72aadd6356280404275a34c9e097c8c25b5eb3c742e602623741e172da977ff456684befd77c9042ed9bf8c2b4 + checksum: 10c0/e48725ba4027edcfc9bca5799eaec72c6561ecffe3675a8ff87fe9c3541ca4ff9f82b4eff5b3d9c527302da0d859b2f60e9364347a5d42b77f5c76c436c569dc languageName: node linkType: hard @@ -2971,47 +2839,19 @@ __metadata: languageName: node linkType: hard -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 - languageName: node - linkType: hard - "json-schema-ref-resolver@npm:^1.0.1": version: 1.0.1 resolution: "json-schema-ref-resolver@npm:1.0.1" dependencies: fast-deep-equal: "npm:^3.1.3" - checksum: 10c0/aa89d88108c0109ae35b913c89c132fb50c00f3b99fc8a8309b524b9e3a6a77414f19a6a35a1253871462984cbabc74279ebbd9bf103c6629fb7b37c9fb59bcf - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce - languageName: node - linkType: hard - -"json-schema-traverse@npm:^1.0.0": - version: 1.0.0 - resolution: "json-schema-traverse@npm:1.0.0" - checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + checksum: 10c0/aa89d88108c0109ae35b913c89c132fb50c00f3b99fc8a8309b524b9e3a6a77414f19a6a35a1253871462984cbabc74279ebbd9bf103c6629fb7b37c9fb59bcf languageName: node linkType: hard -"jsonc-parser@npm:^3.2.0": - version: 3.3.1 - resolution: "jsonc-parser@npm:3.3.1" - checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 languageName: node linkType: hard @@ -3027,33 +2867,23 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: "npm:3.0.1" - checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" +"light-my-request@npm:^6.0.0": + version: 6.5.1 + resolution: "light-my-request@npm:6.5.1" dependencies: - prelude-ls: "npm:^1.2.1" - type-check: "npm:~0.4.0" - checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + cookie: "npm:^1.0.1" + process-warning: "npm:^4.0.0" + set-cookie-parser: "npm:^2.6.0" + checksum: 10c0/176471f5e0e3de86a52fe2eee86a911386ecd72ef27de3d0d8be5074d2163be5820b3649e0e391b3904e1875625c08a5a0d8536636105a14a01621c75fe4c12d languageName: node linkType: hard -"light-my-request@npm:^5.11.0": - version: 5.14.0 - resolution: "light-my-request@npm:5.14.0" +"linkify-it@npm:^5.0.0": + version: 5.0.0 + resolution: "linkify-it@npm:5.0.0" dependencies: - cookie: "npm:^0.7.0" - process-warning: "npm:^3.0.0" - set-cookie-parser: "npm:^2.4.1" - checksum: 10c0/5ec3af15010156d2821469d17910e0a3071c3269a8d5ffc3180fd761ffc91649ec1f9b2aaf7b5b6d44825e1038e6c07fdba247b93370186f3af9dbb94e11c0b5 + uc.micro: "npm:^2.0.0" + checksum: 10c0/ff4abbcdfa2003472fc3eb4b8e60905ec97718e11e33cca52059919a4c80cc0e0c2a14d23e23d8c00e5402bc5a885cdba8ca053a11483ab3cc8b3c7a52f88e2d languageName: node linkType: hard @@ -3066,22 +2896,6 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: "npm:^5.0.0" - checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 - languageName: node - linkType: hard - "lodash.startcase@npm:^4.4.0": version: 4.4.0 resolution: "lodash.startcase@npm:4.4.0" @@ -3103,12 +2917,10 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 +"lru-cache@npm:^11.0.0, lru-cache@npm:^11.0.2": + version: 11.0.2 + resolution: "lru-cache@npm:11.0.2" + checksum: 10c0/c993b8e06ead0b24b969c1dbb5b301716aed66e320e9014a80012f5febe280b438f28ff50046b2c55ff404e889351ccb332ff91f8dd175a21f5eae80e3fb155f languageName: node linkType: hard @@ -3119,7 +2931,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.12": +"magic-string@npm:^0.30.12, magic-string@npm:^0.30.17, magic-string@npm:^0.30.3": version: 0.30.17 resolution: "magic-string@npm:0.30.17" dependencies: @@ -3128,31 +2940,45 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^13.0.0": - version: 13.0.0 - resolution: "make-fetch-happen@npm:13.0.0" +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" + minipass-fetch: "npm:^4.0.0" minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10c0/43b9f6dcbc6fe8b8604cb6396957c3698857a15ba4dbc38284f7f0e61f248300585ef1eb8cc62df54e9c724af977e45b5cdfd88320ef7f53e45070ed3488da55 + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 languageName: node linkType: hard -"marked@npm:^4.3.0": - version: 4.3.0 - resolution: "marked@npm:4.3.0" +"markdown-it@npm:^14.1.0": + version: 14.1.0 + resolution: "markdown-it@npm:14.1.0" + dependencies: + argparse: "npm:^2.0.1" + entities: "npm:^4.4.0" + linkify-it: "npm:^5.0.0" + mdurl: "npm:^2.0.0" + punycode.js: "npm:^2.3.1" + uc.micro: "npm:^2.1.0" bin: - marked: bin/marked.js - checksum: 10c0/0013463855e31b9c88d8bb2891a611d10ef1dc79f2e3cbff1bf71ba389e04c5971298c886af0be799d7fa9aa4593b086a136062d59f1210b0480b026a8c5dc47 + markdown-it: bin/markdown-it.mjs + checksum: 10c0/9a6bb444181d2db7016a4173ae56a95a62c84d4cbfb6916a399b11d3e6581bf1cc2e4e1d07a2f022ae72c25f56db90fbe1e529fca16fbf9541659dc53480d4b4 + languageName: node + linkType: hard + +"mdurl@npm:^2.0.0": + version: 2.0.0 + resolution: "mdurl@npm:2.0.0" + checksum: 10c0/633db522272f75ce4788440669137c77540d74a83e9015666a9557a152c02e245b192edc20bc90ae953bbab727503994a53b236b4d9c99bdaee594d0e7dd2ce0 languageName: node linkType: hard @@ -3189,28 +3015,21 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" +"minimatch@npm:^10.0.0": + version: 10.0.1 + resolution: "minimatch@npm:10.0.1" dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + brace-expansion: "npm:^2.0.1" + checksum: 10c0/e6c29a81fe83e1877ad51348306be2e8aeca18c88fdee7a99df44322314279e15799e41d7cb274e4e8bb0b451a3bc622d6182e157dfa1717d6cda75e9cd8cd5d languageName: node linkType: hard -"minimatch@npm:^9.0.3, minimatch@npm:^9.0.4": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" +"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 10c0/2c16f21f50e64922864e560ff97c587d15fd491f65d92a677a344e970fe62aafdbeafe648965fa96d33c061b4d0eabfe0213466203dd793367e7f28658cf6414 - languageName: node - linkType: hard - -"minimist@npm:^1.2.5": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed languageName: node linkType: hard @@ -3223,18 +3042,18 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^3.0.0": - version: 3.0.4 - resolution: "minipass-fetch@npm:3.0.4" +"minipass-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass-fetch@npm:4.0.0" dependencies: encoding: "npm:^0.1.13" minipass: "npm:^7.0.3" minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" + minizlib: "npm:^3.0.1" dependenciesMeta: encoding: optional: true - checksum: 10c0/1b63c1f3313e88eeac4689f1b71c9f086598db9a189400e3ee960c32ed89e06737fa23976c9305c2d57464fb3fcdc12749d3378805c9d6176f5569b0d0ee8a75 + checksum: 10c0/7fa30ce7c373fb6f94c086b374fff1589fd7e78451855d2d06c2e2d9df936d131e73e952163063016592ed3081444bd8d1ea608533313b0149156ce23311da4b languageName: node linkType: hard @@ -3274,36 +3093,29 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + minipass: "npm:^7.0.4" + rimraf: "npm:^5.0.5" + checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093 languageName: node linkType: hard -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" bin: - mkdirp: bin/cmd.js - checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d languageName: node linkType: hard @@ -3328,7 +3140,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.7": +"nanoid@npm:^3.3.8": version: 3.3.8 resolution: "nanoid@npm:3.3.8" bin: @@ -3337,24 +3149,10 @@ __metadata: languageName: node linkType: hard -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 - languageName: node - linkType: hard - -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 - languageName: node - linkType: hard - -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b languageName: node linkType: hard @@ -3373,50 +3171,43 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 10.1.0 - resolution: "node-gyp@npm:10.1.0" + version: 11.0.0 + resolution: "node-gyp@npm:11.0.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" glob: "npm:^10.3.10" graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^3.0.0" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" semver: "npm:^7.3.5" - tar: "npm:^6.1.2" - which: "npm:^4.0.0" + tar: "npm:^7.4.3" + which: "npm:^5.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10c0/9cc821111ca244a01fb7f054db7523ab0a0cd837f665267eb962eb87695d71fb1e681f9e21464cc2fd7c05530dc4c81b810bca1a88f7d7186909b74477491a3c + checksum: 10c0/a3b885bbee2d271f1def32ba2e30ffcf4562a3db33af06b8b365e053153e2dd2051b9945783c3c8e852d26a0f20f65b251c7e83361623383a99635c0280ee573 languageName: node linkType: hard -"nopt@npm:^7.0.0": - version: 7.2.0 - resolution: "nopt@npm:7.2.0" +"nopt@npm:^8.0.0": + version: 8.0.0 + resolution: "nopt@npm:8.0.0" dependencies: abbrev: "npm:^2.0.0" bin: nopt: bin/nopt.js - checksum: 10c0/9bd7198df6f16eb29ff16892c77bcf7f0cc41f9fb5c26280ac0def2cf8cf319f3b821b3af83eba0e74c85807cc430a16efe0db58fe6ae1f41e69519f585b6aff + checksum: 10c0/19cb986f79abaca2d0f0b560021da7b32ee6fcc3de48f3eaeb0c324d36755c17754f886a754c091f01f740c17caf7d6aea8237b7fbaf39f476ae5e30a249f18f languageName: node linkType: hard -"nwsapi@npm:^2.2.12": +"nwsapi@npm:^2.2.16": version: 2.2.16 resolution: "nwsapi@npm:2.2.16" checksum: 10c0/0aa0637f4d51043d0183d994e08336bae996b03b42984381bf09ebdf3ff4909c018eda6b2a8aba0a08f3ea8303db8a0dad0608b38dc0bff15fd87017286ae21a languageName: node linkType: hard -"object-assign@npm:^4.0.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - "on-exit-leak-free@npm:^2.1.0": version: 2.1.2 resolution: "on-exit-leak-free@npm:2.1.2" @@ -3424,7 +3215,7 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0, once@npm:^1.4.0": +"once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -3433,20 +3224,6 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.9.3": - version: 0.9.4 - resolution: "optionator@npm:0.9.4" - dependencies: - deep-is: "npm:^0.1.3" - fast-levenshtein: "npm:^2.0.6" - levn: "npm:^0.4.1" - prelude-ls: "npm:^1.2.1" - type-check: "npm:^0.4.0" - word-wrap: "npm:^1.2.5" - checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 - languageName: node - linkType: hard - "os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" @@ -3479,15 +3256,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -3497,15 +3265,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: "npm:^3.0.2" - checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a - languageName: node - linkType: hard - "p-map@npm:^2.0.0": version: 2.1.0 resolution: "p-map@npm:2.1.0" @@ -3513,12 +3272,10 @@ __metadata: languageName: node linkType: hard -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c languageName: node linkType: hard @@ -3543,16 +3300,7 @@ __metadata: languageName: node linkType: hard -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: "npm:^3.0.0" - checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 - languageName: node - linkType: hard - -"parse5@npm:^7.1.2": +"parse5@npm:^7.2.1": version: 7.2.1 resolution: "parse5@npm:7.2.1" dependencies: @@ -3568,13 +3316,6 @@ __metadata: languageName: node linkType: hard -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - "path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -3599,6 +3340,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^2.0.0": + version: 2.0.0 + resolution: "path-scurry@npm:2.0.0" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/3da4adedaa8e7ef8d6dc4f35a0ff8f05a9b4d8365f2b28047752b62d4c1ad73eec21e37b1579ef2d075920157856a3b52ae8309c480a6f1a8bbe06ff8e52b33c + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -3685,21 +3436,66 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.43": - version: 8.4.49 - resolution: "postcss@npm:8.4.49" +"pkgroll@npm:2.6.1": + version: 2.6.1 + resolution: "pkgroll@npm:2.6.1" dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3 + "@rollup/plugin-alias": "npm:^5.1.1" + "@rollup/plugin-commonjs": "npm:^28.0.2" + "@rollup/plugin-dynamic-import-vars": "npm:^2.1.5" + "@rollup/plugin-inject": "npm:^5.0.5" + "@rollup/plugin-json": "npm:^6.1.0" + "@rollup/plugin-node-resolve": "npm:^16.0.0" + "@rollup/plugin-replace": "npm:^6.0.2" + "@rollup/pluginutils": "npm:^5.1.4" + esbuild: "npm:^0.24.2" + magic-string: "npm:^0.30.17" + rollup: "npm:^4.29.1" + peerDependencies: + typescript: ^4.1 || ^5.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + pkgroll: dist/cli.js + checksum: 10c0/0ca118275add1df1dbafe89201a2cc92bed55c68ff6a5ea7dcf71981f7edaaf2f867e2e372907cf74810fcc221e92198dc22c077d3b66ebda40dd7b8c8be8684 + languageName: node + linkType: hard + +"pkgroll@patch:pkgroll@npm%3A2.6.1#~/.yarn/patches/pkgroll-npm-2.6.1-193e78e84e.patch": + version: 2.6.1 + resolution: "pkgroll@patch:pkgroll@npm%3A2.6.1#~/.yarn/patches/pkgroll-npm-2.6.1-193e78e84e.patch::version=2.6.1&hash=840c08" + dependencies: + "@rollup/plugin-alias": "npm:^5.1.1" + "@rollup/plugin-commonjs": "npm:^28.0.2" + "@rollup/plugin-dynamic-import-vars": "npm:^2.1.5" + "@rollup/plugin-inject": "npm:^5.0.5" + "@rollup/plugin-json": "npm:^6.1.0" + "@rollup/plugin-node-resolve": "npm:^16.0.0" + "@rollup/plugin-replace": "npm:^6.0.2" + "@rollup/pluginutils": "npm:^5.1.4" + esbuild: "npm:^0.24.2" + magic-string: "npm:^0.30.17" + rollup: "npm:^4.29.1" + peerDependencies: + typescript: ^4.1 || ^5.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + pkgroll: dist/cli.js + checksum: 10c0/7af7e7eadd8221a104fb011ca69ea85d1b5bc938a27d4281bc64566e0c9f03085dd565bc162909d782c8d0269a2067c4b69816e03d918eb2918f2884e3704760 languageName: node linkType: hard -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd +"postcss@npm:^8.4.43": + version: 8.5.1 + resolution: "postcss@npm:8.5.1" + dependencies: + nanoid: "npm:^3.3.8" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/c4d90c59c98e8a0c102b77d3f4cac190f883b42d63dc60e2f3ed840f16197c0c8e25a4327d2e9a847b45a985612317dc0534178feeebd0a1cf3eb0eecf75cae4 languageName: node linkType: hard @@ -3733,24 +3529,10 @@ __metadata: languageName: node linkType: hard -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: 10c0/f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc - languageName: node - linkType: hard - -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 - languageName: node - linkType: hard - -"process-warning@npm:^3.0.0": - version: 3.0.0 - resolution: "process-warning@npm:3.0.0" - checksum: 10c0/60f3c8ddee586f0706c1e6cb5aa9c86df05774b9330d792d7c8851cf0031afd759d665404d07037e0b4901b55c44a423f07bdc465c63de07d8d23196bb403622 +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 languageName: node linkType: hard @@ -3771,17 +3553,14 @@ __metadata: languageName: node linkType: hard -"proxy-addr@npm:^2.0.7": - version: 2.0.7 - resolution: "proxy-addr@npm:2.0.7" - dependencies: - forwarded: "npm:0.2.0" - ipaddr.js: "npm:1.9.1" - checksum: 10c0/c3eed999781a35f7fd935f398b6d8920b6fb00bbc14287bc6de78128ccc1a02c89b95b56742bf7cf0362cc333c61d138532049c7dedc7a328ef13343eff81210 +"punycode.js@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode.js@npm:2.3.1" + checksum: 10c0/1d12c1c0e06127fa5db56bd7fdf698daf9a78104456a6b67326877afc21feaa821257b171539caedd2f0524027fa38e67b13dd094159c8d70b6d26d2bea4dfdb languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.3.1": +"punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 @@ -3823,21 +3602,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.2": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.3" - isarray: "npm:~1.0.0" - process-nextick-args: "npm:~2.0.0" - safe-buffer: "npm:~5.1.1" - string_decoder: "npm:~1.1.1" - util-deprecate: "npm:~1.0.1" - checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa - languageName: node - linkType: hard - "readable-stream@npm:^3.1.1": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -3863,17 +3627,6 @@ __metadata: languageName: node linkType: hard -"replacestream@npm:^4.0.3": - version: 4.0.3 - resolution: "replacestream@npm:4.0.3" - dependencies: - escape-string-regexp: "npm:^1.0.3" - object-assign: "npm:^4.0.1" - readable-stream: "npm:^2.0.2" - checksum: 10c0/e54c9d8e051a0f0873cbc0f3cddf6999b47b6b87a8ba60a5f09b222046f3e25c42337955d945ee3db928ad347afec47748e851d33a6f69fd2dda97c1d7680e2f - languageName: node - linkType: hard - "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -3881,13 +3634,6 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 - languageName: node - linkType: hard - "resolve-from@npm:^5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" @@ -3921,10 +3667,10 @@ __metadata: languageName: node linkType: hard -"ret@npm:~0.4.0": - version: 0.4.3 - resolution: "ret@npm:0.4.3" - checksum: 10c0/93e4e81cf393ebbafa1a26816e0b22ad0e2539c10e267d46ce8754c3f385b7aa839772ee1f83fdd2487b43d1081f29af41a19160e85456311f6f1778e14ba66b +"ret@npm:~0.5.0": + version: 0.5.0 + resolution: "ret@npm:0.5.0" + checksum: 10c0/220868b194f87bf1998e32e409086eec6b39e860c052bf267f8ad4d0131706a9773d45fd3f91acfb1a7c928fce002b694ab86fdba90bc8d4b8df68fa8645c5cc languageName: node linkType: hard @@ -3942,25 +3688,25 @@ __metadata: languageName: node linkType: hard -"rfdc@npm:^1.2.0, rfdc@npm:^1.3.0": +"rfdc@npm:^1.2.0, rfdc@npm:^1.3.1": version: 1.4.1 resolution: "rfdc@npm:1.4.1" checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 languageName: node linkType: hard -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" dependencies: - glob: "npm:^7.1.3" + glob: "npm:^10.3.7" bin: - rimraf: bin.js - checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + rimraf: dist/esm/bin.mjs + checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc languageName: node linkType: hard -"rollup@npm:^4.14.3, rollup@npm:^4.20.0": +"rollup@npm:^4.20.0, rollup@npm:^4.29.1, rollup@npm:^4.30.1": version: 4.30.1 resolution: "rollup@npm:4.30.1" dependencies: @@ -4032,10 +3778,10 @@ __metadata: languageName: node linkType: hard -"rrweb-cssom@npm:^0.7.1": - version: 0.7.1 - resolution: "rrweb-cssom@npm:0.7.1" - checksum: 10c0/127b8ca6c8aac45e2755abbae6138d4a813b1bedc2caabf79466ae83ab3cfc84b5bfab513b7033f0aa4561c7753edf787d0dd01163ceacdee2e8eb1b6bf7237e +"rrweb-cssom@npm:^0.8.0": + version: 0.8.0 + resolution: "rrweb-cssom@npm:0.8.0" + checksum: 10c0/56f2bfd56733adb92c0b56e274c43f864b8dd48784d6fe946ef5ff8d438234015e59ad837fc2ad54714b6421384141c1add4eb569e72054e350d1f8a50b8ac7b languageName: node linkType: hard @@ -4055,19 +3801,12 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 - languageName: node - linkType: hard - -"safe-regex2@npm:^3.1.0": - version: 3.1.0 - resolution: "safe-regex2@npm:3.1.0" +"safe-regex2@npm:^4.0.0": + version: 4.0.1 + resolution: "safe-regex2@npm:4.0.1" dependencies: - ret: "npm:~0.4.0" - checksum: 10c0/5e5e7f9f116ddfd324b1fdc65ad4470937eebc8883d34669ce8c5afbda64f1954e5e4c2e754ef6281e5f6762e0b8c4e20fb9eec4d47355526f8cc1f6a9764624 + ret: "npm:~0.5.0" + checksum: 10c0/fe6edc2c0fa9847b572d0f0fc2b1f487c36ae603fec65445ae38cfb40483afa85107d3b6ffe63cbe029fd06e6ccb5c5730415c1595a1011fa00bafa2b866a8f0 languageName: node linkType: hard @@ -4094,25 +3833,14 @@ __metadata: languageName: node linkType: hard -"secure-json-parse@npm:^2.7.0": - version: 2.7.0 - resolution: "secure-json-parse@npm:2.7.0" - checksum: 10c0/f57eb6a44a38a3eeaf3548228585d769d788f59007454214fab9ed7f01fbf2e0f1929111da6db28cf0bcc1a2e89db5219a59e83eeaec3a54e413a0197ce879e4 - languageName: node - linkType: hard - -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": - version: 7.6.0 - resolution: "semver@npm:7.6.0" - dependencies: - lru-cache: "npm:^6.0.0" - bin: - semver: bin/semver.js - checksum: 10c0/fbfe717094ace0aa8d6332d7ef5ce727259815bd8d8815700853f4faf23aacbd7192522f0dc5af6df52ef4fa85a355ebd2f5d39f554bd028200d6cf481ab9b53 +"secure-json-parse@npm:^3.0.1": + version: 3.0.2 + resolution: "secure-json-parse@npm:3.0.2" + checksum: 10c0/4c9c005e7fdd8528df35fcdec41dc4e8e15820ce52de19f8102da808f9400a9ed8c0a28971e3efe24b001ee1e60296af553f12bbaab81a152f702dd00af2092d languageName: node linkType: hard -"semver@npm:^7.5.2": +"semver@npm:^7.3.5, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.6.0": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -4130,7 +3858,7 @@ __metadata: languageName: node linkType: hard -"set-cookie-parser@npm:^2.4.1": +"set-cookie-parser@npm:^2.6.0": version: 2.7.1 resolution: "set-cookie-parser@npm:2.7.1" checksum: 10c0/060c198c4c92547ac15988256f445eae523f57f2ceefeccf52d30d75dedf6bff22b9c26f756bd44e8e560d44ff4ab2130b178bd2e52ef5571bf7be3bd7632d9a @@ -4162,18 +3890,6 @@ __metadata: languageName: node linkType: hard -"shiki@npm:^0.14.7": - version: 0.14.7 - resolution: "shiki@npm:0.14.7" - dependencies: - ansi-sequence-parser: "npm:^1.1.0" - jsonc-parser: "npm:^3.2.0" - vscode-oniguruma: "npm:^1.7.0" - vscode-textmate: "npm:^8.0.0" - checksum: 10c0/5c7fcbb870d0facccc7ae2f3410a28121f8e0b3f298e4e956de817ad6ab60a4c7e20a9184edfe50a93447addbb88b95b69e6ef88ac16ac6ca3e94c50771a6459 - languageName: node - linkType: hard - "siginfo@npm:^2.0.0": version: 2.0.0 resolution: "siginfo@npm:2.0.0" @@ -4256,7 +3972,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1": +"source-map@npm:^0.6.0": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 @@ -4294,12 +4010,12 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^10.0.0": - version: 10.0.5 - resolution: "ssri@npm:10.0.5" +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" dependencies: minipass: "npm:^7.0.3" - checksum: 10c0/b091f2ae92474183c7ac5ed3f9811457e1df23df7a7e70c9476eaa9a0c4a0c8fc190fb45acefbf023ca9ee864dd6754237a697dc52a0fb182afe65d8e77443d8 + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d languageName: node linkType: hard @@ -4355,15 +4071,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: "npm:~5.1.0" - checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e - languageName: node - linkType: hard - "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -4389,37 +4096,6 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd - languageName: node - linkType: hard - -"subscriptions-transport-ws@npm:^0.11.0": - version: 0.11.0 - resolution: "subscriptions-transport-ws@npm:0.11.0" - dependencies: - backo2: "npm:^1.0.2" - eventemitter3: "npm:^3.1.0" - iterall: "npm:^1.2.1" - symbol-observable: "npm:^1.0.4" - ws: "npm:^5.2.0 || ^6.0.0 || ^7.0.0" - peerDependencies: - graphql: ^15.7.2 || ^16.0.0 - checksum: 10c0/697441333e59b6932bff51212e29f8dcac477badb067971bd94c30c5f3f7a2e2ea72fb1a21f3c1abbf32774da01515aa24739e620be45f6d576784bd96fd10da - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -4427,13 +4103,6 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:^1.0.4": - version: 1.2.0 - resolution: "symbol-observable@npm:1.2.0" - checksum: 10c0/009fee50798ef80ed4b8195048288f108b03de162db07493f2e1fd993b33fafa72d659e832b584da5a2427daa78e5a738fb2a9ab027ee9454252e0bedbcd1fdc - languageName: node - linkType: hard - "symbol-tree@npm:^3.2.4": version: 3.2.4 resolution: "symbol-tree@npm:3.2.4" @@ -4441,17 +4110,17 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.1 - resolution: "tar@npm:6.2.1" +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d languageName: node linkType: hard @@ -4476,13 +4145,6 @@ __metadata: languageName: node linkType: hard -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c - languageName: node - linkType: hard - "thread-stream@npm:^3.0.0": version: 3.1.0 resolution: "thread-stream@npm:3.1.0" @@ -4563,7 +4225,7 @@ __metadata: languageName: node linkType: hard -"toad-cache@npm:^3.3.0": +"toad-cache@npm:^3.7.0": version: 3.7.0 resolution: "toad-cache@npm:3.7.0" checksum: 10c0/7dae2782ee20b22c9798bb8b71dec7ec6a0091021d2ea9dd6e8afccab6b65b358fdba49a02209fac574499702e2c000660721516c87c2538d1b2c0ba03e8c0c3 @@ -4571,11 +4233,11 @@ __metadata: linkType: hard "tough-cookie@npm:^5.0.0": - version: 5.0.0 - resolution: "tough-cookie@npm:5.0.0" + version: 5.1.0 + resolution: "tough-cookie@npm:5.1.0" dependencies: tldts: "npm:^6.1.32" - checksum: 10c0/4a69c885bf6f45c5a64e60262af99e8c0d58a33bd3d0ce5da62121eeb9c00996d0128a72df8fc4614cbde59cc8b70aa3e21e4c3c98c2bbde137d7aba7fa00124 + checksum: 10c0/cae151040c9fc43169a1cac5af5c6d56aa3d31435b985fd5749669430d45a0c3a3be03991b210af40c1aa175050955b57509f8d275bd06735e7e268a7e0b78af languageName: node linkType: hard @@ -4595,15 +4257,6 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.3.0": - version: 1.4.3 - resolution: "ts-api-utils@npm:1.4.3" - peerDependencies: - typescript: ">=4.2.0" - checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a - languageName: node - linkType: hard - "tslib@npm:^2.6.2": version: 2.8.1 resolution: "tslib@npm:2.8.1" @@ -4611,82 +4264,63 @@ __metadata: languageName: node linkType: hard -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: "npm:^1.2.1" - checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 - languageName: node - linkType: hard - -"typedoc-plugin-markdown@npm:^3.17.1": - version: 3.17.1 - resolution: "typedoc-plugin-markdown@npm:3.17.1" - dependencies: - handlebars: "npm:^4.7.7" +"typedoc-plugin-markdown@npm:^4.4.1": + version: 4.4.1 + resolution: "typedoc-plugin-markdown@npm:4.4.1" peerDependencies: - typedoc: ">=0.24.0" - checksum: 10c0/5c9322cd6b5218b1c8b18e6c9df45ad0f99dea9b9cee4006f1f286b04725db47e26856b3e07069beabbd65d8357da34563707d50027b19bb18fd3633a3591349 + typedoc: 0.27.x + checksum: 10c0/54c9a25aed64d07258033c4d060acac15a618ee0494cbb2bc70fd10d03c82b3434715b6db01fbeb09d672cff736340666d70da1be83188e3a994048a0a0c6b65 languageName: node linkType: hard -"typedoc@npm:^0.25.13": - version: 0.25.13 - resolution: "typedoc@npm:0.25.13" +"typedoc@npm:^0.27.6": + version: 0.27.6 + resolution: "typedoc@npm:0.27.6" dependencies: + "@gerrit0/mini-shiki": "npm:^1.24.0" lunr: "npm:^2.3.9" - marked: "npm:^4.3.0" - minimatch: "npm:^9.0.3" - shiki: "npm:^0.14.7" + markdown-it: "npm:^14.1.0" + minimatch: "npm:^9.0.5" + yaml: "npm:^2.6.1" peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x bin: typedoc: bin/typedoc - checksum: 10c0/13878e6a9fc2b65d65e3b514efa11b43bdfd57149861cefc4a969ec213f4bc4b36ee9239d0b654ae18bcbbd5174206d409383f9000b7bdea22da1945f7ac91de + checksum: 10c0/74af856fc2b9ca151567db8e08737a6ab8b29efb611414510eb833f80723245bc6ade00f2be7a410e335833cfd5e3deb1ae1ecfdb4da3a13c65faedd1f1805b0 languageName: node linkType: hard -"typescript@npm:^5.4.5": - version: 5.7.2 - resolution: "typescript@npm:5.7.2" +"typescript@npm:^5.7.3": + version: 5.7.3 + resolution: "typescript@npm:5.7.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/a873118b5201b2ef332127ef5c63fb9d9c155e6fdbe211cbd9d8e65877283797cca76546bad742eea36ed7efbe3424a30376818f79c7318512064e8625d61622 + checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.4.5#optional!builtin": - version: 5.7.2 - resolution: "typescript@patch:typescript@npm%3A5.7.2#optional!builtin::version=5.7.2&hash=5786d5" +"typescript@patch:typescript@npm%3A^5.7.3#optional!builtin": + version: 5.7.3 + resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/f3b8082c9d1d1629a215245c9087df56cb784f9fb6f27b5d55577a20e68afe2a889c040aacff6d27e35be165ecf9dca66e694c42eb9a50b3b2c451b36b5675cb + checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 languageName: node linkType: hard -"uWebSockets.js@uNetworking/uWebSockets.js#v20.43.0": - version: 20.43.0 - resolution: "uWebSockets.js@https://github.com/uNetworking/uWebSockets.js.git#commit=1977b5039938ad863d42fc4958d48c17e5a1fa06" - checksum: 10c0/0d1d94bbde0773944d2059694c62388d85399433531faeec2b49a8c411a5dc7706e561367bc9cb076c5dd4e1cff30dde5d81be304dcd526136b61b4a0c2166e5 +"uWebSockets.js@uNetworking/uWebSockets.js#v20.51.0": + version: 20.51.0 + resolution: "uWebSockets.js@https://github.com/uNetworking/uWebSockets.js.git#commit=6609a88ffa9a16ac5158046761356ce03250a0df" + checksum: 10c0/25bd18780ee0582981bf40f40a56dd1d38d528c0d22806c4295d6ab165aae10e90438ca910952ca32d86e264d851325104051b3339e46c8df8633661192d7131 languageName: node linkType: hard -"uglify-js@npm:^3.1.4": - version: 3.19.3 - resolution: "uglify-js@npm:3.19.3" - bin: - uglifyjs: bin/uglifyjs - checksum: 10c0/83b0a90eca35f778e07cad9622b80c448b6aad457c9ff8e568afed978212b42930a95f9e1be943a1ffa4258a3340fbb899f41461131c05bb1d0a9c303aed8479 +"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0": + version: 2.1.0 + resolution: "uc.micro@npm:2.1.0" + checksum: 10c0/8862eddb412dda76f15db8ad1c640ccc2f47cdf8252a4a30be908d535602c8d33f9855dfcccb8b8837855c1ce1eaa563f7fa7ebe3c98fd0794351aab9b9c55fa languageName: node linkType: hard @@ -4704,21 +4338,21 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc languageName: node linkType: hard -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" dependencies: imurmurhash: "npm:^0.1.4" - checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 languageName: node linkType: hard @@ -4729,16 +4363,7 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 @@ -4853,20 +4478,6 @@ __metadata: languageName: node linkType: hard -"vscode-oniguruma@npm:^1.7.0": - version: 1.7.0 - resolution: "vscode-oniguruma@npm:1.7.0" - checksum: 10c0/bef0073c665ddf8c86e51da94529c905856559e9aba97a9882f951acd572da560384775941ab6e7e8db94d9c578b25fefb951e4b73c37e8712e16b0231de2689 - languageName: node - linkType: hard - -"vscode-textmate@npm:^8.0.0": - version: 8.0.0 - resolution: "vscode-textmate@npm:8.0.0" - checksum: 10c0/836f7fe73fc94998a38ca193df48173a2b6eab08b4943d83c8cac9a2a0c3546cfdab4cf1b10b890ec4a4374c5bee03a885ef0e83e7fd2bd618cf00781c017c04 - languageName: node - linkType: hard - "w3c-xmlserializer@npm:^5.0.0": version: 5.0.0 resolution: "w3c-xmlserializer@npm:5.0.0" @@ -4906,7 +4517,7 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^14.0.0": +"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.0": version: 14.1.0 resolution: "whatwg-url@npm:14.1.0" dependencies: @@ -4937,14 +4548,14 @@ __metadata: languageName: node linkType: hard -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" dependencies: isexe: "npm:^3.1.1" bin: node-which: bin/which.js - checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b languageName: node linkType: hard @@ -4960,20 +4571,6 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:^1.2.5": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 - languageName: node - linkType: hard - -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 10c0/7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 - languageName: node - linkType: hard - "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -5003,37 +4600,7 @@ __metadata: languageName: node linkType: hard -"ws7@npm:ws@^7.5.9, ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0": - version: 7.5.10 - resolution: "ws@npm:7.5.10" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d - languageName: node - linkType: hard - -"ws@npm:8.12.0": - version: 8.12.0 - resolution: "ws@npm:8.12.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10c0/2a84d769be015f3644a99a33c1b4c1c268b97315a8387067c242f26ab7ac1f655640220c23ddcbd2f7911649cd00478aaafbb4dff073f0b75f3531ebabd7cced - languageName: node - linkType: hard - -"ws@npm:^8.0.0, ws@npm:^8.18.0": +"ws@npm:^8.16.0, ws@npm:^8.18.0": version: 8.18.0 resolution: "ws@npm:8.18.0" peerDependencies: @@ -5069,9 +4636,18 @@ __metadata: languageName: node linkType: hard -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yaml@npm:^2.6.1": + version: 2.7.0 + resolution: "yaml@npm:2.7.0" + bin: + yaml: bin.mjs + checksum: 10c0/886a7d2abbd70704b79f1d2d05fe9fb0aa63aefb86e1cb9991837dced65193d300f5554747a872b4b10ae9a12bc5d5327e4d04205f70336e863e35e89d8f4ea9 languageName: node linkType: hard