bunchee 5.0.1 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/bin/cli.js +4 -4
- package/dist/index.js +47 -29
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
</a>
|
|
15
15
|
</p>
|
|
16
16
|
|
|
17
|
-
**bunchee** is a zero configuration bundler makes bundling JS/
|
|
17
|
+
**bunchee** is a zero configuration bundler makes bundling JS/TS library effortless. It's built on top of Rollup and SWC ⚡️, allowing you to focus on writing code and generating multiple bundles (CommonJS or ESModule) at the same time.
|
|
18
18
|
It uses the standard exports configuration in `package.json` as the only source of truth, and uses entry file conventions to match your exports and build them into bundles.
|
|
19
19
|
|
|
20
20
|
## Quick Start
|
package/dist/bin/cli.js
CHANGED
|
@@ -474,7 +474,7 @@ function lint$1(pkg) {
|
|
|
474
474
|
}
|
|
475
475
|
}
|
|
476
476
|
|
|
477
|
-
var version = "5.
|
|
477
|
+
var version = "5.1.1";
|
|
478
478
|
|
|
479
479
|
function relativify(path) {
|
|
480
480
|
return path.startsWith('.') ? path : `./${path}`;
|
|
@@ -555,7 +555,7 @@ async function collectSourceEntriesByExportPath(sourceFolderPath, originalSubpat
|
|
|
555
555
|
});
|
|
556
556
|
for (const binDirent of binDirentList){
|
|
557
557
|
if (binDirent.isFile()) {
|
|
558
|
-
const binFileAbsolutePath = path__default.default.join(
|
|
558
|
+
const binFileAbsolutePath = path__default.default.join(absoluteDirPath, binDirent.name);
|
|
559
559
|
if (fs__default.default.existsSync(binFileAbsolutePath)) {
|
|
560
560
|
bins.set(normalizeExportPath(originalSubpath), binFileAbsolutePath);
|
|
561
561
|
}
|
|
@@ -610,7 +610,7 @@ async function collectSourceEntriesByExportPath(sourceFolderPath, originalSubpat
|
|
|
610
610
|
if (isTestFile(dirent.name)) {
|
|
611
611
|
continue;
|
|
612
612
|
}
|
|
613
|
-
const sourceFileAbsolutePath = path__default.default.join(
|
|
613
|
+
const sourceFileAbsolutePath = path__default.default.join(dirPath, dirent.name);
|
|
614
614
|
if (isBinaryPath) {
|
|
615
615
|
bins.set(originalSubpath, sourceFileAbsolutePath);
|
|
616
616
|
} else {
|
|
@@ -656,7 +656,7 @@ async function collectSourceEntries(sourceFolderPath) {
|
|
|
656
656
|
const binDirent = entryFileDirentList.find((dirent)=>getFileBasename(dirent.name) === 'bin');
|
|
657
657
|
if (binDirent) {
|
|
658
658
|
if (binDirent.isDirectory()) {
|
|
659
|
-
const binDirentList = await fsp__default.default.readdir(path__default.default.join(
|
|
659
|
+
const binDirentList = await fsp__default.default.readdir(path__default.default.join(sourceFolderPath, binDirent.name), {
|
|
660
660
|
withFileTypes: true
|
|
661
661
|
});
|
|
662
662
|
for (const binDirent of binDirentList){
|
package/dist/index.js
CHANGED
|
@@ -535,27 +535,25 @@ function relativify(path) {
|
|
|
535
535
|
// e.g.
|
|
536
536
|
// For a resolved file, if it's one of the entries,
|
|
537
537
|
// aliases it as export path, such as <absolute file> -> <pkg>/<export path>
|
|
538
|
-
function aliasEntries({ entry, entries, entriesAlias, format, dts }) {
|
|
539
|
-
let currentDistPath = '';
|
|
538
|
+
function aliasEntries({ entry, entries, entriesAlias, format, dts, cwd }) {
|
|
540
539
|
const entryAliasWithoutSelf = {
|
|
541
540
|
...entriesAlias,
|
|
542
541
|
[entry]: null
|
|
543
542
|
};
|
|
544
543
|
const pathToRelativeDistMap = new Map();
|
|
545
544
|
for (const [, exportCondition] of Object.entries(entries)){
|
|
546
|
-
|
|
547
|
-
const { import: importCond, require: requireCond, default: defaultCond } = exportCondition.export;
|
|
548
|
-
const firstCond = (_Object_entries_find = Object.entries(exportCondition.export).find(([key, cond])=>key !== 'types' && cond != null)) == null ? void 0 : _Object_entries_find[1];
|
|
545
|
+
const exportDistMaps = exportCondition.export;
|
|
549
546
|
if (dts) {
|
|
550
|
-
|
|
551
|
-
//
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
547
|
+
var _Object_entries_find;
|
|
548
|
+
// Search types + [format] condition from entries map
|
|
549
|
+
// e.g. import.types, require.types
|
|
550
|
+
const typeCond = (_Object_entries_find = Object.entries(exportDistMaps).find(([composedKey, cond])=>{
|
|
551
|
+
const typesSet = new Set(composedKey.split('.'));
|
|
552
|
+
const formatCond = format === 'cjs' ? 'require' : 'import';
|
|
553
|
+
return typesSet.has('types') && typesSet.has(formatCond) && cond != null;
|
|
554
|
+
})) == null ? void 0 : _Object_entries_find[1];
|
|
555
|
+
if (typeCond) {
|
|
556
|
+
pathToRelativeDistMap.set(exportCondition.source, typeCond);
|
|
559
557
|
}
|
|
560
558
|
}
|
|
561
559
|
}
|
|
@@ -563,23 +561,25 @@ function aliasEntries({ entry, entries, entriesAlias, format, dts }) {
|
|
|
563
561
|
name: 'alias',
|
|
564
562
|
resolveId: {
|
|
565
563
|
async handler (source, importer, options) {
|
|
566
|
-
const
|
|
567
|
-
if (
|
|
564
|
+
const resolved = await this.resolve(source, importer, options);
|
|
565
|
+
if (resolved != null) {
|
|
568
566
|
if (dts) {
|
|
569
567
|
// For types, generate relative path to the other type files,
|
|
570
568
|
// this will be compatible for the node10 ts module resolution.
|
|
571
|
-
const
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
const
|
|
575
|
-
const
|
|
569
|
+
const resolvedDist = pathToRelativeDistMap.get(resolved.id);
|
|
570
|
+
const entryDist = pathToRelativeDistMap.get(entry);
|
|
571
|
+
if (resolved.id !== entry && entryDist && resolvedDist) {
|
|
572
|
+
const absoluteEntryDist = path__default.default.resolve(cwd, entryDist);
|
|
573
|
+
const absoluteResolvedDist = path__default.default.resolve(cwd, resolvedDist);
|
|
574
|
+
const filePathBase = path__default.default.relative(path__default.default.dirname(absoluteEntryDist), absoluteResolvedDist);
|
|
575
|
+
const relativePath = relativify(filePathBase);
|
|
576
576
|
return {
|
|
577
577
|
id: relativePath,
|
|
578
578
|
external: true
|
|
579
579
|
};
|
|
580
580
|
}
|
|
581
581
|
} else {
|
|
582
|
-
const aliasedId = entryAliasWithoutSelf[
|
|
582
|
+
const aliasedId = entryAliasWithoutSelf[resolved.id];
|
|
583
583
|
if (aliasedId != null) {
|
|
584
584
|
return {
|
|
585
585
|
id: aliasedId
|
|
@@ -615,6 +615,23 @@ function prependDirectives() {
|
|
|
615
615
|
};
|
|
616
616
|
}
|
|
617
617
|
|
|
618
|
+
const prependShebang = (entry)=>({
|
|
619
|
+
name: 'prependShebang',
|
|
620
|
+
transform: (code, id)=>{
|
|
621
|
+
if (id !== entry) return;
|
|
622
|
+
const shebang = '#!/usr/bin/env node\n';
|
|
623
|
+
if (code.startsWith(shebang)) return;
|
|
624
|
+
const magicString = new MagicString__default.default(code);
|
|
625
|
+
magicString.prepend(shebang);
|
|
626
|
+
return {
|
|
627
|
+
code: magicString.toString(),
|
|
628
|
+
map: magicString.generateMap({
|
|
629
|
+
hires: true
|
|
630
|
+
})
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
});
|
|
634
|
+
|
|
618
635
|
function collectExportPath(exportValue, exportKey, currentPath, exportTypes, exportToDist) {
|
|
619
636
|
// End of searching, export value is file path.
|
|
620
637
|
// <export key>: <export value> (string)
|
|
@@ -1004,7 +1021,7 @@ async function collectSourceEntriesByExportPath(sourceFolderPath, originalSubpat
|
|
|
1004
1021
|
});
|
|
1005
1022
|
for (const binDirent of binDirentList){
|
|
1006
1023
|
if (binDirent.isFile()) {
|
|
1007
|
-
const binFileAbsolutePath = path__default.default.join(
|
|
1024
|
+
const binFileAbsolutePath = path__default.default.join(absoluteDirPath, binDirent.name);
|
|
1008
1025
|
if (fs__default.default.existsSync(binFileAbsolutePath)) {
|
|
1009
1026
|
bins.set(normalizeExportPath(originalSubpath), binFileAbsolutePath);
|
|
1010
1027
|
}
|
|
@@ -1059,7 +1076,7 @@ async function collectSourceEntriesByExportPath(sourceFolderPath, originalSubpat
|
|
|
1059
1076
|
if (isTestFile(dirent.name)) {
|
|
1060
1077
|
continue;
|
|
1061
1078
|
}
|
|
1062
|
-
const sourceFileAbsolutePath = path__default.default.join(
|
|
1079
|
+
const sourceFileAbsolutePath = path__default.default.join(dirPath, dirent.name);
|
|
1063
1080
|
if (isBinaryPath) {
|
|
1064
1081
|
bins.set(originalSubpath, sourceFileAbsolutePath);
|
|
1065
1082
|
} else {
|
|
@@ -1202,6 +1219,7 @@ const memoizeDtsPluginByKey = memoizeByKey(createDtsPlugin);
|
|
|
1202
1219
|
async function buildInputConfig(entry, bundleConfig, exportCondition, buildContext, dts) {
|
|
1203
1220
|
var _bundleConfig_file, _bundleConfig_file1;
|
|
1204
1221
|
const { entries, pkg, cwd, tsOptions: { tsConfigPath, tsCompilerOptions }, pluginContext } = buildContext;
|
|
1222
|
+
const isBinEntry = isBinExportPath(exportCondition.name);
|
|
1205
1223
|
const hasNoExternal = bundleConfig.external === null;
|
|
1206
1224
|
var _bundleConfig_external;
|
|
1207
1225
|
const externals = hasNoExternal ? [] : [
|
|
@@ -1253,13 +1271,15 @@ async function buildInputConfig(entry, bundleConfig, exportCondition, buildConte
|
|
|
1253
1271
|
entries,
|
|
1254
1272
|
entriesAlias: pluginContext.entriesAlias,
|
|
1255
1273
|
format: aliasFormat,
|
|
1256
|
-
dts
|
|
1274
|
+
dts,
|
|
1275
|
+
cwd
|
|
1257
1276
|
});
|
|
1258
1277
|
const commonPlugins = [
|
|
1259
1278
|
json__default.default(),
|
|
1260
1279
|
sizePlugin
|
|
1261
1280
|
];
|
|
1262
1281
|
const typesPlugins = [
|
|
1282
|
+
aliasPlugin,
|
|
1263
1283
|
...commonPlugins,
|
|
1264
1284
|
inlineCss({
|
|
1265
1285
|
skip: true
|
|
@@ -1273,10 +1293,7 @@ async function buildInputConfig(entry, bundleConfig, exportCondition, buildConte
|
|
|
1273
1293
|
const dtsPlugin = await memoizeDtsPluginByKey(uniqueProcessId)(tsCompilerOptions, tsConfigPath, cwd);
|
|
1274
1294
|
typesPlugins.push(dtsPlugin);
|
|
1275
1295
|
}
|
|
1276
|
-
const plugins = (dts ? [
|
|
1277
|
-
...typesPlugins,
|
|
1278
|
-
aliasPlugin
|
|
1279
|
-
] : [
|
|
1296
|
+
const plugins = (dts ? typesPlugins : [
|
|
1280
1297
|
...commonPlugins,
|
|
1281
1298
|
preserveDirectives__default.default(),
|
|
1282
1299
|
aliasPlugin,
|
|
@@ -1286,6 +1303,7 @@ async function buildInputConfig(entry, bundleConfig, exportCondition, buildConte
|
|
|
1286
1303
|
rawContent({
|
|
1287
1304
|
exclude: /node_modules/
|
|
1288
1305
|
}),
|
|
1306
|
+
isBinEntry && prependShebang(entry),
|
|
1289
1307
|
replace__default.default({
|
|
1290
1308
|
values: inlineDefinedValues,
|
|
1291
1309
|
preventAssignment: true
|