Mirror: TypeScript LSP plugin that finds GraphQL documents in your code and provides diagnostics, auto-complete and hover-information.

Bootstrap e2e tests (#23)

* Add basic e2e test

* Use pnpm workspace

* Move test to npmignore

* Test from root

* Fix faulty rebase

* Add test to CI action

* Fix monorepo stuff

* Relax test timeout a bit

* Add tsconfig

* Add fixture projects to workspace

* Can use workspace

* Another oops

* Delete .npmrc

Daniel 2a89522e d702223f

Changed files
+930 -2
.github
workflows
packages
graphqlsp
test
+3
.github/workflows/ci.yaml
···
- name: Build
run: pnpm --filter @0no-co/graphqlsp run build
+
+
- name: Test
+
run: pnpm run test:e2e
+5 -2
package.json
···
"build": "rollup -c ./scripts/build.mjs",
"prepare": "husky install",
"dev": "pnpm --filter @0no-co/graphqlsp dev",
-
"launch-debug": "./scripts/launch-debug.sh"
+
"launch-debug": "./scripts/launch-debug.sh",
+
"test:e2e": "vitest run"
},
"prettier": {
"singleQuote": true,
···
"@changesets/get-github-info": "^0.5.2",
"@rollup/plugin-terser": "^0.4.1",
"@rollup/plugin-typescript": "^11.1.0",
+
"@types/node": "^18.15.11",
"dotenv": "^16.0.3",
"husky": "^8.0.3",
"lint-staged": "^13.2.1",
"prettier": "^2.8.7",
"rollup": "^3.20.2",
-
"typescript": "^5.0.0"
+
"typescript": "^5.0.0",
+
"vitest": "^0.30.1"
}
}
+1
packages/graphqlsp/.npmignore
···
src
+
test
node_modules
scripts
example
+699
pnpm-lock.yaml
···
'@rollup/plugin-typescript':
specifier: ^11.1.0
version: 11.1.0(rollup@3.20.2)(typescript@5.0.4)
+
'@types/node':
+
specifier: ^18.15.11
+
version: 18.15.11
dotenv:
specifier: ^16.0.3
version: 16.0.3
···
typescript:
specifier: ^5.0.0
version: 5.0.4
+
vitest:
+
specifier: ^0.30.1
+
version: 0.30.1
packages/example:
dependencies:
···
specifier: ^5.0.0
version: 5.0.4
+
test/e2e/fixture-project:
+
dependencies:
+
'@0no-co/graphqlsp':
+
specifier: workspace:*
+
version: link:../../../packages/graphqlsp
+
'@urql/core':
+
specifier: ^4.0.4
+
version: 4.0.4
+
devDependencies:
+
typescript:
+
specifier: ^5.0.4
+
version: 5.0.4
+
packages:
+
+
/@0no-co/graphql.web@1.0.0:
+
resolution: {integrity: sha512-JBq2pWyDchE1vVjj/+c4dzZ8stbpew4RrzpZ3vYdn1WJFGHfYg6YIX1fDdMKtSXJJM9FUlsoDOxemr9WMM2p+A==}
+
peerDependencies:
+
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
+
peerDependenciesMeta:
+
graphql:
+
optional: true
+
dev: false
/@ampproject/remapping@2.2.0:
resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
···
prettier: 2.8.7
dev: true
+
/@esbuild/android-arm64@0.17.16:
+
resolution: {integrity: sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==}
+
engines: {node: '>=12'}
+
cpu: [arm64]
+
os: [android]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/android-arm@0.17.16:
+
resolution: {integrity: sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==}
+
engines: {node: '>=12'}
+
cpu: [arm]
+
os: [android]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/android-x64@0.17.16:
+
resolution: {integrity: sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==}
+
engines: {node: '>=12'}
+
cpu: [x64]
+
os: [android]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/darwin-arm64@0.17.16:
+
resolution: {integrity: sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==}
+
engines: {node: '>=12'}
+
cpu: [arm64]
+
os: [darwin]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/darwin-x64@0.17.16:
+
resolution: {integrity: sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==}
+
engines: {node: '>=12'}
+
cpu: [x64]
+
os: [darwin]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/freebsd-arm64@0.17.16:
+
resolution: {integrity: sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==}
+
engines: {node: '>=12'}
+
cpu: [arm64]
+
os: [freebsd]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/freebsd-x64@0.17.16:
+
resolution: {integrity: sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==}
+
engines: {node: '>=12'}
+
cpu: [x64]
+
os: [freebsd]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/linux-arm64@0.17.16:
+
resolution: {integrity: sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==}
+
engines: {node: '>=12'}
+
cpu: [arm64]
+
os: [linux]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/linux-arm@0.17.16:
+
resolution: {integrity: sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==}
+
engines: {node: '>=12'}
+
cpu: [arm]
+
os: [linux]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/linux-ia32@0.17.16:
+
resolution: {integrity: sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==}
+
engines: {node: '>=12'}
+
cpu: [ia32]
+
os: [linux]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/linux-loong64@0.17.16:
+
resolution: {integrity: sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==}
+
engines: {node: '>=12'}
+
cpu: [loong64]
+
os: [linux]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/linux-mips64el@0.17.16:
+
resolution: {integrity: sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==}
+
engines: {node: '>=12'}
+
cpu: [mips64el]
+
os: [linux]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/linux-ppc64@0.17.16:
+
resolution: {integrity: sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==}
+
engines: {node: '>=12'}
+
cpu: [ppc64]
+
os: [linux]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/linux-riscv64@0.17.16:
+
resolution: {integrity: sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==}
+
engines: {node: '>=12'}
+
cpu: [riscv64]
+
os: [linux]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/linux-s390x@0.17.16:
+
resolution: {integrity: sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==}
+
engines: {node: '>=12'}
+
cpu: [s390x]
+
os: [linux]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/linux-x64@0.17.16:
+
resolution: {integrity: sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==}
+
engines: {node: '>=12'}
+
cpu: [x64]
+
os: [linux]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/netbsd-x64@0.17.16:
+
resolution: {integrity: sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==}
+
engines: {node: '>=12'}
+
cpu: [x64]
+
os: [netbsd]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/openbsd-x64@0.17.16:
+
resolution: {integrity: sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==}
+
engines: {node: '>=12'}
+
cpu: [x64]
+
os: [openbsd]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/sunos-x64@0.17.16:
+
resolution: {integrity: sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==}
+
engines: {node: '>=12'}
+
cpu: [x64]
+
os: [sunos]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/win32-arm64@0.17.16:
+
resolution: {integrity: sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==}
+
engines: {node: '>=12'}
+
cpu: [arm64]
+
os: [win32]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/win32-ia32@0.17.16:
+
resolution: {integrity: sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==}
+
engines: {node: '>=12'}
+
cpu: [ia32]
+
os: [win32]
+
requiresBuild: true
+
dev: true
+
optional: true
+
+
/@esbuild/win32-x64@0.17.16:
+
resolution: {integrity: sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==}
+
engines: {node: '>=12'}
+
cpu: [x64]
+
os: [win32]
+
requiresBuild: true
+
dev: true
+
optional: true
+
/@graphql-codegen/core@2.6.8(graphql@16.6.0):
resolution: {integrity: sha512-JKllNIipPrheRgl+/Hm/xuWMw9++xNQ12XJR/OHHgFopOg4zmN3TdlRSyYcv/K90hCFkkIwhlHFUQTfKrm8rxQ==}
peerDependencies:
···
rollup: 3.20.2
dev: true
+
/@types/chai-subset@1.3.3:
+
resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
+
dependencies:
+
'@types/chai': 4.3.4
+
dev: true
+
+
/@types/chai@4.3.4:
+
resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==}
+
dev: true
+
/@types/estree@1.0.0:
resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
dev: true
···
wonka: 6.3.1
dev: false
+
/@urql/core@4.0.4:
+
resolution: {integrity: sha512-r1rB/VMVpCnfnMTTzCAs+HY+UqOHUgpZ+GimLtU4DCTP3C78DK+m4qr36M7KKleggrKgcpcC1TE8eFEVcKzfSQ==}
+
dependencies:
+
'@0no-co/graphql.web': 1.0.0
+
wonka: 6.3.1
+
transitivePeerDependencies:
+
- graphql
+
dev: false
+
+
/@vitest/expect@0.30.1:
+
resolution: {integrity: sha512-c3kbEtN8XXJSeN81iDGq29bUzSjQhjES2WR3aColsS4lPGbivwLtas4DNUe0jD9gg/FYGIteqOenfU95EFituw==}
+
dependencies:
+
'@vitest/spy': 0.30.1
+
'@vitest/utils': 0.30.1
+
chai: 4.3.7
+
dev: true
+
+
/@vitest/runner@0.30.1:
+
resolution: {integrity: sha512-W62kT/8i0TF1UBCNMRtRMOBWJKRnNyv9RrjIgdUryEe0wNpGZvvwPDLuzYdxvgSckzjp54DSpv1xUbv4BQ0qVA==}
+
dependencies:
+
'@vitest/utils': 0.30.1
+
concordance: 5.0.4
+
p-limit: 4.0.0
+
pathe: 1.1.0
+
dev: true
+
+
/@vitest/snapshot@0.30.1:
+
resolution: {integrity: sha512-fJZqKrE99zo27uoZA/azgWyWbFvM1rw2APS05yB0JaLwUIg9aUtvvnBf4q7JWhEcAHmSwbrxKFgyBUga6tq9Tw==}
+
dependencies:
+
magic-string: 0.30.0
+
pathe: 1.1.0
+
pretty-format: 27.5.1
+
dev: true
+
+
/@vitest/spy@0.30.1:
+
resolution: {integrity: sha512-YfJeIf37GvTZe04ZKxzJfnNNuNSmTEGnla2OdL60C8od16f3zOfv9q9K0nNii0NfjDJRt/CVN/POuY5/zTS+BA==}
+
dependencies:
+
tinyspy: 2.1.0
+
dev: true
+
+
/@vitest/utils@0.30.1:
+
resolution: {integrity: sha512-/c8Xv2zUVc+rnNt84QF0Y0zkfxnaGhp87K2dYJMLtLOIckPzuxLVzAtFCicGFdB4NeBHNzTRr1tNn7rCtQcWFA==}
+
dependencies:
+
concordance: 5.0.4
+
loupe: 2.3.6
+
pretty-format: 27.5.1
+
dev: true
+
+
/acorn-walk@8.2.0:
+
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
+
engines: {node: '>=0.4.0'}
+
dev: true
+
/acorn@8.8.2:
resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
engines: {node: '>=0.4.0'}
···
dependencies:
color-convert: 2.0.1
+
/ansi-styles@5.2.0:
+
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+
engines: {node: '>=10'}
+
dev: true
+
/ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
···
/asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+
/assertion-error@1.1.0:
+
resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
dev: true
+
/astral-regex@2.0.0:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
engines: {node: '>=8'}
···
is-windows: 1.0.2
dev: true
+
/blueimp-md5@2.19.0:
+
resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==}
+
dev: true
+
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
···
/buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
dev: true
+
+
/cac@6.7.14:
+
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+
engines: {node: '>=8'}
dev: true
/call-bind@1.0.2:
···
tslib: 2.4.1
upper-case-first: 2.0.2
+
/chai@4.3.7:
+
resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
+
engines: {node: '>=4'}
+
dependencies:
+
assertion-error: 1.1.0
+
check-error: 1.0.2
+
deep-eql: 4.1.3
+
get-func-name: 2.0.0
+
loupe: 2.3.6
+
pathval: 1.1.1
+
type-detect: 4.0.8
+
dev: true
+
/chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
···
/chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
dev: true
+
+
/check-error@1.0.2:
+
resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
dev: true
/ci-info@3.8.0:
···
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
/concordance@5.0.4:
+
resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==}
+
engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'}
+
dependencies:
+
date-time: 3.1.0
+
esutils: 2.0.3
+
fast-diff: 1.2.0
+
js-string-escape: 1.0.1
+
lodash: 4.17.21
+
md5-hex: 3.0.1
+
semver: 7.4.0
+
well-known-symbols: 2.0.0
+
dev: true
+
/constant-case@3.0.4:
resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
dependencies:
···
resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==}
dev: true
+
/date-time@3.1.0:
+
resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==}
+
engines: {node: '>=6'}
+
dependencies:
+
time-zone: 1.0.0
+
dev: true
+
/debug@4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
engines: {node: '>=6.0'}
···
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
+
/deep-eql@4.1.3:
+
resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+
engines: {node: '>=6'}
+
dependencies:
+
type-detect: 4.0.8
+
dev: true
+
/defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
dependencies:
···
is-symbol: 1.0.4
dev: true
+
/esbuild@0.17.16:
+
resolution: {integrity: sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==}
+
engines: {node: '>=12'}
+
hasBin: true
+
requiresBuild: true
+
optionalDependencies:
+
'@esbuild/android-arm': 0.17.16
+
'@esbuild/android-arm64': 0.17.16
+
'@esbuild/android-x64': 0.17.16
+
'@esbuild/darwin-arm64': 0.17.16
+
'@esbuild/darwin-x64': 0.17.16
+
'@esbuild/freebsd-arm64': 0.17.16
+
'@esbuild/freebsd-x64': 0.17.16
+
'@esbuild/linux-arm': 0.17.16
+
'@esbuild/linux-arm64': 0.17.16
+
'@esbuild/linux-ia32': 0.17.16
+
'@esbuild/linux-loong64': 0.17.16
+
'@esbuild/linux-mips64el': 0.17.16
+
'@esbuild/linux-ppc64': 0.17.16
+
'@esbuild/linux-riscv64': 0.17.16
+
'@esbuild/linux-s390x': 0.17.16
+
'@esbuild/linux-x64': 0.17.16
+
'@esbuild/netbsd-x64': 0.17.16
+
'@esbuild/openbsd-x64': 0.17.16
+
'@esbuild/sunos-x64': 0.17.16
+
'@esbuild/win32-arm64': 0.17.16
+
'@esbuild/win32-ia32': 0.17.16
+
'@esbuild/win32-x64': 0.17.16
+
dev: true
+
/escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
···
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
dev: true
+
/esutils@2.0.3:
+
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+
engines: {node: '>=0.10.0'}
+
dev: true
+
/execa@7.1.1:
resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==}
engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
···
chardet: 0.7.0
iconv-lite: 0.4.24
tmp: 0.0.33
+
dev: true
+
+
/fast-diff@1.2.0:
+
resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
dev: true
/fast-glob@3.2.11:
···
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
+
/get-func-name@2.0.0:
+
resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
+
dev: true
+
/get-intrinsic@1.2.0:
resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
dependencies:
···
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
dev: true
+
/js-string-escape@1.0.1:
+
resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==}
+
engines: {node: '>= 0.8'}
+
dev: true
+
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
···
resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==}
engines: {node: '>=6'}
hasBin: true
+
+
/jsonc-parser@3.2.0:
+
resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
+
dev: true
/jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
···
strip-bom: 3.0.0
dev: true
+
/local-pkg@0.4.3:
+
resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
+
engines: {node: '>=14'}
+
dev: true
+
/locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
···
dependencies:
js-tokens: 4.0.0
+
/loupe@2.3.6:
+
resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
+
dependencies:
+
get-func-name: 2.0.0
+
dev: true
+
/lower-case-first@2.0.2:
resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==}
dependencies:
···
yallist: 2.1.2
dev: true
+
/lru-cache@6.0.0:
+
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+
engines: {node: '>=10'}
+
dependencies:
+
yallist: 4.0.0
+
dev: true
+
+
/magic-string@0.30.0:
+
resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
+
engines: {node: '>=12'}
+
dependencies:
+
'@jridgewell/sourcemap-codec': 1.4.14
+
dev: true
+
/map-cache@0.2.2:
resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
engines: {node: '>=0.10.0'}
···
/map-obj@4.3.0:
resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
engines: {node: '>=8'}
+
dev: true
+
+
/md5-hex@3.0.1:
+
resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==}
+
engines: {node: '>=8'}
+
dependencies:
+
blueimp-md5: 2.19.0
dev: true
/meow@6.1.1:
···
engines: {node: '>= 8.0.0'}
dev: true
+
/mlly@1.2.0:
+
resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==}
+
dependencies:
+
acorn: 8.8.2
+
pathe: 1.1.0
+
pkg-types: 1.0.2
+
ufo: 1.1.1
+
dev: true
+
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
/nanoid@3.3.6:
+
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
+
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+
hasBin: true
+
dev: true
+
/no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
dependencies:
···
yocto-queue: 0.1.0
dev: true
+
/p-limit@4.0.0:
+
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
dependencies:
+
yocto-queue: 1.0.0
+
dev: true
+
/p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
···
engines: {node: '>=8'}
dev: true
+
/pathe@1.1.0:
+
resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==}
+
dev: true
+
+
/pathval@1.1.1:
+
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
dev: true
+
/picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
···
find-up: 4.1.0
dev: true
+
/pkg-types@1.0.2:
+
resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==}
+
dependencies:
+
jsonc-parser: 3.2.0
+
mlly: 1.2.0
+
pathe: 1.1.0
+
dev: true
+
+
/postcss@8.4.22:
+
resolution: {integrity: sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA==}
+
engines: {node: ^10 || ^12 || >=14}
+
dependencies:
+
nanoid: 3.3.6
+
picocolors: 1.0.0
+
source-map-js: 1.0.2
+
dev: true
+
/preferred-pm@3.0.3:
resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==}
engines: {node: '>=10'}
···
hasBin: true
dev: true
+
/pretty-format@27.5.1:
+
resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
+
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+
dependencies:
+
ansi-regex: 5.0.1
+
ansi-styles: 5.2.0
+
react-is: 17.0.2
+
dev: true
+
/promise@7.3.1:
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
dependencies:
···
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
dependencies:
safe-buffer: 5.2.1
+
dev: true
+
+
/react-is@17.0.2:
+
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
dev: true
/read-pkg-up@7.0.1:
···
/semver@6.3.0:
resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
hasBin: true
+
+
/semver@7.4.0:
+
resolution: {integrity: sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==}
+
engines: {node: '>=10'}
+
hasBin: true
+
dependencies:
+
lru-cache: 6.0.0
+
dev: true
/sentence-case@3.0.4:
resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
···
object-inspect: 1.12.3
dev: true
+
/siginfo@2.0.0:
+
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
dev: true
+
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: true
···
dot-case: 3.0.4
tslib: 2.4.1
+
/source-map-js@1.0.2:
+
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+
engines: {node: '>=0.10.0'}
+
dev: true
+
/source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
dependencies:
···
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
dev: true
+
/stackback@0.0.2:
+
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
dev: true
+
+
/std-env@3.3.2:
+
resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==}
+
dev: true
+
/stream-transform@2.1.3:
resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==}
dependencies:
···
min-indent: 1.0.1
dev: true
+
/strip-literal@1.0.1:
+
resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
+
dependencies:
+
acorn: 8.8.2
+
dev: true
+
/supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
···
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
dev: true
+
/time-zone@1.0.0:
+
resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==}
+
engines: {node: '>=4'}
+
dev: true
+
+
/tinybench@2.4.0:
+
resolution: {integrity: sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==}
+
dev: true
+
+
/tinypool@0.4.0:
+
resolution: {integrity: sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==}
+
engines: {node: '>=14.0.0'}
+
dev: true
+
+
/tinyspy@2.1.0:
+
resolution: {integrity: sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==}
+
engines: {node: '>=14.0.0'}
+
dev: true
+
/title-case@3.0.3:
resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==}
dependencies:
···
yargs: 17.7.1
dev: true
+
/type-detect@4.0.8:
+
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+
engines: {node: '>=4'}
+
dev: true
+
/type-fest@0.13.1:
resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
engines: {node: '>=10'}
···
/ua-parser-js@0.7.32:
resolution: {integrity: sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==}
+
+
/ufo@1.1.1:
+
resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==}
+
dev: true
/unbox-primitive@1.0.2:
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
···
resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==}
engines: {node: '>=12'}
+
/vite-node@0.30.1(@types/node@18.15.11):
+
resolution: {integrity: sha512-vTikpU/J7e6LU/8iM3dzBo8ZhEiKZEKRznEMm+mJh95XhWaPrJQraT/QsT2NWmuEf+zgAoMe64PKT7hfZ1Njmg==}
+
engines: {node: '>=v14.18.0'}
+
hasBin: true
+
dependencies:
+
cac: 6.7.14
+
debug: 4.3.4
+
mlly: 1.2.0
+
pathe: 1.1.0
+
picocolors: 1.0.0
+
vite: 4.2.1(@types/node@18.15.11)
+
transitivePeerDependencies:
+
- '@types/node'
+
- less
+
- sass
+
- stylus
+
- sugarss
+
- supports-color
+
- terser
+
dev: true
+
+
/vite@4.2.1(@types/node@18.15.11):
+
resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==}
+
engines: {node: ^14.18.0 || >=16.0.0}
+
hasBin: true
+
peerDependencies:
+
'@types/node': '>= 14'
+
less: '*'
+
sass: '*'
+
stylus: '*'
+
sugarss: '*'
+
terser: ^5.4.0
+
peerDependenciesMeta:
+
'@types/node':
+
optional: true
+
less:
+
optional: true
+
sass:
+
optional: true
+
stylus:
+
optional: true
+
sugarss:
+
optional: true
+
terser:
+
optional: true
+
dependencies:
+
'@types/node': 18.15.11
+
esbuild: 0.17.16
+
postcss: 8.4.22
+
resolve: 1.22.2
+
rollup: 3.20.2
+
optionalDependencies:
+
fsevents: 2.3.2
+
dev: true
+
+
/vitest@0.30.1:
+
resolution: {integrity: sha512-y35WTrSTlTxfMLttgQk4rHcaDkbHQwDP++SNwPb+7H8yb13Q3cu2EixrtHzF27iZ8v0XCciSsLg00RkPAzB/aA==}
+
engines: {node: '>=v14.18.0'}
+
hasBin: true
+
peerDependencies:
+
'@edge-runtime/vm': '*'
+
'@vitest/browser': '*'
+
'@vitest/ui': '*'
+
happy-dom: '*'
+
jsdom: '*'
+
playwright: '*'
+
safaridriver: '*'
+
webdriverio: '*'
+
peerDependenciesMeta:
+
'@edge-runtime/vm':
+
optional: true
+
'@vitest/browser':
+
optional: true
+
'@vitest/ui':
+
optional: true
+
happy-dom:
+
optional: true
+
jsdom:
+
optional: true
+
playwright:
+
optional: true
+
safaridriver:
+
optional: true
+
webdriverio:
+
optional: true
+
dependencies:
+
'@types/chai': 4.3.4
+
'@types/chai-subset': 1.3.3
+
'@types/node': 18.15.11
+
'@vitest/expect': 0.30.1
+
'@vitest/runner': 0.30.1
+
'@vitest/snapshot': 0.30.1
+
'@vitest/spy': 0.30.1
+
'@vitest/utils': 0.30.1
+
acorn: 8.8.2
+
acorn-walk: 8.2.0
+
cac: 6.7.14
+
chai: 4.3.7
+
concordance: 5.0.4
+
debug: 4.3.4
+
local-pkg: 0.4.3
+
magic-string: 0.30.0
+
pathe: 1.1.0
+
picocolors: 1.0.0
+
source-map: 0.6.1
+
std-env: 3.3.2
+
strip-literal: 1.0.1
+
tinybench: 2.4.0
+
tinypool: 0.4.0
+
vite: 4.2.1(@types/node@18.15.11)
+
vite-node: 0.30.1(@types/node@18.15.11)
+
why-is-node-running: 2.2.2
+
transitivePeerDependencies:
+
- less
+
- sass
+
- stylus
+
- sugarss
+
- supports-color
+
- terser
+
dev: true
+
/vscode-languageserver-types@3.17.2:
resolution: {integrity: sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==}
···
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
/well-known-symbols@2.0.0:
+
resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==}
+
engines: {node: '>=6'}
+
dev: true
+
/whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
dependencies:
···
isexe: 2.0.0
dev: true
+
/why-is-node-running@2.2.2:
+
resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
+
engines: {node: '>=8'}
+
hasBin: true
+
dependencies:
+
siginfo: 2.0.0
+
stackback: 0.0.2
+
dev: true
+
/wonka@6.3.1:
resolution: {integrity: sha512-nJyGPcjuBiaLFn8QAlrHd+QjV9AlPO7snOWAhgx6aX0nQLMV6Wi0nqfrkmsXIH0efngbDOroOz2QyLnZMF16Hw==}
dev: false
···
/yallist@2.1.2:
resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
+
dev: true
+
+
/yallist@4.0.0:
+
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
/yaml@2.2.1:
···
/yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
+
dev: true
+
+
/yocto-queue@1.0.0:
+
resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
+
engines: {node: '>=12.20'}
dev: true
file:packages/graphqlsp(graphql@16.6.0):
+1
pnpm-workspace.yaml
···
packages:
- 'packages/*'
+
- 'test/e2e/**'
+3
test/e2e/fixture-project/.vscode/settings.json
···
+
{
+
"typescript.tsdk": "node_modules/typescript/lib"
+
}
+9
test/e2e/fixture-project/fixtures/simple.ts
···
+
import { gql } from '@urql/core';
+
+
const PostsQuery = gql`
+
query AllPosts {
+
posts {
+
title
+
}
+
}
+
`;
+10
test/e2e/fixture-project/package.json
···
+
{
+
"private": true,
+
"dependencies": {
+
"@0no-co/graphqlsp": "workspace:*",
+
"@urql/core": "^4.0.4"
+
},
+
"devDependencies": {
+
"typescript": "^5.0.4"
+
}
+
}
+10
test/e2e/fixture-project/schema.graphql
···
+
type Query {
+
post(id: ID!): Post
+
posts: [Post]
+
}
+
+
type Post {
+
id: ID!
+
title: String!
+
content: String!
+
}
+17
test/e2e/fixture-project/tsconfig.json
···
+
{
+
"compilerOptions": {
+
"plugins": [
+
{
+
"name": "@0no-co/graphqlsp",
+
"schema": "./schema.graphql"
+
}
+
],
+
"target": "es2016",
+
"esModuleInterop": true,
+
"moduleResolution": "node",
+
"forceConsistentCasingInFileNames": true,
+
"strict": true,
+
"skipLibCheck": true
+
},
+
"exclude": ["node_modules", "fixtures"]
+
}
+95
test/e2e/server.ts
···
+
import { ChildProcess, fork } from 'node:child_process';
+
import path from 'node:path';
+
import readline from 'node:readline';
+
import fs from 'node:fs';
+
import ts from 'typescript/lib/tsserverlibrary';
+
+
type Command = `${ts.server.protocol.CommandTypes}`;
+
+
export class TSServer {
+
#server: ChildProcess;
+
#seq = 0;
+
#resolvePromise: (() => void) | undefined;
+
#waitFor:
+
| ((
+
response: ts.server.protocol.Response | ts.server.protocol.Event
+
) => boolean)
+
| undefined;
+
+
responses: Array<ts.server.protocol.Response | ts.server.protocol.Event> = [];
+
+
constructor(
+
public projectPath: string,
+
public options: { debugLog?: boolean } = {}
+
) {
+
const tsserverPath = path.resolve(
+
projectPath,
+
'node_modules/typescript/lib/tsserver.js'
+
);
+
+
fs.lstatSync(tsserverPath);
+
+
const server = fork(tsserverPath, ['--logVerbosity', 'verbose'], {
+
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
+
cwd: projectPath,
+
});
+
+
if (!server?.stdout) {
+
throw new Error('Failed to start tsserver');
+
}
+
+
server.stdout.setEncoding('utf-8');
+
readline.createInterface({ input: server.stdout }).on('line', line => {
+
if (!line.startsWith('{')) return;
+
+
try {
+
const data = JSON.parse(line);
+
+
this.responses.push(data);
+
+
if (this.#resolvePromise && this.#waitFor?.(data)) {
+
this.#resolvePromise();
+
this.#waitFor = undefined;
+
this.#resolvePromise = undefined;
+
}
+
+
if (options.debugLog) {
+
console.log(data);
+
}
+
} catch (e) {
+
console.error(e);
+
}
+
});
+
+
this.#server = server;
+
}
+
+
sendCommand(command: Command, args?: Record<string, unknown>) {
+
this.send({ command, arguments: args });
+
}
+
+
send(data: {}) {
+
const request = JSON.stringify({
+
seq: ++this.#seq,
+
type: 'request',
+
...data,
+
});
+
+
this.#server.stdin?.write(`${request}\n`);
+
}
+
+
waitForResponse = (
+
cb: (
+
response: ts.server.protocol.Response | ts.server.protocol.Event
+
) => boolean
+
) => {
+
this.#waitFor = cb;
+
return new Promise<void>(resolve => {
+
this.#resolvePromise = resolve;
+
});
+
};
+
+
close() {
+
this.#server.kill();
+
}
+
}
+66
test/e2e/smoke.test.ts
···
+
import { expect, afterEach, afterAll, beforeEach, it } from 'vitest';
+
import { TSServer } from './server';
+
import path from 'node:path';
+
import fs from 'node:fs';
+
import url from 'node:url';
+
import ts from 'typescript/lib/tsserverlibrary';
+
+
const __dirname = path.dirname(url.fileURLToPath(import.meta.url));
+
+
const projectPath = path.resolve(__dirname, 'fixture-project');
+
+
let server: TSServer;
+
beforeEach(() => {
+
server = new TSServer(projectPath, { debugLog: false });
+
});
+
afterEach(() => {
+
server.close();
+
});
+
+
const testFile = path.join(projectPath, 'simple.ts');
+
const generatedFile = path.join(projectPath, 'simple.generated.ts');
+
+
afterAll(() => {
+
try {
+
fs.unlinkSync(testFile);
+
fs.unlinkSync(generatedFile);
+
} catch {}
+
});
+
+
it('passes simple smoke test', async () => {
+
const fixtureFileContent = fs.readFileSync(
+
path.resolve(testFile, '../fixtures/simple.ts'),
+
'utf-8'
+
);
+
+
server.sendCommand('open', {
+
file: testFile,
+
fileContent: '// empty',
+
scriptKindName: 'TS',
+
} satisfies ts.server.protocol.OpenRequestArgs);
+
+
server.sendCommand('updateOpen', {
+
openFiles: [{ file: testFile, fileContent: fixtureFileContent }],
+
} satisfies ts.server.protocol.UpdateOpenRequestArgs);
+
+
server.sendCommand('saveto', {
+
file: testFile,
+
tmpfile: testFile,
+
} satisfies ts.server.protocol.SavetoRequestArgs);
+
+
await server.waitForResponse(
+
response => response.type === 'event' && response.event === 'setTypings'
+
);
+
+
expect(() => {
+
fs.lstatSync(testFile);
+
fs.lstatSync(generatedFile);
+
}).not.toThrow();
+
+
expect(fs.readFileSync(testFile, 'utf-8')).toContain(
+
`as typeof import('./simple.generated').AllPostsDocument`
+
);
+
expect(fs.readFileSync(generatedFile, 'utf-8')).toContain(
+
'export const AllPostsDocument = '
+
);
+
}, 7500);
+11
test/e2e/tsconfig.json
···
+
{
+
"compilerOptions": {
+
"target": "esnext",
+
"module": "esnext",
+
"noEmit": true,
+
"outDir": "dist",
+
"strict": true,
+
"esModuleInterop": true,
+
"moduleResolution": "node"
+
}
+
}