aboutsummaryrefslogtreecommitdiff
path: root/test/bundler/esbuild/default.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'test/bundler/esbuild/default.test.ts')
-rw-r--r--test/bundler/esbuild/default.test.ts288
1 files changed, 281 insertions, 7 deletions
diff --git a/test/bundler/esbuild/default.test.ts b/test/bundler/esbuild/default.test.ts
index 0d1775606..ac820848a 100644
--- a/test/bundler/esbuild/default.test.ts
+++ b/test/bundler/esbuild/default.test.ts
@@ -1,8 +1,8 @@
import assert from "assert";
import dedent from "dedent";
+
import { ESBUILD_PATH, RUN_UNCHECKED_TESTS, itBundled, testForFile } from "../expectBundled";
var { describe, test, expect } = testForFile(import.meta.path);
-
// Tests ported from:
// https://github.com/evanw/esbuild/blob/main/internal/bundler_tests/bundler_default_test.go
@@ -375,7 +375,10 @@ describe("bundler", () => {
// assert bundles weird as of writing
"/test.js": /* js */ `
- globalThis.assert = import.meta.require('assert');
+ globalThis.assert = require('assert');
+ if (typeof assert.deepEqual !== 'function') {
+ throw new Error('assert.deepEqual is not a function');
+ }
require('./out.js');
`,
},
@@ -1335,8 +1338,8 @@ describe("bundler", () => {
import fs from "fs";
import assert from "assert";
import * as module from './out.js';
- assert(module.fs === fs, 'export * as fs from "fs"; works')
- assert(module.readFileSync === fs.readFileSync, 'export {readFileSync} from "fs"; works')
+ assert(module.fs.default === fs, 'export * as fs from "fs"; works')
+ assert(module.fs.default.readFileSync === fs.readFileSync, 'export {readFileSync} from "fs"; works')
`,
},
target: "node",
@@ -1356,10 +1359,10 @@ describe("bundler", () => {
`,
"/test.js": /* js */ `
- import fs from "fs";
+ import * as fs from "fs";
import assert from "assert";
import * as module from './out.js';
- assert(module.f === fs, 'export {fs as f} works')
+ assert(module.f.default === fs.default, 'export {fs as f} works')
assert(module.rfs === fs.readFileSync, 'export {rfs} works')
`,
},
@@ -1379,7 +1382,7 @@ describe("bundler", () => {
`,
"/test.js": /* js */ `
- import fs from "fs";
+ import * as fs from "fs";
import assert from "assert";
import * as mod from './out.js';
assert(mod.fs === fs, 'exports.fs')
@@ -6562,4 +6565,275 @@ describe("bundler", () => {
api.expectFile("/out.js").not.toContain("data = 123");
},
});
+ itBundled("default/BundlerUsesModuleFieldForEsm", {
+ files: {
+ "/entry.js": `
+ import { foo } from 'foo';
+ console.log(foo);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0",
+ "module": "index.esm.js",
+ "main": "index.cjs.js"
+ }
+ `,
+ "/node_modules/foo/index.cjs.js": `
+ module.exports.foo = "hello index.cjs.js";
+ `,
+ "/node_modules/foo/index.esm.js": `
+ export const foo = "hello index.esm.js";
+ `,
+ },
+ run: {
+ stdout: "hello index.esm.js",
+ },
+ });
+ itBundled("default/BundlerUsesMainFieldForCjs", {
+ files: {
+ "/entry.js": `
+ const { foo } = require('foo');
+ console.log(foo);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0",
+ "module": "index.esm.js",
+ "main": "index.cjs.js"
+ }
+ `,
+ "/node_modules/foo/index.cjs.js": `
+ module.exports.foo = "hello index.cjs.js";
+ `,
+ "/node_modules/foo/index.esm.js": `
+ export const foo = "hello index.esm.js";
+ `,
+ },
+ run: {
+ stdout: "hello index.cjs.js",
+ },
+ });
+ itBundled("default/RuntimeUsesMainFieldForCjs", {
+ files: {
+ "/entry.js": `
+ const { foo } = require('foo');
+ console.log(foo);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0",
+ "module": "index.esm.js",
+ "main": "index.cjs.js"
+ }
+ `,
+ "/node_modules/foo/index.cjs.js": `
+ module.exports.foo = "hello index.cjs.js";
+ `,
+ "/node_modules/foo/index.esm.js": `
+ export const foo = "hello index.esm.js";
+ `,
+ },
+ bundling: false,
+ run: {
+ stdout: "hello index.cjs.js",
+ },
+ });
+ itBundled("default/RuntimeUsesMainFieldForEsm", {
+ files: {
+ "/entry.js": `
+ import { foo } from 'foo';
+ console.log(foo);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0",
+ "module": "index.esm.js",
+ "main": "index.cjs.js"
+ }
+ `,
+ "/node_modules/foo/index.cjs.js": `
+ module.exports.foo = "hello index.cjs.js";
+ `,
+ "/node_modules/foo/index.esm.js": `
+ export const foo = "hello index.esm.js";
+ `,
+ },
+ bundling: false,
+ run: {
+ stdout: "hello index.cjs.js",
+ },
+ });
+ itBundled("default/BundlerUsesModuleFieldIfMainDoesNotExistCjs", {
+ files: {
+ "/entry.js": `
+ const { foo } = require('foo');
+ console.log(foo);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0",
+ "module": "index.esm.js"
+ }
+ `,
+ "/node_modules/foo/index.cjs.js": `
+ module.exports.foo = "hello index.cjs.js";
+ `,
+ "/node_modules/foo/index.esm.js": `
+ export const foo = "hello index.esm.js";
+ `,
+ },
+ run: {
+ stdout: "hello index.esm.js",
+ },
+ });
+ itBundled("default/BundlerUsesModuleFieldIfMainDoesNotExistEsm", {
+ files: {
+ "/entry.js": `
+ import { foo } from 'foo';
+ console.log(foo);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0",
+ "module": "index.esm.js"
+ }
+ `,
+ "/node_modules/foo/index.cjs.js": `
+ module.exports.foo = "hello index.cjs.js";
+ `,
+ "/node_modules/foo/index.esm.js": `
+ export const foo = "hello index.esm.js";
+ `,
+ },
+ run: {
+ stdout: "hello index.esm.js",
+ },
+ });
+ itBundled("default/RuntimeUsesModuleFieldIfMainDoesNotExistCjs", {
+ files: {
+ "/entry.js": `
+ const { foo } = require('foo');
+ console.log(foo);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0",
+ "module": "index.esm.js"
+ }
+ `,
+ "/node_modules/foo/index.cjs.js": `
+ module.exports.foo = "hello index.cjs.js";
+ `,
+ "/node_modules/foo/index.esm.js": `
+ export const foo = "hello index.esm.js";
+ `,
+ },
+ bundling: false,
+ run: {
+ stdout: "hello index.esm.js",
+ },
+ });
+ itBundled("default/RuntimeUsesModuleFieldIfMainDoesNotExistEsm", {
+ files: {
+ "/entry.js": `
+ import { foo } from 'foo';
+ console.log(foo);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0",
+ "module": "index.esm.js"
+ }
+ `,
+ "/node_modules/foo/index.cjs.js": `
+ module.exports.foo = "hello index.cjs.js";
+ `,
+ "/node_modules/foo/index.esm.js": `
+ export const foo = "hello index.esm.js";
+ `,
+ },
+ bundling: false,
+ run: {
+ stdout: "hello index.esm.js",
+ },
+ });
+ itBundled("default/RequireProperlyHandlesNamedExportDeclsInCjsModule", {
+ files: {
+ "/entry.js": `
+ const { a, b, c, d } = require('foo');
+ console.log(a, b, c, d);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0"
+ }
+ `,
+ "/node_modules/foo/index.js": `
+ if (!exports.d) {
+ exports.d = 7;
+ }
+ if (exports.hasOwnProperty("d")) {
+ exports.a = 5;
+ }
+
+ exports.b;
+ exports.b = 8;
+ exports.b = 9;
+
+ var c;
+ c = 2;
+ exports.c = c;
+ `,
+ },
+ run: {
+ stdout: "5 9 2 7",
+ },
+ onAfterBundle(api) {
+ const contents = api.readFile("out.js");
+ expect(contents).not.toContain("undefined");
+ expect(contents).not.toContain("$");
+ },
+ });
+ itBundled("default/EsmImportProperlyHandlesNamedExportDeclsInUnwrappedCjsModule", {
+ files: {
+ "/entry.js": `
+ import { a, b, c, d } from 'foo';
+ console.log(a, b, c, d);
+ `,
+ "/node_modules/foo/package.json": `
+ {
+ "name": "foo",
+ "version": "2.0.0"
+ }
+ `,
+ "/node_modules/foo/index.js": `
+ if (!exports.d) {
+ exports.d = 7;
+ }
+ if (exports.hasOwnProperty("d")) {
+ exports.a = 5;
+ }
+
+ exports.b;
+ exports.b = 8;
+ exports.b = 9;
+
+ var c;
+ c = 2;
+ exports.c = c;
+ `,
+ },
+ run: {
+ stdout: "5 9 2 7",
+ },
+ });
});