Files
bun.sh/test/bake/dev/esm.test.ts
2024-12-03 22:15:59 -08:00

208 lines
4.9 KiB
TypeScript

// Bundle tests are tests concerning bundling bugs that only occur in DevServer.
import { devTest, minimalFramework } from "../dev-server-harness";
const liveBindingTest = devTest("live bindings with `var`", {
framework: minimalFramework,
files: {
"state.ts": `
export var value = 0;
export function increment() {
value++;
}
`,
"routes/index.ts": `
import { value, increment } from '../state';
export default function(req, meta) {
increment();
return new Response('State: ' + value);
}
`,
},
async test(dev) {
await dev.fetch("/").expect("State: 1");
await dev.fetch("/").expect("State: 2");
await dev.fetch("/").expect("State: 3");
await dev.patch("routes/index.ts", {
find: "State",
replace: "Value",
});
await dev.fetch("/").expect("Value: 4");
await dev.fetch("/").expect("Value: 5");
await dev.write(
"state.ts",
`
export var value = 0;
export function increment() {
value--;
}
`,
);
await dev.fetch("/").expect("Value: -1");
await dev.fetch("/").expect("Value: -2");
},
});
devTest("live bindings through export clause", {
framework: minimalFramework,
files: {
"state.ts": `
export var value = 0;
export function increment() {
value++;
}
`,
"proxy.ts": `
import { value } from './state';
export { value as live };
`,
"routes/index.ts": `
import { increment } from '../state';
import { live } from '../proxy';
export default function(req, meta) {
increment();
return new Response('State: ' + live);
}
`,
},
test: liveBindingTest.test,
});
devTest("live bindings through export from", {
framework: minimalFramework,
files: {
"state.ts": `
export var value = 0;
export function increment() {
value++;
}
`,
"proxy.ts": `
export { value as live } from './state';
`,
"routes/index.ts": `
import { increment } from '../state';
import { live } from '../proxy';
export default function(req, meta) {
increment();
return new Response('State: ' + live);
}
`,
},
test: liveBindingTest.test,
});
// devTest("live bindings through export star", {
// framework: minimalFramework,
// files: {
// "state.ts": `
// export var value = 0;
// export function increment() {
// value++;
// }
// `,
// "proxy.ts": `
// export * from './state';
// `,
// "routes/index.ts": `
// import { increment } from '../state';
// import { live } from '../proxy';
// export default function(req, meta) {
// increment();
// return new Response('State: ' + live);
// }
// `,
// },
// test: liveBindingTest.test,
// });
devTest("export { x as y }", {
framework: minimalFramework,
files: {
"module.ts": `
function x(value) {
return value + 1;
}
export { x as y };
`,
"routes/index.ts": `
import { y } from '../module';
export default function(req, meta) {
return new Response('Value: ' + y(1));
}
`,
},
async test(dev) {
await dev.fetch("/").expect("Value: 2");
await dev.patch("module.ts", {
find: "1",
replace: "2",
});
await dev.fetch("/").expect("Value: 3");
}
});
devTest("import { x as y }", {
framework: minimalFramework,
files: {
"module.ts": `
export const x = 1;
`,
"routes/index.ts": `
import { x as y } from '../module';
export default function(req, meta) {
return new Response('Value: ' + y);
}
`,
},
async test(dev) {
await dev.fetch("/").expect("Value: 1");
await dev.patch("module.ts", {
find: "1",
replace: "2",
});
await dev.fetch("/").expect("Value: 2");
}
});
devTest("import { default as y }", {
framework: minimalFramework,
files: {
"module.ts": `
export default 1;
`,
"routes/index.ts": `
import { default as y } from '../module';
export default function(req, meta) {
return new Response('Value: ' + y);
}
`,
},
async test(dev) {
await dev.fetch("/").expect("Value: 1");
await dev.patch("module.ts", {
find: "1",
replace: "2",
});
await dev.fetch("/").expect("Value: 2");
}
});
devTest("export { default as y }", {
framework: minimalFramework,
files: {
"module.ts": `
export default 1;
`,
"middle.ts": `
export { default as y } from './module';
`,
"routes/index.ts": `
import { y } from '../middle';
export default function(req, meta) {
return new Response('Value: ' + y);
}
`,
},
async test(dev) {
await dev.fetch("/").expect("Value: 1");
await dev.patch("module.ts", {
find: "1",
replace: "2",
});
await dev.fetch("/").expect("Value: 2");
}
});