{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/comments/49516249","id":49516249,"diff_hunk":"@@ -0,0 +1,282 @@\n+// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0. \r\n+// See LICENSE.txt in the project root for complete license information.\r\n+\r\n+/// <reference path='services.ts' />\r\n+\r\n+/* @internal */\r\n+namespace ts.JsTyping {\r\n+\r\n+    interface HostType {\r\n+        directoryExists: (path: string) => boolean;\r\n+        fileExists: (fileName: string) => boolean;\r\n+        readFile: (path: string, encoding?: string) => string;\r\n+        readDirectory: (path: string, extension?: string, exclude?: string[], depth?: number) => string[];\r\n+        writeFile: (path: string, data: string, writeByteOrderMark?: boolean) => void;\r\n+    };\r\n+\r\n+    var _host: HostType;\r\n+    var _safeList: Map<string>;\r\n+\r\n+    // a typing name to typing file path mapping\r\n+    var inferredTypings: Map<string> = {};\r\n+\r\n+    const notFoundTypingNames: string[] = [];\r\n+\r\n+    function tryParseJson(jsonPath: string): any {\r\n+        if (_host.fileExists(jsonPath)) {\r\n+            try {\r\n+                // Strip out single-line comments\r\n+                const contents = _host.readFile(jsonPath).replace(/^\\/\\/(.*)$/gm, \"\");\r\n+                return JSON.parse(contents);\r\n+            }\r\n+            catch (e) { }\r\n+        }\r\n+        return undefined;\r\n+    }\r\n+\r\n+    /**\r\n+     * @param cachePath is the path to the cache location, which contains a tsd.json file and a typings folder\r\n+     * @param fileNames are the file names that belongs to the same project\r\n+     * @param globalCachePath is used 1. to get safe list file path 2. when we can't locate the project root path \r\n+     * @param projectRootPath\r\n+     * @param typingOptions\r\n+     * @param compilerOptions is used for typing inferring. \r\n+     */\r\n+    export function discoverTypings(\r\n+        host: HostType,\r\n+        fileNames: string[],\r\n+        globalCachePath: Path,\r\n+        cachePath: Path,\r\n+        typingOptions: TypingOptions,\r\n+        compilerOptions?: CompilerOptions)\r\n+        : { cachedTypingPaths: string[], newTypingNames: string[], filesToWatch: string[], newTsdJsonPath?: string } {\r\n+\r\n+        _host = host;\r\n+        // Clear inferred typings map\r\n+        inferredTypings = {};\r\n+\r\n+        cachePath = cachePath ? cachePath : globalCachePath;\r\n+        // Only infer typings for .js and .jsx files\r\n+        fileNames = fileNames\r\n+            .map(ts.normalizePath)\r\n+            .filter(f => fileExtensionIs(f, \".js\") || fileExtensionIs(f, \"jsx\"));\r\n+\r\n+        const safeListFilePath = ts.combinePaths(globalCachePath, \"safeList.json\");\r\n+        if (!_safeList && _host.fileExists(safeListFilePath)) {\r\n+            _safeList = tryParseJson(safeListFilePath);\r\n+        }\r\n+\r\n+        const filesToWatch: string[] = [];\r\n+        // Directories to search for package.json, bower.json and other typing information\r\n+        let searchDirs: string[] = [];\r\n+        let exclude: string[] = [];\r\n+\r\n+        if (typingOptions) {\r\n+            mergeTypings(typingOptions.include);\r\n+            exclude = typingOptions.exclude ? typingOptions.exclude : [];\r\n+\r\n+            if (typingOptions.enableAutoDiscovery) {\r\n+                searchDirs = ts.deduplicate(fileNames.map(ts.getDirectoryPath));\r\n+                for (let searchDir of searchDirs) {\r\n+                    let packageJsonPath = ts.combinePaths(searchDir, \"package.json\");\r\n+                    getTypingNamesFromJson(packageJsonPath, filesToWatch);\r\n+\r\n+                    let bowerJsonPath = ts.combinePaths(searchDir, \"bower.json\");\r\n+                    getTypingNamesFromJson(bowerJsonPath, filesToWatch);\r\n+\r\n+                    let nodeModulesPath = ts.combinePaths(searchDir, \"node_modules\");\r\n+                    getTypingNamesFromNodeModuleFolder(nodeModulesPath, filesToWatch);\r\n+                }\r\n+\r\n+                getTypingNamesFromSourceFileNames(fileNames);\r\n+                getTypingNamesFromCompilerOptions(compilerOptions);\r\n+            }\r\n+\r\n+            let newTsdJsonPath: string;\r\n+            const typingsPath = ts.combinePaths(cachePath, \"typings\");\r\n+            const tsdJsonPath = ts.combinePaths(cachePath, \"tsd.json\");\r\n+            const tsdJsonDict = tryParseJson(tsdJsonPath);\r\n+            if (tsdJsonDict) {\r\n+                for (const notFoundTypingName of notFoundTypingNames) {\r\n+                    if (inferredTypings.hasOwnProperty(notFoundTypingName) && !inferredTypings[notFoundTypingName]) {\r\n+                        delete inferredTypings[notFoundTypingName];\r\n+                    }\r\n+                }\r\n+\r\n+                // The \"installed\" property in the tsd.json serves as a registry of installed typings. Each item \r\n+                // of this object has a key of the relative file path, and a value that contains the corresponding\r\n+                // commit hash.\r\n+                if (hasProperty(tsdJsonDict, \"installed\")) {\r\n+                    for (const cachedTypingPath in tsdJsonDict.installed) {\r\n+                        // Assuming the cachedTypingPath has the format of \"[package name]/[file name]\"\r\n+                        const cachedTypingName = cachedTypingPath.substr(0, cachedTypingPath.indexOf('/'));\r\n+                        // If the inferred[cachedTypingName] is already not null, which means we found a corresponding\r\n+                        // d.ts file that coming with the package. That one should take higher priority.\r\n+                        if (hasProperty(inferredTypings, cachedTypingName) && !inferredTypings[cachedTypingName]) {\r\n+                            inferredTypings[cachedTypingName] = ts.combinePaths(typingsPath, cachedTypingPath);\r\n+                        }\r\n+                    }\r\n+                }\r\n+            } else if (!host.fileExists(tsdJsonPath) && typingOptions.enableAutoDiscovery) {\r\n+                const tsdJsonOptions = {\r\n+                    version: \"v4\",\r\n+                    repo: \"DefinitelyTyped/DefinitelyTyped\",\r\n+                    ref: \"master\",\r\n+                    path: \"typings\",\r\n+                };\r\n+                host.writeFile(tsdJsonPath, JSON.stringify(tsdJsonOptions, null, \"  \"));\r\n+                newTsdJsonPath = tsdJsonPath;\r\n+            }\r\n+\r\n+            // Remove typings that the user has added to the exclude list\r\n+            for (const excludeTypingName of exclude) {\r\n+                delete inferredTypings[excludeTypingName];\r\n+            }\r\n+\r\n+            const newTypingNames: string[] = [];\r\n+            const cachedTypingPaths: string[] = [];\r\n+            for (const typing in inferredTypings) {\r\n+                if (inferredTypings[typing]) {\r\n+                    cachedTypingPaths.push(inferredTypings[typing]);\r\n+                }\r\n+                else {\r\n+                    newTypingNames.push(typing);\r\n+                }\r\n+            }\r\n+            return { cachedTypingPaths, newTypingNames, filesToWatch, newTsdJsonPath };\r\n+        }\r\n+        else {\r\n+            return { cachedTypingPaths: [], newTypingNames: [], filesToWatch: [], newTsdJsonPath: null }\r","path":"src/services/jsTyping.ts","position":149,"original_position":149,"commit_id":"d03090c685a61ff28bb9679f1909e92af96cb787","original_commit_id":"d03090c685a61ff28bb9679f1909e92af96cb787","user":{"login":"zhengbli","id":1171301,"avatar_url":"https://avatars.githubusercontent.com/u/1171301?v=3","gravatar_id":"","url":"https://api.github.com/users/zhengbli","html_url":"https://github.com/zhengbli","followers_url":"https://api.github.com/users/zhengbli/followers","following_url":"https://api.github.com/users/zhengbli/following{/other_user}","gists_url":"https://api.github.com/users/zhengbli/gists{/gist_id}","starred_url":"https://api.github.com/users/zhengbli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhengbli/subscriptions","organizations_url":"https://api.github.com/users/zhengbli/orgs","repos_url":"https://api.github.com/users/zhengbli/repos","events_url":"https://api.github.com/users/zhengbli/events{/privacy}","received_events_url":"https://api.github.com/users/zhengbli/received_events","type":"User","site_admin":false},"body":"Good point. It makes sense to quit earlier.","created_at":"2016-01-12T21:27:40Z","updated_at":"2016-01-12T21:27:40Z","html_url":"https://github.com/Microsoft/TypeScript/pull/6448#discussion_r49516249","pull_request_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/6448","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/comments/49516249"},"html":{"href":"https://github.com/Microsoft/TypeScript/pull/6448#discussion_r49516249"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/6448"}}},"pull_request":{"url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/6448","id":55724529,"html_url":"https://github.com/Microsoft/TypeScript/pull/6448","diff_url":"https://github.com/Microsoft/TypeScript/pull/6448.diff","patch_url":"https://github.com/Microsoft/TypeScript/pull/6448.patch","issue_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/6448","number":6448,"state":"open","locked":false,"title":"[Salsa] Acquire d.ts files for JavaScript files","user":{"login":"zhengbli","id":1171301,"avatar_url":"https://avatars.githubusercontent.com/u/1171301?v=3","gravatar_id":"","url":"https://api.github.com/users/zhengbli","html_url":"https://github.com/zhengbli","followers_url":"https://api.github.com/users/zhengbli/followers","following_url":"https://api.github.com/users/zhengbli/following{/other_user}","gists_url":"https://api.github.com/users/zhengbli/gists{/gist_id}","starred_url":"https://api.github.com/users/zhengbli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhengbli/subscriptions","organizations_url":"https://api.github.com/users/zhengbli/orgs","repos_url":"https://api.github.com/users/zhengbli/repos","events_url":"https://api.github.com/users/zhengbli/events{/privacy}","received_events_url":"https://api.github.com/users/zhengbli/received_events","type":"User","site_admin":false},"body":"This PR contains the Salsa feature that acquires `.d.ts` files via tsd to enhance intellisense for JavaScript files. \r\n\r\nMore information can be found at the [wiki page](https://github.com/zhengbli/TypeScript/wiki/Salsa)","created_at":"2016-01-12T07:53:13Z","updated_at":"2016-01-12T21:27:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bb7bb683758286b157667f6930284c56b9e532d9","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/6448/commits","review_comments_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/6448/comments","review_comment_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/6448/comments","statuses_url":"https://api.github.com/repos/Microsoft/TypeScript/statuses/d03090c685a61ff28bb9679f1909e92af96cb787","head":{"label":"zhengbli:acquireDts","ref":"acquireDts","sha":"d03090c685a61ff28bb9679f1909e92af96cb787","user":{"login":"zhengbli","id":1171301,"avatar_url":"https://avatars.githubusercontent.com/u/1171301?v=3","gravatar_id":"","url":"https://api.github.com/users/zhengbli","html_url":"https://github.com/zhengbli","followers_url":"https://api.github.com/users/zhengbli/followers","following_url":"https://api.github.com/users/zhengbli/following{/other_user}","gists_url":"https://api.github.com/users/zhengbli/gists{/gist_id}","starred_url":"https://api.github.com/users/zhengbli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhengbli/subscriptions","organizations_url":"https://api.github.com/users/zhengbli/orgs","repos_url":"https://api.github.com/users/zhengbli/repos","events_url":"https://api.github.com/users/zhengbli/events{/privacy}","received_events_url":"https://api.github.com/users/zhengbli/received_events","type":"User","site_admin":false},"repo":{"id":31636477,"name":"TypeScript","full_name":"zhengbli/TypeScript","owner":{"login":"zhengbli","id":1171301,"avatar_url":"https://avatars.githubusercontent.com/u/1171301?v=3","gravatar_id":"","url":"https://api.github.com/users/zhengbli","html_url":"https://github.com/zhengbli","followers_url":"https://api.github.com/users/zhengbli/followers","following_url":"https://api.github.com/users/zhengbli/following{/other_user}","gists_url":"https://api.github.com/users/zhengbli/gists{/gist_id}","starred_url":"https://api.github.com/users/zhengbli/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zhengbli/subscriptions","organizations_url":"https://api.github.com/users/zhengbli/orgs","repos_url":"https://api.github.com/users/zhengbli/repos","events_url":"https://api.github.com/users/zhengbli/events{/privacy}","received_events_url":"https://api.github.com/users/zhengbli/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/zhengbli/TypeScript","description":"TypeScript is a superset of JavaScript that compiles to clean JavaScript output.","fork":true,"url":"https://api.github.com/repos/zhengbli/TypeScript","forks_url":"https://api.github.com/repos/zhengbli/TypeScript/forks","keys_url":"https://api.github.com/repos/zhengbli/TypeScript/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zhengbli/TypeScript/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zhengbli/TypeScript/teams","hooks_url":"https://api.github.com/repos/zhengbli/TypeScript/hooks","issue_events_url":"https://api.github.com/repos/zhengbli/TypeScript/issues/events{/number}","events_url":"https://api.github.com/repos/zhengbli/TypeScript/events","assignees_url":"https://api.github.com/repos/zhengbli/TypeScript/assignees{/user}","branches_url":"https://api.github.com/repos/zhengbli/TypeScript/branches{/branch}","tags_url":"https://api.github.com/repos/zhengbli/TypeScript/tags","blobs_url":"https://api.github.com/repos/zhengbli/TypeScript/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zhengbli/TypeScript/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zhengbli/TypeScript/git/refs{/sha}","trees_url":"https://api.github.com/repos/zhengbli/TypeScript/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zhengbli/TypeScript/statuses/{sha}","languages_url":"https://api.github.com/repos/zhengbli/TypeScript/languages","stargazers_url":"https://api.github.com/repos/zhengbli/TypeScript/stargazers","contributors_url":"https://api.github.com/repos/zhengbli/TypeScript/contributors","subscribers_url":"https://api.github.com/repos/zhengbli/TypeScript/subscribers","subscription_url":"https://api.github.com/repos/zhengbli/TypeScript/subscription","commits_url":"https://api.github.com/repos/zhengbli/TypeScript/commits{/sha}","git_commits_url":"https://api.github.com/repos/zhengbli/TypeScript/git/commits{/sha}","comments_url":"https://api.github.com/repos/zhengbli/TypeScript/comments{/number}","issue_comment_url":"https://api.github.com/repos/zhengbli/TypeScript/issues/comments{/number}","contents_url":"https://api.github.com/repos/zhengbli/TypeScript/contents/{+path}","compare_url":"https://api.github.com/repos/zhengbli/TypeScript/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zhengbli/TypeScript/merges","archive_url":"https://api.github.com/repos/zhengbli/TypeScript/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zhengbli/TypeScript/downloads","issues_url":"https://api.github.com/repos/zhengbli/TypeScript/issues{/number}","pulls_url":"https://api.github.com/repos/zhengbli/TypeScript/pulls{/number}","milestones_url":"https://api.github.com/repos/zhengbli/TypeScript/milestones{/number}","notifications_url":"https://api.github.com/repos/zhengbli/TypeScript/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zhengbli/TypeScript/labels{/name}","releases_url":"https://api.github.com/repos/zhengbli/TypeScript/releases{/id}","created_at":"2015-03-04T03:41:12Z","updated_at":"2015-05-05T17:16:07Z","pushed_at":"2016-01-12T08:39:22Z","git_url":"git://github.com/zhengbli/TypeScript.git","ssh_url":"git@github.com:zhengbli/TypeScript.git","clone_url":"https://github.com/zhengbli/TypeScript.git","svn_url":"https://github.com/zhengbli/TypeScript","homepage":"http://www.typescriptlang.org","size":221742,"stargazers_count":0,"watchers_count":0,"language":"TypeScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Microsoft:master","ref":"master","sha":"33bfd92f4866e01d373ce0fdea7737e849b9c840","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":20929025,"name":"TypeScript","full_name":"Microsoft/TypeScript","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/TypeScript","description":"TypeScript is a superset of JavaScript that compiles to clean JavaScript output.","fork":false,"url":"https://api.github.com/repos/Microsoft/TypeScript","forks_url":"https://api.github.com/repos/Microsoft/TypeScript/forks","keys_url":"https://api.github.com/repos/Microsoft/TypeScript/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/TypeScript/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/TypeScript/teams","hooks_url":"https://api.github.com/repos/Microsoft/TypeScript/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/TypeScript/events","assignees_url":"https://api.github.com/repos/Microsoft/TypeScript/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/TypeScript/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/TypeScript/tags","blobs_url":"https://api.github.com/repos/Microsoft/TypeScript/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/TypeScript/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/TypeScript/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/TypeScript/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/TypeScript/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/TypeScript/languages","stargazers_url":"https://api.github.com/repos/Microsoft/TypeScript/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/TypeScript/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/TypeScript/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/TypeScript/subscription","commits_url":"https://api.github.com/repos/Microsoft/TypeScript/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/TypeScript/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/TypeScript/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/TypeScript/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/TypeScript/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/TypeScript/merges","archive_url":"https://api.github.com/repos/Microsoft/TypeScript/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/TypeScript/downloads","issues_url":"https://api.github.com/repos/Microsoft/TypeScript/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/TypeScript/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/TypeScript/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/TypeScript/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/TypeScript/releases{/id}","created_at":"2014-06-17T15:28:39Z","updated_at":"2016-01-12T16:37:11Z","pushed_at":"2016-01-12T17:36:26Z","git_url":"git://github.com/Microsoft/TypeScript.git","ssh_url":"git@github.com:Microsoft/TypeScript.git","clone_url":"https://github.com/Microsoft/TypeScript.git","svn_url":"https://github.com/Microsoft/TypeScript","homepage":"http://www.typescriptlang.org","size":462798,"stargazers_count":8685,"watchers_count":8685,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1043,"mirror_url":null,"open_issues_count":928,"forks":1043,"open_issues":928,"watchers":8685,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/6448"},"html":{"href":"https://github.com/Microsoft/TypeScript/pull/6448"},"issue":{"href":"https://api.github.com/repos/Microsoft/TypeScript/issues/6448"},"comments":{"href":"https://api.github.com/repos/Microsoft/TypeScript/issues/6448/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/6448/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/6448/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/TypeScript/statuses/d03090c685a61ff28bb9679f1909e92af96cb787"}}}}