Skip to content

Commit fc3e70a

Browse files
committed
build(pkg): bundle dts files with rollup only
- https://github.com/Swatinem/rollup-plugin-dts - dtsroll is not configurable, does not allow externalizing with `package.json`, and does not properly externalize `@types/*` Signed-off-by: Lexus Drumgold <unicornware@flexdevelopment.llc>
1 parent 460eda4 commit fc3e70a

3 files changed

Lines changed: 91 additions & 90 deletions

File tree

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
},
123123
"scripts": {
124124
"build": "yarn clean:build && tsc -p tsconfig.build.json --noEmit false && yarn bundle:dts && yarn minify:build",
125-
"bundle:dts": "dtsroll --conditions=mlly && trash ./dist/{interfaces,types} && trash ./dist/{internal,lib}/index.d.mts || exit 0",
125+
"bundle:dts": "rollup --config=rollup.config.mts && trash dist/{interfaces,types} && trash dist/{internal,lib}/*.d.mts",
126126
"check:ci": "yarn dedupe --check && yarn check:format && yarn check:lint && yarn check:spelling && yarn typecheck && yarn check:types && yarn test:cov && yarn pack && yarn check:types:build && attw package.tgz && yarn clean:pack",
127127
"check:format": "dprint check --incremental=false",
128128
"check:lint": "eslint --exit-on-fatal-error --max-warnings 0 .",
@@ -179,6 +179,7 @@
179179
"@flex-development/remark-preset": "1.0.0",
180180
"@flex-development/tsconfig-types": "5.1.0",
181181
"@flex-development/tutils": "6.0.0-alpha.25",
182+
"@rollup/plugin-node-resolve": "16.0.3",
182183
"@tsconfig/strictest": "2.0.8",
183184
"@types/chai": "5.2.3",
184185
"@types/chai-string": "1.4.5",
@@ -195,7 +196,6 @@
195196
"cross-env": "10.1.0",
196197
"cspell": "9.6.4",
197198
"dprint": "0.51.1",
198-
"dtsroll": "1.7.6",
199199
"editorconfig": "3.0.1",
200200
"esbuild": "0.27.3",
201201
"eslint": "9.39.2",
@@ -209,6 +209,8 @@
209209
"remark": "15.0.1",
210210
"remark-cli": "12.0.1",
211211
"remark-lint-maximum-heading-length": "4.1.1",
212+
"rollup": "4.57.1",
213+
"rollup-plugin-dts": "6.3.0",
212214
"sh-syntax": "0.5.8",
213215
"trash-cli": "7.2.0",
214216
"typescript": "5.9.3",

rollup.config.mts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/**
2+
* @file rollup
3+
* @module config/rollup
4+
*/
5+
6+
import nodeResolve from '@rollup/plugin-node-resolve'
7+
import type {
8+
NormalizedOutputOptions,
9+
OutputBundle,
10+
PluginContext,
11+
RollupOptions
12+
} from 'rollup'
13+
import { dts } from 'rollup-plugin-dts'
14+
import pkg from './package.json' with { type: 'json' }
15+
16+
/**
17+
* The target file.
18+
*
19+
* @const {string} file
20+
*/
21+
const file: string = './dist/index.d.mts'
22+
23+
/**
24+
* The rollup configuration.
25+
*
26+
* @see {@linkcode RollupOptions}
27+
*
28+
* @type {RollupOptions}
29+
*/
30+
export default {
31+
external: Object.keys(pkg.dependencies),
32+
input: file,
33+
output: [{ file, format: 'esm' }],
34+
plugins: [
35+
nodeResolve({ extensions: ['.d.mts', '.mts'] }),
36+
dts(),
37+
{
38+
/**
39+
* Re-add lost `type` modifiers.
40+
*
41+
* The {@linkcode dts} plugin loses `type` modifiers during bundling.
42+
*
43+
* @see https://github.com/Swatinem/rollup-plugin-dts/issues/354
44+
*
45+
* @this {PluginContext}
46+
*
47+
* @param {NormalizedOutputOptions} options
48+
* The normalized output options
49+
* @param {OutputBundle} bundle
50+
* The output bundle object
51+
* @return {undefined}
52+
*/
53+
generateBundle(
54+
this: PluginContext,
55+
options: NormalizedOutputOptions,
56+
bundle: OutputBundle
57+
): undefined {
58+
for (const output of Object.values(bundle)) {
59+
if (output.type === 'chunk') {
60+
output.code = output.code
61+
.replaceAll('import *', 'import type *')
62+
.replaceAll('import {', 'import type {')
63+
}
64+
}
65+
66+
return void this
67+
}
68+
}
69+
]
70+
}

yarn.lock

Lines changed: 17 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ __metadata:
4545
languageName: node
4646
linkType: hard
4747

48-
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.26.2":
48+
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.26.2, @babel/code-frame@npm:^7.27.1":
4949
version: 7.29.0
5050
resolution: "@babel/code-frame@npm:7.29.0"
5151
dependencies:
@@ -1853,6 +1853,7 @@ __metadata:
18531853
"@flex-development/remark-preset": "npm:1.0.0"
18541854
"@flex-development/tsconfig-types": "npm:5.1.0"
18551855
"@flex-development/tutils": "npm:6.0.0-alpha.25"
1856+
"@rollup/plugin-node-resolve": "npm:16.0.3"
18561857
"@tsconfig/strictest": "npm:2.0.8"
18571858
"@types/chai": "npm:5.2.3"
18581859
"@types/chai-string": "npm:1.4.5"
@@ -1870,7 +1871,6 @@ __metadata:
18701871
cspell: "npm:9.6.4"
18711872
devlop: "npm:1.1.0"
18721873
dprint: "npm:0.51.1"
1873-
dtsroll: "npm:1.7.6"
18741874
editorconfig: "npm:3.0.1"
18751875
esbuild: "npm:0.27.3"
18761876
eslint: "npm:9.39.2"
@@ -1884,6 +1884,8 @@ __metadata:
18841884
remark: "npm:15.0.1"
18851885
remark-cli: "npm:12.0.1"
18861886
remark-lint-maximum-heading-length: "npm:4.1.1"
1887+
rollup: "npm:4.57.1"
1888+
rollup-plugin-dts: "npm:6.3.0"
18871889
sh-syntax: "npm:0.5.8"
18881890
trash-cli: "npm:7.2.0"
18891891
typescript: "npm:5.9.3"
@@ -2645,7 +2647,7 @@ __metadata:
26452647
languageName: node
26462648
linkType: hard
26472649

2648-
"@rollup/plugin-node-resolve@npm:^16.0.3":
2650+
"@rollup/plugin-node-resolve@npm:16.0.3":
26492651
version: 16.0.3
26502652
resolution: "@rollup/plugin-node-resolve@npm:16.0.3"
26512653
dependencies:
@@ -4050,18 +4052,6 @@ __metadata:
40504052
languageName: node
40514053
linkType: hard
40524054

4053-
"byte-size@npm:^9.0.1":
4054-
version: 9.0.1
4055-
resolution: "byte-size@npm:9.0.1"
4056-
peerDependencies:
4057-
"@75lb/nature": "*"
4058-
peerDependenciesMeta:
4059-
"@75lb/nature":
4060-
optional: true
4061-
checksum: 10/9554cb40e65480c88fc2568682132e67baa55a174441ad7c21c074d5f59f48c8a7bbee0086618debe08ca17b914bc4d9247ab05778d4d69a495e9ef196b95774
4062-
languageName: node
4063-
linkType: hard
4064-
40654055
"cacache@npm:^20.0.1":
40664056
version: 20.0.3
40674057
resolution: "cacache@npm:20.0.3"
@@ -4302,16 +4292,6 @@ __metadata:
43024292
languageName: node
43034293
linkType: hard
43044294

4305-
"cleye@npm:^2.2.1":
4306-
version: 2.2.1
4307-
resolution: "cleye@npm:2.2.1"
4308-
dependencies:
4309-
terminal-columns: "npm:^2.0.0"
4310-
type-flag: "npm:^4.0.3"
4311-
checksum: 10/4d24a7e4863d38b9a40c01ca332baa7526b320c14fc488e7fb2d3f54b0ad5baa8c5defa6fc6adc079f50f629409056d9da74be6611f6394b709c9062d39b2216
4312-
languageName: node
4313-
linkType: hard
4314-
43154295
"cli-highlight@npm:^2.1.11":
43164296
version: 2.1.11
43174297
resolution: "cli-highlight@npm:2.1.11"
@@ -4506,13 +4486,6 @@ __metadata:
45064486
languageName: node
45074487
linkType: hard
45084488

4509-
"convert-source-map@npm:^2.0.0":
4510-
version: 2.0.0
4511-
resolution: "convert-source-map@npm:2.0.0"
4512-
checksum: 10/c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15
4513-
languageName: node
4514-
linkType: hard
4515-
45164489
"cookie@npm:^1.0.2":
45174490
version: 1.1.1
45184491
resolution: "cookie@npm:1.1.1"
@@ -4955,30 +4928,6 @@ __metadata:
49554928
languageName: node
49564929
linkType: hard
49574930

4958-
"dtsroll@npm:1.7.6":
4959-
version: 1.7.6
4960-
resolution: "dtsroll@npm:1.7.6"
4961-
dependencies:
4962-
"@rollup/plugin-node-resolve": "npm:^16.0.3"
4963-
byte-size: "npm:^9.0.1"
4964-
cleye: "npm:^2.2.1"
4965-
convert-source-map: "npm:^2.0.0"
4966-
empathic: "npm:^2.0.0"
4967-
resolve-pkg-maps: "npm:^1.0.0"
4968-
rollup: "npm:^4.55.3"
4969-
rollup-plugin-import-trace: "npm:^1.0.0"
4970-
peerDependencies:
4971-
typescript: ^4.5 || ^5.0
4972-
vite: 5 || 6 || 7
4973-
peerDependenciesMeta:
4974-
vite:
4975-
optional: true
4976-
bin:
4977-
dtsroll: dist/cli.mjs
4978-
checksum: 10/8e025ef2a2c6fcb0fd642d972de2d0b1db367c2f383155c79f5dfcc798e01e7e4dbb3729b38a8a2d9cdfc54d0fdeb515945ec61dd63a7a5f70518015eb216704
4979-
languageName: node
4980-
linkType: hard
4981-
49824931
"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1":
49834932
version: 1.0.1
49844933
resolution: "dunder-proto@npm:1.0.1"
@@ -5046,13 +4995,6 @@ __metadata:
50464995
languageName: node
50474996
linkType: hard
50484997

5049-
"empathic@npm:^2.0.0":
5050-
version: 2.0.0
5051-
resolution: "empathic@npm:2.0.0"
5052-
checksum: 10/90f47d93f8d1db3aa00ce1bfae2940bf76379dbb34bd562edbd92c3564a173cb1d6bd3cadb645fad0224839c25886abde801155d9b972dda6add7a5cc8b35d48
5053-
languageName: node
5054-
linkType: hard
5055-
50564998
"encoding@npm:^0.1.13":
50574999
version: 0.1.13
50585000
resolution: "encoding@npm:0.1.13"
@@ -10624,22 +10566,23 @@ __metadata:
1062410566
languageName: node
1062510567
linkType: hard
1062610568

10627-
"rollup-plugin-import-trace@npm:^1.0.0":
10628-
version: 1.0.0
10629-
resolution: "rollup-plugin-import-trace@npm:1.0.0"
10569+
"rollup-plugin-dts@npm:6.3.0":
10570+
version: 6.3.0
10571+
resolution: "rollup-plugin-dts@npm:6.3.0"
10572+
dependencies:
10573+
"@babel/code-frame": "npm:^7.27.1"
10574+
magic-string: "npm:^0.30.21"
1063010575
peerDependencies:
10631-
rollup: ^3.0.0 || ^4.0.0
10632-
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
10633-
peerDependenciesMeta:
10634-
rollup:
10635-
optional: true
10636-
vite:
10576+
rollup: ^3.29.4 || ^4
10577+
typescript: ^4.5 || ^5.0
10578+
dependenciesMeta:
10579+
"@babel/code-frame":
1063710580
optional: true
10638-
checksum: 10/5555c4b1c32a710cfc869d5bf8910af88060b8afbdae9c7c282a9c490104eee47004a651f33bcdf44ebb99bee76c6f487d2ca168fb90c883e18a4a35b43b7b15
10581+
checksum: 10/1b2b25126eee0c4e7f59d82ee5850b0c5779a1a0bb77d677798e20a3d29dba76d1a19a73300ed5b20aab02f6888ecc4209a95b07f6cc9c1b80af14bdcbeda5b9
1063910582
languageName: node
1064010583
linkType: hard
1064110584

10642-
"rollup@npm:*, rollup@npm:^4.43.0, rollup@npm:^4.55.3":
10585+
"rollup@npm:*, rollup@npm:4.57.1, rollup@npm:^4.43.0":
1064310586
version: 4.57.1
1064410587
resolution: "rollup@npm:4.57.1"
1064510588
dependencies:
@@ -11413,13 +11356,6 @@ __metadata:
1141311356
languageName: node
1141411357
linkType: hard
1141511358

11416-
"terminal-columns@npm:^2.0.0":
11417-
version: 2.0.0
11418-
resolution: "terminal-columns@npm:2.0.0"
11419-
checksum: 10/f958993886e09d7c0780f47833316532a0c7dd7db2fb43da9d34a88c821633408a6e7084af59f99c20b045776814748f14a8e33573886186be7a30174092964f
11420-
languageName: node
11421-
linkType: hard
11422-
1142311359
"text-table@npm:^0.2.0":
1142411360
version: 0.2.0
1142511361
resolution: "text-table@npm:0.2.0"
@@ -11660,13 +11596,6 @@ __metadata:
1166011596
languageName: node
1166111597
linkType: hard
1166211598

11663-
"type-flag@npm:^4.0.3":
11664-
version: 4.0.3
11665-
resolution: "type-flag@npm:4.0.3"
11666-
checksum: 10/ffa9e56e50ed73ed802aa45b8d47eeba7677d2d66785e9153bfbc758c2613b6ba78b621d7766b713a287dbbe6758a61000f57d2ce8afc94e1876a37de914c73c
11667-
languageName: node
11668-
linkType: hard
11669-
1167011599
"typed-array-buffer@npm:^1.0.3":
1167111600
version: 1.0.3
1167211601
resolution: "typed-array-buffer@npm:1.0.3"

0 commit comments

Comments
 (0)