aboutsummaryrefslogtreecommitdiff
path: root/integration/bunjs-only-snippets/transpiler.test.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-16 04:36:00 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-04-16 04:36:00 -0700
commit42414d56678d10e9a658da55f83b41e8c751a1c1 (patch)
tree4905d6be2cc9f1f7179f380eeb15288db9cdb33a /integration/bunjs-only-snippets/transpiler.test.js
parent8bb283e61674ef06b0eac1bd0ade04e6560e0131 (diff)
downloadbun-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.js73
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: {