diff options
author | 2023-07-22 16:59:30 -0700 | |
---|---|---|
committer | 2023-07-22 16:59:54 -0700 | |
commit | bfaf095c2ed2ba1f0cd35f1658e2babee8b51985 (patch) | |
tree | b8bce272343c861b74c413a0859549eb7e112191 | |
parent | b17b61b8c6854657177dbdc23fad8ea98f4e779f (diff) | |
download | bun-bfaf095c2ed2ba1f0cd35f1658e2babee8b51985.tar.gz bun-bfaf095c2ed2ba1f0cd35f1658e2babee8b51985.tar.zst bun-bfaf095c2ed2ba1f0cd35f1658e2babee8b51985.zip |
Fixes https://discord.com/channels/876711213126520882/1131175053409656833/1131175053409656833
@tr1ckydev this fixes the issue you ran into, see the diff for an example usage of a Bun.plugin that makes a network request on import.
-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); + }); }); |