mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
### What does this PR do? Originally, we attempted to avoid the "dual package hazard" right before we enqueue a parse task, but that code gets called in a non-deterministic order. This meant that some of your modules would use the right variant and some of them would not. We have to instead do that in a separate pass, after all the files are parsed. The thing to watch out for with this PR is how it impacts the dev server. ### How did you verify your code works? Unskipped tests. Plus manual. --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Dylan Conway <dylan.conway567@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1990 lines
61 KiB
TypeScript
1990 lines
61 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_packagejson_test.go
|
|
|
|
// For debug, all files are written to $TEMP/bun-bundle-tests/packagejson
|
|
|
|
describe("bundler", () => {
|
|
itBundled("packagejson/Main", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./custom-main.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/custom-main.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "123",
|
|
},
|
|
});
|
|
itBundled("packagejson/trailing-comma", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
// very comment!!
|
|
/** even multi-line comment!! */
|
|
/** such feature much compatible very ecosystem */
|
|
"main": "./custom-main.js",
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/custom-main.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "123",
|
|
},
|
|
});
|
|
itBundled("packagejson/BadMain", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./does-not-exist.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/index.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "123",
|
|
},
|
|
});
|
|
// itBundled("packagejson/SyntaxErrorComment", {
|
|
// todo: true,
|
|
// files: {
|
|
// "/Users/user/project/src/entry.js": /* js */ `
|
|
// import fn from 'demo-pkg'
|
|
// console.log(fn())
|
|
// `,
|
|
// "/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
// {
|
|
// // Single-line comment
|
|
// "a": 1
|
|
// }
|
|
// `,
|
|
// "/Users/user/project/node_modules/demo-pkg/index.js": /* js */ `
|
|
// module.exports = function() {
|
|
// return 123
|
|
// }
|
|
// `,
|
|
// },
|
|
// bundleErrors: {
|
|
// "/Users/user/project/node_modules/demo-pkg/package.json": ["JSON does not support comments"],
|
|
// },
|
|
// });
|
|
// itBundled("packagejson/SyntaxErrorTrailingComma", {
|
|
// files: {
|
|
// "/Users/user/project/src/entry.js": /* js */ `
|
|
// import fn from 'demo-pkg'
|
|
// console.log(fn())
|
|
// `,
|
|
// "/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
// {
|
|
// "a": 1,
|
|
// "b": 2,
|
|
// }
|
|
// `,
|
|
// "/Users/user/project/node_modules/demo-pkg/index.js": /* js */ `
|
|
// module.exports = function() {
|
|
// return 123
|
|
// }
|
|
// `,
|
|
// },
|
|
// bundleErrors: {
|
|
// "/Users/user/project/node_modules/demo-pkg/package.json": ["JSON does not support trailing commas"],
|
|
// },
|
|
// });
|
|
itBundled("packagejson/Module", {
|
|
// GENERATED
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./main.esm.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.esm.js": /* js */ `
|
|
export default function() {
|
|
return 234
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "234",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserString", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"browser": "./browser"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/browser.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "123",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserMapRelativeToRelative", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(JSON.stringify(fn()))
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main",
|
|
"browser": {
|
|
"./main.js": "./main-browser",
|
|
"./lib/util.js": "./lib/util-browser"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": /* js */ `
|
|
const util = require('./lib/util')
|
|
module.exports = function() {
|
|
return ['main', util]
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main-browser.js": /* js */ `
|
|
const util = require('./lib/util')
|
|
module.exports = function() {
|
|
return ['main-browser', util]
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/lib/util.js": `module.exports = 'util'`,
|
|
"/Users/user/project/node_modules/demo-pkg/lib/util-browser.js": `module.exports = 'util-browser'`,
|
|
},
|
|
run: {
|
|
stdout: `["main-browser","util-browser"]`,
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserMapRelativeToModule", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(JSON.stringify(fn()))
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main",
|
|
"browser": {
|
|
"./util.js": "util-browser"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": /* js */ `
|
|
const util = require('./util')
|
|
module.exports = function() {
|
|
return ['main', util]
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/util.js": `module.exports = 'util'`,
|
|
"/Users/user/project/node_modules/util-browser/index.js": `module.exports = 'util-browser'`,
|
|
},
|
|
run: {
|
|
stdout: `["main","util-browser"]`,
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserMapRelativeDisabled", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(JSON.stringify(fn(123)))
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main",
|
|
"browser": {
|
|
"./util-node.js": false
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": /* js */ `
|
|
const util = require('./util-node')
|
|
module.exports = function(obj) {
|
|
return [util.inspect, obj]
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/util-node.js": `module.exports = require('util')`,
|
|
},
|
|
run: {
|
|
stdout: `[null,123]`,
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserMapModuleToRelative", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"node-pkg": "./node-pkg-browser"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/node-pkg-browser.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/index.js": /* js */ `
|
|
const fn = require('node-pkg')
|
|
module.exports = function() {
|
|
return fn()
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/node-pkg/index.js": /* js */ `
|
|
module.exports = function() {
|
|
return 234
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "123",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserMapModuleToModule", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"node-pkg": "node-pkg-browser"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/node-pkg-browser/index.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/index.js": /* js */ `
|
|
const fn = require('node-pkg')
|
|
module.exports = function() {
|
|
return fn()
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/node-pkg/index.js": /* js */ `
|
|
module.exports = function() {
|
|
return 234
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "123",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserMapModuleDisabled", {
|
|
todo: true,
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"node-pkg": false
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/index.js": /* js */ `
|
|
const fn = require('node-pkg')
|
|
console.log(fn)
|
|
module.exports = function() {
|
|
return typeof fn === 'function' ? fn() : 123
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/node-pkg/index.js": /* js */ `
|
|
module.exports = function() {
|
|
return 234
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "{}\n123",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserMapNativeModuleDisabled", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"fs": false
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/index.js": /* js */ `
|
|
const fs = require('fs')
|
|
module.exports = function() {
|
|
return fs.readFile === undefined
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "true",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserMapAvoidMissing", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'component-classes'`,
|
|
"/Users/user/project/node_modules/component-classes/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"indexof": "component-indexof"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/component-classes/index.js": /* js */ `
|
|
try {
|
|
var index = require('indexof');
|
|
} catch (err) {
|
|
console.log('catch')
|
|
var index = require('component-indexof');
|
|
}
|
|
console.log(index())
|
|
`,
|
|
"/Users/user/project/node_modules/component-indexof/index.js": /* js */ `
|
|
module.exports = function() {
|
|
return 234
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/indexof/index.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "234",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserOverModuleBrowser", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./main.esm.js",
|
|
"browser": "./main.browser.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.esm.js": /* js */ `
|
|
export default function() {
|
|
return 234
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.browser.js": /* js */ `
|
|
module.exports = function() {
|
|
return 345
|
|
}
|
|
`,
|
|
},
|
|
target: "browser",
|
|
run: {
|
|
stdout: "345",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserOverMainNode", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./main.esm.js",
|
|
"browser": "./main.browser.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.esm.js": /* js */ `
|
|
export default function() {
|
|
return 234
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.browser.js": /* js */ `
|
|
module.exports = function() {
|
|
return 345
|
|
}
|
|
`,
|
|
},
|
|
target: "node",
|
|
run: {
|
|
stdout: "123",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserWithModuleBrowser", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./main.esm.js",
|
|
"browser": {
|
|
"./main.js": "./main.browser.js",
|
|
"./main.esm.js": "./main.browser.esm.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.esm.js": /* js */ `
|
|
export default function() {
|
|
return 234
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.browser.js": /* js */ `
|
|
module.exports = function() {
|
|
return 345
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.browser.esm.js": /* js */ `
|
|
export default function() {
|
|
return 456
|
|
}
|
|
`,
|
|
},
|
|
target: "browser",
|
|
run: {
|
|
stdout: "456",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserWithMainNode", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import fn from 'demo-pkg'
|
|
console.log(fn())
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./main.esm.js",
|
|
"browser": {
|
|
"./main.js": "./main.browser.js",
|
|
"./main.esm.js": "./main.browser.esm.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": /* js */ `
|
|
module.exports = function() {
|
|
return 123
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.esm.js": /* js */ `
|
|
export default function() {
|
|
return 234
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.browser.js": /* js */ `
|
|
module.exports = function() {
|
|
return 345
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.browser.esm.js": /* js */ `
|
|
export default function() {
|
|
return 456
|
|
}
|
|
`,
|
|
},
|
|
target: "node",
|
|
run: {
|
|
stdout: "123",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserNodeModulesNoExt", {
|
|
todo: true,
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import {value as a} from 'demo-pkg/no-ext'
|
|
import {value as b} from 'demo-pkg/no-ext.js'
|
|
import {value as c} from 'demo-pkg/ext'
|
|
import {value as d} from 'demo-pkg/ext.js'
|
|
console.log(a)
|
|
console.log(b)
|
|
console.log(c)
|
|
console.log(d)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"./no-ext": "./no-ext-browser.js",
|
|
"./ext.js": "./ext-browser.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/no-ext.js": `export let value = 'node'`,
|
|
"/Users/user/project/node_modules/demo-pkg/no-ext-browser.js": `export let value = 'browser'`,
|
|
"/Users/user/project/node_modules/demo-pkg/ext.js": `export let value = 'node'`,
|
|
"/Users/user/project/node_modules/demo-pkg/ext-browser.js": `export let value = 'browser'`,
|
|
},
|
|
run: {
|
|
stdout: `
|
|
browser
|
|
node
|
|
browser
|
|
browser
|
|
`,
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserNodeModulesIndexNoExt", {
|
|
todo: true,
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import {value as a} from 'demo-pkg/no-ext'
|
|
import {value as b} from 'demo-pkg/no-ext/index.js'
|
|
import {value as c} from 'demo-pkg/ext'
|
|
import {value as d} from 'demo-pkg/ext/index.js'
|
|
console.log(a)
|
|
console.log(b)
|
|
console.log(c)
|
|
console.log(d)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"./no-ext": "./no-ext-browser/index.js",
|
|
"./ext/index.js": "./ext-browser/index.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/no-ext/index.js": `export let value = 'node'`,
|
|
"/Users/user/project/node_modules/demo-pkg/no-ext-browser/index.js": `export let value = 'browser'`,
|
|
"/Users/user/project/node_modules/demo-pkg/ext/index.js": `export let value = 'node'`,
|
|
"/Users/user/project/node_modules/demo-pkg/ext-browser/index.js": `export let value = 'browser'`,
|
|
},
|
|
run: {
|
|
stdout: `
|
|
browser
|
|
node
|
|
browser
|
|
browser
|
|
`,
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserNoExt", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import {value as a} from './demo-pkg/no-ext'
|
|
import {value as b} from './demo-pkg/no-ext.js'
|
|
import {value as c} from './demo-pkg/ext'
|
|
import {value as d} from './demo-pkg/ext.js'
|
|
console.log(a)
|
|
console.log(b)
|
|
console.log(c)
|
|
console.log(d)
|
|
`,
|
|
"/Users/user/project/src/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"./no-ext": "./no-ext-browser.js",
|
|
"./ext.js": "./ext-browser.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/src/demo-pkg/no-ext.js": `export let value = 'node'`,
|
|
"/Users/user/project/src/demo-pkg/no-ext-browser.js": `export let value = 'browser'`,
|
|
"/Users/user/project/src/demo-pkg/ext.js": `export let value = 'node'`,
|
|
"/Users/user/project/src/demo-pkg/ext-browser.js": `export let value = 'browser'`,
|
|
},
|
|
run: {
|
|
stdout: `
|
|
browser
|
|
node
|
|
browser
|
|
browser
|
|
`,
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserIndexNoExt", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import {value as a} from './demo-pkg/no-ext'
|
|
import {value as b} from './demo-pkg/no-ext/index.js'
|
|
import {value as c} from './demo-pkg/ext'
|
|
import {value as d} from './demo-pkg/ext/index.js'
|
|
console.log(a)
|
|
console.log(b)
|
|
console.log(c)
|
|
console.log(d)
|
|
`,
|
|
"/Users/user/project/src/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"./no-ext": "./no-ext-browser/index.js",
|
|
"./ext/index.js": "./ext-browser/index.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/src/demo-pkg/no-ext/index.js": `export let value = 'node'`,
|
|
"/Users/user/project/src/demo-pkg/no-ext-browser/index.js": `export let value = 'browser'`,
|
|
"/Users/user/project/src/demo-pkg/ext/index.js": `export let value = 'node'`,
|
|
"/Users/user/project/src/demo-pkg/ext-browser/index.js": `export let value = 'browser'`,
|
|
},
|
|
run: {
|
|
stdout: `
|
|
browser
|
|
node
|
|
browser
|
|
browser
|
|
`,
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserESBuildIssue2002A", {
|
|
todo: true,
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `require('pkg/sub')`,
|
|
"/Users/user/project/src/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"./sub": "./sub/foo.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/src/node_modules/pkg/sub/foo.js": `require('sub')`,
|
|
"/Users/user/project/src/node_modules/sub/package.json": `{ "main": "./bar" }`,
|
|
"/Users/user/project/src/node_modules/sub/bar.js": `console.log('it works')`,
|
|
},
|
|
run: {
|
|
stdout: "it works",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserESBuildIssue2002B", {
|
|
todo: true,
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `require('pkg/sub')`,
|
|
"/Users/user/project/src/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"./sub": "./sub/foo.js",
|
|
"./sub/sub": "./sub/bar.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/src/node_modules/pkg/sub/foo.js": `require('sub')`,
|
|
"/Users/user/project/src/node_modules/pkg/sub/bar.js": `console.log('it works')`,
|
|
},
|
|
run: {
|
|
stdout: "it works",
|
|
},
|
|
});
|
|
itBundled("packagejson/BrowserESBuildIssue2002C", {
|
|
todo: true,
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `require('pkg/sub')`,
|
|
"/Users/user/project/src/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"browser": {
|
|
"./sub": "./sub/foo.js",
|
|
"./sub/sub.js": "./sub/bar.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/src/node_modules/pkg/sub/foo.js": `require('sub')`,
|
|
"/Users/user/project/src/node_modules/sub/index.js": `console.log('it works')`,
|
|
},
|
|
run: {
|
|
stdout: "it works",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardImportOnly", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import value from 'demo-pkg'
|
|
console.log(value)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./module.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": `module.exports = 'main'`,
|
|
"/Users/user/project/node_modules/demo-pkg/module.js": `export default 'module'`,
|
|
},
|
|
run: {
|
|
stdout: "module",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardRequireOnly", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `console.log(require('demo-pkg'))`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./module.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": `module.exports = 'main'`,
|
|
"/Users/user/project/node_modules/demo-pkg/module.js": `export default 'module'`,
|
|
},
|
|
run: {
|
|
stdout: "main",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardImportAndRequireSameFile", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import value from 'demo-pkg'
|
|
console.log(value, require('demo-pkg'))
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./module.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": `module.exports = 'main'`,
|
|
"/Users/user/project/node_modules/demo-pkg/module.js": `export default 'module'`,
|
|
},
|
|
run: {
|
|
stdout: "main main",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardImportAndRequireSeparateFiles", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import './test-main'
|
|
import './test-module'
|
|
`,
|
|
"/Users/user/project/src/test-main.js": `console.log(require('demo-pkg'))`,
|
|
"/Users/user/project/src/test-module.js": /* js */ `
|
|
import value from 'demo-pkg'
|
|
console.log(value)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./module.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": `module.exports = 'main'`,
|
|
"/Users/user/project/node_modules/demo-pkg/module.js": `export default 'module'`,
|
|
},
|
|
run: {
|
|
stdout: "main\nmain",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardImportAndRequireForceModuleBeforeMain", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import './test-main'
|
|
import './test-module'
|
|
`,
|
|
"/Users/user/project/src/test-main.js": `console.log(require('demo-pkg').default)`,
|
|
"/Users/user/project/src/test-module.js": /* js */ `
|
|
import value from 'demo-pkg'
|
|
console.log(value)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./module.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": `module.exports = 'main'`,
|
|
"/Users/user/project/node_modules/demo-pkg/module.js": `export default 'module'`,
|
|
},
|
|
mainFields: ["module", "main"],
|
|
run: {
|
|
stdout: "module\nmodule",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardImportAndRequireImplicitMain", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import './test-index'
|
|
import './test-module'
|
|
`,
|
|
"/Users/user/project/src/test-index.js": `console.log(require('demo-pkg'))`,
|
|
"/Users/user/project/src/test-module.js": /* js */ `
|
|
import value from 'demo-pkg'
|
|
console.log(value)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"module": "./module.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/index.js": `module.exports = 'index'`,
|
|
"/Users/user/project/node_modules/demo-pkg/module.js": `export default 'module'`,
|
|
},
|
|
run: {
|
|
stdout: "index\nindex",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardImportAndRequireImplicitMainForceModuleBeforeMain", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import './test-index'
|
|
import './test-module'
|
|
`,
|
|
"/Users/user/project/src/test-index.js": `console.log(require('demo-pkg').default)`,
|
|
"/Users/user/project/src/test-module.js": /* js */ `
|
|
import value from 'demo-pkg'
|
|
console.log(value)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"module": "./module.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/index.js": `module.exports = 'index'`,
|
|
"/Users/user/project/node_modules/demo-pkg/module.js": `export default 'module'`,
|
|
},
|
|
mainFields: ["module", "main"],
|
|
run: {
|
|
stdout: "module\nmodule",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardImportAndRequireBrowser", {
|
|
todo: true,
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import './test-main'
|
|
import './test-module'
|
|
`,
|
|
"/Users/user/project/src/test-main.js": `console.log(require('demo-pkg'))`,
|
|
"/Users/user/project/src/test-module.js": /* js */ `
|
|
import value from 'demo-pkg'
|
|
console.log(value)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js",
|
|
"module": "./module.js",
|
|
"browser": {
|
|
"./main.js": "./main.browser.js",
|
|
"./module.js": "./module.browser.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.js": `module.exports = 'main'`,
|
|
"/Users/user/project/node_modules/demo-pkg/module.js": `export default 'module'`,
|
|
"/Users/user/project/node_modules/demo-pkg/main.browser.js": `module.exports = 'browser main'`,
|
|
"/Users/user/project/node_modules/demo-pkg/module.browser.js": `export default 'browser module'`,
|
|
},
|
|
run: {
|
|
stdout: "browser main\nbrowser main",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardMainFieldWithoutExtension", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
const { foo } = require("bar");
|
|
const { foo: foo2 } = await import("bar");
|
|
console.log(foo === foo2);
|
|
`,
|
|
"/Users/user/project/node_modules/bar/package.json": /* json */ `
|
|
{
|
|
"name": "bar",
|
|
"version": "2.0.0",
|
|
"main": "index"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/bar/index.js": /* js */ `
|
|
module.exports.foo = function() { return "cjs"; };
|
|
`,
|
|
"/Users/user/project/node_modules/bar/index.mjs": /* js */ `
|
|
export const foo = function(){ return "esm"; };
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "true",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardModuleFieldAndMainFieldWithoutExtension", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
const { foo } = require("bar");
|
|
const { foo: foo2 } = await import("bar");
|
|
console.log(foo === foo2);
|
|
`,
|
|
"/Users/user/project/node_modules/bar/package.json": /* json */ `
|
|
{
|
|
"name": "bar",
|
|
"version": "2.0.0",
|
|
"main": "index",
|
|
"module": "index.mjs"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/bar/index.js": /* js */ `
|
|
module.exports.foo = function() { return "cjs"; };
|
|
`,
|
|
"/Users/user/project/node_modules/bar/index.mjs": /* js */ `
|
|
export const foo = function(){ return "esm"; };
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "true",
|
|
},
|
|
});
|
|
itBundled("packagejson/DualPackageHazardModuleFieldNoMainField", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
const { foo } = require("bar");
|
|
const { foo: foo2 } = await import("bar");
|
|
console.log(foo === foo2);
|
|
`,
|
|
"/Users/user/project/node_modules/bar/package.json": /* json */ `
|
|
{
|
|
"name": "bar",
|
|
"version": "2.0.0",
|
|
"module": "index.mjs"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/bar/index.js": /* js */ `
|
|
module.exports.foo = function() { return "cjs"; };
|
|
`,
|
|
"/Users/user/project/node_modules/bar/index.mjs": /* js */ `
|
|
export const foo = function(){ return "esm"; };
|
|
`,
|
|
},
|
|
run: {
|
|
stdout: "true",
|
|
},
|
|
});
|
|
itBundled("packagejson/MainFieldsA", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import value from 'demo-pkg'
|
|
console.log(value)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"a": "./a.js",
|
|
"b": "./b.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/a.js": `module.exports = 'a'`,
|
|
"/Users/user/project/node_modules/demo-pkg/b.js": `export default 'b'`,
|
|
},
|
|
mainFields: ["a", "b"],
|
|
run: {
|
|
stdout: "a",
|
|
},
|
|
});
|
|
itBundled("packagejson/MainFieldsB", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import value from 'demo-pkg'
|
|
console.log(value)
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/package.json": /* json */ `
|
|
{
|
|
"a": "./a.js",
|
|
"b": "./b.js"
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/demo-pkg/a.js": `module.exports = 'a'`,
|
|
"/Users/user/project/node_modules/demo-pkg/b.js": `export default 'b'`,
|
|
},
|
|
mainFields: ["b", "a"],
|
|
run: {
|
|
stdout: "b",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsErrorInvalidModuleSpecifier", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import 'pkg1'
|
|
import 'pkg2'
|
|
import 'pkg3'
|
|
import 'pkg4'
|
|
import 'pkg5'
|
|
import 'pkg6'
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": `{ "exports": { ".": "./%%" } }`,
|
|
"/Users/user/project/node_modules/pkg2/package.json": `{ "exports": { ".": "./%2f" } }`,
|
|
"/Users/user/project/node_modules/pkg3/package.json": `{ "exports": { ".": "./%2F" } }`,
|
|
"/Users/user/project/node_modules/pkg4/package.json": `{ "exports": { ".": "./%5c" } }`,
|
|
"/Users/user/project/node_modules/pkg5/package.json": `{ "exports": { ".": "./%5C" } }`,
|
|
"/Users/user/project/node_modules/pkg6/package.json": `{ "exports": { ".": "./%31.js" } }`,
|
|
"/Users/user/project/node_modules/pkg6/1.js": `console.log(1)`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [
|
|
`Could not resolve: "pkg1". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg2". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg3". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg4". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg5". Maybe you need to "bun install"?`,
|
|
],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsErrorInvalidPackageConfiguration", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import 'pkg1'
|
|
import 'pkg2/foo'
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": `{ "exports": { ".": false } }`,
|
|
"/Users/user/project/node_modules/pkg2/package.json": `{ "exports": { "./foo": false } }`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [
|
|
`Could not resolve: "pkg1". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg2/foo". Maybe you need to "bun install"?`,
|
|
],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsErrorInvalidPackageTarget", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import 'pkg1'
|
|
import 'pkg2'
|
|
import 'pkg3'
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": `{ "exports": { ".": "invalid" } }`,
|
|
"/Users/user/project/node_modules/pkg2/package.json": `{ "exports": { ".": "./../pkg3" } }`,
|
|
"/Users/user/project/node_modules/pkg3/package.json": `{ "exports": { ".": "./node_modules/pkg" } }`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [
|
|
`Could not resolve: "pkg1". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg2". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg3". Maybe you need to "bun install"?`,
|
|
],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsErrorPackagePathNotExported", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg1/foo'`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": `{ "exports": { ".": {} } }`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "pkg1/foo". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsErrorModuleNotFound", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg1'`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": `{ "exports": { ".": "./foo.js" } }`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "pkg1". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsErrorUnsupportedDirectoryImport", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import 'pkg1'
|
|
import 'pkg2'
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": `{ "exports": { ".": "./foo/" } }`,
|
|
"/Users/user/project/node_modules/pkg2/package.json": `{ "exports": { ".": "./foo" } }`,
|
|
"/Users/user/project/node_modules/pkg2/foo/bar.js": `console.log(bar)`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [
|
|
`Could not resolve: "pkg1". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg2". Maybe you need to "bun install"?`,
|
|
],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsRequireOverImport", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `require('pkg')`,
|
|
"/Users/user/project/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"import": "./import.js",
|
|
"require": "./require.js",
|
|
"default": "./default.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/import.js": `console.log('FAILURE')`,
|
|
"/Users/user/project/node_modules/pkg/require.js": `console.log('SUCCESS')`,
|
|
},
|
|
run: {
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsImportOverRequire", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg'`,
|
|
"/Users/user/project/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"require": "./require.js",
|
|
"import": "./import.js",
|
|
"default": "./default.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/require.js": `console.log('FAILURE')`,
|
|
"/Users/user/project/node_modules/pkg/import.js": `console.log('SUCCESS')`,
|
|
},
|
|
run: {
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsDefaultOverImportAndRequire", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg'`,
|
|
"/Users/user/project/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"default": "./default.js",
|
|
"import": "./import.js",
|
|
"require": "./require.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/require.js": `console.log('FAILURE')`,
|
|
"/Users/user/project/node_modules/pkg/import.js": `console.log('FAILURE')`,
|
|
"/Users/user/project/node_modules/pkg/default.js": `console.log('SUCCESS')`,
|
|
},
|
|
run: {
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsEntryPointImportOverRequire", {
|
|
todo: true,
|
|
files: {
|
|
"/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"import": "./import.js",
|
|
"require": "./require.js"
|
|
},
|
|
"module": "./module.js",
|
|
"main": "./main.js"
|
|
}
|
|
`,
|
|
"/node_modules/pkg/import.js": `console.log('SUCCESS')`,
|
|
"/node_modules/pkg/require.js": `console.log('FAILURE')`,
|
|
"/node_modules/pkg/module.js": `console.log('FAILURE')`,
|
|
"/node_modules/pkg/main.js": `console.log('FAILURE')`,
|
|
},
|
|
entryPoints: ["pkg"],
|
|
run: {
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsEntryPointRequireOnly", {
|
|
files: {
|
|
"/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"require": "./require.js"
|
|
},
|
|
"module": "./module.js",
|
|
"main": "./main.js"
|
|
}
|
|
`,
|
|
"/node_modules/pkg/require.js": `console.log('FAILURE')`,
|
|
"/node_modules/pkg/module.js": `console.log('FAILURE')`,
|
|
"/node_modules/pkg/main.js": `console.log('FAILURE')`,
|
|
},
|
|
entryPointsRaw: ["pkg"],
|
|
bundleErrors: {
|
|
"<bun>": [`ModuleNotFound resolving "pkg" (entry point)`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsEntryPointModuleOverMain", {
|
|
files: {
|
|
"/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"module": "./module.js",
|
|
"main": "./main.js"
|
|
}
|
|
`,
|
|
"/node_modules/pkg/module.js": `console.log('SUCCESS')`,
|
|
"/node_modules/pkg/main.js": `console.log('FAILURE')`,
|
|
},
|
|
entryPointsRaw: ["pkg"],
|
|
outfile: "out.js",
|
|
run: {
|
|
file: "out.js",
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsEntryPointMainOnly", {
|
|
files: {
|
|
"/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"main": "./main.js"
|
|
}
|
|
`,
|
|
"/node_modules/pkg/main.js": `console.log('SUCCESS')`,
|
|
},
|
|
entryPointsRaw: ["pkg"],
|
|
outfile: "out.js",
|
|
run: {
|
|
file: "out.js",
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsBrowser", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg'`,
|
|
"/Users/user/project/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"node": "./node.js",
|
|
"browser": "./browser.js",
|
|
"default": "./default.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/node.js": `console.log('FAILURE')`,
|
|
"/Users/user/project/node_modules/pkg/browser.js": `console.log('SUCCESS')`,
|
|
},
|
|
target: "browser",
|
|
outfile: "/Users/user/project/out.js",
|
|
run: {
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsNode", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg'`,
|
|
"/Users/user/project/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"browser": "./browser.js",
|
|
"node": "./node.js",
|
|
"default": "./default.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/browser.js": `console.log('FAILURE')`,
|
|
"/Users/user/project/node_modules/pkg/node.js": `console.log('SUCCESS')`,
|
|
},
|
|
target: "node",
|
|
outfile: "/Users/user/project/out.js",
|
|
run: {
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsOrderIndependent", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import 'pkg1/foo/bar.js'
|
|
import 'pkg2/foo/bar.js'
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./": "./1/",
|
|
"./foo/": "./2/"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/1/foo/bar.js": `console.log('FAILURE')`,
|
|
"/Users/user/project/node_modules/pkg1/2/bar.js": `console.log('SUCCESS')`,
|
|
"/Users/user/project/node_modules/pkg2/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./foo/": "./1/",
|
|
"./": "./2/"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg2/1/bar.js": `console.log('SUCCESS')`,
|
|
"/Users/user/project/node_modules/pkg2/2/foo/bar.js": `console.log('FAILURE')`,
|
|
},
|
|
run: {
|
|
stdout: "SUCCESS\nSUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsWildcard", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import 'pkg1/foo'
|
|
import 'pkg1/foo2'
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./foo*": "./file*.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/file.js": `console.log('SUCCESS')`,
|
|
"/Users/user/project/node_modules/pkg1/file2.js": `console.log('SUCCESS')`,
|
|
},
|
|
run: {
|
|
stdout: "SUCCESS\nSUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsErrorMissingTrailingSlash", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg1/foo/bar'`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": `{ "exports": { "./foo/": "./test" } }`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "pkg1/foo/bar". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsCustomConditions", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg1'`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"custom1": "./custom1.js",
|
|
"custom2": "./custom2.js",
|
|
"default": "./default.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/custom2.js": `console.log('SUCCESS')`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
conditions: ["custom2"],
|
|
run: {
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsCustomConditionsAPI", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg1'`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"custom1": "./custom1.js",
|
|
"custom2": "./custom2.js",
|
|
"default": "./default.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/custom2.js": `console.log('SUCCESS')`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
conditions: ["custom2"],
|
|
backend: "api",
|
|
run: {
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsNotExactMissingExtension", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg1/foo/bar'`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./foo/": "./dir/"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/dir/bar.js": `console.log('SUCCESS')`,
|
|
},
|
|
run: {
|
|
stdout: "SUCCESS",
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsNotExactMissingExtensionPattern", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg1/foo/bar'`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./foo/*": "./dir/*"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/dir/bar.js": `console.log('SUCCESS')`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "pkg1/foo/bar". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsExactMissingExtension", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'pkg1/foo/bar'`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./foo/bar": "./dir/bar"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/dir/bar.js": `console.log('SUCCESS')`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "pkg1/foo/bar". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsNoConditionsMatch", {
|
|
// GENERATED
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import 'pkg1'
|
|
import 'pkg1/foo.js'
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
".": {
|
|
"what": "./foo.js"
|
|
},
|
|
"./foo.js": {
|
|
"what": "./foo.js"
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/foo.js": `console.log('FAILURE')`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [
|
|
`Could not resolve: "pkg1". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg1/foo.js". Maybe you need to "bun install"?`,
|
|
],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsMustUseRequire", {
|
|
todo: true,
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import 'pkg1'
|
|
import 'pkg1/foo.js'
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
".": {
|
|
"require": "./foo.js"
|
|
},
|
|
"./foo.js": {
|
|
"require": "./foo.js"
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/foo.js": `console.log('FAILURE')`,
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsMustUseImport", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
require('pkg1')
|
|
require('pkg1/foo.js')
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
".": {
|
|
"import": "./foo.js"
|
|
},
|
|
"./foo.js": {
|
|
"import": "./foo.js"
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg1/foo.js": `console.log('FAILURE')`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [
|
|
`Could not resolve: "pkg1". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg1/foo.js". Maybe you need to "bun install"?`,
|
|
],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsReverseLookup", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
require('pkg/path/to/real/file')
|
|
require('pkg/path/to/other/file')
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./lib/te*": {
|
|
"default": "./path/to/re*.js"
|
|
},
|
|
"./extra/": {
|
|
"default": "./path/to/"
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/path/to/real/file.js": ``,
|
|
"/Users/user/project/node_modules/pkg/path/to/other/file.js": ``,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [
|
|
`Could not resolve: "pkg/path/to/real/file". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg/path/to/other/file". Maybe you need to "bun install"?`,
|
|
],
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsPatternTrailers", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import 'pkg/path/foo.js/bar.js'
|
|
import 'pkg2/features/abc'
|
|
import 'pkg2/features/xyz.js'
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./path/*/bar.js": "./dir/baz-*"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/dir/baz-foo.js": `console.log('works')`,
|
|
"/Users/user/project/node_modules/pkg2/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./features/*": "./public/*.js",
|
|
"./features/*.js": "./public/*.js"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg2/public/abc.js": `console.log('abc')`,
|
|
"/Users/user/project/node_modules/pkg2/public/xyz.js": `console.log('xyz')`,
|
|
},
|
|
run: {
|
|
stdout: `works\nabc\nxyz`,
|
|
},
|
|
});
|
|
itBundled("packagejson/ExportsAlternatives", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import redApple from 'pkg/apples/red.js'
|
|
import greenApple from 'pkg/apples/green.js'
|
|
import redBook from 'pkg/books/red'
|
|
import greenBook from 'pkg/books/green'
|
|
console.log({redApple, greenApple, redBook, greenBook})
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/package.json": /* json */ `
|
|
{
|
|
"exports": {
|
|
"./apples/": ["./good-apples/", "./bad-apples/"],
|
|
"./books/*": ["./good-books/*-book.js", "./bad-books/*-book.js"]
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/node_modules/pkg/good-apples/green.js": `export default '🍏'`,
|
|
"/Users/user/project/node_modules/pkg/bad-apples/red.js": `export default '🍎'`,
|
|
"/Users/user/project/node_modules/pkg/good-books/green-book.js": `export default '📗'`,
|
|
"/Users/user/project/node_modules/pkg/bad-books/red-book.js": `export default '📕'`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [
|
|
`Could not resolve: "pkg/apples/red.js". Maybe you need to "bun install"?`,
|
|
`Could not resolve: "pkg/books/red". Maybe you need to "bun install"?`,
|
|
],
|
|
},
|
|
});
|
|
itBundled("packagejson/Imports", {
|
|
files: {
|
|
"/Users/user/project/src/foo/entry.js": /* js */ `
|
|
import '#top-level'
|
|
import '#nested/path.js'
|
|
import '#star/c.js'
|
|
import '#slash/d.js'
|
|
`,
|
|
"/Users/user/project/src/package.json": /* json */ `
|
|
{
|
|
"imports": {
|
|
"#top-level": "./a.js",
|
|
"#nested/path.js": "./b.js",
|
|
"#star/*": "./some-star/*",
|
|
"#slash/": "./some-slash/"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/src/a.js": `console.log('a.js')`,
|
|
"/Users/user/project/src/b.js": `console.log('b.js')`,
|
|
"/Users/user/project/src/some-star/c.js": `console.log('c.js')`,
|
|
"/Users/user/project/src/some-slash/d.js": `console.log('d.js')`,
|
|
},
|
|
run: {
|
|
stdout: `a.js\nb.js\nc.js\nd.js`,
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportsRemapToOtherPackage", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": /* js */ `
|
|
import '#top-level'
|
|
import '#nested/path.js'
|
|
import '#star/c.js'
|
|
import '#slash/d.js'
|
|
`,
|
|
"/Users/user/project/src/package.json": /* json */ `
|
|
{
|
|
"imports": {
|
|
"#top-level": "pkg/a.js",
|
|
"#nested/path.js": "pkg/b.js",
|
|
"#star/*": "pkg/some-star/*",
|
|
"#slash/": "pkg/some-slash/"
|
|
}
|
|
}
|
|
`,
|
|
"/Users/user/project/src/node_modules/pkg/a.js": `console.log('a.js')`,
|
|
"/Users/user/project/src/node_modules/pkg/b.js": `console.log('b.js')`,
|
|
"/Users/user/project/src/node_modules/pkg/some-star/c.js": `console.log('c.js')`,
|
|
"/Users/user/project/src/node_modules/pkg/some-slash/d.js": `console.log('d.js')`,
|
|
},
|
|
run: {
|
|
stdout: `a.js\nb.js\nc.js\nd.js`,
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportsErrorMissingRemappedPackage", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import '#foo'`,
|
|
"/Users/user/project/src/package.json": /* json */ `
|
|
{
|
|
"imports": {
|
|
"#foo": "bar"
|
|
}
|
|
}
|
|
`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "#foo". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportsInvalidPackageConfiguration", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import '#foo'`,
|
|
"/Users/user/project/src/package.json": /* json */ `
|
|
{
|
|
"imports": "#foo"
|
|
}
|
|
`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "#foo". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportsErrorEqualsHash", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import '#'`,
|
|
"/Users/user/project/src/package.json": /* json */ `
|
|
{
|
|
"imports": {}
|
|
}
|
|
`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "#". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportsErrorStartsWithHashSlash", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import '#/foo'`,
|
|
"/Users/user/project/src/package.json": /* json */ `
|
|
{
|
|
"imports": {}
|
|
}
|
|
`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "#/foo". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/MainFieldsErrorMessageDefault", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'foo'`,
|
|
"/Users/user/project/node_modules/foo/package.json": /* json */ `
|
|
{
|
|
"main": "./foo"
|
|
}
|
|
`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "foo". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/MainFieldsErrorMessageNotIncluded", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'foo'`,
|
|
"/Users/user/project/node_modules/foo/package.json": /* json */ `
|
|
{
|
|
"main": "./foo"
|
|
}
|
|
`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "foo". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/MainFieldsErrorMessageEmpty", {
|
|
files: {
|
|
"/Users/user/project/src/entry.js": `import 'foo'`,
|
|
"/Users/user/project/node_modules/foo/package.json": /* json */ `
|
|
{
|
|
"main": "./foo"
|
|
}
|
|
`,
|
|
},
|
|
bundleErrors: {
|
|
"/Users/user/project/src/entry.js": [`Could not resolve: "foo". Maybe you need to "bun install"?`],
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
});
|
|
itBundled("packagejson/TypeShouldBeTypes", {
|
|
files: {
|
|
"/Users/user/project/src/index.js": ``,
|
|
"/Users/user/project/package.json": /* json */ `
|
|
{
|
|
"main": "./src/index.js",
|
|
"type": "./src/index.d.ts"
|
|
}
|
|
`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
bundleWarnings: {
|
|
"/Users/user/project/package.json": [
|
|
`"./src/index.d.ts" is not a valid value for "type" field (must be either "commonjs" or "module")`,
|
|
],
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportSelfUsingRequire", {
|
|
files: {
|
|
"/Users/user/project/src/index.js": /* js */ `
|
|
module.exports = 'index'
|
|
console.log(
|
|
require("xyz"),
|
|
require("xyz/bar"),
|
|
)
|
|
`,
|
|
"/Users/user/project/src/foo-import.js": `export default 'foo-import'`,
|
|
"/Users/user/project/src/foo-require.js": `module.exports = 'foo-require'`,
|
|
"/Users/user/project/package.json": /* json */ `
|
|
{
|
|
"name": "xyz",
|
|
"exports": {
|
|
".": "./src/index.js",
|
|
"./bar": {
|
|
"import": "./src/foo-import.js",
|
|
"require": "./src/foo-require.js"
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
run: {
|
|
stdout: `index foo-require`,
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportSelfUsingImport", {
|
|
files: {
|
|
"/Users/user/project/src/index.js": /* js */ `
|
|
import xyz from "xyz"
|
|
import foo from "xyz/bar"
|
|
export default 'index'
|
|
console.log(xyz, foo)
|
|
`,
|
|
"/Users/user/project/src/foo-import.js": `export default 'foo-import'`,
|
|
"/Users/user/project/src/foo-require.js": `module.exports = 'foo-require'`,
|
|
"/Users/user/project/package.json": /* json */ `
|
|
{
|
|
"name": "xyz",
|
|
"exports": {
|
|
".": "./src/index.js",
|
|
"./bar": {
|
|
"import": "./src/foo-import.js",
|
|
"require": "./src/foo-require.js"
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
run: {
|
|
stdout: `index foo-import`,
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportSelfUsingRequireScoped", {
|
|
files: {
|
|
"/Users/user/project/src/index.js": /* js */ `
|
|
module.exports = 'index'
|
|
console.log(
|
|
require("@some-scope/xyz"),
|
|
require("@some-scope/xyz/bar"),
|
|
)
|
|
`,
|
|
"/Users/user/project/src/foo-import.js": `export default 'foo-import'`,
|
|
"/Users/user/project/src/foo-require.js": `module.exports = 'foo-require'`,
|
|
"/Users/user/project/package.json": /* json */ `
|
|
{
|
|
"name": "@some-scope/xyz",
|
|
"exports": {
|
|
".": "./src/index.js",
|
|
"./bar": {
|
|
"import": "./src/foo-import.js",
|
|
"require": "./src/foo-require.js"
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
run: {
|
|
stdout: `index foo-require`,
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportSelfUsingImportScoped", {
|
|
files: {
|
|
"/Users/user/project/src/index.js": /* js */ `
|
|
import xyz from "@some-scope/xyz"
|
|
import foo from "@some-scope/xyz/bar"
|
|
export default 'index'
|
|
console.log(xyz, foo)
|
|
`,
|
|
"/Users/user/project/src/foo-import.js": `export default 'foo-import'`,
|
|
"/Users/user/project/src/foo-require.js": `module.exports = 'foo-require'`,
|
|
"/Users/user/project/package.json": /* json */ `
|
|
{
|
|
"name": "@some-scope/xyz",
|
|
"exports": {
|
|
".": "./src/index.js",
|
|
"./bar": {
|
|
"import": "./src/foo-import.js",
|
|
"require": "./src/foo-require.js"
|
|
}
|
|
}
|
|
}
|
|
`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
run: {
|
|
stdout: `index foo-import`,
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportSelfUsingRequireFailure", {
|
|
files: {
|
|
"/Users/user/project/src/index.js": `require("xyz/src/foo.js")`,
|
|
"/Users/user/project/src/foo.js": `module.exports = 'foo'`,
|
|
"/Users/user/project/package.json": /* json */ `
|
|
{
|
|
"name": "xyz",
|
|
"exports": {
|
|
".": "./src/index.js",
|
|
"./bar": "./src/foo.js"
|
|
}
|
|
}
|
|
`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
bundleErrors: {
|
|
"/Users/user/project/src/index.js": [`Could not resolve: "xyz/src/foo.js". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/ImportSelfUsingImportFailure", {
|
|
files: {
|
|
"/Users/user/project/src/index.js": `import "xyz/src/foo.js"`,
|
|
"/Users/user/project/src/foo.js": `export default 'foo'`,
|
|
"/Users/user/project/package.json": /* json */ `
|
|
{
|
|
"name": "xyz",
|
|
"exports": {
|
|
".": "./src/index.js",
|
|
"./bar": "./src/foo.js"
|
|
}
|
|
}
|
|
`,
|
|
},
|
|
outfile: "/Users/user/project/out.js",
|
|
bundleErrors: {
|
|
"/Users/user/project/src/index.js": [`Could not resolve: "xyz/src/foo.js". Maybe you need to "bun install"?`],
|
|
},
|
|
});
|
|
itBundled("packagejson/CommonJSVariableInESMTypeModule", {
|
|
files: {
|
|
"/entry.js": `module.exports = null`,
|
|
"/package.json": `{ "type": "module" }`,
|
|
},
|
|
});
|
|
itBundled("packagejson/NodePathsESBuildIssue2752", {
|
|
files: {
|
|
"/src/entry.js": /* js */ `
|
|
import "pkg1"
|
|
import "pkg2"
|
|
import "@scope/pkg3/baz"
|
|
import "@scope/pkg4"
|
|
`,
|
|
"/usr/lib/pkg/pkg1/package.json": `{ "main": "./foo.js" }`,
|
|
"/usr/lib/pkg/pkg1/foo.js": `console.log('pkg1')`,
|
|
"/lib/pkg/pkg2/package.json": `{ "exports": { ".": "./bar.js" } }`,
|
|
"/lib/pkg/pkg2/bar.js": `console.log('pkg2')`,
|
|
"/var/lib/pkg/@scope/pkg3/package.json": `{ "browser": { "./baz.js": "./baz-browser.js" } }`,
|
|
"/var/lib/pkg/@scope/pkg3/baz-browser.js": `console.log('pkg3')`,
|
|
"/tmp/pkg/@scope/pkg4/package.json": `{ "exports": { ".": { "import": "./bat.js" } } }`,
|
|
"/tmp/pkg/@scope/pkg4/bat.js": `console.log('pkg4')`,
|
|
},
|
|
nodePaths: ["/usr/lib/pkg", "/lib/pkg", "/var/lib/pkg", "/tmp/pkg"],
|
|
});
|
|
});
|