Remove Node browser shim
We used this to run vscodevim in the browser but it now has a version that is able to run as a VS Code web extension. This does require an update to our marketplace, however.
This commit is contained in:
parent
a65231808a
commit
068e399bf2
@ -144,7 +144,6 @@ Some noteworthy changes in our version of VS Code:
|
|||||||
- Sending client-side telemetry through the server
|
- Sending client-side telemetry through the server
|
||||||
- Allowing modification of the display language
|
- Allowing modification of the display language
|
||||||
- Making it possible for us to load code on the client
|
- Making it possible for us to load code on the client
|
||||||
- Making extensions work in the browser
|
|
||||||
- Making it possible to install extensions of any kind
|
- Making it possible to install extensions of any kind
|
||||||
- Fixing issue with getting disconnected when your machine sleeps or hibernates
|
- Fixing issue with getting disconnected when your machine sleeps or hibernates
|
||||||
- Adding connection type to web socket query parameters
|
- Adding connection type to web socket query parameters
|
||||||
|
@ -50,8 +50,6 @@
|
|||||||
"dependencies_comment": "Move rimraf to dependencies because it is used in the postinstall script.",
|
"dependencies_comment": "Move rimraf to dependencies because it is used in the postinstall script.",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@coder/logger": "1.1.16",
|
"@coder/logger": "1.1.16",
|
||||||
"@coder/node-browser": "^1.0.8",
|
|
||||||
"@coder/requirefs": "^1.1.5",
|
|
||||||
"applicationinsights": "1.0.8",
|
"applicationinsights": "1.0.8",
|
||||||
"chokidar": "3.4.3",
|
"chokidar": "3.4.3",
|
||||||
"graceful-fs": "4.2.3",
|
"graceful-fs": "4.2.3",
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { Emitter } from 'vs/base/common/event';
|
|
||||||
import * as path from 'vs/base/common/path';
|
import * as path from 'vs/base/common/path';
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
@ -9,10 +8,8 @@ import { ILocalizationsService } from 'vs/platform/localizations/common/localiza
|
|||||||
import { ILogService } from 'vs/platform/log/common/log';
|
import { ILogService } from 'vs/platform/log/common/log';
|
||||||
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
||||||
import { Registry } from 'vs/platform/registry/common/platform';
|
import { Registry } from 'vs/platform/registry/common/platform';
|
||||||
import { PersistentConnectionEventType } from 'vs/platform/remote/common/remoteAgentConnection';
|
|
||||||
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
|
||||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { INodeProxyService, NodeProxyChannelClient } from 'vs/server/common/nodeProxy';
|
|
||||||
import { TelemetryChannelClient } from 'vs/server/common/telemetry';
|
import { TelemetryChannelClient } from 'vs/server/common/telemetry';
|
||||||
import { Options } from 'vs/server/ipc.d';
|
import { Options } from 'vs/server/ipc.d';
|
||||||
import 'vs/workbench/contrib/localizations/browser/localizations.contribution';
|
import 'vs/workbench/contrib/localizations/browser/localizations.contribution';
|
||||||
@ -63,33 +60,7 @@ Registry.as<IConfigurationRegistry>(Extensions.Configuration).registerConfigurat
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
class NodeProxyService extends NodeProxyChannelClient implements INodeProxyService {
|
|
||||||
private readonly _onClose = new Emitter<void>();
|
|
||||||
public readonly onClose = this._onClose.event;
|
|
||||||
private readonly _onDown = new Emitter<void>();
|
|
||||||
public readonly onDown = this._onDown.event;
|
|
||||||
private readonly _onUp = new Emitter<void>();
|
|
||||||
public readonly onUp = this._onUp.event;
|
|
||||||
|
|
||||||
public constructor(
|
|
||||||
@IRemoteAgentService remoteAgentService: IRemoteAgentService,
|
|
||||||
) {
|
|
||||||
super(remoteAgentService.getConnection()!.getChannel('nodeProxy'));
|
|
||||||
remoteAgentService.getConnection()!.onDidStateChange((state) => {
|
|
||||||
switch (state.type) {
|
|
||||||
case PersistentConnectionEventType.ConnectionGain:
|
|
||||||
return this._onUp.fire();
|
|
||||||
case PersistentConnectionEventType.ConnectionLost:
|
|
||||||
return this._onDown.fire();
|
|
||||||
case PersistentConnectionEventType.ReconnectionPermanentFailure:
|
|
||||||
return this._onClose.fire();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
registerSingleton(ILocalizationsService, LocalizationsService);
|
registerSingleton(ILocalizationsService, LocalizationsService);
|
||||||
registerSingleton(INodeProxyService, NodeProxyService);
|
|
||||||
registerSingleton(ITelemetryService, TelemetryService);
|
registerSingleton(ITelemetryService, TelemetryService);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
import { Emitter } from 'vs/base/common/event';
|
|
||||||
import { UriComponents } from 'vs/base/common/uri';
|
|
||||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
|
||||||
import { ExtHostNodeProxyShape, MainContext, MainThreadNodeProxyShape } from 'vs/workbench/api/common/extHost.protocol';
|
|
||||||
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
|
|
||||||
|
|
||||||
export class ExtHostNodeProxy implements ExtHostNodeProxyShape {
|
|
||||||
_serviceBrand: any;
|
|
||||||
|
|
||||||
private readonly _onMessage = new Emitter<string>();
|
|
||||||
public readonly onMessage = this._onMessage.event;
|
|
||||||
private readonly _onClose = new Emitter<void>();
|
|
||||||
public readonly onClose = this._onClose.event;
|
|
||||||
private readonly _onDown = new Emitter<void>();
|
|
||||||
public readonly onDown = this._onDown.event;
|
|
||||||
private readonly _onUp = new Emitter<void>();
|
|
||||||
public readonly onUp = this._onUp.event;
|
|
||||||
|
|
||||||
private readonly proxy: MainThreadNodeProxyShape;
|
|
||||||
|
|
||||||
constructor(@IExtHostRpcService rpc: IExtHostRpcService) {
|
|
||||||
this.proxy = rpc.getProxy(MainContext.MainThreadNodeProxy);
|
|
||||||
}
|
|
||||||
|
|
||||||
public $onMessage(message: string): void {
|
|
||||||
this._onMessage.fire(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public $onClose(): void {
|
|
||||||
this._onClose.fire();
|
|
||||||
}
|
|
||||||
|
|
||||||
public $onUp(): void {
|
|
||||||
this._onUp.fire();
|
|
||||||
}
|
|
||||||
|
|
||||||
public $onDown(): void {
|
|
||||||
this._onDown.fire();
|
|
||||||
}
|
|
||||||
|
|
||||||
public send(message: string): void {
|
|
||||||
this.proxy.$send(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async fetchExtension(extensionUri: UriComponents): Promise<Uint8Array> {
|
|
||||||
return this.proxy.$fetchExtension(extensionUri).then(b => b.buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IExtHostNodeProxy extends ExtHostNodeProxy { }
|
|
||||||
export const IExtHostNodeProxy = createDecorator<IExtHostNodeProxy>('IExtHostNodeProxy');
|
|
@ -1,55 +0,0 @@
|
|||||||
import { VSBuffer } from 'vs/base/common/buffer';
|
|
||||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { FileAccess } from 'vs/base/common/network';
|
|
||||||
import { URI, UriComponents } from 'vs/base/common/uri';
|
|
||||||
import { INodeProxyService } from 'vs/server/common/nodeProxy';
|
|
||||||
import { ExtHostContext, IExtHostContext, MainContext, MainThreadNodeProxyShape } from 'vs/workbench/api/common/extHost.protocol';
|
|
||||||
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
|
|
||||||
|
|
||||||
@extHostNamedCustomer(MainContext.MainThreadNodeProxy)
|
|
||||||
export class MainThreadNodeProxy implements MainThreadNodeProxyShape {
|
|
||||||
private disposed = false;
|
|
||||||
private disposables = <IDisposable[]>[];
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
extHostContext: IExtHostContext,
|
|
||||||
@INodeProxyService private readonly proxyService: INodeProxyService,
|
|
||||||
) {
|
|
||||||
if (!extHostContext.remoteAuthority) { // HACK: A terrible way to detect if running in the worker.
|
|
||||||
const proxy = extHostContext.getProxy(ExtHostContext.ExtHostNodeProxy);
|
|
||||||
this.disposables = [
|
|
||||||
this.proxyService.onMessage((message: string) => proxy.$onMessage(message)),
|
|
||||||
this.proxyService.onClose(() => proxy.$onClose()),
|
|
||||||
this.proxyService.onDown(() => proxy.$onDown()),
|
|
||||||
this.proxyService.onUp(() => proxy.$onUp()),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$send(message: string): void {
|
|
||||||
if (!this.disposed) {
|
|
||||||
this.proxyService.send(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async $fetchExtension(extensionUri: UriComponents): Promise<VSBuffer> {
|
|
||||||
const fetchUri = URI.from({
|
|
||||||
scheme: window.location.protocol.replace(':', ''),
|
|
||||||
authority: window.location.host,
|
|
||||||
// Use FileAccess to get the static base path.
|
|
||||||
path: FileAccess.asBrowserUri('', require).path,
|
|
||||||
query: `tar=${encodeURIComponent(extensionUri.path)}`,
|
|
||||||
});
|
|
||||||
const response = await fetch(fetchUri.toString(true));
|
|
||||||
if (response.status !== 200) {
|
|
||||||
throw new Error(`Failed to download extension "${module}"`);
|
|
||||||
}
|
|
||||||
return VSBuffer.wrap(new Uint8Array(await response.arrayBuffer()));
|
|
||||||
}
|
|
||||||
|
|
||||||
dispose(): void {
|
|
||||||
this.disposables.forEach((d) => d.dispose());
|
|
||||||
this.disposables = [];
|
|
||||||
this.disposed = true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
import { Client } from '@coder/node-browser';
|
|
||||||
import { fromTar } from '@coder/requirefs';
|
|
||||||
import { URI } from 'vs/base/common/uri';
|
|
||||||
import { ILogService } from 'vs/platform/log/common/log';
|
|
||||||
import { ExtensionActivationTimesBuilder } from 'vs/workbench/api/common/extHostExtensionActivator';
|
|
||||||
import { IExtHostNodeProxy } from './extHostNodeProxy';
|
|
||||||
|
|
||||||
export const loadCommonJSModule = async <T>(
|
|
||||||
module: URI,
|
|
||||||
activationTimesBuilder: ExtensionActivationTimesBuilder,
|
|
||||||
nodeProxy: IExtHostNodeProxy,
|
|
||||||
logService: ILogService,
|
|
||||||
vscode: any,
|
|
||||||
): Promise<T> => {
|
|
||||||
const client = new Client(nodeProxy, { logger: logService });
|
|
||||||
const [buffer, init] = await Promise.all([
|
|
||||||
nodeProxy.fetchExtension(module),
|
|
||||||
client.handshake(),
|
|
||||||
]);
|
|
||||||
const rfs = fromTar(buffer);
|
|
||||||
(<any>self).global = self;
|
|
||||||
rfs.provide('vscode', vscode);
|
|
||||||
Object.keys(client.modules).forEach((key) => {
|
|
||||||
const mod = (client.modules as any)[key];
|
|
||||||
if (key === 'process') {
|
|
||||||
(<any>self).process = mod;
|
|
||||||
(<any>self).process.env = init.env;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
rfs.provide(key, mod);
|
|
||||||
switch (key) {
|
|
||||||
case 'buffer':
|
|
||||||
(<any>self).Buffer = mod.Buffer;
|
|
||||||
break;
|
|
||||||
case 'timers':
|
|
||||||
(<any>self).setImmediate = mod.setImmediate;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
activationTimesBuilder.codeLoadingStart();
|
|
||||||
return rfs.require('.');
|
|
||||||
} finally {
|
|
||||||
activationTimesBuilder.codeLoadingStop();
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,47 +0,0 @@
|
|||||||
import { ReadWriteConnection } from '@coder/node-browser';
|
|
||||||
import { Event } from 'vs/base/common/event';
|
|
||||||
import { IChannel, IServerChannel } from 'vs/base/parts/ipc/common/ipc';
|
|
||||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
|
||||||
|
|
||||||
export const INodeProxyService = createDecorator<INodeProxyService>('nodeProxyService');
|
|
||||||
|
|
||||||
export interface INodeProxyService extends ReadWriteConnection {
|
|
||||||
_serviceBrand: any;
|
|
||||||
send(message: string): void;
|
|
||||||
onMessage: Event<string>;
|
|
||||||
onUp: Event<void>;
|
|
||||||
onClose: Event<void>;
|
|
||||||
onDown: Event<void>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class NodeProxyChannel implements IServerChannel {
|
|
||||||
constructor(private service: INodeProxyService) {}
|
|
||||||
|
|
||||||
listen(_: unknown, event: string): Event<any> {
|
|
||||||
switch (event) {
|
|
||||||
case 'onMessage': return this.service.onMessage;
|
|
||||||
}
|
|
||||||
throw new Error(`Invalid listen ${event}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
async call(_: unknown, command: string, args?: any): Promise<any> {
|
|
||||||
switch (command) {
|
|
||||||
case 'send': return this.service.send(args[0]);
|
|
||||||
}
|
|
||||||
throw new Error(`Invalid call ${command}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class NodeProxyChannelClient {
|
|
||||||
_serviceBrand: any;
|
|
||||||
|
|
||||||
public readonly onMessage: Event<string>;
|
|
||||||
|
|
||||||
constructor(private readonly channel: IChannel) {
|
|
||||||
this.onMessage = this.channel.listen<string>('onMessage');
|
|
||||||
}
|
|
||||||
|
|
||||||
public send(data: string): void {
|
|
||||||
this.channel.call('send', [data]);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +1,4 @@
|
|||||||
import { field, logger } from '@coder/logger';
|
import { field, logger } from '@coder/logger';
|
||||||
import { Server } from '@coder/node-browser';
|
|
||||||
import * as os from 'os';
|
import * as os from 'os';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import { VSBuffer } from 'vs/base/common/buffer';
|
import { VSBuffer } from 'vs/base/common/buffer';
|
||||||
@ -21,7 +20,6 @@ import { ILogService } from 'vs/platform/log/common/log';
|
|||||||
import product from 'vs/platform/product/common/product';
|
import product from 'vs/platform/product/common/product';
|
||||||
import { IRemoteAgentEnvironment, RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment';
|
import { IRemoteAgentEnvironment, RemoteAgentConnectionContext } from 'vs/platform/remote/common/remoteAgentEnvironment';
|
||||||
import { ITelemetryData, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryData, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { INodeProxyService } from 'vs/server/common/nodeProxy';
|
|
||||||
import { getTranslations } from 'vs/server/node/nls';
|
import { getTranslations } from 'vs/server/node/nls';
|
||||||
import { getUriTransformer } from 'vs/server/node/util';
|
import { getUriTransformer } from 'vs/server/node/util';
|
||||||
import { IFileChangeDto } from 'vs/workbench/api/common/extHost.protocol';
|
import { IFileChangeDto } from 'vs/workbench/api/common/extHost.protocol';
|
||||||
@ -305,14 +303,7 @@ export class ExtensionEnvironmentChannel implements IServerChannel {
|
|||||||
const newPath = extension.extensionLocation.fsPath;
|
const newPath = extension.extensionLocation.fsPath;
|
||||||
this.log.warn(`${oldPath} has been overridden ${newPath}`);
|
this.log.warn(`${oldPath} has been overridden ${newPath}`);
|
||||||
}
|
}
|
||||||
uniqueExtensions.set(id, {
|
uniqueExtensions.set(id, extension)
|
||||||
...extension,
|
|
||||||
// Force extensions that should run on the client due to latency
|
|
||||||
// issues.
|
|
||||||
extensionKind: extension.identifier.value === 'vscodevim.vim'
|
|
||||||
? [ 'web' ]
|
|
||||||
: extension.extensionKind,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -337,42 +328,6 @@ export class ExtensionEnvironmentChannel implements IServerChannel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class NodeProxyService implements INodeProxyService {
|
|
||||||
public _serviceBrand = undefined;
|
|
||||||
|
|
||||||
public readonly server: Server;
|
|
||||||
|
|
||||||
private readonly _onMessage = new Emitter<string>();
|
|
||||||
public readonly onMessage = this._onMessage.event;
|
|
||||||
private readonly _$onMessage = new Emitter<string>();
|
|
||||||
public readonly $onMessage = this._$onMessage.event;
|
|
||||||
public readonly _onDown = new Emitter<void>();
|
|
||||||
public readonly onDown = this._onDown.event;
|
|
||||||
public readonly _onUp = new Emitter<void>();
|
|
||||||
public readonly onUp = this._onUp.event;
|
|
||||||
|
|
||||||
// Unused because the server connection will never permanently close.
|
|
||||||
private readonly _onClose = new Emitter<void>();
|
|
||||||
public readonly onClose = this._onClose.event;
|
|
||||||
|
|
||||||
public constructor() {
|
|
||||||
// TODO: down/up
|
|
||||||
this.server = new Server({
|
|
||||||
onMessage: this.$onMessage,
|
|
||||||
onClose: this.onClose,
|
|
||||||
onDown: this.onDown,
|
|
||||||
onUp: this.onUp,
|
|
||||||
send: (message: string): void => {
|
|
||||||
this._onMessage.fire(message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public send(message: string): void {
|
|
||||||
this._$onMessage.fire(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class VariableResolverService extends AbstractVariableResolverService {
|
class VariableResolverService extends AbstractVariableResolverService {
|
||||||
constructor(
|
constructor(
|
||||||
remoteAuthority: string,
|
remoteAuthority: string,
|
||||||
|
@ -45,10 +45,9 @@ import { TelemetryService } from 'vs/platform/telemetry/common/telemetryService'
|
|||||||
import { combinedAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
|
import { combinedAppender, NullTelemetryService } from 'vs/platform/telemetry/common/telemetryUtils';
|
||||||
import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender';
|
import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender';
|
||||||
import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProperties';
|
import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProperties';
|
||||||
import { INodeProxyService, NodeProxyChannel } from 'vs/server/common/nodeProxy';
|
|
||||||
import { TelemetryChannel } from 'vs/server/common/telemetry';
|
import { TelemetryChannel } from 'vs/server/common/telemetry';
|
||||||
import { Query, VscodeOptions, WorkbenchOptions } from 'vs/server/ipc';
|
import { Query, VscodeOptions, WorkbenchOptions } from 'vs/server/ipc';
|
||||||
import { ExtensionEnvironmentChannel, FileProviderChannel, NodeProxyService, TerminalProviderChannel } from 'vs/server/node/channel';
|
import { ExtensionEnvironmentChannel, FileProviderChannel, TerminalProviderChannel } from 'vs/server/node/channel';
|
||||||
import { Connection, ExtensionHostConnection, ManagementConnection } from 'vs/server/node/connection';
|
import { Connection, ExtensionHostConnection, ManagementConnection } from 'vs/server/node/connection';
|
||||||
import { TelemetryClient } from 'vs/server/node/insights';
|
import { TelemetryClient } from 'vs/server/node/insights';
|
||||||
import { logger } from 'vs/server/node/logger';
|
import { logger } from 'vs/server/node/logger';
|
||||||
@ -180,11 +179,6 @@ export class Vscode {
|
|||||||
this._onDidClientConnect.fire({
|
this._onDidClientConnect.fire({
|
||||||
protocol, onDidClientDisconnect: connection.onClose,
|
protocol, onDidClientDisconnect: connection.onClose,
|
||||||
});
|
});
|
||||||
// TODO: Need a way to match clients with a connection. For now
|
|
||||||
// dispose everything which only works because no extensions currently
|
|
||||||
// utilize long-running proxies.
|
|
||||||
(this.services.get(INodeProxyService) as NodeProxyService)._onUp.fire();
|
|
||||||
connection.onClose(() => (this.services.get(INodeProxyService) as NodeProxyService)._onDown.fire());
|
|
||||||
} else {
|
} else {
|
||||||
const buffer = protocol.readEntireBuffer();
|
const buffer = protocol.readEntireBuffer();
|
||||||
connection = new ExtensionHostConnection(
|
connection = new ExtensionHostConnection(
|
||||||
@ -279,7 +273,6 @@ export class Vscode {
|
|||||||
this.services.set(IExtensionManagementService, new SyncDescriptor(ExtensionManagementService));
|
this.services.set(IExtensionManagementService, new SyncDescriptor(ExtensionManagementService));
|
||||||
this.services.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryService));
|
this.services.set(IExtensionGalleryService, new SyncDescriptor(ExtensionGalleryService));
|
||||||
this.services.set(ILocalizationsService, new SyncDescriptor(LocalizationsService));
|
this.services.set(ILocalizationsService, new SyncDescriptor(LocalizationsService));
|
||||||
this.services.set(INodeProxyService, new SyncDescriptor(NodeProxyService));
|
|
||||||
|
|
||||||
this.ipc.registerChannel('extensions', new ExtensionManagementChannel(
|
this.ipc.registerChannel('extensions', new ExtensionManagementChannel(
|
||||||
accessor.get(IExtensionManagementService),
|
accessor.get(IExtensionManagementService),
|
||||||
@ -290,7 +283,6 @@ export class Vscode {
|
|||||||
));
|
));
|
||||||
this.ipc.registerChannel('request', new RequestChannel(accessor.get(IRequestService)));
|
this.ipc.registerChannel('request', new RequestChannel(accessor.get(IRequestService)));
|
||||||
this.ipc.registerChannel('telemetry', new TelemetryChannel(telemetryService));
|
this.ipc.registerChannel('telemetry', new TelemetryChannel(telemetryService));
|
||||||
this.ipc.registerChannel('nodeProxy', new NodeProxyChannel(accessor.get(INodeProxyService)));
|
|
||||||
this.ipc.registerChannel('localizations', <IServerChannel<any>>createChannelReceiver(accessor.get(ILocalizationsService)));
|
this.ipc.registerChannel('localizations', <IServerChannel<any>>createChannelReceiver(accessor.get(ILocalizationsService)));
|
||||||
this.ipc.registerChannel(REMOTE_FILE_SYSTEM_CHANNEL_NAME, new FileProviderChannel(environmentService, logService));
|
this.ipc.registerChannel(REMOTE_FILE_SYSTEM_CHANNEL_NAME, new FileProviderChannel(environmentService, logService));
|
||||||
this.ipc.registerChannel(REMOTE_TERMINAL_CHANNEL_NAME, new TerminalProviderChannel(logService));
|
this.ipc.registerChannel(REMOTE_TERMINAL_CHANNEL_NAME, new TerminalProviderChannel(logService));
|
||||||
|
@ -61,7 +61,6 @@ import './mainThreadComments';
|
|||||||
import './mainThreadNotebook';
|
import './mainThreadNotebook';
|
||||||
import './mainThreadTask';
|
import './mainThreadTask';
|
||||||
import './mainThreadLabelService';
|
import './mainThreadLabelService';
|
||||||
import 'vs/server/browser/mainThreadNodeProxy';
|
|
||||||
import './mainThreadTunnelService';
|
import './mainThreadTunnelService';
|
||||||
import './mainThreadAuthentication';
|
import './mainThreadAuthentication';
|
||||||
import './mainThreadTimeline';
|
import './mainThreadTimeline';
|
||||||
|
@ -68,7 +68,6 @@ import { IURITransformerService } from 'vs/workbench/api/common/extHostUriTransf
|
|||||||
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
|
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
|
||||||
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
|
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
|
||||||
import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook';
|
import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook';
|
||||||
import { IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
|
||||||
import { ExtHostTheming } from 'vs/workbench/api/common/extHostTheming';
|
import { ExtHostTheming } from 'vs/workbench/api/common/extHostTheming';
|
||||||
import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
|
import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
|
||||||
import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService';
|
import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService';
|
||||||
@ -105,7 +104,6 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
|||||||
const extHostStorage = accessor.get(IExtHostStorage);
|
const extHostStorage = accessor.get(IExtHostStorage);
|
||||||
const extensionStoragePaths = accessor.get(IExtensionStoragePaths);
|
const extensionStoragePaths = accessor.get(IExtensionStoragePaths);
|
||||||
const extHostLogService = accessor.get(ILogService);
|
const extHostLogService = accessor.get(ILogService);
|
||||||
const extHostNodeProxy = accessor.get(IExtHostNodeProxy);
|
|
||||||
const extHostTunnelService = accessor.get(IExtHostTunnelService);
|
const extHostTunnelService = accessor.get(IExtHostTunnelService);
|
||||||
const extHostApiDeprecation = accessor.get(IExtHostApiDeprecationService);
|
const extHostApiDeprecation = accessor.get(IExtHostApiDeprecationService);
|
||||||
const extHostWindow = accessor.get(IExtHostWindow);
|
const extHostWindow = accessor.get(IExtHostWindow);
|
||||||
@ -117,7 +115,6 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
|||||||
rpcProtocol.set(ExtHostContext.ExtHostConfiguration, extHostConfiguration);
|
rpcProtocol.set(ExtHostContext.ExtHostConfiguration, extHostConfiguration);
|
||||||
rpcProtocol.set(ExtHostContext.ExtHostExtensionService, extensionService);
|
rpcProtocol.set(ExtHostContext.ExtHostExtensionService, extensionService);
|
||||||
rpcProtocol.set(ExtHostContext.ExtHostStorage, extHostStorage);
|
rpcProtocol.set(ExtHostContext.ExtHostStorage, extHostStorage);
|
||||||
rpcProtocol.set(ExtHostContext.ExtHostNodeProxy, extHostNodeProxy);
|
|
||||||
rpcProtocol.set(ExtHostContext.ExtHostTunnelService, extHostTunnelService);
|
rpcProtocol.set(ExtHostContext.ExtHostTunnelService, extHostTunnelService);
|
||||||
rpcProtocol.set(ExtHostContext.ExtHostWindow, extHostWindow);
|
rpcProtocol.set(ExtHostContext.ExtHostWindow, extHostWindow);
|
||||||
|
|
||||||
|
@ -824,17 +824,6 @@ export interface MainThreadLabelServiceShape extends IDisposable {
|
|||||||
$unregisterResourceLabelFormatter(handle: number): void;
|
$unregisterResourceLabelFormatter(handle: number): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MainThreadNodeProxyShape extends IDisposable {
|
|
||||||
$send(message: string): void;
|
|
||||||
$fetchExtension(extensionUri: UriComponents): Promise<VSBuffer>;
|
|
||||||
}
|
|
||||||
export interface ExtHostNodeProxyShape {
|
|
||||||
$onMessage(message: string): void;
|
|
||||||
$onClose(): void;
|
|
||||||
$onDown(): void;
|
|
||||||
$onUp(): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface MainThreadSearchShape extends IDisposable {
|
export interface MainThreadSearchShape extends IDisposable {
|
||||||
$registerFileSearchProvider(handle: number, scheme: string): void;
|
$registerFileSearchProvider(handle: number, scheme: string): void;
|
||||||
$registerTextSearchProvider(handle: number, scheme: string): void;
|
$registerTextSearchProvider(handle: number, scheme: string): void;
|
||||||
@ -1838,7 +1827,6 @@ export const MainContext = {
|
|||||||
MainThreadWindow: createMainId<MainThreadWindowShape>('MainThreadWindow'),
|
MainThreadWindow: createMainId<MainThreadWindowShape>('MainThreadWindow'),
|
||||||
MainThreadLabelService: createMainId<MainThreadLabelServiceShape>('MainThreadLabelService'),
|
MainThreadLabelService: createMainId<MainThreadLabelServiceShape>('MainThreadLabelService'),
|
||||||
MainThreadNotebook: createMainId<MainThreadNotebookShape>('MainThreadNotebook'),
|
MainThreadNotebook: createMainId<MainThreadNotebookShape>('MainThreadNotebook'),
|
||||||
MainThreadNodeProxy: createMainId<MainThreadNodeProxyShape>('MainThreadNodeProxy'),
|
|
||||||
MainThreadTheming: createMainId<MainThreadThemingShape>('MainThreadTheming'),
|
MainThreadTheming: createMainId<MainThreadThemingShape>('MainThreadTheming'),
|
||||||
MainThreadTunnelService: createMainId<MainThreadTunnelServiceShape>('MainThreadTunnelService'),
|
MainThreadTunnelService: createMainId<MainThreadTunnelServiceShape>('MainThreadTunnelService'),
|
||||||
MainThreadTimeline: createMainId<MainThreadTimelineShape>('MainThreadTimeline'),
|
MainThreadTimeline: createMainId<MainThreadTimelineShape>('MainThreadTimeline'),
|
||||||
@ -1882,7 +1870,6 @@ export const ExtHostContext = {
|
|||||||
ExtHostOutputService: createMainId<ExtHostOutputServiceShape>('ExtHostOutputService'),
|
ExtHostOutputService: createMainId<ExtHostOutputServiceShape>('ExtHostOutputService'),
|
||||||
ExtHosLabelService: createMainId<ExtHostLabelServiceShape>('ExtHostLabelService'),
|
ExtHosLabelService: createMainId<ExtHostLabelServiceShape>('ExtHostLabelService'),
|
||||||
ExtHostNotebook: createMainId<ExtHostNotebookShape>('ExtHostNotebook'),
|
ExtHostNotebook: createMainId<ExtHostNotebookShape>('ExtHostNotebook'),
|
||||||
ExtHostNodeProxy: createMainId<ExtHostNodeProxyShape>('ExtHostNodeProxy'),
|
|
||||||
ExtHostTheming: createMainId<ExtHostThemingShape>('ExtHostTheming'),
|
ExtHostTheming: createMainId<ExtHostThemingShape>('ExtHostTheming'),
|
||||||
ExtHostTunnelService: createMainId<ExtHostTunnelServiceShape>('ExtHostTunnelService'),
|
ExtHostTunnelService: createMainId<ExtHostTunnelServiceShape>('ExtHostTunnelService'),
|
||||||
ExtHostAuthentication: createMainId<ExtHostAuthenticationShape>('ExtHostAuthentication'),
|
ExtHostAuthentication: createMainId<ExtHostAuthenticationShape>('ExtHostAuthentication'),
|
||||||
|
@ -31,7 +31,6 @@ import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitData
|
|||||||
import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths';
|
import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths';
|
||||||
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
|
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
|
||||||
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
|
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
|
||||||
import { IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
|
||||||
import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
|
import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
|
||||||
import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService';
|
import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService';
|
||||||
import { Emitter, Event } from 'vs/base/common/event';
|
import { Emitter, Event } from 'vs/base/common/event';
|
||||||
@ -83,7 +82,6 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
|
|||||||
protected readonly _extHostWorkspace: ExtHostWorkspace;
|
protected readonly _extHostWorkspace: ExtHostWorkspace;
|
||||||
protected readonly _extHostConfiguration: ExtHostConfiguration;
|
protected readonly _extHostConfiguration: ExtHostConfiguration;
|
||||||
protected readonly _logService: ILogService;
|
protected readonly _logService: ILogService;
|
||||||
protected readonly _nodeProxy: IExtHostNodeProxy;
|
|
||||||
protected readonly _extHostTunnelService: IExtHostTunnelService;
|
protected readonly _extHostTunnelService: IExtHostTunnelService;
|
||||||
protected readonly _extHostTerminalService: IExtHostTerminalService;
|
protected readonly _extHostTerminalService: IExtHostTerminalService;
|
||||||
|
|
||||||
@ -116,7 +114,6 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
|
|||||||
@ILogService logService: ILogService,
|
@ILogService logService: ILogService,
|
||||||
@IExtHostInitDataService initData: IExtHostInitDataService,
|
@IExtHostInitDataService initData: IExtHostInitDataService,
|
||||||
@IExtensionStoragePaths storagePath: IExtensionStoragePaths,
|
@IExtensionStoragePaths storagePath: IExtensionStoragePaths,
|
||||||
@IExtHostNodeProxy nodeProxy: IExtHostNodeProxy,
|
|
||||||
@IExtHostTunnelService extHostTunnelService: IExtHostTunnelService,
|
@IExtHostTunnelService extHostTunnelService: IExtHostTunnelService,
|
||||||
@IExtHostTerminalService extHostTerminalService: IExtHostTerminalService
|
@IExtHostTerminalService extHostTerminalService: IExtHostTerminalService
|
||||||
) {
|
) {
|
||||||
@ -128,7 +125,6 @@ export abstract class AbstractExtHostExtensionService extends Disposable impleme
|
|||||||
this._extHostWorkspace = extHostWorkspace;
|
this._extHostWorkspace = extHostWorkspace;
|
||||||
this._extHostConfiguration = extHostConfiguration;
|
this._extHostConfiguration = extHostConfiguration;
|
||||||
this._logService = logService;
|
this._logService = logService;
|
||||||
this._nodeProxy = nodeProxy;
|
|
||||||
this._extHostTunnelService = extHostTunnelService;
|
this._extHostTunnelService = extHostTunnelService;
|
||||||
this._extHostTerminalService = extHostTerminalService;
|
this._extHostTerminalService = extHostTerminalService;
|
||||||
this._disposables = new DisposableStore();
|
this._disposables = new DisposableStore();
|
||||||
|
@ -3,8 +3,6 @@
|
|||||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import { IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
|
||||||
import { NotImplementedProxy } from 'vs/base/common/types';
|
|
||||||
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
|
||||||
import { ExtHostOutputService2 } from 'vs/workbench/api/node/extHostOutputService';
|
import { ExtHostOutputService2 } from 'vs/workbench/api/node/extHostOutputService';
|
||||||
import { ExtHostTerminalService } from 'vs/workbench/api/node/extHostTerminalService';
|
import { ExtHostTerminalService } from 'vs/workbench/api/node/extHostTerminalService';
|
||||||
@ -38,4 +36,3 @@ registerSingleton(IExtHostSearch, NativeExtHostSearch);
|
|||||||
registerSingleton(IExtHostTask, ExtHostTask);
|
registerSingleton(IExtHostTask, ExtHostTask);
|
||||||
registerSingleton(IExtHostTerminalService, ExtHostTerminalService);
|
registerSingleton(IExtHostTerminalService, ExtHostTerminalService);
|
||||||
registerSingleton(IExtHostTunnelService, ExtHostTunnelService);
|
registerSingleton(IExtHostTunnelService, ExtHostTunnelService);
|
||||||
registerSingleton(IExtHostNodeProxy, class extends NotImplementedProxy<IExtHostNodeProxy>(String(IExtHostNodeProxy)) { whenReady = Promise.resolve(); });
|
|
||||||
|
@ -8,7 +8,6 @@ import { ILogService } from 'vs/platform/log/common/log';
|
|||||||
import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService';
|
import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService';
|
||||||
import { ExtHostExtensionService } from 'vs/workbench/api/worker/extHostExtensionService';
|
import { ExtHostExtensionService } from 'vs/workbench/api/worker/extHostExtensionService';
|
||||||
import { ExtHostLogService } from 'vs/workbench/api/worker/extHostLogService';
|
import { ExtHostLogService } from 'vs/workbench/api/worker/extHostLogService';
|
||||||
import { ExtHostNodeProxy, IExtHostNodeProxy } from 'vs/server/browser/extHostNodeProxy';
|
|
||||||
|
|
||||||
// #########################################################################
|
// #########################################################################
|
||||||
// ### ###
|
// ### ###
|
||||||
@ -18,4 +17,3 @@ import { ExtHostNodeProxy, IExtHostNodeProxy } from 'vs/server/browser/extHostNo
|
|||||||
|
|
||||||
registerSingleton(IExtHostExtensionService, ExtHostExtensionService);
|
registerSingleton(IExtHostExtensionService, ExtHostExtensionService);
|
||||||
registerSingleton(ILogService, ExtHostLogService);
|
registerSingleton(ILogService, ExtHostLogService);
|
||||||
registerSingleton(IExtHostNodeProxy, ExtHostNodeProxy);
|
|
||||||
|
@ -11,7 +11,6 @@ import { RequireInterceptor } from 'vs/workbench/api/common/extHostRequireInterc
|
|||||||
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||||
import { ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes';
|
import { ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes';
|
||||||
import { timeout } from 'vs/base/common/async';
|
import { timeout } from 'vs/base/common/async';
|
||||||
import { loadCommonJSModule } from 'vs/server/browser/worker';
|
|
||||||
|
|
||||||
class WorkerRequireInterceptor extends RequireInterceptor {
|
class WorkerRequireInterceptor extends RequireInterceptor {
|
||||||
|
|
||||||
@ -47,15 +46,10 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected _getEntryPoint(extensionDescription: IExtensionDescription): string | undefined {
|
protected _getEntryPoint(extensionDescription: IExtensionDescription): string | undefined {
|
||||||
// NOTE@coder: We can support regular Node modules as well. These will just
|
return extensionDescription.browser;
|
||||||
// require the root of the extension.
|
|
||||||
return extensionDescription.browser || '.';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async _loadCommonJSModule<T>(module: URI, activationTimesBuilder: ExtensionActivationTimesBuilder, isRemote?: boolean): Promise<T> {
|
protected async _loadCommonJSModule<T>(module: URI, activationTimesBuilder: ExtensionActivationTimesBuilder): Promise<T> {
|
||||||
if (isRemote) {
|
|
||||||
return loadCommonJSModule(module, activationTimesBuilder, this._nodeProxy, this._logService, this._fakeModules!.getModule('vscode', module));
|
|
||||||
}
|
|
||||||
|
|
||||||
module = module.with({ path: ensureSuffix(module.path, '.js') });
|
module = module.with({ path: ensureSuffix(module.path, '.js') });
|
||||||
const response = await fetch(module.toString(true));
|
const response = await fetch(module.toString(true));
|
||||||
|
@ -178,10 +178,8 @@ export class ExtensionService extends AbstractExtensionService implements IExten
|
|||||||
this._remoteAgentService.getEnvironment(),
|
this._remoteAgentService.getEnvironment(),
|
||||||
this._remoteAgentService.scanExtensions()
|
this._remoteAgentService.scanExtensions()
|
||||||
]);
|
]);
|
||||||
|
localExtensions = this._checkEnabledAndProposedAPI(localExtensions);
|
||||||
remoteExtensions = this._checkEnabledAndProposedAPI(remoteExtensions);
|
remoteExtensions = this._checkEnabledAndProposedAPI(remoteExtensions);
|
||||||
// NOTE@coder: Include remotely hosted extensions that should run locally.
|
|
||||||
localExtensions = this._checkEnabledAndProposedAPI(localExtensions)
|
|
||||||
.concat(remoteExtensions.filter(ext => !ext.browser && ext.extensionKind && (ext.extensionKind === 'web' || ext.extensionKind.includes('web'))));
|
|
||||||
|
|
||||||
const remoteAgentConnection = this._remoteAgentService.getConnection();
|
const remoteAgentConnection = this._remoteAgentService.getConnection();
|
||||||
this._runningLocation = this._runningLocationClassifier.determineRunningLocation(localExtensions, remoteExtensions);
|
this._runningLocation = this._runningLocationClassifier.determineRunningLocation(localExtensions, remoteExtensions);
|
||||||
|
@ -37,8 +37,7 @@ export function canExecuteOnWorkspace(manifest: IExtensionManifest, productServi
|
|||||||
|
|
||||||
export function canExecuteOnWeb(manifest: IExtensionManifest, productService: IProductService, configurationService: IConfigurationService): boolean {
|
export function canExecuteOnWeb(manifest: IExtensionManifest, productService: IProductService, configurationService: IConfigurationService): boolean {
|
||||||
const extensionKind = getExtensionKind(manifest, productService, configurationService);
|
const extensionKind = getExtensionKind(manifest, productService, configurationService);
|
||||||
// NOTE@coder: Hardcode vim for now.
|
return extensionKind.some(kind => kind === 'web');
|
||||||
return extensionKind.some(kind => kind === 'web') || manifest.name === 'vim';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getExtensionKind(manifest: IExtensionManifest, productService: IProductService, configurationService: IConfigurationService): ExtensionKind[] {
|
export function getExtensionKind(manifest: IExtensionManifest, productService: IProductService, configurationService: IConfigurationService): ExtensionKind[] {
|
||||||
|
@ -21,15 +21,7 @@
|
|||||||
require.config({
|
require.config({
|
||||||
baseUrl: monacoBaseUrl,
|
baseUrl: monacoBaseUrl,
|
||||||
catchError: true,
|
catchError: true,
|
||||||
<<<<<<< HEAD
|
|
||||||
createTrustedScriptURL: (value: string) => value,
|
|
||||||
paths: {
|
|
||||||
'@coder/node-browser': `../node_modules/@coder/node-browser/out/client/client.js`,
|
|
||||||
'@coder/requirefs': `../node_modules/@coder/requirefs/out/requirefs.js`,
|
|
||||||
}
|
|
||||||
=======
|
|
||||||
trustedTypesPolicy
|
trustedTypesPolicy
|
||||||
>>>>>>> e4a830e9b7ca039c7c70697786d29f5b6679d775
|
|
||||||
});
|
});
|
||||||
|
|
||||||
require(['vs/workbench/services/extensions/worker/extensionHostWorker'], () => { }, err => console.error(err));
|
require(['vs/workbench/services/extensions/worker/extensionHostWorker'], () => { }, err => console.error(err));
|
||||||
|
@ -145,18 +145,6 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@coder/logger/-/logger-1.1.16.tgz#ee5b1b188f680733f35c11b065bbd139d618c1e1"
|
resolved "https://registry.yarnpkg.com/@coder/logger/-/logger-1.1.16.tgz#ee5b1b188f680733f35c11b065bbd139d618c1e1"
|
||||||
integrity sha512-X6VB1++IkosYY6amRAiMvuvCf12NA4+ooX+gOuu5bJIkdjmh4Lz7QpJcWRdgxesvo1msriDDr9E/sDbIWf6vsQ==
|
integrity sha512-X6VB1++IkosYY6amRAiMvuvCf12NA4+ooX+gOuu5bJIkdjmh4Lz7QpJcWRdgxesvo1msriDDr9E/sDbIWf6vsQ==
|
||||||
|
|
||||||
"@coder/node-browser@^1.0.8":
|
|
||||||
version "1.0.8"
|
|
||||||
resolved "https://registry.yarnpkg.com/@coder/node-browser/-/node-browser-1.0.8.tgz#c22f581b089ad7d95ad1362fd351c57b7fbc6e70"
|
|
||||||
integrity sha512-NLF9sYMRCN9WK1C224pHax1Cay3qKypg25BhVg7VfNbo3Cpa3daata8RF/rT8JK3lPsu8PmFgDRQjzGC9X1Lrw==
|
|
||||||
|
|
||||||
"@coder/requirefs@^1.1.5":
|
|
||||||
version "1.1.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/@coder/requirefs/-/requirefs-1.1.5.tgz#259db370d563a79a96fb150bc9d69c7db6edc9fb"
|
|
||||||
integrity sha512-3jB47OFCql9+9FI6Vc4YX0cfFnG5rxBfrZUH45S4XYtYGOz+/Xl4h4d2iMk50b7veHkeSWGlB4VHC3UZ16zuYQ==
|
|
||||||
optionalDependencies:
|
|
||||||
jszip "2.6.0"
|
|
||||||
|
|
||||||
"@istanbuljs/schema@^0.1.2":
|
"@istanbuljs/schema@^0.1.2":
|
||||||
version "0.1.2"
|
version "0.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
|
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
|
||||||
@ -5357,13 +5345,6 @@ jsprim@^1.2.2:
|
|||||||
json-schema "0.2.3"
|
json-schema "0.2.3"
|
||||||
verror "1.10.0"
|
verror "1.10.0"
|
||||||
|
|
||||||
jszip@2.6.0:
|
|
||||||
version "2.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/jszip/-/jszip-2.6.0.tgz#7fb3e9c2f11c8a9840612db5dabbc8cf3a7534b7"
|
|
||||||
integrity sha1-f7PpwvEciphAYS212rvIzzp1NLc=
|
|
||||||
dependencies:
|
|
||||||
pako "~1.0.0"
|
|
||||||
|
|
||||||
just-debounce@^1.0.0:
|
just-debounce@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea"
|
resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea"
|
||||||
@ -6677,11 +6658,6 @@ pac-resolver@^4.1.0:
|
|||||||
ip "^1.1.5"
|
ip "^1.1.5"
|
||||||
netmask "^1.0.6"
|
netmask "^1.0.6"
|
||||||
|
|
||||||
pako@~1.0.0:
|
|
||||||
version "1.0.11"
|
|
||||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
|
||||||
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
|
||||||
|
|
||||||
pako@~1.0.5:
|
pako@~1.0.5:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
|
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
|
||||||
|
Reference in New Issue
Block a user