├── .gitignore ├── tsconfig.json ├── .travis.yml ├── package.json ├── LICENSE ├── README.md ├── index.ts └── version.json /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./node_modules\\gts\\tsconfig-google.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "target": "es6", 6 | "outDir": "out", 7 | "lib": [ 8 | "es6" 9 | ], 10 | "sourceMap": true, 11 | "rootDir": "." 12 | }, 13 | "include": [ 14 | "*.ts" 15 | ], 16 | "exclude": [ 17 | "node_modules" 18 | ] 19 | } -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - 'node' 5 | 6 | os: 7 | - linux 8 | 9 | dist: trusty 10 | 11 | install: 12 | - npm install -g typescript 13 | - npm install -g gts 14 | - npm install 15 | 16 | script: 17 | - npm run compile 18 | - node out/index.js 19 | 20 | deploy: 21 | provider: pages 22 | skip-cleanup: true 23 | github-token: $GITHUB_TOKEN 24 | keep-history: true 25 | target-branch: master 26 | on: 27 | condition: $TRAVIS_EVENT_TYPE == 'cron' -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-version-watcher", 3 | "version": "0.0.1", 4 | "description": "", 5 | "main": "out/index.js", 6 | "scripts": { 7 | "compile": "tsc -p ./", 8 | "watch": "tsc -watch -p ./", 9 | "check": "gts check", 10 | "clean": "gts clean", 11 | "fix": "gts fix" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/Sneezry/vscode-electron-node-watcher.git" 16 | }, 17 | "author": "Zhe Li", 18 | "license": "MIT", 19 | "bugs": { 20 | "url": "https://github.com/Sneezry/vscode-electron-node-watcher/issues" 21 | }, 22 | "homepage": "https://github.com/Sneezry/vscode-electron-node-watcher#readme", 23 | "devDependencies": { 24 | "@types/fs-plus": "^3.0.0", 25 | "@types/node": "^12.12.14", 26 | "@types/request-promise": "^4.1.41", 27 | "gts": "^0.5.4" 28 | }, 29 | "dependencies": { 30 | "fs-plus": "^3.0.2", 31 | "request": "^2.85.0", 32 | "request-promise": "^4.2.2" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Zhe Li 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # VSCode Version Watcher 2 | 3 | ```diff 4 | ++ No change in recent release. ++ 5 | ``` 6 | 7 | Last update: 2021-06-14 00:09:17 GMT 8 | 9 | | VS Code | Electron | Node | Chrome | 10 | |:-------:|:--------:|:----:|:------:| 11 | | Latest | 12.0.9 | 14.16.0 | 89.0.4389.128 | 12 | | 1.57.0 | 12.0.9 | 14.16.0 | 89.0.4389.128 | 13 | | 1.56.2 | 12.0.4 | 14.16.0 | 89.0.4389.114 | 14 | | 1.56.1 | 12.0.4 | 14.16.0 | 89.0.4389.114 | 15 | | 1.56.0 | 12.0.4 | 14.16.0 | 89.0.4389.114 | 16 | | 1.55.2 | 11.3.0 | 12.18.3 | 87.0.4280.141 | 17 | | 1.55.1 | 11.3.0 | 12.18.3 | 87.0.4280.141 | 18 | | 1.55.0 | 11.3.0 | 12.18.3 | 87.0.4280.141 | 19 | | 1.54.3 | 11.3.0 | 12.18.3 | 87.0.4280.141 | 20 | | 1.54.2 | 11.3.0 | 12.18.3 | 87.0.4280.141 | 21 | | 1.999.0 | 3.1.8 | 10.2.0 | 66.0.3359.181 | 22 | | 1.54.1 | 11.3.0 | 12.18.3 | 87.0.4280.141 | 23 | | 1.54.0 | 11.3.0 | 12.18.3 | 87.0.4280.141 | 24 | | 1.53.2 | 11.2.1 | 12.18.3 | 87.0.4280.141 | 25 | | 1.53.1 | 11.2.1 | 12.18.3 | 87.0.4280.141 | 26 | | 1.53.0 | 11.2.1 | 12.18.3 | 87.0.4280.141 | 27 | | 1.52.1 | 9.3.5 | 12.14.1 | 83.0.4103.122 | 28 | | 1.52.0 | 9.3.5 | 12.14.1 | 83.0.4103.122 | 29 | | 1.51.1 | 9.3.3 | 12.14.1 | 83.0.4103.122 | 30 | | 1.51.0 | 9.3.3 | 12.14.1 | 83.0.4103.122 | 31 | | 1.50.1 | 9.2.1 | 12.14.1 | 83.0.4103.122 | 32 | | 1.50.0 | 9.2.1 | 12.14.1 | 83.0.4103.122 | 33 | | 1.49.3 | 9.2.1 | 12.14.1 | 83.0.4103.122 | 34 | | 1.49.2 | 9.2.1 | 12.14.1 | 83.0.4103.122 | 35 | | 1.49.1 | 9.2.1 | 12.14.1 | 83.0.4103.122 | 36 | | 1.49.0 | 9.2.1 | 12.14.1 | 83.0.4103.122 | 37 | | 1.48.2 | 7.3.2 | 12.8.1 | 78.0.3904.130 | 38 | | 1.48.1 | 7.3.2 | 12.8.1 | 78.0.3904.130 | 39 | | 1.48.0 | 7.3.2 | 12.8.1 | 78.0.3904.130 | 40 | | 1.47.3 | 7.3.2 | 12.8.1 | 78.0.3904.130 | 41 | | 1.47.2 | 7.3.2 | 12.8.1 | 78.0.3904.130 | 42 | | 1.47.1 | 7.3.2 | 12.8.1 | 78.0.3904.130 | 43 | | 1.47.0 | 7.3.2 | 12.8.1 | 78.0.3904.130 | 44 | | 1.46.1 | 7.3.1 | 12.8.1 | 78.0.3904.130 | 45 | | 1.19.3 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 46 | | 1.46.0 | 7.3.1 | 12.8.1 | 78.0.3904.130 | 47 | | 1.45.1 | 7.2.4 | 12.8.1 | 78.0.3904.130 | 48 | | 1.45.0 | 7.2.4 | 12.8.1 | 78.0.3904.130 | 49 | | 1.44.2 | 7.1.11 | 12.8.1 | 78.0.3904.130 | 50 | | 1.44.1 | 7.1.11 | 12.8.1 | 78.0.3904.130 | 51 | | 1.44.0 | 7.1.11 | 12.8.1 | 78.0.3904.130 | 52 | | 1.43.2 | 7.1.11 | 12.8.1 | 78.0.3904.130 | 53 | | 1.43.1 | 7.1.11 | 12.8.1 | 78.0.3904.130 | 54 | | 1.43.0 | 7.1.11 | 12.8.1 | 78.0.3904.130 | 55 | | 1.42.1 | 6.1.6 | 12.4.0 | 76.0.3809.146 | 56 | | 1.42.0 | 6.1.6 | 12.4.0 | 76.0.3809.146 | 57 | | 1.41.1 | 6.1.5 | 12.4.0 | 76.0.3809.146 | 58 | | 1.41.0 | 6.1.5 | 12.4.0 | 76.0.3809.146 | 59 | | 1.40.2 | 6.1.5 | 12.4.0 | 76.0.3809.146 | 60 | | 1.40.1 | 6.1.2 | 12.4.0 | 76.0.3809.146 | 61 | | 1.40.0 | 6.1.2 | 12.4.0 | 76.0.3809.146 | 62 | | 1.39.2 | 4.2.10 | 10.11.0 | 69.0.3497.128 | 63 | | 1.39.1 | 4.2.10 | 10.11.0 | 69.0.3497.128 | 64 | | 1.39.0 | 4.2.10 | 10.11.0 | 69.0.3497.128 | 65 | | 1.38.1 | 4.2.10 | 10.11.0 | 69.0.3497.128 | 66 | | 1.38.0 | 4.2.10 | 10.11.0 | 69.0.3497.128 | 67 | | 1.37.1 | 4.2.7 | 10.11.0 | 69.0.3497.128 | 68 | | 1.37.0 | 4.2.7 | 10.11.0 | 69.0.3497.128 | 69 | | 1.36.1 | 4.2.5 | 10.11.0 | 69.0.3497.128 | 70 | | 1.36.0 | 4.2.5 | 10.11.0 | 69.0.3497.128 | 71 | | 1.35.1 | 3.1.8 | 10.2.0 | 66.0.3359.181 | 72 | | 1.35.0 | 3.1.8 | 10.2.0 | 66.0.3359.181 | 73 | | 1.34.0 | 3.1.8 | 10.2.0 | 66.0.3359.181 | 74 | | 1.33.1 | 3.1.6 | 10.2.0 | 66.0.3359.181 | 75 | | 1.33.0 | 3.1.6 | 10.2.0 | 66.0.3359.181 | 76 | | 1.32.3 | 3.1.6 | 10.2.0 | 66.0.3359.181 | 77 | | 1.32.2 | 3.1.6 | 10.2.0 | 66.0.3359.181 | 78 | | 1.32.1 | 3.1.3 | 10.2.0 | 66.0.3359.181 | 79 | | 1.32.0 | 3.1.3 | 10.2.0 | 66.0.3359.181 | 80 | | 1.31.1 | 3.1.2 | 10.2.0 | 66.0.3359.181 | 81 | | 1.31.0 | 3.1.2 | 10.2.0 | 66.0.3359.181 | 82 | | 1.30.2 | 2.0.12 | 8.9.3 | 61.0.3163.100 | 83 | | 1.30.1 | 2.0.12 | 8.9.3 | 61.0.3163.100 | 84 | | 1.30.0 | 2.0.12 | 8.9.3 | 61.0.3163.100 | 85 | | 1.29.1 | 2.0.12 | 8.9.3 | 61.0.3163.100 | 86 | | 1.29.0 | 2.0.12 | 8.9.3 | 61.0.3163.100 | 87 | | 1.28.2 | 2.0.9 | 8.9.3 | 61.0.3163.100 | 88 | | 1.28.1 | 2.0.9 | 8.9.3 | 61.0.3163.100 | 89 | | 1.28.0 | 2.0.9 | 8.9.3 | 61.0.3163.100 | 90 | | 1.27.2 | 2.0.7 | 8.9.3 | 61.0.3163.100 | 91 | | 1.27.1 | 2.0.7 | 8.9.3 | 61.0.3163.100 | 92 | | 1.27.0 | 2.0.7 | 8.9.3 | 61.0.3163.100 | 93 | | 1.26.1 | 2.0.5 | 8.9.3 | 61.0.3163.100 | 94 | | 1.26.0 | 2.0.5 | 8.9.3 | 61.0.3163.100 | 95 | | 1.25.1 | 1.7.12 | 7.9.0 | 58.0.3029.110 | 96 | | 1.25.0 | 1.7.12 | 7.9.0 | 58.0.3029.110 | 97 | | 1.24.1 | 1.7.12 | 7.9.0 | 58.0.3029.110 | 98 | | 1.24.0 | 1.7.12 | 7.9.0 | 58.0.3029.110 | 99 | | 1.23.1 | 1.7.12 | 7.9.0 | 58.0.3029.110 | 100 | | 1.23.0 | 1.7.12 | 7.9.0 | 58.0.3029.110 | 101 | | 1.22.2 | 1.7.12 | 7.9.0 | 58.0.3029.110 | 102 | | 1.22.1 | 1.7.12 | 7.9.0 | 58.0.3029.110 | 103 | | 1.22.0 | 1.7.12 | 7.9.0 | 58.0.3029.110 | 104 | | 1.21.1 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 105 | | 1.21.0 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 106 | | 1.20.1 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 107 | | 1.20.0 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 108 | | 1.19.2 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 109 | | 1.19.1 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 110 | | 1.19.0 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 111 | | 1.18.1 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 112 | | 1.18.0 | 1.7.9 | 7.9.0 | 58.0.3029.110 | 113 | | 1.17.2 | 1.7.7 | 7.9.0 | 58.0.3029.110 | 114 | | 1.17.1 | 1.7.7 | 7.9.0 | 58.0.3029.110 | 115 | | 1.17.0 | 1.7.7 | 7.9.0 | 58.0.3029.110 | 116 | | 1.16.1 | 1.7.3 | 7.9.0 | 58.0.3029.110 | 117 | | 1.16.0 | 1.7.3 | 7.9.0 | 58.0.3029.110 | 118 | | 1.15.1 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 119 | | 1.15.0 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 120 | | 1.14.2 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 121 | | 1.14.1 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 122 | | 1.14.0 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 123 | | 1.13.1 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 124 | | 1.13.0 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 125 | | 1.12.2 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 126 | | 1.12.1 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 127 | | 1.12.0 | 1.6.6 | 7.4.0 | 56.0.2924.87 | 128 | | 1.11.2 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 129 | | 1.11.1 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 130 | | 1.11.0 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 131 | | 1.10.2 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 132 | | 1.10.1 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 133 | | 1.10.0 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 134 | | 1.9.1 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 135 | | 1.9.0 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 136 | | 1.8.1 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 137 | | 1.8.0 | 1.4.6 | 6.5.0 | 53.0.2785.143 | 138 | | 1.7.2 | 1.3.8 | 6.5.0 | 52.0.2743.82 | 139 | | 1.7.1 | 1.3.8 | 6.5.0 | 52.0.2743.82 | 140 | | 1.7.0 | 1.3.8 | 6.5.0 | 52.0.2743.82 | 141 | | 1.6.1 | 1.3.7 | 6.5.0 | 52.0.2743.82 | 142 | | 1.6.0 | 1.3.7 | 6.5.0 | 52.0.2743.82 | 143 | | 1.5.3 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 144 | | 1.5.2 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 145 | | 1.5.1 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 146 | | 1.5.0 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 147 | | 1.4.0 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 148 | | 1.3.1 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 149 | | 1.3.0 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 150 | | 1.2.1 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 151 | | 1.2.0 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 152 | | 1.1.1 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 153 | | 1.1.0 | 0.37.6 | 5.10.0 | 49.0.2623.75 | 154 | | 1.0.0 | 0.35.6 | 4.1.1 | 45.0.2454.85 | 155 | | 0.10.15-insiders | 0.35.6 | 4.1.1 | 45.0.2454.85 | 156 | | 0.10.14-insiders | 0.35.6 | 4.1.1 | 45.0.2454.85 | 157 | | 0.10.13-insiders | 0.35.6 | 4.1.1 | 45.0.2454.85 | 158 | | 0.10.12-insiders | 0.35.6 | 4.1.1 | 45.0.2454.85 | 159 | | 0.10.11 | 0.35.6 | 4.1.1 | 45.0.2454.85 | 160 | | 0.10.11-insiders | 0.35.6 | 4.1.1 | 45.0.2454.85 | 161 | | 0.10.10 | 0.35.6 | 4.1.1 | 45.0.2454.85 | 162 | | 0.10.10-insiders | 0.35.6 | 4.1.1 | 45.0.2454.85 | 163 | | 0.10.9 | 0.35.6 | 4.1.1 | 45.0.2454.85 | 164 | | 0.10.8 | 0.35.6 | 4.1.1 | 45.0.2454.85 | 165 | | 0.10.8-insiders | 0.35.6 | 4.1.1 | 45.0.2454.85 | 166 | | 0.10.7-insiders | 0.35.6 | 4.1.1 | 45.0.2454.85 | 167 | | 0.10.6 | 0.34.5 | 4.1.1 | 45.0.2454.85 | 168 | | 0.10.5 | 0.34.5 | 4.1.1 | 45.0.2454.85 | 169 | | 0.10.3 | 0.34.1 | 4.1.1 | 45.0.2454.85 | 170 | | 0.10.2 | 0.34.1 | 4.1.1 | 45.0.2454.85 | 171 | | 0.10.1 | 0.34.1 | 4.1.1 | 45.0.2454.85 | 172 | 173 | ## Open Issue About Electron Update 174 | 175 | | Title | Creator | Create | Update | 176 | | :---:| :-----: | :----: | :----: | 177 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs-plus'; 2 | import * as request from 'request-promise'; 3 | import * as https from 'https'; 4 | 5 | interface Tag { 6 | name: string; 7 | } 8 | 9 | interface VSCode { 10 | vscode: string; 11 | electron: string|undefined; 12 | node: string|undefined; 13 | chrome: string|undefined; 14 | } 15 | 16 | interface Issue { 17 | html_url: string, 18 | title: string, 19 | body: string, 20 | created_at: string, 21 | updated_at: string, 22 | user: { 23 | login: string, 24 | html_url: string 25 | } 26 | } 27 | 28 | const VERSION = require('../version.json') as VSCode[]; 29 | 30 | let tweet = '#VSCodeWatcher '; 31 | 32 | async function githubRequest(uri: string): Promise { 33 | const result = []; 34 | return await request({ 35 | uri, 36 | headers: {'User-Agent': 'VSCode Version Watcher'}, 37 | json: true, 38 | transform: async (body, response, resolveWithFullResponse) => { 39 | if (response.headers['link'] !== undefined) { 40 | const link = response.headers['link'] as string; 41 | const linkAttr = link.split(','); 42 | for (const attr of linkAttr) { 43 | const urlMatches = attr.match(/^\s*<(.*)>;\s*rel="(.*)"\s*$/); 44 | if (urlMatches && urlMatches.length > 2) { 45 | if (urlMatches[2] === 'next') { 46 | const res = await githubRequest(urlMatches[1]); 47 | return [body].concat(res) as T[]; 48 | } 49 | } 50 | } 51 | } 52 | return [body]; 53 | } 54 | }); 55 | } 56 | 57 | async function fetchVSCodeVersion() { 58 | const uri = `https://api.github.com/repos/Microsoft/vscode/tags?client_id=${ 59 | process.env.GITHUB_CLIENT_ID}&client_secret=${ 60 | process.env.GITHUB_CLIENT_SECRET}`; 61 | const tags: string[] = ['master']; 62 | const res = await githubRequest(uri); 63 | res.forEach(list => { 64 | list.forEach(tag => { 65 | if (/^\d+\.\d+\.\d+(\-insiders)?$/.test(tag.name)) { 66 | tags.push(tag.name); 67 | } 68 | }); 69 | }); 70 | return tags; 71 | } 72 | 73 | async function getElectron(vscodeVersion: string) { 74 | const uri = `https://raw.githubusercontent.com/Microsoft/vscode/${ 75 | vscodeVersion}/package.json?client_id=${ 76 | process.env.GITHUB_CLIENT_ID}&client_secret=${ 77 | process.env.GITHUB_CLIENT_SECRET}`; 78 | const pkg = await request( 79 | {uri, headers: {'User-Agent': 'VSCode Version Watcher'}, json: true}); 80 | 81 | let electronVersion = pkg.electronVersion as string; 82 | 83 | if (!electronVersion) { 84 | const uri = `https://raw.githubusercontent.com/Microsoft/vscode/${ 85 | vscodeVersion}/.yarnrc?client_id=${ 86 | process.env.GITHUB_CLIENT_ID}&client_secret=${ 87 | process.env.GITHUB_CLIENT_SECRET}`; 88 | const yarnc = await request( 89 | {uri, headers: {'User-Agent': 'VSCode Version Watcher'}, json: true}); 90 | const targetMatches = yarnc.match(/target "(.*?)"/); 91 | if (targetMatches && targetMatches.length > 1) { 92 | electronVersion = targetMatches[1]; 93 | } 94 | } 95 | 96 | return electronVersion; 97 | } 98 | 99 | async function getChromeVersion(electronVersion: string) { 100 | let chromeVersion: string|undefined = undefined; 101 | try { 102 | const uri = `https://raw.githubusercontent.com/electron/electron/v${ 103 | electronVersion}/atom/common/chrome_version.h?client_id=${ 104 | process.env.GITHUB_CLIENT_ID}&client_secret=${ 105 | process.env.GITHUB_CLIENT_SECRET}`; 106 | const chromeVersionHeaderFile = 107 | await request({uri, headers: {'User-Agent': 'VSCode Version Watcher'}}); 108 | const versionMatches = 109 | chromeVersionHeaderFile.match(/CHROME_VERSION_STRING "(.*?)"/); 110 | if (versionMatches && versionMatches.length > 1) { 111 | chromeVersion = versionMatches[1] as string; 112 | } 113 | } catch { 114 | const uri = `https://raw.githubusercontent.com/electron/electron/v${ 115 | electronVersion}/DEPS?client_id=${ 116 | process.env.GITHUB_CLIENT_ID}&client_secret=${ 117 | process.env.GITHUB_CLIENT_SECRET}`; 118 | const deps = 119 | await request({uri, headers: {'User-Agent': 'VSCode Version Watcher'}}); 120 | const versionMatches = deps.match(/'chromium_version':[\s\r\n]+'([0-9\.]+)'/); 121 | chromeVersion = versionMatches[1] as string; 122 | } 123 | 124 | return chromeVersion; 125 | } 126 | 127 | async function getNodeVersion(electronVersion: string) { 128 | let nodeSha:string|undefined; 129 | try { 130 | const uri = 131 | `https://api.github.com/repos/electron/electron/contents/vendor/node?ref=v${ 132 | electronVersion}&client_id=${ 133 | process.env.GITHUB_CLIENT_ID}&client_secret=${ 134 | process.env.GITHUB_CLIENT_SECRET}`; 135 | const nodeSubModule = await request( 136 | {uri, headers: {'User-Agent': 'VSCode Version Watcher'}, json: true}); 137 | nodeSha = nodeSubModule.sha; 138 | } catch { 139 | const uri = `https://raw.githubusercontent.com/electron/electron/v${ 140 | electronVersion}/DEPS?client_id=${ 141 | process.env.GITHUB_CLIENT_ID}&client_secret=${ 142 | process.env.GITHUB_CLIENT_SECRET}`; 143 | const deps = 144 | await request({uri, headers: {'User-Agent': 'VSCode Version Watcher'}}); 145 | const versionMatches = deps.match(/'node_version':[\s\r\n]+'(v?[0-9a-f\.]+)'/); 146 | const versionOrSha = versionMatches[1] as string; 147 | if (/^v/.test(versionOrSha)) { 148 | return versionOrSha.substr(1); 149 | } 150 | 151 | nodeSha = versionOrSha; 152 | } 153 | 154 | if (!nodeSha) { 155 | return undefined; 156 | } 157 | const nodeVersionUri = `https://raw.githubusercontent.com/electron/node/${ 158 | nodeSha}/src/node_version.h?client_id=${ 159 | process.env.GITHUB_CLIENT_ID}&client_secret=${ 160 | process.env.GITHUB_CLIENT_SECRET}`; 161 | const nodeVersionHeaderFile = await request( 162 | {uri: nodeVersionUri, headers: {'User-Agent': 'VSCode Version Watcher'}}); 163 | const nodeMajorVersionMatches = 164 | nodeVersionHeaderFile.match(/NODE_MAJOR_VERSION (\d+)/); 165 | const nodeMinorVersionMatches = 166 | nodeVersionHeaderFile.match(/NODE_MINOR_VERSION (\d+)/); 167 | const nodePatchVersionMatches = 168 | nodeVersionHeaderFile.match(/NODE_PATCH_VERSION (\d+)/); 169 | if (nodeMajorVersionMatches && nodeMajorVersionMatches.length > 1 && 170 | nodeMinorVersionMatches && nodeMinorVersionMatches.length > 1 && 171 | nodePatchVersionMatches && nodePatchVersionMatches.length > 1) { 172 | return `${nodeMajorVersionMatches[1]}.${nodeMinorVersionMatches[1]}.${ 173 | nodePatchVersionMatches[1]}`; 174 | } 175 | return undefined; 176 | } 177 | 178 | async function getIssues() { 179 | const issueUri = 'https://api.github.com/search/issues?q=is%3Aissue+archived%3Afalse+label%3Aelectron-update+is%3Aopen'; 180 | const issueApiRes = await request({uri: issueUri, headers: {'User-Agent': 'VSCode Version Watcher'}, json: true}) as {items: Issue[]}; 181 | const issueList = issueApiRes.items; 182 | let md = '\n\n## Open Issue About Electron Update\n\n| Title | Creator | Create | Update |\n| :---:| :-----: | :----: | :----: |\n'; 183 | for (let issue of issueList) { 184 | md += `| [${issue.title}](${issue.html_url}) | [${issue.user.login}](${issue.user.html_url}) | ${issue.created_at} | ${issue.updated_at}|\n`; 185 | } 186 | 187 | tweet += `${issueList.length} open issue(s) about Electron update. ` 188 | return md; 189 | } 190 | 191 | async function getVersions() { 192 | const vscodeVersions = await fetchVSCodeVersion(); 193 | const versionList: VSCode[] = []; 194 | 195 | const cachedVSersions: string[] = []; 196 | VERSION.forEach(v => { 197 | cachedVSersions.push(v.vscode); 198 | }); 199 | 200 | for (const version of vscodeVersions) { 201 | if (cachedVSersions.indexOf(version) >= 0) { 202 | continue; 203 | } 204 | 205 | console.log(`Fetching ${version}...`); 206 | const electronVersion = await getElectron(version); 207 | console.log('Electron:', electronVersion); 208 | const chromeVersion = await getChromeVersion(electronVersion); 209 | console.log('Chrome:', chromeVersion); 210 | const nodeVersion = await getNodeVersion(electronVersion); 211 | console.log('Node:', nodeVersion); 212 | 213 | const tag: VSCode = { 214 | vscode: version === 'master' ? 'Latest' : version, 215 | electron: electronVersion, 216 | chrome: chromeVersion, 217 | node: nodeVersion 218 | }; 219 | 220 | versionList.push(tag); 221 | } 222 | 223 | return versionList.concat(VERSION); 224 | } 225 | 226 | async function saveToFile(list: VSCode[]) { 227 | let md = `# VSCode Version Watcher\n\n`; 228 | let alertLevel = 0; 229 | 230 | if (list.length > 1) { 231 | if (list[0].electron && list[1].electron) { 232 | const ev1 = (list[0].electron as string).split('.'); 233 | const ev2 = (list[1].electron as string).split('.'); 234 | if (ev1[0] > ev2[0] || ev1[1] && ev2[1] && ev1[1] > ev2[1]) { 235 | alertLevel = 2; 236 | } 237 | 238 | const nv1 = (list[0].node as string).split('.'); 239 | const nv2 = (list[1].node as string).split('.'); 240 | if (nv1[0] > nv2[0] || nv1[1] && nv2[1] && nv1[1] > nv2[1]) { 241 | alertLevel = 2; 242 | } 243 | 244 | const cv1 = (list[0].chrome as string).split('.'); 245 | const cv2 = (list[1].chrome as string).split('.'); 246 | if (cv1[0] > cv2[0]) { 247 | alertLevel = 2; 248 | } 249 | } 250 | 251 | if (list.length > 2 && !alertLevel) { 252 | const ev1 = (list[1].electron as string).split('.'); 253 | const ev2 = (list[2].electron as string).split('.'); 254 | if (ev1[0] > ev2[0] || ev1[1] && ev2[1] && ev1[1] > ev2[1]) { 255 | alertLevel = 1; 256 | } 257 | 258 | const nv1 = (list[1].node as string).split('.'); 259 | const nv2 = (list[2].node as string).split('.'); 260 | if (nv1[0] > nv2[0] || nv1[1] && nv2[1] && nv1[1] > nv2[1]) { 261 | alertLevel = 1; 262 | } 263 | 264 | const cv1 = (list[1].chrome as string).split('.'); 265 | const cv2 = (list[2].chrome as string).split('.'); 266 | if (cv1[0] > cv2[0]) { 267 | alertLevel = 1; 268 | } 269 | } 270 | } 271 | 272 | switch (alertLevel) { 273 | case 0: 274 | md += `\`\`\`diff\n++ No change in recent release. ++\n\`\`\`\n\n`; 275 | tweet += 'No change in recent release. '; 276 | break; 277 | case 1: 278 | md += `\`\`\`diff\n@@ Notice: Change in current release. @@\n\`\`\`\n\n`; 279 | tweet += 'Notice: Change in current release. '; 280 | break; 281 | case 2: 282 | md += 283 | `\`\`\`diff\n-- Warning! Change in the next release. --\n\`\`\`\n\n`; 284 | tweet += 'Warning! Change in the next release. '; 285 | break; 286 | default: 287 | break; 288 | } 289 | 290 | md += `Last update: ${ 291 | new Date().toISOString().replace( 292 | /(T|\..*)/g, 293 | ' ')}GMT\n\n| VS Code | Electron | Node | Chrome |\n|:-------:|:--------:|:----:|:------:|`; 294 | list.forEach(version => { 295 | md += `\n| ${version.vscode} | ${version.electron || 'n/a'} | ${ 296 | version.node || 'n/a'} | ${version.chrome || 'n/a'} |`; 297 | }); 298 | 299 | md += await getIssues(); 300 | fs.writeFileSync('README.md', md); 301 | list.shift(); 302 | fs.writeFileSync('version.json', JSON.stringify(list)); 303 | } 304 | 305 | async function start() { 306 | const list = await getVersions(); 307 | await saveToFile(list); 308 | tweet += 'https://github.com/Sneezry/vscode-version-watcher#vscode-version-watcher'; 309 | console.log('Finished!'); 310 | } 311 | 312 | start(); -------------------------------------------------------------------------------- /version.json: -------------------------------------------------------------------------------- 1 | [{"vscode":"1.57.0","electron":"12.0.9","chrome":"89.0.4389.128","node":"14.16.0"},{"vscode":"1.56.2","electron":"12.0.4","chrome":"89.0.4389.114","node":"14.16.0"},{"vscode":"1.56.1","electron":"12.0.4","chrome":"89.0.4389.114","node":"14.16.0"},{"vscode":"1.56.0","electron":"12.0.4","chrome":"89.0.4389.114","node":"14.16.0"},{"vscode":"1.55.2","electron":"11.3.0","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.55.1","electron":"11.3.0","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.55.0","electron":"11.3.0","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.54.3","electron":"11.3.0","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.54.2","electron":"11.3.0","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.999.0","electron":"3.1.8","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.54.1","electron":"11.3.0","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.54.0","electron":"11.3.0","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.53.2","electron":"11.2.1","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.53.1","electron":"11.2.1","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.53.0","electron":"11.2.1","chrome":"87.0.4280.141","node":"12.18.3"},{"vscode":"1.52.1","electron":"9.3.5","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.52.0","electron":"9.3.5","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.51.1","electron":"9.3.3","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.51.0","electron":"9.3.3","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.50.1","electron":"9.2.1","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.50.0","electron":"9.2.1","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.49.3","electron":"9.2.1","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.49.2","electron":"9.2.1","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.49.1","electron":"9.2.1","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.49.0","electron":"9.2.1","chrome":"83.0.4103.122","node":"12.14.1"},{"vscode":"1.48.2","electron":"7.3.2","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.48.1","electron":"7.3.2","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.48.0","electron":"7.3.2","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.47.3","electron":"7.3.2","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.47.2","electron":"7.3.2","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.47.1","electron":"7.3.2","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.47.0","electron":"7.3.2","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.46.1","electron":"7.3.1","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.19.3","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.46.0","electron":"7.3.1","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.45.1","electron":"7.2.4","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.45.0","electron":"7.2.4","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.44.2","electron":"7.1.11","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.44.1","electron":"7.1.11","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.44.0","electron":"7.1.11","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.43.2","electron":"7.1.11","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.43.1","electron":"7.1.11","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.43.0","electron":"7.1.11","chrome":"78.0.3904.130","node":"12.8.1"},{"vscode":"1.42.1","electron":"6.1.6","chrome":"76.0.3809.146","node":"12.4.0"},{"vscode":"1.42.0","electron":"6.1.6","chrome":"76.0.3809.146","node":"12.4.0"},{"vscode":"1.41.1","electron":"6.1.5","chrome":"76.0.3809.146","node":"12.4.0"},{"vscode":"1.41.0","electron":"6.1.5","chrome":"76.0.3809.146","node":"12.4.0"},{"vscode":"1.40.2","electron":"6.1.5","chrome":"76.0.3809.146","node":"12.4.0"},{"vscode":"1.40.1","electron":"6.1.2","chrome":"76.0.3809.146","node":"12.4.0"},{"vscode":"1.40.0","electron":"6.1.2","chrome":"76.0.3809.146","node":"12.4.0"},{"vscode":"1.39.2","electron":"4.2.10","chrome":"69.0.3497.128","node":"10.11.0"},{"vscode":"1.39.1","electron":"4.2.10","chrome":"69.0.3497.128","node":"10.11.0"},{"vscode":"1.39.0","electron":"4.2.10","chrome":"69.0.3497.128","node":"10.11.0"},{"vscode":"1.38.1","electron":"4.2.10","chrome":"69.0.3497.128","node":"10.11.0"},{"vscode":"1.38.0","electron":"4.2.10","chrome":"69.0.3497.128","node":"10.11.0"},{"vscode":"1.37.1","electron":"4.2.7","chrome":"69.0.3497.128","node":"10.11.0"},{"vscode":"1.37.0","electron":"4.2.7","chrome":"69.0.3497.128","node":"10.11.0"},{"vscode":"1.36.1","electron":"4.2.5","chrome":"69.0.3497.128","node":"10.11.0"},{"vscode":"1.36.0","electron":"4.2.5","chrome":"69.0.3497.128","node":"10.11.0"},{"vscode":"1.35.1","electron":"3.1.8","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.35.0","electron":"3.1.8","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.34.0","electron":"3.1.8","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.33.1","electron":"3.1.6","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.33.0","electron":"3.1.6","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.32.3","electron":"3.1.6","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.32.2","electron":"3.1.6","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.32.1","electron":"3.1.3","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.32.0","electron":"3.1.3","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.31.1","electron":"3.1.2","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.31.0","electron":"3.1.2","chrome":"66.0.3359.181","node":"10.2.0"},{"vscode":"1.30.2","electron":"2.0.12","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.30.1","electron":"2.0.12","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.30.0","electron":"2.0.12","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.29.1","electron":"2.0.12","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.29.0","electron":"2.0.12","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.28.2","electron":"2.0.9","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.28.1","electron":"2.0.9","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.28.0","electron":"2.0.9","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.27.2","electron":"2.0.7","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.27.1","electron":"2.0.7","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.27.0","electron":"2.0.7","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.26.1","electron":"2.0.5","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.26.0","electron":"2.0.5","chrome":"61.0.3163.100","node":"8.9.3"},{"vscode":"1.25.1","electron":"1.7.12","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.25.0","electron":"1.7.12","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.24.1","electron":"1.7.12","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.24.0","electron":"1.7.12","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.23.1","electron":"1.7.12","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.23.0","electron":"1.7.12","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.22.2","electron":"1.7.12","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.22.1","electron":"1.7.12","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.22.0","electron":"1.7.12","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.21.1","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.21.0","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.20.1","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.20.0","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.19.2","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.19.1","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.19.0","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.18.1","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.18.0","electron":"1.7.9","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.17.2","electron":"1.7.7","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.17.1","electron":"1.7.7","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.17.0","electron":"1.7.7","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.16.1","electron":"1.7.3","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.16.0","electron":"1.7.3","chrome":"58.0.3029.110","node":"7.9.0"},{"vscode":"1.15.1","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.15.0","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.14.2","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.14.1","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.14.0","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.13.1","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.13.0","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.12.2","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.12.1","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.12.0","electron":"1.6.6","chrome":"56.0.2924.87","node":"7.4.0"},{"vscode":"1.11.2","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.11.1","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.11.0","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.10.2","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.10.1","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.10.0","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.9.1","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.9.0","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.8.1","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.8.0","electron":"1.4.6","chrome":"53.0.2785.143","node":"6.5.0"},{"vscode":"1.7.2","electron":"1.3.8","chrome":"52.0.2743.82","node":"6.5.0"},{"vscode":"1.7.1","electron":"1.3.8","chrome":"52.0.2743.82","node":"6.5.0"},{"vscode":"1.7.0","electron":"1.3.8","chrome":"52.0.2743.82","node":"6.5.0"},{"vscode":"1.6.1","electron":"1.3.7","chrome":"52.0.2743.82","node":"6.5.0"},{"vscode":"1.6.0","electron":"1.3.7","chrome":"52.0.2743.82","node":"6.5.0"},{"vscode":"1.5.3","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.5.2","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.5.1","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.5.0","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.4.0","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.3.1","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.3.0","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.2.1","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.2.0","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.1.1","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.1.0","electron":"0.37.6","chrome":"49.0.2623.75","node":"5.10.0"},{"vscode":"1.0.0","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.15-insiders","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.14-insiders","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.13-insiders","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.12-insiders","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.11","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.11-insiders","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.10","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.10-insiders","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.9","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.8","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.8-insiders","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.7-insiders","electron":"0.35.6","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.6","electron":"0.34.5","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.5","electron":"0.34.5","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.3","electron":"0.34.1","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.2","electron":"0.34.1","chrome":"45.0.2454.85","node":"4.1.1"},{"vscode":"0.10.1","electron":"0.34.1","chrome":"45.0.2454.85","node":"4.1.1"}] --------------------------------------------------------------------------------