Skip to content

Commit 91e30ab

Browse files
committed
Fix autoImport
1 parent f66fea8 commit 91e30ab

File tree

1 file changed

+55
-22
lines changed

1 file changed

+55
-22
lines changed

Diff for: deploy/createTypesPackages.js

+55-22
Original file line numberDiff line numberDiff line change
@@ -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";
6767
import { fileURLToPath } from "url";
6868
import semver from "semver";
6969
import pkg from "prettier";
70+
import path from "path";
7071
const { format } = pkg;
7172

7273
const go = async () => {
@@ -187,16 +188,48 @@ function copyREADME(pkg, pkgJSON, writePath) {
187188
* @param {URL} packagePath
188189
*/
189190
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;
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

Comments
 (0)