@@ -2,9 +2,11 @@ import { URL, pathToFileURL, fileURLToPath } from 'url'
22import fs from 'fs'
33import { dirname } from 'path'
44import { transformSync , build } from 'esbuild'
5+ import fetch from 'node-fetch'
56
67const isWindows = process . platform === 'win32'
78
9+ const httpRegex = / ^ h t t p s ? : \/ \/ /
810const extensionsRegex = / \. m ? ( t s x ? | j s o n ) $ /
911
1012async function esbuildResolve ( id , dir ) {
@@ -95,6 +97,13 @@ export async function resolve(specifier, context, defaultResolve) {
9597 parentURL,
9698 } = context
9799
100+ if ( httpRegex . test ( specifier ) || httpRegex . test ( parentURL ) ) {
101+ return {
102+ url : new URL ( specifier , parentURL ) . href ,
103+ format : 'module' ,
104+ }
105+ }
106+
98107 let url
99108
100109 // According to Node's algorithm, we first check if it is a valid URL.
@@ -131,7 +140,14 @@ export async function resolve(specifier, context, defaultResolve) {
131140
132141// New hook starting from Node v16.12.0
133142// See: https://github.com/nodejs/node/pull/37468
134- export function load ( url , context , defaultLoad ) {
143+ export async function load ( url , context , defaultLoad ) {
144+ if ( httpRegex . test ( url ) ) {
145+ return {
146+ format : 'module' ,
147+ source : await ( await fetch ( url ) ) . text ( ) ,
148+ }
149+ }
150+
135151 if ( extensionsRegex . test ( new URL ( url ) . pathname ) ) {
136152 const { format } = context
137153
@@ -152,6 +168,12 @@ export function load(url, context, defaultLoad) {
152168}
153169
154170export function getFormat ( url , context , defaultGetFormat ) {
171+ if ( httpRegex . test ( url ) ) {
172+ return {
173+ format : 'module' ,
174+ }
175+ }
176+
155177 if ( extensionsRegex . test ( new URL ( url ) . pathname ) ) {
156178 return {
157179 format : 'module' ,
@@ -162,9 +184,16 @@ export function getFormat(url, context, defaultGetFormat) {
162184 return defaultGetFormat ( url , context , defaultGetFormat )
163185}
164186
165- export function transformSource ( source , context , defaultTransformSource ) {
187+ export async function transformSource ( source , context , defaultTransformSource ) {
166188 const { url, format } = context
167189
190+ if ( httpRegex . test ( url ) ) {
191+ return {
192+ format : 'module' ,
193+ source : await ( await fetch ( url ) ) . text ( ) ,
194+ }
195+ }
196+
168197 if ( extensionsRegex . test ( new URL ( url ) . pathname ) ) {
169198 let filename = url
170199 if ( ! isWindows ) filename = fileURLToPath ( url )
@@ -179,3 +208,13 @@ export function transformSource(source, context, defaultTransformSource) {
179208 // Let Node.js handle all other sources.
180209 return defaultTransformSource ( source , context , defaultTransformSource )
181210}
211+
212+ export async function getSource ( url , context , defaultGetSource ) {
213+ if ( httpRegex . test ( url ) ) {
214+ return {
215+ source : await ( await fetch ( url ) ) . text ( ) ,
216+ }
217+ }
218+
219+ return defaultGetSource ( url , context , defaultGetSource )
220+ }
0 commit comments