Skip to content

Commit 002e090

Browse files
authored
fix: full CJS/ESM hybrid support with tsup (#303)
* fix: full CJS/ESM hybrid support with tsup * chore: update lock file
1 parent ab0fda2 commit 002e090

File tree

4 files changed

+905
-48
lines changed

4 files changed

+905
-48
lines changed

packages/multiple-select-vanilla/build-prod.mjs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
import { buildSync } from 'esbuild';
2-
import { globSync } from 'glob';
2+
import { globSync } from 'tinyglobby';
33

44
const buildFormats = ['cjs', 'esm'];
55
const localeFiles = globSync('src/locales/**/*.ts');
66
const localeEntryPoints = [];
77

88
for (const format of buildFormats) {
99
const extension = format === 'cjs' ? 'cjs' : 'js';
10-
// multiple-select.js
10+
11+
// - let's use TSUP to get valid hybrid (CJS/ESM) approach with are-the-types-wrong, however keep the rest of the build
12+
/*
1113
runBuild({
1214
format,
13-
outfile: `dist/multiple-select.${extension}`,
15+
outfile: `dist/index.${extension}`,
1416
});
17+
*/
1518

1619
// build all locales
1720
for (const localeFile of localeFiles) {

packages/multiple-select-vanilla/package.json

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,20 @@
2020
],
2121
"homepage": "https://github.com/ghiscoding/multiple-select-vanilla",
2222
"license": "MIT",
23-
"main": "./dist/multiple-select.cjs",
24-
"module": "./dist/multiple-select.js",
25-
"types": "dist/index.d.ts",
23+
"type": "module",
24+
"main": "./dist/index.cjs",
25+
"module": "./dist/index.mjs",
26+
"types": "./dist/index.d.ts",
2627
"exports": {
2728
".": {
28-
"types": "./dist/index.d.ts",
29-
"import": "./dist/multiple-select.js",
30-
"require": "./dist/multiple-select.cjs"
29+
"import": {
30+
"types": "./dist/index.d.ts",
31+
"default": "./dist/index.mjs"
32+
},
33+
"require": {
34+
"types": "./dist/index.d.cts",
35+
"default": "./dist/index.cjs"
36+
}
3137
},
3238
"./dist/browser/*": "./dist/browser/*",
3339
"./dist/locales/*": "./dist/locales/*",
@@ -50,16 +56,19 @@
5056
"url": "https://ko-fi.com/ghiscoding"
5157
},
5258
"scripts": {
59+
"are-type-wrong": "attw --pack .",
5360
"clean": "rimraf dist",
54-
"build": "pnpm build:all && pnpm build:types:prod",
55-
"postbuild": "pnpm sass:build && pnpm sass:copy",
61+
"esbuild:prod": "node build-prod.mjs",
62+
"build": "pnpm clean && node build-prod.mjs && pnpm build:types:prod && tsup && pnpm sass:build && pnpm sass:copy",
63+
"build:esbuild": "pnpm build:all && pnpm build:types:prod",
64+
"postbuild:esbuild": "pnpm sass:build && pnpm sass:copy",
5665
"dev:init": "pnpm sass:build && pnpm sass:copy && pnpm build:all",
5766
"build:all": "node build-prod.mjs && pnpm build:types:prod",
5867
"build:watch": "cross-env NODE_ENV='development' node build-watch.mjs",
5968
"build:locales": "esbuild src/locales/all-locales-index.ts --bundle --minify --format=iife --target=es2021 --sourcemap --outfile=dist/locales/multiple-select-all-locales.js",
6069
"build:esm": "esbuild src/index.ts --bundle --minify --format=esm --target=es2021 --sourcemap --outfile=dist/multiple-select.js",
6170
"build:types": "tsc --emitDeclarationOnly --incremental --declarationMap false --outDir dist",
62-
"build:types:prod": "tsc --emitDeclarationOnly --incremental --declarationMap --outDir dist",
71+
"build:types:prod": "tsc --emitDeclarationOnly --declarationMap --outDir dist",
6372
"sass:build": "sass src/styles:dist/styles/css --style=compressed --quiet-deps --no-source-map",
6473
"postsass:build": "postcss dist/styles/css/**/* --dir dist/styles/css --base dist/styles/css --no-map --use cssnano --use autoprefixer --style=compressed",
6574
"sass:watch": "sass src/styles:dist/styles/css --watch --style=compressed --quiet-deps --no-source-map",
@@ -69,16 +78,19 @@
6978
"@types/trusted-types": "^2.0.7"
7079
},
7180
"devDependencies": {
81+
"@arethetypeswrong/cli": "^0.16.4",
7282
"autoprefixer": "^10.4.20",
7383
"copyfiles": "^2.4.1",
7484
"cross-env": "^7.0.3",
7585
"cssnano": "^7.0.6",
76-
"esbuild": "^0.23.1",
86+
"esbuild": "^0.24.0",
87+
"esbuild-plugin-d.ts": "^1.3.0",
7788
"fs-extra": "^11.2.0",
78-
"glob": "^10.4.5",
7989
"postcss": "^8.4.47",
8090
"postcss-cli": "^11.0.0",
8191
"sass": "^1.79.3",
92+
"tinyglobby": "^0.2.9",
93+
"tsup": "^8.3.0",
8294
"typescript": "5.6.2"
8395
}
8496
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { defineConfig } from 'tsup';
2+
3+
export default defineConfig(options => [
4+
// for bundlers like vite, rollup, esbuild, webpack etc
5+
{
6+
entry: ['src/**.ts'],
7+
format: ['esm'],
8+
splitting: false,
9+
sourcemap: true,
10+
// clean: true,
11+
dts: !options.watch,
12+
outExtension: ({ format }) => ({ js: format === 'cjs' ? '.cjs' : '.mjs' }),
13+
},
14+
// common js for node and other backend runtimes
15+
{
16+
entry: ['src/index.ts'],
17+
format: ['cjs'],
18+
splitting: false,
19+
sourcemap: true,
20+
// clean: true,
21+
dts: !options.watch,
22+
outExtension: ({ format }) => ({
23+
js: format === 'cjs' ? '.cjs' : '.mjs',
24+
}),
25+
},
26+
27+
// IIFE bundle js for cdn (window object for legacy <script>)
28+
// {
29+
// entry: {
30+
// 'multiple-select': 'src/index.ts',
31+
// },
32+
// format: ['iife'],
33+
// globalName: 'MultipleSelect',
34+
// splitting: false,
35+
// sourcemap: true,
36+
// clean: true,
37+
// outExtension: ({ format }) => ({
38+
// js: '.iife.js',
39+
// }),
40+
// },
41+
]);

0 commit comments

Comments
 (0)