Mirror: The spec-compliant minimum of client-side GraphQL.

Compare changes

Choose any two refs to compare.

-5
.changeset/two-days-nail.md
···
-
---
-
'@0no-co/graphql.web': patch
-
---
-
-
Fix typo causing complex string parsing to fail on subsequent runs.
-2
.github/FUNDING.yml
···
-
github: urql-graphql
-
open_collective: urql-graphql
+26
.github/workflows/mirror.yml
···
+
# Mirrors to https://tangled.sh/@kitten.sh (knot.kitten.sh)
+
name: Mirror (Git Backup)
+
on:
+
push:
+
branches:
+
- main
+
jobs:
+
mirror:
+
runs-on: ubuntu-latest
+
steps:
+
- name: Checkout repository
+
uses: actions/checkout@v4
+
with:
+
fetch-depth: 0
+
fetch-tags: true
+
- name: Mirror
+
env:
+
MIRROR_SSH_KEY: ${{ secrets.MIRROR_SSH_KEY }}
+
GIT_SSH_COMMAND: 'ssh -o StrictHostKeyChecking=yes'
+
run: |
+
mkdir -p ~/.ssh
+
echo "$MIRROR_SSH_KEY" > ~/.ssh/id_rsa
+
chmod 600 ~/.ssh/id_rsa
+
ssh-keyscan -H knot.kitten.sh >> ~/.ssh/known_hosts
+
git remote add mirror "git@knot.kitten.sh:kitten.sh/${GITHUB_REPOSITORY#*/}"
+
git push --mirror mirror
+2 -6
.github/workflows/release.yml
···
jobs:
release:
name: Release
-
runs-on: ubuntu-20.04
+
runs-on: ubuntu-22.04
timeout-minutes: 20
permissions:
contents: write
···
- name: PR or Publish
id: changesets
-
uses: changesets/action@v1.4.5
+
uses: changesets/action@v1.5.3
with:
version: pnpm changeset:version
publish: pnpm changeset:publish
env:
-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Notify discord
···
publishedPackages: ${{ steps.changesets.outputs.publishedPackages }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
- name: Publish Prerelease
if: steps.changesets.outputs.published != 'true'
env:
-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
-
npm config set "//registry.npmjs.org/:_authToken" "$NPM_TOKEN"
git reset --hard origin/main
pnpm changeset version --no-git-tag --snapshot canary
pnpm changeset publish --no-git-tag --snapshot canary --tag canary
+77
CHANGELOG.md
···
# @0no-co/graphql.web
+
## 1.2.0
+
+
### Minor Changes
+
+
- Add support for executable definitions as defined in https://github.com/graphql/graphql-spec/pull/1170
+
Submitted by [@JoviDeCroock](https://github.com/JoviDeCroock) (See [#59](https://github.com/0no-co/graphql.web/pull/59))
+
+
### Patch Changes
+
+
- Handle trailing comment ending in EOF (end of input)
+
Submitted by [@kitten](https://github.com/kitten) (See [#62](https://github.com/0no-co/graphql.web/pull/62))
+
+
## 1.1.2
+
+
### Patch Changes
+
+
- Remove sourcemaps' `sourcesContent` from published package
+
Submitted by [@kitten](https://github.com/kitten) (See [#56](https://github.com/0no-co/graphql.web/pull/56))
+
+
## 1.1.1
+
+
### Patch Changes
+
+
- Remove redundant loc setter/getter in favour of value to improve pre-warmup times
+
Submitted by [@kitten](https://github.com/kitten) (See [#54](https://github.com/0no-co/graphql.web/pull/54))
+
+
## 1.1.0
+
+
### Minor Changes
+
+
- Improve parser performance (up to ~25% higher ops/s) by rewriting part of the parsing that runs in tight loops. Previously, the purer parser combinators w/o regexs wouldn't have been as significant of an improvement, but they now clearly are
+
Submitted by [@kitten](https://github.com/kitten) (See [#52](https://github.com/0no-co/graphql.web/pull/52))
+
+
## 1.0.13
+
+
### Patch Changes
+
+
- โš ๏ธ Fix compatibility with typescript 5.5 and higher
+
Submitted by [@andreisergiu98](https://github.com/andreisergiu98) (See [#49](https://github.com/0no-co/graphql.web/pull/49))
+
+
## 1.0.12
+
+
### Patch Changes
+
+
- โš ๏ธ Fix printing when a manually created AST node with an empty selection set array is passed to the printer
+
Submitted by [@JoviDeCroock](https://github.com/JoviDeCroock) (See [#46](https://github.com/0no-co/graphql.web/pull/46))
+
+
## 1.0.11
+
+
### Patch Changes
+
+
- Export Extensions type
+
Submitted by [@jaulz](https://github.com/jaulz) (See [#36](https://github.com/0no-co/graphql.web/pull/36))
+
+
## 1.0.10
+
+
### Patch Changes
+
+
- Add `loc` getter to parsed `DocumentNode` fragment outputs to ensure that using fragments created by `gql.tada`'s `graphql()` function with `graphql-tag` doesn't crash. `graphql-tag` does not treat the `DocumentNode.loc` property as optional on interpolations, which leads to intercompatibility issues
+
Submitted by [@JoviDeCroock](https://github.com/JoviDeCroock) (See [#38](https://github.com/0no-co/graphql.web/pull/38))
+
- Add missing exports to make apollo-client functional with this library
+
Submitted by [@JoviDeCroock](https://github.com/JoviDeCroock) (See [#39](https://github.com/0no-co/graphql.web/pull/39))
+
+
## 1.0.9
+
+
### Patch Changes
+
+
- Remove `for-of` syntax from `valueFromTypeNode` and `valueFromASTUntyped` helpers for JSC memory reduction
+
Submitted by [@kitten](https://github.com/kitten) (See [#33](https://github.com/0no-co/graphql.web/pull/33))
+
+
## 1.0.8
+
+
### Patch Changes
+
+
- โš ๏ธ Fix typo causing complex string parsing to fail on subsequent runs
+
Submitted by [@kitten](https://github.com/kitten) (See [#31](https://github.com/0no-co/graphql.web/pull/31))
+
## 1.0.7
### Patch Changes
+1 -1
jsr.json
···
{
"name": "@0no-co/graphql-web",
-
"version": "1.0.7",
+
"version": "1.2.0",
"exports": "./src/index.ts"
}
+7 -7
package.json
···
{
"name": "@0no-co/graphql.web",
"description": "A spec-compliant client-side GraphQL implementation",
-
"version": "1.0.7",
+
"version": "1.2.0",
"author": "0no.co <hi@0no.co>",
"source": "./src/index.ts",
"main": "./dist/graphql.web",
···
]
},
"devDependencies": {
-
"@actions/core": "^1.10.0",
+
"@actions/core": "^1.11.1",
"@actions/github": "^5.1.1",
"@babel/plugin-transform-block-scoping": "^7.23.4",
"@babel/plugin-transform-typescript": "^7.23.6",
-
"@changesets/cli": "^2.27.1",
+
"@changesets/cli": "^2.29.6",
"@changesets/get-github-info": "^0.6.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^25.0.7",
···
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-tsdoc": "^0.2.17",
+
"graphql15": "npm:graphql@^15.8.0",
+
"graphql16": "npm:graphql@^16.8.1",
+
"graphql17": "npm:graphql@^17.0.0-alpha.3",
"husky-v4": "^4.3.8",
"jsr": "^0.12.1",
"lint-staged": "^15.2.0",
···
"rollup-plugin-dts": "^6.1.0",
"terser": "^5.27.0",
"typescript": "^5.3.3",
-
"vitest": "^1.2.2",
-
"graphql15": "npm:graphql@^15.8.0",
-
"graphql16": "npm:graphql@^16.8.1",
-
"graphql17": "npm:graphql@^17.0.0-alpha.3"
+
"vitest": "^1.2.2"
},
"publishConfig": {
"access": "public",
+419 -758
pnpm-lock.yaml
···
version: 16.8.1
devDependencies:
'@actions/core':
-
specifier: ^1.10.0
-
version: 1.10.1
+
specifier: ^1.11.1
+
version: 1.11.1
'@actions/github':
specifier: ^5.1.1
version: 5.1.1
···
specifier: ^7.23.6
version: 7.23.6(@babel/core@7.23.9)
'@changesets/cli':
-
specifier: ^2.27.1
-
version: 2.27.1
+
specifier: ^2.29.6
+
version: 2.29.6
'@changesets/get-github-info':
specifier: ^0.6.0
version: 0.6.0
···
version: 0.4.4(rollup@4.9.6)
'@typescript-eslint/eslint-plugin':
specifier: ^6.20.0
-
version: 6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3)
+
version: 6.20.0(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3)
'@typescript-eslint/parser':
specifier: ^6.20.0
version: 6.20.0(eslint@8.56.0)(typescript@5.3.3)
'@vitest/coverage-v8':
specifier: ^1.2.2
-
version: 1.2.2(vitest@1.2.2)
+
version: 1.2.2(vitest@1.2.2(terser@5.27.0))
dotenv:
specifier: ^16.4.1
version: 16.4.1
···
version: 9.1.0(eslint@8.56.0)
eslint-plugin-prettier:
specifier: ^5.1.3
-
version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
+
version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@3.2.4)
eslint-plugin-tsdoc:
specifier: ^0.2.17
version: 0.2.17
···
resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
engines: {node: '>=0.10.0'}
-
'@actions/core@1.10.1':
-
resolution: {integrity: sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==}
+
'@actions/core@1.11.1':
+
resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==}
+
+
'@actions/exec@1.1.1':
+
resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==}
'@actions/github@5.1.1':
resolution: {integrity: sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==}
'@actions/http-client@2.2.1':
resolution: {integrity: sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==}
+
+
'@actions/io@1.1.3':
+
resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==}
'@ampproject/remapping@2.2.1':
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
+
engines: {node: '>=6.0.0'}
+
+
'@ampproject/remapping@2.3.0':
+
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
'@babel/code-frame@7.23.5':
resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
engines: {node: '>=6.9.0'}
-
'@babel/compat-data@7.23.5':
-
resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
+
'@babel/code-frame@7.27.1':
+
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/compat-data@7.28.0':
+
resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
engines: {node: '>=6.9.0'}
'@babel/core@7.23.9':
resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==}
engines: {node: '>=6.9.0'}
-
'@babel/generator@7.23.6':
-
resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
+
'@babel/generator@7.28.3':
+
resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
engines: {node: '>=6.9.0'}
'@babel/helper-annotate-as-pure@7.22.5':
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
engines: {node: '>=6.9.0'}
-
'@babel/helper-compilation-targets@7.23.6':
-
resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
+
'@babel/helper-compilation-targets@7.27.2':
+
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-create-class-features-plugin@7.23.9':
···
resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
engines: {node: '>=6.9.0'}
-
'@babel/helper-hoist-variables@7.22.5':
-
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
+
'@babel/helper-globals@7.28.0':
+
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
engines: {node: '>=6.9.0'}
'@babel/helper-member-expression-to-functions@7.23.0':
···
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'}
-
'@babel/helper-module-transforms@7.23.3':
-
resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
+
'@babel/helper-module-imports@7.27.1':
+
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helper-module-transforms@7.28.3':
+
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
···
peerDependencies:
'@babel/core': ^7.0.0
-
'@babel/helper-simple-access@7.22.5':
-
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
-
engines: {node: '>=6.9.0'}
-
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
engines: {node: '>=6.9.0'}
···
resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
engines: {node: '>=6.9.0'}
+
'@babel/helper-string-parser@7.27.1':
+
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+
engines: {node: '>=6.9.0'}
+
'@babel/helper-validator-identifier@7.22.20':
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
engines: {node: '>=6.9.0'}
-
'@babel/helper-validator-option@7.23.5':
-
resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
+
'@babel/helper-validator-identifier@7.27.1':
+
resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
engines: {node: '>=6.9.0'}
-
'@babel/helpers@7.23.9':
-
resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==}
+
'@babel/helper-validator-option@7.27.1':
+
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/helpers@7.28.3':
+
resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==}
engines: {node: '>=6.9.0'}
'@babel/highlight@7.23.4':
···
'@babel/parser@7.23.9':
resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==}
+
engines: {node: '>=6.0.0'}
+
hasBin: true
+
+
'@babel/parser@7.28.3':
+
resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==}
engines: {node: '>=6.0.0'}
hasBin: true
···
resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==}
engines: {node: '>=6.9.0'}
-
'@babel/traverse@7.23.9':
-
resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==}
+
'@babel/template@7.27.2':
+
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/traverse@7.28.3':
+
resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==}
engines: {node: '>=6.9.0'}
'@babel/types@7.23.9':
resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==}
+
engines: {node: '>=6.9.0'}
+
+
'@babel/types@7.28.2':
+
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
-
'@changesets/apply-release-plan@7.0.0':
-
resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==}
+
'@changesets/apply-release-plan@7.0.12':
+
resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==}
-
'@changesets/assemble-release-plan@6.0.0':
-
resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==}
+
'@changesets/assemble-release-plan@6.0.9':
+
resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==}
-
'@changesets/changelog-git@0.2.0':
-
resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==}
+
'@changesets/changelog-git@0.2.1':
+
resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==}
-
'@changesets/cli@2.27.1':
-
resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==}
+
'@changesets/cli@2.29.6':
+
resolution: {integrity: sha512-6qCcVsIG1KQLhpQ5zE8N0PckIx4+9QlHK3z6/lwKnw7Tir71Bjw8BeOZaxA/4Jt00pcgCnCSWZnyuZf5Il05QQ==}
hasBin: true
-
'@changesets/config@3.0.0':
-
resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==}
+
'@changesets/config@3.1.1':
+
resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==}
'@changesets/errors@0.2.0':
resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
-
'@changesets/get-dependents-graph@2.0.0':
-
resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==}
+
'@changesets/get-dependents-graph@2.1.3':
+
resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==}
'@changesets/get-github-info@0.6.0':
resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==}
-
'@changesets/get-release-plan@4.0.0':
-
resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==}
+
'@changesets/get-release-plan@4.0.13':
+
resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==}
'@changesets/get-version-range-type@0.4.0':
resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
-
'@changesets/git@3.0.0':
-
resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==}
+
'@changesets/git@3.0.4':
+
resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==}
+
+
'@changesets/logger@0.1.1':
+
resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
-
'@changesets/logger@0.1.0':
-
resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==}
+
'@changesets/parse@0.4.1':
+
resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==}
-
'@changesets/parse@0.4.0':
-
resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==}
+
'@changesets/pre@2.0.2':
+
resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==}
-
'@changesets/pre@2.0.0':
-
resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==}
+
'@changesets/read@0.6.5':
+
resolution: {integrity: sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==}
-
'@changesets/read@0.6.0':
-
resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==}
+
'@changesets/should-skip-package@0.1.2':
+
resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==}
'@changesets/types@4.1.0':
resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
-
'@changesets/types@6.0.0':
-
resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==}
+
'@changesets/types@6.1.0':
+
resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==}
-
'@changesets/write@0.3.0':
-
resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==}
+
'@changesets/write@0.4.0':
+
resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
'@esbuild/aix-ppc64@0.19.12':
resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
···
'@humanwhocodes/object-schema@2.0.2':
resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==}
+
'@inquirer/external-editor@1.0.1':
+
resolution: {integrity: sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==}
+
engines: {node: '>=18'}
+
peerDependencies:
+
'@types/node': '>=18'
+
peerDependenciesMeta:
+
'@types/node':
+
optional: true
+
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
···
'@jest/schemas@29.6.3':
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+
'@jridgewell/gen-mapping@0.3.13':
+
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/gen-mapping@0.3.3':
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
···
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
engines: {node: '>=6.0.0'}
+
'@jridgewell/resolve-uri@3.1.2':
+
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+
engines: {node: '>=6.0.0'}
+
'@jridgewell/set-array@1.1.2':
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
engines: {node: '>=6.0.0'}
···
'@jridgewell/sourcemap-codec@1.4.15':
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
'@jridgewell/sourcemap-codec@1.5.5':
+
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
'@jridgewell/trace-mapping@0.3.22':
resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==}
+
+
'@jridgewell/trace-mapping@0.3.30':
+
resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
'@manypkg/find-root@1.1.0':
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
···
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
-
'@types/minimist@1.2.5':
-
resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
-
'@types/node@12.20.55':
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
-
-
'@types/normalize-package-data@2.4.4':
-
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
'@types/parse-json@4.0.0':
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
···
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
-
array.prototype.flat@1.3.2:
-
resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
-
engines: {node: '>= 0.4'}
-
arraybuffer.prototype.slice@1.0.2:
resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
engines: {node: '>= 0.4'}
-
arrify@1.0.1:
-
resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
-
engines: {node: '>=0.10.0'}
-
assertion-error@1.1.0:
resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
···
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
-
breakword@1.0.6:
-
resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==}
+
braces@3.0.3:
+
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+
engines: {node: '>=8'}
-
browserslist@4.22.3:
-
resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==}
+
browserslist@4.25.4:
+
resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
···
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
-
camelcase-keys@6.2.2:
-
resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
-
engines: {node: '>=8'}
-
-
camelcase@5.3.1:
-
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
-
engines: {node: '>=6'}
-
-
caniuse-lite@1.0.30001581:
-
resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==}
+
caniuse-lite@1.0.30001737:
+
resolution: {integrity: sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==}
chai@4.4.1:
resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
···
resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
chardet@0.7.0:
-
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
chardet@2.1.0:
+
resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==}
check-error@1.0.3:
resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
···
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
engines: {node: '>=18'}
-
cliui@6.0.0:
-
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
-
-
cliui@8.0.1:
-
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
-
engines: {node: '>=12'}
-
-
clone@1.0.4:
-
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
-
engines: {node: '>=0.8'}
-
color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
···
resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
engines: {node: '>=10'}
-
cross-spawn@5.1.0:
-
resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
-
cross-spawn@6.0.5:
resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
engines: {node: '>=4.8'}
···
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
-
csv-generate@3.4.3:
-
resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==}
-
-
csv-parse@4.16.3:
-
resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==}
-
-
csv-stringify@5.6.5:
-
resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==}
-
-
csv@5.5.3:
-
resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==}
-
engines: {node: '>= 0.1.90'}
+
cross-spawn@7.0.6:
+
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+
engines: {node: '>= 8'}
dataloader@1.4.0:
resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==}
···
supports-color:
optional: true
-
decamelize-keys@1.1.1:
-
resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
-
engines: {node: '>=0.10.0'}
-
-
decamelize@1.2.0:
-
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
-
engines: {node: '>=0.10.0'}
+
debug@4.4.1:
+
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
+
engines: {node: '>=6.0'}
+
peerDependencies:
+
supports-color: '*'
+
peerDependenciesMeta:
+
supports-color:
+
optional: true
deep-eql@4.1.3:
resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
···
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
-
defaults@1.0.4:
-
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
-
define-data-property@1.1.1:
resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==}
engines: {node: '>= 0.4'}
···
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
electron-to-chromium@1.4.650:
-
resolution: {integrity: sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ==}
+
electron-to-chromium@1.5.211:
+
resolution: {integrity: sha512-IGBvimJkotaLzFnwIVgW9/UD/AOJ2tByUmeOrtqBfACSbAw5b1G0XpvdaieKyc7ULmbwXVx+4e4Be8pOPBrYkw==}
emoji-regex@10.3.0:
resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
···
resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==}
engines: {node: '>= 0.4'}
-
es-shim-unscopables@1.0.2:
-
resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
-
es-to-primitive@1.2.1:
resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
engines: {node: '>= 0.4'}
···
engines: {node: '>=12'}
hasBin: true
-
escalade@3.1.1:
-
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+
escalade@3.2.0:
+
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
escape-string-regexp@1.0.5:
···
extendable-error@0.1.7:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
-
external-editor@3.1.0:
-
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
-
engines: {node: '>=4'}
-
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
···
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
+
fill-range@7.1.1:
+
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+
engines: {node: '>=8'}
+
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
···
find-versions@4.0.0:
resolution: {integrity: sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==}
engines: {node: '>=10'}
-
-
find-yarn-workspace-root2@1.2.16:
-
resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==}
flat-cache@3.2.0:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
···
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
-
-
get-caller-file@2.0.5:
-
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
-
engines: {node: 6.* || 8.* || >= 10.*}
get-east-asian-width@1.2.0:
resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
···
resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
engines: {node: '>=12'}
-
globals@11.12.0:
-
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
-
engines: {node: '>=4'}
-
globals@13.24.0:
resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
engines: {node: '>=8'}
···
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
grapheme-splitter@1.0.4:
-
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
-
graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
···
resolution: {integrity: sha512-+3gX29B8lQ3Q1KkABSgy6CyBF7nTMObd6EHwcIHg4Pkz03D5hy/eJiHjD/io68+ti3goJmpF+OLJXKaUkgReXg==}
engines: {node: ^16.19.0 || ^18.14.0 || >=19.7.0}
-
hard-rejection@2.1.0:
-
resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
-
engines: {node: '>=6'}
-
has-bigints@1.0.2:
resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
···
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
-
human-id@1.0.2:
-
resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
+
human-id@4.1.1:
+
resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==}
+
hasBin: true
human-signals@5.0.0:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
···
engines: {node: '>=10'}
hasBin: true
-
iconv-lite@0.4.24:
-
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+
iconv-lite@0.6.3:
+
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
ignore@5.3.0:
···
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
-
-
indent-string@4.0.0:
-
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
-
engines: {node: '>=8'}
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
···
is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
-
-
is-plain-obj@1.1.0:
-
resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
-
engines: {node: '>=0.10.0'}
is-plain-object@5.0.0:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
···
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
-
jsesc@2.5.2:
-
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
-
engines: {node: '>=4'}
+
jsesc@3.1.0:
+
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+
engines: {node: '>=6'}
hasBin: true
json-buffer@3.0.1:
···
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
-
kind-of@6.0.3:
-
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
-
engines: {node: '>=0.10.0'}
-
-
kleur@4.1.5:
-
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
-
engines: {node: '>=6'}
-
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
···
load-json-file@4.0.0:
resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
engines: {node: '>=4'}
-
-
load-yaml-file@0.2.0:
-
resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
-
engines: {node: '>=6'}
local-pkg@0.5.0:
resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
···
resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==}
engines: {node: 14 || >=16.14}
-
lru-cache@4.1.5:
-
resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
-
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
···
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
-
map-obj@1.0.1:
-
resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
-
engines: {node: '>=0.10.0'}
-
-
map-obj@4.3.0:
-
resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
-
engines: {node: '>=8'}
-
memorystream@0.3.1:
resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
engines: {node: '>= 0.10.0'}
-
-
meow@6.1.1:
-
resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==}
-
engines: {node: '>=8'}
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
···
micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+
engines: {node: '>=8.6'}
+
+
micromatch@4.0.8:
+
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
mimic-fn@2.1.0:
···
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'}
-
min-indent@1.0.1:
-
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
-
engines: {node: '>=4'}
-
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
···
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
-
minimist-options@4.1.0:
-
resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
-
engines: {node: '>= 6'}
-
minipass@7.0.4:
resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
engines: {node: '>=16 || 14 >=14.17'}
-
mixme@0.5.10:
-
resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==}
-
engines: {node: '>= 8.0.0'}
-
mlly@1.5.0:
resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==}
+
mri@1.2.0:
+
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+
engines: {node: '>=4'}
+
ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
ms@2.1.3:
+
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
···
encoding:
optional: true
-
node-releases@2.0.14:
-
resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+
node-releases@2.0.19:
+
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
node-stream-zip@1.15.0:
resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==}
···
resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
engines: {node: '>= 0.8.0'}
-
os-tmpdir@1.0.2:
-
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
-
engines: {node: '>=0.10.0'}
-
outdent@0.5.0:
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
···
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
+
package-manager-detector@0.2.11:
+
resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
+
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
···
picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+
picocolors@1.1.1:
+
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
···
pify@4.0.1:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
-
-
pkg-dir@4.2.0:
-
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
-
engines: {node: '>=8'}
pkg-dir@5.0.0:
resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==}
···
resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==}
engines: {node: ^10 || ^12 || >=14}
-
preferred-pm@3.1.2:
-
resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==}
-
engines: {node: '>=10'}
-
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
···
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-
pseudomap@1.0.2:
-
resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
-
punycode@2.3.0:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
engines: {node: '>=6'}
+
quansync@0.2.11:
+
resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
+
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
-
quick-lru@4.0.1:
-
resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
-
engines: {node: '>=8'}
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
react-is@18.2.0:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
-
-
read-pkg-up@7.0.1:
-
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
-
engines: {node: '>=8'}
read-pkg@3.0.0:
resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
engines: {node: '>=4'}
-
read-pkg@5.2.0:
-
resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
-
engines: {node: '>=8'}
-
read-yaml-file@1.1.0:
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
engines: {node: '>=6'}
-
-
redent@3.0.0:
-
resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
-
engines: {node: '>=8'}
regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
···
regexp.prototype.flags@1.5.1:
resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
engines: {node: '>= 0.4'}
-
-
require-directory@2.1.1:
-
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
-
engines: {node: '>=0.10.0'}
-
-
require-main-filename@2.0.0:
-
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
···
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
-
-
set-blocking@2.0.0:
-
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
set-function-length@1.2.0:
resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==}
···
resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
engines: {node: '>=18'}
-
smartwrap@2.0.2:
-
resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==}
-
engines: {node: '>=6'}
-
hasBin: true
-
smob@1.4.1:
resolution: {integrity: sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==}
···
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
-
spawndamnit@2.0.0:
-
resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==}
+
spawndamnit@3.0.1:
+
resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==}
spdx-correct@3.2.0:
resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
···
std-env@3.7.0:
resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
-
stream-transform@2.1.3:
-
resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==}
-
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
···
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
-
strip-indent@3.0.0:
-
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
-
engines: {node: '>=8'}
-
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
···
resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==}
engines: {node: '>=14.0.0'}
-
tmp@0.0.33:
-
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
-
engines: {node: '>=0.6.0'}
-
to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
···
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
-
trim-newlines@3.0.1:
-
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
-
engines: {node: '>=8'}
-
ts-api-utils@1.0.3:
resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
engines: {node: '>=16.13.0'}
···
tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
-
tty-table@4.2.3:
-
resolution: {integrity: sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==}
-
engines: {node: '>=8.0.0'}
-
hasBin: true
-
tunnel@0.0.6:
resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
···
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
-
type-fest@0.13.1:
-
resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
-
engines: {node: '>=10'}
-
type-fest@0.20.2:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
-
type-fest@0.6.0:
-
resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
-
engines: {node: '>=8'}
-
-
type-fest@0.8.1:
-
resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
-
engines: {node: '>=8'}
-
type-fest@3.13.1:
resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
engines: {node: '>=14.16'}
···
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
-
update-browserslist-db@1.0.13:
-
resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+
update-browserslist-db@1.1.3:
+
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
···
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
uuid@8.3.2:
-
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
-
hasBin: true
-
v8-to-istanbul@9.2.0:
resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==}
engines: {node: '>=10.12.0'}
···
jsdom:
optional: true
-
wcwidth@1.0.1:
-
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
-
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
···
which-boxed-primitive@1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
-
-
which-module@2.0.1:
-
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
which-pm-runs@1.1.0:
resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==}
engines: {node: '>=4'}
-
which-pm@2.0.0:
-
resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==}
-
engines: {node: '>=8.15'}
-
which-typed-array@1.1.13:
resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==}
engines: {node: '>= 0.4'}
···
engines: {node: '>=8'}
hasBin: true
-
wrap-ansi@6.2.0:
-
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
-
engines: {node: '>=8'}
-
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
···
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
y18n@4.0.3:
-
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
-
-
y18n@5.0.8:
-
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
-
engines: {node: '>=10'}
-
-
yallist@2.1.2:
-
resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
-
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
···
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
engines: {node: '>= 14'}
-
yargs-parser@18.1.3:
-
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
-
engines: {node: '>=6'}
-
-
yargs-parser@21.1.1:
-
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
-
engines: {node: '>=12'}
-
-
yargs@15.4.1:
-
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
-
engines: {node: '>=8'}
-
-
yargs@17.7.2:
-
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
-
engines: {node: '>=12'}
-
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
···
'@aashutoshrathi/word-wrap@1.2.6': {}
-
'@actions/core@1.10.1':
+
'@actions/core@1.11.1':
dependencies:
+
'@actions/exec': 1.1.1
'@actions/http-client': 2.2.1
-
uuid: 8.3.2
+
+
'@actions/exec@1.1.1':
+
dependencies:
+
'@actions/io': 1.1.3
'@actions/github@5.1.1':
dependencies:
···
tunnel: 0.0.6
undici: 5.28.4
+
'@actions/io@1.1.3': {}
+
'@ampproject/remapping@2.2.1':
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.22
+
'@ampproject/remapping@2.3.0':
+
dependencies:
+
'@jridgewell/gen-mapping': 0.3.13
+
'@jridgewell/trace-mapping': 0.3.30
+
'@babel/code-frame@7.23.5':
dependencies:
'@babel/highlight': 7.23.4
chalk: 2.4.2
-
'@babel/compat-data@7.23.5': {}
+
'@babel/code-frame@7.27.1':
+
dependencies:
+
'@babel/helper-validator-identifier': 7.27.1
+
js-tokens: 4.0.0
+
picocolors: 1.1.1
+
+
'@babel/compat-data@7.28.0': {}
'@babel/core@7.23.9':
dependencies:
-
'@ampproject/remapping': 2.2.1
-
'@babel/code-frame': 7.23.5
-
'@babel/generator': 7.23.6
-
'@babel/helper-compilation-targets': 7.23.6
-
'@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9)
-
'@babel/helpers': 7.23.9
-
'@babel/parser': 7.23.9
-
'@babel/template': 7.23.9
-
'@babel/traverse': 7.23.9
-
'@babel/types': 7.23.9
+
'@ampproject/remapping': 2.3.0
+
'@babel/code-frame': 7.27.1
+
'@babel/generator': 7.28.3
+
'@babel/helper-compilation-targets': 7.27.2
+
'@babel/helper-module-transforms': 7.28.3(@babel/core@7.23.9)
+
'@babel/helpers': 7.28.3
+
'@babel/parser': 7.28.3
+
'@babel/template': 7.27.2
+
'@babel/traverse': 7.28.3
+
'@babel/types': 7.28.2
convert-source-map: 2.0.0
-
debug: 4.3.4
+
debug: 4.4.1
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
-
'@babel/generator@7.23.6':
+
'@babel/generator@7.28.3':
dependencies:
-
'@babel/types': 7.23.9
-
'@jridgewell/gen-mapping': 0.3.3
-
'@jridgewell/trace-mapping': 0.3.22
-
jsesc: 2.5.2
+
'@babel/parser': 7.28.3
+
'@babel/types': 7.28.2
+
'@jridgewell/gen-mapping': 0.3.13
+
'@jridgewell/trace-mapping': 0.3.30
+
jsesc: 3.1.0
'@babel/helper-annotate-as-pure@7.22.5':
dependencies:
'@babel/types': 7.23.9
-
'@babel/helper-compilation-targets@7.23.6':
+
'@babel/helper-compilation-targets@7.27.2':
dependencies:
-
'@babel/compat-data': 7.23.5
-
'@babel/helper-validator-option': 7.23.5
-
browserslist: 4.22.3
+
'@babel/compat-data': 7.28.0
+
'@babel/helper-validator-option': 7.27.1
+
browserslist: 4.25.4
lru-cache: 5.1.1
semver: 6.3.1
···
'@babel/template': 7.23.9
'@babel/types': 7.23.9
-
'@babel/helper-hoist-variables@7.22.5':
-
dependencies:
-
'@babel/types': 7.23.9
+
'@babel/helper-globals@7.28.0': {}
'@babel/helper-member-expression-to-functions@7.23.0':
dependencies:
···
dependencies:
'@babel/types': 7.23.9
-
'@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9)':
+
'@babel/helper-module-imports@7.27.1':
+
dependencies:
+
'@babel/traverse': 7.28.3
+
'@babel/types': 7.28.2
+
transitivePeerDependencies:
+
- supports-color
+
+
'@babel/helper-module-transforms@7.28.3(@babel/core@7.23.9)':
dependencies:
'@babel/core': 7.23.9
-
'@babel/helper-environment-visitor': 7.22.20
-
'@babel/helper-module-imports': 7.22.15
-
'@babel/helper-simple-access': 7.22.5
-
'@babel/helper-split-export-declaration': 7.22.6
-
'@babel/helper-validator-identifier': 7.22.20
+
'@babel/helper-module-imports': 7.27.1
+
'@babel/helper-validator-identifier': 7.27.1
+
'@babel/traverse': 7.28.3
+
transitivePeerDependencies:
+
- supports-color
'@babel/helper-optimise-call-expression@7.22.5':
dependencies:
···
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-member-expression-to-functions': 7.23.0
'@babel/helper-optimise-call-expression': 7.22.5
-
-
'@babel/helper-simple-access@7.22.5':
-
dependencies:
-
'@babel/types': 7.23.9
'@babel/helper-skip-transparent-expression-wrappers@7.22.5':
dependencies:
···
'@babel/helper-string-parser@7.23.4': {}
+
'@babel/helper-string-parser@7.27.1': {}
+
'@babel/helper-validator-identifier@7.22.20': {}
-
'@babel/helper-validator-option@7.23.5': {}
+
'@babel/helper-validator-identifier@7.27.1': {}
+
+
'@babel/helper-validator-option@7.27.1': {}
-
'@babel/helpers@7.23.9':
+
'@babel/helpers@7.28.3':
dependencies:
-
'@babel/template': 7.23.9
-
'@babel/traverse': 7.23.9
-
'@babel/types': 7.23.9
-
transitivePeerDependencies:
-
- supports-color
+
'@babel/template': 7.27.2
+
'@babel/types': 7.28.2
'@babel/highlight@7.23.4':
dependencies:
···
'@babel/parser@7.23.9':
dependencies:
'@babel/types': 7.23.9
+
+
'@babel/parser@7.28.3':
+
dependencies:
+
'@babel/types': 7.28.2
'@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9)':
dependencies:
···
'@babel/parser': 7.23.9
'@babel/types': 7.23.9
-
'@babel/traverse@7.23.9':
+
'@babel/template@7.27.2':
dependencies:
-
'@babel/code-frame': 7.23.5
-
'@babel/generator': 7.23.6
-
'@babel/helper-environment-visitor': 7.22.20
-
'@babel/helper-function-name': 7.23.0
-
'@babel/helper-hoist-variables': 7.22.5
-
'@babel/helper-split-export-declaration': 7.22.6
-
'@babel/parser': 7.23.9
-
'@babel/types': 7.23.9
-
debug: 4.3.4
-
globals: 11.12.0
+
'@babel/code-frame': 7.27.1
+
'@babel/parser': 7.28.3
+
'@babel/types': 7.28.2
+
+
'@babel/traverse@7.28.3':
+
dependencies:
+
'@babel/code-frame': 7.27.1
+
'@babel/generator': 7.28.3
+
'@babel/helper-globals': 7.28.0
+
'@babel/parser': 7.28.3
+
'@babel/template': 7.27.2
+
'@babel/types': 7.28.2
+
debug: 4.4.1
transitivePeerDependencies:
- supports-color
···
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
+
'@babel/types@7.28.2':
+
dependencies:
+
'@babel/helper-string-parser': 7.27.1
+
'@babel/helper-validator-identifier': 7.27.1
+
'@bcoe/v8-coverage@0.2.3': {}
-
'@changesets/apply-release-plan@7.0.0':
+
'@changesets/apply-release-plan@7.0.12':
dependencies:
-
'@babel/runtime': 7.23.9
-
'@changesets/config': 3.0.0
+
'@changesets/config': 3.1.1
'@changesets/get-version-range-type': 0.4.0
-
'@changesets/git': 3.0.0
-
'@changesets/types': 6.0.0
+
'@changesets/git': 3.0.4
+
'@changesets/should-skip-package': 0.1.2
+
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
detect-indent: 6.1.0
fs-extra: 7.0.1
···
resolve-from: 5.0.0
semver: 7.5.4
-
'@changesets/assemble-release-plan@6.0.0':
+
'@changesets/assemble-release-plan@6.0.9':
dependencies:
-
'@babel/runtime': 7.23.9
'@changesets/errors': 0.2.0
-
'@changesets/get-dependents-graph': 2.0.0
-
'@changesets/types': 6.0.0
+
'@changesets/get-dependents-graph': 2.1.3
+
'@changesets/should-skip-package': 0.1.2
+
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
semver: 7.5.4
-
'@changesets/changelog-git@0.2.0':
+
'@changesets/changelog-git@0.2.1':
dependencies:
-
'@changesets/types': 6.0.0
+
'@changesets/types': 6.1.0
-
'@changesets/cli@2.27.1':
+
'@changesets/cli@2.29.6':
dependencies:
-
'@babel/runtime': 7.23.9
-
'@changesets/apply-release-plan': 7.0.0
-
'@changesets/assemble-release-plan': 6.0.0
-
'@changesets/changelog-git': 0.2.0
-
'@changesets/config': 3.0.0
+
'@changesets/apply-release-plan': 7.0.12
+
'@changesets/assemble-release-plan': 6.0.9
+
'@changesets/changelog-git': 0.2.1
+
'@changesets/config': 3.1.1
'@changesets/errors': 0.2.0
-
'@changesets/get-dependents-graph': 2.0.0
-
'@changesets/get-release-plan': 4.0.0
-
'@changesets/git': 3.0.0
-
'@changesets/logger': 0.1.0
-
'@changesets/pre': 2.0.0
-
'@changesets/read': 0.6.0
-
'@changesets/types': 6.0.0
-
'@changesets/write': 0.3.0
+
'@changesets/get-dependents-graph': 2.1.3
+
'@changesets/get-release-plan': 4.0.13
+
'@changesets/git': 3.0.4
+
'@changesets/logger': 0.1.1
+
'@changesets/pre': 2.0.2
+
'@changesets/read': 0.6.5
+
'@changesets/should-skip-package': 0.1.2
+
'@changesets/types': 6.1.0
+
'@changesets/write': 0.4.0
+
'@inquirer/external-editor': 1.0.1
'@manypkg/get-packages': 1.1.3
-
'@types/semver': 7.5.6
ansi-colors: 4.1.3
-
chalk: 2.4.2
ci-info: 3.9.0
enquirer: 2.4.1
-
external-editor: 3.1.0
fs-extra: 7.0.1
-
human-id: 1.0.2
-
meow: 6.1.1
-
outdent: 0.5.0
+
mri: 1.2.0
p-limit: 2.3.0
-
preferred-pm: 3.1.2
+
package-manager-detector: 0.2.11
+
picocolors: 1.1.1
resolve-from: 5.0.0
semver: 7.5.4
-
spawndamnit: 2.0.0
+
spawndamnit: 3.0.1
term-size: 2.2.1
-
tty-table: 4.2.3
+
transitivePeerDependencies:
+
- '@types/node'
-
'@changesets/config@3.0.0':
+
'@changesets/config@3.1.1':
dependencies:
'@changesets/errors': 0.2.0
-
'@changesets/get-dependents-graph': 2.0.0
-
'@changesets/logger': 0.1.0
-
'@changesets/types': 6.0.0
+
'@changesets/get-dependents-graph': 2.1.3
+
'@changesets/logger': 0.1.1
+
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
fs-extra: 7.0.1
-
micromatch: 4.0.5
+
micromatch: 4.0.8
'@changesets/errors@0.2.0':
dependencies:
extendable-error: 0.1.7
-
'@changesets/get-dependents-graph@2.0.0':
+
'@changesets/get-dependents-graph@2.1.3':
dependencies:
-
'@changesets/types': 6.0.0
+
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
-
chalk: 2.4.2
-
fs-extra: 7.0.1
+
picocolors: 1.1.1
semver: 7.5.4
'@changesets/get-github-info@0.6.0':
···
transitivePeerDependencies:
- encoding
-
'@changesets/get-release-plan@4.0.0':
+
'@changesets/get-release-plan@4.0.13':
dependencies:
-
'@babel/runtime': 7.23.9
-
'@changesets/assemble-release-plan': 6.0.0
-
'@changesets/config': 3.0.0
-
'@changesets/pre': 2.0.0
-
'@changesets/read': 0.6.0
-
'@changesets/types': 6.0.0
+
'@changesets/assemble-release-plan': 6.0.9
+
'@changesets/config': 3.1.1
+
'@changesets/pre': 2.0.2
+
'@changesets/read': 0.6.5
+
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
'@changesets/get-version-range-type@0.4.0': {}
-
'@changesets/git@3.0.0':
+
'@changesets/git@3.0.4':
dependencies:
-
'@babel/runtime': 7.23.9
'@changesets/errors': 0.2.0
-
'@changesets/types': 6.0.0
'@manypkg/get-packages': 1.1.3
is-subdir: 1.2.0
-
micromatch: 4.0.5
-
spawndamnit: 2.0.0
+
micromatch: 4.0.8
+
spawndamnit: 3.0.1
-
'@changesets/logger@0.1.0':
+
'@changesets/logger@0.1.1':
dependencies:
-
chalk: 2.4.2
+
picocolors: 1.1.1
-
'@changesets/parse@0.4.0':
+
'@changesets/parse@0.4.1':
dependencies:
-
'@changesets/types': 6.0.0
+
'@changesets/types': 6.1.0
js-yaml: 3.14.1
-
'@changesets/pre@2.0.0':
+
'@changesets/pre@2.0.2':
dependencies:
-
'@babel/runtime': 7.23.9
'@changesets/errors': 0.2.0
-
'@changesets/types': 6.0.0
+
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
fs-extra: 7.0.1
-
'@changesets/read@0.6.0':
+
'@changesets/read@0.6.5':
dependencies:
-
'@babel/runtime': 7.23.9
-
'@changesets/git': 3.0.0
-
'@changesets/logger': 0.1.0
-
'@changesets/parse': 0.4.0
-
'@changesets/types': 6.0.0
-
chalk: 2.4.2
+
'@changesets/git': 3.0.4
+
'@changesets/logger': 0.1.1
+
'@changesets/parse': 0.4.1
+
'@changesets/types': 6.1.0
fs-extra: 7.0.1
p-filter: 2.1.0
+
picocolors: 1.1.1
+
+
'@changesets/should-skip-package@0.1.2':
+
dependencies:
+
'@changesets/types': 6.1.0
+
'@manypkg/get-packages': 1.1.3
'@changesets/types@4.1.0': {}
-
'@changesets/types@6.0.0': {}
+
'@changesets/types@6.1.0': {}
-
'@changesets/write@0.3.0':
+
'@changesets/write@0.4.0':
dependencies:
-
'@babel/runtime': 7.23.9
-
'@changesets/types': 6.0.0
+
'@changesets/types': 6.1.0
fs-extra: 7.0.1
-
human-id: 1.0.2
+
human-id: 4.1.1
prettier: 2.8.8
'@esbuild/aix-ppc64@0.19.12':
···
'@humanwhocodes/object-schema@2.0.2': {}
+
'@inquirer/external-editor@1.0.1':
+
dependencies:
+
chardet: 2.1.0
+
iconv-lite: 0.6.3
+
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
···
dependencies:
'@sinclair/typebox': 0.27.8
+
'@jridgewell/gen-mapping@0.3.13':
+
dependencies:
+
'@jridgewell/sourcemap-codec': 1.5.5
+
'@jridgewell/trace-mapping': 0.3.30
+
'@jridgewell/gen-mapping@0.3.3':
dependencies:
'@jridgewell/set-array': 1.1.2
···
'@jridgewell/resolve-uri@3.1.1': {}
+
'@jridgewell/resolve-uri@3.1.2': {}
+
'@jridgewell/set-array@1.1.2': {}
'@jridgewell/source-map@0.3.5':
···
'@jridgewell/sourcemap-codec@1.4.15': {}
+
'@jridgewell/sourcemap-codec@1.5.5': {}
+
'@jridgewell/trace-mapping@0.3.22':
dependencies:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
+
+
'@jridgewell/trace-mapping@0.3.30':
+
dependencies:
+
'@jridgewell/resolve-uri': 3.1.2
+
'@jridgewell/sourcemap-codec': 1.5.5
'@manypkg/find-root@1.1.0':
dependencies:
···
'@babel/core': 7.23.9
'@babel/helper-module-imports': 7.22.15
'@rollup/pluginutils': 5.1.0(rollup@4.9.6)
+
optionalDependencies:
rollup: 4.9.6
'@rollup/plugin-commonjs@25.0.7(rollup@4.9.6)':
···
glob: 8.1.0
is-reference: 1.2.1
magic-string: 0.30.5
+
optionalDependencies:
rollup: 4.9.6
'@rollup/plugin-node-resolve@15.2.3(rollup@4.9.6)':
···
is-builtin-module: 3.2.1
is-module: 1.0.0
resolve: 1.22.8
+
optionalDependencies:
rollup: 4.9.6
'@rollup/plugin-terser@0.4.4(rollup@4.9.6)':
dependencies:
-
rollup: 4.9.6
serialize-javascript: 6.0.2
smob: 1.4.1
terser: 5.27.0
+
optionalDependencies:
+
rollup: 4.9.6
'@rollup/pluginutils@5.1.0(rollup@4.9.6)':
dependencies:
'@types/estree': 1.0.5
estree-walker: 2.0.2
picomatch: 2.3.1
+
optionalDependencies:
rollup: 4.9.6
'@rollup/rollup-android-arm-eabi@4.9.6':
···
'@types/json-schema@7.0.15': {}
-
'@types/minimist@1.2.5': {}
-
'@types/node@12.20.55': {}
-
-
'@types/normalize-package-data@2.4.4': {}
'@types/parse-json@4.0.0': {}
···
'@types/semver@7.5.6': {}
-
'@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0)(eslint@8.56.0)(typescript@5.3.3)':
+
'@typescript-eslint/eslint-plugin@6.20.0(@typescript-eslint/parser@6.20.0(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3)':
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 6.20.0(eslint@8.56.0)(typescript@5.3.3)
···
natural-compare: 1.4.0
semver: 7.5.4
ts-api-utils: 1.0.3(typescript@5.3.3)
+
optionalDependencies:
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
···
'@typescript-eslint/visitor-keys': 6.20.0
debug: 4.3.4
eslint: 8.56.0
+
optionalDependencies:
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
···
debug: 4.3.4
eslint: 8.56.0
ts-api-utils: 1.0.3(typescript@5.3.3)
+
optionalDependencies:
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
···
minimatch: 9.0.3
semver: 7.5.4
ts-api-utils: 1.0.3(typescript@5.3.3)
+
optionalDependencies:
typescript: 5.3.3
transitivePeerDependencies:
- supports-color
···
'@ungap/structured-clone@1.2.0': {}
-
'@vitest/coverage-v8@1.2.2(vitest@1.2.2)':
+
'@vitest/coverage-v8@1.2.2(vitest@1.2.2(terser@5.27.0))':
dependencies:
'@ampproject/remapping': 2.2.1
'@bcoe/v8-coverage': 0.2.3
···
array-union@2.1.0: {}
-
array.prototype.flat@1.3.2:
-
dependencies:
-
call-bind: 1.0.5
-
define-properties: 1.2.1
-
es-abstract: 1.22.3
-
es-shim-unscopables: 1.0.2
-
arraybuffer.prototype.slice@1.0.2:
dependencies:
array-buffer-byte-length: 1.0.0
···
get-intrinsic: 1.2.2
is-array-buffer: 3.0.2
is-shared-array-buffer: 1.0.2
-
-
arrify@1.0.1: {}
assertion-error@1.1.0: {}
···
dependencies:
fill-range: 7.0.1
-
breakword@1.0.6:
+
braces@3.0.3:
dependencies:
-
wcwidth: 1.0.1
+
fill-range: 7.1.1
-
browserslist@4.22.3:
+
browserslist@4.25.4:
dependencies:
-
caniuse-lite: 1.0.30001581
-
electron-to-chromium: 1.4.650
-
node-releases: 2.0.14
-
update-browserslist-db: 1.0.13(browserslist@4.22.3)
+
caniuse-lite: 1.0.30001737
+
electron-to-chromium: 1.5.211
+
node-releases: 2.0.19
+
update-browserslist-db: 1.1.3(browserslist@4.25.4)
buffer-from@1.1.2: {}
···
callsites@3.1.0: {}
-
camelcase-keys@6.2.2:
-
dependencies:
-
camelcase: 5.3.1
-
map-obj: 4.3.0
-
quick-lru: 4.0.1
-
-
camelcase@5.3.1: {}
-
-
caniuse-lite@1.0.30001581: {}
+
caniuse-lite@1.0.30001737: {}
chai@4.4.1:
dependencies:
···
chalk@5.3.0: {}
-
chardet@0.7.0: {}
+
chardet@2.1.0: {}
check-error@1.0.3:
dependencies:
···
slice-ansi: 5.0.0
string-width: 7.1.0
-
cliui@6.0.0:
-
dependencies:
-
string-width: 4.2.3
-
strip-ansi: 6.0.1
-
wrap-ansi: 6.2.0
-
-
cliui@8.0.1:
-
dependencies:
-
string-width: 4.2.3
-
strip-ansi: 6.0.1
-
wrap-ansi: 7.0.0
-
-
clone@1.0.4: {}
-
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
···
path-type: 4.0.0
yaml: 1.10.2
-
cross-spawn@5.1.0:
-
dependencies:
-
lru-cache: 4.1.5
-
shebang-command: 1.2.0
-
which: 1.3.1
-
cross-spawn@6.0.5:
dependencies:
nice-try: 1.0.5
···
shebang-command: 2.0.0
which: 2.0.2
-
csv-generate@3.4.3: {}
-
-
csv-parse@4.16.3: {}
-
-
csv-stringify@5.6.5: {}
-
-
csv@5.5.3:
+
cross-spawn@7.0.6:
dependencies:
-
csv-generate: 3.4.3
-
csv-parse: 4.16.3
-
csv-stringify: 5.6.5
-
stream-transform: 2.1.3
+
path-key: 3.1.1
+
shebang-command: 2.0.0
+
which: 2.0.2
dataloader@1.4.0: {}
···
dependencies:
ms: 2.1.2
-
decamelize-keys@1.1.1:
+
debug@4.4.1:
dependencies:
-
decamelize: 1.2.0
-
map-obj: 1.0.1
-
-
decamelize@1.2.0: {}
+
ms: 2.1.3
deep-eql@4.1.3:
dependencies:
···
deep-is@0.1.4: {}
deepmerge@4.3.1: {}
-
-
defaults@1.0.4:
-
dependencies:
-
clone: 1.0.4
define-data-property@1.1.1:
dependencies:
···
eastasianwidth@0.2.0: {}
-
electron-to-chromium@1.4.650: {}
+
electron-to-chromium@1.5.211: {}
emoji-regex@10.3.0: {}
···
has-tostringtag: 1.0.0
hasown: 2.0.0
-
es-shim-unscopables@1.0.2:
-
dependencies:
-
hasown: 2.0.0
-
es-to-primitive@1.2.1:
dependencies:
is-callable: 1.2.7
···
'@esbuild/win32-ia32': 0.19.12
'@esbuild/win32-x64': 0.19.12
-
escalade@3.1.1: {}
+
escalade@3.2.0: {}
escape-string-regexp@1.0.5: {}
···
dependencies:
eslint: 8.56.0
-
eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4):
+
eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@3.2.4):
dependencies:
eslint: 8.56.0
-
eslint-config-prettier: 9.1.0(eslint@8.56.0)
prettier: 3.2.4
prettier-linter-helpers: 1.0.0
synckit: 0.8.8
+
optionalDependencies:
+
eslint-config-prettier: 9.1.0(eslint@8.56.0)
eslint-plugin-tsdoc@0.2.17:
dependencies:
···
extendable-error@0.1.7: {}
-
external-editor@3.1.0:
-
dependencies:
-
chardet: 0.7.0
-
iconv-lite: 0.4.24
-
tmp: 0.0.33
-
fast-deep-equal@3.1.3: {}
fast-diff@1.3.0: {}
···
flat-cache: 3.2.0
fill-range@7.0.1:
+
dependencies:
+
to-regex-range: 5.0.1
+
+
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
···
dependencies:
semver-regex: 3.1.4
-
find-yarn-workspace-root2@1.2.16:
-
dependencies:
-
micromatch: 4.0.5
-
pkg-dir: 4.2.0
-
flat-cache@3.2.0:
dependencies:
flatted: 3.2.9
···
gensync@1.0.0-beta.2: {}
-
get-caller-file@2.0.5: {}
-
get-east-asian-width@1.2.0: {}
get-func-name@2.0.2: {}
···
inherits: 2.0.4
minimatch: 5.1.6
once: 1.4.0
-
-
globals@11.12.0: {}
globals@13.24.0:
dependencies:
···
graceful-fs@4.2.11: {}
-
grapheme-splitter@1.0.4: {}
-
graphemer@1.4.0: {}
graphql@15.8.0: {}
···
graphql@16.8.1: {}
graphql@17.0.0-alpha.3: {}
-
-
hard-rejection@2.1.0: {}
has-bigints@1.0.2: {}
···
html-escaper@2.0.2: {}
-
human-id@1.0.2: {}
+
human-id@4.1.1: {}
human-signals@5.0.0: {}
···
slash: 3.0.0
which-pm-runs: 1.1.0
-
iconv-lite@0.4.24:
+
iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
···
imurmurhash@0.1.4: {}
-
indent-string@4.0.0: {}
-
inflight@1.0.6:
dependencies:
once: 1.4.0
···
is-number@7.0.0: {}
is-path-inside@3.0.3: {}
-
-
is-plain-obj@1.1.0: {}
is-plain-object@5.0.0: {}
···
dependencies:
argparse: 2.0.1
-
jsesc@2.5.2: {}
+
jsesc@3.1.0: {}
json-buffer@3.0.1: {}
···
dependencies:
json-buffer: 3.0.1
-
kind-of@6.0.3: {}
-
-
kleur@4.1.5: {}
-
kolorist@1.8.0: {}
levn@0.4.1:
···
pify: 3.0.0
strip-bom: 3.0.0
-
load-yaml-file@0.2.0:
-
dependencies:
-
graceful-fs: 4.2.11
-
js-yaml: 3.14.1
-
pify: 4.0.1
-
strip-bom: 3.0.0
-
local-pkg@0.5.0:
dependencies:
mlly: 1.5.0
···
lru-cache@10.2.0: {}
-
lru-cache@4.1.5:
-
dependencies:
-
pseudomap: 1.0.2
-
yallist: 2.1.2
-
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
···
dependencies:
semver: 7.5.4
-
map-obj@1.0.1: {}
-
-
map-obj@4.3.0: {}
-
memorystream@0.3.1: {}
-
meow@6.1.1:
-
dependencies:
-
'@types/minimist': 1.2.5
-
camelcase-keys: 6.2.2
-
decamelize-keys: 1.1.1
-
hard-rejection: 2.1.0
-
minimist-options: 4.1.0
-
normalize-package-data: 2.5.0
-
read-pkg-up: 7.0.1
-
redent: 3.0.0
-
trim-newlines: 3.0.1
-
type-fest: 0.13.1
-
yargs-parser: 18.1.3
-
merge-stream@2.0.0: {}
merge2@1.4.1: {}
···
braces: 3.0.2
picomatch: 2.3.1
+
micromatch@4.0.8:
+
dependencies:
+
braces: 3.0.3
+
picomatch: 2.3.1
+
mimic-fn@2.1.0: {}
mimic-fn@4.0.0: {}
-
-
min-indent@1.0.1: {}
minimatch@3.1.2:
dependencies:
···
dependencies:
brace-expansion: 2.0.1
-
minimist-options@4.1.0:
-
dependencies:
-
arrify: 1.0.1
-
is-plain-obj: 1.1.0
-
kind-of: 6.0.3
-
minipass@7.0.4: {}
-
-
mixme@0.5.10: {}
mlly@1.5.0:
dependencies:
···
pkg-types: 1.0.3
ufo: 1.3.2
+
mri@1.2.0: {}
+
ms@2.1.2: {}
+
+
ms@2.1.3: {}
nanoid@3.3.7: {}
···
dependencies:
whatwg-url: 5.0.0
-
node-releases@2.0.14: {}
+
node-releases@2.0.19: {}
node-stream-zip@1.15.0: {}
···
prelude-ls: 1.2.1
type-check: 0.4.0
-
os-tmpdir@1.0.2: {}
-
outdent@0.5.0: {}
p-filter@2.1.0:
···
p-try@2.2.0: {}
+
package-manager-detector@0.2.11:
+
dependencies:
+
quansync: 0.2.11
+
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
···
picocolors@1.0.0: {}
+
picocolors@1.1.1: {}
+
picomatch@2.3.1: {}
pidtree@0.3.1: {}
···
pify@3.0.0: {}
pify@4.0.1: {}
-
-
pkg-dir@4.2.0:
-
dependencies:
-
find-up: 4.1.0
pkg-dir@5.0.0:
dependencies:
···
picocolors: 1.0.0
source-map-js: 1.0.2
-
preferred-pm@3.1.2:
-
dependencies:
-
find-up: 5.0.0
-
find-yarn-workspace-root2: 1.2.16
-
path-exists: 4.0.0
-
which-pm: 2.0.0
-
prelude-ls@1.2.1: {}
prettier-linter-helpers@1.0.0:
···
ansi-styles: 5.2.0
react-is: 18.2.0
-
pseudomap@1.0.2: {}
-
punycode@2.3.0: {}
+
+
quansync@0.2.11: {}
queue-microtask@1.2.3: {}
-
quick-lru@4.0.1: {}
-
randombytes@2.1.0:
dependencies:
safe-buffer: 5.2.1
react-is@18.2.0: {}
-
read-pkg-up@7.0.1:
-
dependencies:
-
find-up: 4.1.0
-
read-pkg: 5.2.0
-
type-fest: 0.8.1
-
read-pkg@3.0.0:
dependencies:
load-json-file: 4.0.0
normalize-package-data: 2.5.0
path-type: 3.0.0
-
read-pkg@5.2.0:
-
dependencies:
-
'@types/normalize-package-data': 2.4.4
-
normalize-package-data: 2.5.0
-
parse-json: 5.2.0
-
type-fest: 0.6.0
-
read-yaml-file@1.1.0:
dependencies:
graceful-fs: 4.2.11
···
pify: 4.0.1
strip-bom: 3.0.0
-
redent@3.0.0:
-
dependencies:
-
indent-string: 4.0.0
-
strip-indent: 3.0.0
-
regenerator-runtime@0.14.1: {}
regexp.prototype.flags@1.5.1:
···
call-bind: 1.0.5
define-properties: 1.2.1
set-function-name: 2.0.1
-
-
require-directory@2.1.1: {}
-
-
require-main-filename@2.0.0: {}
resolve-from@4.0.0: {}
···
dependencies:
randombytes: 2.1.0
-
set-blocking@2.0.0: {}
-
set-function-length@1.2.0:
dependencies:
define-data-property: 1.1.1
···
ansi-styles: 6.2.1
is-fullwidth-code-point: 5.0.0
-
smartwrap@2.0.2:
-
dependencies:
-
array.prototype.flat: 1.3.2
-
breakword: 1.0.6
-
grapheme-splitter: 1.0.4
-
strip-ansi: 6.0.1
-
wcwidth: 1.0.1
-
yargs: 15.4.1
-
smob@1.4.1: {}
source-map-js@1.0.2: {}
···
source-map@0.6.1: {}
-
spawndamnit@2.0.0:
+
spawndamnit@3.0.1:
dependencies:
-
cross-spawn: 5.1.0
-
signal-exit: 3.0.7
+
cross-spawn: 7.0.6
+
signal-exit: 4.1.0
spdx-correct@3.2.0:
dependencies:
···
stackback@0.0.2: {}
std-env@3.7.0: {}
-
-
stream-transform@2.1.3:
-
dependencies:
-
mixme: 0.5.10
string-argv@0.3.2: {}
···
strip-final-newline@3.0.0: {}
-
strip-indent@3.0.0:
-
dependencies:
-
min-indent: 1.0.1
-
strip-json-comments@3.1.1: {}
strip-literal@1.3.0:
···
tinyspy@2.2.0: {}
-
tmp@0.0.33:
-
dependencies:
-
os-tmpdir: 1.0.2
-
to-fast-properties@2.0.0: {}
to-regex-range@5.0.1:
···
tr46@0.0.3: {}
-
trim-newlines@3.0.1: {}
-
ts-api-utils@1.0.3(typescript@5.3.3):
dependencies:
typescript: 5.3.3
tslib@2.6.2: {}
-
tty-table@4.2.3:
-
dependencies:
-
chalk: 4.1.2
-
csv: 5.5.3
-
kleur: 4.1.5
-
smartwrap: 2.0.2
-
strip-ansi: 6.0.1
-
wcwidth: 1.0.1
-
yargs: 17.7.2
-
tunnel@0.0.6: {}
type-check@0.4.0:
···
type-detect@4.0.8: {}
-
type-fest@0.13.1: {}
-
type-fest@0.20.2: {}
-
-
type-fest@0.6.0: {}
-
-
type-fest@0.8.1: {}
type-fest@3.13.1: {}
···
universalify@0.1.2: {}
-
update-browserslist-db@1.0.13(browserslist@4.22.3):
+
update-browserslist-db@1.1.3(browserslist@4.25.4):
dependencies:
-
browserslist: 4.22.3
-
escalade: 3.1.1
-
picocolors: 1.0.0
+
browserslist: 4.25.4
+
escalade: 3.2.0
+
picocolors: 1.1.1
uri-js@4.4.1:
dependencies:
punycode: 2.3.0
-
-
uuid@8.3.2: {}
v8-to-istanbul@9.2.0:
dependencies:
···
esbuild: 0.19.12
postcss: 8.4.33
rollup: 4.9.6
-
terser: 5.27.0
optionalDependencies:
fsevents: 2.3.3
+
terser: 5.27.0
vitest@1.2.2(terser@5.27.0):
dependencies:
···
- supports-color
- terser
-
wcwidth@1.0.1:
-
dependencies:
-
defaults: 1.0.4
-
webidl-conversions@3.0.1: {}
whatwg-url@5.0.0:
···
is-string: 1.0.7
is-symbol: 1.0.4
-
which-module@2.0.1: {}
-
which-pm-runs@1.1.0: {}
-
which-pm@2.0.0:
-
dependencies:
-
load-yaml-file: 0.2.0
-
path-exists: 4.0.0
-
which-typed-array@1.1.13:
dependencies:
available-typed-arrays: 1.0.5
···
siginfo: 2.0.0
stackback: 0.0.2
-
wrap-ansi@6.2.0:
-
dependencies:
-
ansi-styles: 4.3.0
-
string-width: 4.2.3
-
strip-ansi: 6.0.1
-
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
···
wrappy@1.0.2: {}
-
y18n@4.0.3: {}
-
-
y18n@5.0.8: {}
-
-
yallist@2.1.2: {}
-
yallist@3.1.1: {}
yallist@4.0.0: {}
···
yaml@1.10.2: {}
yaml@2.3.4: {}
-
-
yargs-parser@18.1.3:
-
dependencies:
-
camelcase: 5.3.1
-
decamelize: 1.2.0
-
-
yargs-parser@21.1.1: {}
-
-
yargs@15.4.1:
-
dependencies:
-
cliui: 6.0.0
-
decamelize: 1.2.0
-
find-up: 4.1.0
-
get-caller-file: 2.0.5
-
require-directory: 2.1.1
-
require-main-filename: 2.0.0
-
set-blocking: 2.0.0
-
string-width: 4.2.3
-
which-module: 2.0.1
-
y18n: 4.0.3
-
yargs-parser: 18.1.3
-
-
yargs@17.7.2:
-
dependencies:
-
cliui: 8.0.1
-
escalade: 3.1.1
-
get-caller-file: 2.0.5
-
require-directory: 2.1.1
-
string-width: 4.2.3
-
y18n: 5.0.8
-
yargs-parser: 21.1.1
yocto-queue@0.1.0: {}
-4
scripts/eslint-preset.js
···
message: 'Nullish coalescing assignment (??=) is outside of specified browser support',
},
{
-
selector: 'SequenceExpression',
-
message: 'Sequence expressions are to be avoided since they can be confusing',
-
},
-
{
selector: ':not(ForStatement) > VariableDeclaration[declarations.length>1]',
message: 'Only one variable declarator per variable declaration is preferred',
},
+1 -4
scripts/rollup.config.mjs
···
dir: './',
exports: 'auto',
sourcemap: true,
-
sourcemapExcludeSources: false,
+
sourcemapExcludeSources: true,
hoistTransitiveImports: false,
indent: false,
freeze: false,
···
booleans_as_integers: false,
keep_fnames: true,
keep_fargs: true,
-
if_return: false,
ie8: false,
-
sequences: false,
-
loops: false,
conditionals: false,
join_vars: false,
},
+278
src/__tests__/description.test.ts
···
+
import { describe, it, expect } from 'vitest';
+
import { parse } from '../parser';
+
import { print } from '../printer';
+
import type {
+
OperationDefinitionNode,
+
VariableDefinitionNode,
+
FragmentDefinitionNode,
+
} from '../ast';
+
+
describe('GraphQL descriptions', () => {
+
describe('OperationDefinition descriptions', () => {
+
it('parses operation with description', () => {
+
const source = `
+
"""
+
Request the current status of a time machine and its operator.
+
"""
+
query GetTimeMachineStatus {
+
timeMachine {
+
id
+
status
+
}
+
}
+
`;
+
+
const doc = parse(source, { noLocation: true });
+
const operation = doc.definitions[0] as OperationDefinitionNode;
+
+
expect(operation.description).toBeDefined();
+
expect(operation.description?.value).toBe(
+
'Request the current status of a time machine and its operator.'
+
);
+
expect(operation.description?.block).toBe(true);
+
});
+
+
it('parses operation with single-line description', () => {
+
const source = `
+
"Simple query description"
+
query SimpleQuery {
+
field
+
}
+
`;
+
+
const doc = parse(source, { noLocation: true });
+
const operation = doc.definitions[0] as OperationDefinitionNode;
+
+
expect(operation.description).toBeDefined();
+
expect(operation.description?.value).toBe('Simple query description');
+
expect(operation.description?.block).toBe(false);
+
});
+
+
it('does not allow description on anonymous operations', () => {
+
const source = `
+
"This should fail"
+
{
+
field
+
}
+
`;
+
+
expect(() => parse(source)).toThrow();
+
});
+
+
it('parses mutation with description', () => {
+
const source = `
+
"""
+
Create a new time machine entry.
+
"""
+
mutation CreateTimeMachine($input: TimeMachineInput!) {
+
createTimeMachine(input: $input) {
+
id
+
}
+
}
+
`;
+
+
const doc = parse(source, { noLocation: true });
+
const operation = doc.definitions[0] as OperationDefinitionNode;
+
+
expect(operation.description).toBeDefined();
+
expect(operation.description?.value).toBe('Create a new time machine entry.');
+
});
+
});
+
+
describe('VariableDefinition descriptions', () => {
+
it('parses variable with description', () => {
+
const source = `
+
query GetTimeMachineStatus(
+
"The unique serial number of the time machine to inspect."
+
$machineId: ID!
+
+
"""
+
The year to check the status for.
+
**Warning:** certain years may trigger an anomaly in the space-time continuum.
+
"""
+
$year: Int
+
) {
+
timeMachine(id: $machineId) {
+
status(year: $year)
+
}
+
}
+
`;
+
+
const doc = parse(source, { noLocation: true });
+
const operation = doc.definitions[0] as OperationDefinitionNode;
+
const variables = operation.variableDefinitions as VariableDefinitionNode[];
+
+
expect(variables[0].description).toBeDefined();
+
expect(variables[0].description?.value).toBe(
+
'The unique serial number of the time machine to inspect.'
+
);
+
expect(variables[0].description?.block).toBe(false);
+
+
expect(variables[1].description).toBeDefined();
+
expect(variables[1].description?.value).toBe(
+
'The year to check the status for.\n**Warning:** certain years may trigger an anomaly in the space-time continuum.'
+
);
+
expect(variables[1].description?.block).toBe(true);
+
});
+
+
it('parses mixed variables with and without descriptions', () => {
+
const source = `
+
query Mixed(
+
"Described variable"
+
$described: String
+
$undescribed: Int
+
) {
+
field
+
}
+
`;
+
+
const doc = parse(source, { noLocation: true });
+
const operation = doc.definitions[0] as OperationDefinitionNode;
+
const variables = operation.variableDefinitions as VariableDefinitionNode[];
+
+
expect(variables[0].description).toBeDefined();
+
expect(variables[0].description?.value).toBe('Described variable');
+
expect(variables[1].description).toBeUndefined();
+
});
+
});
+
+
describe('FragmentDefinition descriptions', () => {
+
it('parses fragment with description', () => {
+
const source = `
+
"Time machine details."
+
fragment TimeMachineDetails on TimeMachine {
+
id
+
model
+
lastMaintenance
+
}
+
`;
+
+
const doc = parse(source, { noLocation: true });
+
const fragment = doc.definitions[0] as FragmentDefinitionNode;
+
+
expect(fragment.description).toBeDefined();
+
expect(fragment.description?.value).toBe('Time machine details.');
+
expect(fragment.description?.block).toBe(false);
+
});
+
+
it('parses fragment with block description', () => {
+
const source = `
+
"""
+
Comprehensive time machine information
+
including maintenance history and operational status.
+
"""
+
fragment FullTimeMachineInfo on TimeMachine {
+
id
+
model
+
lastMaintenance
+
operationalStatus
+
}
+
`;
+
+
const doc = parse(source, { noLocation: true });
+
const fragment = doc.definitions[0] as FragmentDefinitionNode;
+
+
expect(fragment.description).toBeDefined();
+
expect(fragment.description?.value).toBe(
+
'Comprehensive time machine information\nincluding maintenance history and operational status.'
+
);
+
expect(fragment.description?.block).toBe(true);
+
});
+
});
+
+
describe('print with descriptions', () => {
+
it('prints operation description correctly', () => {
+
const source = `"""
+
Request the current status of a time machine and its operator.
+
"""
+
query GetTimeMachineStatus {
+
timeMachine {
+
id
+
}
+
}`;
+
+
const doc = parse(source, { noLocation: true });
+
const printed = print(doc);
+
+
expect(printed).toContain('"""');
+
expect(printed).toContain('Request the current status of a time machine and its operator.');
+
});
+
+
it('prints variable descriptions correctly', () => {
+
const source = `query GetStatus(
+
"Machine ID"
+
$id: ID!
+
) {
+
field
+
}`;
+
+
const doc = parse(source, { noLocation: true });
+
const printed = print(doc);
+
+
expect(printed).toContain('"Machine ID"');
+
});
+
+
it('prints fragment description correctly', () => {
+
const source = `"Details fragment"
+
fragment Details on Type {
+
field
+
}`;
+
+
const doc = parse(source, { noLocation: true });
+
const printed = print(doc);
+
+
expect(printed).toContain('"Details fragment"');
+
});
+
});
+
+
describe('roundtrip parsing and printing', () => {
+
it('maintains descriptions through parse and print cycle', () => {
+
const source = `"""
+
Request the current status of a time machine and its operator.
+
"""
+
query GetTimeMachineStatus(
+
"The unique serial number of the time machine to inspect."
+
$machineId: ID!
+
+
"""
+
The year to check the status for.
+
**Warning:** certain years may trigger an anomaly in the space-time continuum.
+
"""
+
$year: Int
+
) {
+
timeMachine(id: $machineId) {
+
...TimeMachineDetails
+
operator {
+
name
+
licenseLevel
+
}
+
status(year: $year)
+
}
+
}
+
+
"Time machine details."
+
fragment TimeMachineDetails on TimeMachine {
+
id
+
model
+
lastMaintenance
+
}`;
+
+
const doc = parse(source, { noLocation: true });
+
const printed = print(doc);
+
const reparsed = parse(printed, { noLocation: true });
+
+
const operation = doc.definitions[0] as OperationDefinitionNode;
+
const reparsedOperation = reparsed.definitions[0] as OperationDefinitionNode;
+
+
// The printed/reparsed cycle may have slightly different formatting but same content
+
expect(reparsedOperation.description?.value?.trim()).toBe(
+
operation.description?.value?.trim()
+
);
+
+
const fragment = doc.definitions[1] as FragmentDefinitionNode;
+
const reparsedFragment = reparsed.definitions[1] as FragmentDefinitionNode;
+
+
expect(reparsedFragment.description?.value).toBe(fragment.description?.value);
+
});
+
});
+
});
+38
src/__tests__/helpers.test.ts
···
+
import { describe, it, expect } from 'vitest';
+
+
import { parse } from '../parser';
+
import { isSelectionNode, Source } from '../helpers';
+
import type { OperationDefinitionNode } from '../ast';
+
+
describe('helpers', () => {
+
it('Correctly indicates a selection-node', () => {
+
const parsed = parse(`
+
query {
+
field
+
... on Query { field }
+
...Frag
+
}
+
+
fragment Frag on Query { field }
+
`);
+
+
const operation = parsed.definitions[0] as OperationDefinitionNode;
+
expect(isSelectionNode(operation.selectionSet.selections[0])).toEqual(true);
+
expect(isSelectionNode(operation.selectionSet.selections[1])).toEqual(true);
+
expect(isSelectionNode(operation.selectionSet.selections[2])).toEqual(true);
+
});
+
+
it('Source is a function', () => {
+
expect(typeof Source).toEqual('function');
+
expect(Source('test')).toEqual({
+
body: 'test',
+
name: undefined,
+
locationOffset: { line: 1, column: 1 },
+
});
+
expect(Source('test', 'test', { line: 2, column: 1 })).toEqual({
+
body: 'test',
+
name: 'test',
+
locationOffset: { line: 2, column: 1 },
+
});
+
});
+
});
+46 -1
src/__tests__/parser.test.ts
···
describe('parse', () => {
it('parses the kitchen sink document like graphql.js does', () => {
-
const doc = parse(kitchenSinkDocument);
+
const doc = parse(kitchenSinkDocument, { noLocation: true });
expect(doc).toMatchSnapshot();
+
});
+
+
it('parses unexpected EOF', () => {
+
expect(() => parse('#')).toThrow();
+
expect(() => parse(' ')).toThrow();
+
expect(() => parse('q($')).toThrow();
+
expect(() => parse('{x{')).toThrow();
+
expect(() => parse('#\n')).toThrow();
});
it('parses basic documents', () => {
···
expect(() => {
return parse('{ ...on }');
}).toThrow();
+
// But does accept "oN"
+
expect(parse('{ ...oN }')).toHaveProperty(
+
'definitions.0.selectionSet.selections.0.name.value',
+
'oN'
+
);
});
it('parses directives on fragment spread', () => {
···
}).not.toThrow();
});
+
it('throws on invalid operations', () => {
+
expect(() => {
+
return parse(`
+
invalid {
+
field
+
}
+
`);
+
}).toThrow();
+
});
+
it('parses named mutation operations', () => {
expect(() => {
return parse(`
···
expect(() => parse('{ ... on Test }')).toThrow();
expect(() => parse('{ ... {} }')).toThrow();
expect(() => parse('{ ... }')).toThrow();
+
expect(() => parse('{ . }')).toThrow();
expect(parse('{ ... on Test { field } }')).toHaveProperty(
'definitions.0.selectionSet.selections.0',
···
expect(parseValue({ body: 'null' })).toEqual({ kind: Kind.NULL });
});
+
it('parses scalars', () => {
+
expect(parseValue('null')).toEqual({ kind: Kind.NULL });
+
expect(parseValue('true')).toEqual({ kind: Kind.BOOLEAN, value: true });
+
expect(parseValue('false')).toEqual({ kind: Kind.BOOLEAN, value: false });
+
});
+
+
it('parses scalars without optimistic failures', () => {
+
// for *n*ull, *f*alse, *t*rue
+
expect(parseValue('n')).toEqual({ kind: Kind.ENUM, value: 'n' });
+
expect(parseValue('f')).toEqual({ kind: Kind.ENUM, value: 'f' });
+
expect(parseValue('t')).toEqual({ kind: Kind.ENUM, value: 't' });
+
});
+
it('parses list values', () => {
const result = parseValue('[123 "abc"]');
expect(result).toEqual({
···
kind: Kind.FLOAT,
value: '-1.2e+3',
});
+
+
expect(() => parseValue('12e')).toThrow();
});
it('parses strings', () => {
···
value: ' " ',
block: false,
});
+
+
expect(() => parseValue('"')).toThrow();
+
expect(() => parseValue('"\n')).toThrow();
+
expect(() => parseValue('"\r')).toThrow();
});
it('parses objects', () => {
···
value: ' """ ',
block: true,
});
+
+
expect(() => parseValue('"""')).toThrow();
});
it('allows variables', () => {
+37
src/__tests__/printer.test.ts
···
import { describe, it, expect } from 'vitest';
import * as graphql16 from 'graphql16';
+
import type { DocumentNode } from '../ast';
import { parse } from '../parser';
import { print, printString, printBlockString } from '../printer';
import kitchenSinkAST from './fixtures/kitchen_sink.json';
+
import { Kind, OperationTypeNode } from 'src/kind';
function dedentString(string: string) {
const trimmedStr = string
···
dateTime
}
}
+
`
+
);
+
});
+
+
it('Handles empty array selections', () => {
+
const document: DocumentNode = {
+
kind: Kind.DOCUMENT,
+
definitions: [
+
{
+
kind: Kind.OPERATION_DEFINITION,
+
operation: OperationTypeNode.QUERY,
+
name: undefined,
+
selectionSet: {
+
kind: Kind.SELECTION_SET,
+
selections: [
+
{
+
kind: Kind.FIELD,
+
name: { kind: Kind.NAME, value: 'id' },
+
alias: undefined,
+
arguments: [],
+
directives: [],
+
selectionSet: { kind: Kind.SELECTION_SET, selections: [] },
+
},
+
],
+
},
+
variableDefinitions: [],
+
},
+
],
+
};
+
+
expect(print(document)).toBe(
+
dedent`
+
{
+
id
+
}
`
);
});
+6 -3
src/ast.ts
···
>;
export type OperationDefinitionNode = Or<
-
GraphQL.OperationDefinitionNode,
+
GraphQL.OperationDefinitionNode & { description?: StringValueNode },
{
readonly kind: Kind.OPERATION_DEFINITION;
readonly operation: OperationTypeNode;
readonly name?: NameNode;
+
readonly description?: StringValueNode;
readonly variableDefinitions?: ReadonlyArray<VariableDefinitionNode>;
readonly directives?: ReadonlyArray<DirectiveNode>;
readonly selectionSet: SelectionSetNode;
···
>;
export type VariableDefinitionNode = Or<
-
GraphQL.VariableDefinitionNode,
+
GraphQL.VariableDefinitionNode & { description?: StringValueNode },
{
readonly kind: Kind.VARIABLE_DEFINITION;
readonly variable: VariableNode;
readonly type: TypeNode;
readonly defaultValue?: ConstValueNode;
+
readonly description?: StringValueNode;
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
readonly loc?: Location;
}
···
>;
export type FragmentDefinitionNode = Or<
-
GraphQL.FragmentDefinitionNode,
+
GraphQL.FragmentDefinitionNode & { description?: StringValueNode },
{
readonly kind: Kind.FRAGMENT_DEFINITION;
readonly name: NameNode;
+
readonly description?: StringValueNode;
readonly typeCondition: NamedTypeNode;
readonly directives?: ReadonlyArray<DirectiveNode>;
readonly selectionSet: SelectionSetNode;
+14
src/helpers.ts
···
+
import type { Location, Source as _Source } from './types';
+
import type { ASTNode, SelectionNode } from './ast';
+
+
export function isSelectionNode(node: ASTNode): node is SelectionNode {
+
return node.kind === 'Field' || node.kind === 'FragmentSpread' || node.kind === 'InlineFragment';
+
}
+
+
export function Source(body: string, name?: string, locationOffset?: Location): _Source {
+
return {
+
body,
+
name,
+
locationOffset: locationOffset || { line: 1, column: 1 },
+
};
+
}
+2 -1
src/index.ts
···
-
export type { Source, Location } from './types';
+
export type { Source, Location, Extensions } from './types';
export * from './ast';
export * from './schemaAst';
···
export * from './visitor';
export * from './printer';
export * from './values';
+
export * from './helpers';
+333 -276
src/parser.ts
···
*/
import type { Kind, OperationTypeNode } from './kind';
import { GraphQLError } from './error';
-
import type { Source } from './types';
+
import type { Location, Source } from './types';
import type * as ast from './ast';
let input: string;
···
char === 65279 /*'\ufeff'*/;
char = input.charCodeAt(idx++) | 0
) {
-
if (char === 35 /*'#'*/) while ((char = input.charCodeAt(idx++)) !== 10 && char !== 13);
+
if (char === 35 /*'#'*/)
+
while ((char = input.charCodeAt(idx++) | 0) && char !== 10 && char !== 13);
}
idx--;
}
-
const nameRe = /[_A-Za-z]\w*/y;
+
function name(): string {
+
const start = idx;
+
for (
+
let char = input.charCodeAt(idx++) | 0;
+
(char >= 48 /*'0'*/ && char <= 57) /*'9'*/ ||
+
(char >= 65 /*'A'*/ && char <= 90) /*'Z'*/ ||
+
char === 95 /*'_'*/ ||
+
(char >= 97 /*'a'*/ && char <= 122) /*'z'*/;
+
char = input.charCodeAt(idx++) | 0
+
);
+
if (start === idx - 1) throw error('Name');
+
const value = input.slice(start, --idx);
+
ignored();
+
return value;
+
}
-
// NOTE: This should be compressed by our build step
-
// This merges all possible value parsing into one regular expression
-
const valueRe = new RegExp(
-
'(?:' +
-
// `null`, `true`, and `false` literals (BooleanValue & NullValue)
-
'(null|true|false)|' +
-
// Variables starting with `$` then having a name (VariableNode)
-
'\\$(' +
-
nameRe.source +
-
')|' +
-
// Numbers, starting with int then optionally following with a float part (IntValue and FloatValue)
-
'(-?\\d+)((?:\\.\\d+)?[eE][+-]?\\d+|\\.\\d+)?|' +
-
// Block strings starting with `"""` until the next unescaped `"""` (StringValue)
-
'("""(?:"""|(?:[\\s\\S]*?[^\\\\])"""))|' +
-
// Strings starting with `"` must be on one line (StringValue)
-
'("(?:"|[^\\r\\n]*?[^\\\\]"))|' + // string
-
// Enums are simply names except for our literals (EnumValue)
-
'(' +
-
nameRe.source +
-
'))',
-
'y'
-
);
-
-
// NOTE: Each of the groups above end up in the RegExpExecArray at the specified indices (starting with 1)
-
const enum ValueGroup {
-
Const = 1,
-
Var,
-
Int,
-
Float,
-
BlockString,
-
String,
-
Enum,
+
function nameNode(): ast.NameNode {
+
return {
+
kind: 'Name' as Kind.NAME,
+
value: name(),
+
};
}
-
type ValueExec = RegExpExecArray & {
-
[Prop in ValueGroup]: string | undefined;
-
};
-
-
const complexStringRe = /\\/;
+
const restBlockStringRe = /(?:"""|(?:[\s\S]*?[^\\])""")/y;
+
const floatPartRe = /(?:(?:\.\d+)?[eE][+-]?\d+|\.\d+)/y;
function value(constant: true): ast.ConstValueNode;
function value(constant: boolean): ast.ValueNode;
function value(constant: boolean): ast.ValueNode {
let match: string | undefined;
-
let exec: ValueExec | null;
-
valueRe.lastIndex = idx;
-
if (input.charCodeAt(idx) === 91 /*'['*/) {
-
// Lists are checked ahead of time with `[` chars
-
idx++;
-
ignored();
-
const values: ast.ValueNode[] = [];
-
while (input.charCodeAt(idx) !== 93 /*']'*/) values.push(value(constant));
-
idx++;
-
ignored();
-
return {
-
kind: 'ListValue' as Kind.LIST,
-
values,
-
};
-
} else if (input.charCodeAt(idx) === 123 /*'{'*/) {
-
// Objects are checked ahead of time with `{` chars
-
idx++;
-
ignored();
-
const fields: ast.ObjectFieldNode[] = [];
-
while (input.charCodeAt(idx) !== 125 /*'}'*/) {
-
if ((match = advance(nameRe)) == null) throw error('ObjectField');
+
switch (input.charCodeAt(idx)) {
+
case 91: // '['
+
idx++;
+
ignored();
+
const values: ast.ValueNode[] = [];
+
while (input.charCodeAt(idx) !== 93 /*']'*/) values.push(value(constant));
+
idx++;
+
ignored();
+
return {
+
kind: 'ListValue' as Kind.LIST,
+
values,
+
};
+
+
case 123: // '{'
+
idx++;
ignored();
-
if (input.charCodeAt(idx++) !== 58 /*':'*/) throw error('ObjectField');
+
const fields: ast.ObjectFieldNode[] = [];
+
while (input.charCodeAt(idx) !== 125 /*'}'*/) {
+
const name = nameNode();
+
if (input.charCodeAt(idx++) !== 58 /*':'*/) throw error('ObjectField');
+
ignored();
+
fields.push({
+
kind: 'ObjectField' as Kind.OBJECT_FIELD,
+
name,
+
value: value(constant),
+
});
+
}
+
idx++;
ignored();
-
fields.push({
-
kind: 'ObjectField' as Kind.OBJECT_FIELD,
-
name: { kind: 'Name' as Kind.NAME, value: match },
-
value: value(constant),
-
});
-
}
-
idx++;
-
ignored();
-
return {
-
kind: 'ObjectValue' as Kind.OBJECT,
-
fields,
-
};
-
} else if ((exec = valueRe.exec(input) as ValueExec) != null) {
-
// Starting from here, the merged `valueRe` is used
-
idx = valueRe.lastIndex;
-
ignored();
-
if ((match = exec[ValueGroup.Const]) != null) {
-
return match === 'null'
-
? { kind: 'NullValue' as Kind.NULL }
-
: {
-
kind: 'BooleanValue' as Kind.BOOLEAN,
-
value: match === 'true',
-
};
-
} else if ((match = exec[ValueGroup.Var]) != null) {
-
if (constant) {
-
throw error('Variable');
+
return {
+
kind: 'ObjectValue' as Kind.OBJECT,
+
fields,
+
};
+
+
case 36: // '$'
+
if (constant) throw error('Variable');
+
idx++;
+
return {
+
kind: 'Variable' as Kind.VARIABLE,
+
name: nameNode(),
+
};
+
+
case 34: // '"'
+
if (input.charCodeAt(idx + 1) === 34 && input.charCodeAt(idx + 2) === 34) {
+
idx += 3;
+
if ((match = advance(restBlockStringRe)) == null) throw error('StringValue');
+
ignored();
+
return {
+
kind: 'StringValue' as Kind.STRING,
+
value: blockString(match.slice(0, -3)),
+
block: true,
+
};
} else {
+
const start = idx;
+
idx++;
+
let char: number;
+
let isComplex = false;
+
for (
+
char = input.charCodeAt(idx++) | 0;
+
(char === 92 /*'\\'*/ && (idx++, (isComplex = true))) ||
+
(char !== 10 /*'\n'*/ && char !== 13 /*'\r'*/ && char !== 34 /*'"'*/ && char);
+
char = input.charCodeAt(idx++) | 0
+
);
+
if (char !== 34) throw error('StringValue');
+
match = input.slice(start, idx);
+
ignored();
return {
-
kind: 'Variable' as Kind.VARIABLE,
-
name: {
-
kind: 'Name' as Kind.NAME,
-
value: match,
-
},
+
kind: 'StringValue' as Kind.STRING,
+
value: isComplex ? (JSON.parse(match) as string) : match.slice(1, -1),
+
block: false,
};
}
-
} else if ((match = exec[ValueGroup.Int]) != null) {
-
let floatPart: string | undefined;
-
if ((floatPart = exec[ValueGroup.Float]) != null) {
+
+
case 45: // '-'
+
case 48: // '0'
+
case 49: // '1'
+
case 50: // '2'
+
case 51: // '3'
+
case 52: // '4'
+
case 53: // '5'
+
case 54: // '6'
+
case 55: // '7'
+
case 56: // '8'
+
case 57: // '9'
+
const start = idx++;
+
let char: number;
+
while ((char = input.charCodeAt(idx++) | 0) >= 48 /*'0'*/ && char <= 57 /*'9'*/);
+
const intPart = input.slice(start, --idx);
+
if (
+
(char = input.charCodeAt(idx)) === 46 /*'.'*/ ||
+
char === 69 /*'E'*/ ||
+
char === 101 /*'e'*/
+
) {
+
if ((match = advance(floatPartRe)) == null) throw error('FloatValue');
+
ignored();
return {
kind: 'FloatValue' as Kind.FLOAT,
-
value: match + floatPart,
+
value: intPart + match,
};
} else {
+
ignored();
return {
kind: 'IntValue' as Kind.INT,
-
value: match,
+
value: intPart,
};
}
-
} else if ((match = exec[ValueGroup.BlockString]) != null) {
-
return {
-
kind: 'StringValue' as Kind.STRING,
-
value: blockString(match.slice(3, -3)),
-
block: true,
-
};
-
} else if ((match = exec[ValueGroup.String]) != null) {
-
return {
-
kind: 'StringValue' as Kind.STRING,
-
// When strings don't contain escape codes, a simple slice will be enough, otherwise
-
// `JSON.parse` matches GraphQL's string parsing perfectly
-
value: complexStringRe.test(match) ? (JSON.parse(match) as string) : match.slice(1, -1),
-
block: false,
-
};
-
} else if ((match = exec[ValueGroup.Enum]) != null) {
-
return {
-
kind: 'EnumValue' as Kind.ENUM,
-
value: match,
-
};
-
}
+
+
case 110: // 'n'
+
if (
+
input.charCodeAt(idx + 1) === 117 &&
+
input.charCodeAt(idx + 2) === 108 &&
+
input.charCodeAt(idx + 3) === 108
+
) {
+
idx += 4;
+
ignored();
+
return { kind: 'NullValue' as Kind.NULL };
+
} else break;
+
+
case 116: // 't'
+
if (
+
input.charCodeAt(idx + 1) === 114 &&
+
input.charCodeAt(idx + 2) === 117 &&
+
input.charCodeAt(idx + 3) === 101
+
) {
+
idx += 4;
+
ignored();
+
return { kind: 'BooleanValue' as Kind.BOOLEAN, value: true };
+
} else break;
+
+
case 102: // 'f'
+
if (
+
input.charCodeAt(idx + 1) === 97 &&
+
input.charCodeAt(idx + 2) === 108 &&
+
input.charCodeAt(idx + 3) === 115 &&
+
input.charCodeAt(idx + 4) === 101
+
) {
+
idx += 5;
+
ignored();
+
return { kind: 'BooleanValue' as Kind.BOOLEAN, value: false };
+
} else break;
}
-
throw error('Value');
+
return {
+
kind: 'EnumValue' as Kind.ENUM,
+
value: name(),
+
};
}
function arguments_(constant: boolean): ast.ArgumentNode[] | undefined {
···
const args: ast.ArgumentNode[] = [];
idx++;
ignored();
-
let _name: string | undefined;
do {
-
if ((_name = advance(nameRe)) == null) throw error('Argument');
-
ignored();
+
const name = nameNode();
if (input.charCodeAt(idx++) !== 58 /*':'*/) throw error('Argument');
ignored();
args.push({
kind: 'Argument' as Kind.ARGUMENT,
-
name: { kind: 'Name' as Kind.NAME, value: _name },
+
name,
value: value(constant),
});
} while (input.charCodeAt(idx) !== 41 /*')'*/);
···
function directives(constant: boolean): ast.DirectiveNode[] | undefined {
if (input.charCodeAt(idx) === 64 /*'@'*/) {
const directives: ast.DirectiveNode[] = [];
-
let _name: string | undefined;
do {
idx++;
-
if ((_name = advance(nameRe)) == null) throw error('Directive');
-
ignored();
directives.push({
kind: 'Directive' as Kind.DIRECTIVE,
-
name: { kind: 'Name' as Kind.NAME, value: _name },
+
name: nameNode(),
arguments: arguments_(constant),
});
} while (input.charCodeAt(idx) === 64 /*'@'*/);
···
}
function type(): ast.TypeNode {
-
let match: string | undefined;
let lists = 0;
while (input.charCodeAt(idx) === 91 /*'['*/) {
lists++;
idx++;
ignored();
}
-
if ((match = advance(nameRe)) == null) throw error('NamedType');
-
ignored();
let type: ast.TypeNode = {
kind: 'NamedType' as Kind.NAMED_TYPE,
-
name: { kind: 'Name' as Kind.NAME, value: match },
+
name: nameNode(),
};
do {
if (input.charCodeAt(idx) === 33 /*'!'*/) {
···
return type;
}
-
// NOTE: This should be compressed by our build step
-
// This merges the two possible selection parsing branches into one regular expression
-
const selectionRe = new RegExp(
-
'(?:' +
-
// fragment spreads (FragmentSpread or InlineFragment nodes)
-
'(\\.{3})|' +
-
// field aliases or names (FieldNode)
-
'(' +
-
nameRe.source +
-
'))',
-
'y'
-
);
-
-
// NOTE: Each of the groups above end up in the RegExpExecArray at the indices 1&2
-
const enum SelectionGroup {
-
Spread = 1,
-
Name,
+
function selectionSetStart(): ast.SelectionSetNode {
+
if (input.charCodeAt(idx++) !== 123 /*'{'*/) throw error('SelectionSet');
+
ignored();
+
return selectionSet();
}
-
-
type SelectionExec = RegExpExecArray & {
-
[Prop in SelectionGroup]: string | undefined;
-
};
function selectionSet(): ast.SelectionSetNode {
const selections: ast.SelectionNode[] = [];
-
let match: string | undefined;
-
let exec: SelectionExec | null;
do {
-
selectionRe.lastIndex = idx;
-
if ((exec = selectionRe.exec(input) as SelectionExec) != null) {
-
idx = selectionRe.lastIndex;
-
if (exec[SelectionGroup.Spread] != null) {
-
ignored();
-
let match = advance(nameRe);
-
if (match != null && match !== 'on') {
-
// A simple `...Name` spread with optional directives
-
ignored();
+
if (input.charCodeAt(idx) === 46 /*'.'*/) {
+
if (input.charCodeAt(++idx) !== 46 /*'.'*/ || input.charCodeAt(++idx) !== 46 /*'.'*/)
+
throw error('SelectionSet');
+
idx++;
+
ignored();
+
switch (input.charCodeAt(idx)) {
+
case 64 /*'@'*/:
selections.push({
-
kind: 'FragmentSpread' as Kind.FRAGMENT_SPREAD,
-
name: { kind: 'Name' as Kind.NAME, value: match },
+
kind: 'InlineFragment' as Kind.INLINE_FRAGMENT,
+
typeCondition: undefined,
directives: directives(false),
+
selectionSet: selectionSetStart(),
});
-
} else {
-
ignored();
-
if (match === 'on') {
-
// An inline `... on Name` spread; if this doesn't match, the type condition has been omitted
-
if ((match = advance(nameRe)) == null) throw error('NamedType');
+
break;
+
+
case 111 /*'o'*/:
+
if (input.charCodeAt(idx + 1) === 110 /*'n'*/) {
+
idx += 2;
ignored();
+
selections.push({
+
kind: 'InlineFragment' as Kind.INLINE_FRAGMENT,
+
typeCondition: {
+
kind: 'NamedType' as Kind.NAMED_TYPE,
+
name: nameNode(),
+
},
+
directives: directives(false),
+
selectionSet: selectionSetStart(),
+
});
+
} else {
+
selections.push({
+
kind: 'FragmentSpread' as Kind.FRAGMENT_SPREAD,
+
name: nameNode(),
+
directives: directives(false),
+
});
}
-
const _directives = directives(false);
-
if (input.charCodeAt(idx++) !== 123 /*'{'*/) throw error('InlineFragment');
+
break;
+
+
case 123 /*'{'*/:
+
idx++;
ignored();
selections.push({
kind: 'InlineFragment' as Kind.INLINE_FRAGMENT,
-
typeCondition: match
-
? {
-
kind: 'NamedType' as Kind.NAMED_TYPE,
-
name: { kind: 'Name' as Kind.NAME, value: match },
-
}
-
: undefined,
-
directives: _directives,
+
typeCondition: undefined,
+
directives: undefined,
selectionSet: selectionSet(),
});
-
}
-
} else if ((match = exec[SelectionGroup.Name]) != null) {
-
let _alias: string | undefined;
+
break;
+
+
default:
+
selections.push({
+
kind: 'FragmentSpread' as Kind.FRAGMENT_SPREAD,
+
name: nameNode(),
+
directives: directives(false),
+
});
+
}
+
} else {
+
let name = nameNode();
+
let alias: ast.NameNode | undefined;
+
if (input.charCodeAt(idx) === 58 /*':'*/) {
+
idx++;
ignored();
-
// Parse the optional alias, by reassigning and then getting the name
-
if (input.charCodeAt(idx) === 58 /*':'*/) {
-
idx++;
-
ignored();
-
_alias = match;
-
if ((match = advance(nameRe)) == null) throw error('Field');
-
ignored();
-
}
-
const _arguments = arguments_(false);
+
alias = name;
+
name = nameNode();
+
}
+
const _arguments = arguments_(false);
+
const _directives = directives(false);
+
let _selectionSet: ast.SelectionSetNode | undefined;
+
if (input.charCodeAt(idx) === 123 /*'{'*/) {
+
idx++;
ignored();
-
const _directives = directives(false);
-
let _selectionSet: ast.SelectionSetNode | undefined;
-
if (input.charCodeAt(idx) === 123 /*'{'*/) {
-
idx++;
-
ignored();
-
_selectionSet = selectionSet();
-
}
-
selections.push({
-
kind: 'Field' as Kind.FIELD,
-
alias: _alias ? { kind: 'Name' as Kind.NAME, value: _alias } : undefined,
-
name: { kind: 'Name' as Kind.NAME, value: match },
-
arguments: _arguments,
-
directives: _directives,
-
selectionSet: _selectionSet,
-
});
+
_selectionSet = selectionSet();
}
-
} else {
-
throw error('SelectionSet');
+
selections.push({
+
kind: 'Field' as Kind.FIELD,
+
alias,
+
name,
+
arguments: _arguments,
+
directives: _directives,
+
selectionSet: _selectionSet,
+
});
}
} while (input.charCodeAt(idx) !== 125 /*'}'*/);
idx++;
···
const vars: ast.VariableDefinitionNode[] = [];
idx++;
ignored();
-
let _name: string | undefined;
do {
+
let _description: ast.StringValueNode | undefined;
+
if (input.charCodeAt(idx) === 34 /*'"'*/) {
+
_description = value(true) as ast.StringValueNode;
+
}
if (input.charCodeAt(idx++) !== 36 /*'$'*/) throw error('Variable');
-
if ((_name = advance(nameRe)) == null) throw error('Variable');
-
ignored();
+
const name = nameNode();
if (input.charCodeAt(idx++) !== 58 /*':'*/) throw error('VariableDefinition');
ignored();
const _type = type();
···
_defaultValue = value(true);
}
ignored();
-
vars.push({
+
const varDef: ast.VariableDefinitionNode = {
kind: 'VariableDefinition' as Kind.VARIABLE_DEFINITION,
variable: {
kind: 'Variable' as Kind.VARIABLE,
-
name: { kind: 'Name' as Kind.NAME, value: _name },
+
name,
},
type: _type,
defaultValue: _defaultValue,
directives: directives(true),
-
});
+
};
+
if (_description) {
+
varDef.description = _description;
+
}
+
vars.push(varDef);
} while (input.charCodeAt(idx) !== 41 /*')'*/);
idx++;
ignored();
···
}
}
-
function fragmentDefinition(): ast.FragmentDefinitionNode {
-
let _name: string | undefined;
-
let _condition: string | undefined;
-
if ((_name = advance(nameRe)) == null) throw error('FragmentDefinition');
-
ignored();
-
if (advance(nameRe) !== 'on') throw error('FragmentDefinition');
+
function fragmentDefinition(description?: ast.StringValueNode): ast.FragmentDefinitionNode {
+
const name = nameNode();
+
if (input.charCodeAt(idx++) !== 111 /*'o'*/ || input.charCodeAt(idx++) !== 110 /*'n'*/)
+
throw error('FragmentDefinition');
ignored();
-
if ((_condition = advance(nameRe)) == null) throw error('FragmentDefinition');
-
ignored();
-
const _directives = directives(false);
-
if (input.charCodeAt(idx++) !== 123 /*'{'*/) throw error('FragmentDefinition');
-
ignored();
-
return {
+
const fragDef: ast.FragmentDefinitionNode = {
kind: 'FragmentDefinition' as Kind.FRAGMENT_DEFINITION,
-
name: { kind: 'Name' as Kind.NAME, value: _name },
+
name,
typeCondition: {
kind: 'NamedType' as Kind.NAMED_TYPE,
-
name: { kind: 'Name' as Kind.NAME, value: _condition },
+
name: nameNode(),
},
-
directives: _directives,
-
selectionSet: selectionSet(),
+
directives: directives(false),
+
selectionSet: selectionSetStart(),
};
-
}
-
-
const definitionRe = /(?:query|mutation|subscription|fragment)/y;
-
-
function operationDefinition(
-
operation: OperationTypeNode | undefined
-
): ast.OperationDefinitionNode | undefined {
-
let _name: string | undefined;
-
let _variableDefinitions: ast.VariableDefinitionNode[] | undefined;
-
let _directives: ast.DirectiveNode[] | undefined;
-
if (operation) {
-
ignored();
-
_name = advance(nameRe);
-
_variableDefinitions = variableDefinitions();
-
_directives = directives(false);
+
if (description) {
+
fragDef.description = description;
}
-
if (input.charCodeAt(idx) === 123 /*'{'*/) {
-
idx++;
-
ignored();
-
return {
-
kind: 'OperationDefinition' as Kind.OPERATION_DEFINITION,
-
operation: operation || ('query' as OperationTypeNode.QUERY),
-
name: _name ? { kind: 'Name' as Kind.NAME, value: _name } : undefined,
-
variableDefinitions: _variableDefinitions,
-
directives: _directives,
-
selectionSet: selectionSet(),
-
};
-
}
+
return fragDef;
}
-
function document(): ast.DocumentNode {
-
let match: string | undefined;
-
let definition: ast.OperationDefinitionNode | undefined;
-
ignored();
-
const definitions: ast.ExecutableDefinitionNode[] = [];
+
function definitions(): ast.DefinitionNode[] {
+
const _definitions: ast.ExecutableDefinitionNode[] = [];
do {
-
if ((match = advance(definitionRe)) === 'fragment') {
+
let _description: ast.StringValueNode | undefined;
+
if (input.charCodeAt(idx) === 34 /*'"'*/) {
+
_description = value(true) as ast.StringValueNode;
+
}
+
if (input.charCodeAt(idx) === 123 /*'{'*/) {
+
// Anonymous operations can't have descriptions
+
if (_description) throw error('Document');
+
idx++;
ignored();
-
definitions.push(fragmentDefinition());
-
} else if ((definition = operationDefinition(match as OperationTypeNode)) != null) {
-
definitions.push(definition);
+
_definitions.push({
+
kind: 'OperationDefinition' as Kind.OPERATION_DEFINITION,
+
operation: 'query' as OperationTypeNode.QUERY,
+
name: undefined,
+
variableDefinitions: undefined,
+
directives: undefined,
+
selectionSet: selectionSet(),
+
});
} else {
-
throw error('Document');
+
const definition = name();
+
switch (definition) {
+
case 'fragment':
+
_definitions.push(fragmentDefinition(_description));
+
break;
+
case 'query':
+
case 'mutation':
+
case 'subscription':
+
let char: number;
+
let name: ast.NameNode | undefined;
+
if (
+
(char = input.charCodeAt(idx)) !== 40 /*'('*/ &&
+
char !== 64 /*'@'*/ &&
+
char !== 123 /*'{'*/
+
) {
+
name = nameNode();
+
}
+
const opDef: ast.OperationDefinitionNode = {
+
kind: 'OperationDefinition' as Kind.OPERATION_DEFINITION,
+
operation: definition as OperationTypeNode,
+
name,
+
variableDefinitions: variableDefinitions(),
+
directives: directives(false),
+
selectionSet: selectionSetStart(),
+
};
+
if (_description) {
+
opDef.description = _description;
+
}
+
_definitions.push(opDef);
+
break;
+
default:
+
throw error('Document');
+
}
}
} while (idx < input.length);
-
return {
-
kind: 'Document' as Kind.DOCUMENT,
-
definitions,
-
};
+
return _definitions;
}
type ParseOptions = {
···
export function parse(
string: string | Source,
-
_options?: ParseOptions | undefined
+
options?: ParseOptions | undefined
): ast.DocumentNode {
-
input = typeof string.body === 'string' ? string.body : string;
+
input = string.body ? string.body : string;
idx = 0;
-
return document();
+
ignored();
+
if (options && options.noLocation) {
+
return {
+
kind: 'Document' as Kind.DOCUMENT,
+
definitions: definitions(),
+
};
+
} else {
+
return {
+
kind: 'Document' as Kind.DOCUMENT,
+
definitions: definitions(),
+
loc: {
+
start: 0,
+
end: input.length,
+
startToken: undefined,
+
endToken: undefined,
+
source: {
+
body: input,
+
name: 'graphql.web',
+
locationOffset: { line: 1, column: 1 },
+
},
+
},
+
} as Location;
+
}
}
export function parseValue(
string: string | Source,
_options?: ParseOptions | undefined
): ast.ValueNode {
-
input = typeof string.body === 'string' ? string.body : string;
+
input = string.body ? string.body : string;
idx = 0;
ignored();
return value(false);
···
string: string | Source,
_options?: ParseOptions | undefined
): ast.TypeNode {
-
input = typeof string.body === 'string' ? string.body : string;
+
input = string.body ? string.body : string;
idx = 0;
return type();
}
+20 -7
src/printer.ts
···
const nodes = {
OperationDefinition(node: OperationDefinitionNode): string {
-
let out: string = node.operation;
+
let out: string = '';
+
if (node.description) {
+
out += nodes.StringValue(node.description) + '\n';
+
}
+
out += node.operation;
if (node.name) out += ' ' + node.name.value;
if (node.variableDefinitions && node.variableDefinitions.length) {
if (!node.name) out += ' ';
···
}
if (node.directives && node.directives.length)
out += ' ' + mapJoin(node.directives, ' ', nodes.Directive);
-
return out !== 'query'
-
? out + ' ' + nodes.SelectionSet(node.selectionSet)
-
: nodes.SelectionSet(node.selectionSet);
+
const selectionSet = nodes.SelectionSet(node.selectionSet);
+
return out !== 'query' ? out + ' ' + selectionSet : selectionSet;
},
VariableDefinition(node: VariableDefinitionNode): string {
-
let out = nodes.Variable!(node.variable) + ': ' + _print(node.type);
+
let out = '';
+
if (node.description) {
+
out += nodes.StringValue(node.description) + ' ';
+
}
+
out += nodes.Variable!(node.variable) + ': ' + _print(node.type);
if (node.defaultValue) out += ' = ' + _print(node.defaultValue);
if (node.directives && node.directives.length)
out += ' ' + mapJoin(node.directives, ' ', nodes.Directive);
···
}
if (node.directives && node.directives.length)
out += ' ' + mapJoin(node.directives, ' ', nodes.Directive);
-
if (node.selectionSet) out += ' ' + nodes.SelectionSet(node.selectionSet);
+
if (node.selectionSet && node.selectionSet.selections.length) {
+
out += ' ' + nodes.SelectionSet(node.selectionSet);
+
}
return out;
},
StringValue(node: StringValueNode): string {
···
return out;
},
FragmentDefinition(node: FragmentDefinitionNode): string {
-
let out = 'fragment ' + node.name.value;
+
let out = '';
+
if (node.description) {
+
out += nodes.StringValue(node.description) + '\n';
+
}
+
out += 'fragment ' + node.name.value;
out += ' on ' + node.typeCondition.name.value;
if (node.directives && node.directives.length)
out += ' ' + mapJoin(node.directives, ' ', nodes.Directive);
+1 -1
src/types.ts
···
-
export type Or<T, U> = 0 extends 1 & T ? U : T;
+
export type Or<T, U> = void extends T ? U : T;
export type Maybe<T> = T | undefined | null;
+7 -3
src/values.ts
···
return node.value;
case 'ListValue': {
const values: unknown[] = [];
-
for (const value of node.values) values.push(valueFromASTUntyped(value, variables));
+
for (let i = 0, l = node.values.length; i < l; i++)
+
values.push(valueFromASTUntyped(node.values[i], variables));
return values;
}
case 'ObjectValue': {
const obj = Object.create(null);
-
for (const field of node.fields)
+
for (let i = 0, l = node.fields.length; i < l; i++) {
+
const field = node.fields[i];
obj[field.name.value] = valueFromASTUntyped(field.value, variables);
+
}
return obj;
}
case 'Variable':
···
} else if (type.kind === 'ListType') {
if (node.kind === 'ListValue') {
const values: unknown[] = [];
-
for (const value of node.values) {
+
for (let i = 0, l = node.values.length; i < l; i++) {
+
const value = node.values[i];
const coerced = valueFromTypeNode(value, type.type, variables);
if (coerced === undefined) {
return undefined;