mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Merge branch 'master' into controlFlowArrays
# Conflicts: # src/compiler/checker.ts
This commit is contained in:
@@ -42,6 +42,7 @@ scripts/debug.bat
|
||||
scripts/run.bat
|
||||
scripts/word2md.js
|
||||
scripts/ior.js
|
||||
scripts/buildProtocol.js
|
||||
scripts/*.js.map
|
||||
scripts/typings/
|
||||
coverage/
|
||||
|
||||
+41
-7
@@ -174,7 +174,7 @@ var serverCoreSources = [
|
||||
"lsHost.ts",
|
||||
"project.ts",
|
||||
"editorServices.ts",
|
||||
"protocol.d.ts",
|
||||
"protocol.ts",
|
||||
"session.ts",
|
||||
"server.ts"
|
||||
].map(function (f) {
|
||||
@@ -198,14 +198,13 @@ var typingsInstallerSources = [
|
||||
var serverSources = serverCoreSources.concat(servicesSources);
|
||||
|
||||
var languageServiceLibrarySources = [
|
||||
"protocol.d.ts",
|
||||
"protocol.ts",
|
||||
"utilities.ts",
|
||||
"scriptVersionCache.ts",
|
||||
"scriptInfo.ts",
|
||||
"lsHost.ts",
|
||||
"project.ts",
|
||||
"editorServices.ts",
|
||||
"protocol.d.ts",
|
||||
"session.ts",
|
||||
|
||||
].map(function (f) {
|
||||
@@ -259,7 +258,7 @@ var harnessSources = harnessCoreSources.concat([
|
||||
].map(function (f) {
|
||||
return path.join(unittestsDirectory, f);
|
||||
})).concat([
|
||||
"protocol.d.ts",
|
||||
"protocol.ts",
|
||||
"utilities.ts",
|
||||
"scriptVersionCache.ts",
|
||||
"scriptInfo.ts",
|
||||
@@ -267,7 +266,6 @@ var harnessSources = harnessCoreSources.concat([
|
||||
"project.ts",
|
||||
"typingsCache.ts",
|
||||
"editorServices.ts",
|
||||
"protocol.d.ts",
|
||||
"session.ts",
|
||||
].map(function (f) {
|
||||
return path.join(serverDirectory, f);
|
||||
@@ -518,6 +516,40 @@ compileFile(processDiagnosticMessagesJs,
|
||||
[],
|
||||
/*useBuiltCompiler*/ false);
|
||||
|
||||
var buildProtocolTs = path.join(scriptsDirectory, "buildProtocol.ts");
|
||||
var buildProtocolJs = path.join(scriptsDirectory, "buildProtocol.js");
|
||||
var buildProtocolDts = path.join(builtLocalDirectory, "protocol.d.ts");
|
||||
var typescriptServicesDts = path.join(builtLocalDirectory, "typescriptServices.d.ts");
|
||||
|
||||
file(buildProtocolTs);
|
||||
|
||||
compileFile(buildProtocolJs,
|
||||
[buildProtocolTs],
|
||||
[buildProtocolTs],
|
||||
[],
|
||||
/*useBuiltCompiler*/ false,
|
||||
{noOutFile: true});
|
||||
|
||||
file(buildProtocolDts, [buildProtocolTs, buildProtocolJs, typescriptServicesDts], function() {
|
||||
|
||||
var protocolTs = path.join(serverDirectory, "protocol.ts");
|
||||
|
||||
var cmd = host + " " + buildProtocolJs + " "+ protocolTs + " " + typescriptServicesDts + " " + buildProtocolDts;
|
||||
console.log(cmd);
|
||||
var ex = jake.createExec([cmd]);
|
||||
// Add listeners for output and error
|
||||
ex.addListener("stdout", function (output) {
|
||||
process.stdout.write(output);
|
||||
});
|
||||
ex.addListener("stderr", function (error) {
|
||||
process.stderr.write(error);
|
||||
});
|
||||
ex.addListener("cmdEnd", function () {
|
||||
complete();
|
||||
});
|
||||
ex.run();
|
||||
}, { async: true })
|
||||
|
||||
// The generated diagnostics map; built for the compiler and for the 'generate-diagnostics' task
|
||||
file(diagnosticInfoMapTs, [processDiagnosticMessagesJs, diagnosticMessagesJson], function () {
|
||||
var cmd = host + " " + processDiagnosticMessagesJs + " " + diagnosticMessagesJson;
|
||||
@@ -655,6 +687,8 @@ compileFile(
|
||||
inlineSourceMap: true
|
||||
});
|
||||
|
||||
file(typescriptServicesDts, [servicesFile]);
|
||||
|
||||
var cancellationTokenFile = path.join(builtLocalDirectory, "cancellationToken.js");
|
||||
compileFile(cancellationTokenFile, cancellationTokenSources, [builtLocalDirectory].concat(cancellationTokenSources), /*prefixes*/ [copyright], /*useBuiltCompiler*/ true, { outDir: builtLocalDirectory, noOutFile: true });
|
||||
|
||||
@@ -689,7 +723,7 @@ task("build-fold-end", [], function () {
|
||||
|
||||
// Local target to build the compiler and services
|
||||
desc("Builds the full compiler and services");
|
||||
task("local", ["build-fold-start", "generate-diagnostics", "lib", tscFile, servicesFile, nodeDefinitionsFile, serverFile, builtGeneratedDiagnosticMessagesJSON, "lssl", "build-fold-end"]);
|
||||
task("local", ["build-fold-start", "generate-diagnostics", "lib", tscFile, servicesFile, nodeDefinitionsFile, serverFile, buildProtocolDts, builtGeneratedDiagnosticMessagesJSON, "lssl", "build-fold-end"]);
|
||||
|
||||
// Local target to build only tsc.js
|
||||
desc("Builds only the compiler");
|
||||
@@ -745,7 +779,7 @@ task("generate-spec", [specMd]);
|
||||
// Makes a new LKG. This target does not build anything, but errors if not all the outputs are present in the built/local directory
|
||||
desc("Makes a new LKG out of the built js files");
|
||||
task("LKG", ["clean", "release", "local"].concat(libraryTargets), function () {
|
||||
var expectedFiles = [tscFile, servicesFile, serverFile, nodePackageFile, nodeDefinitionsFile, standaloneDefinitionsFile, tsserverLibraryFile, tsserverLibraryDefinitionFile, cancellationTokenFile, typingsInstallerFile].concat(libraryTargets);
|
||||
var expectedFiles = [tscFile, servicesFile, serverFile, nodePackageFile, nodeDefinitionsFile, standaloneDefinitionsFile, tsserverLibraryFile, tsserverLibraryDefinitionFile, cancellationTokenFile, typingsInstallerFile, buildProtocolDts].concat(libraryTargets);
|
||||
var missingFiles = expectedFiles.filter(function (f) {
|
||||
return !fs.existsSync(f);
|
||||
});
|
||||
|
||||
Vendored
+217
-189
@@ -260,6 +260,9 @@ interface Function {
|
||||
*/
|
||||
bind(this: Function, thisArg: any, ...argArray: any[]): any;
|
||||
|
||||
/** Returns a string representation of a function. */
|
||||
toString(): string;
|
||||
|
||||
prototype: any;
|
||||
readonly length: number;
|
||||
|
||||
@@ -1216,6 +1219,30 @@ interface Array<T> {
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
@@ -11660,11 +11687,12 @@ declare var HashChangeEvent: {
|
||||
interface History {
|
||||
readonly length: number;
|
||||
readonly state: any;
|
||||
back(distance?: any): void;
|
||||
forward(distance?: any): void;
|
||||
go(delta?: any): void;
|
||||
pushState(statedata: any, title?: string, url?: string): void;
|
||||
replaceState(statedata: any, title?: string, url?: string): void;
|
||||
scrollRestoration: ScrollRestoration;
|
||||
back(): void;
|
||||
forward(): void;
|
||||
go(delta?: number): void;
|
||||
pushState(data: any, title: string, url?: string | null): void;
|
||||
replaceState(data: any, title: string, url?: string | null): void;
|
||||
}
|
||||
|
||||
declare var History: {
|
||||
@@ -17236,7 +17264,6 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window
|
||||
addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
|
||||
[index: number]: Window;
|
||||
}
|
||||
|
||||
declare var Window: {
|
||||
@@ -17267,7 +17294,7 @@ declare var XMLDocument: {
|
||||
}
|
||||
|
||||
interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
|
||||
onreadystatechange: (this: this, ev: ProgressEvent) => any;
|
||||
onreadystatechange: (this: this, ev: Event) => any;
|
||||
readonly readyState: number;
|
||||
readonly response: any;
|
||||
readonly responseText: string;
|
||||
@@ -17294,13 +17321,13 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
|
||||
readonly LOADING: number;
|
||||
readonly OPENED: number;
|
||||
readonly UNSENT: number;
|
||||
addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "abort", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "error", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "load", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadstart", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "readystatechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
|
||||
}
|
||||
@@ -17641,183 +17668,183 @@ interface NavigatorUserMedia {
|
||||
}
|
||||
|
||||
interface NodeSelector {
|
||||
querySelector(selectors: "a"): HTMLAnchorElement;
|
||||
querySelector(selectors: "abbr"): HTMLElement;
|
||||
querySelector(selectors: "acronym"): HTMLElement;
|
||||
querySelector(selectors: "address"): HTMLElement;
|
||||
querySelector(selectors: "applet"): HTMLAppletElement;
|
||||
querySelector(selectors: "area"): HTMLAreaElement;
|
||||
querySelector(selectors: "article"): HTMLElement;
|
||||
querySelector(selectors: "aside"): HTMLElement;
|
||||
querySelector(selectors: "audio"): HTMLAudioElement;
|
||||
querySelector(selectors: "b"): HTMLElement;
|
||||
querySelector(selectors: "base"): HTMLBaseElement;
|
||||
querySelector(selectors: "basefont"): HTMLBaseFontElement;
|
||||
querySelector(selectors: "bdo"): HTMLElement;
|
||||
querySelector(selectors: "big"): HTMLElement;
|
||||
querySelector(selectors: "blockquote"): HTMLQuoteElement;
|
||||
querySelector(selectors: "body"): HTMLBodyElement;
|
||||
querySelector(selectors: "br"): HTMLBRElement;
|
||||
querySelector(selectors: "button"): HTMLButtonElement;
|
||||
querySelector(selectors: "canvas"): HTMLCanvasElement;
|
||||
querySelector(selectors: "caption"): HTMLTableCaptionElement;
|
||||
querySelector(selectors: "center"): HTMLElement;
|
||||
querySelector(selectors: "circle"): SVGCircleElement;
|
||||
querySelector(selectors: "cite"): HTMLElement;
|
||||
querySelector(selectors: "clippath"): SVGClipPathElement;
|
||||
querySelector(selectors: "code"): HTMLElement;
|
||||
querySelector(selectors: "col"): HTMLTableColElement;
|
||||
querySelector(selectors: "colgroup"): HTMLTableColElement;
|
||||
querySelector(selectors: "datalist"): HTMLDataListElement;
|
||||
querySelector(selectors: "dd"): HTMLElement;
|
||||
querySelector(selectors: "defs"): SVGDefsElement;
|
||||
querySelector(selectors: "del"): HTMLModElement;
|
||||
querySelector(selectors: "desc"): SVGDescElement;
|
||||
querySelector(selectors: "dfn"): HTMLElement;
|
||||
querySelector(selectors: "dir"): HTMLDirectoryElement;
|
||||
querySelector(selectors: "div"): HTMLDivElement;
|
||||
querySelector(selectors: "dl"): HTMLDListElement;
|
||||
querySelector(selectors: "dt"): HTMLElement;
|
||||
querySelector(selectors: "ellipse"): SVGEllipseElement;
|
||||
querySelector(selectors: "em"): HTMLElement;
|
||||
querySelector(selectors: "embed"): HTMLEmbedElement;
|
||||
querySelector(selectors: "feblend"): SVGFEBlendElement;
|
||||
querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement;
|
||||
querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement;
|
||||
querySelector(selectors: "fecomposite"): SVGFECompositeElement;
|
||||
querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement;
|
||||
querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement;
|
||||
querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement;
|
||||
querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement;
|
||||
querySelector(selectors: "feflood"): SVGFEFloodElement;
|
||||
querySelector(selectors: "fefunca"): SVGFEFuncAElement;
|
||||
querySelector(selectors: "fefuncb"): SVGFEFuncBElement;
|
||||
querySelector(selectors: "fefuncg"): SVGFEFuncGElement;
|
||||
querySelector(selectors: "fefuncr"): SVGFEFuncRElement;
|
||||
querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement;
|
||||
querySelector(selectors: "feimage"): SVGFEImageElement;
|
||||
querySelector(selectors: "femerge"): SVGFEMergeElement;
|
||||
querySelector(selectors: "femergenode"): SVGFEMergeNodeElement;
|
||||
querySelector(selectors: "femorphology"): SVGFEMorphologyElement;
|
||||
querySelector(selectors: "feoffset"): SVGFEOffsetElement;
|
||||
querySelector(selectors: "fepointlight"): SVGFEPointLightElement;
|
||||
querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement;
|
||||
querySelector(selectors: "fespotlight"): SVGFESpotLightElement;
|
||||
querySelector(selectors: "fetile"): SVGFETileElement;
|
||||
querySelector(selectors: "feturbulence"): SVGFETurbulenceElement;
|
||||
querySelector(selectors: "fieldset"): HTMLFieldSetElement;
|
||||
querySelector(selectors: "figcaption"): HTMLElement;
|
||||
querySelector(selectors: "figure"): HTMLElement;
|
||||
querySelector(selectors: "filter"): SVGFilterElement;
|
||||
querySelector(selectors: "font"): HTMLFontElement;
|
||||
querySelector(selectors: "footer"): HTMLElement;
|
||||
querySelector(selectors: "foreignobject"): SVGForeignObjectElement;
|
||||
querySelector(selectors: "form"): HTMLFormElement;
|
||||
querySelector(selectors: "frame"): HTMLFrameElement;
|
||||
querySelector(selectors: "frameset"): HTMLFrameSetElement;
|
||||
querySelector(selectors: "g"): SVGGElement;
|
||||
querySelector(selectors: "h1"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h2"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h3"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h4"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h5"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h6"): HTMLHeadingElement;
|
||||
querySelector(selectors: "head"): HTMLHeadElement;
|
||||
querySelector(selectors: "header"): HTMLElement;
|
||||
querySelector(selectors: "hgroup"): HTMLElement;
|
||||
querySelector(selectors: "hr"): HTMLHRElement;
|
||||
querySelector(selectors: "html"): HTMLHtmlElement;
|
||||
querySelector(selectors: "i"): HTMLElement;
|
||||
querySelector(selectors: "iframe"): HTMLIFrameElement;
|
||||
querySelector(selectors: "image"): SVGImageElement;
|
||||
querySelector(selectors: "img"): HTMLImageElement;
|
||||
querySelector(selectors: "input"): HTMLInputElement;
|
||||
querySelector(selectors: "ins"): HTMLModElement;
|
||||
querySelector(selectors: "isindex"): HTMLUnknownElement;
|
||||
querySelector(selectors: "kbd"): HTMLElement;
|
||||
querySelector(selectors: "keygen"): HTMLElement;
|
||||
querySelector(selectors: "label"): HTMLLabelElement;
|
||||
querySelector(selectors: "legend"): HTMLLegendElement;
|
||||
querySelector(selectors: "li"): HTMLLIElement;
|
||||
querySelector(selectors: "line"): SVGLineElement;
|
||||
querySelector(selectors: "lineargradient"): SVGLinearGradientElement;
|
||||
querySelector(selectors: "link"): HTMLLinkElement;
|
||||
querySelector(selectors: "listing"): HTMLPreElement;
|
||||
querySelector(selectors: "map"): HTMLMapElement;
|
||||
querySelector(selectors: "mark"): HTMLElement;
|
||||
querySelector(selectors: "marker"): SVGMarkerElement;
|
||||
querySelector(selectors: "marquee"): HTMLMarqueeElement;
|
||||
querySelector(selectors: "mask"): SVGMaskElement;
|
||||
querySelector(selectors: "menu"): HTMLMenuElement;
|
||||
querySelector(selectors: "meta"): HTMLMetaElement;
|
||||
querySelector(selectors: "metadata"): SVGMetadataElement;
|
||||
querySelector(selectors: "meter"): HTMLMeterElement;
|
||||
querySelector(selectors: "nav"): HTMLElement;
|
||||
querySelector(selectors: "nextid"): HTMLUnknownElement;
|
||||
querySelector(selectors: "nobr"): HTMLElement;
|
||||
querySelector(selectors: "noframes"): HTMLElement;
|
||||
querySelector(selectors: "noscript"): HTMLElement;
|
||||
querySelector(selectors: "object"): HTMLObjectElement;
|
||||
querySelector(selectors: "ol"): HTMLOListElement;
|
||||
querySelector(selectors: "optgroup"): HTMLOptGroupElement;
|
||||
querySelector(selectors: "option"): HTMLOptionElement;
|
||||
querySelector(selectors: "p"): HTMLParagraphElement;
|
||||
querySelector(selectors: "param"): HTMLParamElement;
|
||||
querySelector(selectors: "path"): SVGPathElement;
|
||||
querySelector(selectors: "pattern"): SVGPatternElement;
|
||||
querySelector(selectors: "picture"): HTMLPictureElement;
|
||||
querySelector(selectors: "plaintext"): HTMLElement;
|
||||
querySelector(selectors: "polygon"): SVGPolygonElement;
|
||||
querySelector(selectors: "polyline"): SVGPolylineElement;
|
||||
querySelector(selectors: "pre"): HTMLPreElement;
|
||||
querySelector(selectors: "progress"): HTMLProgressElement;
|
||||
querySelector(selectors: "q"): HTMLQuoteElement;
|
||||
querySelector(selectors: "radialgradient"): SVGRadialGradientElement;
|
||||
querySelector(selectors: "rect"): SVGRectElement;
|
||||
querySelector(selectors: "rt"): HTMLElement;
|
||||
querySelector(selectors: "ruby"): HTMLElement;
|
||||
querySelector(selectors: "s"): HTMLElement;
|
||||
querySelector(selectors: "samp"): HTMLElement;
|
||||
querySelector(selectors: "script"): HTMLScriptElement;
|
||||
querySelector(selectors: "section"): HTMLElement;
|
||||
querySelector(selectors: "select"): HTMLSelectElement;
|
||||
querySelector(selectors: "small"): HTMLElement;
|
||||
querySelector(selectors: "source"): HTMLSourceElement;
|
||||
querySelector(selectors: "span"): HTMLSpanElement;
|
||||
querySelector(selectors: "stop"): SVGStopElement;
|
||||
querySelector(selectors: "strike"): HTMLElement;
|
||||
querySelector(selectors: "strong"): HTMLElement;
|
||||
querySelector(selectors: "style"): HTMLStyleElement;
|
||||
querySelector(selectors: "sub"): HTMLElement;
|
||||
querySelector(selectors: "sup"): HTMLElement;
|
||||
querySelector(selectors: "svg"): SVGSVGElement;
|
||||
querySelector(selectors: "switch"): SVGSwitchElement;
|
||||
querySelector(selectors: "symbol"): SVGSymbolElement;
|
||||
querySelector(selectors: "table"): HTMLTableElement;
|
||||
querySelector(selectors: "tbody"): HTMLTableSectionElement;
|
||||
querySelector(selectors: "td"): HTMLTableDataCellElement;
|
||||
querySelector(selectors: "template"): HTMLTemplateElement;
|
||||
querySelector(selectors: "text"): SVGTextElement;
|
||||
querySelector(selectors: "textpath"): SVGTextPathElement;
|
||||
querySelector(selectors: "textarea"): HTMLTextAreaElement;
|
||||
querySelector(selectors: "tfoot"): HTMLTableSectionElement;
|
||||
querySelector(selectors: "th"): HTMLTableHeaderCellElement;
|
||||
querySelector(selectors: "thead"): HTMLTableSectionElement;
|
||||
querySelector(selectors: "title"): HTMLTitleElement;
|
||||
querySelector(selectors: "tr"): HTMLTableRowElement;
|
||||
querySelector(selectors: "track"): HTMLTrackElement;
|
||||
querySelector(selectors: "tspan"): SVGTSpanElement;
|
||||
querySelector(selectors: "tt"): HTMLElement;
|
||||
querySelector(selectors: "u"): HTMLElement;
|
||||
querySelector(selectors: "ul"): HTMLUListElement;
|
||||
querySelector(selectors: "use"): SVGUseElement;
|
||||
querySelector(selectors: "var"): HTMLElement;
|
||||
querySelector(selectors: "video"): HTMLVideoElement;
|
||||
querySelector(selectors: "view"): SVGViewElement;
|
||||
querySelector(selectors: "wbr"): HTMLElement;
|
||||
querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement;
|
||||
querySelector(selectors: "xmp"): HTMLPreElement;
|
||||
querySelector(selectors: string): Element;
|
||||
querySelector(selectors: "a"): HTMLAnchorElement | null;
|
||||
querySelector(selectors: "abbr"): HTMLElement | null;
|
||||
querySelector(selectors: "acronym"): HTMLElement | null;
|
||||
querySelector(selectors: "address"): HTMLElement | null;
|
||||
querySelector(selectors: "applet"): HTMLAppletElement | null;
|
||||
querySelector(selectors: "area"): HTMLAreaElement | null;
|
||||
querySelector(selectors: "article"): HTMLElement | null;
|
||||
querySelector(selectors: "aside"): HTMLElement | null;
|
||||
querySelector(selectors: "audio"): HTMLAudioElement | null;
|
||||
querySelector(selectors: "b"): HTMLElement | null;
|
||||
querySelector(selectors: "base"): HTMLBaseElement | null;
|
||||
querySelector(selectors: "basefont"): HTMLBaseFontElement | null;
|
||||
querySelector(selectors: "bdo"): HTMLElement | null;
|
||||
querySelector(selectors: "big"): HTMLElement | null;
|
||||
querySelector(selectors: "blockquote"): HTMLQuoteElement | null;
|
||||
querySelector(selectors: "body"): HTMLBodyElement | null;
|
||||
querySelector(selectors: "br"): HTMLBRElement | null;
|
||||
querySelector(selectors: "button"): HTMLButtonElement | null;
|
||||
querySelector(selectors: "canvas"): HTMLCanvasElement | null;
|
||||
querySelector(selectors: "caption"): HTMLTableCaptionElement | null;
|
||||
querySelector(selectors: "center"): HTMLElement | null;
|
||||
querySelector(selectors: "circle"): SVGCircleElement | null;
|
||||
querySelector(selectors: "cite"): HTMLElement | null;
|
||||
querySelector(selectors: "clippath"): SVGClipPathElement | null;
|
||||
querySelector(selectors: "code"): HTMLElement | null;
|
||||
querySelector(selectors: "col"): HTMLTableColElement | null;
|
||||
querySelector(selectors: "colgroup"): HTMLTableColElement | null;
|
||||
querySelector(selectors: "datalist"): HTMLDataListElement | null;
|
||||
querySelector(selectors: "dd"): HTMLElement | null;
|
||||
querySelector(selectors: "defs"): SVGDefsElement | null;
|
||||
querySelector(selectors: "del"): HTMLModElement | null;
|
||||
querySelector(selectors: "desc"): SVGDescElement | null;
|
||||
querySelector(selectors: "dfn"): HTMLElement | null;
|
||||
querySelector(selectors: "dir"): HTMLDirectoryElement | null;
|
||||
querySelector(selectors: "div"): HTMLDivElement | null;
|
||||
querySelector(selectors: "dl"): HTMLDListElement | null;
|
||||
querySelector(selectors: "dt"): HTMLElement | null;
|
||||
querySelector(selectors: "ellipse"): SVGEllipseElement | null;
|
||||
querySelector(selectors: "em"): HTMLElement | null;
|
||||
querySelector(selectors: "embed"): HTMLEmbedElement | null;
|
||||
querySelector(selectors: "feblend"): SVGFEBlendElement | null;
|
||||
querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement | null;
|
||||
querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement | null;
|
||||
querySelector(selectors: "fecomposite"): SVGFECompositeElement | null;
|
||||
querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement | null;
|
||||
querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement | null;
|
||||
querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement | null;
|
||||
querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement | null;
|
||||
querySelector(selectors: "feflood"): SVGFEFloodElement | null;
|
||||
querySelector(selectors: "fefunca"): SVGFEFuncAElement | null;
|
||||
querySelector(selectors: "fefuncb"): SVGFEFuncBElement | null;
|
||||
querySelector(selectors: "fefuncg"): SVGFEFuncGElement | null;
|
||||
querySelector(selectors: "fefuncr"): SVGFEFuncRElement | null;
|
||||
querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement | null;
|
||||
querySelector(selectors: "feimage"): SVGFEImageElement | null;
|
||||
querySelector(selectors: "femerge"): SVGFEMergeElement | null;
|
||||
querySelector(selectors: "femergenode"): SVGFEMergeNodeElement | null;
|
||||
querySelector(selectors: "femorphology"): SVGFEMorphologyElement | null;
|
||||
querySelector(selectors: "feoffset"): SVGFEOffsetElement | null;
|
||||
querySelector(selectors: "fepointlight"): SVGFEPointLightElement | null;
|
||||
querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement | null;
|
||||
querySelector(selectors: "fespotlight"): SVGFESpotLightElement | null;
|
||||
querySelector(selectors: "fetile"): SVGFETileElement | null;
|
||||
querySelector(selectors: "feturbulence"): SVGFETurbulenceElement | null;
|
||||
querySelector(selectors: "fieldset"): HTMLFieldSetElement | null;
|
||||
querySelector(selectors: "figcaption"): HTMLElement | null;
|
||||
querySelector(selectors: "figure"): HTMLElement | null;
|
||||
querySelector(selectors: "filter"): SVGFilterElement | null;
|
||||
querySelector(selectors: "font"): HTMLFontElement | null;
|
||||
querySelector(selectors: "footer"): HTMLElement | null;
|
||||
querySelector(selectors: "foreignobject"): SVGForeignObjectElement | null;
|
||||
querySelector(selectors: "form"): HTMLFormElement | null;
|
||||
querySelector(selectors: "frame"): HTMLFrameElement | null;
|
||||
querySelector(selectors: "frameset"): HTMLFrameSetElement | null;
|
||||
querySelector(selectors: "g"): SVGGElement | null;
|
||||
querySelector(selectors: "h1"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h2"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h3"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h4"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h5"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h6"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "head"): HTMLHeadElement | null;
|
||||
querySelector(selectors: "header"): HTMLElement | null;
|
||||
querySelector(selectors: "hgroup"): HTMLElement | null;
|
||||
querySelector(selectors: "hr"): HTMLHRElement | null;
|
||||
querySelector(selectors: "html"): HTMLHtmlElement | null;
|
||||
querySelector(selectors: "i"): HTMLElement | null;
|
||||
querySelector(selectors: "iframe"): HTMLIFrameElement | null;
|
||||
querySelector(selectors: "image"): SVGImageElement | null;
|
||||
querySelector(selectors: "img"): HTMLImageElement | null;
|
||||
querySelector(selectors: "input"): HTMLInputElement | null;
|
||||
querySelector(selectors: "ins"): HTMLModElement | null;
|
||||
querySelector(selectors: "isindex"): HTMLUnknownElement | null;
|
||||
querySelector(selectors: "kbd"): HTMLElement | null;
|
||||
querySelector(selectors: "keygen"): HTMLElement | null;
|
||||
querySelector(selectors: "label"): HTMLLabelElement | null;
|
||||
querySelector(selectors: "legend"): HTMLLegendElement | null;
|
||||
querySelector(selectors: "li"): HTMLLIElement | null;
|
||||
querySelector(selectors: "line"): SVGLineElement | null;
|
||||
querySelector(selectors: "lineargradient"): SVGLinearGradientElement | null;
|
||||
querySelector(selectors: "link"): HTMLLinkElement | null;
|
||||
querySelector(selectors: "listing"): HTMLPreElement | null;
|
||||
querySelector(selectors: "map"): HTMLMapElement | null;
|
||||
querySelector(selectors: "mark"): HTMLElement | null;
|
||||
querySelector(selectors: "marker"): SVGMarkerElement | null;
|
||||
querySelector(selectors: "marquee"): HTMLMarqueeElement | null;
|
||||
querySelector(selectors: "mask"): SVGMaskElement | null;
|
||||
querySelector(selectors: "menu"): HTMLMenuElement | null;
|
||||
querySelector(selectors: "meta"): HTMLMetaElement | null;
|
||||
querySelector(selectors: "metadata"): SVGMetadataElement | null;
|
||||
querySelector(selectors: "meter"): HTMLMeterElement | null;
|
||||
querySelector(selectors: "nav"): HTMLElement | null;
|
||||
querySelector(selectors: "nextid"): HTMLUnknownElement | null;
|
||||
querySelector(selectors: "nobr"): HTMLElement | null;
|
||||
querySelector(selectors: "noframes"): HTMLElement | null;
|
||||
querySelector(selectors: "noscript"): HTMLElement | null;
|
||||
querySelector(selectors: "object"): HTMLObjectElement | null;
|
||||
querySelector(selectors: "ol"): HTMLOListElement | null;
|
||||
querySelector(selectors: "optgroup"): HTMLOptGroupElement | null;
|
||||
querySelector(selectors: "option"): HTMLOptionElement | null;
|
||||
querySelector(selectors: "p"): HTMLParagraphElement | null;
|
||||
querySelector(selectors: "param"): HTMLParamElement | null;
|
||||
querySelector(selectors: "path"): SVGPathElement | null;
|
||||
querySelector(selectors: "pattern"): SVGPatternElement | null;
|
||||
querySelector(selectors: "picture"): HTMLPictureElement | null;
|
||||
querySelector(selectors: "plaintext"): HTMLElement | null;
|
||||
querySelector(selectors: "polygon"): SVGPolygonElement | null;
|
||||
querySelector(selectors: "polyline"): SVGPolylineElement | null;
|
||||
querySelector(selectors: "pre"): HTMLPreElement | null;
|
||||
querySelector(selectors: "progress"): HTMLProgressElement | null;
|
||||
querySelector(selectors: "q"): HTMLQuoteElement | null;
|
||||
querySelector(selectors: "radialgradient"): SVGRadialGradientElement | null;
|
||||
querySelector(selectors: "rect"): SVGRectElement | null;
|
||||
querySelector(selectors: "rt"): HTMLElement | null;
|
||||
querySelector(selectors: "ruby"): HTMLElement | null;
|
||||
querySelector(selectors: "s"): HTMLElement | null;
|
||||
querySelector(selectors: "samp"): HTMLElement | null;
|
||||
querySelector(selectors: "script"): HTMLScriptElement | null;
|
||||
querySelector(selectors: "section"): HTMLElement | null;
|
||||
querySelector(selectors: "select"): HTMLSelectElement | null;
|
||||
querySelector(selectors: "small"): HTMLElement | null;
|
||||
querySelector(selectors: "source"): HTMLSourceElement | null;
|
||||
querySelector(selectors: "span"): HTMLSpanElement | null;
|
||||
querySelector(selectors: "stop"): SVGStopElement | null;
|
||||
querySelector(selectors: "strike"): HTMLElement | null;
|
||||
querySelector(selectors: "strong"): HTMLElement | null;
|
||||
querySelector(selectors: "style"): HTMLStyleElement | null;
|
||||
querySelector(selectors: "sub"): HTMLElement | null;
|
||||
querySelector(selectors: "sup"): HTMLElement | null;
|
||||
querySelector(selectors: "svg"): SVGSVGElement | null;
|
||||
querySelector(selectors: "switch"): SVGSwitchElement | null;
|
||||
querySelector(selectors: "symbol"): SVGSymbolElement | null;
|
||||
querySelector(selectors: "table"): HTMLTableElement | null;
|
||||
querySelector(selectors: "tbody"): HTMLTableSectionElement | null;
|
||||
querySelector(selectors: "td"): HTMLTableDataCellElement | null;
|
||||
querySelector(selectors: "template"): HTMLTemplateElement | null;
|
||||
querySelector(selectors: "text"): SVGTextElement | null;
|
||||
querySelector(selectors: "textpath"): SVGTextPathElement | null;
|
||||
querySelector(selectors: "textarea"): HTMLTextAreaElement | null;
|
||||
querySelector(selectors: "tfoot"): HTMLTableSectionElement | null;
|
||||
querySelector(selectors: "th"): HTMLTableHeaderCellElement | null;
|
||||
querySelector(selectors: "thead"): HTMLTableSectionElement | null;
|
||||
querySelector(selectors: "title"): HTMLTitleElement | null;
|
||||
querySelector(selectors: "tr"): HTMLTableRowElement | null;
|
||||
querySelector(selectors: "track"): HTMLTrackElement | null;
|
||||
querySelector(selectors: "tspan"): SVGTSpanElement | null;
|
||||
querySelector(selectors: "tt"): HTMLElement | null;
|
||||
querySelector(selectors: "u"): HTMLElement | null;
|
||||
querySelector(selectors: "ul"): HTMLUListElement | null;
|
||||
querySelector(selectors: "use"): SVGUseElement | null;
|
||||
querySelector(selectors: "var"): HTMLElement | null;
|
||||
querySelector(selectors: "video"): HTMLVideoElement | null;
|
||||
querySelector(selectors: "view"): SVGViewElement | null;
|
||||
querySelector(selectors: "wbr"): HTMLElement | null;
|
||||
querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement | null;
|
||||
querySelector(selectors: "xmp"): HTMLPreElement | null;
|
||||
querySelector(selectors: string): Element | null;
|
||||
querySelectorAll(selectors: "a"): NodeListOf<HTMLAnchorElement>;
|
||||
querySelectorAll(selectors: "abbr"): NodeListOf<HTMLElement>;
|
||||
querySelectorAll(selectors: "acronym"): NodeListOf<HTMLElement>;
|
||||
@@ -18747,6 +18774,7 @@ type ScrollLogicalPosition = "start" | "center" | "end" | "nearest";
|
||||
type IDBValidKey = number | string | Date | IDBArrayKey;
|
||||
type BufferSource = ArrayBuffer | ArrayBufferView;
|
||||
type MouseWheelEvent = WheelEvent;
|
||||
type ScrollRestoration = "auto" | "manual";
|
||||
/////////////////////////////
|
||||
/// WorkerGlobalScope APIs
|
||||
/////////////////////////////
|
||||
|
||||
Vendored
+191
-190
@@ -7552,11 +7552,12 @@ declare var HashChangeEvent: {
|
||||
interface History {
|
||||
readonly length: number;
|
||||
readonly state: any;
|
||||
back(distance?: any): void;
|
||||
forward(distance?: any): void;
|
||||
go(delta?: any): void;
|
||||
pushState(statedata: any, title?: string, url?: string): void;
|
||||
replaceState(statedata: any, title?: string, url?: string): void;
|
||||
scrollRestoration: ScrollRestoration;
|
||||
back(): void;
|
||||
forward(): void;
|
||||
go(delta?: number): void;
|
||||
pushState(data: any, title: string, url?: string | null): void;
|
||||
replaceState(data: any, title: string, url?: string | null): void;
|
||||
}
|
||||
|
||||
declare var History: {
|
||||
@@ -13128,7 +13129,6 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window
|
||||
addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
|
||||
[index: number]: Window;
|
||||
}
|
||||
|
||||
declare var Window: {
|
||||
@@ -13159,7 +13159,7 @@ declare var XMLDocument: {
|
||||
}
|
||||
|
||||
interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
|
||||
onreadystatechange: (this: this, ev: ProgressEvent) => any;
|
||||
onreadystatechange: (this: this, ev: Event) => any;
|
||||
readonly readyState: number;
|
||||
readonly response: any;
|
||||
readonly responseText: string;
|
||||
@@ -13186,13 +13186,13 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
|
||||
readonly LOADING: number;
|
||||
readonly OPENED: number;
|
||||
readonly UNSENT: number;
|
||||
addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "abort", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "error", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "load", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadstart", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "readystatechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
|
||||
}
|
||||
@@ -13533,183 +13533,183 @@ interface NavigatorUserMedia {
|
||||
}
|
||||
|
||||
interface NodeSelector {
|
||||
querySelector(selectors: "a"): HTMLAnchorElement;
|
||||
querySelector(selectors: "abbr"): HTMLElement;
|
||||
querySelector(selectors: "acronym"): HTMLElement;
|
||||
querySelector(selectors: "address"): HTMLElement;
|
||||
querySelector(selectors: "applet"): HTMLAppletElement;
|
||||
querySelector(selectors: "area"): HTMLAreaElement;
|
||||
querySelector(selectors: "article"): HTMLElement;
|
||||
querySelector(selectors: "aside"): HTMLElement;
|
||||
querySelector(selectors: "audio"): HTMLAudioElement;
|
||||
querySelector(selectors: "b"): HTMLElement;
|
||||
querySelector(selectors: "base"): HTMLBaseElement;
|
||||
querySelector(selectors: "basefont"): HTMLBaseFontElement;
|
||||
querySelector(selectors: "bdo"): HTMLElement;
|
||||
querySelector(selectors: "big"): HTMLElement;
|
||||
querySelector(selectors: "blockquote"): HTMLQuoteElement;
|
||||
querySelector(selectors: "body"): HTMLBodyElement;
|
||||
querySelector(selectors: "br"): HTMLBRElement;
|
||||
querySelector(selectors: "button"): HTMLButtonElement;
|
||||
querySelector(selectors: "canvas"): HTMLCanvasElement;
|
||||
querySelector(selectors: "caption"): HTMLTableCaptionElement;
|
||||
querySelector(selectors: "center"): HTMLElement;
|
||||
querySelector(selectors: "circle"): SVGCircleElement;
|
||||
querySelector(selectors: "cite"): HTMLElement;
|
||||
querySelector(selectors: "clippath"): SVGClipPathElement;
|
||||
querySelector(selectors: "code"): HTMLElement;
|
||||
querySelector(selectors: "col"): HTMLTableColElement;
|
||||
querySelector(selectors: "colgroup"): HTMLTableColElement;
|
||||
querySelector(selectors: "datalist"): HTMLDataListElement;
|
||||
querySelector(selectors: "dd"): HTMLElement;
|
||||
querySelector(selectors: "defs"): SVGDefsElement;
|
||||
querySelector(selectors: "del"): HTMLModElement;
|
||||
querySelector(selectors: "desc"): SVGDescElement;
|
||||
querySelector(selectors: "dfn"): HTMLElement;
|
||||
querySelector(selectors: "dir"): HTMLDirectoryElement;
|
||||
querySelector(selectors: "div"): HTMLDivElement;
|
||||
querySelector(selectors: "dl"): HTMLDListElement;
|
||||
querySelector(selectors: "dt"): HTMLElement;
|
||||
querySelector(selectors: "ellipse"): SVGEllipseElement;
|
||||
querySelector(selectors: "em"): HTMLElement;
|
||||
querySelector(selectors: "embed"): HTMLEmbedElement;
|
||||
querySelector(selectors: "feblend"): SVGFEBlendElement;
|
||||
querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement;
|
||||
querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement;
|
||||
querySelector(selectors: "fecomposite"): SVGFECompositeElement;
|
||||
querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement;
|
||||
querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement;
|
||||
querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement;
|
||||
querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement;
|
||||
querySelector(selectors: "feflood"): SVGFEFloodElement;
|
||||
querySelector(selectors: "fefunca"): SVGFEFuncAElement;
|
||||
querySelector(selectors: "fefuncb"): SVGFEFuncBElement;
|
||||
querySelector(selectors: "fefuncg"): SVGFEFuncGElement;
|
||||
querySelector(selectors: "fefuncr"): SVGFEFuncRElement;
|
||||
querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement;
|
||||
querySelector(selectors: "feimage"): SVGFEImageElement;
|
||||
querySelector(selectors: "femerge"): SVGFEMergeElement;
|
||||
querySelector(selectors: "femergenode"): SVGFEMergeNodeElement;
|
||||
querySelector(selectors: "femorphology"): SVGFEMorphologyElement;
|
||||
querySelector(selectors: "feoffset"): SVGFEOffsetElement;
|
||||
querySelector(selectors: "fepointlight"): SVGFEPointLightElement;
|
||||
querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement;
|
||||
querySelector(selectors: "fespotlight"): SVGFESpotLightElement;
|
||||
querySelector(selectors: "fetile"): SVGFETileElement;
|
||||
querySelector(selectors: "feturbulence"): SVGFETurbulenceElement;
|
||||
querySelector(selectors: "fieldset"): HTMLFieldSetElement;
|
||||
querySelector(selectors: "figcaption"): HTMLElement;
|
||||
querySelector(selectors: "figure"): HTMLElement;
|
||||
querySelector(selectors: "filter"): SVGFilterElement;
|
||||
querySelector(selectors: "font"): HTMLFontElement;
|
||||
querySelector(selectors: "footer"): HTMLElement;
|
||||
querySelector(selectors: "foreignobject"): SVGForeignObjectElement;
|
||||
querySelector(selectors: "form"): HTMLFormElement;
|
||||
querySelector(selectors: "frame"): HTMLFrameElement;
|
||||
querySelector(selectors: "frameset"): HTMLFrameSetElement;
|
||||
querySelector(selectors: "g"): SVGGElement;
|
||||
querySelector(selectors: "h1"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h2"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h3"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h4"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h5"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h6"): HTMLHeadingElement;
|
||||
querySelector(selectors: "head"): HTMLHeadElement;
|
||||
querySelector(selectors: "header"): HTMLElement;
|
||||
querySelector(selectors: "hgroup"): HTMLElement;
|
||||
querySelector(selectors: "hr"): HTMLHRElement;
|
||||
querySelector(selectors: "html"): HTMLHtmlElement;
|
||||
querySelector(selectors: "i"): HTMLElement;
|
||||
querySelector(selectors: "iframe"): HTMLIFrameElement;
|
||||
querySelector(selectors: "image"): SVGImageElement;
|
||||
querySelector(selectors: "img"): HTMLImageElement;
|
||||
querySelector(selectors: "input"): HTMLInputElement;
|
||||
querySelector(selectors: "ins"): HTMLModElement;
|
||||
querySelector(selectors: "isindex"): HTMLUnknownElement;
|
||||
querySelector(selectors: "kbd"): HTMLElement;
|
||||
querySelector(selectors: "keygen"): HTMLElement;
|
||||
querySelector(selectors: "label"): HTMLLabelElement;
|
||||
querySelector(selectors: "legend"): HTMLLegendElement;
|
||||
querySelector(selectors: "li"): HTMLLIElement;
|
||||
querySelector(selectors: "line"): SVGLineElement;
|
||||
querySelector(selectors: "lineargradient"): SVGLinearGradientElement;
|
||||
querySelector(selectors: "link"): HTMLLinkElement;
|
||||
querySelector(selectors: "listing"): HTMLPreElement;
|
||||
querySelector(selectors: "map"): HTMLMapElement;
|
||||
querySelector(selectors: "mark"): HTMLElement;
|
||||
querySelector(selectors: "marker"): SVGMarkerElement;
|
||||
querySelector(selectors: "marquee"): HTMLMarqueeElement;
|
||||
querySelector(selectors: "mask"): SVGMaskElement;
|
||||
querySelector(selectors: "menu"): HTMLMenuElement;
|
||||
querySelector(selectors: "meta"): HTMLMetaElement;
|
||||
querySelector(selectors: "metadata"): SVGMetadataElement;
|
||||
querySelector(selectors: "meter"): HTMLMeterElement;
|
||||
querySelector(selectors: "nav"): HTMLElement;
|
||||
querySelector(selectors: "nextid"): HTMLUnknownElement;
|
||||
querySelector(selectors: "nobr"): HTMLElement;
|
||||
querySelector(selectors: "noframes"): HTMLElement;
|
||||
querySelector(selectors: "noscript"): HTMLElement;
|
||||
querySelector(selectors: "object"): HTMLObjectElement;
|
||||
querySelector(selectors: "ol"): HTMLOListElement;
|
||||
querySelector(selectors: "optgroup"): HTMLOptGroupElement;
|
||||
querySelector(selectors: "option"): HTMLOptionElement;
|
||||
querySelector(selectors: "p"): HTMLParagraphElement;
|
||||
querySelector(selectors: "param"): HTMLParamElement;
|
||||
querySelector(selectors: "path"): SVGPathElement;
|
||||
querySelector(selectors: "pattern"): SVGPatternElement;
|
||||
querySelector(selectors: "picture"): HTMLPictureElement;
|
||||
querySelector(selectors: "plaintext"): HTMLElement;
|
||||
querySelector(selectors: "polygon"): SVGPolygonElement;
|
||||
querySelector(selectors: "polyline"): SVGPolylineElement;
|
||||
querySelector(selectors: "pre"): HTMLPreElement;
|
||||
querySelector(selectors: "progress"): HTMLProgressElement;
|
||||
querySelector(selectors: "q"): HTMLQuoteElement;
|
||||
querySelector(selectors: "radialgradient"): SVGRadialGradientElement;
|
||||
querySelector(selectors: "rect"): SVGRectElement;
|
||||
querySelector(selectors: "rt"): HTMLElement;
|
||||
querySelector(selectors: "ruby"): HTMLElement;
|
||||
querySelector(selectors: "s"): HTMLElement;
|
||||
querySelector(selectors: "samp"): HTMLElement;
|
||||
querySelector(selectors: "script"): HTMLScriptElement;
|
||||
querySelector(selectors: "section"): HTMLElement;
|
||||
querySelector(selectors: "select"): HTMLSelectElement;
|
||||
querySelector(selectors: "small"): HTMLElement;
|
||||
querySelector(selectors: "source"): HTMLSourceElement;
|
||||
querySelector(selectors: "span"): HTMLSpanElement;
|
||||
querySelector(selectors: "stop"): SVGStopElement;
|
||||
querySelector(selectors: "strike"): HTMLElement;
|
||||
querySelector(selectors: "strong"): HTMLElement;
|
||||
querySelector(selectors: "style"): HTMLStyleElement;
|
||||
querySelector(selectors: "sub"): HTMLElement;
|
||||
querySelector(selectors: "sup"): HTMLElement;
|
||||
querySelector(selectors: "svg"): SVGSVGElement;
|
||||
querySelector(selectors: "switch"): SVGSwitchElement;
|
||||
querySelector(selectors: "symbol"): SVGSymbolElement;
|
||||
querySelector(selectors: "table"): HTMLTableElement;
|
||||
querySelector(selectors: "tbody"): HTMLTableSectionElement;
|
||||
querySelector(selectors: "td"): HTMLTableDataCellElement;
|
||||
querySelector(selectors: "template"): HTMLTemplateElement;
|
||||
querySelector(selectors: "text"): SVGTextElement;
|
||||
querySelector(selectors: "textpath"): SVGTextPathElement;
|
||||
querySelector(selectors: "textarea"): HTMLTextAreaElement;
|
||||
querySelector(selectors: "tfoot"): HTMLTableSectionElement;
|
||||
querySelector(selectors: "th"): HTMLTableHeaderCellElement;
|
||||
querySelector(selectors: "thead"): HTMLTableSectionElement;
|
||||
querySelector(selectors: "title"): HTMLTitleElement;
|
||||
querySelector(selectors: "tr"): HTMLTableRowElement;
|
||||
querySelector(selectors: "track"): HTMLTrackElement;
|
||||
querySelector(selectors: "tspan"): SVGTSpanElement;
|
||||
querySelector(selectors: "tt"): HTMLElement;
|
||||
querySelector(selectors: "u"): HTMLElement;
|
||||
querySelector(selectors: "ul"): HTMLUListElement;
|
||||
querySelector(selectors: "use"): SVGUseElement;
|
||||
querySelector(selectors: "var"): HTMLElement;
|
||||
querySelector(selectors: "video"): HTMLVideoElement;
|
||||
querySelector(selectors: "view"): SVGViewElement;
|
||||
querySelector(selectors: "wbr"): HTMLElement;
|
||||
querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement;
|
||||
querySelector(selectors: "xmp"): HTMLPreElement;
|
||||
querySelector(selectors: string): Element;
|
||||
querySelector(selectors: "a"): HTMLAnchorElement | null;
|
||||
querySelector(selectors: "abbr"): HTMLElement | null;
|
||||
querySelector(selectors: "acronym"): HTMLElement | null;
|
||||
querySelector(selectors: "address"): HTMLElement | null;
|
||||
querySelector(selectors: "applet"): HTMLAppletElement | null;
|
||||
querySelector(selectors: "area"): HTMLAreaElement | null;
|
||||
querySelector(selectors: "article"): HTMLElement | null;
|
||||
querySelector(selectors: "aside"): HTMLElement | null;
|
||||
querySelector(selectors: "audio"): HTMLAudioElement | null;
|
||||
querySelector(selectors: "b"): HTMLElement | null;
|
||||
querySelector(selectors: "base"): HTMLBaseElement | null;
|
||||
querySelector(selectors: "basefont"): HTMLBaseFontElement | null;
|
||||
querySelector(selectors: "bdo"): HTMLElement | null;
|
||||
querySelector(selectors: "big"): HTMLElement | null;
|
||||
querySelector(selectors: "blockquote"): HTMLQuoteElement | null;
|
||||
querySelector(selectors: "body"): HTMLBodyElement | null;
|
||||
querySelector(selectors: "br"): HTMLBRElement | null;
|
||||
querySelector(selectors: "button"): HTMLButtonElement | null;
|
||||
querySelector(selectors: "canvas"): HTMLCanvasElement | null;
|
||||
querySelector(selectors: "caption"): HTMLTableCaptionElement | null;
|
||||
querySelector(selectors: "center"): HTMLElement | null;
|
||||
querySelector(selectors: "circle"): SVGCircleElement | null;
|
||||
querySelector(selectors: "cite"): HTMLElement | null;
|
||||
querySelector(selectors: "clippath"): SVGClipPathElement | null;
|
||||
querySelector(selectors: "code"): HTMLElement | null;
|
||||
querySelector(selectors: "col"): HTMLTableColElement | null;
|
||||
querySelector(selectors: "colgroup"): HTMLTableColElement | null;
|
||||
querySelector(selectors: "datalist"): HTMLDataListElement | null;
|
||||
querySelector(selectors: "dd"): HTMLElement | null;
|
||||
querySelector(selectors: "defs"): SVGDefsElement | null;
|
||||
querySelector(selectors: "del"): HTMLModElement | null;
|
||||
querySelector(selectors: "desc"): SVGDescElement | null;
|
||||
querySelector(selectors: "dfn"): HTMLElement | null;
|
||||
querySelector(selectors: "dir"): HTMLDirectoryElement | null;
|
||||
querySelector(selectors: "div"): HTMLDivElement | null;
|
||||
querySelector(selectors: "dl"): HTMLDListElement | null;
|
||||
querySelector(selectors: "dt"): HTMLElement | null;
|
||||
querySelector(selectors: "ellipse"): SVGEllipseElement | null;
|
||||
querySelector(selectors: "em"): HTMLElement | null;
|
||||
querySelector(selectors: "embed"): HTMLEmbedElement | null;
|
||||
querySelector(selectors: "feblend"): SVGFEBlendElement | null;
|
||||
querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement | null;
|
||||
querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement | null;
|
||||
querySelector(selectors: "fecomposite"): SVGFECompositeElement | null;
|
||||
querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement | null;
|
||||
querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement | null;
|
||||
querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement | null;
|
||||
querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement | null;
|
||||
querySelector(selectors: "feflood"): SVGFEFloodElement | null;
|
||||
querySelector(selectors: "fefunca"): SVGFEFuncAElement | null;
|
||||
querySelector(selectors: "fefuncb"): SVGFEFuncBElement | null;
|
||||
querySelector(selectors: "fefuncg"): SVGFEFuncGElement | null;
|
||||
querySelector(selectors: "fefuncr"): SVGFEFuncRElement | null;
|
||||
querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement | null;
|
||||
querySelector(selectors: "feimage"): SVGFEImageElement | null;
|
||||
querySelector(selectors: "femerge"): SVGFEMergeElement | null;
|
||||
querySelector(selectors: "femergenode"): SVGFEMergeNodeElement | null;
|
||||
querySelector(selectors: "femorphology"): SVGFEMorphologyElement | null;
|
||||
querySelector(selectors: "feoffset"): SVGFEOffsetElement | null;
|
||||
querySelector(selectors: "fepointlight"): SVGFEPointLightElement | null;
|
||||
querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement | null;
|
||||
querySelector(selectors: "fespotlight"): SVGFESpotLightElement | null;
|
||||
querySelector(selectors: "fetile"): SVGFETileElement | null;
|
||||
querySelector(selectors: "feturbulence"): SVGFETurbulenceElement | null;
|
||||
querySelector(selectors: "fieldset"): HTMLFieldSetElement | null;
|
||||
querySelector(selectors: "figcaption"): HTMLElement | null;
|
||||
querySelector(selectors: "figure"): HTMLElement | null;
|
||||
querySelector(selectors: "filter"): SVGFilterElement | null;
|
||||
querySelector(selectors: "font"): HTMLFontElement | null;
|
||||
querySelector(selectors: "footer"): HTMLElement | null;
|
||||
querySelector(selectors: "foreignobject"): SVGForeignObjectElement | null;
|
||||
querySelector(selectors: "form"): HTMLFormElement | null;
|
||||
querySelector(selectors: "frame"): HTMLFrameElement | null;
|
||||
querySelector(selectors: "frameset"): HTMLFrameSetElement | null;
|
||||
querySelector(selectors: "g"): SVGGElement | null;
|
||||
querySelector(selectors: "h1"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h2"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h3"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h4"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h5"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h6"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "head"): HTMLHeadElement | null;
|
||||
querySelector(selectors: "header"): HTMLElement | null;
|
||||
querySelector(selectors: "hgroup"): HTMLElement | null;
|
||||
querySelector(selectors: "hr"): HTMLHRElement | null;
|
||||
querySelector(selectors: "html"): HTMLHtmlElement | null;
|
||||
querySelector(selectors: "i"): HTMLElement | null;
|
||||
querySelector(selectors: "iframe"): HTMLIFrameElement | null;
|
||||
querySelector(selectors: "image"): SVGImageElement | null;
|
||||
querySelector(selectors: "img"): HTMLImageElement | null;
|
||||
querySelector(selectors: "input"): HTMLInputElement | null;
|
||||
querySelector(selectors: "ins"): HTMLModElement | null;
|
||||
querySelector(selectors: "isindex"): HTMLUnknownElement | null;
|
||||
querySelector(selectors: "kbd"): HTMLElement | null;
|
||||
querySelector(selectors: "keygen"): HTMLElement | null;
|
||||
querySelector(selectors: "label"): HTMLLabelElement | null;
|
||||
querySelector(selectors: "legend"): HTMLLegendElement | null;
|
||||
querySelector(selectors: "li"): HTMLLIElement | null;
|
||||
querySelector(selectors: "line"): SVGLineElement | null;
|
||||
querySelector(selectors: "lineargradient"): SVGLinearGradientElement | null;
|
||||
querySelector(selectors: "link"): HTMLLinkElement | null;
|
||||
querySelector(selectors: "listing"): HTMLPreElement | null;
|
||||
querySelector(selectors: "map"): HTMLMapElement | null;
|
||||
querySelector(selectors: "mark"): HTMLElement | null;
|
||||
querySelector(selectors: "marker"): SVGMarkerElement | null;
|
||||
querySelector(selectors: "marquee"): HTMLMarqueeElement | null;
|
||||
querySelector(selectors: "mask"): SVGMaskElement | null;
|
||||
querySelector(selectors: "menu"): HTMLMenuElement | null;
|
||||
querySelector(selectors: "meta"): HTMLMetaElement | null;
|
||||
querySelector(selectors: "metadata"): SVGMetadataElement | null;
|
||||
querySelector(selectors: "meter"): HTMLMeterElement | null;
|
||||
querySelector(selectors: "nav"): HTMLElement | null;
|
||||
querySelector(selectors: "nextid"): HTMLUnknownElement | null;
|
||||
querySelector(selectors: "nobr"): HTMLElement | null;
|
||||
querySelector(selectors: "noframes"): HTMLElement | null;
|
||||
querySelector(selectors: "noscript"): HTMLElement | null;
|
||||
querySelector(selectors: "object"): HTMLObjectElement | null;
|
||||
querySelector(selectors: "ol"): HTMLOListElement | null;
|
||||
querySelector(selectors: "optgroup"): HTMLOptGroupElement | null;
|
||||
querySelector(selectors: "option"): HTMLOptionElement | null;
|
||||
querySelector(selectors: "p"): HTMLParagraphElement | null;
|
||||
querySelector(selectors: "param"): HTMLParamElement | null;
|
||||
querySelector(selectors: "path"): SVGPathElement | null;
|
||||
querySelector(selectors: "pattern"): SVGPatternElement | null;
|
||||
querySelector(selectors: "picture"): HTMLPictureElement | null;
|
||||
querySelector(selectors: "plaintext"): HTMLElement | null;
|
||||
querySelector(selectors: "polygon"): SVGPolygonElement | null;
|
||||
querySelector(selectors: "polyline"): SVGPolylineElement | null;
|
||||
querySelector(selectors: "pre"): HTMLPreElement | null;
|
||||
querySelector(selectors: "progress"): HTMLProgressElement | null;
|
||||
querySelector(selectors: "q"): HTMLQuoteElement | null;
|
||||
querySelector(selectors: "radialgradient"): SVGRadialGradientElement | null;
|
||||
querySelector(selectors: "rect"): SVGRectElement | null;
|
||||
querySelector(selectors: "rt"): HTMLElement | null;
|
||||
querySelector(selectors: "ruby"): HTMLElement | null;
|
||||
querySelector(selectors: "s"): HTMLElement | null;
|
||||
querySelector(selectors: "samp"): HTMLElement | null;
|
||||
querySelector(selectors: "script"): HTMLScriptElement | null;
|
||||
querySelector(selectors: "section"): HTMLElement | null;
|
||||
querySelector(selectors: "select"): HTMLSelectElement | null;
|
||||
querySelector(selectors: "small"): HTMLElement | null;
|
||||
querySelector(selectors: "source"): HTMLSourceElement | null;
|
||||
querySelector(selectors: "span"): HTMLSpanElement | null;
|
||||
querySelector(selectors: "stop"): SVGStopElement | null;
|
||||
querySelector(selectors: "strike"): HTMLElement | null;
|
||||
querySelector(selectors: "strong"): HTMLElement | null;
|
||||
querySelector(selectors: "style"): HTMLStyleElement | null;
|
||||
querySelector(selectors: "sub"): HTMLElement | null;
|
||||
querySelector(selectors: "sup"): HTMLElement | null;
|
||||
querySelector(selectors: "svg"): SVGSVGElement | null;
|
||||
querySelector(selectors: "switch"): SVGSwitchElement | null;
|
||||
querySelector(selectors: "symbol"): SVGSymbolElement | null;
|
||||
querySelector(selectors: "table"): HTMLTableElement | null;
|
||||
querySelector(selectors: "tbody"): HTMLTableSectionElement | null;
|
||||
querySelector(selectors: "td"): HTMLTableDataCellElement | null;
|
||||
querySelector(selectors: "template"): HTMLTemplateElement | null;
|
||||
querySelector(selectors: "text"): SVGTextElement | null;
|
||||
querySelector(selectors: "textpath"): SVGTextPathElement | null;
|
||||
querySelector(selectors: "textarea"): HTMLTextAreaElement | null;
|
||||
querySelector(selectors: "tfoot"): HTMLTableSectionElement | null;
|
||||
querySelector(selectors: "th"): HTMLTableHeaderCellElement | null;
|
||||
querySelector(selectors: "thead"): HTMLTableSectionElement | null;
|
||||
querySelector(selectors: "title"): HTMLTitleElement | null;
|
||||
querySelector(selectors: "tr"): HTMLTableRowElement | null;
|
||||
querySelector(selectors: "track"): HTMLTrackElement | null;
|
||||
querySelector(selectors: "tspan"): SVGTSpanElement | null;
|
||||
querySelector(selectors: "tt"): HTMLElement | null;
|
||||
querySelector(selectors: "u"): HTMLElement | null;
|
||||
querySelector(selectors: "ul"): HTMLUListElement | null;
|
||||
querySelector(selectors: "use"): SVGUseElement | null;
|
||||
querySelector(selectors: "var"): HTMLElement | null;
|
||||
querySelector(selectors: "video"): HTMLVideoElement | null;
|
||||
querySelector(selectors: "view"): SVGViewElement | null;
|
||||
querySelector(selectors: "wbr"): HTMLElement | null;
|
||||
querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement | null;
|
||||
querySelector(selectors: "xmp"): HTMLPreElement | null;
|
||||
querySelector(selectors: string): Element | null;
|
||||
querySelectorAll(selectors: "a"): NodeListOf<HTMLAnchorElement>;
|
||||
querySelectorAll(selectors: "abbr"): NodeListOf<HTMLElement>;
|
||||
querySelectorAll(selectors: "acronym"): NodeListOf<HTMLElement>;
|
||||
@@ -14638,4 +14638,5 @@ type ScrollBehavior = "auto" | "instant" | "smooth";
|
||||
type ScrollLogicalPosition = "start" | "center" | "end" | "nearest";
|
||||
type IDBValidKey = number | string | Date | IDBArrayKey;
|
||||
type BufferSource = ArrayBuffer | ArrayBufferView;
|
||||
type MouseWheelEvent = WheelEvent;
|
||||
type MouseWheelEvent = WheelEvent;
|
||||
type ScrollRestoration = "auto" | "manual";
|
||||
Vendored
+1
-1
@@ -217,7 +217,7 @@ interface NumberConstructor {
|
||||
|
||||
/**
|
||||
* Returns true if passed value is finite.
|
||||
* Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a
|
||||
* Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a
|
||||
* number. Only finite values of the type number, result in true.
|
||||
* @param number A numeric value.
|
||||
*/
|
||||
|
||||
Vendored
+27
@@ -260,6 +260,9 @@ interface Function {
|
||||
*/
|
||||
bind(this: Function, thisArg: any, ...argArray: any[]): any;
|
||||
|
||||
/** Returns a string representation of a function. */
|
||||
toString(): string;
|
||||
|
||||
prototype: any;
|
||||
readonly length: number;
|
||||
|
||||
@@ -1216,6 +1219,30 @@ interface Array<T> {
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
|
||||
Vendored
+218
-190
@@ -260,6 +260,9 @@ interface Function {
|
||||
*/
|
||||
bind(this: Function, thisArg: any, ...argArray: any[]): any;
|
||||
|
||||
/** Returns a string representation of a function. */
|
||||
toString(): string;
|
||||
|
||||
prototype: any;
|
||||
readonly length: number;
|
||||
|
||||
@@ -1216,6 +1219,30 @@ interface Array<T> {
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
|
||||
*/
|
||||
map<U>(this: [T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U];
|
||||
/**
|
||||
* Calls a defined callback function on each element of an array, and returns an array that contains the results.
|
||||
* @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.
|
||||
@@ -4325,7 +4352,7 @@ interface NumberConstructor {
|
||||
|
||||
/**
|
||||
* Returns true if passed value is finite.
|
||||
* Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a
|
||||
* Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a
|
||||
* number. Only finite values of the type number, result in true.
|
||||
* @param number A numeric value.
|
||||
*/
|
||||
@@ -13361,11 +13388,12 @@ declare var HashChangeEvent: {
|
||||
interface History {
|
||||
readonly length: number;
|
||||
readonly state: any;
|
||||
back(distance?: any): void;
|
||||
forward(distance?: any): void;
|
||||
go(delta?: any): void;
|
||||
pushState(statedata: any, title?: string, url?: string): void;
|
||||
replaceState(statedata: any, title?: string, url?: string): void;
|
||||
scrollRestoration: ScrollRestoration;
|
||||
back(): void;
|
||||
forward(): void;
|
||||
go(delta?: number): void;
|
||||
pushState(data: any, title: string, url?: string | null): void;
|
||||
replaceState(data: any, title: string, url?: string | null): void;
|
||||
}
|
||||
|
||||
declare var History: {
|
||||
@@ -18937,7 +18965,6 @@ interface Window extends EventTarget, WindowTimers, WindowSessionStorage, Window
|
||||
addEventListener(type: "waiting", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "wheel", listener: (this: this, ev: WheelEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
|
||||
[index: number]: Window;
|
||||
}
|
||||
|
||||
declare var Window: {
|
||||
@@ -18968,7 +18995,7 @@ declare var XMLDocument: {
|
||||
}
|
||||
|
||||
interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
|
||||
onreadystatechange: (this: this, ev: ProgressEvent) => any;
|
||||
onreadystatechange: (this: this, ev: Event) => any;
|
||||
readonly readyState: number;
|
||||
readonly response: any;
|
||||
readonly responseText: string;
|
||||
@@ -18995,13 +19022,13 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
|
||||
readonly LOADING: number;
|
||||
readonly OPENED: number;
|
||||
readonly UNSENT: number;
|
||||
addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "abort", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "error", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "load", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadstart", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "readystatechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
|
||||
}
|
||||
@@ -19342,183 +19369,183 @@ interface NavigatorUserMedia {
|
||||
}
|
||||
|
||||
interface NodeSelector {
|
||||
querySelector(selectors: "a"): HTMLAnchorElement;
|
||||
querySelector(selectors: "abbr"): HTMLElement;
|
||||
querySelector(selectors: "acronym"): HTMLElement;
|
||||
querySelector(selectors: "address"): HTMLElement;
|
||||
querySelector(selectors: "applet"): HTMLAppletElement;
|
||||
querySelector(selectors: "area"): HTMLAreaElement;
|
||||
querySelector(selectors: "article"): HTMLElement;
|
||||
querySelector(selectors: "aside"): HTMLElement;
|
||||
querySelector(selectors: "audio"): HTMLAudioElement;
|
||||
querySelector(selectors: "b"): HTMLElement;
|
||||
querySelector(selectors: "base"): HTMLBaseElement;
|
||||
querySelector(selectors: "basefont"): HTMLBaseFontElement;
|
||||
querySelector(selectors: "bdo"): HTMLElement;
|
||||
querySelector(selectors: "big"): HTMLElement;
|
||||
querySelector(selectors: "blockquote"): HTMLQuoteElement;
|
||||
querySelector(selectors: "body"): HTMLBodyElement;
|
||||
querySelector(selectors: "br"): HTMLBRElement;
|
||||
querySelector(selectors: "button"): HTMLButtonElement;
|
||||
querySelector(selectors: "canvas"): HTMLCanvasElement;
|
||||
querySelector(selectors: "caption"): HTMLTableCaptionElement;
|
||||
querySelector(selectors: "center"): HTMLElement;
|
||||
querySelector(selectors: "circle"): SVGCircleElement;
|
||||
querySelector(selectors: "cite"): HTMLElement;
|
||||
querySelector(selectors: "clippath"): SVGClipPathElement;
|
||||
querySelector(selectors: "code"): HTMLElement;
|
||||
querySelector(selectors: "col"): HTMLTableColElement;
|
||||
querySelector(selectors: "colgroup"): HTMLTableColElement;
|
||||
querySelector(selectors: "datalist"): HTMLDataListElement;
|
||||
querySelector(selectors: "dd"): HTMLElement;
|
||||
querySelector(selectors: "defs"): SVGDefsElement;
|
||||
querySelector(selectors: "del"): HTMLModElement;
|
||||
querySelector(selectors: "desc"): SVGDescElement;
|
||||
querySelector(selectors: "dfn"): HTMLElement;
|
||||
querySelector(selectors: "dir"): HTMLDirectoryElement;
|
||||
querySelector(selectors: "div"): HTMLDivElement;
|
||||
querySelector(selectors: "dl"): HTMLDListElement;
|
||||
querySelector(selectors: "dt"): HTMLElement;
|
||||
querySelector(selectors: "ellipse"): SVGEllipseElement;
|
||||
querySelector(selectors: "em"): HTMLElement;
|
||||
querySelector(selectors: "embed"): HTMLEmbedElement;
|
||||
querySelector(selectors: "feblend"): SVGFEBlendElement;
|
||||
querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement;
|
||||
querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement;
|
||||
querySelector(selectors: "fecomposite"): SVGFECompositeElement;
|
||||
querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement;
|
||||
querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement;
|
||||
querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement;
|
||||
querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement;
|
||||
querySelector(selectors: "feflood"): SVGFEFloodElement;
|
||||
querySelector(selectors: "fefunca"): SVGFEFuncAElement;
|
||||
querySelector(selectors: "fefuncb"): SVGFEFuncBElement;
|
||||
querySelector(selectors: "fefuncg"): SVGFEFuncGElement;
|
||||
querySelector(selectors: "fefuncr"): SVGFEFuncRElement;
|
||||
querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement;
|
||||
querySelector(selectors: "feimage"): SVGFEImageElement;
|
||||
querySelector(selectors: "femerge"): SVGFEMergeElement;
|
||||
querySelector(selectors: "femergenode"): SVGFEMergeNodeElement;
|
||||
querySelector(selectors: "femorphology"): SVGFEMorphologyElement;
|
||||
querySelector(selectors: "feoffset"): SVGFEOffsetElement;
|
||||
querySelector(selectors: "fepointlight"): SVGFEPointLightElement;
|
||||
querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement;
|
||||
querySelector(selectors: "fespotlight"): SVGFESpotLightElement;
|
||||
querySelector(selectors: "fetile"): SVGFETileElement;
|
||||
querySelector(selectors: "feturbulence"): SVGFETurbulenceElement;
|
||||
querySelector(selectors: "fieldset"): HTMLFieldSetElement;
|
||||
querySelector(selectors: "figcaption"): HTMLElement;
|
||||
querySelector(selectors: "figure"): HTMLElement;
|
||||
querySelector(selectors: "filter"): SVGFilterElement;
|
||||
querySelector(selectors: "font"): HTMLFontElement;
|
||||
querySelector(selectors: "footer"): HTMLElement;
|
||||
querySelector(selectors: "foreignobject"): SVGForeignObjectElement;
|
||||
querySelector(selectors: "form"): HTMLFormElement;
|
||||
querySelector(selectors: "frame"): HTMLFrameElement;
|
||||
querySelector(selectors: "frameset"): HTMLFrameSetElement;
|
||||
querySelector(selectors: "g"): SVGGElement;
|
||||
querySelector(selectors: "h1"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h2"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h3"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h4"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h5"): HTMLHeadingElement;
|
||||
querySelector(selectors: "h6"): HTMLHeadingElement;
|
||||
querySelector(selectors: "head"): HTMLHeadElement;
|
||||
querySelector(selectors: "header"): HTMLElement;
|
||||
querySelector(selectors: "hgroup"): HTMLElement;
|
||||
querySelector(selectors: "hr"): HTMLHRElement;
|
||||
querySelector(selectors: "html"): HTMLHtmlElement;
|
||||
querySelector(selectors: "i"): HTMLElement;
|
||||
querySelector(selectors: "iframe"): HTMLIFrameElement;
|
||||
querySelector(selectors: "image"): SVGImageElement;
|
||||
querySelector(selectors: "img"): HTMLImageElement;
|
||||
querySelector(selectors: "input"): HTMLInputElement;
|
||||
querySelector(selectors: "ins"): HTMLModElement;
|
||||
querySelector(selectors: "isindex"): HTMLUnknownElement;
|
||||
querySelector(selectors: "kbd"): HTMLElement;
|
||||
querySelector(selectors: "keygen"): HTMLElement;
|
||||
querySelector(selectors: "label"): HTMLLabelElement;
|
||||
querySelector(selectors: "legend"): HTMLLegendElement;
|
||||
querySelector(selectors: "li"): HTMLLIElement;
|
||||
querySelector(selectors: "line"): SVGLineElement;
|
||||
querySelector(selectors: "lineargradient"): SVGLinearGradientElement;
|
||||
querySelector(selectors: "link"): HTMLLinkElement;
|
||||
querySelector(selectors: "listing"): HTMLPreElement;
|
||||
querySelector(selectors: "map"): HTMLMapElement;
|
||||
querySelector(selectors: "mark"): HTMLElement;
|
||||
querySelector(selectors: "marker"): SVGMarkerElement;
|
||||
querySelector(selectors: "marquee"): HTMLMarqueeElement;
|
||||
querySelector(selectors: "mask"): SVGMaskElement;
|
||||
querySelector(selectors: "menu"): HTMLMenuElement;
|
||||
querySelector(selectors: "meta"): HTMLMetaElement;
|
||||
querySelector(selectors: "metadata"): SVGMetadataElement;
|
||||
querySelector(selectors: "meter"): HTMLMeterElement;
|
||||
querySelector(selectors: "nav"): HTMLElement;
|
||||
querySelector(selectors: "nextid"): HTMLUnknownElement;
|
||||
querySelector(selectors: "nobr"): HTMLElement;
|
||||
querySelector(selectors: "noframes"): HTMLElement;
|
||||
querySelector(selectors: "noscript"): HTMLElement;
|
||||
querySelector(selectors: "object"): HTMLObjectElement;
|
||||
querySelector(selectors: "ol"): HTMLOListElement;
|
||||
querySelector(selectors: "optgroup"): HTMLOptGroupElement;
|
||||
querySelector(selectors: "option"): HTMLOptionElement;
|
||||
querySelector(selectors: "p"): HTMLParagraphElement;
|
||||
querySelector(selectors: "param"): HTMLParamElement;
|
||||
querySelector(selectors: "path"): SVGPathElement;
|
||||
querySelector(selectors: "pattern"): SVGPatternElement;
|
||||
querySelector(selectors: "picture"): HTMLPictureElement;
|
||||
querySelector(selectors: "plaintext"): HTMLElement;
|
||||
querySelector(selectors: "polygon"): SVGPolygonElement;
|
||||
querySelector(selectors: "polyline"): SVGPolylineElement;
|
||||
querySelector(selectors: "pre"): HTMLPreElement;
|
||||
querySelector(selectors: "progress"): HTMLProgressElement;
|
||||
querySelector(selectors: "q"): HTMLQuoteElement;
|
||||
querySelector(selectors: "radialgradient"): SVGRadialGradientElement;
|
||||
querySelector(selectors: "rect"): SVGRectElement;
|
||||
querySelector(selectors: "rt"): HTMLElement;
|
||||
querySelector(selectors: "ruby"): HTMLElement;
|
||||
querySelector(selectors: "s"): HTMLElement;
|
||||
querySelector(selectors: "samp"): HTMLElement;
|
||||
querySelector(selectors: "script"): HTMLScriptElement;
|
||||
querySelector(selectors: "section"): HTMLElement;
|
||||
querySelector(selectors: "select"): HTMLSelectElement;
|
||||
querySelector(selectors: "small"): HTMLElement;
|
||||
querySelector(selectors: "source"): HTMLSourceElement;
|
||||
querySelector(selectors: "span"): HTMLSpanElement;
|
||||
querySelector(selectors: "stop"): SVGStopElement;
|
||||
querySelector(selectors: "strike"): HTMLElement;
|
||||
querySelector(selectors: "strong"): HTMLElement;
|
||||
querySelector(selectors: "style"): HTMLStyleElement;
|
||||
querySelector(selectors: "sub"): HTMLElement;
|
||||
querySelector(selectors: "sup"): HTMLElement;
|
||||
querySelector(selectors: "svg"): SVGSVGElement;
|
||||
querySelector(selectors: "switch"): SVGSwitchElement;
|
||||
querySelector(selectors: "symbol"): SVGSymbolElement;
|
||||
querySelector(selectors: "table"): HTMLTableElement;
|
||||
querySelector(selectors: "tbody"): HTMLTableSectionElement;
|
||||
querySelector(selectors: "td"): HTMLTableDataCellElement;
|
||||
querySelector(selectors: "template"): HTMLTemplateElement;
|
||||
querySelector(selectors: "text"): SVGTextElement;
|
||||
querySelector(selectors: "textpath"): SVGTextPathElement;
|
||||
querySelector(selectors: "textarea"): HTMLTextAreaElement;
|
||||
querySelector(selectors: "tfoot"): HTMLTableSectionElement;
|
||||
querySelector(selectors: "th"): HTMLTableHeaderCellElement;
|
||||
querySelector(selectors: "thead"): HTMLTableSectionElement;
|
||||
querySelector(selectors: "title"): HTMLTitleElement;
|
||||
querySelector(selectors: "tr"): HTMLTableRowElement;
|
||||
querySelector(selectors: "track"): HTMLTrackElement;
|
||||
querySelector(selectors: "tspan"): SVGTSpanElement;
|
||||
querySelector(selectors: "tt"): HTMLElement;
|
||||
querySelector(selectors: "u"): HTMLElement;
|
||||
querySelector(selectors: "ul"): HTMLUListElement;
|
||||
querySelector(selectors: "use"): SVGUseElement;
|
||||
querySelector(selectors: "var"): HTMLElement;
|
||||
querySelector(selectors: "video"): HTMLVideoElement;
|
||||
querySelector(selectors: "view"): SVGViewElement;
|
||||
querySelector(selectors: "wbr"): HTMLElement;
|
||||
querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement;
|
||||
querySelector(selectors: "xmp"): HTMLPreElement;
|
||||
querySelector(selectors: string): Element;
|
||||
querySelector(selectors: "a"): HTMLAnchorElement | null;
|
||||
querySelector(selectors: "abbr"): HTMLElement | null;
|
||||
querySelector(selectors: "acronym"): HTMLElement | null;
|
||||
querySelector(selectors: "address"): HTMLElement | null;
|
||||
querySelector(selectors: "applet"): HTMLAppletElement | null;
|
||||
querySelector(selectors: "area"): HTMLAreaElement | null;
|
||||
querySelector(selectors: "article"): HTMLElement | null;
|
||||
querySelector(selectors: "aside"): HTMLElement | null;
|
||||
querySelector(selectors: "audio"): HTMLAudioElement | null;
|
||||
querySelector(selectors: "b"): HTMLElement | null;
|
||||
querySelector(selectors: "base"): HTMLBaseElement | null;
|
||||
querySelector(selectors: "basefont"): HTMLBaseFontElement | null;
|
||||
querySelector(selectors: "bdo"): HTMLElement | null;
|
||||
querySelector(selectors: "big"): HTMLElement | null;
|
||||
querySelector(selectors: "blockquote"): HTMLQuoteElement | null;
|
||||
querySelector(selectors: "body"): HTMLBodyElement | null;
|
||||
querySelector(selectors: "br"): HTMLBRElement | null;
|
||||
querySelector(selectors: "button"): HTMLButtonElement | null;
|
||||
querySelector(selectors: "canvas"): HTMLCanvasElement | null;
|
||||
querySelector(selectors: "caption"): HTMLTableCaptionElement | null;
|
||||
querySelector(selectors: "center"): HTMLElement | null;
|
||||
querySelector(selectors: "circle"): SVGCircleElement | null;
|
||||
querySelector(selectors: "cite"): HTMLElement | null;
|
||||
querySelector(selectors: "clippath"): SVGClipPathElement | null;
|
||||
querySelector(selectors: "code"): HTMLElement | null;
|
||||
querySelector(selectors: "col"): HTMLTableColElement | null;
|
||||
querySelector(selectors: "colgroup"): HTMLTableColElement | null;
|
||||
querySelector(selectors: "datalist"): HTMLDataListElement | null;
|
||||
querySelector(selectors: "dd"): HTMLElement | null;
|
||||
querySelector(selectors: "defs"): SVGDefsElement | null;
|
||||
querySelector(selectors: "del"): HTMLModElement | null;
|
||||
querySelector(selectors: "desc"): SVGDescElement | null;
|
||||
querySelector(selectors: "dfn"): HTMLElement | null;
|
||||
querySelector(selectors: "dir"): HTMLDirectoryElement | null;
|
||||
querySelector(selectors: "div"): HTMLDivElement | null;
|
||||
querySelector(selectors: "dl"): HTMLDListElement | null;
|
||||
querySelector(selectors: "dt"): HTMLElement | null;
|
||||
querySelector(selectors: "ellipse"): SVGEllipseElement | null;
|
||||
querySelector(selectors: "em"): HTMLElement | null;
|
||||
querySelector(selectors: "embed"): HTMLEmbedElement | null;
|
||||
querySelector(selectors: "feblend"): SVGFEBlendElement | null;
|
||||
querySelector(selectors: "fecolormatrix"): SVGFEColorMatrixElement | null;
|
||||
querySelector(selectors: "fecomponenttransfer"): SVGFEComponentTransferElement | null;
|
||||
querySelector(selectors: "fecomposite"): SVGFECompositeElement | null;
|
||||
querySelector(selectors: "feconvolvematrix"): SVGFEConvolveMatrixElement | null;
|
||||
querySelector(selectors: "fediffuselighting"): SVGFEDiffuseLightingElement | null;
|
||||
querySelector(selectors: "fedisplacementmap"): SVGFEDisplacementMapElement | null;
|
||||
querySelector(selectors: "fedistantlight"): SVGFEDistantLightElement | null;
|
||||
querySelector(selectors: "feflood"): SVGFEFloodElement | null;
|
||||
querySelector(selectors: "fefunca"): SVGFEFuncAElement | null;
|
||||
querySelector(selectors: "fefuncb"): SVGFEFuncBElement | null;
|
||||
querySelector(selectors: "fefuncg"): SVGFEFuncGElement | null;
|
||||
querySelector(selectors: "fefuncr"): SVGFEFuncRElement | null;
|
||||
querySelector(selectors: "fegaussianblur"): SVGFEGaussianBlurElement | null;
|
||||
querySelector(selectors: "feimage"): SVGFEImageElement | null;
|
||||
querySelector(selectors: "femerge"): SVGFEMergeElement | null;
|
||||
querySelector(selectors: "femergenode"): SVGFEMergeNodeElement | null;
|
||||
querySelector(selectors: "femorphology"): SVGFEMorphologyElement | null;
|
||||
querySelector(selectors: "feoffset"): SVGFEOffsetElement | null;
|
||||
querySelector(selectors: "fepointlight"): SVGFEPointLightElement | null;
|
||||
querySelector(selectors: "fespecularlighting"): SVGFESpecularLightingElement | null;
|
||||
querySelector(selectors: "fespotlight"): SVGFESpotLightElement | null;
|
||||
querySelector(selectors: "fetile"): SVGFETileElement | null;
|
||||
querySelector(selectors: "feturbulence"): SVGFETurbulenceElement | null;
|
||||
querySelector(selectors: "fieldset"): HTMLFieldSetElement | null;
|
||||
querySelector(selectors: "figcaption"): HTMLElement | null;
|
||||
querySelector(selectors: "figure"): HTMLElement | null;
|
||||
querySelector(selectors: "filter"): SVGFilterElement | null;
|
||||
querySelector(selectors: "font"): HTMLFontElement | null;
|
||||
querySelector(selectors: "footer"): HTMLElement | null;
|
||||
querySelector(selectors: "foreignobject"): SVGForeignObjectElement | null;
|
||||
querySelector(selectors: "form"): HTMLFormElement | null;
|
||||
querySelector(selectors: "frame"): HTMLFrameElement | null;
|
||||
querySelector(selectors: "frameset"): HTMLFrameSetElement | null;
|
||||
querySelector(selectors: "g"): SVGGElement | null;
|
||||
querySelector(selectors: "h1"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h2"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h3"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h4"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h5"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "h6"): HTMLHeadingElement | null;
|
||||
querySelector(selectors: "head"): HTMLHeadElement | null;
|
||||
querySelector(selectors: "header"): HTMLElement | null;
|
||||
querySelector(selectors: "hgroup"): HTMLElement | null;
|
||||
querySelector(selectors: "hr"): HTMLHRElement | null;
|
||||
querySelector(selectors: "html"): HTMLHtmlElement | null;
|
||||
querySelector(selectors: "i"): HTMLElement | null;
|
||||
querySelector(selectors: "iframe"): HTMLIFrameElement | null;
|
||||
querySelector(selectors: "image"): SVGImageElement | null;
|
||||
querySelector(selectors: "img"): HTMLImageElement | null;
|
||||
querySelector(selectors: "input"): HTMLInputElement | null;
|
||||
querySelector(selectors: "ins"): HTMLModElement | null;
|
||||
querySelector(selectors: "isindex"): HTMLUnknownElement | null;
|
||||
querySelector(selectors: "kbd"): HTMLElement | null;
|
||||
querySelector(selectors: "keygen"): HTMLElement | null;
|
||||
querySelector(selectors: "label"): HTMLLabelElement | null;
|
||||
querySelector(selectors: "legend"): HTMLLegendElement | null;
|
||||
querySelector(selectors: "li"): HTMLLIElement | null;
|
||||
querySelector(selectors: "line"): SVGLineElement | null;
|
||||
querySelector(selectors: "lineargradient"): SVGLinearGradientElement | null;
|
||||
querySelector(selectors: "link"): HTMLLinkElement | null;
|
||||
querySelector(selectors: "listing"): HTMLPreElement | null;
|
||||
querySelector(selectors: "map"): HTMLMapElement | null;
|
||||
querySelector(selectors: "mark"): HTMLElement | null;
|
||||
querySelector(selectors: "marker"): SVGMarkerElement | null;
|
||||
querySelector(selectors: "marquee"): HTMLMarqueeElement | null;
|
||||
querySelector(selectors: "mask"): SVGMaskElement | null;
|
||||
querySelector(selectors: "menu"): HTMLMenuElement | null;
|
||||
querySelector(selectors: "meta"): HTMLMetaElement | null;
|
||||
querySelector(selectors: "metadata"): SVGMetadataElement | null;
|
||||
querySelector(selectors: "meter"): HTMLMeterElement | null;
|
||||
querySelector(selectors: "nav"): HTMLElement | null;
|
||||
querySelector(selectors: "nextid"): HTMLUnknownElement | null;
|
||||
querySelector(selectors: "nobr"): HTMLElement | null;
|
||||
querySelector(selectors: "noframes"): HTMLElement | null;
|
||||
querySelector(selectors: "noscript"): HTMLElement | null;
|
||||
querySelector(selectors: "object"): HTMLObjectElement | null;
|
||||
querySelector(selectors: "ol"): HTMLOListElement | null;
|
||||
querySelector(selectors: "optgroup"): HTMLOptGroupElement | null;
|
||||
querySelector(selectors: "option"): HTMLOptionElement | null;
|
||||
querySelector(selectors: "p"): HTMLParagraphElement | null;
|
||||
querySelector(selectors: "param"): HTMLParamElement | null;
|
||||
querySelector(selectors: "path"): SVGPathElement | null;
|
||||
querySelector(selectors: "pattern"): SVGPatternElement | null;
|
||||
querySelector(selectors: "picture"): HTMLPictureElement | null;
|
||||
querySelector(selectors: "plaintext"): HTMLElement | null;
|
||||
querySelector(selectors: "polygon"): SVGPolygonElement | null;
|
||||
querySelector(selectors: "polyline"): SVGPolylineElement | null;
|
||||
querySelector(selectors: "pre"): HTMLPreElement | null;
|
||||
querySelector(selectors: "progress"): HTMLProgressElement | null;
|
||||
querySelector(selectors: "q"): HTMLQuoteElement | null;
|
||||
querySelector(selectors: "radialgradient"): SVGRadialGradientElement | null;
|
||||
querySelector(selectors: "rect"): SVGRectElement | null;
|
||||
querySelector(selectors: "rt"): HTMLElement | null;
|
||||
querySelector(selectors: "ruby"): HTMLElement | null;
|
||||
querySelector(selectors: "s"): HTMLElement | null;
|
||||
querySelector(selectors: "samp"): HTMLElement | null;
|
||||
querySelector(selectors: "script"): HTMLScriptElement | null;
|
||||
querySelector(selectors: "section"): HTMLElement | null;
|
||||
querySelector(selectors: "select"): HTMLSelectElement | null;
|
||||
querySelector(selectors: "small"): HTMLElement | null;
|
||||
querySelector(selectors: "source"): HTMLSourceElement | null;
|
||||
querySelector(selectors: "span"): HTMLSpanElement | null;
|
||||
querySelector(selectors: "stop"): SVGStopElement | null;
|
||||
querySelector(selectors: "strike"): HTMLElement | null;
|
||||
querySelector(selectors: "strong"): HTMLElement | null;
|
||||
querySelector(selectors: "style"): HTMLStyleElement | null;
|
||||
querySelector(selectors: "sub"): HTMLElement | null;
|
||||
querySelector(selectors: "sup"): HTMLElement | null;
|
||||
querySelector(selectors: "svg"): SVGSVGElement | null;
|
||||
querySelector(selectors: "switch"): SVGSwitchElement | null;
|
||||
querySelector(selectors: "symbol"): SVGSymbolElement | null;
|
||||
querySelector(selectors: "table"): HTMLTableElement | null;
|
||||
querySelector(selectors: "tbody"): HTMLTableSectionElement | null;
|
||||
querySelector(selectors: "td"): HTMLTableDataCellElement | null;
|
||||
querySelector(selectors: "template"): HTMLTemplateElement | null;
|
||||
querySelector(selectors: "text"): SVGTextElement | null;
|
||||
querySelector(selectors: "textpath"): SVGTextPathElement | null;
|
||||
querySelector(selectors: "textarea"): HTMLTextAreaElement | null;
|
||||
querySelector(selectors: "tfoot"): HTMLTableSectionElement | null;
|
||||
querySelector(selectors: "th"): HTMLTableHeaderCellElement | null;
|
||||
querySelector(selectors: "thead"): HTMLTableSectionElement | null;
|
||||
querySelector(selectors: "title"): HTMLTitleElement | null;
|
||||
querySelector(selectors: "tr"): HTMLTableRowElement | null;
|
||||
querySelector(selectors: "track"): HTMLTrackElement | null;
|
||||
querySelector(selectors: "tspan"): SVGTSpanElement | null;
|
||||
querySelector(selectors: "tt"): HTMLElement | null;
|
||||
querySelector(selectors: "u"): HTMLElement | null;
|
||||
querySelector(selectors: "ul"): HTMLUListElement | null;
|
||||
querySelector(selectors: "use"): SVGUseElement | null;
|
||||
querySelector(selectors: "var"): HTMLElement | null;
|
||||
querySelector(selectors: "video"): HTMLVideoElement | null;
|
||||
querySelector(selectors: "view"): SVGViewElement | null;
|
||||
querySelector(selectors: "wbr"): HTMLElement | null;
|
||||
querySelector(selectors: "x-ms-webview"): MSHTMLWebViewElement | null;
|
||||
querySelector(selectors: "xmp"): HTMLPreElement | null;
|
||||
querySelector(selectors: string): Element | null;
|
||||
querySelectorAll(selectors: "a"): NodeListOf<HTMLAnchorElement>;
|
||||
querySelectorAll(selectors: "abbr"): NodeListOf<HTMLElement>;
|
||||
querySelectorAll(selectors: "acronym"): NodeListOf<HTMLElement>;
|
||||
@@ -20448,6 +20475,7 @@ type ScrollLogicalPosition = "start" | "center" | "end" | "nearest";
|
||||
type IDBValidKey = number | string | Date | IDBArrayKey;
|
||||
type BufferSource = ArrayBuffer | ArrayBufferView;
|
||||
type MouseWheelEvent = WheelEvent;
|
||||
type ScrollRestoration = "auto" | "manual";
|
||||
/////////////////////////////
|
||||
/// WorkerGlobalScope APIs
|
||||
/////////////////////////////
|
||||
|
||||
Vendored
+6
-6
@@ -744,7 +744,7 @@ declare var Worker: {
|
||||
}
|
||||
|
||||
interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
|
||||
onreadystatechange: (this: this, ev: ProgressEvent) => any;
|
||||
onreadystatechange: (this: this, ev: Event) => any;
|
||||
readonly readyState: number;
|
||||
readonly response: any;
|
||||
readonly responseText: string;
|
||||
@@ -770,13 +770,13 @@ interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
|
||||
readonly LOADING: number;
|
||||
readonly OPENED: number;
|
||||
readonly UNSENT: number;
|
||||
addEventListener(type: "abort", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "error", listener: (this: this, ev: ErrorEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "load", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "abort", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "error", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "load", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadend", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadstart", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "loadstart", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "progress", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "readystatechange", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "readystatechange", listener: (this: this, ev: Event) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: "timeout", listener: (this: this, ev: ProgressEvent) => any, useCapture?: boolean): void;
|
||||
addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
|
||||
}
|
||||
|
||||
Vendored
+1848
File diff suppressed because it is too large
Load Diff
+1935
-1642
File diff suppressed because it is too large
Load Diff
+6230
-3896
File diff suppressed because it is too large
Load Diff
Vendored
+1851
-505
File diff suppressed because one or more lines are too long
+6082
-3879
File diff suppressed because it is too large
Load Diff
Vendored
+381
-99
File diff suppressed because it is too large
Load Diff
+2806
-2123
File diff suppressed because it is too large
Load Diff
Vendored
+381
-99
File diff suppressed because it is too large
Load Diff
+2806
-2123
File diff suppressed because it is too large
Load Diff
+257
-120
@@ -72,7 +72,6 @@ var ts;
|
||||
(function (ts) {
|
||||
ts.timestamp = typeof performance !== "undefined" && performance.now ? function () { return performance.now(); } : Date.now ? Date.now : function () { return +(new Date()); };
|
||||
})(ts || (ts = {}));
|
||||
var ts;
|
||||
(function (ts) {
|
||||
var performance;
|
||||
(function (performance) {
|
||||
@@ -790,6 +789,56 @@ var ts;
|
||||
};
|
||||
}
|
||||
ts.memoize = memoize;
|
||||
function chain(a, b, c, d, e) {
|
||||
if (e) {
|
||||
var args_2 = [];
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
args_2[i] = arguments[i];
|
||||
}
|
||||
return function (t) { return compose.apply(void 0, map(args_2, function (f) { return f(t); })); };
|
||||
}
|
||||
else if (d) {
|
||||
return function (t) { return compose(a(t), b(t), c(t), d(t)); };
|
||||
}
|
||||
else if (c) {
|
||||
return function (t) { return compose(a(t), b(t), c(t)); };
|
||||
}
|
||||
else if (b) {
|
||||
return function (t) { return compose(a(t), b(t)); };
|
||||
}
|
||||
else if (a) {
|
||||
return function (t) { return compose(a(t)); };
|
||||
}
|
||||
else {
|
||||
return function (t) { return function (u) { return u; }; };
|
||||
}
|
||||
}
|
||||
ts.chain = chain;
|
||||
function compose(a, b, c, d, e) {
|
||||
if (e) {
|
||||
var args_3 = [];
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
args_3[i] = arguments[i];
|
||||
}
|
||||
return function (t) { return reduceLeft(args_3, function (u, f) { return f(u); }, t); };
|
||||
}
|
||||
else if (d) {
|
||||
return function (t) { return d(c(b(a(t)))); };
|
||||
}
|
||||
else if (c) {
|
||||
return function (t) { return c(b(a(t))); };
|
||||
}
|
||||
else if (b) {
|
||||
return function (t) { return b(a(t)); };
|
||||
}
|
||||
else if (a) {
|
||||
return function (t) { return a(t); };
|
||||
}
|
||||
else {
|
||||
return function (t) { return t; };
|
||||
}
|
||||
}
|
||||
ts.compose = compose;
|
||||
function formatStringFromArgs(text, args, baseIndex) {
|
||||
baseIndex = baseIndex || 0;
|
||||
return text.replace(/{(\d+)}/g, function (match, index) { return args[+index + baseIndex]; });
|
||||
@@ -1537,7 +1586,6 @@ var ts;
|
||||
this.transformFlags = 0;
|
||||
this.parent = undefined;
|
||||
this.original = undefined;
|
||||
this.transformId = 0;
|
||||
}
|
||||
ts.objectAllocator = {
|
||||
getNodeConstructor: function () { return Node; },
|
||||
@@ -1550,9 +1598,9 @@ var ts;
|
||||
};
|
||||
var Debug;
|
||||
(function (Debug) {
|
||||
var currentAssertionLevel;
|
||||
Debug.currentAssertionLevel = 0;
|
||||
function shouldAssert(level) {
|
||||
return getCurrentAssertionLevel() >= level;
|
||||
return Debug.currentAssertionLevel >= level;
|
||||
}
|
||||
Debug.shouldAssert = shouldAssert;
|
||||
function assert(expression, message, verboseDebugInfo) {
|
||||
@@ -1570,30 +1618,7 @@ var ts;
|
||||
Debug.assert(false, message);
|
||||
}
|
||||
Debug.fail = fail;
|
||||
function getCurrentAssertionLevel() {
|
||||
if (currentAssertionLevel !== undefined) {
|
||||
return currentAssertionLevel;
|
||||
}
|
||||
if (ts.sys === undefined) {
|
||||
return 0;
|
||||
}
|
||||
var developmentMode = /^development$/i.test(getEnvironmentVariable("NODE_ENV"));
|
||||
currentAssertionLevel = developmentMode
|
||||
? 1
|
||||
: 0;
|
||||
return currentAssertionLevel;
|
||||
}
|
||||
})(Debug = ts.Debug || (ts.Debug = {}));
|
||||
function getEnvironmentVariable(name, host) {
|
||||
if (host && host.getEnvironmentVariable) {
|
||||
return host.getEnvironmentVariable(name);
|
||||
}
|
||||
if (ts.sys && ts.sys.getEnvironmentVariable) {
|
||||
return ts.sys.getEnvironmentVariable(name);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
ts.getEnvironmentVariable = getEnvironmentVariable;
|
||||
function orderedRemoveItemAt(array, index) {
|
||||
for (var i = index; i < array.length - 1; i++) {
|
||||
array[i] = array[i + 1];
|
||||
@@ -1624,6 +1649,60 @@ var ts;
|
||||
: (function (fileName) { return fileName.toLowerCase(); });
|
||||
}
|
||||
ts.createGetCanonicalFileName = createGetCanonicalFileName;
|
||||
function matchPatternOrExact(patternStrings, candidate) {
|
||||
var patterns = [];
|
||||
for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) {
|
||||
var patternString = patternStrings_1[_i];
|
||||
var pattern = tryParsePattern(patternString);
|
||||
if (pattern) {
|
||||
patterns.push(pattern);
|
||||
}
|
||||
else if (patternString === candidate) {
|
||||
return patternString;
|
||||
}
|
||||
}
|
||||
return findBestPatternMatch(patterns, function (_) { return _; }, candidate);
|
||||
}
|
||||
ts.matchPatternOrExact = matchPatternOrExact;
|
||||
function patternText(_a) {
|
||||
var prefix = _a.prefix, suffix = _a.suffix;
|
||||
return prefix + "*" + suffix;
|
||||
}
|
||||
ts.patternText = patternText;
|
||||
function matchedText(pattern, candidate) {
|
||||
Debug.assert(isPatternMatch(pattern, candidate));
|
||||
return candidate.substr(pattern.prefix.length, candidate.length - pattern.suffix.length);
|
||||
}
|
||||
ts.matchedText = matchedText;
|
||||
function findBestPatternMatch(values, getPattern, candidate) {
|
||||
var matchedValue = undefined;
|
||||
var longestMatchPrefixLength = -1;
|
||||
for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {
|
||||
var v = values_1[_i];
|
||||
var pattern = getPattern(v);
|
||||
if (isPatternMatch(pattern, candidate) && pattern.prefix.length > longestMatchPrefixLength) {
|
||||
longestMatchPrefixLength = pattern.prefix.length;
|
||||
matchedValue = v;
|
||||
}
|
||||
}
|
||||
return matchedValue;
|
||||
}
|
||||
ts.findBestPatternMatch = findBestPatternMatch;
|
||||
function isPatternMatch(_a, candidate) {
|
||||
var prefix = _a.prefix, suffix = _a.suffix;
|
||||
return candidate.length >= prefix.length + suffix.length &&
|
||||
startsWith(candidate, prefix) &&
|
||||
endsWith(candidate, suffix);
|
||||
}
|
||||
function tryParsePattern(pattern) {
|
||||
Debug.assert(hasZeroOrOneAsteriskCharacter(pattern));
|
||||
var indexOfStar = pattern.indexOf("*");
|
||||
return indexOfStar === -1 ? undefined : {
|
||||
prefix: pattern.substr(0, indexOfStar),
|
||||
suffix: pattern.substr(indexOfStar + 1)
|
||||
};
|
||||
}
|
||||
ts.tryParsePattern = tryParsePattern;
|
||||
function positionIsSynthesized(pos) {
|
||||
return !(pos >= 0);
|
||||
}
|
||||
@@ -1821,8 +1900,14 @@ var ts;
|
||||
function isNode4OrLater() {
|
||||
return parseInt(process.version.charAt(1)) >= 4;
|
||||
}
|
||||
function isFileSystemCaseSensitive() {
|
||||
if (platform === "win32" || platform === "win64") {
|
||||
return false;
|
||||
}
|
||||
return !fileExists(__filename.toUpperCase()) || !fileExists(__filename.toLowerCase());
|
||||
}
|
||||
var platform = _os.platform();
|
||||
var useCaseSensitiveFileNames = platform !== "win32" && platform !== "win64" && platform !== "darwin";
|
||||
var useCaseSensitiveFileNames = isFileSystemCaseSensitive();
|
||||
function readFile(fileName, encoding) {
|
||||
if (!fileExists(fileName)) {
|
||||
return undefined;
|
||||
@@ -1947,6 +2032,9 @@ var ts;
|
||||
},
|
||||
watchDirectory: function (directoryName, callback, recursive) {
|
||||
var options;
|
||||
if (!directoryExists(directoryName)) {
|
||||
return;
|
||||
}
|
||||
if (isNode4OrLater() && (process.platform === "win32" || process.platform === "darwin")) {
|
||||
options = { persistent: true, recursive: !!recursive };
|
||||
}
|
||||
@@ -2090,6 +2178,11 @@ var ts;
|
||||
}
|
||||
return sys;
|
||||
})();
|
||||
if (ts.sys && ts.sys.getEnvironmentVariable) {
|
||||
ts.Debug.currentAssertionLevel = /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV"))
|
||||
? 1
|
||||
: 0;
|
||||
}
|
||||
})(ts || (ts = {}));
|
||||
var ts;
|
||||
(function (ts) {
|
||||
@@ -2414,7 +2507,7 @@ var ts;
|
||||
The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: { code: 2407, category: ts.DiagnosticCategory.Error, key: "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_2407", message: "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter." },
|
||||
Setters_cannot_return_a_value: { code: 2408, category: ts.DiagnosticCategory.Error, key: "Setters_cannot_return_a_value_2408", message: "Setters cannot return a value." },
|
||||
Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: { code: 2409, category: ts.DiagnosticCategory.Error, key: "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", message: "Return type of constructor signature must be assignable to the instance type of the class" },
|
||||
All_symbols_within_a_with_block_will_be_resolved_to_any: { code: 2410, category: ts.DiagnosticCategory.Error, key: "All_symbols_within_a_with_block_will_be_resolved_to_any_2410", message: "All symbols within a 'with' block will be resolved to 'any'." },
|
||||
The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: { code: 2410, category: ts.DiagnosticCategory.Error, key: "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", message: "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'." },
|
||||
Property_0_of_type_1_is_not_assignable_to_string_index_type_2: { code: 2411, category: ts.DiagnosticCategory.Error, key: "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", message: "Property '{0}' of type '{1}' is not assignable to string index type '{2}'." },
|
||||
Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: { code: 2412, category: ts.DiagnosticCategory.Error, key: "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", message: "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'." },
|
||||
Numeric_index_type_0_is_not_assignable_to_string_index_type_1: { code: 2413, category: ts.DiagnosticCategory.Error, key: "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", message: "Numeric index type '{0}' is not assignable to string index type '{1}'." },
|
||||
@@ -2575,7 +2668,7 @@ var ts;
|
||||
this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: { code: 2683, category: ts.DiagnosticCategory.Error, key: "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", message: "'this' implicitly has type 'any' because it does not have a type annotation." },
|
||||
The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: { code: 2684, category: ts.DiagnosticCategory.Error, key: "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", message: "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'." },
|
||||
The_this_types_of_each_signature_are_incompatible: { code: 2685, category: ts.DiagnosticCategory.Error, key: "The_this_types_of_each_signature_are_incompatible_2685", message: "The 'this' types of each signature are incompatible." },
|
||||
Identifier_0_must_be_imported_from_a_module: { code: 2686, category: ts.DiagnosticCategory.Error, key: "Identifier_0_must_be_imported_from_a_module_2686", message: "Identifier '{0}' must be imported from a module" },
|
||||
_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead: { code: 2686, category: ts.DiagnosticCategory.Error, key: "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686", message: "'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead." },
|
||||
All_declarations_of_0_must_have_identical_modifiers: { code: 2687, category: ts.DiagnosticCategory.Error, key: "All_declarations_of_0_must_have_identical_modifiers_2687", message: "All declarations of '{0}' must have identical modifiers." },
|
||||
Cannot_find_type_definition_file_for_0: { code: 2688, category: ts.DiagnosticCategory.Error, key: "Cannot_find_type_definition_file_for_0_2688", message: "Cannot find type definition file for '{0}'." },
|
||||
Cannot_extend_an_interface_0_Did_you_mean_implements: { code: 2689, category: ts.DiagnosticCategory.Error, key: "Cannot_extend_an_interface_0_Did_you_mean_implements_2689", message: "Cannot extend an interface '{0}'. Did you mean 'implements'?" },
|
||||
@@ -2809,6 +2902,7 @@ var ts;
|
||||
Property_0_is_declared_but_never_used: { code: 6138, category: ts.DiagnosticCategory.Error, key: "Property_0_is_declared_but_never_used_6138", message: "Property '{0}' is declared but never used." },
|
||||
Import_emit_helpers_from_tslib: { code: 6139, category: ts.DiagnosticCategory.Message, key: "Import_emit_helpers_from_tslib_6139", message: "Import emit helpers from 'tslib'." },
|
||||
Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2: { code: 6140, category: ts.DiagnosticCategory.Error, key: "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140", message: "Auto discovery for typings is enabled in project '{0}'. Running extra resolution pass for module '{1}' using cache location '{2}'." },
|
||||
Parse_in_strict_mode_and_emit_use_strict_for_each_source_file: { code: 6141, category: ts.DiagnosticCategory.Message, key: "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141", message: "Parse in strict mode and emit \"use strict\" for each source file" },
|
||||
Variable_0_implicitly_has_an_1_type: { code: 7005, category: ts.DiagnosticCategory.Error, key: "Variable_0_implicitly_has_an_1_type_7005", message: "Variable '{0}' implicitly has an '{1}' type." },
|
||||
Parameter_0_implicitly_has_an_1_type: { code: 7006, category: ts.DiagnosticCategory.Error, key: "Parameter_0_implicitly_has_an_1_type_7006", message: "Parameter '{0}' implicitly has an '{1}' type." },
|
||||
Member_0_implicitly_has_an_1_type: { code: 7008, category: ts.DiagnosticCategory.Error, key: "Member_0_implicitly_has_an_1_type_7008", message: "Member '{0}' implicitly has an '{1}' type." },
|
||||
@@ -2833,6 +2927,7 @@ var ts;
|
||||
Binding_element_0_implicitly_has_an_1_type: { code: 7031, category: ts.DiagnosticCategory.Error, key: "Binding_element_0_implicitly_has_an_1_type_7031", message: "Binding element '{0}' implicitly has an '{1}' type." },
|
||||
Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation: { code: 7032, category: ts.DiagnosticCategory.Error, key: "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032", message: "Property '{0}' implicitly has type 'any', because its set accessor lacks a parameter type annotation." },
|
||||
Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation: { code: 7033, category: ts.DiagnosticCategory.Error, key: "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033", message: "Property '{0}' implicitly has type 'any', because its get accessor lacks a return type annotation." },
|
||||
Variable_0_implicitly_has_type_any_in_some_locations_where_its_type_cannot_be_determined: { code: 7034, category: ts.DiagnosticCategory.Error, key: "Variable_0_implicitly_has_type_any_in_some_locations_where_its_type_cannot_be_determined_7034", message: "Variable '{0}' implicitly has type 'any' in some locations where its type cannot be determined." },
|
||||
You_cannot_rename_this_element: { code: 8000, category: ts.DiagnosticCategory.Error, key: "You_cannot_rename_this_element_8000", message: "You cannot rename this element." },
|
||||
You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: { code: 8001, category: ts.DiagnosticCategory.Error, key: "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001", message: "You cannot rename elements that are defined in the standard TypeScript library." },
|
||||
import_can_only_be_used_in_a_ts_file: { code: 8002, category: ts.DiagnosticCategory.Error, key: "import_can_only_be_used_in_a_ts_file_8002", message: "'import ... =' can only be used in a .ts file." },
|
||||
@@ -2862,7 +2957,14 @@ var ts;
|
||||
super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class: { code: 17009, category: ts.DiagnosticCategory.Error, key: "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009", message: "'super' must be called before accessing 'this' in the constructor of a derived class." },
|
||||
Unknown_typing_option_0: { code: 17010, category: ts.DiagnosticCategory.Error, key: "Unknown_typing_option_0_17010", message: "Unknown typing option '{0}'." },
|
||||
Circularity_detected_while_resolving_configuration_Colon_0: { code: 18000, category: ts.DiagnosticCategory.Error, key: "Circularity_detected_while_resolving_configuration_Colon_0_18000", message: "Circularity detected while resolving configuration: {0}" },
|
||||
The_path_in_an_extends_options_must_be_relative_or_rooted: { code: 18001, category: ts.DiagnosticCategory.Error, key: "The_path_in_an_extends_options_must_be_relative_or_rooted_18001", message: "The path in an 'extends' options must be relative or rooted." }
|
||||
The_path_in_an_extends_options_must_be_relative_or_rooted: { code: 18001, category: ts.DiagnosticCategory.Error, key: "The_path_in_an_extends_options_must_be_relative_or_rooted_18001", message: "The path in an 'extends' options must be relative or rooted." },
|
||||
Add_missing_super_call: { code: 90001, category: ts.DiagnosticCategory.Message, key: "Add_missing_super_call_90001", message: "Add missing 'super()' call." },
|
||||
Make_super_call_the_first_statement_in_the_constructor: { code: 90002, category: ts.DiagnosticCategory.Message, key: "Make_super_call_the_first_statement_in_the_constructor_90002", message: "Make 'super()' call the first statement in the constructor." },
|
||||
Change_extends_to_implements: { code: 90003, category: ts.DiagnosticCategory.Message, key: "Change_extends_to_implements_90003", message: "Change 'extends' to 'implements'" },
|
||||
Remove_unused_identifiers: { code: 90004, category: ts.DiagnosticCategory.Message, key: "Remove_unused_identifiers_90004", message: "Remove unused identifiers" },
|
||||
Implement_interface_on_reference: { code: 90005, category: ts.DiagnosticCategory.Message, key: "Implement_interface_on_reference_90005", message: "Implement interface on reference" },
|
||||
Implement_interface_on_class: { code: 90006, category: ts.DiagnosticCategory.Message, key: "Implement_interface_on_class_90006", message: "Implement interface on class" },
|
||||
Implement_inherited_abstract_class: { code: 90007, category: ts.DiagnosticCategory.Message, key: "Implement_inherited_abstract_class_90007", message: "Implement inherited abstract class" }
|
||||
};
|
||||
})(ts || (ts = {}));
|
||||
var ts;
|
||||
@@ -3772,7 +3874,7 @@ var ts;
|
||||
return token = 69;
|
||||
}
|
||||
function scanBinaryOrOctalDigits(base) {
|
||||
ts.Debug.assert(base !== 2 || base !== 8, "Expected either base 2 or base 8");
|
||||
ts.Debug.assert(base === 2 || base === 8, "Expected either base 2 or base 8");
|
||||
var value = 0;
|
||||
var numberOfDigits = 0;
|
||||
while (true) {
|
||||
@@ -4844,6 +4946,11 @@ var ts;
|
||||
name: "importHelpers",
|
||||
type: "boolean",
|
||||
description: ts.Diagnostics.Import_emit_helpers_from_tslib
|
||||
},
|
||||
{
|
||||
name: "alwaysStrict",
|
||||
type: "boolean",
|
||||
description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file
|
||||
}
|
||||
];
|
||||
ts.typingOptionDeclarations = [
|
||||
@@ -5294,7 +5401,7 @@ var ts;
|
||||
ts.convertTypingOptionsFromJson = convertTypingOptionsFromJson;
|
||||
function convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName) {
|
||||
var options = ts.getBaseFileName(configFileName) === "jsconfig.json"
|
||||
? { allowJs: true, maxNodeModuleJsDepth: 2, allowSyntheticDefaultImports: true }
|
||||
? { allowJs: true, maxNodeModuleJsDepth: 2, allowSyntheticDefaultImports: true, skipLibCheck: true }
|
||||
: {};
|
||||
convertOptionsFromJson(ts.optionDeclarations, jsonOptions, basePath, options, ts.Diagnostics.Unknown_compiler_option_0, errors);
|
||||
return options;
|
||||
@@ -5704,7 +5811,7 @@ var ts;
|
||||
else if (host.getCurrentDirectory) {
|
||||
currentDirectory = host.getCurrentDirectory();
|
||||
}
|
||||
return currentDirectory && getDefaultTypeRoots(currentDirectory, host);
|
||||
return currentDirectory !== undefined && getDefaultTypeRoots(currentDirectory, host);
|
||||
}
|
||||
ts.getEffectiveTypeRoots = getEffectiveTypeRoots;
|
||||
function getDefaultTypeRoots(currentDirectory, host) {
|
||||
@@ -5958,11 +6065,11 @@ var ts;
|
||||
if (state.traceEnabled) {
|
||||
trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName);
|
||||
}
|
||||
matchedPattern = matchPatternOrExact(ts.getOwnKeys(state.compilerOptions.paths), moduleName);
|
||||
matchedPattern = ts.matchPatternOrExact(ts.getOwnKeys(state.compilerOptions.paths), moduleName);
|
||||
}
|
||||
if (matchedPattern) {
|
||||
var matchedStar = typeof matchedPattern === "string" ? undefined : matchedText(matchedPattern, moduleName);
|
||||
var matchedPatternText = typeof matchedPattern === "string" ? matchedPattern : patternText(matchedPattern);
|
||||
var matchedStar = typeof matchedPattern === "string" ? undefined : ts.matchedText(matchedPattern, moduleName);
|
||||
var matchedPatternText = typeof matchedPattern === "string" ? matchedPattern : ts.patternText(matchedPattern);
|
||||
if (state.traceEnabled) {
|
||||
trace(state.host, ts.Diagnostics.Module_name_0_matched_pattern_1, moduleName, matchedPatternText);
|
||||
}
|
||||
@@ -5988,57 +6095,6 @@ var ts;
|
||||
return loader(candidate, supportedExtensions, failedLookupLocations, !directoryProbablyExists(ts.getDirectoryPath(candidate), state.host), state);
|
||||
}
|
||||
}
|
||||
function matchPatternOrExact(patternStrings, candidate) {
|
||||
var patterns = [];
|
||||
for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) {
|
||||
var patternString = patternStrings_1[_i];
|
||||
var pattern = tryParsePattern(patternString);
|
||||
if (pattern) {
|
||||
patterns.push(pattern);
|
||||
}
|
||||
else if (patternString === candidate) {
|
||||
return patternString;
|
||||
}
|
||||
}
|
||||
return findBestPatternMatch(patterns, function (_) { return _; }, candidate);
|
||||
}
|
||||
function patternText(_a) {
|
||||
var prefix = _a.prefix, suffix = _a.suffix;
|
||||
return prefix + "*" + suffix;
|
||||
}
|
||||
function matchedText(pattern, candidate) {
|
||||
ts.Debug.assert(isPatternMatch(pattern, candidate));
|
||||
return candidate.substr(pattern.prefix.length, candidate.length - pattern.suffix.length);
|
||||
}
|
||||
function findBestPatternMatch(values, getPattern, candidate) {
|
||||
var matchedValue = undefined;
|
||||
var longestMatchPrefixLength = -1;
|
||||
for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {
|
||||
var v = values_1[_i];
|
||||
var pattern = getPattern(v);
|
||||
if (isPatternMatch(pattern, candidate) && pattern.prefix.length > longestMatchPrefixLength) {
|
||||
longestMatchPrefixLength = pattern.prefix.length;
|
||||
matchedValue = v;
|
||||
}
|
||||
}
|
||||
return matchedValue;
|
||||
}
|
||||
ts.findBestPatternMatch = findBestPatternMatch;
|
||||
function isPatternMatch(_a, candidate) {
|
||||
var prefix = _a.prefix, suffix = _a.suffix;
|
||||
return candidate.length >= prefix.length + suffix.length &&
|
||||
ts.startsWith(candidate, prefix) &&
|
||||
ts.endsWith(candidate, suffix);
|
||||
}
|
||||
function tryParsePattern(pattern) {
|
||||
ts.Debug.assert(ts.hasZeroOrOneAsteriskCharacter(pattern));
|
||||
var indexOfStar = pattern.indexOf("*");
|
||||
return indexOfStar === -1 ? undefined : {
|
||||
prefix: pattern.substr(0, indexOfStar),
|
||||
suffix: pattern.substr(indexOfStar + 1)
|
||||
};
|
||||
}
|
||||
ts.tryParsePattern = tryParsePattern;
|
||||
function nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host) {
|
||||
var containingDirectory = ts.getDirectoryPath(containingFile);
|
||||
var supportedExtensions = ts.getSupportedExtensions(compilerOptions);
|
||||
@@ -6169,20 +6225,28 @@ var ts;
|
||||
}
|
||||
}
|
||||
function loadModuleFromNodeModules(moduleName, directory, failedLookupLocations, state, checkOneLevel) {
|
||||
return loadModuleFromNodeModulesWorker(moduleName, directory, failedLookupLocations, state, checkOneLevel, false);
|
||||
}
|
||||
ts.loadModuleFromNodeModules = loadModuleFromNodeModules;
|
||||
function loadModuleFromNodeModulesAtTypes(moduleName, directory, failedLookupLocations, state) {
|
||||
return loadModuleFromNodeModulesWorker(moduleName, directory, failedLookupLocations, state, false, true);
|
||||
}
|
||||
function loadModuleFromNodeModulesWorker(moduleName, directory, failedLookupLocations, state, checkOneLevel, typesOnly) {
|
||||
directory = ts.normalizeSlashes(directory);
|
||||
while (true) {
|
||||
var baseName = ts.getBaseFileName(directory);
|
||||
if (baseName !== "node_modules") {
|
||||
var packageResult = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state);
|
||||
if (packageResult && ts.hasTypeScriptFileExtension(packageResult)) {
|
||||
return packageResult;
|
||||
}
|
||||
else {
|
||||
var typesResult = loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state);
|
||||
if (typesResult || packageResult) {
|
||||
return typesResult || packageResult;
|
||||
var packageResult = void 0;
|
||||
if (!typesOnly) {
|
||||
packageResult = loadModuleFromNodeModulesFolder(moduleName, directory, failedLookupLocations, state);
|
||||
if (packageResult && ts.hasTypeScriptFileExtension(packageResult)) {
|
||||
return packageResult;
|
||||
}
|
||||
}
|
||||
var typesResult = loadModuleFromNodeModulesFolder(ts.combinePaths("@types", moduleName), directory, failedLookupLocations, state);
|
||||
if (typesResult || packageResult) {
|
||||
return typesResult || packageResult;
|
||||
}
|
||||
}
|
||||
var parentPath = ts.getDirectoryPath(directory);
|
||||
if (parentPath === directory || checkOneLevel) {
|
||||
@@ -6192,7 +6256,6 @@ var ts;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
ts.loadModuleFromNodeModules = loadModuleFromNodeModules;
|
||||
function classicNameResolver(moduleName, containingFile, compilerOptions, host) {
|
||||
var traceEnabled = isTraceEnabled(compilerOptions, host);
|
||||
var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled, skipTsx: !compilerOptions.jsx };
|
||||
@@ -6205,18 +6268,8 @@ var ts;
|
||||
}
|
||||
var referencedSourceFile;
|
||||
if (moduleHasNonRelativeName(moduleName)) {
|
||||
while (true) {
|
||||
var searchName = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName));
|
||||
referencedSourceFile = loadModuleFromFile(searchName, supportedExtensions, failedLookupLocations, false, state);
|
||||
if (referencedSourceFile) {
|
||||
break;
|
||||
}
|
||||
var parentPath = ts.getDirectoryPath(containingDirectory);
|
||||
if (parentPath === containingDirectory) {
|
||||
break;
|
||||
}
|
||||
containingDirectory = parentPath;
|
||||
}
|
||||
referencedSourceFile = referencedSourceFile = loadModuleFromAncestorDirectories(moduleName, containingDirectory, supportedExtensions, failedLookupLocations, state) ||
|
||||
loadModuleFromNodeModulesAtTypes(moduleName, containingDirectory, failedLookupLocations, state);
|
||||
}
|
||||
else {
|
||||
var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName));
|
||||
@@ -6227,6 +6280,20 @@ var ts;
|
||||
: { resolvedModule: undefined, failedLookupLocations: failedLookupLocations };
|
||||
}
|
||||
ts.classicNameResolver = classicNameResolver;
|
||||
function loadModuleFromAncestorDirectories(moduleName, containingDirectory, supportedExtensions, failedLookupLocations, state) {
|
||||
while (true) {
|
||||
var searchName = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName));
|
||||
var referencedSourceFile = loadModuleFromFile(searchName, supportedExtensions, failedLookupLocations, false, state);
|
||||
if (referencedSourceFile) {
|
||||
return referencedSourceFile;
|
||||
}
|
||||
var parentPath = ts.getDirectoryPath(containingDirectory);
|
||||
if (parentPath === containingDirectory) {
|
||||
return undefined;
|
||||
}
|
||||
containingDirectory = parentPath;
|
||||
}
|
||||
}
|
||||
})(ts || (ts = {}));
|
||||
var ts;
|
||||
(function (ts) {
|
||||
@@ -6242,6 +6309,36 @@ var ts;
|
||||
var result = ts.resolveModuleName(packageName, ts.combinePaths(cachePath, "index.d.ts"), { moduleResolution: ts.ModuleResolutionKind.NodeJs }, installTypingHost);
|
||||
return result.resolvedModule && result.resolvedModule.resolvedFileName;
|
||||
}
|
||||
(function (PackageNameValidationResult) {
|
||||
PackageNameValidationResult[PackageNameValidationResult["Ok"] = 0] = "Ok";
|
||||
PackageNameValidationResult[PackageNameValidationResult["ScopedPackagesNotSupported"] = 1] = "ScopedPackagesNotSupported";
|
||||
PackageNameValidationResult[PackageNameValidationResult["NameTooLong"] = 2] = "NameTooLong";
|
||||
PackageNameValidationResult[PackageNameValidationResult["NameStartsWithDot"] = 3] = "NameStartsWithDot";
|
||||
PackageNameValidationResult[PackageNameValidationResult["NameStartsWithUnderscore"] = 4] = "NameStartsWithUnderscore";
|
||||
PackageNameValidationResult[PackageNameValidationResult["NameContainsNonURISafeCharacters"] = 5] = "NameContainsNonURISafeCharacters";
|
||||
})(typingsInstaller.PackageNameValidationResult || (typingsInstaller.PackageNameValidationResult = {}));
|
||||
var PackageNameValidationResult = typingsInstaller.PackageNameValidationResult;
|
||||
typingsInstaller.MaxPackageNameLength = 214;
|
||||
function validatePackageName(packageName) {
|
||||
ts.Debug.assert(!!packageName, "Package name is not specified");
|
||||
if (packageName.length > typingsInstaller.MaxPackageNameLength) {
|
||||
return PackageNameValidationResult.NameTooLong;
|
||||
}
|
||||
if (packageName.charCodeAt(0) === 46) {
|
||||
return PackageNameValidationResult.NameStartsWithDot;
|
||||
}
|
||||
if (packageName.charCodeAt(0) === 95) {
|
||||
return PackageNameValidationResult.NameStartsWithUnderscore;
|
||||
}
|
||||
if (/^@[^/]+\/[^/]+$/.test(packageName)) {
|
||||
return PackageNameValidationResult.ScopedPackagesNotSupported;
|
||||
}
|
||||
if (encodeURIComponent(packageName) !== packageName) {
|
||||
return PackageNameValidationResult.NameContainsNonURISafeCharacters;
|
||||
}
|
||||
return PackageNameValidationResult.Ok;
|
||||
}
|
||||
typingsInstaller.validatePackageName = validatePackageName;
|
||||
typingsInstaller.NpmViewRequest = "npm view";
|
||||
typingsInstaller.NpmInstallRequest = "npm install";
|
||||
var TypingsInstaller = (function () {
|
||||
@@ -6364,15 +6461,54 @@ var ts;
|
||||
}
|
||||
this.knownCachesSet[cacheLocation] = true;
|
||||
};
|
||||
TypingsInstaller.prototype.filterTypings = function (typingsToInstall) {
|
||||
if (typingsToInstall.length === 0) {
|
||||
return typingsToInstall;
|
||||
}
|
||||
var result = [];
|
||||
for (var _i = 0, typingsToInstall_1 = typingsToInstall; _i < typingsToInstall_1.length; _i++) {
|
||||
var typing = typingsToInstall_1[_i];
|
||||
if (this.missingTypingsSet[typing]) {
|
||||
continue;
|
||||
}
|
||||
var validationResult = validatePackageName(typing);
|
||||
if (validationResult === PackageNameValidationResult.Ok) {
|
||||
result.push(typing);
|
||||
}
|
||||
else {
|
||||
this.missingTypingsSet[typing] = true;
|
||||
if (this.log.isEnabled()) {
|
||||
switch (validationResult) {
|
||||
case PackageNameValidationResult.NameTooLong:
|
||||
this.log.writeLine("Package name '" + typing + "' should be less than " + typingsInstaller.MaxPackageNameLength + " characters");
|
||||
break;
|
||||
case PackageNameValidationResult.NameStartsWithDot:
|
||||
this.log.writeLine("Package name '" + typing + "' cannot start with '.'");
|
||||
break;
|
||||
case PackageNameValidationResult.NameStartsWithUnderscore:
|
||||
this.log.writeLine("Package name '" + typing + "' cannot start with '_'");
|
||||
break;
|
||||
case PackageNameValidationResult.ScopedPackagesNotSupported:
|
||||
this.log.writeLine("Package '" + typing + "' is scoped and currently is not supported");
|
||||
break;
|
||||
case PackageNameValidationResult.NameContainsNonURISafeCharacters:
|
||||
this.log.writeLine("Package name '" + typing + "' contains non URI safe characters");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
TypingsInstaller.prototype.installTypings = function (req, cachePath, currentlyCachedTypings, typingsToInstall) {
|
||||
var _this = this;
|
||||
if (this.log.isEnabled()) {
|
||||
this.log.writeLine("Installing typings " + JSON.stringify(typingsToInstall));
|
||||
}
|
||||
typingsToInstall = ts.filter(typingsToInstall, function (x) { return !_this.missingTypingsSet[x]; });
|
||||
typingsToInstall = this.filterTypings(typingsToInstall);
|
||||
if (typingsToInstall.length === 0) {
|
||||
if (this.log.isEnabled()) {
|
||||
this.log.writeLine("All typings are known to be missing - no need to go any further");
|
||||
this.log.writeLine("All typings are known to be missing or invalid - no need to go any further");
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -6412,8 +6548,8 @@ var ts;
|
||||
if (_this.log.isEnabled()) {
|
||||
_this.log.writeLine("Installed typing files " + JSON.stringify(installedTypingFiles));
|
||||
}
|
||||
for (var _a = 0, typingsToInstall_1 = typingsToInstall; _a < typingsToInstall_1.length; _a++) {
|
||||
var toInstall = typingsToInstall_1[_a];
|
||||
for (var _a = 0, typingsToInstall_2 = typingsToInstall; _a < typingsToInstall_2.length; _a++) {
|
||||
var toInstall = typingsToInstall_2[_a];
|
||||
if (!installedPackages[toInstall]) {
|
||||
if (_this.log.isEnabled()) {
|
||||
_this.log.writeLine("New missing typing package '" + toInstall + "'");
|
||||
@@ -6429,8 +6565,8 @@ var ts;
|
||||
this.installRunCount++;
|
||||
var execInstallCmdCount = 0;
|
||||
var filteredTypings = [];
|
||||
for (var _i = 0, typingsToInstall_2 = typingsToInstall; _i < typingsToInstall_2.length; _i++) {
|
||||
var typing = typingsToInstall_2[_i];
|
||||
for (var _i = 0, typingsToInstall_3 = typingsToInstall; _i < typingsToInstall_3.length; _i++) {
|
||||
var typing = typingsToInstall_3[_i];
|
||||
execNpmViewTyping(this, typing);
|
||||
}
|
||||
function execNpmViewTyping(self, typing) {
|
||||
@@ -6553,13 +6689,14 @@ var ts;
|
||||
var NodeTypingsInstaller = (function (_super) {
|
||||
__extends(NodeTypingsInstaller, _super);
|
||||
function NodeTypingsInstaller(globalTypingsCacheLocation, throttleLimit, log) {
|
||||
_super.call(this, globalTypingsCacheLocation, getNPMLocation(process.argv[0]), ts.toPath("typingSafeList.json", __dirname, ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)), throttleLimit, log);
|
||||
this.installTypingHost = ts.sys;
|
||||
if (this.log.isEnabled()) {
|
||||
this.log.writeLine("Process id: " + process.pid);
|
||||
var _this = _super.call(this, globalTypingsCacheLocation, getNPMLocation(process.argv[0]), ts.toPath("typingSafeList.json", __dirname, ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)), throttleLimit, log) || this;
|
||||
_this.installTypingHost = ts.sys;
|
||||
if (_this.log.isEnabled()) {
|
||||
_this.log.writeLine("Process id: " + process.pid);
|
||||
}
|
||||
var exec = require("child_process").exec;
|
||||
this.exec = exec;
|
||||
_this.exec = exec;
|
||||
return _this;
|
||||
}
|
||||
NodeTypingsInstaller.prototype.init = function () {
|
||||
var _this = this;
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
/// <reference types="node"/>
|
||||
|
||||
import * as ts from "../lib/typescript";
|
||||
import * as path from "path";
|
||||
|
||||
function endsWith(s: string, suffix: string) {
|
||||
return s.lastIndexOf(suffix, s.length - suffix.length) !== -1;
|
||||
}
|
||||
|
||||
class DeclarationsWalker {
|
||||
private visitedTypes: ts.Type[] = [];
|
||||
private text = "";
|
||||
private constructor(private typeChecker: ts.TypeChecker, private protocolFile: ts.SourceFile) {
|
||||
}
|
||||
|
||||
static getExtraDeclarations(typeChecker: ts.TypeChecker, protocolFile: ts.SourceFile): string {
|
||||
let text = "declare namespace ts.server.protocol {\n";
|
||||
var walker = new DeclarationsWalker(typeChecker, protocolFile);
|
||||
walker.visitTypeNodes(protocolFile);
|
||||
return walker.text
|
||||
? `declare namespace ts.server.protocol {\n${walker.text}}`
|
||||
: "";
|
||||
}
|
||||
|
||||
private processType(type: ts.Type): void {
|
||||
if (this.visitedTypes.indexOf(type) >= 0) {
|
||||
return;
|
||||
}
|
||||
this.visitedTypes.push(type);
|
||||
let s = type.aliasSymbol || type.getSymbol();
|
||||
if (!s) {
|
||||
return;
|
||||
}
|
||||
if (s.name === "Array") {
|
||||
// we should process type argument instead
|
||||
return this.processType((<any>type).typeArguments[0]);
|
||||
}
|
||||
else {
|
||||
for (const decl of s.getDeclarations()) {
|
||||
const sourceFile = decl.getSourceFile();
|
||||
if (sourceFile === this.protocolFile || path.basename(sourceFile.fileName) === "lib.d.ts") {
|
||||
return;
|
||||
}
|
||||
// splice declaration in final d.ts file
|
||||
const text = decl.getFullText();
|
||||
this.text += `${text}\n`;
|
||||
|
||||
// recursively pull all dependencies into result dts file
|
||||
this.visitTypeNodes(decl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private visitTypeNodes(node: ts.Node) {
|
||||
if (node.parent) {
|
||||
switch (node.parent.kind) {
|
||||
case ts.SyntaxKind.VariableDeclaration:
|
||||
case ts.SyntaxKind.MethodDeclaration:
|
||||
case ts.SyntaxKind.MethodSignature:
|
||||
case ts.SyntaxKind.PropertyDeclaration:
|
||||
case ts.SyntaxKind.PropertySignature:
|
||||
case ts.SyntaxKind.Parameter:
|
||||
case ts.SyntaxKind.IndexSignature:
|
||||
if (((<ts.VariableDeclaration | ts.MethodDeclaration | ts.PropertyDeclaration | ts.ParameterDeclaration | ts.PropertySignature | ts.MethodSignature | ts.IndexSignatureDeclaration>node.parent).type) === node) {
|
||||
const type = this.typeChecker.getTypeAtLocation(node);
|
||||
if (type && !(type.flags & ts.TypeFlags.TypeParameter)) {
|
||||
this.processType(type);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
ts.forEachChild(node, n => this.visitTypeNodes(n));
|
||||
}
|
||||
}
|
||||
|
||||
function generateProtocolFile(protocolTs: string, typeScriptServicesDts: string): string {
|
||||
const options = { target: ts.ScriptTarget.ES5, declaration: true, noResolve: true, types: <string[]>[], stripInternal: true };
|
||||
|
||||
/**
|
||||
* 1st pass - generate a program from protocol.ts and typescriptservices.d.ts and emit core version of protocol.d.ts with all internal members stripped
|
||||
* @return text of protocol.d.t.s
|
||||
*/
|
||||
function getInitialDtsFileForProtocol() {
|
||||
const program = ts.createProgram([protocolTs, typeScriptServicesDts], options);
|
||||
|
||||
let protocolDts: string;
|
||||
program.emit(program.getSourceFile(protocolTs), (file, content) => {
|
||||
if (endsWith(file, ".d.ts")) {
|
||||
protocolDts = content;
|
||||
}
|
||||
});
|
||||
if (protocolDts === undefined) {
|
||||
throw new Error(`Declaration file for protocol.ts is not generated`)
|
||||
}
|
||||
return protocolDts;
|
||||
}
|
||||
|
||||
const protocolFileName = "protocol.d.ts";
|
||||
/**
|
||||
* Second pass - generate a program from protocol.d.ts and typescriptservices.d.ts, then augment core protocol.d.ts with extra types from typescriptservices.d.ts
|
||||
*/
|
||||
function getProgramWithProtocolText(protocolDts: string, includeTypeScriptServices: boolean) {
|
||||
const host = ts.createCompilerHost(options);
|
||||
const originalGetSourceFile = host.getSourceFile;
|
||||
host.getSourceFile = (fileName) => {
|
||||
if (fileName === protocolFileName) {
|
||||
return ts.createSourceFile(fileName, protocolDts, options.target);
|
||||
}
|
||||
return originalGetSourceFile.apply(host, [fileName]);
|
||||
}
|
||||
const rootFiles = includeTypeScriptServices ? [protocolFileName, typeScriptServicesDts] : [protocolFileName];
|
||||
return ts.createProgram(rootFiles, options, host);
|
||||
}
|
||||
|
||||
let protocolDts = getInitialDtsFileForProtocol();
|
||||
const program = getProgramWithProtocolText(protocolDts, /*includeTypeScriptServices*/ true);
|
||||
|
||||
const protocolFile = program.getSourceFile("protocol.d.ts");
|
||||
const extraDeclarations = DeclarationsWalker.getExtraDeclarations(program.getTypeChecker(), protocolFile);
|
||||
if (extraDeclarations) {
|
||||
protocolDts += extraDeclarations;
|
||||
}
|
||||
// do sanity check and try to compile generated text as standalone program
|
||||
const sanityCheckProgram = getProgramWithProtocolText(protocolDts, /*includeTypeScriptServices*/ false);
|
||||
const diagnostics = [...program.getSyntacticDiagnostics(), ...program.getSemanticDiagnostics(), ...program.getGlobalDiagnostics()];
|
||||
if (diagnostics.length) {
|
||||
const flattenedDiagnostics = diagnostics.map(d => ts.flattenDiagnosticMessageText(d.messageText, "\n")).join("\n");
|
||||
throw new Error(`Unexpected errors during sanity check: ${flattenedDiagnostics}`);
|
||||
}
|
||||
return protocolDts;
|
||||
}
|
||||
|
||||
if (process.argv.length < 5) {
|
||||
console.log(`Expected 3 arguments: path to 'protocol.ts', path to 'typescriptservices.d.ts' and path to output file`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const protocolTs = process.argv[2];
|
||||
const typeScriptServicesDts = process.argv[3];
|
||||
const outputFile = process.argv[4];
|
||||
const generatedProtocolDts = generateProtocolFile(protocolTs, typeScriptServicesDts);
|
||||
ts.sys.writeFile(outputFile, generatedProtocolDts);
|
||||
@@ -126,7 +126,7 @@ class PreferConstWalker extends Lint.RuleWalker {
|
||||
visitModuleDeclaration(node: ts.ModuleDeclaration) {
|
||||
if (node.body.kind === ts.SyntaxKind.ModuleBlock) {
|
||||
// For some reason module blocks are left out of the visit block traversal
|
||||
this.visitBlock(node.body as ts.ModuleBlock);
|
||||
this.visitBlock(node.body as any as ts.Block);
|
||||
}
|
||||
super.visitModuleDeclaration(node);
|
||||
}
|
||||
|
||||
+47
-12
@@ -84,6 +84,7 @@ namespace ts {
|
||||
IsFunctionExpression = 1 << 4,
|
||||
HasLocals = 1 << 5,
|
||||
IsInterface = 1 << 6,
|
||||
IsObjectLiteralOrClassExpressionMethod = 1 << 7,
|
||||
}
|
||||
|
||||
const binder = createBinder();
|
||||
@@ -121,7 +122,8 @@ namespace ts {
|
||||
|
||||
// If this file is an external module, then it is automatically in strict-mode according to
|
||||
// ES6. If it is not an external module, then we'll determine if it is in strict mode or
|
||||
// not depending on if we see "use strict" in certain places (or if we hit a class/namespace).
|
||||
// not depending on if we see "use strict" in certain places or if we hit a class/namespace
|
||||
// or if compiler options contain alwaysStrict.
|
||||
let inStrictMode: boolean;
|
||||
|
||||
let symbolCount = 0;
|
||||
@@ -139,7 +141,7 @@ namespace ts {
|
||||
file = f;
|
||||
options = opts;
|
||||
languageVersion = getEmitScriptTarget(options);
|
||||
inStrictMode = !!file.externalModuleIndicator;
|
||||
inStrictMode = bindInStrictMode(file, opts);
|
||||
classifiableNames = createMap<string>();
|
||||
symbolCount = 0;
|
||||
skipTransformFlagAggregation = isDeclarationFile(file);
|
||||
@@ -174,6 +176,16 @@ namespace ts {
|
||||
|
||||
return bindSourceFile;
|
||||
|
||||
function bindInStrictMode(file: SourceFile, opts: CompilerOptions): boolean {
|
||||
if (opts.alwaysStrict && !isDeclarationFile(file)) {
|
||||
// bind in strict mode source files with alwaysStrict option
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return !!file.externalModuleIndicator;
|
||||
}
|
||||
}
|
||||
|
||||
function createSymbol(flags: SymbolFlags, name: string): Symbol {
|
||||
symbolCount++;
|
||||
return new Symbol(flags, name);
|
||||
@@ -355,11 +367,24 @@ namespace ts {
|
||||
? Diagnostics.Cannot_redeclare_block_scoped_variable_0
|
||||
: Diagnostics.Duplicate_identifier_0;
|
||||
|
||||
forEach(symbol.declarations, declaration => {
|
||||
if (hasModifier(declaration, ModifierFlags.Default)) {
|
||||
if (symbol.declarations && symbol.declarations.length) {
|
||||
// If the current node is a default export of some sort, then check if
|
||||
// there are any other default exports that we need to error on.
|
||||
// We'll know whether we have other default exports depending on if `symbol` already has a declaration list set.
|
||||
if (isDefaultExport) {
|
||||
message = Diagnostics.A_module_cannot_have_multiple_default_exports;
|
||||
}
|
||||
});
|
||||
else {
|
||||
// This is to properly report an error in the case "export default { }" is after export default of class declaration or function declaration.
|
||||
// Error on multiple export default in the following case:
|
||||
// 1. multiple export default of class declaration or function declaration by checking NodeFlags.Default
|
||||
// 2. multiple export default of export assignment. This one doesn't have NodeFlags.Default on (as export default doesn't considered as modifiers)
|
||||
if (symbol.declarations && symbol.declarations.length &&
|
||||
(isDefaultExport || (node.kind === SyntaxKind.ExportAssignment && !(<ExportAssignment>node).isExportEquals))) {
|
||||
message = Diagnostics.A_module_cannot_have_multiple_default_exports;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
forEach(symbol.declarations, declaration => {
|
||||
file.bindDiagnostics.push(createDiagnosticForNode(declaration.name || declaration, message, getDisplayName(declaration)));
|
||||
@@ -473,8 +498,8 @@ namespace ts {
|
||||
}
|
||||
else {
|
||||
currentFlow = { flags: FlowFlags.Start };
|
||||
if (containerFlags & ContainerFlags.IsFunctionExpression) {
|
||||
(<FlowStart>currentFlow).container = <FunctionExpression | ArrowFunction>node;
|
||||
if (containerFlags & (ContainerFlags.IsFunctionExpression | ContainerFlags.IsObjectLiteralOrClassExpressionMethod)) {
|
||||
(<FlowStart>currentFlow).container = <FunctionExpression | ArrowFunction | MethodDeclaration>node;
|
||||
}
|
||||
currentReturnTarget = undefined;
|
||||
}
|
||||
@@ -1245,9 +1270,12 @@ namespace ts {
|
||||
case SyntaxKind.SourceFile:
|
||||
return ContainerFlags.IsContainer | ContainerFlags.IsControlFlowContainer | ContainerFlags.HasLocals;
|
||||
|
||||
case SyntaxKind.MethodDeclaration:
|
||||
if (isObjectLiteralOrClassExpressionMethod(node)) {
|
||||
return ContainerFlags.IsContainer | ContainerFlags.IsControlFlowContainer | ContainerFlags.HasLocals | ContainerFlags.IsFunctionLike | ContainerFlags.IsObjectLiteralOrClassExpressionMethod;
|
||||
}
|
||||
case SyntaxKind.Constructor:
|
||||
case SyntaxKind.FunctionDeclaration:
|
||||
case SyntaxKind.MethodDeclaration:
|
||||
case SyntaxKind.MethodSignature:
|
||||
case SyntaxKind.GetAccessor:
|
||||
case SyntaxKind.SetAccessor:
|
||||
@@ -1965,12 +1993,15 @@ namespace ts {
|
||||
bindAnonymousDeclaration(node, SymbolFlags.Alias, getDeclarationName(node));
|
||||
}
|
||||
else {
|
||||
// An export default clause with an expression exports a value
|
||||
// We want to exclude both class and function here, this is necessary to issue an error when there are both
|
||||
// default export-assignment and default export function and class declaration.
|
||||
const flags = node.kind === SyntaxKind.ExportAssignment && exportAssignmentIsAlias(<ExportAssignment>node)
|
||||
// An export default clause with an EntityNameExpression exports all meanings of that identifier
|
||||
? SymbolFlags.Alias
|
||||
// An export default clause with any other expression exports a value
|
||||
: SymbolFlags.Property;
|
||||
declareSymbol(container.symbol.exports, container.symbol, node, flags, SymbolFlags.PropertyExcludes | SymbolFlags.AliasExcludes);
|
||||
declareSymbol(container.symbol.exports, container.symbol, node, flags, SymbolFlags.Property | SymbolFlags.AliasExcludes | SymbolFlags.Class | SymbolFlags.Function);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2228,9 +2259,9 @@ namespace ts {
|
||||
if (currentFlow) {
|
||||
node.flowNode = currentFlow;
|
||||
}
|
||||
checkStrictModeFunctionName(<FunctionExpression>node);
|
||||
const bindingName = (<FunctionExpression>node).name ? (<FunctionExpression>node).name.text : "__function";
|
||||
return bindAnonymousDeclaration(<FunctionExpression>node, SymbolFlags.Function, bindingName);
|
||||
checkStrictModeFunctionName(node);
|
||||
const bindingName = node.name ? node.name.text : "__function";
|
||||
return bindAnonymousDeclaration(node, SymbolFlags.Function, bindingName);
|
||||
}
|
||||
|
||||
function bindPropertyOrMethodOrAccessor(node: Declaration, symbolFlags: SymbolFlags, symbolExcludes: SymbolFlags) {
|
||||
@@ -2243,6 +2274,10 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
if (currentFlow && isObjectLiteralOrClassExpressionMethod(node)) {
|
||||
node.flowNode = currentFlow;
|
||||
}
|
||||
|
||||
return hasDynamicName(node)
|
||||
? bindAnonymousDeclaration(node, symbolFlags, "__computed")
|
||||
: declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes);
|
||||
|
||||
+35
-6
@@ -924,7 +924,7 @@ namespace ts {
|
||||
if (result && isInExternalModule && (meaning & SymbolFlags.Value) === SymbolFlags.Value) {
|
||||
const decls = result.declarations;
|
||||
if (decls && decls.length === 1 && decls[0].kind === SyntaxKind.NamespaceExportDeclaration) {
|
||||
error(errorLocation, Diagnostics.Identifier_0_must_be_imported_from_a_module, name);
|
||||
error(errorLocation, Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead, name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1467,6 +1467,10 @@ namespace ts {
|
||||
|
||||
function getExportsForModule(moduleSymbol: Symbol): SymbolTable {
|
||||
const visitedSymbols: Symbol[] = [];
|
||||
|
||||
// A module defined by an 'export=' consists on one export that needs to be resolved
|
||||
moduleSymbol = resolveExternalModuleSymbol(moduleSymbol);
|
||||
|
||||
return visit(moduleSymbol) || moduleSymbol.exports;
|
||||
|
||||
// The ES6 spec permits export * declarations in a module to circularly reference the module itself. For example,
|
||||
@@ -8485,6 +8489,28 @@ namespace ts {
|
||||
return f(type) ? type : neverType;
|
||||
}
|
||||
|
||||
function mapType(type: Type, f: (t: Type) => Type): Type {
|
||||
return type.flags & TypeFlags.Union ? getUnionType(map((<UnionType>type).types, f)) : f(type);
|
||||
}
|
||||
|
||||
function extractTypesOfKind(type: Type, kind: TypeFlags) {
|
||||
return filterType(type, t => (t.flags & kind) !== 0);
|
||||
}
|
||||
|
||||
// Return a new type in which occurrences of the string and number primitive types in
|
||||
// typeWithPrimitives have been replaced with occurrences of string literals and numeric
|
||||
// literals in typeWithLiterals, respectively.
|
||||
function replacePrimitivesWithLiterals(typeWithPrimitives: Type, typeWithLiterals: Type) {
|
||||
if (isTypeSubsetOf(stringType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, TypeFlags.StringLiteral) ||
|
||||
isTypeSubsetOf(numberType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, TypeFlags.NumberLiteral)) {
|
||||
return mapType(typeWithPrimitives, t =>
|
||||
t.flags & TypeFlags.String ? extractTypesOfKind(typeWithLiterals, TypeFlags.String | TypeFlags.StringLiteral) :
|
||||
t.flags & TypeFlags.Number ? extractTypesOfKind(typeWithLiterals, TypeFlags.Number | TypeFlags.NumberLiteral) :
|
||||
t);
|
||||
}
|
||||
return typeWithPrimitives;
|
||||
}
|
||||
|
||||
function isIncomplete(flowType: FlowType) {
|
||||
return flowType.flags === 0;
|
||||
}
|
||||
@@ -8963,7 +8989,7 @@ namespace ts {
|
||||
}
|
||||
if (assumeTrue) {
|
||||
const narrowedType = filterType(type, t => areTypesComparable(t, valueType));
|
||||
return narrowedType.flags & TypeFlags.Never ? type : narrowedType;
|
||||
return narrowedType.flags & TypeFlags.Never ? type : replacePrimitivesWithLiterals(narrowedType, valueType);
|
||||
}
|
||||
if (isUnitType(valueType)) {
|
||||
const regularType = getRegularTypeOfLiteralType(valueType);
|
||||
@@ -9010,7 +9036,9 @@ namespace ts {
|
||||
const clauseTypes = switchTypes.slice(clauseStart, clauseEnd);
|
||||
const hasDefaultClause = clauseStart === clauseEnd || contains(clauseTypes, neverType);
|
||||
const discriminantType = getUnionType(clauseTypes);
|
||||
const caseType = discriminantType.flags & TypeFlags.Never ? neverType : filterType(type, t => isTypeComparableTo(discriminantType, t));
|
||||
const caseType =
|
||||
discriminantType.flags & TypeFlags.Never ? neverType :
|
||||
replacePrimitivesWithLiterals(filterType(type, t => isTypeComparableTo(discriminantType, t)), discriminantType);
|
||||
if (!hasDefaultClause) {
|
||||
return caseType;
|
||||
}
|
||||
@@ -9337,8 +9365,8 @@ namespace ts {
|
||||
// When the control flow originates in a function expression or arrow function and we are referencing
|
||||
// a const variable or parameter from an outer function, we extend the origin of the control flow
|
||||
// analysis to include the immediately enclosing function.
|
||||
while (flowContainer !== declarationContainer &&
|
||||
(flowContainer.kind === SyntaxKind.FunctionExpression || flowContainer.kind === SyntaxKind.ArrowFunction) &&
|
||||
while (flowContainer !== declarationContainer && (flowContainer.kind === SyntaxKind.FunctionExpression ||
|
||||
flowContainer.kind === SyntaxKind.ArrowFunction || isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
|
||||
(isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) {
|
||||
flowContainer = getControlFlowContainer(flowContainer);
|
||||
}
|
||||
@@ -18064,7 +18092,8 @@ namespace ts {
|
||||
}
|
||||
|
||||
function isNotOverload(declaration: Declaration): boolean {
|
||||
return declaration.kind !== SyntaxKind.FunctionDeclaration || !!(declaration as FunctionDeclaration).body;
|
||||
return (declaration.kind !== SyntaxKind.FunctionDeclaration && declaration.kind !== SyntaxKind.MethodDeclaration) ||
|
||||
!!(declaration as FunctionDeclaration).body;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -444,6 +444,11 @@ namespace ts {
|
||||
name: "importHelpers",
|
||||
type: "boolean",
|
||||
description: Diagnostics.Import_emit_helpers_from_tslib
|
||||
},
|
||||
{
|
||||
name: "alwaysStrict",
|
||||
type: "boolean",
|
||||
description: Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file
|
||||
}
|
||||
];
|
||||
|
||||
@@ -975,7 +980,7 @@ namespace ts {
|
||||
basePath: string, errors: Diagnostic[], configFileName?: string): CompilerOptions {
|
||||
|
||||
const options: CompilerOptions = getBaseFileName(configFileName) === "jsconfig.json"
|
||||
? { allowJs: true, maxNodeModuleJsDepth: 2, allowSyntheticDefaultImports: true }
|
||||
? { allowJs: true, maxNodeModuleJsDepth: 2, allowSyntheticDefaultImports: true, skipLibCheck: true }
|
||||
: {};
|
||||
convertOptionsFromJson(optionDeclarations, jsonOptions, basePath, options, Diagnostics.Unknown_compiler_option_0, errors);
|
||||
return options;
|
||||
|
||||
+14
-2
@@ -1117,7 +1117,9 @@ namespace ts {
|
||||
return path.replace(/\\/g, "/");
|
||||
}
|
||||
|
||||
// Returns length of path root (i.e. length of "/", "x:/", "//server/share/, file:///user/files")
|
||||
/**
|
||||
* Returns length of path root (i.e. length of "/", "x:/", "//server/share/, file:///user/files")
|
||||
*/
|
||||
export function getRootLength(path: string): number {
|
||||
if (path.charCodeAt(0) === CharacterCodes.slash) {
|
||||
if (path.charCodeAt(1) !== CharacterCodes.slash) return 1;
|
||||
@@ -1146,9 +1148,14 @@ namespace ts {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Internally, we represent paths as strings with '/' as the directory separator.
|
||||
* When we make system calls (eg: LanguageServiceHost.getDirectory()),
|
||||
* we expect the host to correctly handle paths in our specified format.
|
||||
*/
|
||||
export const directorySeparator = "/";
|
||||
const directorySeparatorCharCode = CharacterCodes.slash;
|
||||
function getNormalizedParts(normalizedSlashedPath: string, rootLength: number) {
|
||||
function getNormalizedParts(normalizedSlashedPath: string, rootLength: number): string[] {
|
||||
const parts = normalizedSlashedPath.substr(rootLength).split(directorySeparator);
|
||||
const normalized: string[] = [];
|
||||
for (const part of parts) {
|
||||
@@ -1188,6 +1195,11 @@ namespace ts {
|
||||
return path.charCodeAt(path.length - 1) === directorySeparatorCharCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the path except for its basename. Eg:
|
||||
*
|
||||
* /path/to/file.ext -> /path/to
|
||||
*/
|
||||
export function getDirectoryPath(path: Path): Path;
|
||||
export function getDirectoryPath(path: string): string;
|
||||
export function getDirectoryPath(path: string): any {
|
||||
|
||||
@@ -1923,7 +1923,7 @@
|
||||
"category": "Error",
|
||||
"code": 2685
|
||||
},
|
||||
"Identifier '{0}' must be imported from a module": {
|
||||
"'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead.": {
|
||||
"category": "Error",
|
||||
"code": 2686
|
||||
},
|
||||
@@ -2861,6 +2861,10 @@
|
||||
"category": "Error",
|
||||
"code": 6140
|
||||
},
|
||||
"Parse in strict mode and emit \"use strict\" for each source file": {
|
||||
"category": "Message",
|
||||
"code": 6141
|
||||
},
|
||||
"Variable '{0}' implicitly has an '{1}' type.": {
|
||||
"category": "Error",
|
||||
"code": 7005
|
||||
@@ -3073,7 +3077,6 @@
|
||||
"category": "Error",
|
||||
"code": 17010
|
||||
},
|
||||
|
||||
"Circularity detected while resolving configuration: {0}": {
|
||||
"category": "Error",
|
||||
"code": 18000
|
||||
@@ -3081,5 +3084,33 @@
|
||||
"The path in an 'extends' options must be relative or rooted.": {
|
||||
"category": "Error",
|
||||
"code": 18001
|
||||
},
|
||||
"Add missing 'super()' call.": {
|
||||
"category": "Message",
|
||||
"code": 90001
|
||||
},
|
||||
"Make 'super()' call the first statement in the constructor.": {
|
||||
"category": "Message",
|
||||
"code": 90002
|
||||
},
|
||||
"Change 'extends' to 'implements'": {
|
||||
"category": "Message",
|
||||
"code": 90003
|
||||
},
|
||||
"Remove unused identifiers": {
|
||||
"category": "Message",
|
||||
"code": 90004
|
||||
},
|
||||
"Implement interface on reference": {
|
||||
"category": "Message",
|
||||
"code": 90005
|
||||
},
|
||||
"Implement interface on class": {
|
||||
"category": "Message",
|
||||
"code": 90006
|
||||
},
|
||||
"Implement inherited abstract class": {
|
||||
"category": "Message",
|
||||
"code": 90007
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -2235,6 +2235,33 @@ namespace ts {
|
||||
return statementOffset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures "use strict" directive is added
|
||||
*
|
||||
* @param node source file
|
||||
*/
|
||||
export function ensureUseStrict(node: SourceFile): SourceFile {
|
||||
let foundUseStrict = false;
|
||||
for (const statement of node.statements) {
|
||||
if (isPrologueDirective(statement)) {
|
||||
if (isUseStrictPrologue(statement as ExpressionStatement)) {
|
||||
foundUseStrict = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!foundUseStrict) {
|
||||
const statements: Statement[] = [];
|
||||
statements.push(startOnNewLine(createStatement(createLiteral("use strict"))));
|
||||
// add "use strict" as the first statement
|
||||
return updateSourceFileNode(node, statements.concat(node.statements));
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps the operand to a BinaryExpression in parentheses if they are needed to preserve the intended
|
||||
* order of operations.
|
||||
|
||||
@@ -5352,7 +5352,7 @@ namespace ts {
|
||||
parseExpected(SyntaxKind.EqualsToken);
|
||||
node.type = parseType();
|
||||
parseSemicolon();
|
||||
return finishNode(node);
|
||||
return addJSDocComment(finishNode(node));
|
||||
}
|
||||
|
||||
// In an ambient declaration, the grammar only allows integer literals as initializers.
|
||||
|
||||
@@ -358,7 +358,7 @@ namespace ts {
|
||||
// load type declarations specified via 'types' argument or implicitly from types/ and node_modules/@types folders
|
||||
const typeReferences: string[] = getAutomaticTypeDirectiveNames(options, host);
|
||||
|
||||
if (typeReferences) {
|
||||
if (typeReferences.length) {
|
||||
// This containingFilename needs to match with the one used in managed-side
|
||||
const containingFilename = combinePaths(host.getCurrentDirectory(), "__inferred type names__.ts");
|
||||
const resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename);
|
||||
@@ -1311,7 +1311,6 @@ namespace ts {
|
||||
for (let i = 0; i < moduleNames.length; i++) {
|
||||
const resolution = resolutions[i];
|
||||
setResolvedModule(file, moduleNames[i], resolution);
|
||||
const resolvedPath = resolution ? toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName) : undefined;
|
||||
|
||||
// add file to program only if:
|
||||
// - resolution was successful
|
||||
@@ -1333,7 +1332,7 @@ namespace ts {
|
||||
}
|
||||
else if (shouldAddFile) {
|
||||
findSourceFile(resolution.resolvedFileName,
|
||||
resolvedPath,
|
||||
toPath(resolution.resolvedFileName, currentDirectory, getCanonicalFileName),
|
||||
/*isDefaultLib*/ false, /*isReference*/ false,
|
||||
file,
|
||||
skipTrivia(file.text, file.imports[i].pos),
|
||||
@@ -1474,6 +1473,10 @@ namespace ts {
|
||||
programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Option_0_cannot_be_specified_with_option_1, "lib", "noLib"));
|
||||
}
|
||||
|
||||
if (options.noImplicitUseStrict && options.alwaysStrict) {
|
||||
programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Option_0_cannot_be_specified_with_option_1, "noImplicitUseStrict", "alwaysStrict"));
|
||||
}
|
||||
|
||||
const languageVersion = options.target || ScriptTarget.ES3;
|
||||
const outFile = options.outFile || options.out;
|
||||
|
||||
|
||||
@@ -1190,7 +1190,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function scanBinaryOrOctalDigits(base: number): number {
|
||||
Debug.assert(base !== 2 || base !== 8, "Expected either base 2 or base 8");
|
||||
Debug.assert(base === 2 || base === 8, "Expected either base 2 or base 8");
|
||||
|
||||
let value = 0;
|
||||
// For counting number of digits; Valid binaryIntegerLiteral must have at least one binary digit following B or b.
|
||||
|
||||
@@ -476,6 +476,10 @@ namespace ts {
|
||||
// Node 4.0 `fs.watch` function supports the "recursive" option on both OSX and Windows
|
||||
// (ref: https://github.com/nodejs/node/pull/2649 and https://github.com/Microsoft/TypeScript/issues/4643)
|
||||
let options: any;
|
||||
if (!directoryExists(directoryName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isNode4OrLater() && (process.platform === "win32" || process.platform === "darwin")) {
|
||||
options = { persistent: true, recursive: !!recursive };
|
||||
}
|
||||
|
||||
@@ -436,6 +436,11 @@ namespace ts {
|
||||
function visitSourceFile(node: SourceFile) {
|
||||
currentSourceFile = node;
|
||||
|
||||
// ensure "use strict" is emitted in all scenarios in alwaysStrict mode
|
||||
if (compilerOptions.alwaysStrict) {
|
||||
node = ensureUseStrict(node);
|
||||
}
|
||||
|
||||
// If the source file requires any helpers and is an external module, and
|
||||
// the importHelpers compiler option is enabled, emit a synthesized import
|
||||
// statement for the helpers library.
|
||||
|
||||
@@ -1923,7 +1923,7 @@ namespace ts {
|
||||
// function, the container property references the function (which in turn has a flowNode
|
||||
// property for the containing control flow).
|
||||
export interface FlowStart extends FlowNode {
|
||||
container?: FunctionExpression | ArrowFunction;
|
||||
container?: FunctionExpression | ArrowFunction | MethodDeclaration;
|
||||
}
|
||||
|
||||
// FlowLabel represents a junction with multiple possible preceding control flows.
|
||||
@@ -2652,7 +2652,7 @@ namespace ts {
|
||||
// 'Narrowable' types are types where narrowing actually narrows.
|
||||
// This *should* be every type other than null, undefined, void, and never
|
||||
Narrowable = Any | StructuredType | TypeParameter | StringLike | NumberLike | BooleanLike | ESSymbol,
|
||||
NotUnionOrUnit = Any | String | Number | ESSymbol | ObjectType,
|
||||
NotUnionOrUnit = Any | ESSymbol | ObjectType,
|
||||
/* @internal */
|
||||
RequiresWidening = ContainsWideningType | ContainsObjectLiteral,
|
||||
/* @internal */
|
||||
@@ -2927,11 +2927,7 @@ namespace ts {
|
||||
NodeJs = 2
|
||||
}
|
||||
|
||||
export type RootPaths = string[];
|
||||
export type PathSubstitutions = MapLike<string[]>;
|
||||
export type TsConfigOnlyOptions = RootPaths | PathSubstitutions;
|
||||
|
||||
export type CompilerOptionsValue = string | number | boolean | (string | number)[] | TsConfigOnlyOptions;
|
||||
export type CompilerOptionsValue = string | number | boolean | (string | number)[] | string[] | MapLike<string[]>;
|
||||
|
||||
export interface CompilerOptions {
|
||||
allowJs?: boolean;
|
||||
@@ -2939,6 +2935,7 @@ namespace ts {
|
||||
allowSyntheticDefaultImports?: boolean;
|
||||
allowUnreachableCode?: boolean;
|
||||
allowUnusedLabels?: boolean;
|
||||
alwaysStrict?: boolean;
|
||||
baseUrl?: string;
|
||||
charset?: string;
|
||||
/* @internal */ configFilePath?: string;
|
||||
@@ -2983,14 +2980,14 @@ namespace ts {
|
||||
out?: string;
|
||||
outDir?: string;
|
||||
outFile?: string;
|
||||
paths?: PathSubstitutions;
|
||||
paths?: MapLike<string[]>;
|
||||
preserveConstEnums?: boolean;
|
||||
project?: string;
|
||||
/* @internal */ pretty?: DiagnosticStyle;
|
||||
reactNamespace?: string;
|
||||
removeComments?: boolean;
|
||||
rootDir?: string;
|
||||
rootDirs?: RootPaths;
|
||||
rootDirs?: string[];
|
||||
skipLibCheck?: boolean;
|
||||
skipDefaultLibCheck?: boolean;
|
||||
sourceMap?: boolean;
|
||||
|
||||
@@ -895,6 +895,12 @@ namespace ts {
|
||||
return node && node.kind === SyntaxKind.MethodDeclaration && node.parent.kind === SyntaxKind.ObjectLiteralExpression;
|
||||
}
|
||||
|
||||
export function isObjectLiteralOrClassExpressionMethod(node: Node): node is MethodDeclaration {
|
||||
return node.kind === SyntaxKind.MethodDeclaration &&
|
||||
(node.parent.kind === SyntaxKind.ObjectLiteralExpression ||
|
||||
node.parent.kind === SyntaxKind.ClassExpression);
|
||||
}
|
||||
|
||||
export function isIdentifierTypePredicate(predicate: TypePredicate): predicate is IdentifierTypePredicate {
|
||||
return predicate && predicate.kind === TypePredicateKind.Identifier;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@@ -427,7 +427,7 @@ namespace FourSlash {
|
||||
|
||||
if (exists !== negative) {
|
||||
this.printErrorLog(negative, this.getAllDiagnostics());
|
||||
throw new Error("Failure between markers: " + startMarkerName + ", " + endMarkerName);
|
||||
throw new Error(`Failure between markers: '${startMarkerName}', '${endMarkerName}'`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -742,7 +742,6 @@ namespace FourSlash {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public verifyCompletionListAllowsNewIdentifier(negative: boolean) {
|
||||
const completions = this.getCompletionListAtCaret();
|
||||
|
||||
@@ -1611,7 +1610,7 @@ namespace FourSlash {
|
||||
if (isFormattingEdit) {
|
||||
const newContent = this.getFileContent(fileName);
|
||||
|
||||
if (newContent.replace(/\s/g, "") !== oldContent.replace(/\s/g, "")) {
|
||||
if (this.removeWhitespace(newContent) !== this.removeWhitespace(oldContent)) {
|
||||
this.raiseError("Formatting operation destroyed non-whitespace content");
|
||||
}
|
||||
}
|
||||
@@ -1677,6 +1676,10 @@ namespace FourSlash {
|
||||
}
|
||||
}
|
||||
|
||||
private removeWhitespace(text: string): string {
|
||||
return text.replace(/\s/g, "");
|
||||
}
|
||||
|
||||
public goToBOF() {
|
||||
this.goToPosition(0);
|
||||
}
|
||||
@@ -2038,6 +2041,47 @@ namespace FourSlash {
|
||||
}
|
||||
}
|
||||
|
||||
private getCodeFixes(errorCode?: number) {
|
||||
const fileName = this.activeFile.fileName;
|
||||
const diagnostics = this.getDiagnostics(fileName);
|
||||
|
||||
if (diagnostics.length === 0) {
|
||||
this.raiseError("Errors expected.");
|
||||
}
|
||||
|
||||
if (diagnostics.length > 1 && errorCode !== undefined) {
|
||||
this.raiseError("When there's more than one error, you must specify the errror to fix.");
|
||||
}
|
||||
|
||||
const diagnostic = !errorCode ? diagnostics[0] : ts.find(diagnostics, d => d.code == errorCode);
|
||||
|
||||
return this.languageService.getCodeFixesAtPosition(fileName, diagnostic.start, diagnostic.length, [diagnostic.code]);
|
||||
}
|
||||
|
||||
public verifyCodeFixAtPosition(expectedText: string, errorCode?: number) {
|
||||
const ranges = this.getRanges();
|
||||
if (ranges.length == 0) {
|
||||
this.raiseError("At least one range should be specified in the testfile.");
|
||||
}
|
||||
|
||||
const actual = this.getCodeFixes(errorCode);
|
||||
|
||||
if (!actual || actual.length == 0) {
|
||||
this.raiseError("No codefixes returned.");
|
||||
}
|
||||
|
||||
if (actual.length > 1) {
|
||||
this.raiseError("More than 1 codefix returned.");
|
||||
}
|
||||
|
||||
this.applyEdits(actual[0].changes[0].fileName, actual[0].changes[0].textChanges, /*isFormattingEdit*/ false);
|
||||
const actualText = this.rangeText(ranges[0]);
|
||||
|
||||
if (this.removeWhitespace(actualText) !== this.removeWhitespace(expectedText)) {
|
||||
this.raiseError(`Actual text doesn't match expected text. Actual: '${actualText}' Expected: '${expectedText}'`);
|
||||
}
|
||||
}
|
||||
|
||||
public verifyDocCommentTemplate(expected?: ts.TextInsertion) {
|
||||
const name = "verifyDocCommentTemplate";
|
||||
const actual = this.languageService.getDocCommentTemplateAtPosition(this.activeFile.fileName, this.currentCaretPosition);
|
||||
@@ -2211,6 +2255,18 @@ namespace FourSlash {
|
||||
}
|
||||
}
|
||||
|
||||
public verifyNavigationTree(json: any) {
|
||||
const tree = this.languageService.getNavigationTree(this.activeFile.fileName);
|
||||
if (JSON.stringify(tree, replacer) !== JSON.stringify(json)) {
|
||||
this.raiseError(`verifyNavigationTree failed - expected: ${stringify(json)}, got: ${stringify(tree, replacer)}`);
|
||||
}
|
||||
|
||||
function replacer(key: string, value: any) {
|
||||
// Don't check "spans", and omit falsy values.
|
||||
return key === "spans" ? undefined : (value || undefined);
|
||||
}
|
||||
}
|
||||
|
||||
public printNavigationItems(searchValue: string) {
|
||||
const items = this.languageService.getNavigateToItems(searchValue);
|
||||
const length = items && items.length;
|
||||
@@ -2309,6 +2365,18 @@ namespace FourSlash {
|
||||
}
|
||||
}
|
||||
|
||||
public verifyCodeFixAvailable(negative: boolean, errorCode?: number) {
|
||||
const fixes = this.getCodeFixes(errorCode);
|
||||
|
||||
if (negative && fixes && fixes.length > 0) {
|
||||
this.raiseError(`verifyCodeFixAvailable failed - expected no fixes, actual: ${fixes.length}`);
|
||||
}
|
||||
|
||||
if (!negative && (fixes === undefined || fixes.length === 0)) {
|
||||
this.raiseError(`verifyCodeFixAvailable failed - expected code fixes, actual: 0`);
|
||||
}
|
||||
}
|
||||
|
||||
// Get the text of the entire line the caret is currently at
|
||||
private getCurrentLineContent() {
|
||||
const text = this.getFileContent(this.activeFile.fileName);
|
||||
@@ -3096,6 +3164,10 @@ namespace FourSlashInterface {
|
||||
public isValidBraceCompletionAtPosition(openingBrace: string) {
|
||||
this.state.verifyBraceCompletionAtPosition(this.negative, openingBrace);
|
||||
}
|
||||
|
||||
public codeFixAvailable(errorCode?: number) {
|
||||
this.state.verifyCodeFixAvailable(this.negative, errorCode);
|
||||
}
|
||||
}
|
||||
|
||||
export class Verify extends VerifyNegatable {
|
||||
@@ -3275,10 +3347,18 @@ namespace FourSlashInterface {
|
||||
this.DocCommentTemplate(/*expectedText*/ undefined, /*expectedOffset*/ undefined, /*empty*/ true);
|
||||
}
|
||||
|
||||
public codeFixAtPosition(expectedText: string, errorCode?: number): void {
|
||||
this.state.verifyCodeFixAtPosition(expectedText, errorCode);
|
||||
}
|
||||
|
||||
public navigationBar(json: any) {
|
||||
this.state.verifyNavigationBar(json);
|
||||
}
|
||||
|
||||
public navigationTree(json: any) {
|
||||
this.state.verifyNavigationTree(json);
|
||||
}
|
||||
|
||||
public navigationItemsListCount(count: number, searchValue: string, matchKind?: string, fileName?: string) {
|
||||
this.state.verifyNavigationItemsCount(count, searchValue, matchKind, fileName);
|
||||
}
|
||||
|
||||
@@ -459,6 +459,10 @@ namespace Harness.LanguageService {
|
||||
getNavigationBarItems(fileName: string): ts.NavigationBarItem[] {
|
||||
return unwrapJSONCallResult(this.shim.getNavigationBarItems(fileName));
|
||||
}
|
||||
getNavigationTree(fileName: string): ts.NavigationTree {
|
||||
return unwrapJSONCallResult(this.shim.getNavigationTree(fileName));
|
||||
}
|
||||
|
||||
getOutliningSpans(fileName: string): ts.OutliningSpan[] {
|
||||
return unwrapJSONCallResult(this.shim.getOutliningSpans(fileName));
|
||||
}
|
||||
@@ -486,6 +490,9 @@ namespace Harness.LanguageService {
|
||||
isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean {
|
||||
return unwrapJSONCallResult(this.shim.isValidBraceCompletionAtPosition(fileName, position, openingBrace));
|
||||
}
|
||||
getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[]): ts.CodeAction[] {
|
||||
throw new Error("Not supported on the shim.");
|
||||
}
|
||||
getEmitOutput(fileName: string): ts.EmitOutput {
|
||||
return unwrapJSONCallResult(this.shim.getEmitOutput(fileName));
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
/// <reference path="../../server/typingsInstaller/typingsInstaller.ts" />
|
||||
|
||||
namespace ts.projectSystem {
|
||||
import CommandNames = server.CommandNames;
|
||||
|
||||
function createTestTypingsInstaller(host: server.ServerHost) {
|
||||
return new TestTypingsInstaller("/a/data/", /*throttleLimit*/5, host);
|
||||
}
|
||||
@@ -75,7 +77,7 @@ namespace ts.projectSystem {
|
||||
};
|
||||
|
||||
// Change the content of file1 to `export var T: number;export function Foo() { };`
|
||||
changeModuleFile1ShapeRequest1 = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
changeModuleFile1ShapeRequest1 = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: moduleFile1.path,
|
||||
line: 1,
|
||||
offset: 1,
|
||||
@@ -85,7 +87,7 @@ namespace ts.projectSystem {
|
||||
});
|
||||
|
||||
// Change the content of file1 to `export var T: number;export function Foo() { };`
|
||||
changeModuleFile1InternalRequest1 = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
changeModuleFile1InternalRequest1 = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: moduleFile1.path,
|
||||
line: 1,
|
||||
offset: 1,
|
||||
@@ -95,7 +97,7 @@ namespace ts.projectSystem {
|
||||
});
|
||||
|
||||
// Change the content of file1 to `export var T: number;export function Foo() { };`
|
||||
changeModuleFile1ShapeRequest2 = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
changeModuleFile1ShapeRequest2 = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: moduleFile1.path,
|
||||
line: 1,
|
||||
offset: 1,
|
||||
@@ -104,7 +106,7 @@ namespace ts.projectSystem {
|
||||
insertString: `export var T2: number;`
|
||||
});
|
||||
|
||||
moduleFile1FileListRequest = makeSessionRequest<server.protocol.FileRequestArgs>(server.CommandNames.CompileOnSaveAffectedFileList, { file: moduleFile1.path, projectFileName: configFile.path });
|
||||
moduleFile1FileListRequest = makeSessionRequest<server.protocol.FileRequestArgs>(CommandNames.CompileOnSaveAffectedFileList, { file: moduleFile1.path, projectFileName: configFile.path });
|
||||
});
|
||||
|
||||
it("should contains only itself if a module file's shape didn't change, and all files referencing it if its shape changed", () => {
|
||||
@@ -120,7 +122,7 @@ namespace ts.projectSystem {
|
||||
sendAffectedFileRequestAndCheckResult(session, moduleFile1FileListRequest, [{ projectFileName: configFile.path, files: [moduleFile1, file1Consumer1, file1Consumer2] }]);
|
||||
|
||||
// Change the content of file1 to `export var T: number;export function Foo() { console.log('hi'); };`
|
||||
const changeFile1InternalRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
const changeFile1InternalRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: moduleFile1.path,
|
||||
line: 1,
|
||||
offset: 46,
|
||||
@@ -143,7 +145,7 @@ namespace ts.projectSystem {
|
||||
sendAffectedFileRequestAndCheckResult(session, moduleFile1FileListRequest, [{ projectFileName: configFile.path, files: [moduleFile1, file1Consumer1, file1Consumer2] }]);
|
||||
|
||||
// Change file2 content to `let y = Foo();`
|
||||
const removeFile1Consumer1ImportRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
const removeFile1Consumer1ImportRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: file1Consumer1.path,
|
||||
line: 1,
|
||||
offset: 1,
|
||||
@@ -156,7 +158,7 @@ namespace ts.projectSystem {
|
||||
sendAffectedFileRequestAndCheckResult(session, moduleFile1FileListRequest, [{ projectFileName: configFile.path, files: [moduleFile1, file1Consumer2] }]);
|
||||
|
||||
// Add the import statements back to file2
|
||||
const addFile2ImportRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
const addFile2ImportRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: file1Consumer1.path,
|
||||
line: 1,
|
||||
offset: 1,
|
||||
@@ -167,7 +169,7 @@ namespace ts.projectSystem {
|
||||
session.executeCommand(addFile2ImportRequest);
|
||||
|
||||
// Change the content of file1 to `export var T2: string;export var T: number;export function Foo() { };`
|
||||
const changeModuleFile1ShapeRequest2 = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
const changeModuleFile1ShapeRequest2 = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: moduleFile1.path,
|
||||
line: 1,
|
||||
offset: 1,
|
||||
@@ -272,7 +274,7 @@ namespace ts.projectSystem {
|
||||
const session = new server.Session(host, nullCancellationToken, /*useSingleInferredProject*/ false, typingsInstaller, Utils.byteLength, process.hrtime, nullLogger, /*canUseEvents*/ false);
|
||||
|
||||
openFilesForSession([globalFile3], session);
|
||||
const changeGlobalFile3ShapeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
const changeGlobalFile3ShapeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: globalFile3.path,
|
||||
line: 1,
|
||||
offset: 1,
|
||||
@@ -283,7 +285,7 @@ namespace ts.projectSystem {
|
||||
|
||||
// check after file1 shape changes
|
||||
session.executeCommand(changeGlobalFile3ShapeRequest);
|
||||
const globalFile3FileListRequest = makeSessionRequest<server.protocol.FileRequestArgs>(server.CommandNames.CompileOnSaveAffectedFileList, { file: globalFile3.path });
|
||||
const globalFile3FileListRequest = makeSessionRequest<server.protocol.FileRequestArgs>(CommandNames.CompileOnSaveAffectedFileList, { file: globalFile3.path });
|
||||
sendAffectedFileRequestAndCheckResult(session, globalFile3FileListRequest, [{ projectFileName: configFile.path, files: [moduleFile1, file1Consumer1, file1Consumer2, globalFile3, moduleFile2] }]);
|
||||
});
|
||||
|
||||
@@ -316,7 +318,7 @@ namespace ts.projectSystem {
|
||||
const session = new server.Session(host, nullCancellationToken, /*useSingleInferredProject*/ false, typingsInstaller, Utils.byteLength, process.hrtime, nullLogger, /*canUseEvents*/ false);
|
||||
openFilesForSession([moduleFile1], session);
|
||||
|
||||
const file1ChangeShapeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
const file1ChangeShapeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: moduleFile1.path,
|
||||
line: 1,
|
||||
offset: 27,
|
||||
@@ -345,7 +347,7 @@ namespace ts.projectSystem {
|
||||
const session = new server.Session(host, nullCancellationToken, /*useSingleInferredProject*/ false, typingsInstaller, Utils.byteLength, process.hrtime, nullLogger, /*canUseEvents*/ false);
|
||||
openFilesForSession([moduleFile1], session);
|
||||
|
||||
const file1ChangeShapeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
const file1ChangeShapeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: moduleFile1.path,
|
||||
line: 1,
|
||||
offset: 27,
|
||||
@@ -369,7 +371,7 @@ namespace ts.projectSystem {
|
||||
openFilesForSession([moduleFile1, file1Consumer1], session);
|
||||
sendAffectedFileRequestAndCheckResult(session, moduleFile1FileListRequest, [{ projectFileName: configFile.path, files: [moduleFile1, file1Consumer1, file1Consumer1Consumer1] }]);
|
||||
|
||||
const changeFile1Consumer1ShapeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(server.CommandNames.Change, {
|
||||
const changeFile1Consumer1ShapeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
|
||||
file: file1Consumer1.path,
|
||||
line: 2,
|
||||
offset: 1,
|
||||
@@ -400,7 +402,7 @@ namespace ts.projectSystem {
|
||||
const session = new server.Session(host, nullCancellationToken, /*useSingleInferredProject*/ false, typingsInstaller, Utils.byteLength, process.hrtime, nullLogger, /*canUseEvents*/ false);
|
||||
|
||||
openFilesForSession([file1, file2], session);
|
||||
const file1AffectedListRequest = makeSessionRequest<server.protocol.FileRequestArgs>(server.CommandNames.CompileOnSaveAffectedFileList, { file: file1.path });
|
||||
const file1AffectedListRequest = makeSessionRequest<server.protocol.FileRequestArgs>(CommandNames.CompileOnSaveAffectedFileList, { file: file1.path });
|
||||
sendAffectedFileRequestAndCheckResult(session, file1AffectedListRequest, [{ projectFileName: configFile.path, files: [file1, file2] }]);
|
||||
});
|
||||
|
||||
@@ -415,7 +417,7 @@ namespace ts.projectSystem {
|
||||
const session = createSession(host);
|
||||
|
||||
openFilesForSession([file1, file2, file3], session);
|
||||
const file1AffectedListRequest = makeSessionRequest<server.protocol.FileRequestArgs>(server.CommandNames.CompileOnSaveAffectedFileList, { file: file1.path });
|
||||
const file1AffectedListRequest = makeSessionRequest<server.protocol.FileRequestArgs>(CommandNames.CompileOnSaveAffectedFileList, { file: file1.path });
|
||||
|
||||
sendAffectedFileRequestAndCheckResult(session, file1AffectedListRequest, [
|
||||
{ projectFileName: configFile1.path, files: [file1, file2] },
|
||||
@@ -437,11 +439,11 @@ namespace ts.projectSystem {
|
||||
host.reloadFS([referenceFile1, configFile]);
|
||||
host.triggerFileWatcherCallback(moduleFile1.path, /*removed*/ true);
|
||||
|
||||
const request = makeSessionRequest<server.protocol.FileRequestArgs>(server.CommandNames.CompileOnSaveAffectedFileList, { file: referenceFile1.path });
|
||||
const request = makeSessionRequest<server.protocol.FileRequestArgs>(CommandNames.CompileOnSaveAffectedFileList, { file: referenceFile1.path });
|
||||
sendAffectedFileRequestAndCheckResult(session, request, [
|
||||
{ projectFileName: configFile.path, files: [referenceFile1] }
|
||||
]);
|
||||
const requestForMissingFile = makeSessionRequest<server.protocol.FileRequestArgs>(server.CommandNames.CompileOnSaveAffectedFileList, { file: moduleFile1.path });
|
||||
const requestForMissingFile = makeSessionRequest<server.protocol.FileRequestArgs>(CommandNames.CompileOnSaveAffectedFileList, { file: moduleFile1.path });
|
||||
sendAffectedFileRequestAndCheckResult(session, requestForMissingFile, []);
|
||||
});
|
||||
|
||||
@@ -456,7 +458,7 @@ namespace ts.projectSystem {
|
||||
const session = createSession(host);
|
||||
|
||||
openFilesForSession([referenceFile1], session);
|
||||
const request = makeSessionRequest<server.protocol.FileRequestArgs>(server.CommandNames.CompileOnSaveAffectedFileList, { file: referenceFile1.path });
|
||||
const request = makeSessionRequest<server.protocol.FileRequestArgs>(CommandNames.CompileOnSaveAffectedFileList, { file: referenceFile1.path });
|
||||
sendAffectedFileRequestAndCheckResult(session, request, [
|
||||
{ projectFileName: configFile.path, files: [referenceFile1] }
|
||||
]);
|
||||
@@ -483,7 +485,7 @@ namespace ts.projectSystem {
|
||||
const session = new server.Session(host, nullCancellationToken, /*useSingleInferredProject*/ false, typingsInstaller, Utils.byteLength, process.hrtime, nullLogger, /*canUseEvents*/ false);
|
||||
|
||||
openFilesForSession([file1, file2], session);
|
||||
const compileFileRequest = makeSessionRequest<server.protocol.CompileOnSaveEmitFileRequestArgs>(server.CommandNames.CompileOnSaveEmitFile, { file: file1.path, projectFileName: configFile.path });
|
||||
const compileFileRequest = makeSessionRequest<server.protocol.CompileOnSaveEmitFileRequestArgs>(CommandNames.CompileOnSaveEmitFile, { file: file1.path, projectFileName: configFile.path });
|
||||
session.executeCommand(compileFileRequest);
|
||||
|
||||
const expectedEmittedFileName = "/a/b/f1.js";
|
||||
|
||||
@@ -405,6 +405,7 @@ namespace ts {
|
||||
allowJs: true,
|
||||
maxNodeModuleJsDepth: 2,
|
||||
allowSyntheticDefaultImports: true,
|
||||
skipLibCheck: true,
|
||||
module: ModuleKind.CommonJS,
|
||||
target: ScriptTarget.ES5,
|
||||
noImplicitAny: false,
|
||||
@@ -433,6 +434,7 @@ namespace ts {
|
||||
allowJs: false,
|
||||
maxNodeModuleJsDepth: 2,
|
||||
allowSyntheticDefaultImports: true,
|
||||
skipLibCheck: true,
|
||||
module: ModuleKind.CommonJS,
|
||||
target: ScriptTarget.ES5,
|
||||
noImplicitAny: false,
|
||||
@@ -456,7 +458,8 @@ namespace ts {
|
||||
{
|
||||
allowJs: true,
|
||||
maxNodeModuleJsDepth: 2,
|
||||
allowSyntheticDefaultImports: true
|
||||
allowSyntheticDefaultImports: true,
|
||||
skipLibCheck: true
|
||||
},
|
||||
errors: [{
|
||||
file: undefined,
|
||||
@@ -477,7 +480,8 @@ namespace ts {
|
||||
{
|
||||
allowJs: true,
|
||||
maxNodeModuleJsDepth: 2,
|
||||
allowSyntheticDefaultImports: true
|
||||
allowSyntheticDefaultImports: true,
|
||||
skipLibCheck: true
|
||||
},
|
||||
errors: <Diagnostic[]>[]
|
||||
}
|
||||
|
||||
@@ -253,6 +253,10 @@ var x = 0;`, {
|
||||
options: { compilerOptions: { allowUnusedLabels: true }, fileName: "input.js", reportDiagnostics: true }
|
||||
});
|
||||
|
||||
transpilesCorrectly("Supports setting 'alwaysStrict'", "x;", {
|
||||
options: { compilerOptions: { alwaysStrict: true }, fileName: "input.js", reportDiagnostics: true }
|
||||
});
|
||||
|
||||
transpilesCorrectly("Supports setting 'baseUrl'", "x;", {
|
||||
options: { compilerOptions: { baseUrl: "./folder/baseUrl" }, fileName: "input.js", reportDiagnostics: true }
|
||||
});
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/// <reference path="..\harness.ts" />
|
||||
/// <reference path="..\harness.ts" />
|
||||
/// <reference path="../../server/typingsInstaller/typingsInstaller.ts" />
|
||||
|
||||
namespace ts.projectSystem {
|
||||
import TI = server.typingsInstaller;
|
||||
import protocol = server.protocol;
|
||||
import CommandNames = server.CommandNames;
|
||||
|
||||
const safeList = {
|
||||
path: <Path>"/safeList.json",
|
||||
@@ -128,7 +130,7 @@ namespace ts.projectSystem {
|
||||
return combinePaths(getDirectoryPath(libFile.path), "tsc.js");
|
||||
}
|
||||
|
||||
export function toExternalFile(fileName: string): server.protocol.ExternalFile {
|
||||
export function toExternalFile(fileName: string): protocol.ExternalFile {
|
||||
return { fileName };
|
||||
}
|
||||
|
||||
@@ -136,6 +138,19 @@ namespace ts.projectSystem {
|
||||
return map(fileNames, toExternalFile);
|
||||
}
|
||||
|
||||
export class TestServerEventManager {
|
||||
private events: server.ProjectServiceEvent[] = [];
|
||||
|
||||
handler: server.ProjectServiceEventHandler = (event: server.ProjectServiceEvent) => {
|
||||
this.events.push(event);
|
||||
}
|
||||
|
||||
checkEventCountOfType(eventType: "context" | "configFileDiag", expectedCount: number) {
|
||||
const eventsOfType = filter(this.events, e => e.eventName === eventType);
|
||||
assert.equal(eventsOfType.length, expectedCount, `The actual event counts of type ${eventType} is ${eventsOfType.length}, while expected ${expectedCount}`);
|
||||
}
|
||||
}
|
||||
|
||||
export interface TestServerHostCreationParameters {
|
||||
useCaseSensitiveFileNames?: boolean;
|
||||
executingFilePath?: string;
|
||||
@@ -159,11 +174,11 @@ namespace ts.projectSystem {
|
||||
return host;
|
||||
}
|
||||
|
||||
export function createSession(host: server.ServerHost, typingsInstaller?: server.ITypingsInstaller) {
|
||||
export function createSession(host: server.ServerHost, typingsInstaller?: server.ITypingsInstaller, projectServiceEventHandler?: server.ProjectServiceEventHandler) {
|
||||
if (typingsInstaller === undefined) {
|
||||
typingsInstaller = new TestTypingsInstaller("/a/data/", /*throttleLimit*/5, host);
|
||||
}
|
||||
return new server.Session(host, nullCancellationToken, /*useSingleInferredProject*/ false, typingsInstaller, Utils.byteLength, process.hrtime, nullLogger, /*canUseEvents*/ false);
|
||||
return new server.Session(host, nullCancellationToken, /*useSingleInferredProject*/ false, typingsInstaller, Utils.byteLength, process.hrtime, nullLogger, /*canUseEvents*/ projectServiceEventHandler !== undefined, projectServiceEventHandler);
|
||||
}
|
||||
|
||||
export interface CreateProjectServiceParameters {
|
||||
@@ -514,7 +529,7 @@ namespace ts.projectSystem {
|
||||
}
|
||||
|
||||
export function makeSessionRequest<T>(command: string, args: T) {
|
||||
const newRequest: server.protocol.Request = {
|
||||
const newRequest: protocol.Request = {
|
||||
seq: 0,
|
||||
type: "request",
|
||||
command,
|
||||
@@ -525,7 +540,7 @@ namespace ts.projectSystem {
|
||||
|
||||
export function openFilesForSession(files: FileOrFolder[], session: server.Session) {
|
||||
for (const file of files) {
|
||||
const request = makeSessionRequest<server.protocol.OpenRequestArgs>(server.CommandNames.Open, { file: file.path });
|
||||
const request = makeSessionRequest<protocol.OpenRequestArgs>(CommandNames.Open, { file: file.path });
|
||||
session.executeCommand(request);
|
||||
}
|
||||
}
|
||||
@@ -1738,7 +1753,7 @@ namespace ts.projectSystem {
|
||||
});
|
||||
|
||||
describe("navigate-to for javascript project", () => {
|
||||
function containsNavToItem(items: server.protocol.NavtoItem[], itemName: string, itemKind: string) {
|
||||
function containsNavToItem(items: protocol.NavtoItem[], itemName: string, itemKind: string) {
|
||||
return find(items, item => item.name === itemName && item.kind === itemKind) !== undefined;
|
||||
}
|
||||
|
||||
@@ -1756,12 +1771,12 @@ namespace ts.projectSystem {
|
||||
openFilesForSession([file1], session);
|
||||
|
||||
// Try to find some interface type defined in lib.d.ts
|
||||
const libTypeNavToRequest = makeSessionRequest<server.protocol.NavtoRequestArgs>(server.CommandNames.Navto, { searchValue: "Document", file: file1.path, projectFileName: configFile.path });
|
||||
const items: server.protocol.NavtoItem[] = session.executeCommand(libTypeNavToRequest).response;
|
||||
const libTypeNavToRequest = makeSessionRequest<protocol.NavtoRequestArgs>(CommandNames.Navto, { searchValue: "Document", file: file1.path, projectFileName: configFile.path });
|
||||
const items: protocol.NavtoItem[] = session.executeCommand(libTypeNavToRequest).response;
|
||||
assert.isFalse(containsNavToItem(items, "Document", "interface"), `Found lib.d.ts symbol in JavaScript project nav to request result.`);
|
||||
|
||||
const localFunctionNavToRequst = makeSessionRequest<server.protocol.NavtoRequestArgs>(server.CommandNames.Navto, { searchValue: "foo", file: file1.path, projectFileName: configFile.path });
|
||||
const items2: server.protocol.NavtoItem[] = session.executeCommand(localFunctionNavToRequst).response;
|
||||
const localFunctionNavToRequst = makeSessionRequest<protocol.NavtoRequestArgs>(CommandNames.Navto, { searchValue: "foo", file: file1.path, projectFileName: configFile.path });
|
||||
const items2: protocol.NavtoItem[] = session.executeCommand(localFunctionNavToRequst).response;
|
||||
assert.isTrue(containsNavToItem(items2, "foo", "function"), `Cannot find function symbol "foo".`);
|
||||
});
|
||||
});
|
||||
@@ -2084,7 +2099,7 @@ namespace ts.projectSystem {
|
||||
const projectFileName = "externalProject";
|
||||
const host = createServerHost([f]);
|
||||
const projectService = createProjectService(host);
|
||||
// create a project
|
||||
// create a project
|
||||
projectService.openExternalProject({ projectFileName, rootFiles: [toExternalFile(f.path)], options: {} });
|
||||
projectService.checkNumberOfProjects({ externalProjects: 1 });
|
||||
|
||||
@@ -2121,4 +2136,284 @@ namespace ts.projectSystem {
|
||||
projectService.inferredProjects[0].getLanguageService().getProgram();
|
||||
});
|
||||
});
|
||||
|
||||
describe("rename a module file and rename back", () => {
|
||||
it("should restore the states for inferred projects", () => {
|
||||
const moduleFile = {
|
||||
path: "/a/b/moduleFile.ts",
|
||||
content: "export function bar() { };"
|
||||
};
|
||||
const file1 = {
|
||||
path: "/a/b/file1.ts",
|
||||
content: "import * as T from './moduleFile'; T.bar();"
|
||||
};
|
||||
const host = createServerHost([moduleFile, file1]);
|
||||
const session = createSession(host);
|
||||
|
||||
openFilesForSession([file1], session);
|
||||
const getErrRequest = makeSessionRequest<server.protocol.SemanticDiagnosticsSyncRequestArgs>(
|
||||
server.CommandNames.SemanticDiagnosticsSync,
|
||||
{ file: file1.path }
|
||||
);
|
||||
let diags = <server.protocol.Diagnostic[]>session.executeCommand(getErrRequest).response;
|
||||
assert.equal(diags.length, 0);
|
||||
|
||||
const moduleFileOldPath = moduleFile.path;
|
||||
const moduleFileNewPath = "/a/b/moduleFile1.ts";
|
||||
moduleFile.path = moduleFileNewPath;
|
||||
host.reloadFS([moduleFile, file1]);
|
||||
host.triggerFileWatcherCallback(moduleFileOldPath);
|
||||
host.triggerDirectoryWatcherCallback("/a/b", moduleFile.path);
|
||||
host.runQueuedTimeoutCallbacks();
|
||||
diags = <server.protocol.Diagnostic[]>session.executeCommand(getErrRequest).response;
|
||||
assert.equal(diags.length, 1);
|
||||
|
||||
moduleFile.path = moduleFileOldPath;
|
||||
host.reloadFS([moduleFile, file1]);
|
||||
host.triggerFileWatcherCallback(moduleFileNewPath);
|
||||
host.triggerDirectoryWatcherCallback("/a/b", moduleFile.path);
|
||||
host.runQueuedTimeoutCallbacks();
|
||||
|
||||
// Make a change to trigger the program rebuild
|
||||
const changeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(
|
||||
server.CommandNames.Change,
|
||||
{ file: file1.path, line: 1, offset: 44, endLine: 1, endOffset: 44, insertString: "\n" }
|
||||
);
|
||||
session.executeCommand(changeRequest);
|
||||
host.runQueuedTimeoutCallbacks();
|
||||
|
||||
diags = <server.protocol.Diagnostic[]>session.executeCommand(getErrRequest).response;
|
||||
assert.equal(diags.length, 0);
|
||||
});
|
||||
|
||||
it("should restore the states for configured projects", () => {
|
||||
const moduleFile = {
|
||||
path: "/a/b/moduleFile.ts",
|
||||
content: "export function bar() { };"
|
||||
};
|
||||
const file1 = {
|
||||
path: "/a/b/file1.ts",
|
||||
content: "import * as T from './moduleFile'; T.bar();"
|
||||
};
|
||||
const configFile = {
|
||||
path: "/a/b/tsconfig.json",
|
||||
content: `{}`
|
||||
};
|
||||
const host = createServerHost([moduleFile, file1, configFile]);
|
||||
const session = createSession(host);
|
||||
|
||||
openFilesForSession([file1], session);
|
||||
const getErrRequest = makeSessionRequest<server.protocol.SemanticDiagnosticsSyncRequestArgs>(
|
||||
server.CommandNames.SemanticDiagnosticsSync,
|
||||
{ file: file1.path }
|
||||
);
|
||||
let diags = <server.protocol.Diagnostic[]>session.executeCommand(getErrRequest).response;
|
||||
assert.equal(diags.length, 0);
|
||||
|
||||
const moduleFileOldPath = moduleFile.path;
|
||||
const moduleFileNewPath = "/a/b/moduleFile1.ts";
|
||||
moduleFile.path = moduleFileNewPath;
|
||||
host.reloadFS([moduleFile, file1, configFile]);
|
||||
host.triggerFileWatcherCallback(moduleFileOldPath);
|
||||
host.triggerDirectoryWatcherCallback("/a/b", moduleFile.path);
|
||||
host.runQueuedTimeoutCallbacks();
|
||||
diags = <server.protocol.Diagnostic[]>session.executeCommand(getErrRequest).response;
|
||||
assert.equal(diags.length, 1);
|
||||
|
||||
moduleFile.path = moduleFileOldPath;
|
||||
host.reloadFS([moduleFile, file1, configFile]);
|
||||
host.triggerFileWatcherCallback(moduleFileNewPath);
|
||||
host.triggerDirectoryWatcherCallback("/a/b", moduleFile.path);
|
||||
host.runQueuedTimeoutCallbacks();
|
||||
diags = <server.protocol.Diagnostic[]>session.executeCommand(getErrRequest).response;
|
||||
assert.equal(diags.length, 0);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe("add the missing module file for inferred project", () => {
|
||||
it("should remove the `module not found` error", () => {
|
||||
const moduleFile = {
|
||||
path: "/a/b/moduleFile.ts",
|
||||
content: "export function bar() { };"
|
||||
};
|
||||
const file1 = {
|
||||
path: "/a/b/file1.ts",
|
||||
content: "import * as T from './moduleFile'; T.bar();"
|
||||
};
|
||||
const host = createServerHost([file1]);
|
||||
const session = createSession(host);
|
||||
openFilesForSession([file1], session);
|
||||
const getErrRequest = makeSessionRequest<server.protocol.SemanticDiagnosticsSyncRequestArgs>(
|
||||
server.CommandNames.SemanticDiagnosticsSync,
|
||||
{ file: file1.path }
|
||||
);
|
||||
let diags = <server.protocol.Diagnostic[]>session.executeCommand(getErrRequest).response;
|
||||
assert.equal(diags.length, 1);
|
||||
|
||||
host.reloadFS([file1, moduleFile]);
|
||||
host.triggerDirectoryWatcherCallback(getDirectoryPath(file1.path), moduleFile.path);
|
||||
host.runQueuedTimeoutCallbacks();
|
||||
|
||||
// Make a change to trigger the program rebuild
|
||||
const changeRequest = makeSessionRequest<server.protocol.ChangeRequestArgs>(
|
||||
server.CommandNames.Change,
|
||||
{ file: file1.path, line: 1, offset: 44, endLine: 1, endOffset: 44, insertString: "\n" }
|
||||
);
|
||||
session.executeCommand(changeRequest);
|
||||
|
||||
// Recheck
|
||||
diags = <server.protocol.Diagnostic[]>session.executeCommand(getErrRequest).response;
|
||||
assert.equal(diags.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("Configure file diagnostics events", () => {
|
||||
|
||||
it("are generated when the config file has errors", () => {
|
||||
const serverEventManager = new TestServerEventManager();
|
||||
const file = {
|
||||
path: "/a/b/app.ts",
|
||||
content: "let x = 10"
|
||||
};
|
||||
const configFile = {
|
||||
path: "/a/b/tsconfig.json",
|
||||
content: `{
|
||||
"compilerOptions": {
|
||||
"foo": "bar",
|
||||
"allowJS": true
|
||||
}
|
||||
}`
|
||||
};
|
||||
|
||||
const host = createServerHost([file, configFile]);
|
||||
const session = createSession(host, /*typingsInstaller*/ undefined, serverEventManager.handler);
|
||||
openFilesForSession([file], session);
|
||||
serverEventManager.checkEventCountOfType("configFileDiag", 1);
|
||||
});
|
||||
|
||||
it("are generated when the config file doesn't have errors", () => {
|
||||
const serverEventManager = new TestServerEventManager();
|
||||
const file = {
|
||||
path: "/a/b/app.ts",
|
||||
content: "let x = 10"
|
||||
};
|
||||
const configFile = {
|
||||
path: "/a/b/tsconfig.json",
|
||||
content: `{
|
||||
"compilerOptions": {}
|
||||
}`
|
||||
};
|
||||
|
||||
const host = createServerHost([file, configFile]);
|
||||
const session = createSession(host, /*typingsInstaller*/ undefined, serverEventManager.handler);
|
||||
openFilesForSession([file], session);
|
||||
serverEventManager.checkEventCountOfType("configFileDiag", 1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("skipLibCheck", () => {
|
||||
it("should be turned on for js-only inferred projects", () => {
|
||||
const file1 = {
|
||||
path: "/a/b/file1.js",
|
||||
content: `
|
||||
/// <reference path="file2.d.ts" />
|
||||
var x = 1;`
|
||||
};
|
||||
const file2 = {
|
||||
path: "/a/b/file2.d.ts",
|
||||
content: `
|
||||
interface T {
|
||||
name: string;
|
||||
};
|
||||
interface T {
|
||||
name: number;
|
||||
};`
|
||||
};
|
||||
const host = createServerHost([file1, file2]);
|
||||
const session = createSession(host);
|
||||
openFilesForSession([file1, file2], session);
|
||||
|
||||
const file2GetErrRequest = makeSessionRequest<protocol.SemanticDiagnosticsSyncRequestArgs>(
|
||||
CommandNames.SemanticDiagnosticsSync,
|
||||
{ file: file2.path }
|
||||
);
|
||||
let errorResult = <protocol.Diagnostic[]>session.executeCommand(file2GetErrRequest).response;
|
||||
assert.isTrue(errorResult.length === 0);
|
||||
|
||||
const closeFileRequest = makeSessionRequest<protocol.FileRequestArgs>(CommandNames.Close, { file: file1.path });
|
||||
session.executeCommand(closeFileRequest);
|
||||
errorResult = <protocol.Diagnostic[]>session.executeCommand(file2GetErrRequest).response;
|
||||
assert.isTrue(errorResult.length !== 0);
|
||||
|
||||
openFilesForSession([file1], session);
|
||||
errorResult = <protocol.Diagnostic[]>session.executeCommand(file2GetErrRequest).response;
|
||||
assert.isTrue(errorResult.length === 0);
|
||||
});
|
||||
|
||||
it("should be turned on for js-only external projects", () => {
|
||||
const jsFile = {
|
||||
path: "/a/b/file1.js",
|
||||
content: "let x =1;"
|
||||
};
|
||||
const dTsFile = {
|
||||
path: "/a/b/file2.d.ts",
|
||||
content: `
|
||||
interface T {
|
||||
name: string;
|
||||
};
|
||||
interface T {
|
||||
name: number;
|
||||
};`
|
||||
};
|
||||
const host = createServerHost([jsFile, dTsFile]);
|
||||
const session = createSession(host);
|
||||
|
||||
const openExternalProjectRequest = makeSessionRequest<protocol.OpenExternalProjectArgs>(
|
||||
CommandNames.OpenExternalProject,
|
||||
{
|
||||
projectFileName: "project1",
|
||||
rootFiles: toExternalFiles([jsFile.path, dTsFile.path]),
|
||||
options: {}
|
||||
}
|
||||
);
|
||||
session.executeCommand(openExternalProjectRequest);
|
||||
|
||||
const dTsFileGetErrRequest = makeSessionRequest<protocol.SemanticDiagnosticsSyncRequestArgs>(
|
||||
CommandNames.SemanticDiagnosticsSync,
|
||||
{ file: dTsFile.path }
|
||||
);
|
||||
const errorResult = <protocol.Diagnostic[]>session.executeCommand(dTsFileGetErrRequest).response;
|
||||
assert.isTrue(errorResult.length === 0);
|
||||
});
|
||||
});
|
||||
|
||||
describe("non-existing directories listed in config file input array", () => {
|
||||
it("should be tolerated without crashing the server", () => {
|
||||
const configFile = {
|
||||
path: "/a/b/tsconfig.json",
|
||||
content: `{
|
||||
"compilerOptions": {},
|
||||
"include": ["app/*", "test/**/*", "something"]
|
||||
}`
|
||||
};
|
||||
const file1 = {
|
||||
path: "/a/b/file1.ts",
|
||||
content: "let t = 10;"
|
||||
};
|
||||
|
||||
const host = createServerHost([file1, configFile]);
|
||||
const projectService = createProjectService(host);
|
||||
projectService.openClientFile(file1.path);
|
||||
host.runQueuedTimeoutCallbacks();
|
||||
checkNumberOfConfiguredProjects(projectService, 1);
|
||||
checkNumberOfInferredProjects(projectService, 1);
|
||||
|
||||
const configuredProject = projectService.configuredProjects[0];
|
||||
assert.isTrue(configuredProject.getFileNames().length == 0);
|
||||
|
||||
const inferredProject = projectService.inferredProjects[0];
|
||||
assert.isTrue(inferredProject.containsFile(<server.NormalizedPath>file1.path));
|
||||
});
|
||||
});
|
||||
}
|
||||
Vendored
+1
-1
@@ -201,7 +201,7 @@ interface NumberConstructor {
|
||||
|
||||
/**
|
||||
* Returns true if passed value is finite.
|
||||
* Unlike the global isFininte, Number.isFinite doesn't forcibly convert the parameter to a
|
||||
* Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a
|
||||
* number. Only finite values of the type number, result in true.
|
||||
* @param number A numeric value.
|
||||
*/
|
||||
|
||||
Vendored
+3
@@ -244,6 +244,9 @@ interface Function {
|
||||
*/
|
||||
bind(this: Function, thisArg: any, ...argArray: any[]): any;
|
||||
|
||||
/** Returns a string representation of a function. */
|
||||
toString(): string;
|
||||
|
||||
prototype: any;
|
||||
readonly length: number;
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/// <reference path="..\compiler\commandLineParser.ts" />
|
||||
/// <reference path="..\services\services.ts" />
|
||||
/// <reference path="protocol.d.ts" />
|
||||
/// <reference path="session.ts" />
|
||||
/// <reference types="node" />
|
||||
|
||||
|
||||
+95
-13
@@ -1,7 +1,6 @@
|
||||
/// <reference path="session.ts" />
|
||||
|
||||
namespace ts.server {
|
||||
|
||||
export interface SessionClientHost extends LanguageServiceHost {
|
||||
writeMessage(message: string): void;
|
||||
}
|
||||
@@ -425,11 +424,35 @@ namespace ts.server {
|
||||
}
|
||||
|
||||
getSyntacticDiagnostics(fileName: string): Diagnostic[] {
|
||||
throw new Error("Not Implemented Yet.");
|
||||
const args: protocol.SyntacticDiagnosticsSyncRequestArgs = { file: fileName };
|
||||
|
||||
const request = this.processRequest<protocol.SyntacticDiagnosticsSyncRequest>(CommandNames.SyntacticDiagnosticsSync, args);
|
||||
const response = this.processResponse<protocol.SyntacticDiagnosticsSyncResponse>(request);
|
||||
|
||||
return (<protocol.Diagnostic[]>response.body).map(entry => this.convertDiagnostic(entry, fileName));
|
||||
}
|
||||
|
||||
getSemanticDiagnostics(fileName: string): Diagnostic[] {
|
||||
throw new Error("Not Implemented Yet.");
|
||||
const args: protocol.SemanticDiagnosticsSyncRequestArgs = { file: fileName };
|
||||
|
||||
const request = this.processRequest<protocol.SemanticDiagnosticsSyncRequest>(CommandNames.SemanticDiagnosticsSync, args);
|
||||
const response = this.processResponse<protocol.SemanticDiagnosticsSyncResponse>(request);
|
||||
|
||||
return (<protocol.Diagnostic[]>response.body).map(entry => this.convertDiagnostic(entry, fileName));
|
||||
}
|
||||
|
||||
convertDiagnostic(entry: protocol.Diagnostic, fileName: string): Diagnostic {
|
||||
const start = this.lineOffsetToPosition(fileName, entry.start);
|
||||
const end = this.lineOffsetToPosition(fileName, entry.end);
|
||||
|
||||
return {
|
||||
file: undefined,
|
||||
start: start,
|
||||
length: end - start,
|
||||
messageText: entry.text,
|
||||
category: undefined,
|
||||
code: entry.code
|
||||
};
|
||||
}
|
||||
|
||||
getCompilerOptionsDiagnostics(): Diagnostic[] {
|
||||
@@ -488,7 +511,7 @@ namespace ts.server {
|
||||
return this.lastRenameEntry.locations;
|
||||
}
|
||||
|
||||
decodeNavigationBarItems(items: protocol.NavigationBarItem[], fileName: string, lineMap: number[]): NavigationBarItem[] {
|
||||
private decodeNavigationBarItems(items: protocol.NavigationBarItem[], fileName: string, lineMap: number[]): NavigationBarItem[] {
|
||||
if (!items) {
|
||||
return [];
|
||||
}
|
||||
@@ -497,10 +520,7 @@ namespace ts.server {
|
||||
text: item.text,
|
||||
kind: item.kind,
|
||||
kindModifiers: item.kindModifiers || "",
|
||||
spans: item.spans.map(span =>
|
||||
createTextSpanFromBounds(
|
||||
this.lineOffsetToPosition(fileName, span.start, lineMap),
|
||||
this.lineOffsetToPosition(fileName, span.end, lineMap))),
|
||||
spans: item.spans.map(span => this.decodeSpan(span, fileName, lineMap)),
|
||||
childItems: this.decodeNavigationBarItems(item.childItems, fileName, lineMap),
|
||||
indent: item.indent,
|
||||
bolded: false,
|
||||
@@ -509,17 +529,37 @@ namespace ts.server {
|
||||
}
|
||||
|
||||
getNavigationBarItems(fileName: string): NavigationBarItem[] {
|
||||
const args: protocol.FileRequestArgs = {
|
||||
file: fileName
|
||||
};
|
||||
|
||||
const request = this.processRequest<protocol.NavBarRequest>(CommandNames.NavBar, args);
|
||||
const request = this.processRequest<protocol.NavBarRequest>(CommandNames.NavBar, { file: fileName });
|
||||
const response = this.processResponse<protocol.NavBarResponse>(request);
|
||||
|
||||
const lineMap = this.getLineMap(fileName);
|
||||
return this.decodeNavigationBarItems(response.body, fileName, lineMap);
|
||||
}
|
||||
|
||||
private decodeNavigationTree(tree: protocol.NavigationTree, fileName: string, lineMap: number[]): NavigationTree {
|
||||
return {
|
||||
text: tree.text,
|
||||
kind: tree.kind,
|
||||
kindModifiers: tree.kindModifiers,
|
||||
spans: tree.spans.map(span => this.decodeSpan(span, fileName, lineMap)),
|
||||
childItems: map(tree.childItems, item => this.decodeNavigationTree(item, fileName, lineMap))
|
||||
};
|
||||
}
|
||||
|
||||
getNavigationTree(fileName: string): NavigationTree {
|
||||
const request = this.processRequest<protocol.NavTreeRequest>(CommandNames.NavTree, { file: fileName });
|
||||
const response = this.processResponse<protocol.NavTreeResponse>(request);
|
||||
|
||||
const lineMap = this.getLineMap(fileName);
|
||||
return this.decodeNavigationTree(response.body, fileName, lineMap);
|
||||
}
|
||||
|
||||
private decodeSpan(span: protocol.TextSpan, fileName: string, lineMap: number[]) {
|
||||
return createTextSpanFromBounds(
|
||||
this.lineOffsetToPosition(fileName, span.start, lineMap),
|
||||
this.lineOffsetToPosition(fileName, span.end, lineMap));
|
||||
}
|
||||
|
||||
getNameOrDottedNameSpan(fileName: string, startPos: number, endPos: number): TextSpan {
|
||||
throw new Error("Not Implemented Yet.");
|
||||
}
|
||||
@@ -630,6 +670,48 @@ namespace ts.server {
|
||||
throw new Error("Not Implemented Yet.");
|
||||
}
|
||||
|
||||
getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[]): CodeAction[] {
|
||||
const startLineOffset = this.positionToOneBasedLineOffset(fileName, start);
|
||||
const endLineOffset = this.positionToOneBasedLineOffset(fileName, end);
|
||||
|
||||
const args: protocol.CodeFixRequestArgs = {
|
||||
file: fileName,
|
||||
startLine: startLineOffset.line,
|
||||
startOffset: startLineOffset.offset,
|
||||
endLine: endLineOffset.line,
|
||||
endOffset: endLineOffset.offset,
|
||||
errorCodes: errorCodes,
|
||||
};
|
||||
|
||||
const request = this.processRequest<protocol.CodeFixRequest>(CommandNames.GetCodeFixes, args);
|
||||
const response = this.processResponse<protocol.CodeFixResponse>(request);
|
||||
|
||||
return response.body.map(entry => this.convertCodeActions(entry, fileName));
|
||||
}
|
||||
|
||||
convertCodeActions(entry: protocol.CodeAction, fileName: string): CodeAction {
|
||||
return {
|
||||
description: entry.description,
|
||||
changes: entry.changes.map(change => ({
|
||||
fileName: change.fileName,
|
||||
textChanges: change.textChanges.map(textChange => this.convertTextChangeToCodeEdit(textChange, fileName))
|
||||
}))
|
||||
};
|
||||
}
|
||||
|
||||
convertTextChangeToCodeEdit(change: protocol.CodeEdit, fileName: string): ts.TextChange {
|
||||
const start = this.lineOffsetToPosition(fileName, change.start);
|
||||
const end = this.lineOffsetToPosition(fileName, change.end);
|
||||
|
||||
return {
|
||||
span: {
|
||||
start: start,
|
||||
length: end - start
|
||||
},
|
||||
newText: change.newText ? change.newText : ""
|
||||
};
|
||||
}
|
||||
|
||||
getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[] {
|
||||
const lineOffset = this.positionToOneBasedLineOffset(fileName, position);
|
||||
const args: protocol.FileLocationRequestArgs = {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/// <reference path="..\compiler\commandLineParser.ts" />
|
||||
/// <reference path="..\services\services.ts" />
|
||||
/// <reference path="protocol.d.ts" />
|
||||
/// <reference path="utilities.ts" />
|
||||
/// <reference path="session.ts" />
|
||||
/// <reference path="scriptVersionCache.ts"/>
|
||||
@@ -180,6 +179,8 @@ namespace ts.server {
|
||||
|
||||
private toCanonicalFileName: (f: string) => string;
|
||||
|
||||
public lastDeletedFile: ScriptInfo;
|
||||
|
||||
constructor(public readonly host: ServerHost,
|
||||
public readonly logger: Logger,
|
||||
public readonly cancellationToken: HostCancellationToken,
|
||||
@@ -272,7 +273,7 @@ namespace ts.server {
|
||||
else {
|
||||
projectsToUpdate = [];
|
||||
for (const f of this.changedFiles) {
|
||||
projectsToUpdate = projectsToUpdate.concat(f.containingProjects);
|
||||
projectsToUpdate = projectsToUpdate.concat(f.containingProjects);
|
||||
}
|
||||
}
|
||||
this.updateProjectGraphs(projectsToUpdate);
|
||||
@@ -342,6 +343,7 @@ namespace ts.server {
|
||||
|
||||
if (!info.isOpen) {
|
||||
this.filenameToScriptInfo.remove(info.path);
|
||||
this.lastDeletedFile = info;
|
||||
|
||||
// capture list of projects since detachAllProjects will wipe out original list
|
||||
const containingProjects = info.containingProjects.slice();
|
||||
@@ -350,6 +352,7 @@ namespace ts.server {
|
||||
|
||||
// update projects to make sure that set of referenced files is correct
|
||||
this.updateProjectGraphs(containingProjects);
|
||||
this.lastDeletedFile = undefined;
|
||||
|
||||
if (!this.eventHandler) {
|
||||
return;
|
||||
@@ -707,7 +710,7 @@ namespace ts.server {
|
||||
Debug.assert(!!parsedCommandLine.fileNames);
|
||||
|
||||
if (parsedCommandLine.fileNames.length === 0) {
|
||||
errors.push(createCompilerDiagnostic(Diagnostics.The_config_file_0_found_doesn_t_contain_any_source_files, configFilename));
|
||||
(errors || (errors = [])).push(createCompilerDiagnostic(Diagnostics.The_config_file_0_found_doesn_t_contain_any_source_files, configFilename));
|
||||
return { success: false, configFileErrors: errors };
|
||||
}
|
||||
|
||||
@@ -755,12 +758,14 @@ namespace ts.server {
|
||||
}
|
||||
|
||||
private reportConfigFileDiagnostics(configFileName: string, diagnostics: Diagnostic[], triggerFile?: string) {
|
||||
if (diagnostics && diagnostics.length > 0) {
|
||||
this.eventHandler({
|
||||
eventName: "configFileDiag",
|
||||
data: { configFileName, diagnostics, triggerFile }
|
||||
});
|
||||
if (!this.eventHandler) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.eventHandler({
|
||||
eventName: "configFileDiag",
|
||||
data: { configFileName, diagnostics: diagnostics || [], triggerFile }
|
||||
});
|
||||
}
|
||||
|
||||
private createAndAddConfiguredProject(configFileName: NormalizedPath, projectOptions: ProjectOptions, configFileErrors: Diagnostic[], clientFileName?: string) {
|
||||
|
||||
+13
-5
@@ -52,7 +52,7 @@ namespace ts.server {
|
||||
};
|
||||
}
|
||||
|
||||
private resolveNamesWithLocalCache<T extends { failedLookupLocations: string[] }, R>(
|
||||
private resolveNamesWithLocalCache<T extends { failedLookupLocations: string[] }, R extends { resolvedFileName?: string }>(
|
||||
names: string[],
|
||||
containingFile: string,
|
||||
cache: ts.FileMap<Map<T>>,
|
||||
@@ -65,6 +65,7 @@ namespace ts.server {
|
||||
const newResolutions: Map<T> = createMap<T>();
|
||||
const resolvedModules: R[] = [];
|
||||
const compilerOptions = this.getCompilationSettings();
|
||||
const lastDeletedFileName = this.project.projectService.lastDeletedFile && this.project.projectService.lastDeletedFile.fileName;
|
||||
|
||||
for (const name of names) {
|
||||
// check if this is a duplicate entry in the list
|
||||
@@ -94,8 +95,11 @@ namespace ts.server {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getResult(resolution)) {
|
||||
// TODO: consider checking failedLookupLocations
|
||||
const result = getResult(resolution);
|
||||
if (result) {
|
||||
if (result.resolvedFileName && result.resolvedFileName === lastDeletedFileName) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -171,12 +175,16 @@ namespace ts.server {
|
||||
return this.host.fileExists(path);
|
||||
}
|
||||
|
||||
readFile(fileName: string): string {
|
||||
return this.host.readFile(fileName);
|
||||
}
|
||||
|
||||
directoryExists(path: string): boolean {
|
||||
return this.host.directoryExists(path);
|
||||
}
|
||||
|
||||
readFile(fileName: string): string {
|
||||
return this.host.readFile(fileName);
|
||||
readDirectory(path: string, extensions?: string[], exclude?: string[], include?: string[]): string[] {
|
||||
return this.host.readDirectory(path, extensions, exclude, include);
|
||||
}
|
||||
|
||||
getDirectories(path: string): string[] {
|
||||
|
||||
+36
-5
@@ -20,16 +20,42 @@ namespace ts.server {
|
||||
}
|
||||
}
|
||||
|
||||
function isJsOrDtsFile(info: ScriptInfo) {
|
||||
return info.scriptKind === ScriptKind.JS || info.scriptKind == ScriptKind.JSX || fileExtensionIs(info.fileName, ".d.ts");
|
||||
function countEachFileTypes(infos: ScriptInfo[]): { js: number, jsx: number, ts: number, tsx: number, dts: number } {
|
||||
const result = { js: 0, jsx: 0, ts: 0, tsx: 0, dts: 0 };
|
||||
for (const info of infos) {
|
||||
switch (info.scriptKind) {
|
||||
case ScriptKind.JS:
|
||||
result.js += 1;
|
||||
break;
|
||||
case ScriptKind.JSX:
|
||||
result.jsx += 1;
|
||||
break;
|
||||
case ScriptKind.TS:
|
||||
fileExtensionIs(info.fileName, ".d.ts")
|
||||
? result.dts += 1
|
||||
: result.ts += 1;
|
||||
break;
|
||||
case ScriptKind.TSX:
|
||||
result.tsx += 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function hasOneOrMoreJsAndNoTsFiles(project: Project) {
|
||||
const counts = countEachFileTypes(project.getScriptInfos());
|
||||
return counts.js > 0 && counts.ts === 0 && counts.tsx === 0;
|
||||
}
|
||||
|
||||
export function allRootFilesAreJsOrDts(project: Project): boolean {
|
||||
return project.getRootScriptInfos().every(isJsOrDtsFile);
|
||||
const counts = countEachFileTypes(project.getRootScriptInfos());
|
||||
return counts.ts === 0 && counts.tsx === 0;
|
||||
}
|
||||
|
||||
export function allFilesAreJsOrDts(project: Project): boolean {
|
||||
return project.getScriptInfos().every(isJsOrDtsFile);
|
||||
const counts = countEachFileTypes(project.getScriptInfos());
|
||||
return counts.ts === 0 && counts.tsx === 0;
|
||||
}
|
||||
|
||||
export interface ProjectFilesWithTSDiagnostics extends protocol.ProjectFiles {
|
||||
@@ -71,11 +97,16 @@ namespace ts.server {
|
||||
|
||||
public typesVersion = 0;
|
||||
|
||||
public isJsOnlyProject() {
|
||||
public isNonTsProject() {
|
||||
this.updateGraph();
|
||||
return allFilesAreJsOrDts(this);
|
||||
}
|
||||
|
||||
public isJsOnlyProject() {
|
||||
this.updateGraph();
|
||||
return hasOneOrMoreJsAndNoTsFiles(this);
|
||||
}
|
||||
|
||||
constructor(
|
||||
readonly projectKind: ProjectKind,
|
||||
readonly projectService: ProjectService,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@ namespace ts.server {
|
||||
|
||||
export class ScriptInfo {
|
||||
/**
|
||||
* All projects that include this file
|
||||
* All projects that include this file
|
||||
*/
|
||||
readonly containingProjects: Project[] = [];
|
||||
private formatCodeSettings: ts.FormatCodeSettings;
|
||||
@@ -91,7 +91,7 @@ namespace ts.server {
|
||||
return this.containingProjects[0];
|
||||
}
|
||||
|
||||
setFormatOptions(formatSettings: protocol.FormatOptions): void {
|
||||
setFormatOptions(formatSettings: FormatCodeSettings): void {
|
||||
if (formatSettings) {
|
||||
if (!this.formatCodeSettings) {
|
||||
this.formatCodeSettings = getDefaultFormatCodeSettings(this.host);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/// <reference path="..\compiler\commandLineParser.ts" />
|
||||
/// <reference path="..\services\services.ts" />
|
||||
/// <reference path="protocol.d.ts" />
|
||||
/// <reference path="session.ts" />
|
||||
|
||||
namespace ts.server {
|
||||
|
||||
+221
-135
@@ -1,6 +1,6 @@
|
||||
/// <reference path="..\compiler\commandLineParser.ts" />
|
||||
/// <reference path="..\compiler\commandLineParser.ts" />
|
||||
/// <reference path="..\services\services.ts" />
|
||||
/// <reference path="protocol.d.ts" />
|
||||
/// <reference path="protocol.ts" />
|
||||
/// <reference path="editorServices.ts" />
|
||||
|
||||
namespace ts.server {
|
||||
@@ -14,6 +14,17 @@ namespace ts.server {
|
||||
return ((1e9 * seconds) + nanoseconds) / 1000000.0;
|
||||
}
|
||||
|
||||
function shouldSkipSematicCheck(project: Project) {
|
||||
if (project.getCompilerOptions().skipLibCheck !== undefined) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((project.projectKind === ProjectKind.Inferred || project.projectKind === ProjectKind.External) && project.isJsOnlyProject()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
interface FileStart {
|
||||
file: string;
|
||||
start: ILineInfo;
|
||||
@@ -44,7 +55,8 @@ namespace ts.server {
|
||||
return {
|
||||
start: scriptInfo.positionToLineOffset(diag.start),
|
||||
end: scriptInfo.positionToLineOffset(diag.start + diag.length),
|
||||
text: ts.flattenDiagnosticMessageText(diag.messageText, "\n")
|
||||
text: ts.flattenDiagnosticMessageText(diag.messageText, "\n"),
|
||||
code: diag.code
|
||||
};
|
||||
}
|
||||
|
||||
@@ -71,69 +83,74 @@ namespace ts.server {
|
||||
}
|
||||
|
||||
export namespace CommandNames {
|
||||
export const Brace = "brace";
|
||||
export const BraceFull = "brace-full";
|
||||
export const BraceCompletion = "braceCompletion";
|
||||
export const Change = "change";
|
||||
export const Close = "close";
|
||||
export const Completions = "completions";
|
||||
export const CompletionsFull = "completions-full";
|
||||
export const CompletionDetails = "completionEntryDetails";
|
||||
export const CompileOnSaveAffectedFileList = "compileOnSaveAffectedFileList";
|
||||
export const CompileOnSaveEmitFile = "compileOnSaveEmitFile";
|
||||
export const Configure = "configure";
|
||||
export const Definition = "definition";
|
||||
export const DefinitionFull = "definition-full";
|
||||
export const Exit = "exit";
|
||||
export const Format = "format";
|
||||
export const Formatonkey = "formatonkey";
|
||||
export const FormatFull = "format-full";
|
||||
export const FormatonkeyFull = "formatonkey-full";
|
||||
export const FormatRangeFull = "formatRange-full";
|
||||
export const Geterr = "geterr";
|
||||
export const GeterrForProject = "geterrForProject";
|
||||
export const Implementation = "implementation";
|
||||
export const ImplementationFull = "implementation-full";
|
||||
export const SemanticDiagnosticsSync = "semanticDiagnosticsSync";
|
||||
export const SyntacticDiagnosticsSync = "syntacticDiagnosticsSync";
|
||||
export const NavBar = "navbar";
|
||||
export const NavBarFull = "navbar-full";
|
||||
export const Navto = "navto";
|
||||
export const NavtoFull = "navto-full";
|
||||
export const Occurrences = "occurrences";
|
||||
export const DocumentHighlights = "documentHighlights";
|
||||
export const DocumentHighlightsFull = "documentHighlights-full";
|
||||
export const Open = "open";
|
||||
export const Quickinfo = "quickinfo";
|
||||
export const QuickinfoFull = "quickinfo-full";
|
||||
export const References = "references";
|
||||
export const ReferencesFull = "references-full";
|
||||
export const Reload = "reload";
|
||||
export const Rename = "rename";
|
||||
export const RenameInfoFull = "rename-full";
|
||||
export const RenameLocationsFull = "renameLocations-full";
|
||||
export const Saveto = "saveto";
|
||||
export const SignatureHelp = "signatureHelp";
|
||||
export const SignatureHelpFull = "signatureHelp-full";
|
||||
export const TypeDefinition = "typeDefinition";
|
||||
export const ProjectInfo = "projectInfo";
|
||||
export const ReloadProjects = "reloadProjects";
|
||||
export const Unknown = "unknown";
|
||||
export const OpenExternalProject = "openExternalProject";
|
||||
export const OpenExternalProjects = "openExternalProjects";
|
||||
export const CloseExternalProject = "closeExternalProject";
|
||||
export const SynchronizeProjectList = "synchronizeProjectList";
|
||||
export const ApplyChangedToOpenFiles = "applyChangedToOpenFiles";
|
||||
export const EncodedSemanticClassificationsFull = "encodedSemanticClassifications-full";
|
||||
export const Cleanup = "cleanup";
|
||||
export const OutliningSpans = "outliningSpans";
|
||||
export const TodoComments = "todoComments";
|
||||
export const Indentation = "indentation";
|
||||
export const DocCommentTemplate = "docCommentTemplate";
|
||||
export const CompilerOptionsDiagnosticsFull = "compilerOptionsDiagnostics-full";
|
||||
export const NameOrDottedNameSpan = "nameOrDottedNameSpan";
|
||||
export const BreakpointStatement = "breakpointStatement";
|
||||
export const CompilerOptionsForInferredProjects = "compilerOptionsForInferredProjects";
|
||||
export const Brace: protocol.CommandTypes.Brace = "brace";
|
||||
export const BraceFull: protocol.CommandTypes.BraceFull = "brace-full";
|
||||
export const BraceCompletion: protocol.CommandTypes.BraceCompletion = "braceCompletion";
|
||||
export const Change: protocol.CommandTypes.Change = "change";
|
||||
export const Close: protocol.CommandTypes.Close = "close";
|
||||
export const Completions: protocol.CommandTypes.Completions = "completions";
|
||||
export const CompletionsFull: protocol.CommandTypes.CompletionsFull = "completions-full";
|
||||
export const CompletionDetails: protocol.CommandTypes.CompletionDetails = "completionEntryDetails";
|
||||
export const CompileOnSaveAffectedFileList: protocol.CommandTypes.CompileOnSaveAffectedFileList = "compileOnSaveAffectedFileList";
|
||||
export const CompileOnSaveEmitFile: protocol.CommandTypes.CompileOnSaveEmitFile = "compileOnSaveEmitFile";
|
||||
export const Configure: protocol.CommandTypes.Configure = "configure";
|
||||
export const Definition: protocol.CommandTypes.Definition = "definition";
|
||||
export const DefinitionFull: protocol.CommandTypes.DefinitionFull = "definition-full";
|
||||
export const Exit: protocol.CommandTypes.Exit = "exit";
|
||||
export const Format: protocol.CommandTypes.Format = "format";
|
||||
export const Formatonkey: protocol.CommandTypes.Formatonkey = "formatonkey";
|
||||
export const FormatFull: protocol.CommandTypes.FormatFull = "format-full";
|
||||
export const FormatonkeyFull: protocol.CommandTypes.FormatonkeyFull = "formatonkey-full";
|
||||
export const FormatRangeFull: protocol.CommandTypes.FormatRangeFull = "formatRange-full";
|
||||
export const Geterr: protocol.CommandTypes.Geterr = "geterr";
|
||||
export const GeterrForProject: protocol.CommandTypes.GeterrForProject = "geterrForProject";
|
||||
export const Implementation: protocol.CommandTypes.Implementation = "implementation";
|
||||
export const ImplementationFull: protocol.CommandTypes.ImplementationFull = "implementation-full";
|
||||
export const SemanticDiagnosticsSync: protocol.CommandTypes.SemanticDiagnosticsSync = "semanticDiagnosticsSync";
|
||||
export const SyntacticDiagnosticsSync: protocol.CommandTypes.SyntacticDiagnosticsSync = "syntacticDiagnosticsSync";
|
||||
export const NavBar: protocol.CommandTypes.NavBar = "navbar";
|
||||
export const NavBarFull: protocol.CommandTypes.NavBarFull = "navbar-full";
|
||||
export const NavTree: protocol.CommandTypes.NavTree = "navtree";
|
||||
export const NavTreeFull: protocol.CommandTypes.NavTreeFull = "navtree-full";
|
||||
export const Navto: protocol.CommandTypes.Navto = "navto";
|
||||
export const NavtoFull: protocol.CommandTypes.NavtoFull = "navto-full";
|
||||
export const Occurrences: protocol.CommandTypes.Occurrences = "occurrences";
|
||||
export const DocumentHighlights: protocol.CommandTypes.DocumentHighlights = "documentHighlights";
|
||||
export const DocumentHighlightsFull: protocol.CommandTypes.DocumentHighlightsFull = "documentHighlights-full";
|
||||
export const Open: protocol.CommandTypes.Open = "open";
|
||||
export const Quickinfo: protocol.CommandTypes.Quickinfo = "quickinfo";
|
||||
export const QuickinfoFull: protocol.CommandTypes.QuickinfoFull = "quickinfo-full";
|
||||
export const References: protocol.CommandTypes.References = "references";
|
||||
export const ReferencesFull: protocol.CommandTypes.ReferencesFull = "references-full";
|
||||
export const Reload: protocol.CommandTypes.Reload = "reload";
|
||||
export const Rename: protocol.CommandTypes.Rename = "rename";
|
||||
export const RenameInfoFull: protocol.CommandTypes.RenameInfoFull = "rename-full";
|
||||
export const RenameLocationsFull: protocol.CommandTypes.RenameLocationsFull = "renameLocations-full";
|
||||
export const Saveto: protocol.CommandTypes.Saveto = "saveto";
|
||||
export const SignatureHelp: protocol.CommandTypes.SignatureHelp = "signatureHelp";
|
||||
export const SignatureHelpFull: protocol.CommandTypes.SignatureHelpFull = "signatureHelp-full";
|
||||
export const TypeDefinition: protocol.CommandTypes.TypeDefinition = "typeDefinition";
|
||||
export const ProjectInfo: protocol.CommandTypes.ProjectInfo = "projectInfo";
|
||||
export const ReloadProjects: protocol.CommandTypes.ReloadProjects = "reloadProjects";
|
||||
export const Unknown: protocol.CommandTypes.Unknown = "unknown";
|
||||
export const OpenExternalProject: protocol.CommandTypes.OpenExternalProject = "openExternalProject";
|
||||
export const OpenExternalProjects: protocol.CommandTypes.OpenExternalProjects = "openExternalProjects";
|
||||
export const CloseExternalProject: protocol.CommandTypes.CloseExternalProject = "closeExternalProject";
|
||||
export const SynchronizeProjectList: protocol.CommandTypes.SynchronizeProjectList = "synchronizeProjectList";
|
||||
export const ApplyChangedToOpenFiles: protocol.CommandTypes.ApplyChangedToOpenFiles = "applyChangedToOpenFiles";
|
||||
export const EncodedSemanticClassificationsFull: protocol.CommandTypes.EncodedSemanticClassificationsFull = "encodedSemanticClassifications-full";
|
||||
export const Cleanup: protocol.CommandTypes.Cleanup = "cleanup";
|
||||
export const OutliningSpans: protocol.CommandTypes.OutliningSpans = "outliningSpans";
|
||||
export const TodoComments: protocol.CommandTypes.TodoComments = "todoComments";
|
||||
export const Indentation: protocol.CommandTypes.Indentation = "indentation";
|
||||
export const DocCommentTemplate: protocol.CommandTypes.DocCommentTemplate = "docCommentTemplate";
|
||||
export const CompilerOptionsDiagnosticsFull: protocol.CommandTypes.CompilerOptionsDiagnosticsFull = "compilerOptionsDiagnostics-full";
|
||||
export const NameOrDottedNameSpan: protocol.CommandTypes.NameOrDottedNameSpan = "nameOrDottedNameSpan";
|
||||
export const BreakpointStatement: protocol.CommandTypes.BreakpointStatement = "breakpointStatement";
|
||||
export const CompilerOptionsForInferredProjects: protocol.CommandTypes.CompilerOptionsForInferredProjects = "compilerOptionsForInferredProjects";
|
||||
export const GetCodeFixes: protocol.CommandTypes.GetCodeFixes = "getCodeFixes";
|
||||
export const GetCodeFixesFull: protocol.CommandTypes.GetCodeFixesFull = "getCodeFixes-full";
|
||||
export const GetSupportedCodeFixes: protocol.CommandTypes.GetSupportedCodeFixes = "getSupportedCodeFixes";
|
||||
}
|
||||
|
||||
export function formatMessage<T extends protocol.Message>(msg: T, logger: server.Logger, byteLength: (s: string, encoding: string) => number, newLine: string): string {
|
||||
@@ -155,6 +172,8 @@ namespace ts.server {
|
||||
private immediateId: any;
|
||||
private changeSeq = 0;
|
||||
|
||||
private eventHander: ProjectServiceEventHandler;
|
||||
|
||||
constructor(
|
||||
private host: ServerHost,
|
||||
cancellationToken: HostCancellationToken,
|
||||
@@ -163,17 +182,18 @@ namespace ts.server {
|
||||
private byteLength: (buf: string, encoding?: string) => number,
|
||||
private hrtime: (start?: number[]) => number[],
|
||||
protected logger: Logger,
|
||||
protected readonly canUseEvents: boolean) {
|
||||
protected readonly canUseEvents: boolean,
|
||||
eventHandler?: ProjectServiceEventHandler) {
|
||||
|
||||
const eventHandler: ProjectServiceEventHandler = canUseEvents
|
||||
? event => this.handleEvent(event)
|
||||
this.eventHander = canUseEvents
|
||||
? eventHandler || (event => this.defaultEventHandler(event))
|
||||
: undefined;
|
||||
|
||||
this.projectService = new ProjectService(host, logger, cancellationToken, useSingleInferredProject, typingsInstaller, eventHandler);
|
||||
this.projectService = new ProjectService(host, logger, cancellationToken, useSingleInferredProject, typingsInstaller, this.eventHander);
|
||||
this.gcTimer = new GcTimer(host, /*delay*/ 7000, logger);
|
||||
}
|
||||
|
||||
private handleEvent(event: ProjectServiceEvent) {
|
||||
private defaultEventHandler(event: ProjectServiceEvent) {
|
||||
switch (event.eventName) {
|
||||
case "context":
|
||||
const { project, fileName } = event.data;
|
||||
@@ -252,12 +272,13 @@ namespace ts.server {
|
||||
|
||||
private semanticCheck(file: NormalizedPath, project: Project) {
|
||||
try {
|
||||
const diags = project.getLanguageService().getSemanticDiagnostics(file);
|
||||
|
||||
if (diags) {
|
||||
const bakedDiags = diags.map((diag) => formatDiag(file, project, diag));
|
||||
this.event({ file: file, diagnostics: bakedDiags }, "semanticDiag");
|
||||
let diags: Diagnostic[] = [];
|
||||
if (!shouldSkipSematicCheck(project)) {
|
||||
diags = project.getLanguageService().getSemanticDiagnostics(file);
|
||||
}
|
||||
|
||||
const bakedDiags = diags.map((diag) => formatDiag(file, project, diag));
|
||||
this.event({ file: file, diagnostics: bakedDiags }, "semanticDiag");
|
||||
}
|
||||
catch (err) {
|
||||
this.logError(err, "semantic check");
|
||||
@@ -342,7 +363,7 @@ namespace ts.server {
|
||||
}
|
||||
}
|
||||
|
||||
private getEncodedSemanticClassifications(args: protocol.FileSpanRequestArgs) {
|
||||
private getEncodedSemanticClassifications(args: protocol.EncodedSemanticClassificationsRequestArgs) {
|
||||
const { file, project } = this.getFileAndProject(args);
|
||||
return project.getLanguageService().getEncodedSemanticClassifications(file, args);
|
||||
}
|
||||
@@ -351,7 +372,7 @@ namespace ts.server {
|
||||
return projectFileName && this.projectService.findProject(projectFileName);
|
||||
}
|
||||
|
||||
private getCompilerOptionsDiagnostics(args: protocol.ProjectRequestArgs) {
|
||||
private getCompilerOptionsDiagnostics(args: protocol.CompilerOptionsDiagnosticsRequestArgs) {
|
||||
const project = this.getProject(args.projectFileName);
|
||||
return this.convertToDiagnosticsWithLinePosition(project.getLanguageService().getCompilerOptionsDiagnostics(), /*scriptInfo*/ undefined);
|
||||
}
|
||||
@@ -370,6 +391,9 @@ namespace ts.server {
|
||||
|
||||
private getDiagnosticsWorker(args: protocol.FileRequestArgs, selector: (project: Project, file: string) => Diagnostic[], includeLinePosition: boolean) {
|
||||
const { project, file } = this.getFileAndProject(args);
|
||||
if (shouldSkipSematicCheck(project)) {
|
||||
return [];
|
||||
}
|
||||
const scriptInfo = project.getScriptInfoForNormalizedPath(file);
|
||||
const diagnostics = selector(project, file);
|
||||
return includeLinePosition
|
||||
@@ -547,7 +571,7 @@ namespace ts.server {
|
||||
const scriptInfo = this.projectService.getScriptInfo(args.file);
|
||||
projects = scriptInfo.containingProjects;
|
||||
}
|
||||
// ts.filter handles case when 'projects' is undefined
|
||||
// ts.filter handles case when 'projects' is undefined
|
||||
projects = filter(projects, p => p.languageServiceEnabled);
|
||||
if (!projects || !projects.length) {
|
||||
return Errors.ThrowNoProject();
|
||||
@@ -734,8 +758,11 @@ namespace ts.server {
|
||||
*/
|
||||
private openClientFile(fileName: NormalizedPath, fileContent?: string, scriptKind?: ScriptKind) {
|
||||
const { configFileName, configFileErrors } = this.projectService.openClientFileWithNormalizedPath(fileName, fileContent, scriptKind);
|
||||
if (configFileErrors) {
|
||||
this.configFileDiagnosticEvent(fileName, configFileName, configFileErrors);
|
||||
if (this.eventHander) {
|
||||
this.eventHander({
|
||||
eventName: "configFileDiag",
|
||||
data: { fileName, configFileName, diagnostics: configFileErrors || [] }
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -751,7 +778,7 @@ namespace ts.server {
|
||||
return this.getFileAndProjectWorker(args.file, args.projectFileName, /*refreshInferredProjects*/ false, errorOnMissingProject);
|
||||
}
|
||||
|
||||
private getFileAndProjectWorker(uncheckedFileName: string, projectFileName: string, refreshInferredProjects: boolean, errorOnMissingProject: boolean) {
|
||||
private getFileAndProjectWorker(uncheckedFileName: string, projectFileName: string, refreshInferredProjects: boolean, errorOnMissingProject: boolean) {
|
||||
const file = toNormalizedPath(uncheckedFileName);
|
||||
const project: Project = this.getProject(projectFileName) || this.projectService.getDefaultProjectForFile(file, refreshInferredProjects);
|
||||
if (!project && errorOnMissingProject) {
|
||||
@@ -842,13 +869,7 @@ namespace ts.server {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return edits.map((edit) => {
|
||||
return {
|
||||
start: scriptInfo.positionToLineOffset(edit.span.start),
|
||||
end: scriptInfo.positionToLineOffset(ts.textSpanEnd(edit.span)),
|
||||
newText: edit.newText ? edit.newText : ""
|
||||
};
|
||||
});
|
||||
return edits.map(edit => this.convertTextChangeToCodeEdit(edit, scriptInfo));
|
||||
}
|
||||
|
||||
private getFormattingEditsForRangeFull(args: protocol.FormatRequestArgs) {
|
||||
@@ -941,15 +962,8 @@ namespace ts.server {
|
||||
return completions.entries.reduce((result: protocol.CompletionEntry[], entry: ts.CompletionEntry) => {
|
||||
if (completions.isMemberCompletion || (entry.name.toLowerCase().indexOf(prefix.toLowerCase()) === 0)) {
|
||||
const { name, kind, kindModifiers, sortText, replacementSpan } = entry;
|
||||
|
||||
let convertedSpan: protocol.TextSpan = undefined;
|
||||
if (replacementSpan) {
|
||||
convertedSpan = {
|
||||
start: scriptInfo.positionToLineOffset(replacementSpan.start),
|
||||
end: scriptInfo.positionToLineOffset(replacementSpan.start + replacementSpan.length)
|
||||
};
|
||||
}
|
||||
|
||||
const convertedSpan: protocol.TextSpan =
|
||||
replacementSpan ? this.decorateSpan(replacementSpan, scriptInfo) : undefined;
|
||||
result.push({ name, kind, kindModifiers, sortText, replacementSpan: convertedSpan });
|
||||
}
|
||||
return result;
|
||||
@@ -1087,22 +1101,13 @@ namespace ts.server {
|
||||
this.projectService.closeClientFile(file);
|
||||
}
|
||||
|
||||
private decorateNavigationBarItem(project: Project, fileName: NormalizedPath, items: ts.NavigationBarItem[]): protocol.NavigationBarItem[] {
|
||||
if (!items) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const scriptInfo = project.getScriptInfoForNormalizedPath(fileName);
|
||||
|
||||
return items.map(item => ({
|
||||
private decorateNavigationBarItems(items: ts.NavigationBarItem[], scriptInfo: ScriptInfo): protocol.NavigationBarItem[] {
|
||||
return map(items, item => ({
|
||||
text: item.text,
|
||||
kind: item.kind,
|
||||
kindModifiers: item.kindModifiers,
|
||||
spans: item.spans.map(span => ({
|
||||
start: scriptInfo.positionToLineOffset(span.start),
|
||||
end: scriptInfo.positionToLineOffset(ts.textSpanEnd(span))
|
||||
})),
|
||||
childItems: this.decorateNavigationBarItem(project, fileName, item.childItems),
|
||||
spans: item.spans.map(span => this.decorateSpan(span, scriptInfo)),
|
||||
childItems: this.decorateNavigationBarItems(item.childItems, scriptInfo),
|
||||
indent: item.indent
|
||||
}));
|
||||
}
|
||||
@@ -1110,15 +1115,40 @@ namespace ts.server {
|
||||
private getNavigationBarItems(args: protocol.FileRequestArgs, simplifiedResult: boolean): protocol.NavigationBarItem[] | NavigationBarItem[] {
|
||||
const { file, project } = this.getFileAndProject(args);
|
||||
const items = project.getLanguageService(/*ensureSynchronized*/ false).getNavigationBarItems(file);
|
||||
if (!items) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return simplifiedResult
|
||||
? this.decorateNavigationBarItem(project, file, items)
|
||||
return !items
|
||||
? undefined
|
||||
: simplifiedResult
|
||||
? this.decorateNavigationBarItems(items, project.getScriptInfoForNormalizedPath(file))
|
||||
: items;
|
||||
}
|
||||
|
||||
private decorateNavigationTree(tree: ts.NavigationTree, scriptInfo: ScriptInfo): protocol.NavigationTree {
|
||||
return {
|
||||
text: tree.text,
|
||||
kind: tree.kind,
|
||||
kindModifiers: tree.kindModifiers,
|
||||
spans: tree.spans.map(span => this.decorateSpan(span, scriptInfo)),
|
||||
childItems: map(tree.childItems, item => this.decorateNavigationTree(item, scriptInfo))
|
||||
};
|
||||
}
|
||||
|
||||
private decorateSpan(span: TextSpan, scriptInfo: ScriptInfo): protocol.TextSpan {
|
||||
return {
|
||||
start: scriptInfo.positionToLineOffset(span.start),
|
||||
end: scriptInfo.positionToLineOffset(ts.textSpanEnd(span))
|
||||
};
|
||||
}
|
||||
|
||||
private getNavigationTree(args: protocol.FileRequestArgs, simplifiedResult: boolean): protocol.NavigationTree | NavigationTree {
|
||||
const { file, project } = this.getFileAndProject(args);
|
||||
const tree = project.getLanguageService(/*ensureSynchronized*/ false).getNavigationTree(file);
|
||||
return !tree
|
||||
? undefined
|
||||
: simplifiedResult
|
||||
? this.decorateNavigationTree(tree, project.getScriptInfoForNormalizedPath(file))
|
||||
: tree;
|
||||
}
|
||||
|
||||
private getNavigateToItems(args: protocol.NavtoRequestArgs, simplifiedResult: boolean): protocol.NavtoItem[] | NavigateToItem[] {
|
||||
const projects = this.getProjects(args);
|
||||
|
||||
@@ -1127,7 +1157,7 @@ namespace ts.server {
|
||||
return combineProjectOutput(
|
||||
projects,
|
||||
project => {
|
||||
const navItems = project.getLanguageService().getNavigateToItems(args.searchValue, args.maxResultCount, fileName, /*excludeDts*/ project.isJsOnlyProject());
|
||||
const navItems = project.getLanguageService().getNavigateToItems(args.searchValue, args.maxResultCount, fileName, /*excludeDts*/ project.isNonTsProject());
|
||||
if (!navItems) {
|
||||
return [];
|
||||
}
|
||||
@@ -1165,7 +1195,7 @@ namespace ts.server {
|
||||
else {
|
||||
return combineProjectOutput(
|
||||
projects,
|
||||
project => project.getLanguageService().getNavigateToItems(args.searchValue, args.maxResultCount, fileName, /*excludeDts*/ project.isJsOnlyProject()),
|
||||
project => project.getLanguageService().getNavigateToItems(args.searchValue, args.maxResultCount, fileName, /*excludeDts*/ project.isNonTsProject()),
|
||||
/*comparer*/ undefined,
|
||||
navigateToItemIsEqualTo);
|
||||
}
|
||||
@@ -1199,6 +1229,55 @@ namespace ts.server {
|
||||
}
|
||||
}
|
||||
|
||||
private getSupportedCodeFixes(): string[] {
|
||||
return ts.getSupportedCodeFixes();
|
||||
}
|
||||
|
||||
private getCodeFixes(args: protocol.CodeFixRequestArgs, simplifiedResult: boolean): protocol.CodeAction[] | CodeAction[] {
|
||||
const { file, project } = this.getFileAndProjectWithoutRefreshingInferredProjects(args);
|
||||
|
||||
const scriptInfo = project.getScriptInfoForNormalizedPath(file);
|
||||
const startPosition = getStartPosition();
|
||||
const endPosition = getEndPosition();
|
||||
|
||||
const codeActions = project.getLanguageService().getCodeFixesAtPosition(file, startPosition, endPosition, args.errorCodes);
|
||||
if (!codeActions) {
|
||||
return undefined;
|
||||
}
|
||||
if (simplifiedResult) {
|
||||
return codeActions.map(codeAction => this.mapCodeAction(codeAction, scriptInfo));
|
||||
}
|
||||
else {
|
||||
return codeActions;
|
||||
}
|
||||
|
||||
function getStartPosition() {
|
||||
return args.startPosition !== undefined ? args.startPosition : scriptInfo.lineOffsetToPosition(args.startLine, args.startOffset);
|
||||
}
|
||||
|
||||
function getEndPosition() {
|
||||
return args.endPosition !== undefined ? args.endPosition : scriptInfo.lineOffsetToPosition(args.endLine, args.endOffset);
|
||||
}
|
||||
}
|
||||
|
||||
private mapCodeAction(codeAction: CodeAction, scriptInfo: ScriptInfo): protocol.CodeAction {
|
||||
return {
|
||||
description: codeAction.description,
|
||||
changes: codeAction.changes.map(change => ({
|
||||
fileName: change.fileName,
|
||||
textChanges: change.textChanges.map(textChange => this.convertTextChangeToCodeEdit(textChange, scriptInfo))
|
||||
}))
|
||||
};
|
||||
}
|
||||
|
||||
private convertTextChangeToCodeEdit(change: ts.TextChange, scriptInfo: ScriptInfo): protocol.CodeEdit {
|
||||
return {
|
||||
start: scriptInfo.positionToLineOffset(change.span.start),
|
||||
end: scriptInfo.positionToLineOffset(change.span.start + change.span.length),
|
||||
newText: change.newText ? change.newText : ""
|
||||
};
|
||||
}
|
||||
|
||||
private getBraceMatching(args: protocol.FileLocationRequestArgs, simplifiedResult: boolean): protocol.TextSpan[] | TextSpan[] {
|
||||
const { file, project } = this.getFileAndProjectWithoutRefreshingInferredProjects(args);
|
||||
|
||||
@@ -1206,19 +1285,11 @@ namespace ts.server {
|
||||
const position = this.getPosition(args, scriptInfo);
|
||||
|
||||
const spans = project.getLanguageService(/*ensureSynchronized*/ false).getBraceMatchingAtPosition(file, position);
|
||||
if (!spans) {
|
||||
return undefined;
|
||||
}
|
||||
if (simplifiedResult) {
|
||||
|
||||
return spans.map(span => ({
|
||||
start: scriptInfo.positionToLineOffset(span.start),
|
||||
end: scriptInfo.positionToLineOffset(span.start + span.length)
|
||||
}));
|
||||
}
|
||||
else {
|
||||
return spans;
|
||||
}
|
||||
return !spans
|
||||
? undefined
|
||||
: simplifiedResult
|
||||
? spans.map(span => this.decorateSpan(span, scriptInfo))
|
||||
: spans;
|
||||
}
|
||||
|
||||
getDiagnosticsForProject(delay: number, fileName: string) {
|
||||
@@ -1399,7 +1470,7 @@ namespace ts.server {
|
||||
[CommandNames.BraceCompletion]: (request: protocol.BraceCompletionRequest) => {
|
||||
return this.requiredResponse(this.isValidBraceCompletion(request.arguments));
|
||||
},
|
||||
[CommandNames.DocCommentTemplate]: (request: protocol.FileLocationRequest) => {
|
||||
[CommandNames.DocCommentTemplate]: (request: protocol.DocCommentTemplateRequest) => {
|
||||
return this.requiredResponse(this.getDocCommentTemplate(request.arguments));
|
||||
},
|
||||
[CommandNames.Format]: (request: protocol.FormatRequest) => {
|
||||
@@ -1438,10 +1509,10 @@ namespace ts.server {
|
||||
[CommandNames.SignatureHelpFull]: (request: protocol.SignatureHelpRequest) => {
|
||||
return this.requiredResponse(this.getSignatureHelpItems(request.arguments, /*simplifiedResult*/ false));
|
||||
},
|
||||
[CommandNames.CompilerOptionsDiagnosticsFull]: (request: protocol.ProjectRequest) => {
|
||||
[CommandNames.CompilerOptionsDiagnosticsFull]: (request: protocol.CompilerOptionsDiagnosticsRequest) => {
|
||||
return this.requiredResponse(this.getCompilerOptionsDiagnostics(request.arguments));
|
||||
},
|
||||
[CommandNames.EncodedSemanticClassificationsFull]: (request: protocol.FileSpanRequest) => {
|
||||
[CommandNames.EncodedSemanticClassificationsFull]: (request: protocol.EncodedSemanticClassificationsRequest) => {
|
||||
return this.requiredResponse(this.getEncodedSemanticClassifications(request.arguments));
|
||||
},
|
||||
[CommandNames.Cleanup]: (request: protocol.Request) => {
|
||||
@@ -1503,6 +1574,12 @@ namespace ts.server {
|
||||
[CommandNames.NavBarFull]: (request: protocol.FileRequest) => {
|
||||
return this.requiredResponse(this.getNavigationBarItems(request.arguments, /*simplifiedResult*/ false));
|
||||
},
|
||||
[CommandNames.NavTree]: (request: protocol.FileRequest) => {
|
||||
return this.requiredResponse(this.getNavigationTree(request.arguments, /*simplifiedResult*/ true));
|
||||
},
|
||||
[CommandNames.NavTreeFull]: (request: protocol.FileRequest) => {
|
||||
return this.requiredResponse(this.getNavigationTree(request.arguments, /*simplifiedResult*/ false));
|
||||
},
|
||||
[CommandNames.Occurrences]: (request: protocol.FileLocationRequest) => {
|
||||
return this.requiredResponse(this.getOccurrences(request.arguments));
|
||||
},
|
||||
@@ -1521,6 +1598,15 @@ namespace ts.server {
|
||||
[CommandNames.ReloadProjects]: (request: protocol.ReloadProjectsRequest) => {
|
||||
this.projectService.reloadProjects();
|
||||
return this.notRequired();
|
||||
},
|
||||
[CommandNames.GetCodeFixes]: (request: protocol.CodeFixRequest) => {
|
||||
return this.requiredResponse(this.getCodeFixes(request.arguments, /*simplifiedResult*/ true));
|
||||
},
|
||||
[CommandNames.GetCodeFixesFull]: (request: protocol.CodeFixRequest) => {
|
||||
return this.requiredResponse(this.getCodeFixes(request.arguments, /*simplifiedResult*/ false));
|
||||
},
|
||||
[CommandNames.GetSupportedCodeFixes]: (request: protocol.Request) => {
|
||||
return this.requiredResponse(this.getSupportedCodeFixes());
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"typingsCache.ts",
|
||||
"project.ts",
|
||||
"editorServices.ts",
|
||||
"protocol.d.ts",
|
||||
"protocol.ts",
|
||||
"session.ts",
|
||||
"server.ts"
|
||||
]
|
||||
|
||||
+44
-42
@@ -157,51 +157,53 @@ namespace ts.server {
|
||||
}
|
||||
};
|
||||
}
|
||||
function throwLanguageServiceIsDisabledError() {
|
||||
function throwLanguageServiceIsDisabledError(): never {
|
||||
throw new Error("LanguageService is disabled");
|
||||
}
|
||||
|
||||
export const nullLanguageService: LanguageService = {
|
||||
cleanupSemanticCache: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getSyntacticDiagnostics: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getSemanticDiagnostics: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getCompilerOptionsDiagnostics: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getSyntacticClassifications: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getEncodedSyntacticClassifications: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getSemanticClassifications: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getEncodedSemanticClassifications: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getCompletionsAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
findReferences: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getCompletionEntryDetails: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getQuickInfoAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
findRenameLocations: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getNameOrDottedNameSpan: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getBreakpointStatementAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getBraceMatchingAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getSignatureHelpItems: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getDefinitionAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getRenameInfo: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getTypeDefinitionAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getReferencesAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getDocumentHighlights: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getOccurrencesAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getNavigateToItems: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getNavigationBarItems: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getOutliningSpans: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getTodoComments: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getIndentationAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getFormattingEditsForRange: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getFormattingEditsForDocument: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getFormattingEditsAfterKeystroke: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getDocCommentTemplateAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
isValidBraceCompletionAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getEmitOutput: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getProgram: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getNonBoundSourceFile: (): any => throwLanguageServiceIsDisabledError(),
|
||||
dispose: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getCompletionEntrySymbol: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getImplementationAtPosition: (): any => throwLanguageServiceIsDisabledError(),
|
||||
getSourceFile: (): any => throwLanguageServiceIsDisabledError()
|
||||
cleanupSemanticCache: throwLanguageServiceIsDisabledError,
|
||||
getSyntacticDiagnostics: throwLanguageServiceIsDisabledError,
|
||||
getSemanticDiagnostics: throwLanguageServiceIsDisabledError,
|
||||
getCompilerOptionsDiagnostics: throwLanguageServiceIsDisabledError,
|
||||
getSyntacticClassifications: throwLanguageServiceIsDisabledError,
|
||||
getEncodedSyntacticClassifications: throwLanguageServiceIsDisabledError,
|
||||
getSemanticClassifications: throwLanguageServiceIsDisabledError,
|
||||
getEncodedSemanticClassifications: throwLanguageServiceIsDisabledError,
|
||||
getCompletionsAtPosition: throwLanguageServiceIsDisabledError,
|
||||
findReferences: throwLanguageServiceIsDisabledError,
|
||||
getCompletionEntryDetails: throwLanguageServiceIsDisabledError,
|
||||
getQuickInfoAtPosition: throwLanguageServiceIsDisabledError,
|
||||
findRenameLocations: throwLanguageServiceIsDisabledError,
|
||||
getNameOrDottedNameSpan: throwLanguageServiceIsDisabledError,
|
||||
getBreakpointStatementAtPosition: throwLanguageServiceIsDisabledError,
|
||||
getBraceMatchingAtPosition: throwLanguageServiceIsDisabledError,
|
||||
getSignatureHelpItems: throwLanguageServiceIsDisabledError,
|
||||
getDefinitionAtPosition: throwLanguageServiceIsDisabledError,
|
||||
getRenameInfo: throwLanguageServiceIsDisabledError,
|
||||
getTypeDefinitionAtPosition: throwLanguageServiceIsDisabledError,
|
||||
getReferencesAtPosition: throwLanguageServiceIsDisabledError,
|
||||
getDocumentHighlights: throwLanguageServiceIsDisabledError,
|
||||
getOccurrencesAtPosition: throwLanguageServiceIsDisabledError,
|
||||
getNavigateToItems: throwLanguageServiceIsDisabledError,
|
||||
getNavigationBarItems: throwLanguageServiceIsDisabledError,
|
||||
getNavigationTree: throwLanguageServiceIsDisabledError,
|
||||
getOutliningSpans: throwLanguageServiceIsDisabledError,
|
||||
getTodoComments: throwLanguageServiceIsDisabledError,
|
||||
getIndentationAtPosition: throwLanguageServiceIsDisabledError,
|
||||
getFormattingEditsForRange: throwLanguageServiceIsDisabledError,
|
||||
getFormattingEditsForDocument: throwLanguageServiceIsDisabledError,
|
||||
getFormattingEditsAfterKeystroke: throwLanguageServiceIsDisabledError,
|
||||
getDocCommentTemplateAtPosition: throwLanguageServiceIsDisabledError,
|
||||
isValidBraceCompletionAtPosition: throwLanguageServiceIsDisabledError,
|
||||
getEmitOutput: throwLanguageServiceIsDisabledError,
|
||||
getProgram: throwLanguageServiceIsDisabledError,
|
||||
getNonBoundSourceFile: throwLanguageServiceIsDisabledError,
|
||||
dispose: throwLanguageServiceIsDisabledError,
|
||||
getCompletionEntrySymbol: throwLanguageServiceIsDisabledError,
|
||||
getImplementationAtPosition: throwLanguageServiceIsDisabledError,
|
||||
getSourceFile: throwLanguageServiceIsDisabledError,
|
||||
getCodeFixesAtPosition: throwLanguageServiceIsDisabledError
|
||||
};
|
||||
|
||||
export interface ServerLanguageServiceHost {
|
||||
@@ -248,7 +250,7 @@ namespace ts.server {
|
||||
// another operation was already scheduled for this id - cancel it
|
||||
this.host.clearTimeout(this.pendingTimeouts[operationId]);
|
||||
}
|
||||
// schedule new operation, pass arguments
|
||||
// schedule new operation, pass arguments
|
||||
this.pendingTimeouts[operationId] = this.host.setTimeout(ThrottledOperations.run, delay, this, operationId, cb);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/* @internal */
|
||||
namespace ts {
|
||||
export interface CodeFix {
|
||||
errorCodes: number[];
|
||||
getCodeActions(context: CodeFixContext): CodeAction[] | undefined;
|
||||
}
|
||||
|
||||
export interface CodeFixContext {
|
||||
errorCode: number;
|
||||
sourceFile: SourceFile;
|
||||
span: TextSpan;
|
||||
program: Program;
|
||||
newLineCharacter: string;
|
||||
}
|
||||
|
||||
export namespace codefix {
|
||||
const codeFixes = createMap<CodeFix[]>();
|
||||
|
||||
export function registerCodeFix(action: CodeFix) {
|
||||
forEach(action.errorCodes, error => {
|
||||
let fixes = codeFixes[error];
|
||||
if (!fixes) {
|
||||
fixes = [];
|
||||
codeFixes[error] = fixes;
|
||||
}
|
||||
fixes.push(action);
|
||||
});
|
||||
}
|
||||
|
||||
export function getSupportedErrorCodes() {
|
||||
return Object.keys(codeFixes);
|
||||
}
|
||||
|
||||
export function getFixes(context: CodeFixContext): CodeAction[] {
|
||||
const fixes = codeFixes[context.errorCode];
|
||||
let allActions: CodeAction[] = [];
|
||||
|
||||
forEach(fixes, f => {
|
||||
const actions = f.getCodeActions(context);
|
||||
if (actions && actions.length > 0) {
|
||||
allActions = allActions.concat(actions);
|
||||
}
|
||||
});
|
||||
|
||||
return allActions;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
///<reference path='superFixes.ts' />
|
||||
@@ -0,0 +1,81 @@
|
||||
/* @internal */
|
||||
namespace ts.codefix {
|
||||
function getOpenBraceEnd(constructor: ConstructorDeclaration, sourceFile: SourceFile) {
|
||||
// First token is the open curly, this is where we want to put the 'super' call.
|
||||
return constructor.body.getFirstToken(sourceFile).getEnd();
|
||||
}
|
||||
|
||||
registerCodeFix({
|
||||
errorCodes: [Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call.code],
|
||||
getCodeActions: (context: CodeFixContext) => {
|
||||
const sourceFile = context.sourceFile;
|
||||
const token = getTokenAtPosition(sourceFile, context.span.start);
|
||||
|
||||
if (token.kind !== SyntaxKind.ConstructorKeyword) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const newPosition = getOpenBraceEnd(<ConstructorDeclaration>token.parent, sourceFile);
|
||||
return [{
|
||||
description: getLocaleSpecificMessage(Diagnostics.Add_missing_super_call),
|
||||
changes: [{ fileName: sourceFile.fileName, textChanges: [{ newText: "super();", span: { start: newPosition, length: 0 } }] }]
|
||||
}];
|
||||
}
|
||||
});
|
||||
|
||||
registerCodeFix({
|
||||
errorCodes: [Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class.code],
|
||||
getCodeActions: (context: CodeFixContext) => {
|
||||
const sourceFile = context.sourceFile;
|
||||
|
||||
const token = getTokenAtPosition(sourceFile, context.span.start);
|
||||
if (token.kind !== SyntaxKind.ThisKeyword) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const constructor = getContainingFunction(token);
|
||||
const superCall = findSuperCall((<ConstructorDeclaration>constructor).body);
|
||||
if (!superCall) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// figure out if the this access is actuall inside the supercall
|
||||
// i.e. super(this.a), since in that case we won't suggest a fix
|
||||
if (superCall.expression && superCall.expression.kind == SyntaxKind.CallExpression) {
|
||||
const arguments = (<CallExpression>superCall.expression).arguments;
|
||||
for (let i = 0; i < arguments.length; i++) {
|
||||
if ((<PropertyAccessExpression>arguments[i]).expression === token) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const newPosition = getOpenBraceEnd(<ConstructorDeclaration>constructor, sourceFile);
|
||||
const changes = [{
|
||||
fileName: sourceFile.fileName, textChanges: [{
|
||||
newText: superCall.getText(sourceFile),
|
||||
span: { start: newPosition, length: 0 }
|
||||
},
|
||||
{
|
||||
newText: "",
|
||||
span: { start: superCall.getStart(sourceFile), length: superCall.getWidth(sourceFile) }
|
||||
}]
|
||||
}];
|
||||
|
||||
return [{
|
||||
description: getLocaleSpecificMessage(Diagnostics.Make_super_call_the_first_statement_in_the_constructor),
|
||||
changes
|
||||
}];
|
||||
|
||||
function findSuperCall(n: Node): ExpressionStatement {
|
||||
if (n.kind === SyntaxKind.ExpressionStatement && isSuperCall((<ExpressionStatement>n).expression)) {
|
||||
return <ExpressionStatement>n;
|
||||
}
|
||||
if (isFunctionLike(n)) {
|
||||
return undefined;
|
||||
}
|
||||
return forEachChild(n, findSuperCall);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
+51
-18
@@ -325,15 +325,28 @@ namespace ts.Completions {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a path ending at a directory, gets the completions for the path, and filters for those entries containing the basename.
|
||||
*/
|
||||
function getCompletionEntriesForDirectoryFragment(fragment: string, scriptPath: string, extensions: string[], includeExtensions: boolean, span: TextSpan, exclude?: string, result: CompletionEntry[] = []): CompletionEntry[] {
|
||||
if (fragment === undefined) {
|
||||
fragment = "";
|
||||
}
|
||||
|
||||
fragment = normalizeSlashes(fragment);
|
||||
|
||||
/**
|
||||
* Remove the basename from the path. Note that we don't use the basename to filter completions;
|
||||
* the client is responsible for refining completions.
|
||||
*/
|
||||
fragment = getDirectoryPath(fragment);
|
||||
if (!fragment) {
|
||||
fragment = "./";
|
||||
}
|
||||
else {
|
||||
fragment = ensureTrailingDirectorySeparator(fragment);
|
||||
|
||||
if (fragment === "") {
|
||||
fragment = "." + directorySeparator;
|
||||
}
|
||||
|
||||
fragment = ensureTrailingDirectorySeparator(fragment);
|
||||
|
||||
const absolutePath = normalizeAndPreserveTrailingSlash(isRootedDiskPath(fragment) ? fragment : combinePaths(scriptPath, fragment));
|
||||
const baseDirectory = getDirectoryPath(absolutePath);
|
||||
const ignoreCase = !(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames());
|
||||
@@ -343,6 +356,12 @@ namespace ts.Completions {
|
||||
const files = tryReadDirectory(host, baseDirectory, extensions, /*exclude*/undefined, /*include*/["./*"]);
|
||||
|
||||
if (files) {
|
||||
/**
|
||||
* Multiple file entries might map to the same truncated name once we remove extensions
|
||||
* (happens iff includeExtensions === false)so we use a set-like data structure. Eg:
|
||||
*
|
||||
* both foo.ts and foo.tsx become foo
|
||||
*/
|
||||
const foundFiles = createMap<boolean>();
|
||||
for (let filePath of files) {
|
||||
filePath = normalizePath(filePath);
|
||||
@@ -539,36 +558,44 @@ namespace ts.Completions {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const completionInfo: CompletionInfo = {
|
||||
/**
|
||||
* We don't want the editor to offer any other completions, such as snippets, inside a comment.
|
||||
*/
|
||||
isGlobalCompletion: false,
|
||||
isMemberCompletion: false,
|
||||
/**
|
||||
* The user may type in a path that doesn't yet exist, creating a "new identifier"
|
||||
* with respect to the collection of identifiers the server is aware of.
|
||||
*/
|
||||
isNewIdentifierLocation: true,
|
||||
|
||||
entries: []
|
||||
};
|
||||
|
||||
const text = sourceFile.text.substr(range.pos, position - range.pos);
|
||||
|
||||
const match = tripleSlashDirectiveFragmentRegex.exec(text);
|
||||
|
||||
if (match) {
|
||||
const prefix = match[1];
|
||||
const kind = match[2];
|
||||
const toComplete = match[3];
|
||||
|
||||
const scriptPath = getDirectoryPath(sourceFile.path);
|
||||
let entries: CompletionEntry[];
|
||||
if (kind === "path") {
|
||||
// Give completions for a relative path
|
||||
const span: TextSpan = getDirectoryFragmentTextSpan(toComplete, range.pos + prefix.length);
|
||||
entries = getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getSupportedExtensions(compilerOptions), /*includeExtensions*/true, span, sourceFile.path);
|
||||
completionInfo.entries = getCompletionEntriesForDirectoryFragment(toComplete, scriptPath, getSupportedExtensions(compilerOptions), /*includeExtensions*/true, span, sourceFile.path);
|
||||
}
|
||||
else {
|
||||
// Give completions based on the typings available
|
||||
const span: TextSpan = { start: range.pos + prefix.length, length: match[0].length - prefix.length };
|
||||
entries = getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, span);
|
||||
completionInfo.entries = getCompletionEntriesFromTypings(host, compilerOptions, scriptPath, span);
|
||||
}
|
||||
|
||||
return {
|
||||
isGlobalCompletion: false,
|
||||
isMemberCompletion: false,
|
||||
isNewIdentifierLocation: true,
|
||||
entries
|
||||
};
|
||||
}
|
||||
|
||||
return undefined;
|
||||
return completionInfo;
|
||||
}
|
||||
|
||||
function getCompletionEntriesFromTypings(host: LanguageServiceHost, options: CompilerOptions, scriptPath: string, span: TextSpan, result: CompletionEntry[] = []): CompletionEntry[] {
|
||||
@@ -1674,9 +1701,15 @@ namespace ts.Completions {
|
||||
* Matches a triple slash reference directive with an incomplete string literal for its path. Used
|
||||
* to determine if the caret is currently within the string literal and capture the literal fragment
|
||||
* for completions.
|
||||
* For example, this matches /// <reference path="fragment
|
||||
* For example, this matches
|
||||
*
|
||||
* /// <reference path="fragment
|
||||
*
|
||||
* but not
|
||||
*
|
||||
* /// <reference path="fragment"
|
||||
*/
|
||||
const tripleSlashDirectiveFragmentRegex = /^(\/\/\/\s*<reference\s+(path|types)\s*=\s*(?:'|"))([^\3]*)$/;
|
||||
const tripleSlashDirectiveFragmentRegex = /^(\/\/\/\s*<reference\s+(path|types)\s*=\s*(?:'|"))([^\3"]*)$/;
|
||||
|
||||
interface VisibleModuleInfo {
|
||||
moduleName: string;
|
||||
|
||||
@@ -21,6 +21,13 @@ namespace ts.NavigationBar {
|
||||
return result;
|
||||
}
|
||||
|
||||
export function getNavigationTree(sourceFile: SourceFile): NavigationTree {
|
||||
curSourceFile = sourceFile;
|
||||
const result = convertToTree(rootNavigationBarNode(sourceFile));
|
||||
curSourceFile = undefined;
|
||||
return result;
|
||||
}
|
||||
|
||||
// Keep sourceFile handy so we don't have to search for it every time we need to call `getText`.
|
||||
let curSourceFile: SourceFile;
|
||||
function nodeText(node: Node): string {
|
||||
@@ -324,7 +331,7 @@ namespace ts.NavigationBar {
|
||||
}
|
||||
|
||||
// More efficient to create a collator once and use its `compare` than to call `a.localeCompare(b)` many times.
|
||||
const collator: { compare(a: string, b: string): number } = typeof Intl === "undefined" ? undefined : new Intl.Collator();
|
||||
const collator: { compare(a: string, b: string): number } = typeof Intl === "object" && typeof Intl.Collator === "function" ? new Intl.Collator() : undefined;
|
||||
// Intl is missing in Safari, and node 0.10 treats "a" as greater than "B".
|
||||
const localeCompareIsCorrect = collator && collator.compare("a", "B") < 0;
|
||||
const localeCompareFix: (a: string, b: string) => number = localeCompareIsCorrect ? collator.compare : function(a, b) {
|
||||
@@ -502,6 +509,16 @@ namespace ts.NavigationBar {
|
||||
// NavigationBarItem requires an array, but will not mutate it, so just give it this for performance.
|
||||
const emptyChildItemArray: NavigationBarItem[] = [];
|
||||
|
||||
function convertToTree(n: NavigationBarNode): NavigationTree {
|
||||
return {
|
||||
text: getItemName(n.node),
|
||||
kind: getNodeKind(n.node),
|
||||
kindModifiers: getNodeModifiers(n.node),
|
||||
spans: getSpans(n),
|
||||
childItems: map(n.children, convertToTree)
|
||||
};
|
||||
}
|
||||
|
||||
function convertToTopLevelItem(n: NavigationBarNode): NavigationBarItem {
|
||||
return {
|
||||
text: getItemName(n.node),
|
||||
@@ -526,16 +543,16 @@ namespace ts.NavigationBar {
|
||||
grayed: false
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function getSpans(n: NavigationBarNode): TextSpan[] {
|
||||
const spans = [getNodeSpan(n.node)];
|
||||
if (n.additionalNodes) {
|
||||
for (const node of n.additionalNodes) {
|
||||
spans.push(getNodeSpan(node));
|
||||
}
|
||||
function getSpans(n: NavigationBarNode): TextSpan[] {
|
||||
const spans = [getNodeSpan(n.node)];
|
||||
if (n.additionalNodes) {
|
||||
for (const node of n.additionalNodes) {
|
||||
spans.push(getNodeSpan(node));
|
||||
}
|
||||
return spans;
|
||||
}
|
||||
return spans;
|
||||
}
|
||||
|
||||
function getModuleName(moduleDeclaration: ModuleDeclaration): string {
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
/// <reference path='transpile.ts' />
|
||||
/// <reference path='formatting\formatting.ts' />
|
||||
/// <reference path='formatting\smartIndenter.ts' />
|
||||
/// <reference path='codefixes\codeFixProvider.ts' />
|
||||
/// <reference path='codefixes\fixes.ts' />
|
||||
|
||||
namespace ts {
|
||||
/** The version of the language service API */
|
||||
@@ -664,6 +666,7 @@ namespace ts {
|
||||
return {
|
||||
getNodeConstructor: () => NodeObject,
|
||||
getTokenConstructor: () => TokenObject,
|
||||
|
||||
getIdentifierConstructor: () => IdentifierObject,
|
||||
getSourceFileConstructor: () => SourceFileObject,
|
||||
getSymbolConstructor: () => SymbolObject,
|
||||
@@ -730,9 +733,13 @@ namespace ts {
|
||||
};
|
||||
}
|
||||
|
||||
// Cache host information about script should be refreshed
|
||||
export function getSupportedCodeFixes() {
|
||||
return codefix.getSupportedErrorCodes();
|
||||
}
|
||||
|
||||
// Cache host information about script Should be refreshed
|
||||
// at each language service public entry point, since we don't know when
|
||||
// set of scripts handled by the host changes.
|
||||
// the set of scripts handled by the host changes.
|
||||
class HostCache {
|
||||
private fileNameToEntry: FileMap<HostFileInformation>;
|
||||
private _compilationSettings: CompilerOptions;
|
||||
@@ -1516,9 +1523,11 @@ namespace ts {
|
||||
}
|
||||
|
||||
function getNavigationBarItems(fileName: string): NavigationBarItem[] {
|
||||
const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName);
|
||||
return NavigationBar.getNavigationBarItems(syntaxTreeCache.getCurrentSourceFile(fileName));
|
||||
}
|
||||
|
||||
return NavigationBar.getNavigationBarItems(sourceFile);
|
||||
function getNavigationTree(fileName: string): NavigationTree {
|
||||
return NavigationBar.getNavigationTree(syntaxTreeCache.getCurrentSourceFile(fileName));
|
||||
}
|
||||
|
||||
function isTsOrTsxFile(fileName: string): boolean {
|
||||
@@ -1654,6 +1663,34 @@ namespace ts {
|
||||
return [];
|
||||
}
|
||||
|
||||
function getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[]): CodeAction[] {
|
||||
synchronizeHostData();
|
||||
const sourceFile = getValidSourceFile(fileName);
|
||||
const span = { start, length: end - start };
|
||||
const newLineChar = getNewLineOrDefaultFromHost(host);
|
||||
|
||||
let allFixes: CodeAction[] = [];
|
||||
|
||||
forEach(errorCodes, error => {
|
||||
cancellationToken.throwIfCancellationRequested();
|
||||
|
||||
const context = {
|
||||
errorCode: error,
|
||||
sourceFile: sourceFile,
|
||||
span: span,
|
||||
program: program,
|
||||
newLineCharacter: newLineChar
|
||||
};
|
||||
|
||||
const fixes = codefix.getFixes(context);
|
||||
if (fixes) {
|
||||
allFixes = allFixes.concat(fixes);
|
||||
}
|
||||
});
|
||||
|
||||
return allFixes;
|
||||
}
|
||||
|
||||
function getDocCommentTemplateAtPosition(fileName: string, position: number): TextInsertion {
|
||||
return JsDoc.getDocCommentTemplateAtPosition(getNewLineOrDefaultFromHost(host), syntaxTreeCache.getCurrentSourceFile(fileName), position);
|
||||
}
|
||||
@@ -1868,6 +1905,7 @@ namespace ts {
|
||||
getRenameInfo,
|
||||
findRenameLocations,
|
||||
getNavigationBarItems,
|
||||
getNavigationTree,
|
||||
getOutliningSpans,
|
||||
getTodoComments,
|
||||
getBraceMatchingAtPosition,
|
||||
@@ -1877,6 +1915,7 @@ namespace ts {
|
||||
getFormattingEditsAfterKeystroke,
|
||||
getDocCommentTemplateAtPosition,
|
||||
isValidBraceCompletionAtPosition,
|
||||
getCodeFixesAtPosition,
|
||||
getEmitOutput,
|
||||
getNonBoundSourceFile,
|
||||
getSourceFile,
|
||||
|
||||
@@ -224,6 +224,9 @@ namespace ts {
|
||||
*/
|
||||
getNavigationBarItems(fileName: string): string;
|
||||
|
||||
/** Returns a JSON-encoded value of the type ts.NavigationTree. */
|
||||
getNavigationTree(fileName: string): string;
|
||||
|
||||
/**
|
||||
* Returns a JSON-encoded value of the type:
|
||||
* { textSpan: { start: number, length: number }; hintSpan: { start: number, length: number }; bannerText: string; autoCollapse: boolean } [] = [];
|
||||
@@ -971,6 +974,13 @@ namespace ts {
|
||||
);
|
||||
}
|
||||
|
||||
public getNavigationTree(fileName: string): string {
|
||||
return this.forwardJSONCall(
|
||||
`getNavigationTree('${fileName}')`,
|
||||
() => this.languageService.getNavigationTree(fileName)
|
||||
);
|
||||
}
|
||||
|
||||
public getOutliningSpans(fileName: string): string {
|
||||
return this.forwardJSONCall(
|
||||
`getOutliningSpans('${fileName}')`,
|
||||
|
||||
@@ -78,6 +78,8 @@
|
||||
"formatting/rulesMap.ts",
|
||||
"formatting/rulesProvider.ts",
|
||||
"formatting/smartIndenter.ts",
|
||||
"formatting/tokenRange.ts"
|
||||
"formatting/tokenRange.ts",
|
||||
"codeFixes/codeFixProvider.ts",
|
||||
"codeFixes/fixes.ts"
|
||||
]
|
||||
}
|
||||
|
||||
+62
-17
@@ -225,6 +225,7 @@ namespace ts {
|
||||
|
||||
getNavigateToItems(searchValue: string, maxResultCount?: number, fileName?: string, excludeDtsFiles?: boolean): NavigateToItem[];
|
||||
getNavigationBarItems(fileName: string): NavigationBarItem[];
|
||||
getNavigationTree(fileName: string): NavigationTree;
|
||||
|
||||
getOutliningSpans(fileName: string): OutliningSpan[];
|
||||
getTodoComments(fileName: string, descriptors: TodoCommentDescriptor[]): TodoComment[];
|
||||
@@ -239,6 +240,8 @@ namespace ts {
|
||||
|
||||
isValidBraceCompletionAtPosition(fileName: string, position: number, openingBrace: number): boolean;
|
||||
|
||||
getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[]): CodeAction[];
|
||||
|
||||
getEmitOutput(fileName: string, emitOnlyDtsFiles?: boolean): EmitOutput;
|
||||
|
||||
getProgram(): Program;
|
||||
@@ -264,6 +267,12 @@ namespace ts {
|
||||
classificationType: string; // ClassificationTypeNames
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigation bar interface designed for visual studio's dual-column layout.
|
||||
* This does not form a proper tree.
|
||||
* The navbar is returned as a list of top-level items, each of which has a list of child items.
|
||||
* Child items always have an empty array for their `childItems`.
|
||||
*/
|
||||
export interface NavigationBarItem {
|
||||
text: string;
|
||||
kind: string;
|
||||
@@ -275,6 +284,26 @@ namespace ts {
|
||||
grayed: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Node in a tree of nested declarations in a file.
|
||||
* The top node is always a script or module node.
|
||||
*/
|
||||
export interface NavigationTree {
|
||||
/** Name of the declaration, or a short description, e.g. "<class>". */
|
||||
text: string;
|
||||
/** A ScriptElementKind */
|
||||
kind: string;
|
||||
/** ScriptElementKindModifier separated by commas, e.g. "public,abstract" */
|
||||
kindModifiers: string;
|
||||
/**
|
||||
* Spans of the nodes that generated this declaration.
|
||||
* There will be more than one if this is the result of merging.
|
||||
*/
|
||||
spans: TextSpan[];
|
||||
/** Present if non-empty */
|
||||
childItems?: NavigationTree[];
|
||||
}
|
||||
|
||||
export interface TodoCommentDescriptor {
|
||||
text: string;
|
||||
priority: number;
|
||||
@@ -291,6 +320,18 @@ namespace ts {
|
||||
newText: string;
|
||||
}
|
||||
|
||||
export interface FileTextChanges {
|
||||
fileName: string;
|
||||
textChanges: TextChange[];
|
||||
}
|
||||
|
||||
export interface CodeAction {
|
||||
/** Description of the code action to display in the UI of the editor */
|
||||
description: string;
|
||||
/** Text changes to apply to each file as part of the code action */
|
||||
changes: FileTextChanges[];
|
||||
}
|
||||
|
||||
export interface TextInsertion {
|
||||
newText: string;
|
||||
/** The position in newText the caret should point to after the insertion. */
|
||||
@@ -362,11 +403,11 @@ namespace ts {
|
||||
|
||||
export interface EditorSettings {
|
||||
baseIndentSize?: number;
|
||||
indentSize: number;
|
||||
tabSize: number;
|
||||
newLineCharacter: string;
|
||||
convertTabsToSpaces: boolean;
|
||||
indentStyle: IndentStyle;
|
||||
indentSize?: number;
|
||||
tabSize?: number;
|
||||
newLineCharacter?: string;
|
||||
convertTabsToSpaces?: boolean;
|
||||
indentStyle?: IndentStyle;
|
||||
}
|
||||
|
||||
/* @deprecated - consider using FormatCodeSettings instead */
|
||||
@@ -387,19 +428,19 @@ namespace ts {
|
||||
}
|
||||
|
||||
export interface FormatCodeSettings extends EditorSettings {
|
||||
insertSpaceAfterCommaDelimiter: boolean;
|
||||
insertSpaceAfterSemicolonInForStatements: boolean;
|
||||
insertSpaceBeforeAndAfterBinaryOperators: boolean;
|
||||
insertSpaceAfterKeywordsInControlFlowStatements: boolean;
|
||||
insertSpaceAfterFunctionKeywordForAnonymousFunctions: boolean;
|
||||
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: boolean;
|
||||
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: boolean;
|
||||
insertSpaceAfterCommaDelimiter?: boolean;
|
||||
insertSpaceAfterSemicolonInForStatements?: boolean;
|
||||
insertSpaceBeforeAndAfterBinaryOperators?: boolean;
|
||||
insertSpaceAfterKeywordsInControlFlowStatements?: boolean;
|
||||
insertSpaceAfterFunctionKeywordForAnonymousFunctions?: boolean;
|
||||
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis?: boolean;
|
||||
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets?: boolean;
|
||||
insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces?: boolean;
|
||||
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: boolean;
|
||||
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: boolean;
|
||||
insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces?: boolean;
|
||||
insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces?: boolean;
|
||||
insertSpaceAfterTypeAssertion?: boolean;
|
||||
placeOpenBraceOnNewLineForFunctions: boolean;
|
||||
placeOpenBraceOnNewLineForControlBlocks: boolean;
|
||||
placeOpenBraceOnNewLineForFunctions?: boolean;
|
||||
placeOpenBraceOnNewLineForControlBlocks?: boolean;
|
||||
}
|
||||
|
||||
export interface DefinitionInfo {
|
||||
@@ -505,7 +546,11 @@ namespace ts {
|
||||
export interface CompletionInfo {
|
||||
isGlobalCompletion: boolean;
|
||||
isMemberCompletion: boolean;
|
||||
isNewIdentifierLocation: boolean; // true when the current location also allows for a new identifier
|
||||
|
||||
/**
|
||||
* true when the current location also allows for a new identifier
|
||||
*/
|
||||
isNewIdentifierLocation: boolean;
|
||||
entries: CompletionEntry[];
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
tests/cases/compiler/alwaysStrict.ts(3,9): error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
|
||||
|
||||
==== tests/cases/compiler/alwaysStrict.ts (1 errors) ====
|
||||
|
||||
function f() {
|
||||
var arguments = [];
|
||||
~~~~~~~~~
|
||||
!!! error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
//// [alwaysStrict.ts]
|
||||
|
||||
function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
|
||||
//// [alwaysStrict.js]
|
||||
"use strict";
|
||||
function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
//// [alwaysStrictAlreadyUseStrict.ts]
|
||||
"use strict"
|
||||
function f() {
|
||||
var a = [];
|
||||
}
|
||||
|
||||
//// [alwaysStrictAlreadyUseStrict.js]
|
||||
"use strict";
|
||||
function f() {
|
||||
var a = [];
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
=== tests/cases/compiler/alwaysStrictAlreadyUseStrict.ts ===
|
||||
"use strict"
|
||||
function f() {
|
||||
>f : Symbol(f, Decl(alwaysStrictAlreadyUseStrict.ts, 0, 12))
|
||||
|
||||
var a = [];
|
||||
>a : Symbol(a, Decl(alwaysStrictAlreadyUseStrict.ts, 2, 7))
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
=== tests/cases/compiler/alwaysStrictAlreadyUseStrict.ts ===
|
||||
"use strict"
|
||||
>"use strict" : "use strict"
|
||||
|
||||
function f() {
|
||||
>f : () => void
|
||||
|
||||
var a = [];
|
||||
>a : any[]
|
||||
>[] : undefined[]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
tests/cases/compiler/alwaysStrictES6.ts(3,9): error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
|
||||
|
||||
==== tests/cases/compiler/alwaysStrictES6.ts (1 errors) ====
|
||||
|
||||
function f() {
|
||||
var arguments = [];
|
||||
~~~~~~~~~
|
||||
!!! error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
//// [alwaysStrictES6.ts]
|
||||
|
||||
function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
|
||||
//// [alwaysStrictES6.js]
|
||||
"use strict";
|
||||
function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
tests/cases/compiler/alwaysStrictModule.ts(4,13): error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
|
||||
|
||||
==== tests/cases/compiler/alwaysStrictModule.ts (1 errors) ====
|
||||
|
||||
module M {
|
||||
export function f() {
|
||||
var arguments = [];
|
||||
~~~~~~~~~
|
||||
!!! error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
//// [alwaysStrictModule.ts]
|
||||
|
||||
module M {
|
||||
export function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
}
|
||||
|
||||
//// [alwaysStrictModule.js]
|
||||
"use strict";
|
||||
var M;
|
||||
(function (M) {
|
||||
function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
M.f = f;
|
||||
})(M || (M = {}));
|
||||
@@ -0,0 +1,22 @@
|
||||
tests/cases/compiler/a.ts(4,13): error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
tests/cases/compiler/b.ts(3,13): error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
|
||||
|
||||
==== tests/cases/compiler/a.ts (1 errors) ====
|
||||
|
||||
module M {
|
||||
export function f() {
|
||||
var arguments = [];
|
||||
~~~~~~~~~
|
||||
!!! error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
}
|
||||
}
|
||||
|
||||
==== tests/cases/compiler/b.ts (1 errors) ====
|
||||
module M {
|
||||
export function f2() {
|
||||
var arguments = [];
|
||||
~~~~~~~~~
|
||||
!!! error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
//// [tests/cases/compiler/alwaysStrictModule2.ts] ////
|
||||
|
||||
//// [a.ts]
|
||||
|
||||
module M {
|
||||
export function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
}
|
||||
|
||||
//// [b.ts]
|
||||
module M {
|
||||
export function f2() {
|
||||
var arguments = [];
|
||||
}
|
||||
}
|
||||
|
||||
//// [out.js]
|
||||
"use strict";
|
||||
var M;
|
||||
(function (M) {
|
||||
function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
M.f = f;
|
||||
})(M || (M = {}));
|
||||
"use strict";
|
||||
var M;
|
||||
(function (M) {
|
||||
function f2() {
|
||||
var arguments = [];
|
||||
}
|
||||
M.f2 = f2;
|
||||
})(M || (M = {}));
|
||||
@@ -0,0 +1,14 @@
|
||||
error TS5053: Option 'noImplicitUseStrict' cannot be specified with option 'alwaysStrict'.
|
||||
tests/cases/compiler/alwaysStrictNoImplicitUseStrict.ts(4,13): error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
|
||||
|
||||
!!! error TS5053: Option 'noImplicitUseStrict' cannot be specified with option 'alwaysStrict'.
|
||||
==== tests/cases/compiler/alwaysStrictNoImplicitUseStrict.ts (1 errors) ====
|
||||
|
||||
module M {
|
||||
export function f() {
|
||||
var arguments = [];
|
||||
~~~~~~~~~
|
||||
!!! error TS1100: Invalid use of 'arguments' in strict mode.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
//// [alwaysStrictNoImplicitUseStrict.ts]
|
||||
|
||||
module M {
|
||||
export function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
}
|
||||
|
||||
//// [alwaysStrictNoImplicitUseStrict.js]
|
||||
"use strict";
|
||||
var M;
|
||||
(function (M) {
|
||||
function f() {
|
||||
var arguments = [];
|
||||
}
|
||||
M.f = f;
|
||||
})(M || (M = {}));
|
||||
@@ -44,7 +44,7 @@ module M {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -43,7 +43,7 @@ module M {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -43,7 +43,7 @@ module M {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -43,7 +43,7 @@ module M {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -9,7 +9,7 @@ async () => {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -14,7 +14,7 @@ async function fAsyncExplicit(): Promise<[number, boolean]> {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -19,7 +19,7 @@ export const b = {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
@@ -34,7 +34,7 @@ export const b = {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -30,7 +30,7 @@ async function sample2(x?: number) {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -29,7 +29,7 @@ exports.Task = Task;
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -19,7 +19,7 @@ exports.Task = Task;
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -9,7 +9,7 @@ function g() { }
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -9,7 +9,7 @@ function g() { }
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -20,7 +20,7 @@ async function bar4() {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -24,7 +24,7 @@ async function bar4() {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@ async function bar3() {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -22,7 +22,7 @@ async function bar4() {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -12,7 +12,7 @@ async function f() {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -23,7 +23,7 @@ function foo(a: string): string | number {
|
||||
|
||||
return a.length;
|
||||
>a.length : number
|
||||
>a : string
|
||||
>a : "hello"
|
||||
>length : number
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ export async function runSampleBreaks<A, B, C, D, E>(
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -25,7 +25,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -30,7 +30,7 @@ import x from './a';
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -22,7 +22,7 @@ exports.default = x;
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -12,7 +12,7 @@ async function singleAwait() {
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -32,7 +32,7 @@ exports.foo = foo;
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
@@ -7,7 +7,7 @@ foo();
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user