From 84348bc1abf796b5b5eeed0365e36b62507810ca Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Wed, 23 Jun 2021 11:48:17 -0400 Subject: [PATCH] Check externals before resolving entrypoint --- snowpack/src/sources/local.ts | 13 +++++++------ test/snowpack/runtime/runtime.test.js | 26 +++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/snowpack/src/sources/local.ts b/snowpack/src/sources/local.ts index fd0381f07f..085b36d431 100644 --- a/snowpack/src/sources/local.ts +++ b/snowpack/src/sources/local.ts @@ -677,6 +677,13 @@ export class PackageSourceLocal implements PackageSource { spec = spec.replace(from, to); } + const [packageName] = parsePackageImportSpecifier(spec); + + // If this import is marked as external, do not transform the original spec + if (this.isExternal(packageName, spec)) { + return spec; + } + const entrypoint = resolveEntrypoint(spec, { cwd: source, packageLookupFields: [ @@ -694,12 +701,6 @@ export class PackageSourceLocal implements PackageSource { return path.posix.join(config.buildOptions.metaUrlPath, 'pkg', memoizedResolve[entrypoint]); } } - const [packageName] = parsePackageImportSpecifier(spec); - - // If this import is marked as external, do not transform the original spec - if (this.isExternal(packageName, spec)) { - return spec; - } const isSymlink = !entrypoint.includes(path.join('node_modules', packageName)); const isWithinRoot = config.workspaceRoot && entrypoint.startsWith(config.workspaceRoot); diff --git a/test/snowpack/runtime/runtime.test.js b/test/snowpack/runtime/runtime.test.js index ce396aa02c..9a2ae07ee9 100644 --- a/test/snowpack/runtime/runtime.test.js +++ b/test/snowpack/runtime/runtime.test.js @@ -53,16 +53,39 @@ describe('runtime', () => { // https://github.com/nodejs/node/issues/35889 it.skip('Provides import.meta.fileURL in SSR', async () => { const fixture = await testRuntimeFixture({ + 'packages/dep/package.json': dedent` + { + "name": "@snowpack/test-runtime-metaurl-dep", + "version": "0.0.1", + "main": "main.js" + } + `, + 'packages/dep/main.js': dedent` + import fs from 'node:fs'; + const readFile = fs.promises.readFile; + + export async function getData(url) { + const json = await fs.readFile(url, 'utf-8'); + const data = JSON.parse(json); + return data; + } + `, 'main.js': dedent` import fs from 'node:fs/promises'; + import { getData as getDataDepFn } from '@snowpack/test-runtime-metaurl-dep'; const url = new URL('./data.json', import.meta.url); + const depUrl = new URL('./packages/dep/package.json', import.meta.url); export async function getData() { const json = await fs.readFile(url, 'utf-8'); const data = JSON.parse(json); return data; } + + export async function getDepVersion() { + return (await getDataDepFn(depUrl)).version; + } `, 'data.json': dedent` [ 1, 2 ] @@ -70,7 +93,7 @@ describe('runtime', () => { 'package.json': dedent` { "version": "1.0.1", - "name": "@snowpack/test-runtime-invalidate" + "name": "@snowpack/test-runtime-metaurl" } `, 'snowpack.config.json': dedent` @@ -86,6 +109,7 @@ describe('runtime', () => { let mod = await fixture.runtime.importModule('/main.js'); expect(await mod.exports.getData()).toStrictEqual([1, 2]); + expect(await mod.exports.getDepVersion()).equal('0.0.1'); } finally { await fixture.cleanup(); }