diff --git a/package-lock.json b/package-lock.json index b78ae1f..cb034c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,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" @@ -4964,6 +4965,16 @@ "yallist": "^3.0.2" } }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -5726,6 +5737,29 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-dts": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.1.1.tgz", + "integrity": "sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==", + "dev": true, + "license": "LGPL-3.0-only", + "dependencies": { + "magic-string": "^0.30.10" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.24.2" + }, + "peerDependencies": { + "rollup": "^3.29.4 || ^4", + "typescript": "^4.5 || ^5.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", diff --git a/package.json b/package.json index e48a82c..299a8da 100644 --- a/package.json +++ b/package.json @@ -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" ], @@ -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" diff --git a/rollup.config.ts b/rollup.config.ts index cc8844c..b239bbe 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -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'), + ], + }), +];