feat: join and spectate (#127)
* feat: test join and spectate * feat: testing spectates * feat: add spectate command * fix: change it to spectate secret * feat: allow and disable spectate * feat: add join requests * chore: add commands * chore: bunch of logs * chore: use latest vsls version * chore: more logs * hack: race conditions and autofilling * fix: handle accepting and rejecting inside of vscode * cleanup: remove logs and add comments * chore: more comments * feat: dynamically update party size * feat: encode secrets and add changable partyId * fix: change encoding * fix: partyId * chore: add feature to readme
This commit is contained in:
parent
d803e8d8ef
commit
eb60a54ac2
6 changed files with 376 additions and 31 deletions
|
@ -21,7 +21,8 @@
|
|||
* Respects Discords 15sec limit when it comes to updating your status
|
||||
* Stable or Insiders build detection
|
||||
* Debug mode detection
|
||||
* Easily manually reconnect to discord
|
||||
* Easily manually reconnect to Discord
|
||||
* **(NEW)** VSCode Live Share support!
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
|
25
package.json
25
package.json
|
@ -42,6 +42,26 @@
|
|||
"command": "discord.reconnect",
|
||||
"title": "Reconnect Discord Presence to Discord RPC",
|
||||
"category": "Discord Presence"
|
||||
},
|
||||
{
|
||||
"command": "discord.allowSpectate",
|
||||
"title": "Allow spectating",
|
||||
"category": "Discord Presence"
|
||||
},
|
||||
{
|
||||
"command": "discord.disableSpectate",
|
||||
"title": "Disable spectating",
|
||||
"category": "Discord Presence"
|
||||
},
|
||||
{
|
||||
"command": "discord.allowJoinRequests",
|
||||
"title": "Allow join requests",
|
||||
"category": "Discord Presence"
|
||||
},
|
||||
{
|
||||
"command": "discord.disableJoinRequests",
|
||||
"title": "Disable join requests",
|
||||
"category": "Discord Presence"
|
||||
}
|
||||
],
|
||||
"configuration": [
|
||||
|
@ -148,7 +168,10 @@
|
|||
"theme": "dark"
|
||||
},
|
||||
"dependencies": {
|
||||
"discord-rpc": "iCrawl/rpc#custom"
|
||||
"clipboardy": "^1.2.3",
|
||||
"discord-rpc": "iCrawl/rpc#custom",
|
||||
"register-scheme": "devsnek/node-register-scheme",
|
||||
"vsls": "^0.3.967"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^10.12.11",
|
||||
|
|
|
@ -2,11 +2,14 @@ const { Client } = require('discord-rpc'); // tslint:disable-line
|
|||
import {
|
||||
Disposable,
|
||||
StatusBarItem,
|
||||
window,
|
||||
workspace
|
||||
workspace,
|
||||
Uri,
|
||||
window
|
||||
} from 'vscode'; // tslint:disable-line
|
||||
import * as vsls from 'vsls/vscode';
|
||||
import Activity from '../structures/Activity';
|
||||
import Logger from '../structures/Logger';
|
||||
const clipboardy = require('clipboardy');
|
||||
|
||||
let activityTimer: NodeJS.Timer;
|
||||
|
||||
|
@ -37,11 +40,37 @@ export default class RPCClient implements Disposable {
|
|||
this._rpc.setActivity(activity);
|
||||
}
|
||||
|
||||
public async allowSpectate() {
|
||||
if (!this._rpc) return;
|
||||
Logger.log('Allowed spectating.');
|
||||
Logger.log('Sending spectate activity to Discord.');
|
||||
await this._activity.allowSpectate();
|
||||
}
|
||||
|
||||
public async disableSpectate() {
|
||||
if (!this._rpc) return;
|
||||
Logger.log('Disabled spectating.');
|
||||
await this._activity.disableSpectate();
|
||||
}
|
||||
|
||||
public async allowJoinRequests() {
|
||||
if (!this._rpc) return;
|
||||
Logger.log('Allowed join requests.');
|
||||
Logger.log('Sending join activity to Discord.');
|
||||
await this._activity.allowJoinRequests();
|
||||
}
|
||||
|
||||
public async disableJoinRequests() {
|
||||
if (!this._rpc) return;
|
||||
Logger.log('Disabled join requests.');
|
||||
await this._activity.disableJoinRequests();
|
||||
}
|
||||
|
||||
public async login() {
|
||||
if (this._rpc) return;
|
||||
this._rpc = new Client({ transport: 'ipc' });
|
||||
Logger.log('Logging into RPC.');
|
||||
this._rpc.once('ready', () => {
|
||||
this._rpc.once('ready', async () => {
|
||||
Logger.log('Successfully connected to Discord.');
|
||||
this.statusBarIcon.text = '$(globe) Connected to Discord';
|
||||
this.statusBarIcon.tooltip = 'Connected to Discord';
|
||||
|
@ -55,6 +84,63 @@ export default class RPCClient implements Disposable {
|
|||
this.config = workspace.getConfiguration('discord');
|
||||
this.setActivity(this.config.get<boolean>('workspaceElapsedTime'));
|
||||
}, 10000);
|
||||
|
||||
this._rpc.subscribe('ACTIVITY_SPECTATE', async ({ secret }: { secret: string }) => {
|
||||
const liveshare = await vsls.getApi();
|
||||
if (!liveshare) return;
|
||||
try {
|
||||
const s = Buffer.from(secret, 'base64').toString();
|
||||
// You might be asking yourself: "but why?"
|
||||
// VS Liveshare has this annoying bug where you convert a URL string to a URI object to autofill
|
||||
// But the autofill will be empty, so to circumvent this I need to add copying the link to the clipboard
|
||||
// And immediately pasting it after the window pops up empty
|
||||
await clipboardy.write(s);
|
||||
await liveshare.join(Uri.parse(s));
|
||||
await clipboardy.read();
|
||||
} catch (error) {
|
||||
Logger.log(error);
|
||||
}
|
||||
});
|
||||
|
||||
// You might be asking yourself again: "but why?"
|
||||
// Same here, this is a real nasty race condition that happens inside the discord-rpc module currently
|
||||
// To circumvent this we need to timeout sending the subscribe events to the discord client
|
||||
setTimeout(() => {
|
||||
this._rpc.subscribe('ACTIVITY_JOIN_REQUEST', async ({ user }: { user: { username: string, discriminator: string } }) => {
|
||||
window.showInformationMessage(`${user.username}#${user.discriminator} wants to join your session`, { title: 'Accept' }, { title: 'Decline' })
|
||||
.then(async val => {
|
||||
if (val && val.title === 'Accept') await this._rpc.sendJoinInvite(user);
|
||||
else await this._rpc.closeJoinRequest(user);
|
||||
});
|
||||
});
|
||||
}, 500);
|
||||
setTimeout(() => {
|
||||
this._rpc.subscribe('ACTIVITY_JOIN', async ({ secret }: { secret: string }) => {
|
||||
const liveshare = await vsls.getApi();
|
||||
if (!liveshare) return;
|
||||
try {
|
||||
const s = Buffer.from(secret, 'base64').toString();
|
||||
// You might be asking yourself again again: "but why?"
|
||||
// See first comment on clipboardy above
|
||||
await clipboardy.write(s);
|
||||
await liveshare.join(Uri.parse(s));
|
||||
await clipboardy.read();
|
||||
} catch (error) {
|
||||
Logger.log(error);
|
||||
}
|
||||
});
|
||||
}, 1000);
|
||||
|
||||
const liveshare = await vsls.getApi();
|
||||
if (!liveshare) return;
|
||||
liveshare.onDidChangeSession(({ session }) => {
|
||||
if (session.id) return this._activity.changePartyId(session.id);
|
||||
else return this._activity.changePartyId();
|
||||
});
|
||||
liveshare.onDidChangePeers(({ added, removed }) => {
|
||||
if (added.length) return this._activity.increasePartySize();
|
||||
else if (removed.length) return this._activity.decreasePartySize();
|
||||
});
|
||||
});
|
||||
|
||||
this._rpc.transport.once('close', async () => {
|
||||
|
@ -64,6 +150,7 @@ export default class RPCClient implements Disposable {
|
|||
this.statusBarIcon.command = 'discord.reconnect';
|
||||
this.statusBarIcon.tooltip = '';
|
||||
});
|
||||
|
||||
await this._rpc.login({ clientId: this._clientId });
|
||||
}
|
||||
|
||||
|
|
|
@ -8,11 +8,13 @@ import {
|
|||
} from 'vscode'; // tslint:disable-line
|
||||
import RPCClient from './client/RPCClient';
|
||||
import Logger from './structures/Logger';
|
||||
const { register } = require('discord-rpc'); // tslint:disable-line
|
||||
|
||||
const statusBarIcon: StatusBarItem = window.createStatusBarItem(StatusBarAlignment.Left);
|
||||
statusBarIcon.text = '$(pulse) Connecting to Discord...';
|
||||
|
||||
const config = workspace.getConfiguration('discord');
|
||||
register(config.get<string>('clientID'));
|
||||
const rpc = new RPCClient(config.get<string>('clientID')!, statusBarIcon);
|
||||
|
||||
export async function activate(context: ExtensionContext) {
|
||||
|
@ -60,7 +62,23 @@ export async function activate(context: ExtensionContext) {
|
|||
rpc.statusBarIcon.command = undefined;
|
||||
});
|
||||
|
||||
context.subscriptions.push(enabler, disabler, reconnecter);
|
||||
const allowSpectate = commands.registerCommand('discord.allowSpectate', async () => {
|
||||
await rpc.allowSpectate();
|
||||
});
|
||||
|
||||
const disableSpectate = commands.registerCommand('discord.disableSpectate', async () => {
|
||||
await rpc.disableSpectate();
|
||||
});
|
||||
|
||||
const allowJoinRequests = commands.registerCommand('discord.allowJoinRequests', async () => {
|
||||
await rpc.allowJoinRequests();
|
||||
});
|
||||
|
||||
const disableJoinRequests = commands.registerCommand('discord.disableJoinRequests', async () => {
|
||||
await rpc.disableJoinRequests();
|
||||
});
|
||||
|
||||
context.subscriptions.push(enabler, disabler, reconnecter, allowSpectate, disableSpectate, allowJoinRequests, disableJoinRequests);
|
||||
}
|
||||
|
||||
export async function deactivate() {
|
||||
|
|
|
@ -7,6 +7,7 @@ import {
|
|||
window,
|
||||
workspace
|
||||
} from 'vscode'; // tslint:disable-line
|
||||
import * as vsls from 'vsls/vscode';
|
||||
const lang = require('../data/languages.json'); // tslint:disable-line
|
||||
const knownExtentions: { [key: string]: { image: string } } = lang.knownExtentions;
|
||||
const knownLanguages: string[] = lang.knownLanguages;
|
||||
|
@ -22,6 +23,12 @@ interface State {
|
|||
largeImageText?: string;
|
||||
smallImageKey?: string;
|
||||
smallImageText?: string;
|
||||
partyId?: string;
|
||||
partySize?: number;
|
||||
partyMax?: number;
|
||||
matchSecret?: string;
|
||||
joinSecret?: string;
|
||||
spectateSecret?: string;
|
||||
instance?: boolean;
|
||||
}
|
||||
|
||||
|
@ -69,6 +76,7 @@ export default class Activity implements Disposable {
|
|||
if (this.state && this.state.startTimestamp) previousTimestamp = this.state.startTimestamp;
|
||||
|
||||
this._state = {
|
||||
...this._state,
|
||||
details: this._generateDetails('detailsDebugging', 'detailsEditing', 'detailsIdle', largeImageKey),
|
||||
startTimestamp: window.activeTextEditor && previousTimestamp && workspaceElapsedTime ? previousTimestamp : window.activeTextEditor ? new Date().getTime() : null,
|
||||
state: this._generateDetails('lowerDetailsDebugging', 'lowerDetailsEditing', 'lowerDetailsIdle', largeImageKey),
|
||||
|
@ -81,13 +89,103 @@ export default class Activity implements Disposable {
|
|||
|| window.activeTextEditor.document.languageId.padEnd(2, '\u200b')
|
||||
: this._config.get<string>('largeImageIdle'),
|
||||
smallImageKey: debug.activeDebugSession ? 'debug' : env.appName.includes('Insiders') ? 'vscode-insiders' : 'vscode',
|
||||
smallImageText: this._config.get<string>('smallImage')!.replace('{appname}', env.appName),
|
||||
smallImageText: this._config.get<string>('smallImage')!.replace('{appname}', env.appName)
|
||||
};
|
||||
|
||||
return this._state;
|
||||
}
|
||||
|
||||
public async allowSpectate() {
|
||||
const liveshare = await vsls.getApi();
|
||||
if (!liveshare) return;
|
||||
const join = await liveshare.share();
|
||||
this._state = {
|
||||
...this._state,
|
||||
spectateSecret: join ? Buffer.from(join.toString()).toString('base64') : undefined,
|
||||
instance: true
|
||||
};
|
||||
|
||||
return this._state;
|
||||
}
|
||||
|
||||
public async disableSpectate() {
|
||||
const liveshare = await vsls.getApi();
|
||||
if (!liveshare) return;
|
||||
await liveshare.end();
|
||||
this._state = {
|
||||
...this._state,
|
||||
spectateSecret: undefined,
|
||||
instance: false
|
||||
};
|
||||
|
||||
return this._state;
|
||||
}
|
||||
|
||||
public async allowJoinRequests() {
|
||||
const liveshare = await vsls.getApi();
|
||||
if (!liveshare) return;
|
||||
const join = await liveshare.share();
|
||||
this._state = {
|
||||
...this.state,
|
||||
partyId: join ? join.query : undefined,
|
||||
partySize: 1,
|
||||
partyMax: 5,
|
||||
joinSecret: join ? Buffer.from(join.toString()).toString('base64') : undefined,
|
||||
instance: true
|
||||
};
|
||||
|
||||
return this._state;
|
||||
}
|
||||
|
||||
public async disableJoinRequests() {
|
||||
const liveshare = await vsls.getApi();
|
||||
if (!liveshare) return;
|
||||
await liveshare.end();
|
||||
this._state = {
|
||||
...this._state,
|
||||
partyId: undefined,
|
||||
partySize: undefined,
|
||||
partyMax: undefined,
|
||||
joinSecret: undefined,
|
||||
instance: false
|
||||
};
|
||||
|
||||
return this._state;
|
||||
}
|
||||
|
||||
public changePartyId(id?: string) {
|
||||
if (!this._state) return;
|
||||
this._state = {
|
||||
partyId: id,
|
||||
partySize: this._state.partySize ? this._state.partySize + 1 : 2,
|
||||
partyMax: id ? 5 : undefined
|
||||
};
|
||||
|
||||
return this._state;
|
||||
}
|
||||
|
||||
public increasePartySize() {
|
||||
if (!this._state || !this._state.partySize) return;
|
||||
if (this.state && this._state.partySize === 5) return;
|
||||
this._state = {
|
||||
...this._state,
|
||||
partySize: this._state.partySize + 1
|
||||
};
|
||||
|
||||
return this._state;
|
||||
}
|
||||
|
||||
public decreasePartySize() {
|
||||
if (!this._state || !this._state.partySize) return;
|
||||
if (this.state && this._state.partySize === 1) return;
|
||||
this._state = {
|
||||
...this._state,
|
||||
partySize: this._state.partySize - 1
|
||||
};
|
||||
|
||||
return this._state;
|
||||
}
|
||||
|
||||
public dispose() {
|
||||
this._state = null;
|
||||
this._lastKnownFile = '';
|
||||
|
@ -138,7 +236,6 @@ export default class Activity implements Disposable {
|
|||
if (size) raw = raw!.replace('{filesize}', size);
|
||||
if (currentLine) raw = raw!.replace('{currentline}', currentLine);
|
||||
if (currentColumn) raw = raw!.replace('{currentcolumn}', currentColumn);
|
||||
|
||||
}
|
||||
|
||||
return raw;
|
||||
|
|
165
yarn.lock
165
yarn.lock
|
@ -32,9 +32,9 @@ acorn@5.X, acorn@^5.0.3:
|
|||
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
|
||||
|
||||
ajv@^6.5.5:
|
||||
version "6.5.5"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1"
|
||||
integrity sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==
|
||||
version "6.6.1"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61"
|
||||
integrity sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==
|
||||
dependencies:
|
||||
fast-deep-equal "^2.0.1"
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
|
@ -103,6 +103,11 @@ append-buffer@^1.0.2:
|
|||
dependencies:
|
||||
buffer-equal "^1.0.0"
|
||||
|
||||
arch@^2.1.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e"
|
||||
integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==
|
||||
|
||||
archy@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
|
||||
|
@ -278,6 +283,11 @@ beeper@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
|
||||
integrity sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=
|
||||
|
||||
bindings@^1.3.0:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.1.tgz#21fc7c6d67c18516ec5aaa2815b145ff77b26ea5"
|
||||
integrity sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==
|
||||
|
||||
block-stream@*:
|
||||
version "0.0.9"
|
||||
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
|
||||
|
@ -393,6 +403,14 @@ class-utils@^0.3.5:
|
|||
isobject "^3.0.0"
|
||||
static-extend "^0.1.1"
|
||||
|
||||
clipboardy@^1.2.3:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef"
|
||||
integrity sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==
|
||||
dependencies:
|
||||
arch "^2.1.0"
|
||||
execa "^0.8.0"
|
||||
|
||||
clone-buffer@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
|
||||
|
@ -501,6 +519,15 @@ core-util-is@1.0.2, core-util-is@~1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||
|
||||
cross-spawn@^5.0.1:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
||||
integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
|
||||
dependencies:
|
||||
lru-cache "^4.0.1"
|
||||
shebang-command "^1.2.0"
|
||||
which "^1.2.9"
|
||||
|
||||
css@2.X, css@^2.2.1:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
|
||||
|
@ -762,12 +789,11 @@ event-stream@3.3.4:
|
|||
through "~2.3.1"
|
||||
|
||||
event-stream@~3.3.4:
|
||||
version "3.3.6"
|
||||
resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.6.tgz#cac1230890e07e73ec9cacd038f60a5b66173eef"
|
||||
integrity sha512-dGXNg4F/FgVzlApjzItL+7naHutA3fDqbV/zAZqDDlXTjiMnQmZKu+prImWKszeBM5UQeGvAl3u1wBiKeDh61g==
|
||||
version "3.3.5"
|
||||
resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.5.tgz#e5dd8989543630d94c6cf4d657120341fa31636b"
|
||||
integrity sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==
|
||||
dependencies:
|
||||
duplexer "^0.1.1"
|
||||
flatmap-stream "^0.1.0"
|
||||
from "^0.1.7"
|
||||
map-stream "0.0.7"
|
||||
pause-stream "^0.0.11"
|
||||
|
@ -775,6 +801,19 @@ event-stream@~3.3.4:
|
|||
stream-combiner "^0.2.2"
|
||||
through "^2.3.8"
|
||||
|
||||
execa@^0.8.0:
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da"
|
||||
integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=
|
||||
dependencies:
|
||||
cross-spawn "^5.0.1"
|
||||
get-stream "^3.0.0"
|
||||
is-stream "^1.1.0"
|
||||
npm-run-path "^2.0.0"
|
||||
p-finally "^1.0.0"
|
||||
signal-exit "^3.0.0"
|
||||
strip-eof "^1.0.0"
|
||||
|
||||
expand-brackets@^0.1.4:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
|
||||
|
@ -868,12 +907,13 @@ extsprintf@^1.2.0:
|
|||
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
|
||||
|
||||
fancy-log@^1.1.0:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1"
|
||||
integrity sha1-9BEl49hPLn2JpD0G2VjI94vha+E=
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7"
|
||||
integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==
|
||||
dependencies:
|
||||
ansi-gray "^0.1.1"
|
||||
color-support "^1.1.3"
|
||||
parse-node-version "^1.0.0"
|
||||
time-stamp "^1.0.0"
|
||||
|
||||
fast-deep-equal@^2.0.1:
|
||||
|
@ -955,11 +995,6 @@ flagged-respawn@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7"
|
||||
integrity sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=
|
||||
|
||||
flatmap-stream@^0.1.0:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/flatmap-stream/-/flatmap-stream-0.1.2.tgz#b1da359a93f24f6d96e46f948552d997e3c2863d"
|
||||
integrity sha512-ucyr6WkLXjyMuHPtOUq4l+nSAxgWi7v4QO508eQ9resnGj+lSup26oIsUI5aH8k4Qfpjsxa8dDf9UCKkS2KHzQ==
|
||||
|
||||
flush-write-stream@^1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd"
|
||||
|
@ -1053,6 +1088,11 @@ gaze@^0.5.1:
|
|||
dependencies:
|
||||
globule "~0.1.0"
|
||||
|
||||
get-stream@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
||||
integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
|
||||
|
||||
get-value@^2.0.3, get-value@^2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
|
||||
|
@ -1711,7 +1751,7 @@ is-relative@^1.0.0:
|
|||
dependencies:
|
||||
is-unc-path "^1.0.0"
|
||||
|
||||
is-stream@^1.0.1:
|
||||
is-stream@^1.0.1, is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
||||
|
@ -2011,6 +2051,14 @@ lru-cache@2:
|
|||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
|
||||
integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=
|
||||
|
||||
lru-cache@^4.0.1:
|
||||
version "4.1.5"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
|
||||
integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
|
||||
dependencies:
|
||||
pseudomap "^1.0.2"
|
||||
yallist "^2.1.2"
|
||||
|
||||
lru-queue@0.1:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3"
|
||||
|
@ -2245,15 +2293,20 @@ next-tick@1:
|
|||
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
|
||||
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
|
||||
|
||||
node-addon-api@^1.3.0:
|
||||
version "1.6.2"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.6.2.tgz#d8aad9781a5cfc4132cc2fecdbdd982534265217"
|
||||
integrity sha512-479Bjw9nTE5DdBSZZWprFryHGjUaQC31y1wHo19We/k0BZlrmhqQitWoUL0cD8+scljCbIUL+E58oRDEakdGGA==
|
||||
|
||||
node-fetch@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
|
||||
integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
|
||||
|
||||
node.extend@^1.1.2:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.7.tgz#e140a5a54d587465085a99d78ce92c856331a131"
|
||||
integrity sha512-7Firgqanbd7UtypwBezNTEuo9eHKtEXd+pD96Aj4wai6Q2vM1S38X+MZvR7sQv5E5pj2TZ9j0Am4dLfc6EvKsA==
|
||||
version "1.1.8"
|
||||
resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.8.tgz#0aab3e63789f4e6d68b42bc00073ad1881243cf0"
|
||||
integrity sha512-L/dvEBwyg3UowwqOUTyDsGBU6kjBQOpOhshio9V3i3BMPv5YUb9+mWNN8MK0IbWqT0AqaTSONZf0aTuMMahWgA==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
is "^3.2.1"
|
||||
|
@ -2272,6 +2325,13 @@ now-and-later@^2.0.0:
|
|||
dependencies:
|
||||
once "^1.3.2"
|
||||
|
||||
npm-run-path@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
||||
integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
|
||||
dependencies:
|
||||
path-key "^2.0.0"
|
||||
|
||||
oauth-sign@~0.9.0:
|
||||
version "0.9.0"
|
||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
||||
|
@ -2399,6 +2459,11 @@ os-homedir@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
|
||||
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
|
||||
|
||||
p-finally@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
|
||||
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
|
||||
|
||||
parse-filepath@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891"
|
||||
|
@ -2418,6 +2483,11 @@ parse-glob@^3.0.4:
|
|||
is-extglob "^1.0.0"
|
||||
is-glob "^2.0.0"
|
||||
|
||||
parse-node-version@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.0.tgz#33d9aa8920dcc3c0d33658ec18ce237009a56d53"
|
||||
integrity sha512-02GTVHD1u0nWc20n2G7WX/PgdhNFG04j5fi1OkaJzPWLTcf6vh6229Lta1wTmXG/7Dg42tCssgkccVt7qvd8Kg==
|
||||
|
||||
parse-passwd@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
|
||||
|
@ -2438,6 +2508,11 @@ path-is-absolute@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
||||
|
||||
path-key@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
|
||||
|
||||
path-parse@^1.0.5:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||
|
@ -2513,6 +2588,11 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
||||
integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
|
||||
|
||||
pseudomap@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
||||
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
|
||||
|
||||
psl@^1.1.24:
|
||||
version "1.1.29"
|
||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
|
||||
|
@ -2563,9 +2643,9 @@ queue@^3.1.0:
|
|||
inherits "~2.0.0"
|
||||
|
||||
queue@^4.2.1:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/queue/-/queue-4.5.0.tgz#0f125191a983e3c38fcc0c0c75087d358d0857f4"
|
||||
integrity sha512-DwxpAnqJuoQa+wyDgQuwkSshkhlqIlWEvwvdAY27fDPunZ2cVJzXU4JyjY+5l7zs7oGLaYAQm4MbLOVFAHFBzA==
|
||||
version "4.5.1"
|
||||
resolved "https://registry.yarnpkg.com/queue/-/queue-4.5.1.tgz#6e4290a2d7e99dc75b34494431633fe5437b0dac"
|
||||
integrity sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==
|
||||
dependencies:
|
||||
inherits "~2.0.0"
|
||||
|
||||
|
@ -2633,6 +2713,13 @@ regex-not@^1.0.0, regex-not@^1.0.2:
|
|||
extend-shallow "^3.0.2"
|
||||
safe-regex "^1.1.0"
|
||||
|
||||
register-scheme@devsnek/node-register-scheme:
|
||||
version "0.0.2"
|
||||
resolved "https://codeload.github.com/devsnek/node-register-scheme/tar.gz/e7cc9a63a1f512565da44cb57316d9fb10750e17"
|
||||
dependencies:
|
||||
bindings "^1.3.0"
|
||||
node-addon-api "^1.3.0"
|
||||
|
||||
remove-bom-buffer@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53"
|
||||
|
@ -2797,11 +2884,28 @@ set-value@^2.0.0:
|
|||
is-plain-object "^2.0.3"
|
||||
split-string "^3.0.1"
|
||||
|
||||
shebang-command@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||
integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
|
||||
dependencies:
|
||||
shebang-regex "^1.0.0"
|
||||
|
||||
shebang-regex@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
|
||||
|
||||
sigmund@~1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
|
||||
integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
|
||||
|
||||
signal-exit@^3.0.0:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||
integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
|
||||
|
||||
snapdragon-node@^2.0.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
|
||||
|
@ -3014,6 +3118,11 @@ strip-bom@^2.0.0:
|
|||
dependencies:
|
||||
is-utf8 "^0.2.0"
|
||||
|
||||
strip-eof@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
|
||||
|
||||
supports-color@4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
|
||||
|
@ -3439,7 +3548,12 @@ vscode@^1.1.22:
|
|||
url-parse "^1.4.3"
|
||||
vinyl-source-stream "^1.1.0"
|
||||
|
||||
which@^1.2.14:
|
||||
vsls@^0.3.967:
|
||||
version "0.3.967"
|
||||
resolved "https://registry.yarnpkg.com/vsls/-/vsls-0.3.967.tgz#d762f1b10287c2a4ca8a54edb2f6b0f074a52583"
|
||||
integrity sha512-FFaRZz4RBo/QmUHvQophkzMzrTrsV8g169jUPEaL7UWak3FdwGdGvm2DlSZIZl36MzLNb/43BPq6WDzoKDwR4g==
|
||||
|
||||
which@^1.2.14, which@^1.2.9:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
|
||||
|
@ -3463,6 +3577,11 @@ ws@^6.1.1:
|
|||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
||||
|
||||
yallist@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
||||
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
|
||||
|
||||
yauzl@^2.2.1:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
|
||||
|
|
Loading…
Reference in a new issue