Skip to content

Commit

Permalink
Merge pull request #16 from michaeldzjap/feature/single-declaration-file
Browse files Browse the repository at this point in the history
Bundle types
  • Loading branch information
michaeldzjap authored Aug 31, 2024
2 parents 23dae25 + 32da781 commit ff38d9d
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 82 deletions.
34 changes: 34 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@
"exports": {
".": {
"import": {
"types": "./dist/types/index.d.mts",
"types": "./dist/index.d.mts",
"default": "./dist/es/index.js"
},
"require": {
"types": "./dist/types/index.d.ts",
"types": "./dist/index.d.ts",
"default": "./dist/cjs/index.js"
}
}
},
"types": "./dist/types/index.d.ts",
"types": "./dist/index.d.ts",
"files": [
"dist"
],
Expand Down Expand Up @@ -63,6 +63,7 @@
"lint-staged": "^15.2.0",
"prettier": "^3.2.4",
"rollup": "^4.9.6",
"rollup-plugin-dts": "^6.1.1",
"ts-jest": "^29.0.0",
"typescript": "^5.0.4",
"typescript-eslint": "^8.0.0"
Expand Down
145 changes: 66 additions & 79 deletions rollup.config.ts
Original file line number Diff line number Diff line change
@@ -1,93 +1,80 @@
import { copyFile, lstat, readdir, writeFile } from 'fs';
import { dirname, parse } from 'path';
import { writeFile } from 'fs';

import typescript from '@rollup/plugin-typescript';
import terser from '@rollup/plugin-terser';
import clean from '@rollup-extras/plugin-clean';
import { defineConfig } from 'rollup';
import { dts } from 'rollup-plugin-dts';

const local = process.env.NODE_ENV === 'local';

export default defineConfig({
input: 'src/index.ts',
output: [
{
dir: './dist',
entryFileNames: 'cjs/index.js',
format: 'cjs',
sourcemap: local,
exports: 'named',
},
{
dir: './dist',
entryFileNames: 'es/index.js',
format: 'es',
sourcemap: local,
export default [
defineConfig({
input: 'src/index.ts',
output: [
{
dir: './dist',
entryFileNames: 'cjs/index.js',
format: 'cjs',
sourcemap: local,
exports: 'named',
},
{
dir: './dist',
entryFileNames: 'es/index.js',
format: 'es',
sourcemap: local,
},
],
watch: {
include: 'src/**',
},
],
watch: {
include: 'src/**',
},
plugins: [
clean('dist'),
typescript({ sourceMap: local }),
terser(),
(() => ({
name: 'copyDeclarationFiles',
writeBundle: {
sequential: true,
order: 'post',
handler: ({ format }) => {
if (format === 'cjs') return;
plugins: [
clean('dist'),
typescript({ sourceMap: local }),
terser(),
(() => ({
name: 'createPackageFiles',
writeBundle: {
sequential: true,
order: 'post',
handler: ({ format }) => {
switch (format) {
case 'cjs': {
writeFile('./dist/cjs/package.json', '{\n\t"type": "commonjs"\n}', (err) => {
if (err) console.error(err);
});

readdir('./dist/types', { recursive: true }, (err, paths) => {
if (err) return console.error(err);
break;
}
case 'es': {
writeFile('./dist/es/package.json', '{\n\t"type": "module"\n}', (err) => {
if (err) console.error(err);
});

for (const path of paths) {
lstat(`./dist/types/${path}`, (err, stats) => {
if (err) return console.error(err);

if (stats.isFile()) {
const dir = dirname(path.toString()).replace(/^\./, '');

copyFile(
`./dist/types/${path}`,
`./dist/types/${dir ? `${dir}/` : dir}${parse(path.toString()).name}.mts`,
(err) => {
if (err) return console.error(err);
},
);
}
});
break;
}
}
});
},
}
}))(),
(() => ({
name: 'createPackageFiles',
writeBundle: {
sequential: true,
order: 'post',
handler: ({ format }) => {
switch (format) {
case 'cjs': {
writeFile('./dist/cjs/package.json', '{\n\t"type": "commonjs"\n}', (err) => {
if (err) console.error(err);
});

break;
}
case 'es': {
writeFile('./dist/es/package.json', '{\n\t"type": "module"\n}', (err) => {
if (err) console.error(err);
});

break;
}
}
},
},
}))(),
],
}),
defineConfig({
input: './dist/types/index.d.ts',
output: [
{
file: 'dist/index.d.ts',
format: 'cjs',
},
{
file: 'dist/index.d.mts',
format: 'es',
},
}))(),
],
});
],
plugins: [
dts(),
clean('dist/types'),
],
}),
];

0 comments on commit ff38d9d

Please sign in to comment.