Handle unnecessary typings request force just because root files change

First unresolved import gets the typing file into cache and sets it as root,
This results in scheduling new typing request with that unresolved import missing
The result will come back with typing file that is omitted, so root file will change but file will still be part of program so its not really removed from program
This commit is contained in:
Sheetal Nandi
2023-10-11 12:14:21 -07:00
parent f54396972b
commit 3f8e00c37f
9 changed files with 63 additions and 445 deletions

View File

@@ -33,6 +33,8 @@ import {
DocumentPositionMapper,
ensureTrailingDirectorySeparator,
enumerateInsertsAndDeletes,
equateStringsCaseInsensitive,
equateStringsCaseSensitive,
every,
explainFiles,
ExportInfoMap,
@@ -88,7 +90,6 @@ import {
ModuleResolutionCache,
ModuleResolutionHost,
ModuleSpecifierCache,
noop,
noopFileWatcher,
normalizePath,
normalizeSlashes,
@@ -1520,7 +1521,23 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
unresolvedImports,
};
const typingFiles = !typeAcquisition || !typeAcquisition.enable ? emptyArray : toSorted(newTypings);
if (enumerateInsertsAndDeletes<string, string>(typingFiles, this.typingFiles, getStringComparer(!this.useCaseSensitiveFileNames()), /*inserted*/ noop, removed => this.detachScriptInfoFromProject(removed))) {
// The typings files are result of types acquired based on unresolved imports and other structure
// With respect to unresolved imports:
// The first time we see unresolved import the TI will fetch the typing into cache and return it as part of typings file
// This makes typings file set as files to be included as root
// Program update on this will resolve the unresolved imports from the previous pass
// Because resolution has changed, this will enqueue TI request without the previously unresolved imports
// As a result TI will send new Typings files that does not contain the typing files we got before
// So our root files will change as part of that but we dont want to detach the typing files that are no more typings file
// but rather let program update do that
// This ensures that if nothing else changes, program will still have that file and the update doesnt mark file as added or removed unncessarily
if (
!arrayIsEqualTo(
typingFiles,
this.typingFiles,
this.useCaseSensitiveFileNames() ? equateStringsCaseSensitive : equateStringsCaseInsensitive,
)
) {
// If typing files changed, then only schedule project update
this.typingFiles = typingFiles;
// Invalidate files with unresolved imports

View File

@@ -846,112 +846,10 @@ Info seq [hh:mm:ss:mss] Files (3)
/home/src/tslibs/TS/Lib/lib.d.ts Text-1 "/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };"
/home/src/Library/Caches/typescript/node_modules/@types/bar/index.d.ts Text-1 "export const x = 1;"
/users/user/projects/project1/app.js SVC-1-0 "var x = require('bar');"
../../../../home/src/tslibs/TS/Lib/lib.d.ts
Default library for target 'es5'
../../../../home/src/Library/Caches/typescript/node_modules/@types/bar/index.d.ts
Imported via 'bar' from file 'app.js'
app.js
Matched by default include pattern '**/*'
Info seq [hh:mm:ss:mss] -----------------------------------------------
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
TI:: [hh:mm:ss:mss] Got install request
{
"projectName": "/users/user/projects/project1/jsconfig.json",
"fileNames": [
"/home/src/tslibs/TS/Lib/lib.d.ts",
"/users/user/projects/project1/app.js"
],
"compilerOptions": {
"allowJs": true,
"maxNodeModuleJsDepth": 2,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"noEmit": true,
"traceResolution": true,
"configFilePath": "/users/user/projects/project1/jsconfig.json",
"allowNonTsExtensions": true
},
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"unresolvedImports": [],
"projectRootPath": "/users/user/projects/project1",
"kind": "discover"
}
TI:: [hh:mm:ss:mss] Explicitly included types: []
TI:: [hh:mm:ss:mss] Searching for typing names in /users/user/projects/project1/node_modules; all files: []
TI:: [hh:mm:ss:mss] Found package names: []
TI:: [hh:mm:ss:mss] Inferred typings from unresolved imports: []
TI:: [hh:mm:ss:mss] Finished typings discovery:
{
"cachedTypingPaths": [],
"newTypingNames": [],
"filesToWatch": [
"/users/user/projects/project1/bower_components",
"/users/user/projects/project1/node_modules"
]
}
TI:: [hh:mm:ss:mss] Sending response:
{
"kind": "action::watchTypingLocations",
"projectName": "/users/user/projects/project1/jsconfig.json"
}
TI:: [hh:mm:ss:mss] Sending response:
{
"projectName": "/users/user/projects/project1/jsconfig.json",
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"compilerOptions": {
"allowJs": true,
"maxNodeModuleJsDepth": 2,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"noEmit": true,
"traceResolution": true,
"configFilePath": "/users/user/projects/project1/jsconfig.json",
"allowNonTsExtensions": true
},
"typings": [],
"unresolvedImports": [],
"kind": "action::set"
}
Info seq [hh:mm:ss:mss] event:
{
"seq": 0,
"type": "event",
"event": "setTypings",
"body": {
"projectName": "/users/user/projects/project1/jsconfig.json",
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"compilerOptions": {
"allowJs": true,
"maxNodeModuleJsDepth": 2,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"noEmit": true,
"traceResolution": true,
"configFilePath": "/users/user/projects/project1/jsconfig.json",
"allowNonTsExtensions": true
},
"typings": [],
"unresolvedImports": [],
"kind": "action::set"
}
}
TI:: [hh:mm:ss:mss] No new typings were requested as a result of typings discovery
After running Timeout callback:: count: 2
PolledWatches::

View File

@@ -717,112 +717,10 @@ Info seq [hh:mm:ss:mss] Files (3)
/home/src/tslibs/TS/Lib/lib.d.ts Text-1 "/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };"
/home/src/Library/Caches/typescript/node_modules/@types/bar/index.d.ts Text-1 "export const x = 1;"
/users/user/projects/project1/app.js SVC-1-0 "var x = require('bar');"
../../../../home/src/tslibs/TS/Lib/lib.d.ts
Default library for target 'es5'
../../../../home/src/Library/Caches/typescript/node_modules/@types/bar/index.d.ts
Imported via 'bar' from file 'app.js'
app.js
Matched by default include pattern '**/*'
Info seq [hh:mm:ss:mss] -----------------------------------------------
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
TI:: [hh:mm:ss:mss] Got install request
{
"projectName": "/users/user/projects/project1/jsconfig.json",
"fileNames": [
"/home/src/tslibs/TS/Lib/lib.d.ts",
"/users/user/projects/project1/app.js"
],
"compilerOptions": {
"allowJs": true,
"maxNodeModuleJsDepth": 2,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"noEmit": true,
"traceResolution": true,
"configFilePath": "/users/user/projects/project1/jsconfig.json",
"allowNonTsExtensions": true
},
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"unresolvedImports": [],
"projectRootPath": "/users/user/projects/project1",
"kind": "discover"
}
TI:: [hh:mm:ss:mss] Explicitly included types: []
TI:: [hh:mm:ss:mss] Searching for typing names in /users/user/projects/project1/node_modules; all files: []
TI:: [hh:mm:ss:mss] Found package names: []
TI:: [hh:mm:ss:mss] Inferred typings from unresolved imports: []
TI:: [hh:mm:ss:mss] Finished typings discovery:
{
"cachedTypingPaths": [],
"newTypingNames": [],
"filesToWatch": [
"/users/user/projects/project1/bower_components",
"/users/user/projects/project1/node_modules"
]
}
TI:: [hh:mm:ss:mss] Sending response:
{
"kind": "action::watchTypingLocations",
"projectName": "/users/user/projects/project1/jsconfig.json"
}
TI:: [hh:mm:ss:mss] Sending response:
{
"projectName": "/users/user/projects/project1/jsconfig.json",
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"compilerOptions": {
"allowJs": true,
"maxNodeModuleJsDepth": 2,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"noEmit": true,
"traceResolution": true,
"configFilePath": "/users/user/projects/project1/jsconfig.json",
"allowNonTsExtensions": true
},
"typings": [],
"unresolvedImports": [],
"kind": "action::set"
}
Info seq [hh:mm:ss:mss] event:
{
"seq": 0,
"type": "event",
"event": "setTypings",
"body": {
"projectName": "/users/user/projects/project1/jsconfig.json",
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"compilerOptions": {
"allowJs": true,
"maxNodeModuleJsDepth": 2,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"noEmit": true,
"traceResolution": true,
"configFilePath": "/users/user/projects/project1/jsconfig.json",
"allowNonTsExtensions": true
},
"typings": [],
"unresolvedImports": [],
"kind": "action::set"
}
}
TI:: [hh:mm:ss:mss] No new typings were requested as a result of typings discovery
After running Timeout callback:: count: 2
PolledWatches::

View File

@@ -638,104 +638,10 @@ Info seq [hh:mm:ss:mss] Files (3)
/home/src/tslibs/TS/Lib/lib.d.ts Text-1 "/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };"
/home/src/Library/Caches/typescript/node_modules/@types/jquery/index.d.ts Text-1 ""
/user/username/projects/project/app.js SVC-1-0 "import \"jquery\";"
../../../../home/src/tslibs/TS/Lib/lib.d.ts
Default library for target 'es5'
../../../../home/src/Library/Caches/typescript/node_modules/@types/jquery/index.d.ts
Imported via "jquery" from file 'app.js'
app.js
Matched by default include pattern '**/*'
Info seq [hh:mm:ss:mss] -----------------------------------------------
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3 Done: []
TI:: [hh:mm:ss:mss] Got install request
{
"projectName": "/user/username/projects/project/jsconfig.json",
"fileNames": [
"/home/src/tslibs/TS/Lib/lib.d.ts",
"/user/username/projects/project/app.js"
],
"compilerOptions": {
"allowJs": true,
"maxNodeModuleJsDepth": 2,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"noEmit": true,
"types": [],
"configFilePath": "/user/username/projects/project/jsconfig.json",
"allowNonTsExtensions": true
},
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"unresolvedImports": [],
"projectRootPath": "/user/username/projects/project",
"kind": "discover"
}
TI:: [hh:mm:ss:mss] Explicitly included types: []
TI:: [hh:mm:ss:mss] Inferred typings from unresolved imports: []
TI:: [hh:mm:ss:mss] Finished typings discovery:
{
"cachedTypingPaths": [],
"newTypingNames": [],
"filesToWatch": []
}
TI:: [hh:mm:ss:mss] Closing file watchers for project '/user/username/projects/project/jsconfig.json'
TI:: [hh:mm:ss:mss] No watchers are registered for project '/user/username/projects/project/jsconfig.json'
TI:: [hh:mm:ss:mss] Sending response:
{
"projectName": "/user/username/projects/project/jsconfig.json",
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"compilerOptions": {
"allowJs": true,
"maxNodeModuleJsDepth": 2,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"noEmit": true,
"types": [],
"configFilePath": "/user/username/projects/project/jsconfig.json",
"allowNonTsExtensions": true
},
"typings": [],
"unresolvedImports": [],
"kind": "action::set"
}
Info seq [hh:mm:ss:mss] event:
{
"seq": 0,
"type": "event",
"event": "setTypings",
"body": {
"projectName": "/user/username/projects/project/jsconfig.json",
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"compilerOptions": {
"allowJs": true,
"maxNodeModuleJsDepth": 2,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"noEmit": true,
"types": [],
"configFilePath": "/user/username/projects/project/jsconfig.json",
"allowNonTsExtensions": true
},
"typings": [],
"unresolvedImports": [],
"kind": "action::set"
}
}
TI:: [hh:mm:ss:mss] No new typings were requested as a result of typings discovery
After running Timeout callback:: count: 2
PolledWatches::

View File

@@ -583,14 +583,16 @@ Projects::
ScriptInfos::
/home/src/Library/Caches/typescript/node_modules/@types/commander/index.d.ts *new*
version: Text-1
containingProjects: 0
containingProjects: 1
/dev/null/inferredProject1*
/home/src/Library/Caches/typescript/node_modules/@types/ember__component/index.d.ts *new*
version: Text-1
containingProjects: 1
/dev/null/inferredProject1*
/home/src/Library/Caches/typescript/node_modules/@types/node/index.d.ts *new*
version: Text-1
containingProjects: 0
containingProjects: 1
/dev/null/inferredProject1*
/home/src/projects/project/app.js (Open)
version: SVC-1-0
containingProjects: 1

View File

@@ -624,7 +624,8 @@ ScriptInfos::
/dev/null/inferredProject1*
/home/src/Library/Caches/typescript/node_modules/foo/index.d.ts *new*
version: Text-1
containingProjects: 0
containingProjects: 1
/dev/null/inferredProject1*
/home/src/projects/project/app.js (Open)
version: SVC-1-0
containingProjects: 1
@@ -768,6 +769,36 @@ Projects::
projectProgramVersion: 3 *changed*
dirty: false *changed*
ScriptInfos::
/home/src/Library/Caches/typescript/node_modules/foo/a/a.d.ts
version: Text-1
containingProjects: 1
/dev/null/inferredProject1*
/home/src/Library/Caches/typescript/node_modules/foo/a/b.d.ts
version: Text-1
containingProjects: 1
/dev/null/inferredProject1*
/home/src/Library/Caches/typescript/node_modules/foo/a/c.d.ts
version: Text-1
containingProjects: 1
/dev/null/inferredProject1*
/home/src/Library/Caches/typescript/node_modules/foo/index.d.ts *changed*
version: Text-1
containingProjects: 0 *changed*
/dev/null/inferredProject1* *deleted*
/home/src/projects/project/app.js (Open)
version: SVC-1-0
containingProjects: 1
/dev/null/inferredProject1* *default*
/home/src/projects/project/node_modules/fooo/index.d.ts
version: Text-1
containingProjects: 1
/dev/null/inferredProject1*
/home/src/tslibs/TS/Lib/lib.d.ts
version: Text-1
containingProjects: 1
/dev/null/inferredProject1*
Info seq [hh:mm:ss:mss] request:
{
"command": "applyChangedToOpenFiles",

View File

@@ -585,7 +585,8 @@ Projects::
ScriptInfos::
/home/src/Library/Caches/typescript/node_modules/foo/index.d.ts *new*
version: Text-1
containingProjects: 0
containingProjects: 1
/dev/null/inferredProject1*
/home/src/projects/project/app.js (Open)
version: SVC-1-0
containingProjects: 1
@@ -607,108 +608,10 @@ Info seq [hh:mm:ss:mss] Files (4)
/home/src/Library/Caches/typescript/node_modules/foo/index.d.ts Text-1 "export function a(): void;"
/home/src/projects/project/node_modules/fooo/index.d.ts Text-1 "export var x: string;"
/home/src/projects/project/app.js SVC-1-0 "import * as a from \"foo\";import * as x from \"fooo\";"
../../tslibs/TS/Lib/lib.d.ts
Default library for target 'es5'
../../Library/Caches/typescript/node_modules/foo/index.d.ts
Imported via "foo" from file 'app.js'
node_modules/fooo/index.d.ts
Imported via "fooo" from file 'app.js'
app.js
Root file specified for compilation
Info seq [hh:mm:ss:mss] -----------------------------------------------
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 4
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 4 Done: []
TI:: [hh:mm:ss:mss] Got install request
{
"projectName": "/dev/null/inferredProject1*",
"fileNames": [
"/home/src/tslibs/TS/Lib/lib.d.ts",
"/home/src/projects/project/app.js"
],
"compilerOptions": {
"target": 1,
"jsx": 1,
"allowNonTsExtensions": true,
"allowJs": true,
"noEmitForJsFiles": true,
"maxNodeModuleJsDepth": 2
},
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"unresolvedImports": [],
"projectRootPath": "/home/src/projects/project",
"kind": "discover"
}
TI:: [hh:mm:ss:mss] Explicitly included types: []
TI:: [hh:mm:ss:mss] Searching for typing names in /home/src/projects/project/node_modules; all files: []
TI:: [hh:mm:ss:mss] Found package names: []
TI:: [hh:mm:ss:mss] Inferred typings from unresolved imports: []
TI:: [hh:mm:ss:mss] Finished typings discovery:
{
"cachedTypingPaths": [],
"newTypingNames": [],
"filesToWatch": [
"/home/src/projects/project/bower_components",
"/home/src/projects/project/node_modules"
]
}
TI:: [hh:mm:ss:mss] Sending response:
{
"kind": "action::watchTypingLocations",
"projectName": "/dev/null/inferredProject1*"
}
TI:: [hh:mm:ss:mss] Sending response:
{
"projectName": "/dev/null/inferredProject1*",
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"compilerOptions": {
"target": 1,
"jsx": 1,
"allowNonTsExtensions": true,
"allowJs": true,
"noEmitForJsFiles": true,
"maxNodeModuleJsDepth": 2
},
"typings": [],
"unresolvedImports": [],
"kind": "action::set"
}
Info seq [hh:mm:ss:mss] event:
{
"seq": 0,
"type": "event",
"event": "setTypings",
"body": {
"projectName": "/dev/null/inferredProject1*",
"typeAcquisition": {
"enable": true,
"include": [],
"exclude": []
},
"compilerOptions": {
"target": 1,
"jsx": 1,
"allowNonTsExtensions": true,
"allowJs": true,
"noEmitForJsFiles": true,
"maxNodeModuleJsDepth": 2
},
"typings": [],
"unresolvedImports": [],
"kind": "action::set"
}
}
TI:: [hh:mm:ss:mss] No new typings were requested as a result of typings discovery
Info seq [hh:mm:ss:mss] Resolution from : /home/src/projects/project/app.js for "fooo" goes to: {
"resolvedFileName": "/home/src/projects/project/node_modules/fooo/index.d.ts",
"extension": ".d.ts",
@@ -723,24 +626,6 @@ Projects::
projectProgramVersion: 3 *changed*
dirty: false *changed*
ScriptInfos::
/home/src/Library/Caches/typescript/node_modules/foo/index.d.ts *changed*
version: Text-1
containingProjects: 1 *changed*
/dev/null/inferredProject1* *new*
/home/src/projects/project/app.js (Open)
version: SVC-1-0
containingProjects: 1
/dev/null/inferredProject1* *default*
/home/src/projects/project/node_modules/fooo/index.d.ts
version: Text-1
containingProjects: 1
/dev/null/inferredProject1*
/home/src/tslibs/TS/Lib/lib.d.ts
version: Text-1
containingProjects: 1
/dev/null/inferredProject1*
Info seq [hh:mm:ss:mss] request:
{
"command": "applyChangedToOpenFiles",

View File

@@ -604,7 +604,8 @@ Projects::
ScriptInfos::
/home/src/Library/Caches/typescript/node_modules/@types/commander/index.d.ts *new*
version: Text-1
containingProjects: 0
containingProjects: 1
/dev/null/inferredProject1*
/home/src/tslibs/TS/Lib/lib.d.ts
version: Text-1
containingProjects: 1

View File

@@ -540,7 +540,8 @@ Projects::
ScriptInfos::
/home/src/Library/Caches/typescript/node_modules/node/index.d.ts *new*
version: Text-1
containingProjects: 0
containingProjects: 1
/dev/null/inferredProject1*
/home/src/projects/project/app.js (Open)
version: SVC-1-0
containingProjects: 1
@@ -584,7 +585,8 @@ After request
ScriptInfos::
/home/src/Library/Caches/typescript/node_modules/node/index.d.ts
version: Text-1
containingProjects: 0
containingProjects: 1
/dev/null/inferredProject1*
/home/src/projects/project/app.js (Open) *changed*
version: SVC-1-1 *changed*
containingProjects: 1
@@ -606,14 +608,6 @@ Info seq [hh:mm:ss:mss] Files (3)
/home/src/tslibs/TS/Lib/lib.d.ts Text-1 "/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };"
/home/src/Library/Caches/typescript/node_modules/node/index.d.ts Text-1 "\ndeclare module \"net\" {\n export type n = number;\n}\ndeclare module \"stream\" {\n export type s = string;\n}"
/home/src/projects/project/app.js SVC-1-1 "// @ts-check\n\nconst net = require(\"net\");\nconst stream = require(\"s tream\");"
../../tslibs/TS/Lib/lib.d.ts
Default library for target 'es5'
../../Library/Caches/typescript/node_modules/node/index.d.ts
Imported via "net" from file 'app.js'
app.js
Root file specified for compilation
Info seq [hh:mm:ss:mss] -----------------------------------------------
Info seq [hh:mm:ss:mss] getUnresolvedImports:: Files:: 3
@@ -752,20 +746,6 @@ Projects::
projectProgramVersion: 3 *changed*
dirty: false *changed*
ScriptInfos::
/home/src/Library/Caches/typescript/node_modules/node/index.d.ts *changed*
version: Text-1
containingProjects: 1 *changed*
/dev/null/inferredProject1* *new*
/home/src/projects/project/app.js (Open)
version: SVC-1-1
containingProjects: 1
/dev/null/inferredProject1* *default*
/home/src/tslibs/TS/Lib/lib.d.ts
version: Text-1
containingProjects: 1
/dev/null/inferredProject1*
Before request
Info seq [hh:mm:ss:mss] request: