From dba03fc7d793c9010fe1e285ec5debad6c782fd3 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sun, 19 May 2024 10:06:17 -0700 Subject: [PATCH 1/2] fix: esmsh provider es module shims url --- src/common/wrapper.ts | 14 ++++++++++++++ src/generator.ts | 5 +++++ test/html/esmsh.test.js | 25 +++++++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 src/common/wrapper.ts create mode 100644 test/html/esmsh.test.js diff --git a/src/common/wrapper.ts b/src/common/wrapper.ts new file mode 100644 index 0000000..d235b64 --- /dev/null +++ b/src/common/wrapper.ts @@ -0,0 +1,14 @@ +import { fetch } from '#fetch'; +import { parse, init } from 'es-module-lexer'; + +export async function getMaybeWrapperUrl (moduleUrl, fetchOpts) { + await init; + const source = await (await fetch(moduleUrl, fetchOpts)).text(); + const [imports,, facade] = parse(source); + if (facade && imports.length) { + try { + return new URL(imports[0].n, moduleUrl).href; + } catch {} + } + return moduleUrl; +} diff --git a/src/generator.ts b/src/generator.ts index 1c77af9..49d316d 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -43,6 +43,7 @@ import { LockResolutions } from "./install/lock.js"; import { getDefaultProviderStrings, type Provider } from "./providers/index.js"; import * as nodemodules from "./providers/nodemodules.js"; import { Resolver } from "./trace/resolver.js"; +import { getMaybeWrapperUrl } from './common/wrapper.js'; // Utility exports for users: export { analyzeHtml }; @@ -729,6 +730,10 @@ export class Generator { esmsPkg, this.traceMap.installer.defaultProvider )) + "dist/es-module-shims.js"; + + // detect esmsUrl as a wrapper URL + esmsUrl = await getMaybeWrapperUrl(esmsUrl, this.traceMap.resolver.fetchOpts); + if (htmlUrl || rootUrl) esmsUrl = relativeUrl( new URL(esmsUrl), diff --git a/test/html/esmsh.test.js b/test/html/esmsh.test.js new file mode 100644 index 0000000..d1ea0c1 --- /dev/null +++ b/test/html/esmsh.test.js @@ -0,0 +1,25 @@ +import { Generator } from "@jspm/generator"; +import assert from "assert"; +import { SemverRange } from "sver"; + +const generator = new Generator({ + mapUrl: new URL("./local/page.html", import.meta.url), + env: ["production", "browser"], + defaultProvider: 'esm.sh' +}); + +const esmsPkg = await generator.traceMap.resolver.resolveLatestTarget( + { name: "es-module-shims", registry: "npm", ranges: [new SemverRange("*")] }, + generator.traceMap.installer.defaultProvider +); +let pins, html + +html = ` + + +`; +pins = await generator.addMappings(html); + +assert((await generator.htmlInject(html, { pins })).includes('https://esm.sh/v')); From 3da9714d50a638618e8ca717c6d82f4dee72ea6b Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sun, 19 May 2024 10:08:27 -0700 Subject: [PATCH 2/2] fuck you typescript --- src/common/wrapper.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/wrapper.ts b/src/common/wrapper.ts index d235b64..4ea7a49 100644 --- a/src/common/wrapper.ts +++ b/src/common/wrapper.ts @@ -1,3 +1,4 @@ +//@ts-ignore import { fetch } from '#fetch'; import { parse, init } from 'es-module-lexer';