@@ -17,43 +17,43 @@ export const packages = [
1717 description : "Types for the DOM, and other web technologies in browsers" ,
1818 readme : "./readmes/web.md" ,
1919 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 } ,
2121 { 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" } ,
2424 ] ,
2525 } ,
2626 {
2727 name : "@types/serviceworker" ,
2828 description : "Types for the global scope of Service Workers" ,
2929 readme : "./readmes/serviceworker.md" ,
3030 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" } ,
3535 ] ,
3636 } ,
3737 {
3838 name : "@types/audioworklet" ,
3939 description : "Types for the global scope of Audio Worklets" ,
4040 readme : "./readmes/audioworklet.md" ,
4141 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" } ,
4646 ] ,
4747 } ,
4848 {
4949 name : "@types/sharedworker" ,
5050 description : "Types for the global scope of Shared Workers" ,
5151 readme : "./readmes/sharedworker.md" ,
5252 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 } ,
5454 { 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" } ,
5757 ] ,
5858 } ,
5959] ;
@@ -67,6 +67,7 @@ import fetch from "node-fetch";
6767import { fileURLToPath } from "url" ;
6868import semver from "semver" ;
6969import pkg from "prettier" ;
70+ import path from "path" ;
7071const { format } = pkg ;
7172
7273const go = async ( ) => {
@@ -187,16 +188,48 @@ function copyREADME(pkg, pkgJSON, writePath) {
187188 * @param {URL } packagePath
188189 */
189190function 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 ;
192206
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+ }
197219
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 } ` ;
200233}
201234
202235/**
0 commit comments