Skip to content

Commit c7a8008

Browse files
authored
Merge pull request github#9235 from kaeluka/extractor-update-typescript-4_7
JS: Update the extractor to use TypeScript 4.7
2 parents 2f436c8 + 62fd3fd commit c7a8008

File tree

19 files changed

+1173
-38
lines changed

19 files changed

+1173
-38
lines changed

docs/codeql/support/reusables/versions-compilers.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
JavaScript,ECMAScript 2021 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhtm``, ``.xhtml``, ``.vue``, ``.hbs``, ``.ejs``, ``.njk``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [6]_"
2424
Python,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10",Not applicable,``.py``
2525
Ruby [7]_,"up to 3.0.2",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``"
26-
TypeScript [8]_,"2.6-4.6",Standard TypeScript compiler,"``.ts``, ``.tsx``"
26+
TypeScript [8]_,"2.6-4.7",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``"
2727

2828
.. container:: footnote-group
2929

javascript/extractor/lib/typescript/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "typescript-parser-wrapper",
33
"private": true,
44
"dependencies": {
5-
"typescript": "4.6.2"
5+
"typescript": "4.7.2"
66
},
77
"scripts": {
88
"build": "tsc --project tsconfig.json",

javascript/extractor/lib/typescript/yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
version "12.7.11"
77
resolved node-12.7.11.tgz#be879b52031cfb5d295b047f5462d8ef1a716446
88

9-
typescript@4.6.2:
10-
version "4.6.2"
11-
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4"
12-
integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==
9+
typescript@4.7.2:
10+
version "4.7.2"
11+
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.2.tgz#1f9aa2ceb9af87cca227813b4310fff0b51593c4"
12+
integrity sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==

javascript/extractor/src/com/semmle/js/dependencies/Fetcher.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,9 @@ public List<Path> extractFromTarballUrl(String tarballUrl, Path destDir) throws
141141
entryPath = entryPath.subpath(1, entryPath.getNameCount());
142142

143143
String filename = entryPath.getFileName().toString();
144-
if (!filename.endsWith(".d.ts") && !filename.equals("package.json")) {
145-
continue; // Only extract .d.ts files and package.json
144+
if (!filename.endsWith(".d.ts") && !filename.endsWith(".d.mts") && !filename.endsWith(".d.cts")
145+
&& !filename.equals("package.json")) {
146+
continue; // Only extract .d.ts, .d.mts, .d.cts files, and package.json
146147
}
147148
relativePaths.add(entryPath);
148149
Path outputFile = destDir.resolve(entryPath);

javascript/extractor/src/com/semmle/js/extractor/FileExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ public String toString() {
203203
}
204204
},
205205

206-
TYPESCRIPT(".ts", ".tsx") {
206+
TYPESCRIPT(".ts", ".tsx", ".mts", ".cts") {
207207
@Override
208208
protected boolean contains(File f, String lcExt, ExtractorConfig config) {
209209
if (config.getTypeScriptMode() == TypeScriptMode.NONE) return false;

javascript/extractor/src/com/semmle/js/extractor/Main.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class Main {
4343
* A version identifier that should be updated every time the extractor changes in such a way that
4444
* it may produce different tuples for the same file under the same {@link ExtractorConfig}.
4545
*/
46-
public static final String EXTRACTOR_VERSION = "2022-02-22";
46+
public static final String EXTRACTOR_VERSION = "2022-05-24";
4747

4848
public static final Pattern NEWLINE = Pattern.compile("\n");
4949

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: majorAnalysis
3+
---
4+
* Added support for TypeScript 4.7.

javascript/ql/lib/semmle/javascript/TypeScript.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,6 +1286,8 @@ class ExpressionWithTypeArguments extends @expression_with_type_arguments, Expr
12861286
override ControlFlowNode getFirstControlFlowNode() {
12871287
result = this.getExpression().getFirstControlFlowNode()
12881288
}
1289+
1290+
override string getAPrimaryQlClass() { result = "ExpressionWithTypeArguments" }
12891291
}
12901292

12911293
/**

javascript/ql/test/library-tests/TypeScript/Types/printAst.expected

Lines changed: 853 additions & 26 deletions
Large diffs are not rendered by default.

javascript/ql/test/library-tests/TypeScript/Types/tests.expected

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,148 @@ getExprType
386386
| tst.ts:293:7:293:21 | payload.toFixed | (fractionDigits?: number) => string |
387387
| tst.ts:293:7:293:23 | payload.toFixed() | string |
388388
| tst.ts:293:15:293:21 | toFixed | (fractionDigits?: number) => string |
389+
| tst.ts:298:7:298:9 | key | typeof key |
390+
| tst.ts:298:13:298:18 | Symbol | SymbolConstructor |
391+
| tst.ts:298:13:298:20 | Symbol() | typeof key |
392+
| tst.ts:300:7:300:20 | numberOrString | "hello" \| 42 |
393+
| tst.ts:300:24:300:27 | Math | Math |
394+
| tst.ts:300:24:300:34 | Math.random | () => number |
395+
| tst.ts:300:24:300:36 | Math.random() | number |
396+
| tst.ts:300:24:300:42 | Math.random() < 0.5 | boolean |
397+
| tst.ts:300:24:300:57 | Math.ra ... "hello" | "hello" \| 42 |
398+
| tst.ts:300:29:300:34 | random | () => number |
399+
| tst.ts:300:40:300:42 | 0.5 | 0.5 |
400+
| tst.ts:300:46:300:47 | 42 | 42 |
401+
| tst.ts:300:51:300:57 | "hello" | "hello" |
402+
| tst.ts:302:5:302:7 | obj | { [key]: string \| number; } |
403+
| tst.ts:302:11:304:1 | {\\n [ke ... ring,\\n} | { [key]: string \| number; } |
404+
| tst.ts:303:4:303:6 | key | typeof key |
405+
| tst.ts:303:10:303:23 | numberOrString | "hello" \| 42 |
406+
| tst.ts:306:5:306:19 | typeof obj[key] | "string" \| "number" \| "bigint" \| "boolean" \| "s... |
407+
| tst.ts:306:5:306:32 | typeof ... string" | boolean |
408+
| tst.ts:306:12:306:14 | obj | { [key]: string \| number; } |
409+
| tst.ts:306:12:306:19 | obj[key] | string \| number |
410+
| tst.ts:306:16:306:18 | key | typeof key |
411+
| tst.ts:306:25:306:32 | "string" | "string" |
412+
| tst.ts:307:7:307:9 | str | string |
413+
| tst.ts:307:13:307:15 | obj | { [key]: string \| number; } |
414+
| tst.ts:307:13:307:20 | obj[key] | string |
415+
| tst.ts:307:17:307:19 | key | typeof key |
416+
| tst.ts:308:3:308:5 | str | string |
417+
| tst.ts:308:3:308:17 | str.toUpperCase | () => string |
418+
| tst.ts:308:3:308:19 | str.toUpperCase() | string |
419+
| tst.ts:308:7:308:17 | toUpperCase | () => string |
420+
| tst.ts:313:10:313:10 | f | <T>(arg: { produce: (n: string) => T; consume: ... |
421+
| tst.ts:313:15:313:17 | arg | { produce: (n: string) => T; consume: (x: T) =>... |
422+
| tst.ts:314:3:314:9 | produce | (n: string) => T |
423+
| tst.ts:314:12:314:27 | (n: string) => T | (n: string) => T |
424+
| tst.ts:314:13:314:13 | n | string |
425+
| tst.ts:315:3:315:9 | consume | (x: T) => void |
426+
| tst.ts:315:12:315:25 | (x: T) => void | (x: T) => void |
427+
| tst.ts:315:13:315:13 | x | T |
428+
| tst.ts:318:1:318:1 | f | <T>(arg: { produce: (n: string) => T; consume: ... |
429+
| tst.ts:318:1:321:2 | f({\\n p ... se()\\n}) | void |
430+
| tst.ts:318:3:321:1 | {\\n pro ... ase()\\n} | { produce: (n: string) => string; consume: (x: ... |
431+
| tst.ts:319:3:319:9 | produce | (n: string) => string |
432+
| tst.ts:319:12:319:12 | n | string |
433+
| tst.ts:319:12:319:17 | n => n | (n: string) => string |
434+
| tst.ts:319:17:319:17 | n | string |
435+
| tst.ts:320:3:320:9 | consume | (x: string) => string |
436+
| tst.ts:320:12:320:12 | x | string |
437+
| tst.ts:320:12:320:31 | x => x.toLowerCase() | (x: string) => string |
438+
| tst.ts:320:17:320:17 | x | string |
439+
| tst.ts:320:17:320:29 | x.toLowerCase | () => string |
440+
| tst.ts:320:17:320:31 | x.toLowerCase() | string |
441+
| tst.ts:320:19:320:29 | toLowerCase | () => string |
442+
| tst.ts:325:7:325:14 | ErrorMap | { new (entries?: readonly (readonly [string, Er... |
443+
| tst.ts:325:18:325:20 | Map | MapConstructor |
444+
| tst.ts:325:18:325:35 | Map<string, Error> | any |
445+
| tst.ts:327:7:327:14 | errorMap | Map<string, Error> |
446+
| tst.ts:327:18:327:31 | new ErrorMap() | Map<string, Error> |
447+
| tst.ts:327:22:327:29 | ErrorMap | { new (entries?: readonly (readonly [string, Er... |
448+
| tst.ts:338:7:338:7 | a | "a" \| "b" |
449+
| tst.ts:338:14:338:16 | 'a' | "a" |
450+
| tst.ts:343:3:343:5 | get | () => T |
451+
| tst.ts:343:8:343:14 | () => T | () => T |
452+
| tst.ts:344:3:344:5 | set | (value: T) => void |
453+
| tst.ts:344:8:344:25 | (value: T) => void | (value: T) => void |
454+
| tst.ts:344:9:344:13 | value | T |
455+
| tst.ts:347:7:347:11 | state | State<number> |
456+
| tst.ts:347:30:350:1 | {\\n get ... > { }\\n} | State<number> |
457+
| tst.ts:348:3:348:5 | get | () => number |
458+
| tst.ts:348:8:348:15 | () => 42 | () => number |
459+
| tst.ts:348:14:348:15 | 42 | 42 |
460+
| tst.ts:349:3:349:5 | set | (value: number) => void |
461+
| tst.ts:349:8:349:21 | (value) => { } | (value: number) => void |
462+
| tst.ts:349:9:349:13 | value | number |
463+
| tst.ts:352:7:352:14 | fortyTwo | number |
464+
| tst.ts:352:18:352:22 | state | State<number> |
465+
| tst.ts:352:18:352:26 | state.get | () => number |
466+
| tst.ts:352:18:352:28 | state.get() | number |
467+
| tst.ts:352:24:352:26 | get | () => number |
468+
| tst.ts:356:8:356:18 | tstModuleES | () => "a" \| "b" |
469+
| tst.ts:356:25:356:43 | './tstModuleES.mjs' | any |
470+
| tst.ts:358:1:358:7 | console | Console |
471+
| tst.ts:358:1:358:11 | console.log | (...data: any[]) => void |
472+
| tst.ts:358:1:358:26 | console ... leES()) | void |
473+
| tst.ts:358:9:358:11 | log | (...data: any[]) => void |
474+
| tst.ts:358:13:358:23 | tstModuleES | () => "a" \| "b" |
475+
| tst.ts:358:13:358:25 | tstModuleES() | "a" \| "b" |
476+
| tst.ts:360:10:360:21 | tstModuleCJS | () => "a" \| "b" |
477+
| tst.ts:360:10:360:21 | tstModuleCJS | () => "a" \| "b" |
478+
| tst.ts:360:30:360:49 | './tstModuleCJS.cjs' | any |
479+
| tst.ts:362:1:362:7 | console | Console |
480+
| tst.ts:362:1:362:11 | console.log | (...data: any[]) => void |
481+
| tst.ts:362:1:362:27 | console ... eCJS()) | void |
482+
| tst.ts:362:9:362:11 | log | (...data: any[]) => void |
483+
| tst.ts:362:13:362:24 | tstModuleCJS | () => "a" \| "b" |
484+
| tst.ts:362:13:362:26 | tstModuleCJS() | "a" \| "b" |
485+
| tst.ts:368:13:368:13 | A | typeof library-tests/TypeScript/Types/tstSuffixA.ts |
486+
| tst.ts:368:20:368:33 | './tstSuffixA' | any |
487+
| tst.ts:370:1:370:7 | console | Console |
488+
| tst.ts:370:1:370:11 | console.log | (...data: any[]) => void |
489+
| tst.ts:370:1:370:29 | console ... File()) | void |
490+
| tst.ts:370:9:370:11 | log | (...data: any[]) => void |
491+
| tst.ts:370:13:370:13 | A | typeof library-tests/TypeScript/Types/tstSuffixA.ts |
492+
| tst.ts:370:13:370:26 | A.resolvedFile | () => "tstSuffixA.ts" |
493+
| tst.ts:370:13:370:28 | A.resolvedFile() | "tstSuffixA.ts" |
494+
| tst.ts:370:15:370:26 | resolvedFile | () => "tstSuffixA.ts" |
495+
| tst.ts:372:13:372:13 | B | typeof library-tests/TypeScript/Types/tstSuffixB.ios.ts |
496+
| tst.ts:372:20:372:33 | './tstSuffixB' | any |
497+
| tst.ts:374:1:374:7 | console | Console |
498+
| tst.ts:374:1:374:11 | console.log | (...data: any[]) => void |
499+
| tst.ts:374:1:374:29 | console ... File()) | void |
500+
| tst.ts:374:9:374:11 | log | (...data: any[]) => void |
501+
| tst.ts:374:13:374:13 | B | typeof library-tests/TypeScript/Types/tstSuffixB.ios.ts |
502+
| tst.ts:374:13:374:26 | B.resolvedFile | () => "tstSuffixB.ios.ts" |
503+
| tst.ts:374:13:374:28 | B.resolvedFile() | "tstSuffixB.ios.ts" |
504+
| tst.ts:374:15:374:26 | resolvedFile | () => "tstSuffixB.ios.ts" |
505+
| tstModuleCJS.cts:1:17:1:28 | tstModuleCJS | () => "a" \| "b" |
506+
| tstModuleCJS.cts:2:12:2:15 | Math | Math |
507+
| tstModuleCJS.cts:2:12:2:22 | Math.random | () => number |
508+
| tstModuleCJS.cts:2:12:2:24 | Math.random() | number |
509+
| tstModuleCJS.cts:2:12:2:30 | Math.random() > 0.5 | boolean |
510+
| tstModuleCJS.cts:2:12:2:42 | Math.ra ... ' : 'b' | "a" \| "b" |
511+
| tstModuleCJS.cts:2:17:2:22 | random | () => number |
512+
| tstModuleCJS.cts:2:28:2:30 | 0.5 | 0.5 |
513+
| tstModuleCJS.cts:2:34:2:36 | 'a' | "a" |
514+
| tstModuleCJS.cts:2:40:2:42 | 'b' | "b" |
515+
| tstModuleES.mts:1:25:1:35 | tstModuleES | () => "a" \| "b" |
516+
| tstModuleES.mts:2:12:2:15 | Math | Math |
517+
| tstModuleES.mts:2:12:2:22 | Math.random | () => number |
518+
| tstModuleES.mts:2:12:2:24 | Math.random() | number |
519+
| tstModuleES.mts:2:12:2:30 | Math.random() > 0.5 | boolean |
520+
| tstModuleES.mts:2:12:2:42 | Math.ra ... ' : 'b' | "a" \| "b" |
521+
| tstModuleES.mts:2:17:2:22 | random | () => number |
522+
| tstModuleES.mts:2:28:2:30 | 0.5 | 0.5 |
523+
| tstModuleES.mts:2:34:2:36 | 'a' | "a" |
524+
| tstModuleES.mts:2:40:2:42 | 'b' | "b" |
525+
| tstSuffixA.ts:1:17:1:28 | resolvedFile | () => "tstSuffixA.ts" |
526+
| tstSuffixA.ts:2:12:2:26 | 'tstSuffixA.ts' | "tstSuffixA.ts" |
527+
| tstSuffixB.ios.ts:1:17:1:28 | resolvedFile | () => "tstSuffixB.ios.ts" |
528+
| tstSuffixB.ios.ts:2:12:2:30 | 'tstSuffixB.ios.ts' | "tstSuffixB.ios.ts" |
529+
| tstSuffixB.ts:1:17:1:28 | resolvedFile | () => "tstSuffixB.ts" |
530+
| tstSuffixB.ts:2:12:2:26 | 'tstSuffixB.ts' | "tstSuffixB.ts" |
389531
| type_alias.ts:3:5:3:5 | b | boolean |
390532
| type_alias.ts:7:5:7:5 | c | ValueOrArray<number> |
391533
| type_alias.ts:14:9:14:32 | [proper ... ]: Json | any |
@@ -461,6 +603,9 @@ getTypeDefinitionType
461603
| tst.ts:265:3:269:3 | interfa ... an;\\n } | TypeMap |
462604
| tst.ts:271:3:276:7 | type Un ... }[P]; | UnionRecord<P> |
463605
| tst.ts:289:3:289:63 | type Fu ... > void; | Func |
606+
| tst.ts:331:1:334:14 | type Fi ... never; | FirstString<T> |
607+
| tst.ts:336:1:336:51 | type F ... lean]>; | "a" \| "b" |
608+
| tst.ts:342:1:345:1 | interfa ... void;\\n} | State<T> |
464609
| type_alias.ts:1:1:1:17 | type B = boolean; | boolean |
465610
| type_alias.ts:5:1:5:50 | type Va ... ay<T>>; | ValueOrArray<T> |
466611
| type_alias.ts:9:1:15:13 | type Js ... Json[]; | Json |
@@ -703,6 +848,48 @@ getTypeExprType
703848
| tst.ts:289:47:289:52 | string | string |
704849
| tst.ts:289:59:289:62 | void | void |
705850
| tst.ts:291:13:291:16 | Func | Func |
851+
| tst.ts:313:12:313:12 | T | T |
852+
| tst.ts:313:20:315:27 | {\\n pro ... void } | { produce: (n: string) => T; consume: (x: T) =>... |
853+
| tst.ts:314:12:314:27 | (n: string) => T | (n: string) => T |
854+
| tst.ts:314:16:314:21 | string | string |
855+
| tst.ts:314:27:314:27 | T | T |
856+
| tst.ts:315:12:315:25 | (x: T) => void | (x: T) => void |
857+
| tst.ts:315:16:315:16 | T | T |
858+
| tst.ts:315:22:315:25 | void | void |
859+
| tst.ts:316:4:316:7 | void | void |
860+
| tst.ts:325:22:325:27 | string | string |
861+
| tst.ts:325:30:325:34 | Error | Error |
862+
| tst.ts:331:6:331:16 | FirstString | FirstString<T> |
863+
| tst.ts:331:18:331:18 | T | T |
864+
| tst.ts:336:6:336:6 | F | "a" \| "b" |
865+
| tst.ts:336:10:336:20 | FirstString | FirstString<T> |
866+
| tst.ts:336:10:336:50 | FirstSt ... olean]> | "a" \| "b" |
867+
| tst.ts:336:22:336:49 | ['a' \| ... oolean] | ["a" \| "b", number, boolean] |
868+
| tst.ts:336:23:336:25 | 'a' | "a" |
869+
| tst.ts:336:23:336:31 | 'a' \| 'b' | "a" \| "b" |
870+
| tst.ts:336:29:336:31 | 'b' | "b" |
871+
| tst.ts:336:34:336:39 | number | number |
872+
| tst.ts:336:42:336:48 | boolean | boolean |
873+
| tst.ts:338:10:338:10 | F | "a" \| "b" |
874+
| tst.ts:342:11:342:15 | State | State<T> |
875+
| tst.ts:342:24:342:24 | T | T |
876+
| tst.ts:343:8:343:14 | () => T | () => T |
877+
| tst.ts:343:14:343:14 | T | T |
878+
| tst.ts:344:8:344:25 | (value: T) => void | (value: T) => void |
879+
| tst.ts:344:16:344:16 | T | T |
880+
| tst.ts:344:22:344:25 | void | void |
881+
| tst.ts:347:14:347:18 | State | State<T> |
882+
| tst.ts:347:14:347:26 | State<number> | State<number> |
883+
| tst.ts:347:20:347:25 | number | number |
884+
| tstModuleCJS.cts:1:33:1:35 | 'a' | "a" |
885+
| tstModuleCJS.cts:1:33:1:41 | 'a' \| 'b' | "a" \| "b" |
886+
| tstModuleCJS.cts:1:39:1:41 | 'b' | "b" |
887+
| tstModuleES.mts:1:40:1:42 | 'a' | "a" |
888+
| tstModuleES.mts:1:40:1:48 | 'a' \| 'b' | "a" \| "b" |
889+
| tstModuleES.mts:1:46:1:48 | 'b' | "b" |
890+
| tstSuffixA.ts:1:33:1:47 | 'tstSuffixA.ts' | "tstSuffixA.ts" |
891+
| tstSuffixB.ios.ts:1:33:1:51 | 'tstSuffixB.ios.ts' | "tstSuffixB.ios.ts" |
892+
| tstSuffixB.ts:1:33:1:47 | 'tstSuffixB.ts' | "tstSuffixB.ts" |
706893
| type_alias.ts:1:6:1:6 | B | boolean |
707894
| type_alias.ts:1:10:1:16 | boolean | boolean |
708895
| type_alias.ts:3:8:3:8 | B | boolean |
@@ -783,6 +970,7 @@ referenceDefinition
783970
| E | type_definition_objects.ts:6:8:6:16 | enum E {} |
784971
| EnumWithOneMember | type_definitions.ts:18:26:18:31 | member |
785972
| Error | tst.ts:210:10:213:3 | interfa ... ng;\\n } |
973+
| FirstString<T> | tst.ts:331:1:334:14 | type Fi ... never; |
786974
| Foo | tst.ts:116:3:129:3 | class F ... }\\n } |
787975
| Foo | tst.ts:165:5:167:5 | interfa ... ;\\n } |
788976
| Foo | tst.ts:179:3:192:3 | class F ... \\n } |
@@ -796,6 +984,8 @@ referenceDefinition
796984
| NonAbstractDummy | tst.ts:54:1:56:1 | interfa ... mber;\\n} |
797985
| Person | tst.ts:222:3:234:3 | class P ... }\\n } |
798986
| Shape | tst.ts:140:3:142:47 | type Sh ... mber }; |
987+
| State<T> | tst.ts:342:1:345:1 | interfa ... void;\\n} |
988+
| State<number> | tst.ts:342:1:345:1 | interfa ... void;\\n} |
799989
| Sub | tst.ts:97:3:101:3 | class S ... }\\n } |
800990
| Success | tst.ts:205:10:208:3 | interfa ... ng;\\n } |
801991
| Super | tst.ts:91:3:95:3 | class S ... }\\n } |
@@ -852,16 +1042,20 @@ abstractSignature
8521042
unionIndex
8531043
| 1 | 0 | 1 \| 2 |
8541044
| 2 | 1 | 1 \| 2 |
1045+
| 42 | 1 | "hello" \| 42 |
8551046
| "NumberContents" | 0 | "NumberContents" \| "StringContents" |
8561047
| "StringContents" | 1 | "NumberContents" \| "StringContents" |
8571048
| "a" | 0 | "a" \| "b" |
8581049
| "a" | 1 | number \| "a" |
1050+
| "a" | 3 | number \| boolean \| "a" \| "b" |
8591051
| "b" | 1 | "a" \| "b" |
1052+
| "b" | 4 | number \| boolean \| "a" \| "b" |
8601053
| "bigint" | 2 | "string" \| "number" \| "bigint" \| "boolean" \| "s... |
8611054
| "boolean" | 2 | keyof TypeMap |
8621055
| "boolean" | 3 | "string" \| "number" \| "bigint" \| "boolean" \| "s... |
8631056
| "circle" | 0 | "circle" \| "square" |
8641057
| "function" | 7 | "string" \| "number" \| "bigint" \| "boolean" \| "s... |
1058+
| "hello" | 0 | "hello" \| 42 |
8651059
| "number" | 1 | "string" \| "number" \| "bigint" \| "boolean" \| "s... |
8661060
| "number" | 1 | keyof TypeMap |
8671061
| "object" | 6 | "string" \| "number" \| "bigint" \| "boolean" \| "s... |
@@ -871,6 +1065,7 @@ unionIndex
8711065
| "symbol" | 4 | "string" \| "number" \| "bigint" \| "boolean" \| "s... |
8721066
| "undefined" | 5 | "string" \| "number" \| "bigint" \| "boolean" \| "s... |
8731067
| Error | 1 | Success \| Error |
1068+
| Error | 1 | string \| Error |
8741069
| Json[] | 5 | string \| number \| boolean \| { [property: string... |
8751070
| Promise<number> | 2 | boolean \| Promise<number> |
8761071
| PromiseLike<TResult1> | 1 | TResult1 \| PromiseLike<TResult1> |
@@ -890,16 +1085,19 @@ unionIndex
8901085
| false | 0 | boolean |
8911086
| false | 0 | boolean \| Promise<number> |
8921087
| false | 1 | number \| boolean |
1088+
| false | 1 | number \| boolean \| "a" \| "b" |
8931089
| false | 2 | string \| number \| boolean |
8941090
| false | 2 | string \| number \| boolean \| { [property: string... |
8951091
| number | 0 | number \| "a" |
8961092
| number | 0 | number \| ValueOrArray<number>[] |
8971093
| number | 0 | number \| boolean |
1094+
| number | 0 | number \| boolean \| "a" \| "b" |
8981095
| number | 1 | string \| number |
8991096
| number | 1 | string \| number \| boolean |
9001097
| number | 1 | string \| number \| boolean \| { [property: string... |
9011098
| number | 1 | string \| number \| true |
9021099
| string | 0 | VirtualNode \| { [key: string]: any; } |
1100+
| string | 0 | string \| Error |
9031101
| string | 0 | string \| [string, { [key: string]: any; }, ...V... |
9041102
| string | 0 | string \| number |
9051103
| string | 0 | string \| number \| boolean |
@@ -911,6 +1109,7 @@ unionIndex
9111109
| true | 1 | boolean |
9121110
| true | 1 | boolean \| Promise<number> |
9131111
| true | 2 | number \| boolean |
1112+
| true | 2 | number \| boolean \| "a" \| "b" |
9141113
| true | 2 | string \| number \| true |
9151114
| true | 3 | string \| number \| boolean |
9161115
| true | 3 | string \| number \| boolean \| { [property: string... |

0 commit comments

Comments
 (0)