Skip to content

Commit 3378f5c

Browse files
committed
Merge branch 'master' into checkJSFiles
2 parents db6c969 + c949116 commit 3378f5c

26 files changed

+389
-40
lines changed

src/compiler/checker.ts

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8277,8 +8277,8 @@ namespace ts {
82778277
maybeStack[depth].set(id, RelationComparisonResult.Succeeded);
82788278
depth++;
82798279
const saveExpandingFlags = expandingFlags;
8280-
if (!(expandingFlags & 1) && isDeeplyNestedGeneric(source, sourceStack, depth)) expandingFlags |= 1;
8281-
if (!(expandingFlags & 2) && isDeeplyNestedGeneric(target, targetStack, depth)) expandingFlags |= 2;
8280+
if (!(expandingFlags & 1) && isDeeplyNestedType(source, sourceStack, depth)) expandingFlags |= 1;
8281+
if (!(expandingFlags & 2) && isDeeplyNestedType(target, targetStack, depth)) expandingFlags |= 2;
82828282
let result: Ternary;
82838283
if (expandingFlags === 3) {
82848284
result = Ternary.Maybe;
@@ -8698,21 +8698,23 @@ namespace ts {
86988698
return false;
86998699
}
87008700

8701-
// Return true if the given type is part of a deeply nested chain of generic instantiations. We consider this to be the case
8702-
// when structural type comparisons have been started for 10 or more instantiations of the same generic type. It is possible,
8703-
// though highly unlikely, for this test to be true in a situation where a chain of instantiations is not infinitely expanding.
8704-
// Effectively, we will generate a false positive when two types are structurally equal to at least 10 levels, but unequal at
8705-
// some level beyond that.
8706-
function isDeeplyNestedGeneric(type: Type, stack: Type[], depth: number): boolean {
8707-
// We track type references (created by createTypeReference) and instantiated types (created by instantiateType)
8708-
if (getObjectFlags(type) & (ObjectFlags.Reference | ObjectFlags.Instantiated) && depth >= 5) {
8701+
// Return true if the given type is deeply nested. We consider this to be the case when structural type comparisons
8702+
// for 5 or more occurrences or instantiations of the type have been recorded on the given stack. It is possible,
8703+
// though highly unlikely, for this test to be true in a situation where a chain of instantiations is not infinitely
8704+
// expanding. Effectively, we will generate a false positive when two types are structurally equal to at least 5
8705+
// levels, but unequal at some level beyond that.
8706+
function isDeeplyNestedType(type: Type, stack: Type[], depth: number): boolean {
8707+
// We track all object types that have an associated symbol (representing the origin of the type)
8708+
if (depth >= 5 && type.flags & TypeFlags.Object) {
87098709
const symbol = type.symbol;
8710-
let count = 0;
8711-
for (let i = 0; i < depth; i++) {
8712-
const t = stack[i];
8713-
if (getObjectFlags(t) & (ObjectFlags.Reference | ObjectFlags.Instantiated) && t.symbol === symbol) {
8714-
count++;
8715-
if (count >= 5) return true;
8710+
if (symbol) {
8711+
let count = 0;
8712+
for (let i = 0; i < depth; i++) {
8713+
const t = stack[i];
8714+
if (t.flags & TypeFlags.Object && t.symbol === symbol) {
8715+
count++;
8716+
if (count >= 5) return true;
8717+
}
87168718
}
87178719
}
87188720
}
@@ -9455,7 +9457,7 @@ namespace ts {
94559457
if (isInProcess(source, target)) {
94569458
return;
94579459
}
9458-
if (isDeeplyNestedGeneric(source, sourceStack, depth) && isDeeplyNestedGeneric(target, targetStack, depth)) {
9460+
if (isDeeplyNestedType(source, sourceStack, depth) && isDeeplyNestedType(target, targetStack, depth)) {
94599461
return;
94609462
}
94619463
const key = source.id + "," + target.id;
@@ -18788,7 +18790,7 @@ namespace ts {
1878818790

1878918791
// unknownType is returned i.e. if node.expression is identifier whose name cannot be resolved
1879018792
// in this case error about missing name is already reported - do not report extra one
18791-
if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, TypeFlags.Object | TypeFlags.TypeVariable)) {
18793+
if (!isTypeAnyOrAllConstituentTypesHaveKind(rightType, TypeFlags.Object | TypeFlags.TypeVariable | TypeFlags.NonPrimitive)) {
1879218794
error(node.expression, Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter);
1879318795
}
1879418796

src/compiler/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3019,7 +3019,6 @@ namespace ts {
30193019
ObjectLiteral = 1 << 7, // Originates in an object literal
30203020
EvolvingArray = 1 << 8, // Evolving array type
30213021
ObjectLiteralPatternWithComputedProperties = 1 << 9, // Object literal pattern with computed properties
3022-
NonPrimitive = 1 << 10, // NonPrimitive object type
30233022
ClassOrInterface = Class | Interface
30243023
}
30253024

src/harness/unittests/tsserverProjectSystem.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,41 @@ namespace ts.projectSystem {
10071007
checkProjectRootFiles(projectService.configuredProjects[0], [commonFile1.path, commonFile2.path]);
10081008
});
10091009

1010+
it("should disable features when the files are too large", () => {
1011+
const file1 = {
1012+
path: "/a/b/f1.js",
1013+
content: "let x =1;",
1014+
fileSize: 10 * 1024 * 1024
1015+
};
1016+
const file2 = {
1017+
path: "/a/b/f2.js",
1018+
content: "let y =1;",
1019+
fileSize: 6 * 1024 * 1024
1020+
};
1021+
const file3 = {
1022+
path: "/a/b/f3.js",
1023+
content: "let y =1;",
1024+
fileSize: 6 * 1024 * 1024
1025+
};
1026+
1027+
const proj1name = "proj1", proj2name = "proj2", proj3name = "proj3";
1028+
1029+
const host = createServerHost([file1, file2, file3]);
1030+
const projectService = createProjectService(host);
1031+
1032+
projectService.openExternalProject({ rootFiles: toExternalFiles([file1.path]), options: {}, projectFileName: proj1name });
1033+
const proj1 = projectService.findProject(proj1name);
1034+
assert.isTrue(proj1.languageServiceEnabled);
1035+
1036+
projectService.openExternalProject({ rootFiles: toExternalFiles([file2.path]), options: {}, projectFileName: proj2name });
1037+
const proj2 = projectService.findProject(proj2name);
1038+
assert.isTrue(proj2.languageServiceEnabled);
1039+
1040+
projectService.openExternalProject({ rootFiles: toExternalFiles([file3.path]), options: {}, projectFileName: proj3name });
1041+
const proj3 = projectService.findProject(proj3name);
1042+
assert.isFalse(proj3.languageServiceEnabled);
1043+
});
1044+
10101045
it("should use only one inferred project if 'useOneInferredProject' is set", () => {
10111046
const file1 = {
10121047
path: "/a/b/main.ts",

src/lib/dom.generated.d.ts

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,6 +1396,7 @@ interface AudioNode extends EventTarget {
13961396
readonly numberOfInputs: number;
13971397
readonly numberOfOutputs: number;
13981398
connect(destination: AudioNode, output?: number, input?: number): AudioNode;
1399+
connect(destination: AudioParam, output?: number): void;
13991400
disconnect(output?: number): void;
14001401
disconnect(destination: AudioNode, output?: number, input?: number): void;
14011402
disconnect(destination: AudioParam, output?: number): void;
@@ -2152,7 +2153,9 @@ interface CanvasRenderingContext2D extends Object, CanvasPathMethods {
21522153
createPattern(image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement, repetition: string): CanvasPattern;
21532154
createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;
21542155
drawFocusIfNeeded(element: Element): void;
2155-
drawImage(image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void;
2156+
drawImage(image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap, dstX: number, dstY: number): void;
2157+
drawImage(image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap, dstX: number, dstY: number, dstW: number, dstH: number): void;
2158+
drawImage(image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap, srcX: number, srcY: number, srcW: number, srcH: number, dstX: number, dstY: number, dstW: number, dstH: number): void;
21562159
fill(fillRule?: string): void;
21572160
fillRect(x: number, y: number, w: number, h: number): void;
21582161
fillText(text: string, x: number, y: number, maxWidth?: number): void;
@@ -2449,10 +2452,10 @@ declare var DOMException: {
24492452
}
24502453

24512454
interface DOMImplementation {
2452-
createDocument(namespaceURI: string | null, qualifiedName: string | null, doctype: DocumentType): Document;
2455+
createDocument(namespaceURI: string | null, qualifiedName: string | null, doctype: DocumentType | null): Document;
24532456
createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType;
24542457
createHTMLDocument(title: string): Document;
2455-
hasFeature(): boolean;
2458+
hasFeature(feature: string | null, version: string | null): boolean;
24562459
}
24572460

24582461
declare var DOMImplementation: {
@@ -3449,6 +3452,7 @@ declare var Document: {
34493452
}
34503453

34513454
interface DocumentFragment extends Node, NodeSelector, ParentNode {
3455+
getElementById(elementId: string): HTMLElement | null;
34523456
}
34533457

34543458
declare var DocumentFragment: {
@@ -11837,7 +11841,7 @@ interface URL {
1183711841
protocol: string;
1183811842
search: string;
1183911843
username: string;
11840-
readonly searchparams: URLSearchParams;
11844+
readonly searchParams: URLSearchParams;
1184111845
toString(): string;
1184211846
}
1184311847

@@ -12161,12 +12165,12 @@ interface WebGLRenderingContext {
1216112165
stencilMaskSeparate(face: number, mask: number): void;
1216212166
stencilOp(fail: number, zfail: number, zpass: number): void;
1216312167
stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void;
12164-
texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels?: ArrayBufferView): void;
12165-
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void;
12168+
texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView | null): void;
12169+
texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageBitmap | ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void;
1216612170
texParameterf(target: number, pname: number, param: number): void;
1216712171
texParameteri(target: number, pname: number, param: number): void;
12168-
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels?: ArrayBufferView): void;
12169-
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels?: ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void;
12172+
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView | null): void;
12173+
texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageBitmap | ImageData | HTMLVideoElement | HTMLImageElement | HTMLCanvasElement): void;
1217012174
uniform1f(location: WebGLUniformLocation | null, x: number): void;
1217112175
uniform1fv(location: WebGLUniformLocation, v: Float32Array | number[]): void;
1217212176
uniform1i(location: WebGLUniformLocation | null, x: number): void;
@@ -13260,6 +13264,8 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window
1326013264
webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint;
1326113265
webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint;
1326213266
webkitRequestAnimationFrame(callback: FrameRequestCallback): number;
13267+
createImageBitmap(image: HTMLImageElement | SVGImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | ImageData | Blob, options?: ImageBitmapOptions): Promise<ImageBitmap>;
13268+
createImageBitmap(image: HTMLImageElement | SVGImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | ImageData | Blob, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;
1326313269
scroll(options?: ScrollToOptions): void;
1326413270
scrollTo(options?: ScrollToOptions): void;
1326513271
scrollBy(options?: ScrollToOptions): void;
@@ -13473,6 +13479,7 @@ interface Body {
1347313479
blob(): Promise<Blob>;
1347413480
json(): Promise<any>;
1347513481
text(): Promise<string>;
13482+
formData(): Promise<FormData>;
1347613483
}
1347713484

1347813485
interface CanvasPathMethods {
@@ -13835,6 +13842,21 @@ interface Canvas2DContextAttributes {
1383513842
[attribute: string]: boolean | string | undefined;
1383613843
}
1383713844

13845+
interface ImageBitmapOptions {
13846+
imageOrientation?: "none" | "flipY";
13847+
premultiplyAlpha?: "none" | "premultiply" | "default";
13848+
colorSpaceConversion?: "none" | "default";
13849+
resizeWidth?: number;
13850+
resizeHeight?: number;
13851+
resizeQuality?: "pixelated" | "low" | "medium" | "high";
13852+
}
13853+
13854+
interface ImageBitmap {
13855+
readonly width: number;
13856+
readonly height: number;
13857+
close(): void;
13858+
}
13859+
1383813860
interface URLSearchParams {
1383913861
/**
1384013862
* Appends a specified key/value pair as a new search parameter.
@@ -13879,6 +13901,7 @@ interface NodeListOf<TNode extends Node> extends NodeList {
1387913901
interface HTMLCollectionOf<T extends Element> extends HTMLCollection {
1388013902
item(index: number): T;
1388113903
namedItem(name: string): T;
13904+
[index: number]: T;
1388213905
}
1388313906

1388413907
interface BlobPropertyBag {
@@ -14840,6 +14863,8 @@ declare function webkitCancelAnimationFrame(handle: number): void;
1484014863
declare function webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint;
1484114864
declare function webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint;
1484214865
declare function webkitRequestAnimationFrame(callback: FrameRequestCallback): number;
14866+
declare function createImageBitmap(image: HTMLImageElement | SVGImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | ImageData | Blob, options?: ImageBitmapOptions): Promise<ImageBitmap>;
14867+
declare function createImageBitmap(image: HTMLImageElement | SVGImageElement | HTMLVideoElement | HTMLCanvasElement | ImageBitmap | ImageData | Blob, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;
1484314868
declare function scroll(options?: ScrollToOptions): void;
1484414869
declare function scrollTo(options?: ScrollToOptions): void;
1484514870
declare function scrollBy(options?: ScrollToOptions): void;

src/lib/es2015.generator.d.ts

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,52 @@
1-
interface GeneratorFunction extends Function { }
1+
interface Generator extends Iterator<any> { }
2+
3+
interface GeneratorFunction {
4+
/**
5+
* Creates a new Generator object.
6+
* @param args A list of arguments the function accepts.
7+
*/
8+
new (...args: any[]): Generator;
9+
/**
10+
* Creates a new Generator object.
11+
* @param args A list of arguments the function accepts.
12+
*/
13+
(...args: any[]): Generator;
14+
/**
15+
* The length of the arguments.
16+
*/
17+
readonly length: number;
18+
/**
19+
* Returns the name of the function.
20+
*/
21+
readonly name: string;
22+
/**
23+
* A reference to the prototype.
24+
*/
25+
readonly prototype: Generator;
26+
}
227

328
interface GeneratorFunctionConstructor {
429
/**
530
* Creates a new Generator function.
631
* @param args A list of arguments the function accepts.
732
*/
833
new (...args: string[]): GeneratorFunction;
34+
/**
35+
* Creates a new Generator function.
36+
* @param args A list of arguments the function accepts.
37+
*/
938
(...args: string[]): GeneratorFunction;
39+
/**
40+
* The length of the arguments.
41+
*/
42+
readonly length: number;
43+
/**
44+
* Returns the name of the function.
45+
*/
46+
readonly name: string;
47+
/**
48+
* A reference to the prototype.
49+
*/
1050
readonly prototype: GeneratorFunction;
1151
}
1252
declare var GeneratorFunction: GeneratorFunctionConstructor;

src/lib/es2015.symbol.wellknown.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ interface Function {
137137
[Symbol.hasInstance](value: any): boolean;
138138
}
139139

140-
interface GeneratorFunction extends Function {
140+
interface GeneratorFunction {
141141
readonly [Symbol.toStringTag]: "GeneratorFunction";
142142
}
143143

src/lib/webworker.generated.d.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1407,6 +1407,8 @@ interface WorkerGlobalScope extends EventTarget, WorkerUtils, WindowConsole, Glo
14071407
readonly performance: Performance;
14081408
readonly self: WorkerGlobalScope;
14091409
msWriteProfilerMark(profilerMarkName: string): void;
1410+
createImageBitmap(image: ImageBitmap | ImageData | Blob, options?: ImageBitmapOptions): Promise<ImageBitmap>;
1411+
createImageBitmap(image: ImageBitmap | ImageData | Blob, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;
14101412
addEventListener<K extends keyof WorkerGlobalScopeEventMap>(type: K, listener: (this: WorkerGlobalScope, ev: WorkerGlobalScopeEventMap[K]) => any, useCapture?: boolean): void;
14111413
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
14121414
}
@@ -1467,6 +1469,21 @@ interface ErrorEventInit {
14671469
error?: any;
14681470
}
14691471

1472+
interface ImageBitmapOptions {
1473+
imageOrientation?: "none" | "flipY";
1474+
premultiplyAlpha?: "none" | "premultiply" | "default";
1475+
colorSpaceConversion?: "none" | "default";
1476+
resizeWidth?: number;
1477+
resizeHeight?: number;
1478+
resizeQuality?: "pixelated" | "low" | "medium" | "high";
1479+
}
1480+
1481+
interface ImageBitmap {
1482+
readonly width: number;
1483+
readonly height: number;
1484+
close(): void;
1485+
}
1486+
14701487
interface BlobPropertyBag {
14711488
type?: string;
14721489
endings?: string;
@@ -1697,6 +1714,8 @@ declare var onerror: (this: DedicatedWorkerGlobalScope, ev: ErrorEvent) => any;
16971714
declare var performance: Performance;
16981715
declare var self: WorkerGlobalScope;
16991716
declare function msWriteProfilerMark(profilerMarkName: string): void;
1717+
declare function createImageBitmap(image: ImageBitmap | ImageData | Blob, options?: ImageBitmapOptions): Promise<ImageBitmap>;
1718+
declare function createImageBitmap(image: ImageBitmap | ImageData | Blob, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;
17001719
declare function dispatchEvent(evt: Event): boolean;
17011720
declare function removeEventListener(type: string, listener?: EventListenerOrEventListenerObject, useCapture?: boolean): void;
17021721
declare var indexedDB: IDBFactory;

0 commit comments

Comments
 (0)