├── ide-host-service
├── .gitignore
├── package.json
├── extensions
│ └── extension.js
├── rpcProtocol.js
├── extensionsApi.js
├── main.js
└── yarn.lock
├── ide-online
├── .gitignore
├── tsconfig.json
├── tslint.json
├── index.html
├── src
│ ├── extensionsActions.ts
│ ├── workbench.css
│ ├── extensionHostAgent.ts
│ └── app.ts
├── .babelrc
├── package.json
└── webpack.config.js
├── .gitignore
└── README.md
/ide-host-service/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/ide-online/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | build/
3 | dist/
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/build
3 | **/dist
4 | **/.vscode
5 |
--------------------------------------------------------------------------------
/ide-online/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "sourceMap": true
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## webide-extensions-example
2 |
3 | ```shell
4 | cd ide-host-service
5 | yarn install
6 | node main.js
7 |
8 |
9 | cd ide-online
10 | yarn install
11 | yarn dev
12 | ```
13 |
--------------------------------------------------------------------------------
/ide-online/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "defaultSeverity": "error",
3 | "extends": [
4 | "tslint:recommended"
5 | ],
6 | "jsRules": {},
7 | "rules": {},
8 | "rulesDirectory": []
9 | }
--------------------------------------------------------------------------------
/ide-host-service/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ide-host-service",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "author": "sakuraash <841105127@qq.com>",
6 | "license": "MIT",
7 | "dependencies": {
8 | "socket.io": "^2.2.0"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/ide-host-service/extensions/extension.js:
--------------------------------------------------------------------------------
1 | const ide = require('ide');
2 |
3 | function activate() {
4 | console.log('activate extension!');
5 | setTimeout(() => {
6 | ide.setStatusBarMessage('Hello World!');
7 | ide.showAlert('抓不到我吧!');
8 | }, 5000);
9 | }
10 |
11 | module.exports = activate;
12 |
--------------------------------------------------------------------------------
/ide-online/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | IDE-Online
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/ide-online/src/extensionsActions.ts:
--------------------------------------------------------------------------------
1 | const extensionsActions = {
2 | setStatusBarMessage: (message: string) => {
3 | const statusBar = document.querySelector(".status-bar");
4 | statusBar.innerHTML = message;
5 | },
6 | showAlert: (message: string) => {
7 | window.alert(message.toString());
8 | },
9 | };
10 |
11 | export default extensionsActions;
12 |
--------------------------------------------------------------------------------
/ide-host-service/rpcProtocol.js:
--------------------------------------------------------------------------------
1 | let _rpcProtocol = null;
2 | class RPCProtocol {
3 | static getInstance() {
4 | if (!_rpcProtocol) {
5 | _rpcProtocol = new RPCProtocol();
6 | }
7 | return _rpcProtocol;
8 | }
9 |
10 | setSocket(socket) {
11 | this.socket = socket;
12 | }
13 |
14 | emit(method, args) {
15 | this.socket.emit(method, args);
16 | }
17 | }
18 |
19 | module.exports = RPCProtocol.getInstance();
20 |
--------------------------------------------------------------------------------
/ide-host-service/extensionsApi.js:
--------------------------------------------------------------------------------
1 | const rpcProtocol = require('./rpcProtocol');
2 |
3 | function rpcCall(name, args) {
4 | if (rpcProtocol) {
5 | rpcProtocol.emit('[RPC-MESSAGE]', { method: name, args });
6 | }
7 | }
8 |
9 | function apiFactory() {
10 | const handler = {
11 | get: (target, name) => {
12 | target[name] = (...args) => {
13 | rpcCall(name, args);
14 | }
15 | return target[name];
16 | }
17 | }
18 | const proxy = new Proxy(Object.create(null), handler)
19 | return proxy;
20 | }
21 |
22 | module.exports = apiFactory();
23 |
--------------------------------------------------------------------------------
/ide-host-service/main.js:
--------------------------------------------------------------------------------
1 | const Module = require('module');
2 | const original = Module.prototype.require;
3 |
4 | Module.prototype.require = function(request) {
5 | if (request !== 'ide') {
6 | return original.apply(this, arguments);
7 | }
8 | return require('./extensionsApi');
9 | }
10 |
11 | const server = require('http').createServer();
12 | const io = require('socket.io')(server);
13 | const rpcProtocol = require('./rpcProtocol');
14 |
15 | io.on('connection', client => {
16 | const extension = require('./extensions/extension');
17 | rpcProtocol.setSocket(client);
18 | extension();
19 | });
20 |
21 | server.listen(7788, () => {
22 | console.log('Extension host service is running on port: 7788!');
23 | });
24 |
--------------------------------------------------------------------------------
/ide-online/src/workbench.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | margin: 0px;
3 | padding: 0px;
4 | }
5 |
6 | * {
7 | margin: 0px;
8 | padding: 0px;
9 | }
10 |
11 | #app {
12 | position: absolute;
13 | width: 100%;
14 | height: 100%;
15 | display: flex;
16 | flex-direction: column;
17 | }
18 |
19 | .ide-online-workbench {
20 | width: 100%;
21 | height: 100%;
22 | background-color: #24272e;
23 | overflow: hidden;
24 | display: flex;
25 | flex: 1;
26 | }
27 |
28 | .file-tree {
29 | min-width: 350px;
30 | height: 100%;
31 | background-color: #1e2126;
32 | }
33 |
34 | .editor-area {
35 | flex: 1;
36 | }
37 |
38 | .status-bar {
39 | height: 20px;
40 | font-size: 12px;
41 | display: flex;
42 | align-items: center;
43 | background-color: blueviolet;
44 | }
45 |
--------------------------------------------------------------------------------
/ide-online/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["@babel/preset-env", {"modules": false, "useBuiltIns": "entry"}],
4 | ["@babel/preset-stage-0", { "decoratorsLegacy": true }]
5 | ],
6 | "plugins": [
7 | "@babel/plugin-syntax-export-default-from",
8 | "@babel/plugin-syntax-dynamic-import",
9 | ["@babel/plugin-proposal-decorators", { "legacy": true }],
10 | ["@babel/plugin-proposal-class-properties", { "loose": true }]
11 | ],
12 | "env": {
13 | "production": {
14 | "plugins": [
15 | ]
16 | },
17 | "development": {
18 | "plugins": [
19 | ]
20 | },
21 | "test": {
22 | "presets": ["@babel/preset-es2015", "@babel/preset-stage-0"],
23 | "plugins": [
24 | ["@babel/plugin-proposal-decorators", { "legacy": true }]
25 | ]
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/ide-online/src/extensionHostAgent.ts:
--------------------------------------------------------------------------------
1 | import * as io from "socket.io-client";
2 |
3 | import extensionActions from "./extensionsActions";
4 |
5 | interface IRPCMessage {
6 | method: string;
7 | args: any;
8 | }
9 |
10 | function connectExtensionHostService() {
11 | console.log("this is extension host agent!");
12 | // will connect to extension host
13 | const socketOptions = {
14 | reconnection: true,
15 | reconnectionAttempts: 1,
16 | reconnectionDelay: 2000,
17 | transports: ["websocket"],
18 | query: {
19 | port: 9988,
20 | },
21 | };
22 |
23 | const client = io.connect(
24 | "localhost:7788",
25 | socketOptions,
26 | );
27 |
28 | client.on("[RPC-MESSAGE]", rpcMessasgeHandler);
29 | }
30 |
31 | function rpcMessasgeHandler(message: IRPCMessage) {
32 | const { method, args } = message;
33 | extensionActions[method].call({}, args);
34 | }
35 |
36 | export { connectExtensionHostService };
37 |
--------------------------------------------------------------------------------
/ide-online/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ide-online",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "devDependencies": {
7 | "@babel/core": "^7.2.2",
8 | "@babel/plugin-proposal-class-properties": "^7.2.3",
9 | "@babel/plugin-proposal-decorators": "^7.2.3",
10 | "@babel/plugin-syntax-dynamic-import": "^7.2.0",
11 | "@babel/plugin-syntax-export-default-from": "^7.2.0",
12 | "@babel/plugin-transform-runtime": "^7.2.0",
13 | "@babel/preset-env": "^7.2.3",
14 | "@babel/preset-es2015": "^7.0.0-beta.53",
15 | "@babel/preset-stage-0": "^7.0.0",
16 | "css-loader": "^2.1.0",
17 | "html-webpack-plugin": "^3.2.0",
18 | "monaco-editor-webpack-plugin": "^1.7.0",
19 | "style-loader": "^0.23.1",
20 | "ts-loader": "^5.3.3",
21 | "webpack": "^4.28.3",
22 | "webpack-cli": "^3.2.0",
23 | "webpack-dev-server": "^3.1.14",
24 | "webpackbar": "^3.1.4"
25 | },
26 | "scripts": {
27 | "dev": "node_modules/.bin/webpack-dev-server --mode development --progress --colors --public"
28 | },
29 | "dependencies": {
30 | "@types/socket.io-client": "^1.4.32",
31 | "monaco-editor": "^0.15.6",
32 | "monaco-editor-core": "^0.15.5",
33 | "socket.io-client": "^2.2.0"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/ide-online/src/app.ts:
--------------------------------------------------------------------------------
1 | import * as monaco from "monaco-editor";
2 |
3 | import { connectExtensionHostService } from "./extensionHostAgent";
4 | import "./workbench.css";
5 |
6 | const app = document.querySelector("#app");
7 |
8 | const workbench = document.createElement("div");
9 | workbench.className = "ide-online-workbench";
10 | app.appendChild(workbench);
11 |
12 | const statusBar = document.createElement("div");
13 | statusBar.className = "status-bar";
14 | app.appendChild(statusBar);
15 |
16 | const fileTree = document.createElement("div");
17 | fileTree.className = "file-tree";
18 | workbench.appendChild(fileTree);
19 |
20 | const editorArea = document.createElement("div");
21 | editorArea.className = "editor-area";
22 | workbench.appendChild(editorArea);
23 |
24 | const value = `
25 | import * as monaco from 'monaco-editor';
26 |
27 | import "./workbench.css";
28 | import { connectExtensionHostService } from "./extensionHostAgent";
29 |
30 | const app = document.querySelector('#app');
31 | const workbench = document.createElement('div');
32 |
33 | workbench.className = 'ide-online-workbench';
34 |
35 | app.appendChild(workbench);
36 |
37 | const fileTree = document.createElement("div");
38 | fileTree.className = "file-tree";
39 | workbench.appendChild(fileTree);
40 |
41 | const editorArea = document.createElement('div');
42 | editorArea.className = "editor-area";
43 |
44 | workbench.appendChild(editorArea);
45 |
46 |
47 | const editor = monaco.editor.create(editorArea, {
48 | language: 'typescript',
49 | value: '',
50 | theme: "vs-dark",
51 | });
52 |
53 | connectExtensionHostService();
54 | `;
55 |
56 | const editor = monaco.editor.create(editorArea, {
57 | language: "typescript",
58 | theme: "vs-dark",
59 | value,
60 | });
61 |
62 | connectExtensionHostService();
63 |
--------------------------------------------------------------------------------
/ide-online/webpack.config.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack');
2 | const path = require('path');
3 | const HtmlWebpackPlugin = require('html-webpack-plugin')
4 | const WebpackBar = require('webpackbar');
5 | const MonacoWebPackPlugin = require('monaco-editor-webpack-plugin');
6 |
7 | const ROOT_PATH = path.resolve(__dirname);
8 |
9 | module.exports = {
10 | entry: path.join(ROOT_PATH, 'src/app.ts'),
11 | output: {
12 | path: path.join(ROOT_PATH, 'build'),
13 | filename: '[name].[hash].js',
14 | chunkFilename: '[name].[hash].chunk.js',
15 | },
16 | devtool: 'source-map',
17 | resolve: {
18 | extensions: ['*', '.ts', '.tsx', '.js'],
19 | },
20 | node: {
21 | fs: 'empty',
22 | child_process: 'empty',
23 | net: 'empty',
24 | crypto: 'empty'
25 | },
26 | optimization: {
27 | runtimeChunk: true,
28 | splitChunks: {
29 | minChunks: 1,
30 | chunks: 'all',
31 | cacheGroups: {
32 | commons: {
33 | name: "commons",
34 | chunks: "initial",
35 | minChunks: 2
36 | },
37 | vendors: {
38 | test: /[\\/]node_modules[\\/]/,
39 | priority: -10
40 | },
41 | default: {
42 | minChunks: 2,
43 | priority: -20,
44 | reuseExistingChunk: true
45 | }
46 | }
47 | },
48 | },
49 | plugins: [
50 | new HtmlWebpackPlugin({
51 | title: 'IDE-Online',
52 | filename: 'index.html',
53 | template: path.join(ROOT_PATH, 'index.html'),
54 | }),
55 | new WebpackBar({
56 | profile: true
57 | }),
58 | new MonacoWebPackPlugin({
59 | languages: ['TypeScript'],
60 | features: [],
61 | }),
62 | new webpack.HotModuleReplacementPlugin()
63 | ],
64 | module: {
65 | rules: [
66 | { test: /\.tsx?$/, loader: "ts-loader" },
67 | { test: /\.css?$/, use: ["style-loader", "css-loader"] },
68 | ]
69 | },
70 | devServer: {
71 | hot: true,
72 | inline: true,
73 | disableHostCheck: true,
74 | port: 8899,
75 | },
76 | }
77 |
--------------------------------------------------------------------------------
/ide-host-service/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | accepts@~1.3.4:
6 | version "1.3.5"
7 | resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
8 | integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
9 | dependencies:
10 | mime-types "~2.1.18"
11 | negotiator "0.6.1"
12 |
13 | after@0.8.2:
14 | version "0.8.2"
15 | resolved "https://registry.npmjs.org/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
16 | integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
17 |
18 | arraybuffer.slice@~0.0.7:
19 | version "0.0.7"
20 | resolved "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
21 | integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==
22 |
23 | async-limiter@~1.0.0:
24 | version "1.0.0"
25 | resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
26 | integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
27 |
28 | backo2@1.0.2:
29 | version "1.0.2"
30 | resolved "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
31 | integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
32 |
33 | base64-arraybuffer@0.1.5:
34 | version "0.1.5"
35 | resolved "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
36 | integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
37 |
38 | base64id@1.0.0:
39 | version "1.0.0"
40 | resolved "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
41 | integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=
42 |
43 | better-assert@~1.0.0:
44 | version "1.0.2"
45 | resolved "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
46 | integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
47 | dependencies:
48 | callsite "1.0.0"
49 |
50 | blob@0.0.5:
51 | version "0.0.5"
52 | resolved "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
53 | integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==
54 |
55 | callsite@1.0.0:
56 | version "1.0.0"
57 | resolved "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
58 | integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
59 |
60 | component-bind@1.0.0:
61 | version "1.0.0"
62 | resolved "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
63 | integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
64 |
65 | component-emitter@1.2.1:
66 | version "1.2.1"
67 | resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
68 | integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
69 |
70 | component-inherit@0.0.3:
71 | version "0.0.3"
72 | resolved "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
73 | integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
74 |
75 | cookie@0.3.1:
76 | version "0.3.1"
77 | resolved "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
78 | integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
79 |
80 | debug@~3.1.0:
81 | version "3.1.0"
82 | resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
83 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
84 | dependencies:
85 | ms "2.0.0"
86 |
87 | debug@~4.1.0:
88 | version "4.1.1"
89 | resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
90 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
91 | dependencies:
92 | ms "^2.1.1"
93 |
94 | engine.io-client@~3.3.1:
95 | version "3.3.1"
96 | resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.1.tgz#afedb4a07b2ea48b7190c3136bfea98fdd4f0f03"
97 | integrity sha512-q66JBFuQcy7CSlfAz9L3jH+v7DTT3i6ZEadYcVj2pOs8/0uJHLxKX3WBkGTvULJMdz0tUCyJag0aKT/dpXL9BQ==
98 | dependencies:
99 | component-emitter "1.2.1"
100 | component-inherit "0.0.3"
101 | debug "~3.1.0"
102 | engine.io-parser "~2.1.1"
103 | has-cors "1.1.0"
104 | indexof "0.0.1"
105 | parseqs "0.0.5"
106 | parseuri "0.0.5"
107 | ws "~6.1.0"
108 | xmlhttprequest-ssl "~1.5.4"
109 | yeast "0.1.2"
110 |
111 | engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
112 | version "2.1.3"
113 | resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6"
114 | integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==
115 | dependencies:
116 | after "0.8.2"
117 | arraybuffer.slice "~0.0.7"
118 | base64-arraybuffer "0.1.5"
119 | blob "0.0.5"
120 | has-binary2 "~1.0.2"
121 |
122 | engine.io@~3.3.1:
123 | version "3.3.2"
124 | resolved "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz#18cbc8b6f36e9461c5c0f81df2b830de16058a59"
125 | integrity sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==
126 | dependencies:
127 | accepts "~1.3.4"
128 | base64id "1.0.0"
129 | cookie "0.3.1"
130 | debug "~3.1.0"
131 | engine.io-parser "~2.1.0"
132 | ws "~6.1.0"
133 |
134 | has-binary2@~1.0.2:
135 | version "1.0.3"
136 | resolved "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
137 | integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==
138 | dependencies:
139 | isarray "2.0.1"
140 |
141 | has-cors@1.1.0:
142 | version "1.1.0"
143 | resolved "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
144 | integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
145 |
146 | indexof@0.0.1:
147 | version "0.0.1"
148 | resolved "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
149 | integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
150 |
151 | isarray@2.0.1:
152 | version "2.0.1"
153 | resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
154 | integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=
155 |
156 | mime-db@~1.37.0:
157 | version "1.37.0"
158 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
159 | integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==
160 |
161 | mime-types@~2.1.18:
162 | version "2.1.21"
163 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
164 | integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==
165 | dependencies:
166 | mime-db "~1.37.0"
167 |
168 | ms@2.0.0:
169 | version "2.0.0"
170 | resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
171 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
172 |
173 | ms@^2.1.1:
174 | version "2.1.1"
175 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
176 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
177 |
178 | negotiator@0.6.1:
179 | version "0.6.1"
180 | resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
181 | integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
182 |
183 | object-component@0.0.3:
184 | version "0.0.3"
185 | resolved "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
186 | integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
187 |
188 | parseqs@0.0.5:
189 | version "0.0.5"
190 | resolved "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
191 | integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
192 | dependencies:
193 | better-assert "~1.0.0"
194 |
195 | parseuri@0.0.5:
196 | version "0.0.5"
197 | resolved "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
198 | integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
199 | dependencies:
200 | better-assert "~1.0.0"
201 |
202 | socket.io-adapter@~1.1.0:
203 | version "1.1.1"
204 | resolved "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
205 | integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=
206 |
207 | socket.io-client@2.2.0:
208 | version "2.2.0"
209 | resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7"
210 | integrity sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==
211 | dependencies:
212 | backo2 "1.0.2"
213 | base64-arraybuffer "0.1.5"
214 | component-bind "1.0.0"
215 | component-emitter "1.2.1"
216 | debug "~3.1.0"
217 | engine.io-client "~3.3.1"
218 | has-binary2 "~1.0.2"
219 | has-cors "1.1.0"
220 | indexof "0.0.1"
221 | object-component "0.0.3"
222 | parseqs "0.0.5"
223 | parseuri "0.0.5"
224 | socket.io-parser "~3.3.0"
225 | to-array "0.1.4"
226 |
227 | socket.io-parser@~3.3.0:
228 | version "3.3.0"
229 | resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f"
230 | integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==
231 | dependencies:
232 | component-emitter "1.2.1"
233 | debug "~3.1.0"
234 | isarray "2.0.1"
235 |
236 | socket.io@^2.2.0:
237 | version "2.2.0"
238 | resolved "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz#f0f633161ef6712c972b307598ecd08c9b1b4d5b"
239 | integrity sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==
240 | dependencies:
241 | debug "~4.1.0"
242 | engine.io "~3.3.1"
243 | has-binary2 "~1.0.2"
244 | socket.io-adapter "~1.1.0"
245 | socket.io-client "2.2.0"
246 | socket.io-parser "~3.3.0"
247 |
248 | to-array@0.1.4:
249 | version "0.1.4"
250 | resolved "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
251 | integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
252 |
253 | ws@~6.1.0:
254 | version "6.1.2"
255 | resolved "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz#3cc7462e98792f0ac679424148903ded3b9c3ad8"
256 | integrity sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==
257 | dependencies:
258 | async-limiter "~1.0.0"
259 |
260 | xmlhttprequest-ssl@~1.5.4:
261 | version "1.5.5"
262 | resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
263 | integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
264 |
265 | yeast@0.1.2:
266 | version "0.1.2"
267 | resolved "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
268 | integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
269 |
--------------------------------------------------------------------------------