// 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"); } });