Files
bun.sh/test/bundler/esbuild/importstar_ts.test.ts
2024-09-03 21:32:52 -07:00

331 lines
8.3 KiB
TypeScript

import { describe } from "bun:test";
import { itBundled } from "../expectBundled";
// Tests ported from:
// https://github.com/evanw/esbuild/blob/main/internal/bundler_tests/bundler_importstar_ts_test.go
// For debug, all files are written to $TEMP/bun-bundle-tests/ts
describe("bundler", () => {
itBundled("importstar_ts/Unused", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(foo)
`,
"/foo.ts": `export const foo = 123`,
},
run: { stdout: "234" },
});
itBundled("importstar_ts/Capture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(JSON.stringify(ns), ns.foo, foo)
`,
"/foo.ts": `export const foo = 123`,
},
run: { stdout: '{"foo":123} 123 234' },
});
itBundled("importstar_ts/NoCapture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(ns.foo, ns.foo, foo)
`,
"/foo.ts": `export const foo = 123`,
},
run: { stdout: "123 123 234" },
});
itBundled("importstar_ts/ExportImportStarUnused", {
files: {
"/entry.ts": /* ts */ `
import {ns} from './bar'
let foo = 234
console.log(foo)
`,
"/foo.ts": `export const foo = 123`,
"/bar.ts": /* ts */ `
import * as ns from './foo'
export {ns}
`,
},
run: { stdout: "234" },
});
itBundled("importstar_ts/ExportImportStarNoCapture", {
files: {
"/entry.ts": /* ts */ `
import {ns} from './bar'
let foo = 234
console.log(ns.foo, ns.foo, foo)
`,
"/foo.ts": `export const foo = 123`,
"/bar.ts": /* ts */ `
import * as ns from './foo'
export {ns}
`,
},
run: { stdout: "123 123 234" },
});
itBundled("importstar_ts/ExportImportStarCapture", {
files: {
"/entry.ts": /* ts */ `
import {ns} from './bar'
let foo = 234
console.log(JSON.stringify(ns), ns.foo, foo)
`,
"/foo.ts": `export const foo = 123`,
"/bar.ts": /* ts */ `
import * as ns from './foo'
export {ns}
`,
},
run: { stdout: '{"foo":123} 123 234' },
});
itBundled("importstar_ts/ExportStarAsUnused", {
files: {
"/entry.ts": /* ts */ `
import {ns} from './bar'
let foo = 234
console.log(foo)
`,
"/foo.ts": `export const foo = 123`,
"/bar.ts": `export * as ns from './foo'`,
},
});
itBundled("importstar_ts/ExportStarAsNoCapture", {
files: {
"/entry.ts": /* ts */ `
import {ns} from './bar'
let foo = 234
console.log(ns.foo, ns.foo, foo)
`,
"/foo.ts": `export const foo = 123`,
"/bar.ts": `export * as ns from './foo'`,
},
run: { stdout: "123 123 234" },
});
itBundled("importstar_ts/ExportStarAsCapture", {
files: {
"/entry.ts": /* ts */ `
import {ns} from './bar'
let foo = 234
console.log(JSON.stringify(ns), ns.foo, foo)
`,
"/foo.ts": `export const foo = 123`,
"/bar.ts": `export * as ns from './foo'`,
},
run: { stdout: '{"foo":123} 123 234' },
});
itBundled("importstar_ts/ExportStarUnused", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './bar'
let foo = 234
console.log(foo)
`,
"/foo.ts": `export const foo = 123`,
"/bar.ts": `export * from './foo'`,
},
run: { stdout: "234" },
});
itBundled("importstar_ts/ExportStarNoCapture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './bar'
let foo = 234
console.log(ns.foo, ns.foo, foo)
`,
"/foo.ts": `export const foo = 123`,
"/bar.ts": `export * from './foo'`,
},
run: { stdout: "123 123 234" },
});
itBundled("importstar_ts/ExportStarCapture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './bar'
let foo = 234
console.log(JSON.stringify(ns), ns.foo, foo)
`,
"/foo.ts": `export const foo = 123`,
"/bar.ts": `export * from './foo'`,
},
run: { stdout: '{"foo":123} 123 234' },
});
itBundled("importstar_ts/CommonJSUnused", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(foo)
`,
"/foo.ts": `exports.foo = 123`,
},
run: { stdout: "234" },
});
itBundled("importstar_ts/CommonJSCapture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(JSON.stringify(ns), ns.foo, foo)
`,
"/foo.ts": `exports.foo = 123`,
},
run: { stdout: '{"foo":123} 123 234' },
});
itBundled("importstar_ts/CommonJSNoCapture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(ns.foo, ns.foo, foo)
`,
"/foo.ts": `exports.foo = 123`,
},
run: { stdout: "123 123 234" },
});
itBundled("importstar_ts/TSAndCommonJS", {
files: {
"/entry.js": /* js */ `
import * as ns from './foo'
const ns2 = require('./foo')
console.log(ns.foo, ns2.foo)
`,
"/foo.ts": `export const foo = 123`,
},
run: { stdout: "123 123" },
});
itBundled("importstar_ts/NoBundleUnused", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(foo)
`,
},
target: "bun",
bundling: false,
run: { stdout: "234" },
});
itBundled("importstar_ts/NoBundleCapture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(JSON.stringify(ns), ns.foo, foo)
`,
},
target: "bun",
bundling: false,
runtimeFiles: {
"/foo.js": `
export const foo = 123
`,
},
run: { stdout: '{"foo":123} 123 234' },
});
itBundled("importstar_ts/NoBundleNoCapture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(ns.foo, ns.foo, foo)
`,
},
target: "bun",
bundling: false,
runtimeFiles: {
"/foo.js": `
export const foo = 123
`,
},
run: { stdout: "123 123 234" },
});
itBundled("importstar_ts/MangleNoBundleUnused", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(foo)
`,
},
minifySyntax: true,
target: "bun",
bundling: false,
runtimeFiles: {
"/foo.js": `
export const foo = 123
`,
},
run: { stdout: "234" },
});
itBundled("importstar_ts/MangleNoBundleCapture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(JSON.stringify(ns), ns.foo, foo)
`,
},
minifySyntax: true,
bundling: false,
runtimeFiles: {
"/foo.js": `
export const foo = 123
`,
},
run: { stdout: '{"foo":123} 123 234' },
});
itBundled("importstar_ts/MangleNoBundleNoCapture", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './foo'
let foo = 234
console.log(ns.foo, ns.foo, foo)
`,
},
minifySyntax: true,
bundling: false,
runtimeFiles: {
"/foo.js": `
export const foo = 123
`,
},
run: { stdout: "123 123 234" },
});
itBundled("importstar_ts/ReExportTypeOnlyFileES6", {
files: {
"/entry.ts": /* ts */ `
import * as ns from './re-export'
console.log(ns.foo)
`,
"/re-export.ts": /* ts */ `
export * from './types1'
export * from './types2'
export * from './types3'
export * from './values'
`,
"/types1.ts": /* ts */ `
export interface Foo {}
export type Bar = number;
console.log('some code')
`,
"/types2.ts": /* ts */ `
import {Foo} from "./type"
export {Foo}
console.log('some code')
`,
"/types3.ts": /* ts */ `
export {Foo} from "./type"
console.log('some code');
`,
"/values.ts": `export let foo = 123`,
"/type.ts": `export type Foo = number`,
},
});
});