diff options
author | 2022-04-16 04:36:00 -0700 | |
---|---|---|
committer | 2022-04-16 04:36:00 -0700 | |
commit | 42414d56678d10e9a658da55f83b41e8c751a1c1 (patch) | |
tree | 4905d6be2cc9f1f7179f380eeb15288db9cdb33a /integration/bunjs-only-snippets/transpiler.test.js | |
parent | 8bb283e61674ef06b0eac1bd0ade04e6560e0131 (diff) | |
download | bun-42414d56678d10e9a658da55f83b41e8c751a1c1.tar.gz bun-42414d56678d10e9a658da55f83b41e8c751a1c1.tar.zst bun-42414d56678d10e9a658da55f83b41e8c751a1c1.zip |
[JS Parser] API for removing & replacing exports
Diffstat (limited to 'integration/bunjs-only-snippets/transpiler.test.js')
-rw-r--r-- | integration/bunjs-only-snippets/transpiler.test.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/integration/bunjs-only-snippets/transpiler.test.js b/integration/bunjs-only-snippets/transpiler.test.js index 9d570ea50..c0646f578 100644 --- a/integration/bunjs-only-snippets/transpiler.test.js +++ b/integration/bunjs-only-snippets/transpiler.test.js @@ -1,6 +1,79 @@ import { expect, it, describe } from "bun:test"; describe("Bun.Transpiler", () => { + describe("replaceExports", () => { + const transpiler = new Bun.Transpiler({ + exports: { + replace: { + // Next.js does this + getStaticProps: ["__N_SSG", true], + localVarToReplace: 2, + }, + // Remix could possibly do this when building for browsers + // to automatically remove imports only referenced within the loader + // For Remix, it probably is less impactful due to .client and .server conventions in place + eliminate: ["loader", "localVarToRemove"], + }, + treeShaking: true, + trimUnusedImports: true, + }); + it("deletes dead exports and any imports only referenced in dead regions", () => { + const output = transpiler.transformSync(` + import deadFS from 'fs'; + import liveFS from 'fs'; + + export function loader() { + deadFS.readFileSync("/etc/passwd"); + liveFS.readFileSync("/etc/passwd"); + } + + export function action() { + require("foo"); + liveFS.readFileSync("/etc/passwd"); + } + + export default function() { + require("bar"); + } + `); + expect(output.includes("loader")).toBe(false); + expect(output.includes("react")).toBe(false); + expect(output.includes("action")).toBe(true); + expect(output.includes("deadFS")).toBe(false); + expect(output.includes("liveFS")).toBe(true); + }); + + it("supports replacing exports", () => { + const output = transpiler.transformSync(` + import deadFS from 'fs'; + import anotherDeadFS from 'fs'; + import liveFS from 'fs'; + + export var localVarToRemove = deadFS.readFileSync("/etc/passwd"); + export var localVarToReplace = 1; + + var getStaticProps = function () { + deadFS.readFileSync("/etc/passwd") + }; + + export {getStaticProps} + + export default function() { + liveFS.readFileSync("/etc/passwd"); + require("bar"); + } + `); + expect(output.includes("loader")).toBe(false); + expect(output.includes("react")).toBe(false); + expect(output.includes("deadFS")).toBe(false); + expect(output.includes("anotherDeadFS")).toBe(false); + expect(output.includes("liveFS")).toBe(true); + expect(output.includes("__N_SSG")).toBe(true); + expect(output.includes("localVarToReplace")).toBe(true); + expect(output.includes("localVarToRemove")).toBe(false); + }); + }); + const transpiler = new Bun.Transpiler({ loader: "tsx", define: { |