diff --git a/examples/graphql/package.json b/examples/graphql/package.json new file mode 100644 index 000000000000..f9863f6baa51 --- /dev/null +++ b/examples/graphql/package.json @@ -0,0 +1,23 @@ +{ + "name": "@vitest/graphql", + "private": true, + "files": [ + "dist", + "types" + ], + "scripts": { + "coverage": "vitest run --coverage", + "dev": "vite", + "test": "vitest", + "test:ui": "vitest --ui" + }, + "dependencies": { + "@rollup/plugin-graphql": "^1.1.0", + "graphql": "^16.3.0" + }, + "devDependencies": { + "@vitest/ui": "latest", + "vite": "latest", + "vitest": "latest" + } +} \ No newline at end of file diff --git a/examples/graphql/src/Fragment.gql b/examples/graphql/src/Fragment.gql new file mode 100644 index 000000000000..2c229c28ee20 --- /dev/null +++ b/examples/graphql/src/Fragment.gql @@ -0,0 +1,3 @@ +fragment CurrentUserFields on User { + id +} diff --git a/examples/graphql/src/Query.gql b/examples/graphql/src/Query.gql new file mode 100644 index 000000000000..730f6af65c88 --- /dev/null +++ b/examples/graphql/src/Query.gql @@ -0,0 +1,7 @@ +#import "./Fragment.gql" + +query Foo { + currentUser { + ...CurrentUserFields + } +} diff --git a/examples/graphql/src/query.ts b/examples/graphql/src/query.ts new file mode 100644 index 000000000000..0be3149bd118 --- /dev/null +++ b/examples/graphql/src/query.ts @@ -0,0 +1,5 @@ +import QUERY from './Query.gql' + +export function getQuery() { + return QUERY +} diff --git a/examples/graphql/test/query.spec.ts b/examples/graphql/test/query.spec.ts new file mode 100644 index 000000000000..11ad620c97c7 --- /dev/null +++ b/examples/graphql/test/query.spec.ts @@ -0,0 +1,6 @@ +import { expect, test } from 'vitest' +import { getQuery } from '../src/query' + +test('query is defined', () => { + expect(getQuery()).toBeDefined() +}) diff --git a/examples/graphql/vite.config.ts b/examples/graphql/vite.config.ts new file mode 100644 index 000000000000..846a51b4ab45 --- /dev/null +++ b/examples/graphql/vite.config.ts @@ -0,0 +1,9 @@ +/// + +import { defineConfig } from 'vite' +import graphql from '@rollup/plugin-graphql' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [graphql()], +}) diff --git a/packages/vite-node/src/utils.ts b/packages/vite-node/src/utils.ts index db31e8c831ed..292f8c10e492 100644 --- a/packages/vite-node/src/utils.ts +++ b/packages/vite-node/src/utils.ts @@ -19,6 +19,7 @@ export function normalizeId(id: string, base?: string): string { .replace(/^(node|file):/, '') .replace(/^\/+/, '/') // remove duplicate leading slashes .replace(/[?&]v=\w+/, '?') // remove ?v= query + .replace(/\?import/, '') // remove ?import query .replace(/\?$/, '') // remove end query mark } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6e29db93e22..2d5fb65b99c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,6 +100,21 @@ importers: vite: 2.8.1 vitest: link:../../packages/vitest + examples/graphql: + specifiers: + '@rollup/plugin-graphql': ^1.1.0 + '@vitest/ui': latest + graphql: ^16.3.0 + vite: ^2.8.1 + vitest: latest + dependencies: + '@rollup/plugin-graphql': 1.1.0_graphql@16.3.0+rollup@2.67.2 + graphql: 16.3.0 + devDependencies: + '@vitest/ui': link:../../packages/ui + vite: 2.8.1 + vitest: link:../../packages/vitest + examples/lit: specifiers: '@vitest/ui': latest @@ -111,7 +126,7 @@ importers: lit: 2.1.3 devDependencies: '@vitest/ui': link:../../packages/ui - happy-dom: 2.38.0 + happy-dom: 2.39.1 vite: 2.8.1 vitest: link:../../packages/vitest @@ -400,7 +415,7 @@ importers: devDependencies: '@vitejs/plugin-vue': 2.2.0_vite@2.8.1+vue@3.2.26 '@vue/test-utils': 2.0.0-rc.18_vue@3.2.26 - happy-dom: 2.38.0 + happy-dom: 2.39.1 unplugin-auto-import: 0.5.11_c9f0c919646870b330eb2f68bb613c23 unplugin-vue-components: 0.17.18_2b5a3da0f36de7deafc8d4f2e66b93cf vitest: link:../../packages/vitest @@ -417,7 +432,7 @@ importers: devDependencies: '@vitejs/plugin-vue': 2.2.0_vite@2.8.1+vue@3.2.26 '@vue/test-utils': 2.0.0-rc.18_vue@3.2.26 - happy-dom: 2.38.0 + happy-dom: 2.39.1 vitest: link:../../packages/vitest examples/vue-jsx: @@ -433,7 +448,7 @@ importers: '@vitejs/plugin-vue': 2.2.0_vite@2.8.1+vue@3.2.26 '@vitejs/plugin-vue-jsx': 1.3.7 '@vue/test-utils': 2.0.0-rc.18_vue@3.2.26 - happy-dom: 2.38.0 + happy-dom: 2.39.1 vite: 2.8.1 vitest: link:../../packages/vitest vue: 3.2.26 @@ -3417,6 +3432,18 @@ packages: rollup: 2.67.2 dev: true + /@rollup/plugin-graphql/1.1.0_graphql@16.3.0+rollup@2.67.2: + resolution: {integrity: sha512-X+H6oFlprDlnO3D0UiEytdW97AMphPXO0C7KunS7i/rBXIGQRQVDU5WKTXnBu2tfyYbjCTtfhXMSGI0i885PNg==} + peerDependencies: + graphql: '>=0.9.0' + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 4.1.2 + graphql: 16.3.0 + graphql-tag: 2.12.6_graphql@16.3.0 + rollup: 2.67.2 + dev: false + /@rollup/plugin-json/4.1.0_rollup@2.67.2: resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} peerDependencies: @@ -3459,7 +3486,6 @@ packages: dependencies: estree-walker: 2.0.2 picomatch: 2.3.0 - dev: true /@sinonjs/commons/1.8.3: resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} @@ -11133,11 +11159,26 @@ packages: tslib: 2.3.1 dev: false + /graphql-tag/2.12.6_graphql@16.3.0: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.3.0 + tslib: 2.3.1 + dev: false + /graphql/15.8.0: resolution: {integrity: sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==} engines: {node: '>= 10.x'} dev: true + /graphql/16.3.0: + resolution: {integrity: sha512-xm+ANmA16BzCT5pLjuXySbQVFwH3oJctUVdy81w1sV0vBU0KgDdBGtxQOUd5zqOBk/JayAFeG8Dlmeq74rjm/A==} + engines: {node: ^12.22.0 || ^14.16.0 || >=16.0.0} + dev: false + /gzip-size/6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -11171,8 +11212,8 @@ packages: - encoding dev: true - /happy-dom/2.38.0: - resolution: {integrity: sha512-xQaalTijrX2shAZoi9Z1iBKArHtU2KVrRKiYXZELPU4Rnzv0UMggw6ZaLM8eR6k2XPDDwuppV7PZktNhyNM8og==} + /happy-dom/2.39.1: + resolution: {integrity: sha512-xABIR1/klgdPw5yVhQvbrbpU9025dXpr4pPVP4UG0uITzoPGsYruoDYiDNYT69ZhkGrs4K3pg01uD91mijhJcg==} dependencies: css.escape: 1.5.1 he: 1.2.0 @@ -13879,7 +13920,6 @@ packages: /picomatch/2.3.0: resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} engines: {node: '>=8.6'} - dev: true /pidtree/0.3.1: resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==}