@@ -17,43 +17,43 @@ export const packages = [
17
17
description : "Types for the DOM, and other web technologies in browsers" ,
18
18
readme : "./readmes/web.md" ,
19
19
files : [
20
- { from : "../generated/dom.generated.d.ts" , to : "index.d.ts" } ,
20
+ { from : "../generated/dom.generated.d.ts" , to : "index.d.ts" , index : true } ,
21
21
{ from : "../generated/dom.iterable.generated.d.ts" , to : "iterable.d.ts" , autoImport : true } ,
22
- { from : "../generated/ts5.5/dom.generated.d.ts" , to : "ts5.5/index.d.ts" } ,
23
- { from : "../generated/ts5.5/dom.iterable.generated.d.ts" , to : "ts5.5/iterable.d.ts" , autoImport : true } ,
22
+ { from : "../generated/ts5.5/dom.generated.d.ts" , to : "ts5.5/index.d.ts" , index : true , group : "ts5.5" } ,
23
+ { from : "../generated/ts5.5/dom.iterable.generated.d.ts" , to : "ts5.5/iterable.d.ts" , autoImport : true , group : "ts5.5" } ,
24
24
] ,
25
25
} ,
26
26
{
27
27
name : "@types/serviceworker" ,
28
28
description : "Types for the global scope of Service Workers" ,
29
29
readme : "./readmes/serviceworker.md" ,
30
30
files : [
31
- { from : "../generated/serviceworker.generated.d.ts" , to : "index.d.ts" } ,
32
- { from : "../generated/serviceworker.iterable.generated.d.ts" , to : "iterable.d.ts" , autoImport : true } ,
33
- { from : "../generated/ts5.5/serviceworker.generated.d.ts" , to : "ts5.5/index.d.ts" } ,
34
- { from : "../generated/ts5.5/serviceworker.iterable.generated.d.ts" , to : "ts5.5/iterable.d.ts" , autoImport : true } ,
31
+ { from : "../generated/serviceworker.generated.d.ts" , to : "index.d.ts" , index : true } ,
32
+ { from : "../generated/serviceworker.iterable.generated.d.ts" , to : "iterable.d.ts" , autoImport : true } ,
33
+ { from : "../generated/ts5.5/serviceworker.generated.d.ts" , to : "ts5.5/index.d.ts" , index : true , group : "ts5.5" } ,
34
+ { from : "../generated/ts5.5/serviceworker.iterable.generated.d.ts" , to : "ts5.5/iterable.d.ts" , autoImport : true , group : "ts5.5" } ,
35
35
] ,
36
36
} ,
37
37
{
38
38
name : "@types/audioworklet" ,
39
39
description : "Types for the global scope of Audio Worklets" ,
40
40
readme : "./readmes/audioworklet.md" ,
41
41
files : [
42
- { from : "../generated/audioworklet.generated.d.ts" , to : "index.d.ts" } ,
43
- { from : "../generated/audioworklet.iterable.generated.d.ts" , to : "iterable.d.ts" , autoImport : true } ,
44
- { from : "../generated/ts5.5/audioworklet.generated.d.ts" , to : "ts5.5/index.d.ts" } ,
45
- { from : "../generated/ts5.5/audioworklet.iterable.generated.d.ts" , to : "ts5.5/iterable.d.ts" , autoImport : true } ,
42
+ { from : "../generated/audioworklet.generated.d.ts" , to : "index.d.ts" , index : true } ,
43
+ { from : "../generated/audioworklet.iterable.generated.d.ts" , to : "iterable.d.ts" , autoImport : true } ,
44
+ { from : "../generated/ts5.5/audioworklet.generated.d.ts" , to : "ts5.5/index.d.ts" , index : true , group : "ts5.5" } ,
45
+ { from : "../generated/ts5.5/audioworklet.iterable.generated.d.ts" , to : "ts5.5/iterable.d.ts" , autoImport : true , group : "ts5.5" } ,
46
46
] ,
47
47
} ,
48
48
{
49
49
name : "@types/sharedworker" ,
50
50
description : "Types for the global scope of Shared Workers" ,
51
51
readme : "./readmes/sharedworker.md" ,
52
52
files : [
53
- { from : "../generated/sharedworker.generated.d.ts" , to : "index.d.ts" } ,
53
+ { from : "../generated/sharedworker.generated.d.ts" , to : "index.d.ts" , index : true } ,
54
54
{ from : "../generated/sharedworker.iterable.generated.d.ts" , to : "iterable.d.ts" , autoImport : true } ,
55
- { from : "../generated/ts5.5/sharedworker.generated.d.ts" , to : "ts5.5/index.d.ts" } ,
56
- { from : "../generated/ts5.5/sharedworker.iterable.generated.d.ts" , to : "ts5.5/iterable.d.ts" , autoImport : true } ,
55
+ { from : "../generated/ts5.5/sharedworker.generated.d.ts" , to : "ts5.5/index.d.ts" , index : true , group : "ts5.5" } ,
56
+ { from : "../generated/ts5.5/sharedworker.iterable.generated.d.ts" , to : "ts5.5/iterable.d.ts" , autoImport : true , group : "ts5.5" } ,
57
57
] ,
58
58
} ,
59
59
] ;
@@ -67,6 +67,7 @@ import fetch from "node-fetch";
67
67
import { fileURLToPath } from "url" ;
68
68
import semver from "semver" ;
69
69
import pkg from "prettier" ;
70
+ import path from "path" ;
70
71
const { format } = pkg ;
71
72
72
73
const go = async ( ) => {
@@ -187,16 +188,48 @@ function copyREADME(pkg, pkgJSON, writePath) {
187
188
* @param {URL } packagePath
188
189
*/
189
190
function prependAutoImports ( pkg , packagePath ) {
190
- const index = new URL ( "index.d.ts" , packagePath ) ;
191
- if ( ! fs . existsSync ( index ) ) return ;
191
+ /**
192
+ * @type {Map<string | undefined, typeof pkg.files[number][]> }
193
+ */
194
+ const groups = new Map ( ) ;
195
+ for ( const file of pkg . files ) {
196
+ let files = groups . get ( file . group ) ;
197
+ if ( ! files ) groups . set ( file . group , ( files = [ ] ) ) ;
198
+ files . push ( file ) ;
199
+ }
200
+ for ( const files of groups . values ( ) ) {
201
+ const indexFile = files . find ( ( file ) => file . index ) ;
202
+ if ( ! indexFile ) continue ;
203
+
204
+ const index = new URL ( indexFile . to , packagePath ) ;
205
+ if ( ! fs . existsSync ( index ) ) continue ;
192
206
193
- const toPrepend = pkg . files
194
- . filter ( ( f ) => ! ! f . autoImport )
195
- . map ( ( f ) => `/// <reference path="./${ f . to } " />` )
196
- . join ( "\n" ) ;
207
+ const toPrepend = files
208
+ . filter ( ( f ) => ! ! f . autoImport )
209
+ . map ( ( f ) => relativeUrl ( index , new URL ( f . to , packagePath ) ) )
210
+ . map ( ( f ) => `/// <reference path="${ f } " />` )
211
+ . join ( "\n" ) ;
212
+
213
+ if ( toPrepend ) {
214
+ const indexText = fs . readFileSync ( index , "utf-8" ) ;
215
+ fs . writeFileSync ( index , `${ toPrepend } \n\n${ indexText } ` ) ;
216
+ }
217
+ }
218
+ }
197
219
198
- let indexText = fs . readFileSync ( index , "utf-8" ) ;
199
- fs . writeFileSync ( index , `${ toPrepend } \n\n${ indexText } ` ) ;
220
+ /**
221
+ * @param {URL } from
222
+ * @param {URL } to
223
+ */
224
+ function relativeUrl ( from , to ) {
225
+ if ( from . origin !== to . origin ) return to . toString ( ) ;
226
+ if ( ! from . pathname . endsWith ( "/" ) ) from = new URL ( "./" , from ) ;
227
+ const relative = path . posix . relative ( from . pathname , to . pathname ) ;
228
+ return path . isAbsolute ( relative ) ||
229
+ relative . startsWith ( "../" ) ||
230
+ relative . startsWith ( "./" )
231
+ ? relative
232
+ : `./${ relative } ` ;
200
233
}
201
234
202
235
/**
0 commit comments