other builder

rdesktop
filip mertens 1 year ago
parent a5c71f4379
commit 24039ebb43
  1. 16
      apps/remix-ide/src/app.js
  2. 18
      apps/remix-ide/src/app/plugins/fsPlugin.ts
  3. 9
      apps/remixdesktop/.babelrc
  4. 16
      apps/remixdesktop/.browserslistrc
  5. 34
      apps/remixdesktop/.eslintrc.json
  6. 51
      apps/remixdesktop/package.json
  7. 31
      apps/remixdesktop/project.json
  8. 29
      apps/remixdesktop/src/electronPluginClient.ts
  9. 31
      apps/remixdesktop/src/engine.ts
  10. 83
      apps/remixdesktop/src/fsPlugin.ts
  11. 53
      apps/remixdesktop/src/gitPlugin.ts
  12. 30
      apps/remixdesktop/src/main.ts
  13. 22
      apps/remixdesktop/src/preload.ts
  14. 74
      apps/remixdesktop/src/xtermPlugin.ts
  15. 23
      apps/remixdesktop/tsconfig.json
  16. 84
      apps/remixdesktop/webpack.config.js
  17. 1645
      apps/remixdesktop/yarn.lock
  18. 18
      package.json
  19. 102
      yarn.lock

@ -45,6 +45,7 @@ import { FileDecorator } from './app/plugins/file-decorator'
import { CodeFormat } from './app/plugins/code-format'
import { SolidityUmlGen } from './app/plugins/solidity-umlgen'
import { ContractFlattener } from './app/plugins/contractFlattener'
import { fsPlugin } from './app/plugins/fsPlugin'
const isElectron = require('is-electron')
@ -74,6 +75,8 @@ const Editor = require('./app/editor/editor')
const Terminal = require('./app/panels/terminal')
const { TabProxy } = require('./app/panels/tab-proxy.js')
class AppComponent {
constructor() {
@ -185,6 +188,9 @@ class AppComponent {
//----- search
const search = new SearchPlugin()
//---- fs plugin
const FSPlugin = new fsPlugin()
//---------------- Solidity UML Generator -------------------------
const solidityumlgen = new SolidityUmlGen(appManager)
@ -306,7 +312,8 @@ class AppComponent {
search,
solidityumlgen,
contractFlattener,
solidityScript
solidityScript,
FSPlugin
])
// LAYOUT & SYSTEM VIEWS
@ -423,6 +430,7 @@ class AppComponent {
await this.appManager.activatePlugin(['settings'])
await this.appManager.activatePlugin(['walkthrough', 'storage', 'search', 'compileAndRun', 'recorder'])
await this.appManager.activatePlugin(['solidity-script'])
await this.appManager.activatePlugin(['fs'])
this.appManager.on(
'filePanel',
@ -436,6 +444,12 @@ class AppComponent {
}
)
this.appManager.on('fs', 'loaded', async () => {
console.log('fs loaded')
const files = await this.appManager.call('fs', 'readdir', './')
console.log('files', files)
})
await this.appManager.activatePlugin(['filePanel'])
// Set workspace after initial activation
this.appManager.on('editor', 'editorMounted', () => {

@ -0,0 +1,18 @@
import { ElectronPlugin } from '@remixproject/engine-electron';
export class fsPlugin extends ElectronPlugin {
constructor(){
super({
displayName: 'fs',
name: 'fs',
description: 'fs',
})
this.methods = ['readdir', 'readFile', 'writeFile', 'mkdir', 'rmdir', 'unlink', 'rename', 'stat', 'exists']
}
async onActivation() {
console.log('fsPluginClient onload')
}
}

@ -1,9 +0,0 @@
{
"presets": ["@babel/preset-env", ["@babel/preset-react",
{"runtime": "automatic"}
]],
"plugins": ["@babel/plugin-proposal-class-properties", "@babel/plugin-transform-runtime", "@babel/plugin-proposal-nullish-coalescing-operator"],
"ignore": [
"**/node_modules/**"
]
}

@ -1,16 +0,0 @@
# This file is used by:
# 1. autoprefixer to adjust CSS to support the below specified browsers
# 2. babel preset-env to adjust included polyfills
#
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries
#
# If you need to support different browsers in production, you may tweak the list below.
last 1 Chrome version
last 1 Firefox version
last 2 Edge major versions
last 2 Safari major version
last 2 iOS major versions
Firefox ESR
not IE 9-11 # For IE 9-11 support, remove 'not'.

@ -1,34 +0,0 @@
{
"extends": [
"plugin:@nrwl/nx/react",
"../../.eslintrc.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

@ -1,27 +1,44 @@
{
"name": "remixdesktop",
"productName": "remixdesktop",
"version": "1.0.0",
"description": "My Electron application description",
"main": ".webpack/main",
"scripts": {
"start": "electron-forge start",
"package": "electron-forge package",
"make": "electron-forge make",
"publish": "electron-forge publish",
"lint": "eslint --ext .ts,.tsx ."
"main": "build/main.js",
"license": "MIT",
"appId": "org.ethereum.remixdesktop",
"mac": {
"category": "public.app-category.productivity"
},
"keywords": [],
"author": {
"name": "bunsenstraat",
"email": "filip.mertens@ethereum.org"
"scripts": {
"start:dev": "tsc && cross-env NODE_ENV=development electron .",
"start:production": "tsc && cross-env NODE_ENV=production electron .",
"pack": "tsc && electron-builder",
"dist": "tsc && electron-builder --mac --dir",
"postinstall": "electron-builder install-app-deps"
},
"license": "MIT",
"devDependencies": {
"@electron-forge/cli": "^6.1.1",
"electron": "24.4.0"
"@electron/rebuild": "^3.2.13",
"cross-env": "^7.0.3",
"electron": "^25.0.1",
"electron-builder": "^23.6.0",
"typescript": "^5.1.3"
},
"dependencies": {
"electron-squirrel-startup": "^1.0.0"
"node-pty": "^0.10.1",
"electron-is-packaged": "^1.0.2"
},
"build": {
"productName": "remixdesktop",
"mac": {
"target": {
"target": "default",
"arch": [
"universal"
]
},
"category": "public.app-category.productivity"
},
"extends": null,
"files": [
"build/**/*"
]
}
}

@ -1,31 +0,0 @@
{
"name": "remixdesktop",
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "apps/remixdesktop/src",
"projectType": "application",
"targets": {
"build": {
"executor": "@nrwl/webpack:webpack",
"outputs": ["{options.outputPath}"],
"defaultConfiguration": "development",
"options": {
"outputPath": "apps/remixdesktop/.webpack/main",
"main": "apps/remixdesktop/src/index.ts",
"tsConfig": "apps/remixdesktop/tsconfig.json",
"assets": [
],
"webpackConfig": "apps/remixdesktop/webpack.config.js",
"vendorChunk": false,
"runtimeChunk": false
},
"configurations": {
"development": {
},
"production": {
"optimization": true
}
}
}
},
"tags": []
}

@ -1,29 +0,0 @@
import { ClientConnector, connectClient, applyApi, Client, PluginClient } from '@remixproject/plugin'
import type { Message, Api, ApiMap } from '@remixproject/plugin-utils'
import { IRemixApi } from '@remixproject/plugin-api'
import { ipcMain } from 'electron'
import { mainWindow } from '.'
export class ElectronPluginConnector implements ClientConnector {
/** Send a message to the engine */
send(message: Partial<Message>) {
console.log('ElectronPluginConnector send', message)
mainWindow.webContents.send('fsClient:send', message)
}
/** Listen to message from the engine */
on(cb: (message: Partial<Message>) => void) {
console.log('ElectronPluginConnector on', cb)
}
}
export const createClient = <
P extends Api,
App extends ApiMap = Readonly<IRemixApi>
>(client: PluginClient<P, App> = new PluginClient()): Client<P, App> => {
const c = client as any
connectClient(new ElectronPluginConnector(), c)
applyApi(c)
return c
}

@ -1,14 +1,29 @@
import { Engine, PluginManager, Plugin } from '@remixproject/engine';
import { ipcMain, ipcRenderer } from 'electron';
import { fsPlugin } from './fsPlugin';
import { Engine, PluginManager } from '@remixproject/engine';
import { ipcMain } from 'electron';
import { FSPlugin } from './fsPlugin';
import { GitPlugin } from './gitPlugin';
import { app } from 'electron';
import { XtermPlugin } from './xtermPlugin';
const engine = new Engine()
const appManager = new PluginManager()
const plugin = new fsPlugin()
const fsPlugin = new FSPlugin()
const gitPlugin = new GitPlugin()
const xtermPlugin = new XtermPlugin()
engine.register(appManager)
engine.register(plugin)
//appManager.activatePlugin('fs')
engine.register(fsPlugin)
engine.register(gitPlugin)
engine.register(xtermPlugin)
ipcMain.on('manager:activatePlugin', (event, arg) => {
appManager.activatePlugin(arg)
ipcMain.handle('manager:activatePlugin', async (event, arg) => {
console.log('manager:activatePlugin', arg)
if(await appManager.isActive(arg)){
return true
}
return await appManager.activatePlugin(arg)
})
app.on('before-quit', async () => {
await appManager.call('fs', 'closeWatch')
app.quit()
})

@ -1,70 +1,103 @@
import { PluginClient } from "@remixproject/plugin";
import { createClient } from "./electronPluginClient"
import { Engine, PluginManager, Plugin } from '@remixproject/engine';
import fs from 'fs'
import { existsSync } from "fs-extra";
import { createElectronClient } from "@remixproject/plugin-electron"
import { Plugin } from '@remixproject/engine';
import fs from 'fs/promises'
import { Stats } from "fs";
import { Profile } from "@remixproject/plugin-utils";
import chokidar from 'chokidar'
import { mainWindow } from "./main";
const profile = {
const profile: Profile = {
displayName: 'fs',
name: 'fs',
description: 'fs',
}
export class fsPlugin extends Plugin {
client: PluginClient
constructor(){
export class FSPlugin extends Plugin {
client: FSPluginClient
constructor() {
super(profile)
this.methods = ['closeWatch']
}
onActivation(): void {
console.log('fsPlugin onActivation')
this.client = new fsPluginClient()
this.client = new FSPluginClient()
}
async closeWatch(): Promise<void> {
console.log('closeWatch')
if (this.client)
await this.client.closeWatch()
}
}
class fsPluginClient extends PluginClient {
constructor(){
class FSPluginClient extends PluginClient {
watcher: chokidar.FSWatcher | undefined
constructor() {
super()
this.methods = ['readdir', 'readFile', 'writeFile', 'mkdir', 'rmdir', 'unlink', 'rename', 'stat', 'exists']
createClient(this)
this.onload()
this.methods = ['readdir', 'readFile', 'writeFile', 'mkdir', 'rmdir', 'unlink', 'rename', 'stat', 'exists', 'watch', 'closeWatch', 'currentPath']
createElectronClient(this, profile, mainWindow)
this.onload(() => {
console.log('fsPluginClient onload')
})
}
async readdir(path: string): Promise<string[]> {
// call node fs.readdir
return fs.readdirSync(path)
return fs.readdir(path)
}
async readFile(path: string): Promise<string> {
return fs.readFileSync(path, 'utf8')
return fs.readFile(path, 'utf8')
}
async writeFile(path: string, content: string): Promise<void> {
return fs.writeFileSync(path, content, 'utf8')
return fs.writeFile(path, content, 'utf8')
}
async mkdir(path: string): Promise<void> {
return fs.mkdirSync(path)
return fs.mkdir(path)
}
async rmdir(path: string): Promise<void> {
return fs.rmdirSync(path)
return fs.rmdir(path)
}
async unlink(path: string): Promise<void> {
return fs.unlinkSync(path)
return fs.unlink(path)
}
async rename(oldPath: string, newPath: string): Promise<void> {
return fs.renameSync(oldPath, newPath)
return fs.rename(oldPath, newPath)
}
async stat(path: string): Promise<fs.Stats> {
return fs.statSync(path)
async stat(path: string): Promise<Stats> {
return fs.stat(path)
}
async exists(path: string): Promise<boolean> {
return existsSync(path)
return fs.access(path).then(() => true).catch(() => false)
}
async currentPath(): Promise<string> {
return process.cwd()
}
async watch(path: string): Promise<void> {
console.log('watch', path)
if (this.watcher) this.watcher.close()
this.watcher =
chokidar.watch(path).on('change', (path, stats) => {
console.log('change', path, stats)
this.emit('change', path, stats)
})
}
async closeWatch(): Promise<void> {
console.log('closeWatch')
if (this.watcher) this.watcher.close()
}
}

@ -0,0 +1,53 @@
import { Plugin } from "@remixproject/engine";
import { PluginClient } from "@remixproject/plugin";
import { Profile } from "@remixproject/plugin-utils";
import { spawn } from "child_process";
import { createElectronClient } from "@remixproject/plugin-electron"
import { mainWindow } from "./main";
const profile: Profile = {
name: 'git',
displayName: 'Git',
description: 'Git plugin',
}
export class GitPlugin extends Plugin {
client: PluginClient
constructor() {
super(profile)
}
onActivation(): void {
this.client = new GitPluginClient()
}
}
class GitPluginClient extends PluginClient {
constructor() {
super()
this.methods = ['log', 'status', 'add', 'commit', 'push', 'pull', 'clone', 'checkout', 'branch', 'merge', 'reset', 'revert', 'diff', 'stash', 'apply', 'cherryPick', 'rebase', 'tag', 'fetch', 'remote', 'config', 'show', 'init', 'help', 'version']
createElectronClient(this, profile, mainWindow)
this.onload(() => {
console.log('GitPluginClient onload')
})
}
async log(path: string): Promise<string> {
const log = spawn('git', ['log'], {
cwd: path,
env: {
NODE_ENV: 'production',
PATH: process.env.PATH,
},
})
return new Promise((resolve, reject) => {
log.stdout.on('data', (data) => {
resolve(data.toString())
})
})
}
}

@ -1,10 +1,18 @@
import { app, BrowserWindow } from 'electron';
import path from 'path';
// This allows TypeScript to pick up the magic constants that's auto-generated by Forge's Webpack
// plugin that tells the Electron app where to look for the Webpack-bundled app code (depending on
// whether you're running in development or production).
declare const MAIN_WINDOW_WEBPACK_ENTRY: string;
declare const MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY: string;
let isPackaged = false;
if (
process.mainModule &&
process.mainModule.filename.indexOf('app.asar') !== -1
) {
isPackaged = true;
} else if (process.argv.filter(a => a.indexOf('app.asar') !== -1).length > 0) {
isPackaged = true;
}
// Handle creating/removing shortcuts on Windows when installing/uninstalling.
if (require('electron-squirrel-startup')) {
@ -14,15 +22,17 @@ export let mainWindow: BrowserWindow;
const createWindow = (): void => {
// Create the browser window.
mainWindow = new BrowserWindow({
height: 600,
width: 800,
height: 800,
width: 1024,
webPreferences: {
preload: MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY
preload: path.join(__dirname, 'preload.js')
},
});
// and load the index.html of the app.
mainWindow.loadURL(MAIN_WINDOW_WEBPACK_ENTRY);
mainWindow.loadURL(
process.env.NODE_ENV === 'production' || isPackaged? `file://${__dirname}/remix-ide/index.html` :
'http://localhost:8080')
mainWindow.maximize();
// Open the DevTools.
@ -54,5 +64,3 @@ app.on('activate', () => {
// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and import them here.

@ -1,12 +1,26 @@
// electron preload script
// write contextbridge to window
import { Message } from '@remixproject/plugin-utils'
import { contextBridge, ipcRenderer } from 'electron'
console.log('preload.ts')
contextBridge.exposeInMainWorld('api', {
/* preload script needs statically defined API for each plugin */
const exposedPLugins = ['fs', 'git', 'xterm']
contextBridge.exposeInMainWorld('electronAPI', {
activatePlugin: (name: string) => {
console.log('activatePlugin', name)
ipcRenderer.send('manager:activatePlugin', name)
}
return ipcRenderer.invoke('manager:activatePlugin', name)
},
plugins: exposedPLugins.map(name => {
return {
name,
on: (cb:any) => ipcRenderer.on(`${name}:send`, cb),
send: (message: Partial<Message>) => ipcRenderer.send(`${name}:on`, message)
}
})
})

@ -0,0 +1,74 @@
import { Plugin } from "@remixproject/engine";
import { PluginClient } from "@remixproject/plugin";
import { Profile } from "@remixproject/plugin-utils";
import { spawn } from "child_process";
import { createElectronClient } from "@remixproject/plugin-electron"
import os from 'os';
import * as pty from "node-pty"
import { mainWindow } from "./main";
const profile: Profile = {
name: 'xterm',
displayName: 'xterm',
description: 'xterm plugin',
}
export class XtermPlugin extends Plugin {
client: PluginClient
constructor() {
super(profile)
}
onActivation(): void {
this.client = new XtermPluginClient()
}
}
class XtermPluginClient extends PluginClient {
terminals: pty.IPty[] = []
constructor() {
super()
this.methods = ['keystroke', 'createTerminal', 'close']
createElectronClient(this, profile, mainWindow)
this.onload(() => {
console.log('XtermPluginClient onload')
})
}
async keystroke(key: string, pid: number): Promise<void> {
console.log('keystroke', key)
this.terminals[pid].write(key)
}
async createTerminal(path?: string): Promise<number>{
const shell = os.platform() === 'win32' ? 'powershell.exe' : 'bash';
const ptyProcess = pty.spawn(shell, [], {
name: 'xterm-color',
cols: 80,
rows: 30,
cwd: path || process.cwd() ,
env: process.env as { [key: string]: string },
});
ptyProcess.onData((data: string) => {
this.sendData(data, ptyProcess.pid);
})
this.terminals[ptyProcess.pid] = ptyProcess
console.log('create terminal', ptyProcess.pid)
return ptyProcess.pid
}
async close(pid: number): Promise<void>{
this.terminals[pid].kill()
delete this.terminals[pid]
this.emit('close', pid)
}
async sendData(data: string, pid: number){
this.emit('data', data, pid)
}
}

@ -1,20 +1,17 @@
{
"compilerOptions": {
"target": "ES6",
"jsx": "react-jsx",
"allowJs": true,
"target": "es6",
"module": "commonjs",
"skipLibCheck": true,
"esModuleInterop": true,
"noImplicitAny": true,
"allowSyntheticDefaultImports": true,
"sourceMap": true,
"baseUrl": ".",
"outDir": "dist",
"moduleResolution": "node",
"resolveJsonModule": true,
"paths": {
"*": ["node_modules/*"]
}
},
"include": ["src/**/*"]
}
"strictPropertyInitialization": false,
"strict": true,
"outDir": "build",
"rootDir": "./src/",
"noEmitOnError": true,
"typeRoots": ["node_modules/@types", "./types"]
}
}

@ -1,84 +0,0 @@
const { composePlugins, withNx } = require('@nrwl/webpack')
const webpack = require('webpack')
const TerserPlugin = require("terser-webpack-plugin")
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin")
// Nx plugins for webpack.
module.exports = composePlugins((input) => {
const config = {
mode: input.mode === 'production' ? 'production' : 'development',
}
config.target = 'electron-main'
config.devtool = 'source-map'
config.output = {
path: __dirname + '/.webpack/main',
filename: '[name].js',
}
config.target = 'electron-preload'
config.entry = {
index: ['./apps/remixdesktop/src/index.ts'],
preload: ['./apps/remixdesktop/src/preload.ts'],
}
const mainEntry = config.mode === 'production'? `\`file://$\{require('path').resolve(__dirname, '..', 'renderer', 'index.html')}\``: `'http://localhost:8080'`
config.plugins= [
new webpack.DefinePlugin({
MAIN_WINDOW_WEBPACK_ENTRY: mainEntry,
'process.env.MAIN_WINDOW_WEBPACK_ENTRY': mainEntry,
MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY: `\`$\{require('path').resolve(__dirname, 'preload.js')}\``,
'process.env.MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY': `\`$\{require('path').resolve(__dirname, '..', 'render', 'preload.js')}\``,
})
]
config.module = {}
config.module.rules = [
// Add support for native node modules
{
// We're specifying native_modules in the test because the asset relocator loader generates a
// "fake" .node file which is really a cjs file.
test: /native_modules[/\\].+\.node$/,
use: 'node-loader',
},
/*
{
test: /[/\\]node_modules[/\\].+\.(m?js|node)$/,
parser: { amd: false },
use: {
loader: '@vercel/webpack-asset-relocator-loader',
options: {
outputAssetBase: 'native_modules',
},
},
},
*/
{
test: /\.tsx?$/,
exclude: /(node_modules|\.webpack)/,
use: {
loader: 'ts-loader',
options: {
transpileOnly: true,
},
},
},
];
config.resolve = {}
config.resolve.extensions = [ '.js', '.ts', '.jsx', '.tsx', '.css' ]
config.target = 'electron-preload'
config.node = {
__dirname: false,
__filename: false,
}
console.log('config', config)
return config;
});

File diff suppressed because it is too large Load Diff

@ -54,7 +54,7 @@
"publishDev:libs": "yarn run build:libs && lerna publish --npm-tag alpha --skip-git && yarn run bumpVersion:libs",
"build:e2e": "node apps/remix-ide-e2e/src/buildGroupTests.js && tsc -p apps/remix-ide-e2e/tsconfig.e2e.json",
"serve:desktop:dist": "rm -rf apps/remixdesktop/.webpack && yarn nx build remixdesktop && NX_DESKTOP_FROM_DIST=true nx build remix-ide --configuration=desktop && cp -r dist/apps/remix-ide apps/remixdesktop/.webpack/renderer && yarn electron apps/remixdesktop/.webpack/main",
"build:desktop": "rm -rf apps/remixdesktop/.webpack && yarn nx build remixdesktop && NX_DESKTOP_FROM_DIST=true nx build remix-ide --configuration=desktop && cp -r dist/apps/remix-ide apps/remixdesktop/.webpack/renderer && cd apps/remixdesktop/ && yarn package",
"build:desktop": "rm -rf apps/2test/build/remix-ide && NX_DESKTOP_FROM_DIST=true nx build remix-ide --configuration=desktop && cp -r dist/apps/remix-ide apps/2test/build/remix-ide",
"serve:desktop": "rm -rf apps/remixdesktop/.webpack && yarn nx build remixdesktop --configuration=development && yarn electron apps/remixdesktop",
"babel": "babel",
"watch:e2e": "nodemon",
@ -134,13 +134,15 @@
"@openzeppelin/contracts": "^4.7.3",
"@openzeppelin/upgrades-core": "^1.22.0",
"@openzeppelin/wizard": "0.2.0",
"@remixproject/engine": "0.3.33",
"@remixproject/engine-web": "0.3.33",
"@remixproject/plugin": "0.3.33",
"@remixproject/plugin-api": "0.3.33",
"@remixproject/plugin-utils": "0.3.33",
"@remixproject/plugin-webview": "0.3.33",
"@remixproject/plugin-ws": "0.3.33",
"@remixproject/engine": "0.3.34",
"@remixproject/engine-web": "0.3.34",
"@remixproject/engine-electron":" 0.3.34",
"@remixproject/plugin": "0.3.34",
"@remixproject/plugin-api": "0.3.34",
"@remixproject/plugin-utils": "0.3.34",
"@remixproject/plugin-webview": "0.3.34",
"@remixproject/plugin-electron": "0.3.34",
"@remixproject/plugin-ws": "0.3.34",
"@types/nightwatch": "^2.3.1",
"@walletconnect/ethereum-provider": "^2.6.2",
"@walletconnect/sign-client": "^2.6.0",

@ -5131,63 +5131,81 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.2.tgz#0798c03351f0dea1a5a4cabddf26a55a7cbee590"
integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==
"@remixproject/engine-web@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/engine-web/-/engine-web-0.3.33.tgz#2a444c327cca5bd54bb1e12e2a937c24dde8703f"
integrity sha512-YP62Cy6LSYiSw7Aon8ukS/Ut+fX34NIvRPPaJNq0r8F3IgB9vXAuKgOLs5QoIbrDJNb0ddM+0L2sIDWiNN1RtQ==
"@remixproject/engine-electron@ 0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@remixproject/engine-electron/-/engine-electron-0.3.34.tgz#072575ec61b73ff533c6b72952b2b72c983b00bf"
integrity sha512-8eyKitn8D7PMkfArumaZb6r5Qw59Q3viDEpxv97uBLd8bi2bNIpBY8nT5JGXhZiVDIzNxdANq3rRUhVfkT081Q==
dependencies:
"@remixproject/engine" "0.3.33"
"@remixproject/plugin-api" "0.3.33"
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/engine" "0.3.34"
"@remixproject/plugin-api" "0.3.34"
"@remixproject/plugin-utils" "0.3.34"
"@remixproject/engine@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/engine/-/engine-0.3.33.tgz#c3f15e5eefbd7bc04dda7aee776fa3f3ad460703"
integrity sha512-IoWIERfoT407nYcXPJZR03LOBXA3cbAxFXvhmxYrUh658jumljxTwH+SIAbIGew/kKtu0TXyTOr8RBaOb1cEog==
"@remixproject/engine-web@0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@remixproject/engine-web/-/engine-web-0.3.34.tgz#9ecffec8839dcbdcc03ba22ee8b7b2999740b060"
integrity sha512-a3MxCVHU5szgdnA2XnZ8ve4Fl/qYGy7krv9lM5QygKpPYkA1L+rRWZ1eB29fzLXh/27k0XBUdlbIngah+Fd5Zg==
dependencies:
"@remixproject/plugin-api" "0.3.33"
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/engine" "0.3.34"
"@remixproject/plugin-api" "0.3.34"
"@remixproject/plugin-utils" "0.3.34"
"@remixproject/plugin-api@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-api/-/plugin-api-0.3.33.tgz#29699f980ea00bebf720961cc0e78887e03903ec"
integrity sha512-fBEbRr6/mgQdfNdRqYQL3yewsPfTxV41F509CngbD6YdY5YKBihJhfGFHbd2rKSyXOgBiHIbe0SsV3OXpFdWnw==
"@remixproject/engine@0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@remixproject/engine/-/engine-0.3.34.tgz#100517dc3dc2e0c728be6f8b0a3f41f462ece5ed"
integrity sha512-eWesiIQpXR9clm/NG95SY+2gyvoZICBZO1eO30MQM6wF2/iPJz2W0H+UTN2pA6952CiG6xutR/AgORKXKWkkwQ==
dependencies:
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/plugin-api" "0.3.34"
"@remixproject/plugin-utils" "0.3.34"
"@remixproject/plugin-utils@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-utils/-/plugin-utils-0.3.33.tgz#7b697403031598276baaf16bb82d6c62062053fc"
integrity sha512-cAo21ot4/G5BkN8ypDwg8MMCrEmLdXwMd3lQZUeB5enPC3KxmzQz71+OgEYl718Hwy+GtHaLq17FEXCHC5YV9w==
"@remixproject/plugin-api@0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-api/-/plugin-api-0.3.34.tgz#8c556d7317e797738a26a65c50b9f310a0c9f739"
integrity sha512-4dwjSgeHbMbyCnRd6++GtaHrPFd21birhRWM4e3cJj7AG/8KjykiVYfXi/0aeDJr1QDviEyv4A15a3SyV7rCFg==
dependencies:
"@remixproject/plugin-utils" "0.3.34"
"@remixproject/plugin-electron@0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-electron/-/plugin-electron-0.3.34.tgz#6a360171f2be1b16b2f01247bef81fc1197279a3"
integrity sha512-fMJijx2V84WyL6XK8zw0aVNE4ejxYK5MQsfiGggu8gx5XMyHFAk5QGZUCX+msJ0mPQf5W2UyHWnrsefLp3UYXA==
dependencies:
"@remixproject/plugin" "0.3.34"
"@remixproject/plugin-api" "0.3.34"
"@remixproject/plugin-utils" "0.3.34"
"@remixproject/plugin-utils@0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-utils/-/plugin-utils-0.3.34.tgz#a8366b3ebee491e23861592d69f4ad34feba6b6c"
integrity sha512-TYpiDXZ1uHeYMLe0+P6xAp8F+cfPFnEfUFHgAUbdvDNGLk0H6TxYoK/vJXYpvqcKaVdOyZi9tVc8bQSwq/xu0w==
dependencies:
tslib "2.0.1"
"@remixproject/plugin-webview@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-webview/-/plugin-webview-0.3.33.tgz#97393ee1c9511009f5f299698987e29f946c106b"
integrity sha512-cMwpRzgL7rfTQKlLuTuyYyFvo4hiZ6nsDX9FfLRjGJpgCDUsSmOA0JvGv+/GsyZvpSo4FXL/0TQKTgm0t78Ocg==
"@remixproject/plugin-webview@0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-webview/-/plugin-webview-0.3.34.tgz#c410e22ad5d059ec5efc5d82aa2c95079426240c"
integrity sha512-YxpiA26ngKSUHLwgIEeiGKGbM2KEqzBVOtXagaQ06CkfA+EoeQ+BBLUQS/e3ant6dpA4EhmpcZPNgp0j6VPOXA==
dependencies:
"@remixproject/plugin" "0.3.33"
"@remixproject/plugin-api" "0.3.33"
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/plugin" "0.3.34"
"@remixproject/plugin-api" "0.3.34"
"@remixproject/plugin-utils" "0.3.34"
axios "^0.21.1"
"@remixproject/plugin-ws@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-ws/-/plugin-ws-0.3.33.tgz#98a003e83ffafb5a7a35ca4e8c59d849ecb017cf"
integrity sha512-Zkp8MK8jxnNm3uruu0dF8vqeh90JsLXttJP4LZF0HaStRRK4d2XG6CgE5mBiC2J4uTEwGP26H/vmqi+POBPTEg==
"@remixproject/plugin-ws@0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@remixproject/plugin-ws/-/plugin-ws-0.3.34.tgz#a2a1c78407e1aeb7809758e8ac13120703aa4ea8"
integrity sha512-oj7RYhjfigZPhuxlgQRMmIuWD8bV7p9muYu4KWsp4WaqZqUS7Q4J5RlyHvO0H8vYImnwI1hqI5OlDUh376Nc1A==
dependencies:
"@remixproject/plugin" "0.3.33"
"@remixproject/plugin-api" "0.3.33"
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/plugin" "0.3.34"
"@remixproject/plugin-api" "0.3.34"
"@remixproject/plugin-utils" "0.3.34"
"@remixproject/plugin@0.3.33":
version "0.3.33"
resolved "https://registry.yarnpkg.com/@remixproject/plugin/-/plugin-0.3.33.tgz#2939cdb6a1231743d7f00c10f5ea47eddd49b602"
integrity sha512-ia6LevsWYPkcRwOBl3umA2fPCgYt2TmB437Pafs9BE6fD9judEvlvEqXjBy9GLBsZzZWSiyYenOnW8HIiwqfMA==
"@remixproject/plugin@0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@remixproject/plugin/-/plugin-0.3.34.tgz#936d0385acc221c4ce1b54558a7578ac8a0d9692"
integrity sha512-YdOE3K8LKr6EWcmbTBReazNU+r256Y1bWj9bCPn4qJeN6QpEQPeoa1JtDUU8DJBKtvf3OXXcKrbOMTa4/f6XGQ==
dependencies:
"@remixproject/plugin-api" "0.3.33"
"@remixproject/plugin-utils" "0.3.33"
"@remixproject/plugin-api" "0.3.34"
"@remixproject/plugin-utils" "0.3.34"
events "3.2.0"
"@restart/context@^2.1.4":

Loading…
Cancel
Save