diff --git a/.changeset/five-houses-serve.md b/.changeset/five-houses-serve.md new file mode 100644 index 000000000..7f60c2f84 --- /dev/null +++ b/.changeset/five-houses-serve.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/vite-plugin-svelte': patch +--- + +do not use require-relative to resolve svelte field of libraries and cache resolved values (fixes #244) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 00135357b..971fe34ff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,9 +34,7 @@ jobs: cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' - name: install - run: | - pnpm install --frozen-lockfile --prefer-offline --ignore-scripts - node node_modules/esbuild/install.js + run: pnpm install --frozen-lockfile --prefer-offline --ignore-scripts - name: build id: build run: pnpm run build @@ -58,7 +56,7 @@ jobs: fail-fast: false matrix: node: [16] - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-latest, macos-latest, windows-2019] include: - node: 14 os: ubuntu-latest @@ -74,9 +72,7 @@ jobs: cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' - name: install - run: | - pnpm install --frozen-lockfile --prefer-offline --ignore-scripts - node node_modules/esbuild/install.js + run: pnpm install --frozen-lockfile --prefer-offline --ignore-scripts - name: build run: pnpm run build:ci - name: run tests diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6da993c24..a1ee480ea 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,9 +32,7 @@ jobs: cache: 'pnpm' cache-dependency-path: '**/pnpm-lock.yaml' - name: install - run: | - pnpm install --frozen-lockfile --prefer-offline --ignore-scripts - node node_modules/esbuild/install.js + run: pnpm install --frozen-lockfile --prefer-offline --ignore-scripts - name: Creating .npmrc run: | diff --git a/package.json b/package.json index 6b48c247a..0f4806ea0 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "svelte": "^3.46.2", "ts-jest": "^27.1.3", "typescript": "^4.5.4", - "vite": "^2.7.12" + "vite": "^2.7.13" }, "lint-staged": { "*.{js,ts,svelte,html,md,svx}": "eslint --fix", @@ -74,7 +74,7 @@ "pnpm": { "overrides": { "@sveltejs/vite-plugin-svelte": "workspace:*", - "vite": "^2.7.10", + "vite": "^2.7.13", "ansi-regex@>2.1.1 <5.0.1": "^5.0.1" } } diff --git a/packages/e2e-tests/autoprefixer-browerslist/package.json b/packages/e2e-tests/autoprefixer-browerslist/package.json index 65a869008..e84be147d 100644 --- a/packages/e2e-tests/autoprefixer-browerslist/package.json +++ b/packages/e2e-tests/autoprefixer-browerslist/package.json @@ -17,6 +17,6 @@ "postcss-load-config": "^3.1.1", "svelte": "^3.46.2", "svelte-preprocess": "^4.10.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/e2e-tests/configfile-custom/package.json b/packages/e2e-tests/configfile-custom/package.json index 92975640b..0cb166976 100644 --- a/packages/e2e-tests/configfile-custom/package.json +++ b/packages/e2e-tests/configfile-custom/package.json @@ -13,6 +13,6 @@ "devDependencies": { "@sveltejs/vite-plugin-svelte": "workspace:*", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/e2e-tests/configfile-esm/package.json b/packages/e2e-tests/configfile-esm/package.json index 0cd7eea35..9fc250f2c 100644 --- a/packages/e2e-tests/configfile-esm/package.json +++ b/packages/e2e-tests/configfile-esm/package.json @@ -14,7 +14,7 @@ "@sveltejs/vite-plugin-svelte": "workspace:*", "svelte": "^3.46.2", "svelte-preprocess": "^4.10.2", - "vite": "^2.7.12" + "vite": "^2.7.13" }, "type": "module" } diff --git a/packages/e2e-tests/custom-extensions/package.json b/packages/e2e-tests/custom-extensions/package.json index 085a3c57d..bf4414461 100644 --- a/packages/e2e-tests/custom-extensions/package.json +++ b/packages/e2e-tests/custom-extensions/package.json @@ -10,6 +10,6 @@ "devDependencies": { "@sveltejs/vite-plugin-svelte": "workspace:*", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/e2e-tests/env/package.json b/packages/e2e-tests/env/package.json index 71ff8a64d..1e060ee6d 100644 --- a/packages/e2e-tests/env/package.json +++ b/packages/e2e-tests/env/package.json @@ -10,7 +10,7 @@ "devDependencies": { "@sveltejs/vite-plugin-svelte": "workspace:*", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" }, "type": "module" } diff --git a/packages/e2e-tests/hmr/package.json b/packages/e2e-tests/hmr/package.json index 98955c70e..02630ec09 100644 --- a/packages/e2e-tests/hmr/package.json +++ b/packages/e2e-tests/hmr/package.json @@ -14,6 +14,6 @@ "@sveltejs/vite-plugin-svelte": "workspace:*", "node-fetch": "^2.6.6", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/e2e-tests/package-json-svelte-field/package.json b/packages/e2e-tests/package-json-svelte-field/package.json index 494fb8458..d4b467393 100644 --- a/packages/e2e-tests/package-json-svelte-field/package.json +++ b/packages/e2e-tests/package-json-svelte-field/package.json @@ -14,6 +14,6 @@ "devDependencies": { "@sveltejs/vite-plugin-svelte": "workspace:*", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/e2e-tests/preprocess-with-vite/package.json b/packages/e2e-tests/preprocess-with-vite/package.json index 15b49aae8..792d88d1f 100644 --- a/packages/e2e-tests/preprocess-with-vite/package.json +++ b/packages/e2e-tests/preprocess-with-vite/package.json @@ -12,6 +12,6 @@ "sass": "^1.48.0", "stylus": "^0.56.0", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/e2e-tests/svelte-preprocess/package.json b/packages/e2e-tests/svelte-preprocess/package.json index c66cb488a..6b3056996 100644 --- a/packages/e2e-tests/svelte-preprocess/package.json +++ b/packages/e2e-tests/svelte-preprocess/package.json @@ -12,6 +12,6 @@ "svelte": "^3.46.2", "svelte-preprocess": "^4.10.2", "typescript": "^4.5.4", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/e2e-tests/ts-type-import/package.json b/packages/e2e-tests/ts-type-import/package.json index 0dff08e4f..ee40ce9d3 100644 --- a/packages/e2e-tests/ts-type-import/package.json +++ b/packages/e2e-tests/ts-type-import/package.json @@ -12,6 +12,6 @@ "@tsconfig/svelte": "^3.0.0", "@types/node": "^17.0.7", "svelte-preprocess": "^4.10.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/e2e-tests/vite-ssr-esm/package.json b/packages/e2e-tests/vite-ssr-esm/package.json index bb7866626..bb454ba79 100644 --- a/packages/e2e-tests/vite-ssr-esm/package.json +++ b/packages/e2e-tests/vite-ssr-esm/package.json @@ -21,6 +21,6 @@ "npm-run-all": "^4.1.5", "serve-static": "^1.14.2", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/e2e-tests/vite-ssr/package.json b/packages/e2e-tests/vite-ssr/package.json index 022cf7dd3..867470a85 100644 --- a/packages/e2e-tests/vite-ssr/package.json +++ b/packages/e2e-tests/vite-ssr/package.json @@ -18,6 +18,6 @@ "express": "^4.17.2", "serve-static": "^1.14.2", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/playground/big-component-library/package.json b/packages/playground/big-component-library/package.json index 60893e4d2..37b37ea29 100644 --- a/packages/playground/big-component-library/package.json +++ b/packages/playground/big-component-library/package.json @@ -12,6 +12,6 @@ "@sveltejs/vite-plugin-svelte": "workspace:*", "carbon-components-svelte": "^0.52.0", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/playground/big/package.json b/packages/playground/big/package.json index f4e763ac7..d375d600e 100644 --- a/packages/playground/big/package.json +++ b/packages/playground/big/package.json @@ -10,6 +10,6 @@ "devDependencies": { "@sveltejs/vite-plugin-svelte": "workspace:*", "svelte": "^3.46.2", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/playground/optimizedeps-include/package.json b/packages/playground/optimizedeps-include/package.json index b636ab8a5..c9380a0b7 100644 --- a/packages/playground/optimizedeps-include/package.json +++ b/packages/playground/optimizedeps-include/package.json @@ -12,6 +12,6 @@ "@sveltejs/vite-plugin-svelte": "workspace:*", "svelte": "^3.46.2", "tinro": "^0.6.10", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/playground/windicss/package.json b/packages/playground/windicss/package.json index c40d69533..1fb4f898b 100644 --- a/packages/playground/windicss/package.json +++ b/packages/playground/windicss/package.json @@ -14,7 +14,7 @@ "@sveltejs/vite-plugin-svelte": "workspace:*", "diff-match-patch": "^1.0.5", "svelte": "^3.46.2", - "vite": "^2.7.12", + "vite": "^2.7.13", "vite-plugin-windicss": "^1.6.3" } } diff --git a/packages/vite-plugin-svelte/package.json b/packages/vite-plugin-svelte/package.json index ea0212f29..ad3876209 100644 --- a/packages/vite-plugin-svelte/package.json +++ b/packages/vite-plugin-svelte/package.json @@ -49,7 +49,6 @@ "debug": "^4.3.3", "kleur": "^4.1.4", "magic-string": "^0.25.7", - "require-relative": "^0.8.7", "svelte-hmr": "^0.14.9" }, "peerDependencies": { @@ -70,6 +69,6 @@ "rollup": "^2.64.0", "svelte": "^3.46.2", "tsup": "^5.11.11", - "vite": "^2.7.12" + "vite": "^2.7.13" } } diff --git a/packages/vite-plugin-svelte/src/index.ts b/packages/vite-plugin-svelte/src/index.ts index 96c9e0015..c3883b0d3 100644 --- a/packages/vite-plugin-svelte/src/index.ts +++ b/packages/vite-plugin-svelte/src/index.ts @@ -27,7 +27,7 @@ export function svelte(inlineOptions?: Partial): Plugin { } validateInlineOptions(inlineOptions); const cache = new VitePluginSvelteCache(); - const pkg_export_errors = new Set(); + const pkg_resolve_errors = new Set(); // updated in configResolved hook let requestParser: IdParser; let options: ResolvedOptions; @@ -137,21 +137,13 @@ export function svelte(inlineOptions?: Partial): Plugin { } try { - const resolved = resolveViaPackageJsonSvelte(importee, importer); + const resolved = resolveViaPackageJsonSvelte(importee, importer, cache); if (resolved) { log.debug(`resolveId resolved ${resolved} via package.json svelte field of ${importee}`); return resolved; } } catch (err) { - switch (err.code) { - case 'ERR_PACKAGE_PATH_NOT_EXPORTED': - pkg_export_errors.add(importee); - return null; - case 'MODULE_NOT_FOUND': - return null; - default: - throw err; - } + pkg_resolve_errors.add(importee); } }, @@ -206,10 +198,11 @@ export function svelte(inlineOptions?: Partial): Plugin { */ // TODO generateBundle isn't called by vite, is buildEnd enough or should it be logged once per violation in resolve buildEnd() { - if (pkg_export_errors.size > 0) { + if (pkg_resolve_errors.size > 0) { log.warn( - `The following packages did not export their \`package.json\` file so we could not check the "svelte" field. If you had difficulties importing svelte components from a package, then please contact the author and ask them to export the package.json file.`, - Array.from(pkg_export_errors, (s) => `- ${s}`).join('\n') + `vite-plugin-svelte was unable to find package.json of the following packages and wasn't able to resolve via their "svelte" field. + If you had difficulties importing svelte components from a package, then please contact the author and ask them to export the package.json file. + ${Array.from(pkg_resolve_errors, (s) => `- ${s}`).join('\n')}`.replace(/\t/g, '') ); } } diff --git a/packages/vite-plugin-svelte/src/utils/dependencies.ts b/packages/vite-plugin-svelte/src/utils/dependencies.ts index ca067fc1e..18dc88807 100644 --- a/packages/vite-plugin-svelte/src/utils/dependencies.ts +++ b/packages/vite-plugin-svelte/src/utils/dependencies.ts @@ -66,7 +66,10 @@ function getSvelteDependencies( return result; } -function resolveDependencyData(dep: string, localRequire: NodeRequire): DependencyData | void { +export function resolveDependencyData( + dep: string, + localRequire: NodeRequire +): DependencyData | void { try { const pkgJson = `${dep}/package.json`; const pkg = localRequire(pkgJson); @@ -166,7 +169,7 @@ const COMMON_PREFIXES_WITHOUT_SVELTE_FIELD = [ * @param dependency {string} * @returns {boolean} true if it is a dependency without a svelte field */ -function is_common_without_svelte_field(dependency: string): boolean { +export function is_common_without_svelte_field(dependency: string): boolean { return ( COMMON_DEPENDENCIES_WITHOUT_SVELTE_FIELD.includes(dependency) || COMMON_PREFIXES_WITHOUT_SVELTE_FIELD.some( diff --git a/packages/vite-plugin-svelte/src/utils/resolve.ts b/packages/vite-plugin-svelte/src/utils/resolve.ts index 426cd5c0d..543df354c 100644 --- a/packages/vite-plugin-svelte/src/utils/resolve.ts +++ b/packages/vite-plugin-svelte/src/utils/resolve.ts @@ -1,14 +1,29 @@ import path from 'path'; -import fs from 'fs'; -// @ts-ignore -import relative from 'require-relative'; +import { createRequire } from 'module'; +import { is_common_without_svelte_field, resolveDependencyData } from './dependencies'; +import { VitePluginSvelteCache } from './vite-plugin-svelte-cache'; -export function resolveViaPackageJsonSvelte(importee: string, importer?: string): string | void { - if (importer && isBareImport(importee)) { - const importeePkgFile = relative.resolve(`${importee}/package.json`, path.dirname(importer)); - const importeePkg = JSON.parse(fs.readFileSync(importeePkgFile, { encoding: 'utf-8' })); - if (importeePkg.svelte) { - return path.resolve(path.dirname(importeePkgFile), importeePkg.svelte); +export function resolveViaPackageJsonSvelte( + importee: string, + importer: string | undefined, + cache: VitePluginSvelteCache +): string | void { + if (importer && isBareImport(importee) && !is_common_without_svelte_field(importee)) { + const cached = cache.getResolvedSvelteField(importee, importer); + if (cached) { + return cached; + } + const localRequire = createRequire(importer); + const pkgData = resolveDependencyData(importee, localRequire); + if (pkgData) { + const { pkg, dir } = pkgData; + if (pkg.svelte) { + const result = path.resolve(dir, pkg.svelte); + cache.setResolvedSvelteField(importee, importer, result); + return result; + } + } else { + throw new Error(`failed to resolve package.json of ${importee} imported by ${importer}`); } } } diff --git a/packages/vite-plugin-svelte/src/utils/vite-plugin-svelte-cache.ts b/packages/vite-plugin-svelte/src/utils/vite-plugin-svelte-cache.ts index 2fff816c9..030b9bcd4 100644 --- a/packages/vite-plugin-svelte/src/utils/vite-plugin-svelte-cache.ts +++ b/packages/vite-plugin-svelte/src/utils/vite-plugin-svelte-cache.ts @@ -6,6 +6,7 @@ export class VitePluginSvelteCache { private _js = new Map(); private _dependencies = new Map(); private _dependants = new Map>(); + private _resolvedSvelteFields = new Map(); public update(compileData: CompileData) { this.updateCSS(compileData); @@ -80,4 +81,23 @@ export class VitePluginSvelteCache { const dependants = this._dependants.get(path); return dependants ? [...dependants] : []; } + + public getResolvedSvelteField(name: string, importer?: string): string | void { + return this._resolvedSvelteFields.get(this._getResolvedSvelteFieldKey(name, importer)); + } + + public setResolvedSvelteField( + importee: string, + importer: string | undefined = undefined, + resolvedSvelte: string + ) { + this._resolvedSvelteFields.set( + this._getResolvedSvelteFieldKey(importee, importer), + resolvedSvelte + ); + } + + private _getResolvedSvelteFieldKey(importee: string, importer?: string): string { + return importer ? `${importer} > ${importee}` : importee; + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d2cac8a8c..ff01ba2d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,7 +2,7 @@ lockfileVersion: 5.3 overrides: '@sveltejs/vite-plugin-svelte': workspace:* - vite: ^2.7.10 + vite: ^2.7.13 ansi-regex@>2.1.1 <5.0.1: ^5.0.1 importers: @@ -44,7 +44,7 @@ importers: svelte: ^3.46.2 ts-jest: ^27.1.3 typescript: ^4.5.4 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@changesets/cli': 2.19.0 '@changesets/get-github-info': 0.5.0 @@ -81,7 +81,7 @@ importers: svelte: 3.46.2 ts-jest: 27.1.3_7609bee14171c797989ff7e78c897b81 typescript: 4.5.4 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests: specifiers: @@ -139,7 +139,7 @@ importers: postcss-load-config: ^3.1.1 svelte: ^3.46.2 svelte-preprocess: ^4.10.2 - vite: ^2.7.10 + vite: ^2.7.13 dependencies: e2e-test-dep-svelte-simple: link:../_test_dependencies/svelte-simple devDependencies: @@ -149,20 +149,20 @@ importers: postcss-load-config: 3.1.1 svelte: 3.46.2 svelte-preprocess: 4.10.2_710b513d204acccb6fab5a2e92cd973a - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/configfile-custom: specifiers: '@sveltejs/vite-plugin-svelte': workspace:* e2e-test-dep-svelte-simple: workspace:* svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 dependencies: e2e-test-dep-svelte-simple: link:../_test_dependencies/svelte-simple devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/configfile-esm: specifiers: @@ -170,34 +170,34 @@ importers: e2e-test-dep-svelte-simple: workspace:* svelte: ^3.46.2 svelte-preprocess: ^4.10.2 - vite: ^2.7.10 + vite: ^2.7.13 dependencies: e2e-test-dep-svelte-simple: link:../_test_dependencies/svelte-simple devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte svelte: 3.46.2 svelte-preprocess: 4.10.2_svelte@3.46.2+typescript@4.5.4 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/custom-extensions: specifiers: '@sveltejs/vite-plugin-svelte': workspace:* svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/env: specifiers: '@sveltejs/vite-plugin-svelte': workspace:* svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/hmr: specifiers: @@ -205,14 +205,14 @@ importers: e2e-test-dep-svelte-simple: workspace:* node-fetch: ^2.6.6 svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 dependencies: e2e-test-dep-svelte-simple: link:../_test_dependencies/svelte-simple devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte node-fetch: 2.6.6 svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/kit-node: specifiers: @@ -234,14 +234,14 @@ importers: e2e-test-dep-svelte-hybrid: workspace:* e2e-test-dep-svelte-nested: workspace:* svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 dependencies: e2e-test-dep-svelte-hybrid: link:../_test_dependencies/svelte-hybrid e2e-test-dep-svelte-nested: link:../_test_dependencies/svelte-nested devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/preprocess-with-vite: specifiers: @@ -249,13 +249,13 @@ importers: sass: ^1.48.0 stylus: ^0.56.0 svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte sass: 1.48.0 stylus: 0.56.0 svelte: 3.46.2 - vite: 2.7.10_sass@1.48.0+stylus@0.56.0 + vite: 2.7.13_sass@1.48.0+stylus@0.56.0 packages/e2e-tests/svelte-preprocess: specifiers: @@ -263,13 +263,13 @@ importers: svelte: ^3.46.2 svelte-preprocess: ^4.10.2 typescript: ^4.5.4 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte svelte: 3.46.2 svelte-preprocess: 4.10.2_svelte@3.46.2+typescript@4.5.4 typescript: 4.5.4 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/ts-type-import: specifiers: @@ -277,13 +277,13 @@ importers: '@tsconfig/svelte': ^3.0.0 '@types/node': ^17.0.7 svelte-preprocess: ^4.10.2 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte '@tsconfig/svelte': 3.0.0 '@types/node': 17.0.7 svelte-preprocess: 4.10.2_svelte@3.46.2+typescript@4.5.4 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/vite-ssr: specifiers: @@ -294,7 +294,7 @@ importers: express: ^4.17.2 serve-static: ^1.14.2 svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte compression: 1.7.4 @@ -303,7 +303,7 @@ importers: express: 4.17.2 serve-static: 1.14.2 svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 packages/e2e-tests/vite-ssr-esm: specifiers: @@ -316,7 +316,7 @@ importers: npm-run-all: ^4.1.5 serve-static: ^1.14.2 svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte compression: 1.7.4 @@ -327,7 +327,7 @@ importers: npm-run-all: 4.1.5 serve-static: 1.14.2 svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 packages/playground: specifiers: {} @@ -336,23 +336,23 @@ importers: specifiers: '@sveltejs/vite-plugin-svelte': workspace:* svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 packages/playground/big-component-library: specifiers: '@sveltejs/vite-plugin-svelte': workspace:* carbon-components-svelte: ^0.52.0 svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte carbon-components-svelte: 0.52.0 svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 packages/playground/kit-demo-app: specifiers: @@ -376,19 +376,19 @@ importers: '@sveltejs/vite-plugin-svelte': workspace:* svelte: ^3.46.2 tinro: ^0.6.10 - vite: ^2.7.10 + vite: ^2.7.13 devDependencies: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte svelte: 3.46.2 tinro: 0.6.10 - vite: 2.7.10 + vite: 2.7.13 packages/playground/windicss: specifiers: '@sveltejs/vite-plugin-svelte': workspace:* diff-match-patch: ^1.0.5 svelte: ^3.46.2 - vite: ^2.7.10 + vite: ^2.7.13 vite-plugin-windicss: ^1.6.3 windicss: ^3.4.3 dependencies: @@ -397,8 +397,8 @@ importers: '@sveltejs/vite-plugin-svelte': link:../../vite-plugin-svelte diff-match-patch: 1.0.5 svelte: 3.46.2 - vite: 2.7.10 - vite-plugin-windicss: 1.6.3_vite@2.7.10 + vite: 2.7.13 + vite-plugin-windicss: 1.6.3_vite@2.7.13 packages/vite-plugin-svelte: specifiers: @@ -410,18 +410,16 @@ importers: esbuild: ^0.14.11 kleur: ^4.1.4 magic-string: ^0.25.7 - require-relative: ^0.8.7 rollup: ^2.64.0 svelte: ^3.46.2 svelte-hmr: ^0.14.9 tsup: ^5.11.11 - vite: ^2.7.10 + vite: ^2.7.13 dependencies: '@rollup/pluginutils': 4.1.2 debug: 4.3.3 kleur: 4.1.4 magic-string: 0.25.7 - require-relative: 0.8.7 svelte-hmr: 0.14.9_svelte@3.46.2 devDependencies: '@types/debug': 4.1.7 @@ -431,7 +429,7 @@ importers: rollup: 2.64.0 svelte: 3.46.2 tsup: 5.11.11_typescript@4.5.4 - vite: 2.7.10 + vite: 2.7.13 packages: @@ -1315,7 +1313,7 @@ packages: '@sveltejs/vite-plugin-svelte': link:packages/vite-plugin-svelte sade: 1.8.0 svelte: 3.46.2 - vite: 2.7.10 + vite: 2.7.13 transitivePeerDependencies: - less - sass @@ -3992,6 +3990,12 @@ packages: has: 1.0.3 dev: true + /is-core-module/2.8.1: + resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} + dependencies: + has: 1.0.3 + dev: true + /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -5146,8 +5150,8 @@ packages: thenify-all: 1.6.0 dev: true - /nanoid/3.1.30: - resolution: {integrity: sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==} + /nanoid/3.2.0: + resolution: {integrity: sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true @@ -5550,9 +5554,9 @@ packages: resolution: {integrity: sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.1.30 + nanoid: 3.2.0 picocolors: 1.0.0 - source-map-js: 1.0.1 + source-map-js: 1.0.2 dev: true /preferred-pm/3.0.3: @@ -5780,10 +5784,6 @@ packages: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - /require-relative/0.8.7: - resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} - dev: false - /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -5813,6 +5813,15 @@ packages: path-parse: 1.0.7 dev: true + /resolve/1.21.0: + resolution: {integrity: sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==} + hasBin: true + dependencies: + is-core-module: 2.8.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /restore-cursor/3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -5849,14 +5858,6 @@ packages: glob: 7.2.0 dev: true - /rollup/2.62.0: - resolution: {integrity: sha512-cJEQq2gwB0GWMD3rYImefQTSjrPYaC6s4J9pYqnstVLJ1CHa/aZNVkD4Epuvg4iLeMA4KRiq7UM7awKK6j7jcw==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - /rollup/2.64.0: resolution: {integrity: sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==} engines: {node: '>=10.0.0'} @@ -6107,6 +6108,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + /source-map-resolve/0.6.0: resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} dependencies: @@ -6366,6 +6372,11 @@ packages: supports-color: 7.2.0 dev: true + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + /svelte-hmr/0.14.9_svelte@3.46.2: resolution: {integrity: sha512-bKE9+4qb4sAnA+TKHiYurUl970rjA0XmlP9TEP7K/ncyWz3m81kA4HOgmlZK/7irGK7gzZlaPDI3cmf8fp/+tg==} peerDependencies: @@ -6859,7 +6870,7 @@ packages: engines: {node: '>= 0.8'} dev: true - /vite-plugin-windicss/1.6.3_vite@2.7.10: + /vite-plugin-windicss/1.6.3_vite@2.7.13: resolution: {integrity: sha512-D4fEUcAPoLRLdDZMee8NrHZHmn0Qj7AjSg1xNGBnZsMTwRPj93NKZk0fIIUoiKTEh1KrdQejW8g6cg0SgGKTww==} peerDependencies: vite: ^2.0.1 @@ -6867,14 +6878,14 @@ packages: '@windicss/plugin-utils': 1.6.3 debug: 4.3.3 kolorist: 1.5.1 - vite: 2.7.10 + vite: 2.7.13 windicss: 3.4.3 transitivePeerDependencies: - supports-color dev: true - /vite/2.7.10: - resolution: {integrity: sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w==} + /vite/2.7.13: + resolution: {integrity: sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==} engines: {node: '>=12.2.0'} hasBin: true peerDependencies: @@ -6891,14 +6902,14 @@ packages: dependencies: esbuild: 0.13.15 postcss: 8.4.5 - resolve: 1.20.0 - rollup: 2.62.0 + resolve: 1.21.0 + rollup: 2.64.0 optionalDependencies: fsevents: 2.3.2 dev: true - /vite/2.7.10_sass@1.48.0+stylus@0.56.0: - resolution: {integrity: sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w==} + /vite/2.7.13_sass@1.48.0+stylus@0.56.0: + resolution: {integrity: sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==} engines: {node: '>=12.2.0'} hasBin: true peerDependencies: @@ -6915,8 +6926,8 @@ packages: dependencies: esbuild: 0.13.15 postcss: 8.4.5 - resolve: 1.20.0 - rollup: 2.62.0 + resolve: 1.21.0 + rollup: 2.64.0 sass: 1.48.0 stylus: 0.56.0 optionalDependencies: diff --git a/scripts/jestGlobalSetup.js b/scripts/jestGlobalSetup.js index fbe88d86c..4164c9850 100644 --- a/scripts/jestGlobalSetup.js +++ b/scripts/jestGlobalSetup.js @@ -76,16 +76,18 @@ module.exports = async () => { await buildPackagesUnderTest(); console.log('preparations done'); } - + console.log('Starting playwright server ...'); const browserServer = await startPlaywrightServer(); - + console.log('Playwright server running'); global.__BROWSER_SERVER__ = browserServer; - + console.log('storing wsEndpoint in ' + DIR); await fs.mkdirp(DIR); await fs.writeFile(path.join(DIR, 'wsEndpoint'), browserServer.wsEndpoint()); + console.log('clearing previous test artifacts'); if (!process.env.VITE_PRESERVE_BUILD_ARTIFACTS) { await fs.remove(path.resolve(__dirname, '..', 'temp')); } else { await fs.remove(path.resolve(__dirname, '..', 'temp', isBuildTest ? 'build' : 'serve')); } + console.log('jest global setup done'); }; diff --git a/scripts/jestPerTestSetup.ts b/scripts/jestPerTestSetup.ts index 14b04484e..0786f93f1 100644 --- a/scripts/jestPerTestSetup.ts +++ b/scripts/jestPerTestSetup.ts @@ -3,6 +3,8 @@ import * as path from 'path'; import { Page } from 'playwright-core'; const isBuild = !!process.env.VITE_TEST_BUILD; +const isWin = process.platform === 'win32'; +const isCI = !!process.env.CI; function testDir() { const testPath = expect.getState().testPath; @@ -62,78 +64,81 @@ const getUniqueTestPort = async (testRoot, testName, isBuild) => { return (isBuild ? 5500 : 3500) + idx; }; -beforeAll(async () => { - const page = (global as any).page; - if (!page) { - return; - } - const testPath = expect.getState().testPath; - const segments = testPath.split(path.sep); - const testName = segments.includes('e2e-tests') - ? segments[segments.indexOf('e2e-tests') + 1] - : null; - try { - // if this is a test placed under e2e-tests/xxx/__tests__ - // start a vite server in that directory. - if (testName) { - page.on('console', onConsole); - const e2eTestsRoot = path.resolve(__dirname, '../packages/e2e-tests'); - const srcDir = path.resolve(e2eTestsRoot, testName); +beforeAll( + async () => { + const page = (global as any).page; + if (!page) { + return; + } + const testPath = expect.getState().testPath; + const segments = testPath.split(path.sep); + const testName = segments.includes('e2e-tests') + ? segments[segments.indexOf('e2e-tests') + 1] + : null; + try { + // if this is a test placed under e2e-tests/xxx/__tests__ + // start a vite server in that directory. + if (testName) { + page.on('console', onConsole); + const e2eTestsRoot = path.resolve(__dirname, '../packages/e2e-tests'); + const srcDir = path.resolve(e2eTestsRoot, testName); - tempDir = path.resolve(__dirname, '../temp', isBuild ? 'build' : 'serve', testName); - const directoriesToIgnore = [ - 'node_modules', - '__tests__', - 'dist', - 'build', - '.svelte', - '.svelte-kit' - ]; - const isIgnored = (file) => { - const segments = file.split(path.sep); - return segments.some((segment) => directoriesToIgnore.includes(segment)); - }; - await fs.copy(srcDir, tempDir, { - dereference: true, - filter(file) { - return !isIgnored(file); - } - }); + tempDir = path.resolve(__dirname, '../temp', isBuild ? 'build' : 'serve', testName); + const directoriesToIgnore = [ + 'node_modules', + '__tests__', + 'dist', + 'build', + '.svelte', + '.svelte-kit' + ]; + const isIgnored = (file) => { + const segments = file.split(path.sep); + return segments.some((segment) => directoriesToIgnore.includes(segment)); + }; + await fs.copy(srcDir, tempDir, { + dereference: true, + filter(file) { + return !isIgnored(file); + } + }); - const e2e_tests_node_modules = path.join(srcDir, 'node_modules'); - const temp_node_modules = path.join(tempDir, 'node_modules'); - if (fs.existsSync(temp_node_modules)) { - console.error('temp node_modules already exist', temp_node_modules); + const e2e_tests_node_modules = path.join(srcDir, 'node_modules'); + const temp_node_modules = path.join(tempDir, 'node_modules'); + if (fs.existsSync(temp_node_modules)) { + console.error('temp node_modules already exist', temp_node_modules); + } + await fs.symlink(e2e_tests_node_modules, temp_node_modules, 'dir'); + const stat = fs.lstatSync(temp_node_modules); + if (!stat.isSymbolicLink()) { + console.error(`failed to symlink ${e2e_tests_node_modules} to ${temp_node_modules}`); + } + await fs.mkdir(path.join(tempDir, 'logs')); + const customServerScript = path.resolve(path.dirname(testPath), 'serve.js'); + const defaultServerScript = path.resolve(e2eTestsRoot, 'e2e-server.js'); + const hasCustomServer = fs.existsSync(customServerScript); + const { serve } = require(hasCustomServer ? customServerScript : defaultServerScript); + const port = await getUniqueTestPort(e2eTestsRoot, testName, isBuild); + server = await serve(tempDir, isBuild, port); + (global as any).e2eServer = server; + const url = ((global as any).viteTestUrl = `http://localhost:${port}`); + await (isBuild ? page.goto(url) : goToUrlAndWaitForViteWSConnect(page, url)); } - await fs.symlink(e2e_tests_node_modules, temp_node_modules, 'dir'); - const stat = fs.lstatSync(temp_node_modules); - if (!stat.isSymbolicLink()) { - console.error(`failed to symlink ${e2e_tests_node_modules} to ${temp_node_modules}`); + } catch (e) { + // jest doesn't exit if our setup has error here + // https://github.com/facebook/jest/issues/2713 + err = e; + console.error(`beforeAll failed for ${testName}.`, e); + // tests are still executed so close page to shorten + try { + await page.close(); + } catch (e2) { + console.error('failed to close page on error', e2); } - await fs.mkdir(path.join(tempDir, 'logs')); - const customServerScript = path.resolve(path.dirname(testPath), 'serve.js'); - const defaultServerScript = path.resolve(e2eTestsRoot, 'e2e-server.js'); - const hasCustomServer = fs.existsSync(customServerScript); - const { serve } = require(hasCustomServer ? customServerScript : defaultServerScript); - const port = await getUniqueTestPort(e2eTestsRoot, testName, isBuild); - server = await serve(tempDir, isBuild, port); - (global as any).e2eServer = server; - const url = ((global as any).viteTestUrl = `http://localhost:${port}`); - await (isBuild ? page.goto(url) : goToUrlAndWaitForViteWSConnect(page, url)); - } - } catch (e) { - // jest doesn't exit if our setup has error here - // https://github.com/facebook/jest/issues/2713 - err = e; - console.error(`beforeAll failed for ${testName}.`, e); - // tests are still executed so close page to shorten - try { - await page.close(); - } catch (e2) { - console.error('failed to close page on error', e2); } - } -}, 30000); + }, + isCI ? (isWin ? 60000 : 30000) : 15000 +); afterAll(async () => { try {