diff options
-rw-r--r-- | src/bun.js/module_loader.zig | 14 | ||||
-rw-r--r-- | test/js/bun/plugin/plugins.test.ts | 53 |
2 files changed, 61 insertions, 6 deletions
diff --git a/src/bun.js/module_loader.zig b/src/bun.js/module_loader.zig index b5d2bdcc7..7543d5b80 100644 --- a/src/bun.js/module_loader.zig +++ b/src/bun.js/module_loader.zig @@ -1525,12 +1525,14 @@ pub const ModuleLoader = struct { var slice = slice_; if (slice.len == 0) return slice; var was_http = false; - if (strings.hasPrefixComptime(slice, "https://")) { - slice = slice["https://".len..]; - was_http = true; - } else if (strings.hasPrefixComptime(slice, "http://")) { - slice = slice["http://".len..]; - was_http = true; + if (jsc_vm.bundler.options.serve) { + if (strings.hasPrefixComptime(slice, "https://")) { + slice = slice["https://".len..]; + was_http = true; + } else if (strings.hasPrefixComptime(slice, "http://")) { + slice = slice["http://".len..]; + was_http = true; + } } if (strings.hasPrefix(slice, jsc_vm.origin.host)) { diff --git a/test/js/bun/plugin/plugins.test.ts b/test/js/bun/plugin/plugins.test.ts index 778eca7d0..f754ffbb3 100644 --- a/test/js/bun/plugin/plugins.test.ts +++ b/test/js/bun/plugin/plugins.test.ts @@ -14,6 +14,26 @@ declare global { } plugin({ + name: "url text file loader", + setup(builder) { + builder.onResolve({ namespace: "http", filter: /.*/ }, ({ path }) => { + return { + path, + namespace: "url", + }; + }); + + builder.onLoad({ filter: /.*/, namespace: "url" }, async ({ path, namespace }) => { + const res = await fetch("http://" + path); + return { + exports: { default: await res.text() }, + loader: "object", + }; + }); + }, +}); + +plugin({ name: "boop beep beep", setup(builder) { builder.onResolve({ filter: /boop/, namespace: "beep" }, () => ({ @@ -313,4 +333,37 @@ describe("errors", () => { throw -1; }).toThrow('Cannot find package "'); }); + + it("can work with http urls", async () => { + const result = `The Mysterious Affair at Styles + The Secret Adversary + The Murder on the Links + The Man in the Brown Suit + The Secret of Chimneys + The Murder of Roger Ackroyd + The Big Four + The Mystery of the Blue Train + The Seven Dials Mystery + The Murder at the Vicarage + Giant's Bread + The Floating Admiral + The Sittaford Mystery + Peril at End House + Lord Edgware Dies + Murder on the Orient Express + Unfinished Portrait + Why Didn't They Ask Evans? + Three Act Tragedy + Death in the Clouds`; + + const server = Bun.serve({ + port: 0, + fetch(req, server) { + server.stop(); + return new Response(result); + }, + }); + const { default: text } = await import(`http://${server.hostname}:${server.port}/hey.txt`); + expect(text).toBe(result); + }); }); |