Skip to content

Commit 1864a71

Browse files
committed
Support typesVersions in @types/web et al
1 parent b6a6718 commit 1864a71

File tree

5 files changed

+91
-42
lines changed

5 files changed

+91
-42
lines changed

deploy/createTypesPackages.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ export const packages = [
1919
files: [
2020
{ from: "../generated/dom.generated.d.ts", to: "index.d.ts" },
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 },
2224
],
2325
},
2426
{
@@ -28,6 +30,8 @@ export const packages = [
2830
files: [
2931
{ from: "../generated/serviceworker.generated.d.ts", to: "index.d.ts" },
3032
{ 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 },
3135
],
3236
},
3337
{
@@ -37,6 +41,8 @@ export const packages = [
3741
files: [
3842
{ from: "../generated/audioworklet.generated.d.ts", to: "index.d.ts" },
3943
{ 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 },
4046
],
4147
},
4248
{
@@ -46,6 +52,8 @@ export const packages = [
4652
files: [
4753
{ from: "../generated/sharedworker.generated.d.ts", to: "index.d.ts" },
4854
{ 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 },
4957
],
5058
},
5159
];
@@ -84,10 +92,10 @@ const go = async () => {
8492

8593
// Add the reference files in the config above
8694
pkg.files.forEach((fileRef) => {
87-
fs.copyFileSync(
88-
new URL(fileRef.from, import.meta.url),
89-
new URL(fileRef.to, packagePath),
90-
);
95+
const from = new URL(fileRef.from, import.meta.url);
96+
const to = new URL(fileRef.to, packagePath);
97+
fs.mkdirSync(new URL(".", to), { recursive: true });
98+
fs.copyFileSync(from, to);
9199
});
92100

93101
prependAutoImports(pkg, packagePath);

deploy/template/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
"type": "git",
1111
"url": "https://github.com/microsoft/TypeScript-DOM-Lib-Generator.git"
1212
},
13+
"typesVersions": {
14+
"<=5.5": { "*": ["ts5.5/*"] }
15+
},
1316
"scripts": {},
1417
"dependencies": {}
1518
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"build": "tsc && node ./lib/build.js",
1616
"baseline-accept": "cpx \"generated\\*\" baselines\\",
1717
"lint": "eslint --max-warnings 0 src deploy/*.js && tsc -p deploy/jsconfig.json",
18+
"lint-fix": "eslint --max-warnings 0 src deploy/*.js --fix",
1819
"test": "npm run lint && npm run build && node ./lib/test.js && node ./unittests/index.js",
1920
"changelog": "tsc && node ./lib/changelog.js",
2021
"ts-changelog": "node ./deploy/versionChangelog.js",

src/build.ts

Lines changed: 65 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ interface EmitOptions {
3636
global: string[];
3737
name: string;
3838
outputFolder: URL;
39+
useIteratorObject: boolean;
3940
}
4041

4142
async function emitFlavor(
@@ -46,19 +47,34 @@ async function emitFlavor(
4647
const exposed = getExposedTypes(webidl, options.global, forceKnownTypes);
4748
mergeNamesakes(exposed);
4849

49-
const result = emitWebIdl(exposed, options.global[0], "");
50+
const result = emitWebIdl(
51+
exposed,
52+
options.global[0],
53+
"",
54+
options.useIteratorObject,
55+
);
5056
await fs.writeFile(
5157
new URL(`${options.name}.generated.d.ts`, options.outputFolder),
5258
result,
5359
);
5460

55-
const iterators = emitWebIdl(exposed, options.global[0], "sync");
61+
const iterators = emitWebIdl(
62+
exposed,
63+
options.global[0],
64+
"sync",
65+
options.useIteratorObject,
66+
);
5667
await fs.writeFile(
5768
new URL(`${options.name}.iterable.generated.d.ts`, options.outputFolder),
5869
iterators,
5970
);
6071

61-
const asyncIterators = emitWebIdl(exposed, options.global[0], "async");
72+
const asyncIterators = emitWebIdl(
73+
exposed,
74+
options.global[0],
75+
"async",
76+
options.useIteratorObject,
77+
);
6278
await fs.writeFile(
6379
new URL(
6480
`${options.name}.asynciterable.generated.d.ts`,
@@ -94,12 +110,6 @@ async function emitDom() {
94110
],
95111
];
96112

97-
// Create output folder
98-
await fs.mkdir(outputFolder, {
99-
// Doesn't need to be recursive, but this helpfully ignores EEXIST
100-
recursive: true,
101-
});
102-
103113
const overriddenItems = await readInputJSON("overridingTypes.jsonc");
104114
const addedItems = await readInputJSON("addedTypes.jsonc");
105115
const comments = await readInputJSON("comments.json");
@@ -273,31 +283,52 @@ async function emitDom() {
273283

274284
const knownTypes = await readInputJSON("knownTypes.json");
275285

276-
emitFlavor(webidl, new Set(knownTypes.Window), {
277-
name: "dom",
278-
global: ["Window"],
279-
outputFolder,
280-
});
281-
emitFlavor(webidl, new Set(knownTypes.Worker), {
282-
name: "webworker",
283-
global: ["Worker", "DedicatedWorker", "SharedWorker", "ServiceWorker"],
284-
outputFolder,
285-
});
286-
emitFlavor(webidl, new Set(knownTypes.Worker), {
287-
name: "sharedworker",
288-
global: ["SharedWorker", "Worker"],
289-
outputFolder,
290-
});
291-
emitFlavor(webidl, new Set(knownTypes.Worker), {
292-
name: "serviceworker",
293-
global: ["ServiceWorker", "Worker"],
294-
outputFolder,
295-
});
296-
emitFlavor(webidl, new Set(knownTypes.Worklet), {
297-
name: "audioworklet",
298-
global: ["AudioWorklet", "Worklet"],
299-
outputFolder,
300-
});
286+
const emitVariations = [
287+
{
288+
outputFolder: new URL("./ts5.5/", outputFolder),
289+
useIteratorObject: false,
290+
},
291+
{ outputFolder, useIteratorObject: true },
292+
];
293+
294+
for (const { outputFolder, useIteratorObject } of emitVariations) {
295+
// Create output folder
296+
await fs.mkdir(outputFolder, {
297+
// Doesn't need to be recursive, but this helpfully ignores EEXIST
298+
recursive: true,
299+
});
300+
301+
emitFlavor(webidl, new Set(knownTypes.Window), {
302+
name: "dom",
303+
global: ["Window"],
304+
outputFolder,
305+
useIteratorObject,
306+
});
307+
emitFlavor(webidl, new Set(knownTypes.Worker), {
308+
name: "webworker",
309+
global: ["Worker", "DedicatedWorker", "SharedWorker", "ServiceWorker"],
310+
outputFolder,
311+
useIteratorObject,
312+
});
313+
emitFlavor(webidl, new Set(knownTypes.Worker), {
314+
name: "sharedworker",
315+
global: ["SharedWorker", "Worker"],
316+
outputFolder,
317+
useIteratorObject,
318+
});
319+
emitFlavor(webidl, new Set(knownTypes.Worker), {
320+
name: "serviceworker",
321+
global: ["ServiceWorker", "Worker"],
322+
outputFolder,
323+
useIteratorObject,
324+
});
325+
emitFlavor(webidl, new Set(knownTypes.Worklet), {
326+
name: "audioworklet",
327+
global: ["AudioWorklet", "Worklet"],
328+
outputFolder,
329+
useIteratorObject,
330+
});
331+
}
301332

302333
function prune(
303334
obj: Browser.WebIdl,

src/build/emitter.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ export function emitWebIdl(
136136
webidl: Browser.WebIdl,
137137
global: string,
138138
iterator: "" | "sync" | "async",
139+
useIteratorObject: boolean,
139140
): string {
140141
// Global print target
141142
const printer = createTextWriter("\n");
@@ -1535,6 +1536,7 @@ export function emitWebIdl(
15351536
}
15361537

15371538
function emitSelfIterator(i: Browser.Interface) {
1539+
if (!useIteratorObject) return;
15381540
const async = i.iterator?.async;
15391541
const name = getName(i);
15401542
const iteratorBaseType = `${async ? "Async" : ""}IteratorObject`;
@@ -1562,10 +1564,14 @@ export function emitWebIdl(
15621564
}
15631565
const async = i.iterator?.async;
15641566
const iteratorType = async
1565-
? `${name}AsyncIterator`
1566-
: subtypes.length !== 1
1567-
? `${name}Iterator`
1568-
: "ArrayIterator";
1567+
? !useIteratorObject
1568+
? "AsyncIterableIterator"
1569+
: `${name}AsyncIterator`
1570+
: !useIteratorObject
1571+
? "IterableIterator"
1572+
: subtypes.length !== 1
1573+
? `${name}Iterator`
1574+
: "ArrayIterator";
15691575
const methods = [];
15701576
methods.push({
15711577
name: `[Symbol.${async ? "asyncIterator" : "iterator"}]`,

0 commit comments

Comments
 (0)