git4refactor
filip mertens 6 months ago
parent 7da0d585f3
commit 32d9abf089
  1. 6
      apps/remix-ide/src/app/components/hidden-panel.tsx
  2. 8
      apps/remix-ide/src/app/components/main-panel.tsx
  3. 2
      apps/remix-ide/src/app/components/panel.ts
  4. 18
      apps/remix-ide/src/app/components/preload.tsx
  5. 8
      apps/remix-ide/src/app/components/side-panel.tsx
  6. 10
      apps/remix-ide/src/app/components/vertical-icons.tsx
  7. 10
      apps/remix-ide/src/app/files/dgitProvider.ts
  8. 2
      apps/remix-ide/src/app/files/electronProvider.ts
  9. 27
      apps/remix-ide/src/app/files/fileManager.ts
  10. 3
      apps/remix-ide/src/app/files/fileProvider.ts
  11. 1
      apps/remix-ide/src/app/files/fileSystem.ts
  12. 2
      apps/remix-ide/src/app/files/filesystems/fileSystemUtility.ts
  13. 1
      apps/remix-ide/src/app/files/filesystems/indexedDB.ts
  14. 2
      apps/remix-ide/src/app/files/filesystems/localStorage.ts
  15. 6
      apps/remix-ide/src/app/panels/terminal.tsx
  16. 3
      apps/remix-ide/src/app/plugins/code-format.ts
  17. 1
      apps/remix-ide/src/app/plugins/code-format/parser.ts
  18. 2
      apps/remix-ide/src/app/plugins/compile-details.tsx
  19. 2
      apps/remix-ide/src/app/plugins/config.ts
  20. 8
      apps/remix-ide/src/app/plugins/contractFlattener.tsx
  21. 4
      apps/remix-ide/src/app/plugins/electron/compilerLoaderPlugin.ts
  22. 6
      apps/remix-ide/src/app/plugins/electron/fsPlugin.ts
  23. 4
      apps/remix-ide/src/app/plugins/file-decorator.ts
  24. 1
      apps/remix-ide/src/app/plugins/git.tsx
  25. 10
      apps/remix-ide/src/app/plugins/notification.tsx
  26. 8
      apps/remix-ide/src/app/plugins/openaigpt.tsx
  27. 5
      apps/remix-ide/src/app/plugins/parser/code-parser.tsx
  28. 17
      apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts
  29. 16
      apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts
  30. 9
      apps/remix-ide/src/app/plugins/parser/services/code-parser-gas-service.ts
  31. 14
      apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts
  32. 10
      apps/remix-ide/src/app/plugins/parser/types/antlr-types.ts
  33. 20
      apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx
  34. 46
      apps/remix-ide/src/app/plugins/remixGuide.tsx
  35. 24
      apps/remix-ide/src/app/plugins/remixd-handle.tsx
  36. 46
      apps/remix-ide/src/app/plugins/solcoderAI.tsx
  37. 18
      apps/remix-ide/src/app/plugins/solidity-script.tsx
  38. 28
      apps/remix-ide/src/app/plugins/solidity-umlgen.tsx
  39. 10
      apps/remix-ide/src/app/plugins/vyper-compilation-details.tsx
  40. 20
      apps/remix-ide/src/app/providers/abstract-provider.tsx
  41. 8
      apps/remix-ide/src/app/providers/custom-vm-fork-provider.tsx
  42. 6
      apps/remix-ide/src/app/providers/external-http-provider.tsx
  43. 4
      apps/remix-ide/src/app/providers/foundry-provider.tsx
  44. 4
      apps/remix-ide/src/app/providers/ganache-provider.tsx
  45. 2
      apps/remix-ide/src/app/providers/goerli-vm-fork-provider.tsx
  46. 4
      apps/remix-ide/src/app/providers/hardhat-provider.tsx
  47. 2
      apps/remix-ide/src/app/providers/injected-arbitrum-one-provider.tsx
  48. 12
      apps/remix-ide/src/app/providers/injected-custom-provider.tsx
  49. 6
      apps/remix-ide/src/app/providers/injected-ephemery-testnet-provider.tsx
  50. 2
      apps/remix-ide/src/app/providers/injected-optimism-provider.tsx
  51. 4
      apps/remix-ide/src/app/providers/injected-provider-default.tsx
  52. 2
      apps/remix-ide/src/app/providers/injected-provider-trustwallet.tsx
  53. 16
      apps/remix-ide/src/app/providers/injected-provider.tsx
  54. 6
      apps/remix-ide/src/app/providers/injected-skale-chaos-testnet-provider.tsx
  55. 2
      apps/remix-ide/src/app/providers/mainnet-vm-fork-provider.tsx
  56. 2
      apps/remix-ide/src/app/providers/sepolia-vm-fork-provider.tsx
  57. 8
      apps/remix-ide/src/app/providers/vm-provider.tsx
  58. 6
      apps/remix-ide/src/app/tabs/compile-and-run.ts
  59. 4
      apps/remix-ide/src/app/tabs/search.tsx
  60. 8
      apps/remix-ide/src/app/tabs/settings-tab.tsx
  61. 68
      apps/remix-ide/src/blockchain/blockchain.tsx
  62. 2
      apps/remix-ide/src/blockchain/helper.ts
  63. 7
      apps/remix-ide/src/blockchain/providers/vm.ts
  64. 14
      apps/remix-ide/src/blockchain/providers/worker-vm.ts
  65. 16
      apps/remix-ide/src/index.tsx

@ -1,9 +1,9 @@
// eslint-disable-next-line no-use-before-define
import React from 'react'
import {AbstractPanel} from './panel'
import { AbstractPanel } from './panel'
import * as packageJson from '../../../../../package.json'
import {RemixPluginPanel} from '@remix-ui/panel'
import {PluginViewWrapper} from '@remix-ui/helper'
import { RemixPluginPanel } from '@remix-ui/panel'
import { PluginViewWrapper } from '@remix-ui/helper'
const profile = {
name: 'hiddenPanel',

@ -1,8 +1,8 @@
import React from 'react' // eslint-disable-line
import {AbstractPanel} from './panel'
import {RemixPluginPanel} from '@remix-ui/panel'
import { AbstractPanel } from './panel'
import { RemixPluginPanel } from '@remix-ui/panel'
import packageJson from '../../../../../package.json'
import {PluginViewWrapper} from '@remix-ui/helper'
import { PluginViewWrapper } from '@remix-ui/helper'
const profile = {
name: 'mainPanel',
@ -60,7 +60,7 @@ export class MainPanel extends AbstractPanel {
render() {
return (
<div style={{height: '100%', width: '100%'}} data-id="mainPanelPluginsContainer">
<div style={{ height: '100%', width: '100%' }} data-id="mainPanelPluginsContainer">
<PluginViewWrapper plugin={this} />
</div>
)

@ -49,7 +49,7 @@ export class AbstractPanel extends HostPlugin {
* @param {String} name The name of the plugin to display the content
*/
showContent (name) {
if (!this.plugins[name]) throw new Error(`Plugin ${name} is not yet activated`)
if (!this.plugins[name]) throw new Error(`Plugin ${name} is not yet activated`)
Object.values(this.plugins).forEach(plugin => {
plugin.active = false
})

@ -1,12 +1,12 @@
import {RemixApp} from '@remix-ui/app'
import { RemixApp } from '@remix-ui/app'
import axios from 'axios'
import React, {useEffect, useRef, useState} from 'react'
import React, { useEffect, useRef, useState } from 'react'
import { createRoot } from 'react-dom/client'
import * as packageJson from '../../../../../package.json'
import {fileSystem, fileSystems} from '../files/fileSystem'
import {indexedDBFileSystem} from '../files/filesystems/indexedDB'
import {localStorageFS} from '../files/filesystems/localStorage'
import {fileSystemUtility, migrationTestData} from '../files/filesystems/fileSystemUtility'
import { fileSystem, fileSystems } from '../files/fileSystem'
import { indexedDBFileSystem } from '../files/filesystems/indexedDB'
import { localStorageFS } from '../files/filesystems/localStorage'
import { fileSystemUtility, migrationTestData } from '../files/filesystems/fileSystemUtility'
import './styles/preload.css'
import isElectron from 'is-electron'
const _paq = (window._paq = window._paq || [])
@ -83,7 +83,7 @@ export const Preload = (props: any) => {
}
useEffect (() => {
if(isElectron()){
if (isElectron()){
loadAppComponent()
return
}
@ -177,8 +177,8 @@ export const Preload = (props: any) => {
) : null}
{supported && !error && !showDownloader ? (
<div>
<div className='text-center'>
<i className="fas fa-spinner fa-spin fa-2x"></i>
<div className='text-center'>
<i className="fas fa-spinner fa-spin fa-2x"></i>
</div>
{ tip && <div className='remix_tips text-center mt-3'>
<div><b>DID YOU KNOW</b></div>

@ -1,10 +1,10 @@
// eslint-disable-next-line no-use-before-define
import React from 'react'
import {AbstractPanel} from './panel'
import {RemixPluginPanel} from '@remix-ui/panel'
import { AbstractPanel } from './panel'
import { RemixPluginPanel } from '@remix-ui/panel'
import packageJson from '../../../../../package.json'
import {RemixUIPanelHeader} from '@remix-ui/panel'
import {PluginViewWrapper} from '@remix-ui/helper'
import { RemixUIPanelHeader } from '@remix-ui/panel'
import { PluginViewWrapper } from '@remix-ui/helper'
// const csjs = require('csjs-inject')
const sidePanel = {

@ -1,11 +1,11 @@
// eslint-disable-next-line no-use-before-define
import React from 'react'
import packageJson from '../../../../../package.json'
import {Plugin} from '@remixproject/engine'
import {EventEmitter} from 'events'
import {IconRecord, RemixUiVerticalIconsPanel} from '@remix-ui/vertical-icons-panel'
import {Profile} from '@remixproject/plugin-utils'
import {PluginViewWrapper} from '@remix-ui/helper'
import { Plugin } from '@remixproject/engine'
import { EventEmitter } from 'events'
import { IconRecord, RemixUiVerticalIconsPanel } from '@remix-ui/vertical-icons-panel'
import { Profile } from '@remixproject/plugin-utils'
import { PluginViewWrapper } from '@remix-ui/helper'
const profile = {
name: 'menuicons',

@ -27,7 +27,6 @@ declare global {
interface Window { remixFileSystemCallback: IndexedDBStorage; remixFileSystem: any; }
}
const profile: LibraryProfile = {
name: 'dGitProvider',
displayName: 'Decentralized git',
@ -162,7 +161,6 @@ class DGitProvider extends Plugin {
return status
}
const status = await git.statusMatrix({
...await this.addIsomorphicGitConfigFS(),
...cmd
@ -265,7 +263,6 @@ class DGitProvider extends Plugin {
return status
}
const status = await git.log({
...await this.addIsomorphicGitConfigFS(),
...cmd,
@ -986,7 +983,7 @@ class DGitProvider extends Plugin {
// OCTOKIT FEATURES
async remotebranches(input: { owner: string, repo: string, token: string, page: number, per_page: number }) {
async remotebranches(input: { owner: string, repo: string, token: string, page: number, per_page: number }) {
console.log(input)
const octokit = new Octokit({
@ -1003,8 +1000,6 @@ class DGitProvider extends Plugin {
return data.data
}
async getGitHubUser(input: { token: string }): Promise<{
user: GitHubUser,
ratelimit: RateLimit
@ -1023,7 +1018,6 @@ class DGitProvider extends Plugin {
const localResetTime = ratelimit.data.rate.reset * 1000
const localResetTimeString = new Date(localResetTime).toLocaleString()
console.log('rate limit', localResetTimeString)
const user = await octokit.request('GET /user')
@ -1118,13 +1112,11 @@ class DGitProvider extends Plugin {
'Accept': 'application/vnd.github.v3+json', // GitHub API v3 media type
};
const url = `${baseURL}?visibility=private,public&page=${page}&per_page=${perPage}&sort=${sort}&direction=${direction}`;
const response = await axios.get(url, { headers });
repositories.push(...response.data);
return repositories
}

@ -1,6 +1,5 @@
import FileProvider from "./fileProvider"
declare global {
interface Window {
remixFileSystem: any
@ -50,7 +49,6 @@ export class ElectronProvider extends FileProvider {
}
}
// isDirectory is already included
// this is a more efficient version of the default implementation
async resolveDirectory(path, cb) {

@ -4,7 +4,7 @@ import { saveAs } from 'file-saver'
import JSZip from 'jszip'
import { Plugin } from '@remixproject/engine'
import * as packageJson from '../../../../../package.json'
import {Registry} from '@remix-project/remix-lib'
import { Registry } from '@remix-project/remix-lib'
import { fileChangedToastMsg, recursivePasteToastMsg, storageFullMessage } from '@remix-ui/helper'
import helper from '../../lib/helper.js'
import { RemixAppManager } from '../../remixAppManager'
@ -252,7 +252,7 @@ class FileManager extends Plugin {
throw new Error(e)
}
}
/**
* Set the content of a specific file, does nnot rewrite file if it exists but creates a new unique name
* @param {string} path path of the file
@ -266,11 +266,11 @@ class FileManager extends Plugin {
if (await this.exists(path)) {
const newPath = await helper.createNonClashingNameAsync(path, this)
const content = await this.setFileContent(newPath, data)
return {newContent: content, newPath}
return { newContent: content, newPath }
} else {
const ret = await this.setFileContent(path, data)
this.emit('fileAdded', path)
return {newContent: ret, newpath: path}
return { newContent: ret, newpath: path }
}
} catch (e) {
throw new Error(e)
@ -524,7 +524,7 @@ class FileManager extends Plugin {
this._deps.electronExplorer.event.on('fileRenamed', (oldName, newName, isFolder) => { this.fileRenamedEvent(oldName, newName, isFolder) })
this._deps.electronExplorer.event.on('fileRemoved', (path) => { this.fileRemovedEvent(path) })
this._deps.electronExplorer.event.on('fileAdded', (path) => { this.fileAddedEvent(path) })
this.getCurrentFile = this.file
this.getFile = this.readFile
this.getFolder = this.readdir
@ -709,7 +709,7 @@ class FileManager extends Plugin {
// TODO: Only keep `this.emit` (issue#2210)
this.emit('noFileSelected')
if(!change.readonly){
if (!change.readonly){
let file = this.normalize(change.path)
const resolved = this.getPathFromUrl(file)
file = resolved.file
@ -722,7 +722,7 @@ class FileManager extends Plugin {
}
async closeDiff(change: commitChange) {
if(!change.readonly){
if (!change.readonly){
const file = this.normalize(change.path)
delete this.openedFiles[file]
if (!Object.keys(this.openedFiles).length) {
@ -734,7 +734,6 @@ class FileManager extends Plugin {
this.emit('closeDiff', change)
}
async openFile(file?: string) {
if (!file) {
this.emit('noFileSelected')
@ -745,13 +744,12 @@ class FileManager extends Plugin {
await this.saveCurrentFile()
// we always open the file in the editor, even if it's the same as the current one if the editor is in diff mode
if (this.currentFile() === file && !this.editor.isDiff) return
const provider = resolved.provider
this._deps.config.set('currentFile', file)
this.openedFiles[file] = file
let content = ''
try {
content = await provider.get(file)
@ -761,7 +759,7 @@ class FileManager extends Plugin {
}
try {
// This make sure dependencies are loaded in the editor context.
// This ensure monaco is aware of deps artifacts, so it can provide basic features like "go to" symbols.
// This ensure monaco is aware of deps artifacts, so it can provide basic features like "go to" symbols.
await this.editor.handleTypeScriptDependenciesOf(file, content, path => this.readFile(path), path => this.exists(path))
} catch (e) {
console.log('unable to handle TypeScript dependencies of', file)
@ -963,7 +961,6 @@ class FileManager extends Plugin {
return exists
}
async moveFileIsAllowed (src: string, dest: string) {
try {
src = this.normalize(src)
@ -1006,7 +1003,7 @@ class FileManager extends Plugin {
if (provider.isSubDirectory(src, dest)) {
this.call('notification', 'toast', recursivePasteToastMsg())
return false
}
}
return true
} catch (e) {
console.log(e)
@ -1069,7 +1066,7 @@ class FileManager extends Plugin {
if (provider.isSubDirectory(src, dest)) {
this.call('notification', 'toast', recursivePasteToastMsg())
return false
}
}
await this.inDepthCopy(src, dest, dirName)
await this.remove(src)
@ -1083,7 +1080,7 @@ class FileManager extends Plugin {
if (provider && provider.copyFolderToJson) {
return await provider.copyFolderToJson(folder)
}
throw new Error('copyFolderToJson not available')
throw new Error('copyFolderToJson not available')
}
}

@ -5,7 +5,6 @@ import EventManager from 'events'
import { Storage } from '@remix-project/remix-lib'
import pathModule from 'path'
export default class FileProvider {
event: any
type: any
@ -189,7 +188,7 @@ export default class FileProvider {
return await this.removeFile(path)
} else {
await window.remixFileSystem.unlink(path)
this.event.emit('fileRemoved', this._normalizePath(path))
this.event.emit('fileRemoved', this._normalizePath(path))
}
} catch (e) {
console.log(e)

@ -67,6 +67,5 @@ export class fileSystems {
return null
}
}

@ -72,7 +72,6 @@ export class fileSystemUtility {
}
}
/**
* copy the folder recursively
* @param {string} path is the folder to be copied over
@ -150,7 +149,6 @@ export class fileSystemUtility {
}
}
/* eslint-disable no-template-curly-in-string */
export const migrationTestData = {
'.workspaces': {

@ -47,7 +47,6 @@ export class IndexedDBStorage extends LightningFS {
}
}
export class indexedDBFileSystem extends fileSystem {
constructor() {
super()

@ -48,7 +48,7 @@ export class localStorageFS extends fileSystem {
localStorage.setItem(test, test);
localStorage.removeItem(test);
resolve(true)
} catch(e) {
} catch (e) {
reject(e)
}
})

@ -3,7 +3,7 @@ import React from 'react' // eslint-disable-line
import { RemixUiTerminal, RemixUITerminalWrapper } from '@remix-ui/terminal' // eslint-disable-line
import { Plugin } from '@remixproject/engine'
import * as packageJson from '../../../../../package.json'
import {Registry} from '@remix-project/remix-lib'
import { Registry } from '@remix-project/remix-lib'
import { PluginViewWrapper } from '@remix-ui/helper'
import vm from 'vm'
import EventManager from '../../lib/events'
@ -11,7 +11,6 @@ import EventManager from '../../lib/events'
import { CompilerImports } from '@remix-project/core-plugin' // eslint-disable-line
import { RemixUiXterminals } from '@remix-ui/xterm'
const KONSOLES = []
function register(api) { KONSOLES.push(api) }
@ -113,7 +112,6 @@ class Terminal extends Plugin {
}
onActivation() {
this.renderComponent()
}
@ -142,7 +140,7 @@ class Terminal extends Plugin {
}
updateComponent(state) {
return(
return (
<RemixUITerminalWrapper
plugin={state.plugin}
onReady={state.onReady}

@ -210,8 +210,6 @@ export class CodeFormat extends Plugin {
this.call('notification', 'toast', `Error parsing prettier config file: ${prettierConfigFile}`)
}
// merge options
if (parsed) {
options = {
@ -251,7 +249,6 @@ export class CodeFormat extends Plugin {
}
}
const result = this.prettier.format(content, {
plugins: [sol as any, this.ts, this.babel, this.espree, this.yml],
parser: parserName,

@ -194,4 +194,3 @@ export function parse(text, _parsers, options) {
return parsed;
}

@ -1,6 +1,6 @@
import React from 'react'
import { ViewPlugin } from '@remixproject/engine-web'
import {PluginViewWrapper} from '@remix-ui/helper'
import { PluginViewWrapper } from '@remix-ui/helper'
import { RemixAppManager } from '../../remixAppManager'
import { RemixUiCompileDetails } from '@remix-ui/solidity-compile-details'

@ -1,6 +1,6 @@
import { Plugin } from '@remixproject/engine'
import { QueryParams } from '@remix-project/remix-lib'
import {Registry} from '@remix-project/remix-lib'
import { Registry } from '@remix-project/remix-lib'
const profile = {
name: 'config',

@ -1,8 +1,8 @@
import React from 'react'
import {Plugin} from '@remixproject/engine'
import {customAction} from '@remixproject/plugin-api'
import {concatSourceFiles, getDependencyGraph, normalizeContractPath} from '@remix-ui/solidity-compiler'
import type {CompilerInput, CompilationSource } from '@remix-project/remix-solidity'
import { Plugin } from '@remixproject/engine'
import { customAction } from '@remixproject/plugin-api'
import { concatSourceFiles, getDependencyGraph, normalizeContractPath } from '@remix-ui/solidity-compiler'
import type { CompilerInput, CompilationSource } from '@remix-project/remix-solidity'
const _paq = (window._paq = window._paq || [])

@ -1,7 +1,7 @@
import { ElectronPlugin } from '@remixproject/engine-electron';
import { Plugin } from '@remixproject/engine';
import { baseURLBin, baseURLWasm } from '@remix-project/remix-solidity'
import axios, {AxiosResponse} from 'axios'
import axios, { AxiosResponse } from 'axios'
import { iSolJsonBinData } from '@remix-project/remix-lib'
const profile = {
@ -55,7 +55,7 @@ export class compilerLoaderPluginDesktop extends ElectronPlugin {
}
async onActivation(): Promise<void> {
this.on('solidity', 'loadingCompiler', async (url) => {
await this.call('compilerloader', 'downloadCompiler', url)
})

@ -78,7 +78,7 @@ export class fsPlugin extends ElectronPlugin {
try {
path = fixPath(path)
const stat = await this.call('fs', 'stat', path)
if(!stat) return undefined
if (!stat) return undefined
stat.isDirectory = () => stat.isDirectoryValue
stat.isFile = () => !stat.isDirectoryValue
return stat
@ -90,7 +90,7 @@ export class fsPlugin extends ElectronPlugin {
try {
path = fixPath(path)
const stat = await this.call('fs', 'lstat', path)
if(!stat) return undefined
if (!stat) return undefined
stat.isDirectory = () => stat.isDirectoryValue
stat.isFile = () => !stat.isDirectoryValue
return stat
@ -116,7 +116,7 @@ export class fsPlugin extends ElectronPlugin {
await this.call('fileManager', 'refresh')
})
this.on('fs', 'error', async (error: string) => {
if(error === 'ENOSPC'){
if (error === 'ENOSPC'){
this.call('notification', 'alert', {
id: 'fsError',
message: 'Cannot watch file changes. There are too many files in your project.'

@ -55,8 +55,8 @@ export class FileDecorator extends Plugin {
if (!from) return
const filteredState = this._fileStates.filter((state) => {
if(state.owner != from) return true
if(path && state.path != path) return true
if (state.owner != from) return true
if (path && state.path != path) return true
})
const newState = [...filteredState].sort(sortByPath)

@ -13,7 +13,6 @@ const profile = {
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIxLjAwNyA4LjIyMTY4QzIxLjAxMDUgNy41Mjc5MiAyMC44MjA3IDYuODQ2ODkgMjAuNDU5MSA2LjI1NDg1QzIwLjA5NzQgNS42NjI4MSAxOS41NzggNS4xODMxNSAxOC45NTkyIDQuODY5NTdDMTguMzQwMyA0LjU1NiAxNy42NDYzIDQuNDIwOTEgMTYuOTU1MSA0LjQ3OTQxQzE2LjI2MzcgNC41Mzc5MyAxNS42MDI1IDQuNzg3NzMgMTUuMDQ1IDUuMjAwODVDMTQuNDg3NyA1LjYxMzk3IDE0LjA1NjMgNi4xNzQwOSAxMy43OTkzIDYuODE4NUMxMy41NDI0IDcuNDYyOSAxMy40Njk3IDguMTY2MTMgMTMuNTg5OCA4Ljg0OTQ0QzEzLjcwOTkgOS41MzI3NCAxNC4wMTc3IDEwLjE2OTIgMTQuNDc4OSAxMC42ODc0QzE0Ljk0MDIgMTEuMjA1NiAxNS41MzY3IDExLjU4NTIgMTYuMjAxNSAxMS43ODM2QzE1Ljk1NiAxMi4yODI0IDE1LjU3NjMgMTIuNzAzIDE1LjEwNDkgMTIuOTk3OUMxNC42MzM2IDEzLjI5MjkgMTQuMDg5NCAxMy40NTA1IDEzLjUzMzQgMTMuNDUzMkgxMC41NDRDOS40MzcyNiAxMy40NTcxIDguMzcxNjMgMTMuODcyNyA3LjU1NDUxIDE0LjYxOTFWNy4zOTgwOUM4LjQ2MTg0IDcuMjEyODggOS4yNjgwOCA2LjY5NzM3IDkuODE2OTIgNS45NTE1MUMxMC4zNjU4IDUuMjA1NjUgMTAuNjE4MSA0LjI4MjU2IDEwLjUyNSAzLjM2MTIxQzEwLjQzMTkgMi40Mzk4NyAxMC4wMDAxIDEuNTg1OSA5LjMxMzE2IDAuOTY0ODczQzguNjI2MjQgMC4zNDM4NDUgNy43MzMxOSAwIDYuODA3MTYgMEM1Ljg4MTEyIDAgNC45ODgwNyAwLjM0Mzg0NSA0LjMwMTE0IDAuOTY0ODczQzMuNjE0MjIgMS41ODU5IDMuMTgyMzYgMi40Mzk4NyAzLjA4OTI4IDMuMzYxMjFDMi45OTYyIDQuMjgyNTYgMy4yNDg1NSA1LjIwNTY1IDMuNzk3MzkgNS45NTE1MUM0LjM0NjIzIDYuNjk3MzcgNS4xNTI0NyA3LjIxMjg4IDYuMDU5OCA3LjM5ODA5VjE2LjUxNTlDNS4xNTQxOCAxNi42ODkxIDQuMzQzMjMgMTcuMTg3NyAzLjc3OTkzIDE3LjkxNzZDMy4yMTY2MyAxOC42NDc2IDIuOTM5OTIgMTkuNTU4NSAzLjAwMTk3IDIwLjQ3ODVDMy4wNjQwMyAyMS4zOTg0IDMuNDYwNTcgMjIuMjYzOSA0LjExNjggMjIuOTExNUM0Ljc3MzAzIDIzLjU1OTIgNS42NDM2IDIzLjk0NDQgNi41NjQyNyAyMy45OTQ0QzcuNDg0OTYgMjQuMDQ0NSA4LjM5MjExIDIzLjc1NTggOS4xMTQ2NCAyMy4xODNDOS44MzcxOCAyMi42MTAyIDEwLjMyNTEgMjEuNzkyOCAxMC40ODY1IDIwLjg4NUMxMC42NDc4IDE5Ljk3NzEgMTAuNDcxNCAxOS4wNDE3IDkuOTkwNDggMTguMjU1QzkuNTA5NTcgMTcuNDY4MyA4Ljc1NzQxIDE2Ljg4NDggNy44NzU4OCAxNi42MTQ1QzguMTIxNzYgMTYuMTE2MiA4LjUwMTY3IDE1LjY5NjMgOC45NzI5NiAxNS40MDE5QzkuNDQ0MjYgMTUuMTA3NCA5Ljk4ODI3IDE0Ljk1MDMgMTAuNTQ0IDE0Ljk0NzlIMTMuNTMzNEMxNC40NjYxIDE0Ljk0MzYgMTUuMzc0MiAxNC42NDg2IDE2LjEzMTMgMTQuMTAzOUMxNi44ODg0IDEzLjU1OTIgMTcuNDU2OCAxMi43OTIgMTcuNzU3NSAxMS45MDkxQzE4LjY1MzQgMTEuNzkxNCAxOS40NzYzIDExLjM1MjggMjAuMDczOCAxMC42NzQ4QzIwLjY3MTMgOS45OTY4IDIxLjAwMjggOS4xMjUzMyAyMS4wMDcgOC4yMjE2OFpNNC41NjUwOCAzLjczNzUyQzQuNTY1MDggMy4yOTQwOCA0LjY5NjU3IDIuODYwNiA0Ljk0MjkzIDIuNDkxOUM1LjE4OTMgMi4xMjMxOSA1LjUzOTQ3IDEuODM1ODEgNS45NDkxNSAxLjY2NjExQzYuMzU4ODQgMS40OTY0MiA2LjgwOTY1IDEuNDUyMDIgNy4yNDQ1NiAxLjUzODU0QzcuNjc5NDggMS42MjUwNCA4LjA3ODk4IDEuODM4NTcgOC4zOTI1NCAyLjE1MjE0QzguNzA2MTEgMi40NjU3IDguOTE5NjQgMi44NjUyIDkuMDA2MTUgMy4zMDAxMkM5LjA5MjY2IDMuNzM1MDQgOS4wNDgyNyA0LjE4NTg1IDguODc4NTcgNC41OTU1M0M4LjcwODg3IDUuMDA1MjEgOC40MjE0OSA1LjM1NTM5IDguMDUyNzggNS42MDE3NUM3LjY4NDA4IDUuODQ4MTEgNy4yNTA2IDUuOTc5NiA2LjgwNzE2IDUuOTc5NkM2LjIxMjUyIDUuOTc5NiA1LjY0MjI0IDUuNzQzMzkgNS4yMjE3NyA1LjMyMjkxQzQuODAxMjkgNC45MDI0NSA0LjU2NTA4IDQuMzMyMTYgNC41NjUwOCAzLjczNzUyWk05LjA0OTIzIDIwLjE3OTRDOS4wNDkyMyAyMC42MjI5IDguOTE3NzQgMjEuMDU2MyA4LjY3MTM4IDIxLjQyNUM4LjQyNTAxIDIxLjc5MzcgOC4wNzQ4NSAyMi4wODExIDcuNjY1MTYgMjIuMjUwOEM3LjI1NTQ3IDIyLjQyMDUgNi44MDQ2NiAyMi40NjQ5IDYuMzY5NzUgMjIuMzc4NEM1LjkzNDgzIDIyLjI5MiA1LjUzNTMzIDIyLjA3ODQgNS4yMjE3NyAyMS43NjQ4QzQuOTA4MjEgMjEuNDUxMiA0LjY5NDY3IDIxLjA1MTcgNC42MDgxNiAyMC42MTY5QzQuNTIxNjUgMjAuMTgxOSA0LjU2NjA1IDE5LjczMTEgNC43MzU3NSAxOS4zMjE0QzQuOTA1NDUgMTguOTExNyA1LjE5MjgyIDE4LjU2MTUgNS41NjE1MyAxOC4zMTUyQzUuOTMwMjMgMTguMDY4OSA2LjM2MzcxIDE3LjkzNzMgNi44MDcxNiAxNy45MzczQzcuNDAxNzkgMTcuOTM3MyA3Ljk3MjA3IDE4LjE3MzYgOC4zOTI1NCAxOC41OTRDOC44MTMwMiAxOS4wMTQ1IDkuMDQ5MjMgMTkuNTg0OCA5LjA0OTIzIDIwLjE3OTRaTTE3LjI3MDIgMTAuNDYzOEMxNi44MjY3IDEwLjQ2MzggMTYuMzkzMyAxMC4zMzIyIDE2LjAyNDYgMTAuMDg1OUMxNS42NTU5IDkuODM5NTQgMTUuMzY4NSA5LjQ4OTM3IDE1LjE5ODggOS4wNzk2OUMxNS4wMjkxIDguNjcgMTQuOTg0NyA4LjIxOTIgMTUuMDcxMiA3Ljc4NDI3QzE1LjE1NzYgNy4zNDkzNSAxNS4zNzEyIDYuOTQ5ODUgMTUuNjg0OCA2LjYzNjI5QzE1Ljk5ODQgNi4zMjI3MyAxNi4zOTc5IDYuMTA5MTkgMTYuODMyNyA2LjAyMjY4QzE3LjI2NzcgNS45MzYxNyAxNy43MTg1IDUuOTgwNTggMTguMTI4MSA2LjE1MDI3QzE4LjUzNzkgNi4zMTk5NyAxOC44ODgxIDYuNjA3MzQgMTkuMTM0NCA2Ljk3NjA1QzE5LjM4MDcgNy4zNDQ3NiAxOS41MTIzIDcuNzc4MjMgMTkuNTEyMyA4LjIyMTY4QzE5LjUxMjMgOC44MTYzMiAxOS4yNzYgOS4zODY2IDE4Ljg1NTYgOS44MDcwNkMxOC40MzUxIDEwLjIyNzUgMTcuODY0OCAxMC40NjM4IDE3LjI3MDIgMTAuNDYzOFoiIGZpbGw9IiM0MjQyNDIiLz4KPC9zdmc+Cg=="
}
export class GitPlugin extends ViewPlugin {
constructor() {

@ -1,8 +1,8 @@
import {Plugin} from '@remixproject/engine'
import {LibraryProfile, MethodApi, StatusEvents} from '@remixproject/plugin-utils'
import {AppModal} from '@remix-ui/app'
import {AlertModal} from '@remix-ui/app'
import {dispatchModalInterface} from '@remix-ui/app'
import { Plugin } from '@remixproject/engine'
import { LibraryProfile, MethodApi, StatusEvents } from '@remixproject/plugin-utils'
import { AppModal } from '@remix-ui/app'
import { AlertModal } from '@remix-ui/app'
import { dispatchModalInterface } from '@remix-ui/app'
interface INotificationApi {
events: StatusEvents

@ -19,7 +19,7 @@ export class OpenAIGpt extends Plugin {
async message(prompt): Promise<CreateChatCompletionResponse> {
this.call('layout', 'maximizeTerminal')
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: 'Waiting for GPT answer...'})
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: 'Waiting for GPT answer...' })
let result
try {
result = await (
@ -36,10 +36,10 @@ export class OpenAIGpt extends Plugin {
this.call('terminal', 'log', { type: 'typewritererror', value: `Unable to get a response ${e.message}` })
return
}
if (result && result.choices && result.choices.length) {
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.choices[0].message.content })
} else if (result.error) {
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.choices[0].message.content })
} else if (result.error) {
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.error })
} else {
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: 'No response...' })

@ -524,8 +524,8 @@ export class CodeParser extends Plugin {
nodeDefinition.parser = parserNodeDefinition
}
/* if the AST node name & type is the same as the parser node name & type,
/ then we can assume that the AST node is the definition,
/* if the AST node name & type is the same as the parser node name & type,
/ then we can assume that the AST node is the definition,
/ because the parser will always return most nodes it can find even with an error in the code
*/
@ -544,7 +544,6 @@ export class CodeParser extends Plugin {
return nodeDefinition.ast
}
return nodeDefinition.parser
}

@ -4,7 +4,7 @@ import { AstNode } from "@remix-project/remix-solidity"
import { CodeParser } from "../code-parser"
import { antlr } from '../types'
import { pathToFileURL } from 'url'
import {Registry} from '@remix-project/remix-lib'
import { Registry } from '@remix-project/remix-lib'
const SolidityParser = (window as any).SolidityParser = (window as any).SolidityParser || []
@ -117,8 +117,8 @@ export default class CodeParserAntlrService {
/**
* Tries to parse the current file or the given text and returns the AST
* If the parsing fails it returns the last successful AST for this file
* @param text
* @returns
* @param text
* @returns
*/
async setCurrentFileAST(text: string | null = null) {
try {
@ -149,7 +149,7 @@ export default class CodeParserAntlrService {
/**
* Lists the AST nodes from the current file parser
* These nodes need to be changed to match the node types returned by the compiler
* @returns
* @returns
*/
async listAstNodes() {
this.plugin.currentFile = await this.plugin.call('fileManager', 'file')
@ -201,11 +201,10 @@ export default class CodeParserAntlrService {
return nodes
}
/**
*
* @param ast
* @returns
*
* @param ast
* @returns
*/
async getLastNodeInLine(ast: string) {
let lastNode: any
@ -247,7 +246,7 @@ export default class CodeParserAntlrService {
try {
const startTime = Date.now()
const blocks = (SolidityParser as any).parseBlock(fileContent, { loc: true, range: true, tolerant: true })
if(this.cache[this.plugin.currentFile] && this.cache[this.plugin.currentFile].blockDurations){
if (this.cache[this.plugin.currentFile] && this.cache[this.plugin.currentFile].blockDurations){
this.cache[this.plugin.currentFile].blockDurations = [...this.cache[this.plugin.currentFile].blockDurations.slice(-this.parserThresholdSampleAmount), Date.now() - startTime]
this.setFileParsingState(this.plugin.currentFile)
}

@ -75,7 +75,6 @@ export default class CodeParserCompiler {
length: error.sourceLocation.end - error.sourceLocation.start
}, lineBreaks)
const filePath = error.sourceLocation.file
const fileTarget = await this.plugin.call('fileManager', 'getUrlFromPath', filePath)
@ -103,24 +102,23 @@ export default class CodeParserCompiler {
if (data.sources && Object.keys(data.sources).length === 0) return
this.plugin.compilerAbstract = new CompilerAbstract('soljson', data, source, input)
this.errorState = false
this.plugin.nodeIndex = {
declarations: {},
flatReferences: {},
nodesPerFile: {},
}
this.plugin._buildIndex(data, source)
// cast from the remix-plugin interface to the solidity one. Should be fixed when remix-plugin move to the remix-project repository
const extractedFiledNodes = this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult)
if(extractedFiledNodes) {
if (extractedFiledNodes) {
this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = extractedFiledNodes
}
await this.plugin.gasService.showGasEstimates()
this.plugin.emit('astFinished')
}
this.compiler = new Compiler((url, cb) => this.plugin.call('contentImport', 'resolveAndSave', url, undefined).then((result) => cb(null, result)).catch((error) => cb(error.message)))
this.compiler.event.register('compilationFinished', this.onAstFinished)
}
@ -128,8 +126,8 @@ export default class CodeParserCompiler {
// COMPILER
/**
*
* @returns
*
* @returns
*/
async compile() {
try {
@ -149,7 +147,7 @@ export default class CodeParserCompiler {
} else {
this.compiler.set('remappings', [])
}
const configFileContent = {
"language": "Solidity",
"settings": {
@ -227,7 +225,7 @@ export default class CodeParserCompiler {
const fileTarget = await this.plugin.call('fileManager', 'getPathFromUrl', fileName)
await this.plugin.call('fileDecorator', 'clearFileDecorators', fileTarget.file)
}
if(decorators.length > 0)
if (decorators.length > 0)
await this.plugin.call('fileDecorator', 'setFileDecorators', decorators)
await this.plugin.call('editor', 'clearErrorMarkers', filesWithOutErrors)

@ -33,17 +33,16 @@ export default class CodeParserGasService {
}
async showGasEstimates() {
const showGasConfig = await this.plugin.call('config', 'getAppParameter', 'show-gas')
if(!showGasConfig) {
if (!showGasConfig) {
await this.plugin.call('editor', 'discardLineTexts')
return
}
this.plugin.currentFile = await this.plugin.call('fileManager', 'file')
// cast from the remix-plugin interface to the solidity one. Should be fixed when remix-plugin move to the remix-project repository
const extractedFiledNodes = await this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult)
if(extractedFiledNodes) {
const extractedFiledNodes = await this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult)
if (extractedFiledNodes) {
this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = extractedFiledNodes
}
@ -72,10 +71,8 @@ export default class CodeParserGasService {
this.plugin.call('editor', 'addLineText', linetext, estimate.range.fileName)
}
}
}
}

@ -1,5 +1,5 @@
'use strict'
import {Registry} from '@remix-project/remix-lib'
import { Registry } from '@remix-project/remix-lib'
import { CodeParser } from "../code-parser";
export type CodeParserImportsData = {
@ -20,7 +20,7 @@ export default class CodeParserImports {
}
async getImports(){
if(!this.data || !this.data.files || !this.data.timestamp || this.data.timestamp != this.directoryUpdateCacheTimeStamp){
if (!this.data || !this.data.files || !this.data.timestamp || this.data.timestamp != this.directoryUpdateCacheTimeStamp){
await this.setFileTree()
}
return this.data
@ -33,13 +33,13 @@ export default class CodeParserImports {
.filter(x => x !== '')
.map(x => x.replace('./node_modules/', ''))
.filter(x => {
if(x.includes('@openzeppelin')) {
if (x.includes('@openzeppelin')) {
return !x.includes('mock')
}else{
} else {
return true
}
}
})
// get unique first words of the values in the array
this.data.packages = [...new Set(this.data.modules.map(x => x.split('/')[0]))]
}
@ -79,7 +79,7 @@ export default class CodeParserImports {
files = await this.plugin.call('fileManager', 'readdir', dir)
}
} catch (e) {}
const fileArray = this.normalize(files)
for (const fi of fileArray) {
if (fi) {

@ -24,7 +24,6 @@ interface Token {
}
}
interface Location {
start: {
line: number
@ -594,7 +593,6 @@ export type Statement =
type ASTMap<U> = { [K in ASTNodeTypeString]: U extends { type: K } ? U : never }
type ASTTypeMap = ASTMap<ASTNode>
export const astNodeTypes = [
'SourceUnit',
'PragmaDirective',
@ -673,9 +671,6 @@ export const astNodeTypes = [
'InvalidNode'
] as const
export const binaryOpValues = [
'+',
'-',
@ -725,8 +720,3 @@ export const unaryOpValues = [
] as const
export type UnaryOp = typeof unaryOpValues[number]

@ -1,9 +1,9 @@
import React from 'react' // eslint-disable-line
import {FormattedMessage} from 'react-intl'
import {Plugin} from '@remixproject/engine'
import {AppModal} from '@remix-ui/app'
import {PermissionHandlerDialog, PermissionHandlerValue} from '@remix-ui/permission-handler'
import {Profile} from '@remixproject/plugin-utils'
import { FormattedMessage } from 'react-intl'
import { Plugin } from '@remixproject/engine'
import { AppModal } from '@remix-ui/app'
import { PermissionHandlerDialog, PermissionHandlerValue } from '@remix-ui/permission-handler'
import { Profile } from '@remixproject/plugin-utils'
const profile = {
name: 'permissionhandler',
@ -89,7 +89,7 @@ export class PermissionHandlerPlugin extends Plugin {
if (!this.permissions[to.name][method][from.name]) return this.openPermission(from, to, method, message, sensitiveCall)
}
const {allow, hash} = sensitiveCall ? this.sessionPermissions[to.name][method][from.name] : this.permissions[to.name][method][from.name]
const { allow, hash } = sensitiveCall ? this.sessionPermissions[to.name][method][from.name] : this.permissions[to.name][method][from.name]
if (!allow) {
const warning = this.notAllowWarning(from, to, method)
const warnEl =
@ -97,9 +97,9 @@ export class PermissionHandlerPlugin extends Plugin {
<span>{ warning }</span>
<div className='d-flex flex-row'>
<span onClick={()=>{}}>To change the permission go to </span>
<span className='px-2' style={{fontWeight: 'bolder'}}>Plugin Manager</span>
<img alt="" id="permissionModalImagesFrom" src="/assets/img/pluginManager.webp" style={{height: '1rem', width: '1rem'}} />
<span className='pl-1' style={{fontWeight: 'bolder'}}> / Permissions</span>
<span className='px-2' style={{ fontWeight: 'bolder' }}>Plugin Manager</span>
<img alt="" id="permissionModalImagesFrom" src="/assets/img/pluginManager.webp" style={{ height: '1rem', width: '1rem' }} />
<span className='pl-1' style={{ fontWeight: 'bolder' }}> / Permissions</span>
</div>
</div>
this.call('notification', 'toast', warnEl)
@ -130,7 +130,7 @@ export class PermissionHandlerPlugin extends Plugin {
}
const modal: AppModal = {
id: 'PermissionHandler',
title: <FormattedMessage id="permissionHandler.permissionNeededFor" values={{to: to.displayName || to.name}} />,
title: <FormattedMessage id="permissionHandler.permissionNeededFor" values={{ to: to.displayName || to.name }} />,
message: <PermissionHandlerDialog plugin={this} theme={await this.getTheme()} value={value}></PermissionHandlerDialog>,
okLabel: <FormattedMessage id="permissionHandler.accept" />,
cancelLabel: <FormattedMessage id="permissionHandler.decline" />

@ -30,7 +30,7 @@ export class RemixGuidePlugin extends ViewPlugin {
super(profile)
this.appManager = appManager
this.element = document.createElement('div')
this.element.setAttribute('id', 'remixGuideEl')
this.element.setAttribute('id', 'remixGuideEl')
}
async onActivation() {
@ -49,13 +49,13 @@ export class RemixGuidePlugin extends ViewPlugin {
this.profile.displayName = `${contractName[0]}`
this.payload = sentPayload
const active = await this.call('theme', 'currentTheme')
this.renderComponent()
}
private handleThemeChange() {
this.on('theme', 'themeChanged', (theme: any) => {
this.renderComponent()
})
}
@ -114,7 +114,7 @@ export class RemixGuidePlugin extends ViewPlugin {
tagList={['L2', 'AI']}
logo='/assets/img/soliditySurvey2023.webp'
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
@ -122,55 +122,55 @@ export class RemixGuidePlugin extends ViewPlugin {
pinned={true}
tagList={['L2', 'plugins']}
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell> <RemixUIGridCell
plugin={this}
title="something"
pinned={false}
tagList={['solidity', 'plugins']}
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="1"
tagList={['solidity']}
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell> <RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="Something very very long"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell> <RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
</RemixUIGridSection>
<RemixUIGridSection
@ -183,58 +183,58 @@ export class RemixGuidePlugin extends ViewPlugin {
title="first item"
logo='/assets/img/soliditySurvey2023.webp'
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="next"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell> <RemixUIGridCell
plugin={this}
title="something"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell> <RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell> <RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
<RemixUIGridCell
plugin={this}
title="1"
>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{height: '70px', width: '70px'}} alt=""></img>
<img src={'/assets/img/soliditySurvey2023.webp'} style={{ height: '70px', width: '70px' }} alt=""></img>
</RemixUIGridCell>
</RemixUIGridSection>
</RemixUIGridView>

@ -1,13 +1,13 @@
/* eslint-disable no-unused-vars */
import React, {useRef, useState, useEffect} from 'react' // eslint-disable-line
import {FormattedMessage} from 'react-intl'
import {WebsocketPlugin} from '@remixproject/engine-web'
import { FormattedMessage } from 'react-intl'
import { WebsocketPlugin } from '@remixproject/engine-web'
import * as packageJson from '../../../../../package.json'
// eslint-disable-next-line @nrwl/nx/enforce-module-boundaries
import {version as remixdVersion} from '../../../../../libs/remixd/package.json'
import {PluginManager} from '@remixproject/engine'
import {AppModal, AlertModal, appPlatformTypes} from '@remix-ui/app'
import {Registry} from '@remix-project/remix-lib'
import { version as remixdVersion } from '../../../../../libs/remixd/package.json'
import { PluginManager } from '@remixproject/engine'
import { AppModal, AlertModal, appPlatformTypes } from '@remix-ui/app'
import { Registry } from '@remix-project/remix-lib'
const LOCALHOST = ' - connect to localhost - '
@ -85,7 +85,7 @@ export class RemixdHandle extends WebsocketPlugin {
console.log(error)
const alert: AlertModal = {
id: 'connectionAlert',
message: window._intl.formatMessage({id: 'remixd.connectionAlert1'}),
message: window._intl.formatMessage({ id: 'remixd.connectionAlert1' }),
}
this.call('notification', 'alert', alert)
this.canceled()
@ -96,14 +96,14 @@ export class RemixdHandle extends WebsocketPlugin {
clearInterval(intervalId)
const alert: AlertModal = {
id: 'connectionAlert',
message: window._intl.formatMessage({id: 'remixd.connectionAlert2'}),
message: window._intl.formatMessage({ id: 'remixd.connectionAlert2' }),
}
this.call('notification', 'alert', alert)
this.canceled()
}
}, 3000)
this.localhostProvider.init(() => {
this.call('filePanel', 'setWorkspace', {name: LOCALHOST, isLocalhost: true}, true)
this.call('filePanel', 'setWorkspace', { name: LOCALHOST, isLocalhost: true }, true)
})
for (const plugin of this.dependentPlugins) {
await this.appManager.activatePlugin(plugin)
@ -116,10 +116,10 @@ export class RemixdHandle extends WebsocketPlugin {
// warn the user only if he/she is in the browser context
const mod: AppModal = {
id: 'remixdConnect',
title: window._intl.formatMessage({id: 'remixd.remixdConnect'}),
title: window._intl.formatMessage({ id: 'remixd.remixdConnect' }),
message: remixdDialog(),
okLabel: window._intl.formatMessage({id: 'remixd.connect'}),
cancelLabel: window._intl.formatMessage({id: 'remixd.cancel'}),
okLabel: window._intl.formatMessage({ id: 'remixd.connect' }),
cancelLabel: window._intl.formatMessage({ id: 'remixd.cancel' }),
}
const result = await this.call('notification', 'modal', mod)
if (result) {

@ -1,11 +1,11 @@
import { Plugin } from '@remixproject/engine'
export type SuggestOptions = {
max_new_tokens: number,
max_new_tokens: number,
temperature: number,
do_sample:boolean
top_k: number,
top_p:number,
top_p:number,
stream_result:boolean
}
@ -41,18 +41,18 @@ export class SolCoder extends Plugin {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({"data":[prompt, "code_completion", "", false,1000,0.9,0.92,50]}),
body: JSON.stringify({ "data":[prompt, "code_completion", "", false,1000,0.9,0.92,50]}),
})
).json()
if ("error" in result){
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.error })
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.error })
return result
}
return result.data
} catch (e) {
this.call('terminal', 'log', { type: 'typewritererror', value: `Unable to get a response ${e.message}` })
return
}finally {
} finally {
this.emit("aiInferingDone")
}
}
@ -69,18 +69,18 @@ export class SolCoder extends Plugin {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({"data":[prompt, "solidity_answer", false,1000,0.9,0.8,50]}),
body: JSON.stringify({ "data":[prompt, "solidity_answer", false,1000,0.9,0.8,50]}),
})
).json()
} catch (e) {
this.call('terminal', 'log', { type: 'typewritererror', value: `Unable to get a response ${e.message}` })
return
}finally {
} finally {
this.emit("aiInferingDone")
}
if (result) {
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.data[0]})
} else if (result.error) {
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.data[0] })
} else if (result.error) {
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: "Error on request" })
}
@ -98,17 +98,17 @@ export class SolCoder extends Plugin {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({"data":[prompt, "code_explaining", false,2000,0.9,0.8,50, context]}),
body: JSON.stringify({ "data":[prompt, "code_explaining", false,2000,0.9,0.8,50, context]}),
})
).json()
if (result) {
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.data[0]})
this.call('terminal', 'log', { type: 'aitypewriterwarning', value: result.data[0] })
}
return result.data[0]
} catch (e) {
this.call('terminal', 'log', { type: 'typewritererror', value: `Unable to get a response ${e.message}` })
return
}finally {
} finally {
this.emit("aiInferingDone")
}
}
@ -124,14 +124,14 @@ export class SolCoder extends Plugin {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({"data": !options? [
prompt, // string in 'context_code' Textbox component
body: JSON.stringify({ "data": !options? [
prompt, // string in 'context_code' Textbox component
"code_completion",
"", // string in 'comment' Textbox component
false, // boolean in 'stream_result' Checkbox component
30, // number (numeric value between 0 and 2000) in 'max_new_tokens' Slider component
0.9, // number (numeric value between 0.01 and 1) in 'temperature' Slider component
0.90, // number (numeric value between 0 and 1) in 'top_p' Slider component
"", // string in 'comment' Textbox component
false, // boolean in 'stream_result' Checkbox component
30, // number (numeric value between 0 and 2000) in 'max_new_tokens' Slider component
0.9, // number (numeric value between 0.01 and 1) in 'temperature' Slider component
0.90, // number (numeric value between 0 and 1) in 'top_p' Slider component
50, // number (numeric value between 1 and 200) in 'top_k' Slider component
] : [
prompt,
@ -170,15 +170,15 @@ export class SolCoder extends Plugin {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({"data":[
body: JSON.stringify({ "data":[
msg_pfx, // Text before current cursor line
"code_insertion",
msg_sfx, // Text after current cursor line
1024,
1024,
0.5,
0.92,
50
] }),
]}),
})
).json()
@ -195,6 +195,4 @@ export class SolCoder extends Plugin {
}
}
}

@ -1,8 +1,8 @@
import React from 'react' // eslint-disable-line
import {format} from 'util'
import {Plugin} from '@remixproject/engine'
import {compile} from '@remix-project/remix-solidity'
import {Transaction} from 'web3-types'
import { format } from 'util'
import { Plugin } from '@remixproject/engine'
import { compile } from '@remix-project/remix-solidity'
import { Transaction } from 'web3-types'
const _paq = (window._paq = window._paq || []) //eslint-disable-line
const profile = {
@ -37,7 +37,7 @@ export class SolidityScript extends Plugin {
${functionName}();
}
}`
const targets = {'script.sol': {content}}
const targets = { 'script.sol': { content } }
// compile
const compilation = await compile(targets, params, async (url, cb) => {
@ -81,20 +81,20 @@ export class SolidityScript extends Plugin {
this.call('terminal', 'logHtml', e.message)
return
}
tx = {
from: accounts[0],
to: receipt.contractAddress,
data: '0x69d4394b' // function remixRun() public
}
let receiptCall
let receiptCall
try {
receiptCall = await web3.eth.sendTransaction(tx, null, { checkRevertBeforeSending: false, ignoreGasPricing: true })
} catch (e) {
this.call('terminal', 'logHtml', e.message)
return
}
}
const hhlogs = await web3.remix.getHHLogsForTx(receiptCall.transactionHash)

@ -1,17 +1,17 @@
/* eslint-disable @nrwl/nx/enforce-module-boundaries */
import {ViewPlugin} from '@remixproject/engine-web'
import { ViewPlugin } from '@remixproject/engine-web'
import React from 'react'
// eslint-disable-next-line @nrwl/nx/enforce-module-boundaries
import {RemixUiSolidityUmlGen} from '@remix-ui/solidity-uml-gen'
import {ISolidityUmlGen, ThemeQualityType, ThemeSummary} from 'libs/remix-ui/solidity-uml-gen/src/types'
import {RemixAppManager} from 'libs/remix-ui/plugin-manager/src/types'
import {normalizeContractPath} from 'libs/remix-ui/solidity-compiler/src/lib/logic/flattenerUtilities'
import {convertAST2UmlClasses} from 'sol2uml/lib/converterAST2Classes'
import { RemixUiSolidityUmlGen } from '@remix-ui/solidity-uml-gen'
import { ISolidityUmlGen, ThemeQualityType, ThemeSummary } from 'libs/remix-ui/solidity-uml-gen/src/types'
import { RemixAppManager } from 'libs/remix-ui/plugin-manager/src/types'
import { normalizeContractPath } from 'libs/remix-ui/solidity-compiler/src/lib/logic/flattenerUtilities'
import { convertAST2UmlClasses } from 'sol2uml/lib/converterAST2Classes'
import vizRenderStringSync from '@aduh95/viz.js/sync'
import {PluginViewWrapper} from '@remix-ui/helper'
import {customAction} from '@remixproject/plugin-api'
import {ClassOptions} from 'sol2uml/lib/converterClass2Dot'
import type {CompilerInput} from '@remix-project/remix-solidity'
import { PluginViewWrapper } from '@remix-ui/helper'
import { customAction } from '@remixproject/plugin-api'
import { ClassOptions } from 'sol2uml/lib/converterClass2Dot'
import type { CompilerInput } from '@remix-project/remix-solidity'
const parser = (window as any).SolidityParser
const _paq = (window._paq = window._paq || [])
@ -207,10 +207,10 @@ interface Sol2umlClassOptions extends ClassOptions {
textColor?: string
}
import {dirname} from 'path'
import {convertClass2Dot} from 'sol2uml/lib/converterClass2Dot'
import {Association, ClassStereotype, ReferenceType, UmlClass} from 'sol2uml/lib/umlClass'
import {findAssociatedClass} from 'sol2uml/lib/associations'
import { dirname } from 'path'
import { convertClass2Dot } from 'sol2uml/lib/converterClass2Dot'
import { Association, ClassStereotype, ReferenceType, UmlClass } from 'sol2uml/lib/umlClass'
import { findAssociatedClass } from 'sol2uml/lib/associations'
// const debug = require('debug')('sol2uml')

@ -1,6 +1,6 @@
import React from 'react'
import { ViewPlugin } from '@remixproject/engine-web'
import {PluginViewWrapper} from '@remix-ui/helper'
import { PluginViewWrapper } from '@remix-ui/helper'
import { RemixAppManager } from '../../remixAppManager'
import { RemixUiVyperCompileDetails } from '@remix-ui/vyper-compile-details'
import { ThemeKeys, ThemeObject } from '@microlink/react-json-view'
@ -49,13 +49,13 @@ export class VyperCompilationDetailsPlugin extends ViewPlugin {
}
async showDetails(sentPayload: any) {
const contractName = Object.entries(sentPayload).find(([key, value]) => key )
const contractName = Object.entries(sentPayload).find(([key, value]) => key )
await this.call('tabs', 'focus', 'vyperCompilationDetails')
this.profile.displayName = `${contractName[0]}`
this.payload = sentPayload
const active = await this.call('theme', 'currentTheme')
if (active.quality === 'dark') {
switch(active.name) {
switch (active.name) {
case 'HackerOwl':
this.theme = 'harmonic'
this.themeStyle = { backgroundColor: active.backgroundColor }
@ -78,7 +78,7 @@ export class VyperCompilationDetailsPlugin extends ViewPlugin {
break
}
} else {
switch(active.name) {
switch (active.name) {
case 'Candy':
this.theme = 'apathy:inverted'
this.themeStyle = { backgroundColor: active.backgroundColor }
@ -106,7 +106,7 @@ export class VyperCompilationDetailsPlugin extends ViewPlugin {
private handleThemeChange() {
this.on('theme', 'themeChanged', (theme: any) => {
if (theme.quality === 'dark') {
switch(theme.name) {
switch (theme.name) {
case 'HackerOwl':
this.theme = 'solarized'
this.themeStyle = { backgroundColor: theme.backgroundColor }

@ -1,7 +1,7 @@
import {Plugin} from '@remixproject/engine'
import {AppModal, AlertModal, ModalTypes} from '@remix-ui/app'
import {Blockchain} from '../../blockchain/blockchain'
import {ethers} from 'ethers'
import { Plugin } from '@remixproject/engine'
import { AppModal, AlertModal, ModalTypes } from '@remix-ui/app'
import { Blockchain } from '../../blockchain/blockchain'
import { ethers } from 'ethers'
export type JsonDataRequest = {
id: number
@ -66,7 +66,7 @@ export abstract class AbstractProvider extends Plugin implements IProvider {
okLabel: 'OK',
cancelLabel: 'Cancel',
validationFn: (value) => {
if (!value) return {valid: false, message: 'value is empty'}
if (!value) return { valid: false, message: 'value is empty' }
if (value.startsWith('https://') || value.startsWith('http://')) {
return {
valid: true,
@ -102,7 +102,7 @@ export abstract class AbstractProvider extends Plugin implements IProvider {
sendAsync(data: JsonDataRequest): Promise<JsonDataResult> {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
if (!this.provider) return reject({jsonrpc: '2.0', id: data.id, error: { message: 'provider node set', code: -32603 } } as JsonDataResult)
if (!this.provider) return reject({ jsonrpc: '2.0', id: data.id, error: { message: 'provider node set', code: -32603 } } as JsonDataResult)
this.sendAsyncInternal(data, resolve, reject)
})
}
@ -119,7 +119,7 @@ export abstract class AbstractProvider extends Plugin implements IProvider {
}
this.call('notification', 'alert', modalContent)
}
await this.call('udapp', 'setEnvironmentMode', {context: 'vm-cancun'})
await this.call('udapp', 'setEnvironmentMode', { context: 'vm-cancun' })
return
}
@ -127,17 +127,17 @@ export abstract class AbstractProvider extends Plugin implements IProvider {
if (this.provider) {
try {
const result = await this.provider.send(data.method, data.params)
resolve({jsonrpc: '2.0', result, id: data.id})
resolve({ jsonrpc: '2.0', result, id: data.id })
} catch (error) {
if (error && error.message && error.message.includes('net_version') && error.message.includes('SERVER_ERROR')) {
this.switchAway(true)
}
error.code = -32603
reject({jsonrpc: '2.0', error, id: data.id})
reject({ jsonrpc: '2.0', error, id: data.id })
}
} else {
const result = data.method === 'net_listening' ? 'canceled' : []
resolve({jsonrpc: '2.0', result: result, id: data.id})
resolve({ jsonrpc: '2.0', result: result, id: data.id })
}
}
}

@ -1,9 +1,9 @@
import React, {useRef} from 'react' // eslint-disable-line
import {FormattedMessage} from 'react-intl'
import { FormattedMessage } from 'react-intl'
import * as packageJson from '../../../../../package.json'
import {AppModal, ModalTypes} from '@remix-ui/app'
import {BasicVMProvider} from './vm-provider'
import {Hardfork} from '@ethereumjs/common'
import { AppModal, ModalTypes } from '@remix-ui/app'
import { BasicVMProvider } from './vm-provider'
import { Hardfork } from '@ethereumjs/common'
export class CustomForkVMProvider extends BasicVMProvider {
nodeUrl: string

@ -1,7 +1,7 @@
import * as packageJson from '../../../../../package.json'
import React from 'react' // eslint-disable-line
import {FormattedMessage} from 'react-intl'
import {AbstractProvider} from './abstract-provider'
import { FormattedMessage } from 'react-intl'
import { AbstractProvider } from './abstract-provider'
const profile = {
name: 'basic-http-provider',
@ -49,7 +49,7 @@ export class ExternalHttpProvider extends AbstractProvider {
</div>
<br />
<br />
<FormattedMessage id="udapp.externalHttpProviderText3" values={{b: (chunks) => <b><>{chunks}</></b>}} />
<FormattedMessage id="udapp.externalHttpProviderText3" values={{ b: (chunks) => <b><>{chunks}</></b> }} />
<br />
<br />
<FormattedMessage

@ -1,7 +1,7 @@
import * as packageJson from '../../../../../package.json'
import React from 'react' // eslint-disable-line
import {FormattedMessage} from 'react-intl'
import {AbstractProvider} from './abstract-provider'
import { FormattedMessage } from 'react-intl'
import { AbstractProvider } from './abstract-provider'
const profile = {
name: 'foundry-provider',

@ -1,7 +1,7 @@
import * as packageJson from '../../../../../package.json'
import React from 'react' // eslint-disable-line
import {FormattedMessage} from 'react-intl'
import {AbstractProvider} from './abstract-provider'
import { FormattedMessage } from 'react-intl'
import { AbstractProvider } from './abstract-provider'
const profile = {
name: 'ganache-provider',

@ -1,5 +1,5 @@
import * as packageJson from '../../../../../package.json'
import {BasicVMProvider} from './vm-provider'
import { BasicVMProvider } from './vm-provider'
export class GoerliForkVMProvider extends BasicVMProvider {
nodeUrl: string

@ -1,7 +1,7 @@
import * as packageJson from '../../../../../package.json'
import React from 'react' // eslint-disable-line
import {FormattedMessage} from 'react-intl'
import {AbstractProvider} from './abstract-provider'
import { FormattedMessage } from 'react-intl'
import { AbstractProvider } from './abstract-provider'
const profile = {
name: 'hardhat-provider',

@ -1,5 +1,5 @@
import * as packageJson from '../../../../../package.json'
import {InjectedCustomProvider} from './injected-custom-provider'
import { InjectedCustomProvider } from './injected-custom-provider'
const profile = {
name: 'injected-arbitrum-one-provider',

@ -1,5 +1,5 @@
import Web3 from 'web3'
import {InjectedProviderDefault} from './injected-provider-default'
import { InjectedProviderDefault } from './injected-provider-default'
export class InjectedCustomProvider extends InjectedProviderDefault {
chainName: string
@ -32,7 +32,7 @@ export const setCustomNetwork = async (chainName: string, chainId: string, rpcUr
try {
await (window as any).ethereum.request({
method: 'wallet_switchEthereumChain',
params: [{chainId: chainId}]
params: [{ chainId: chainId }]
})
} catch (switchError) {
// This error code indicates that the chain has not been added to MetaMask.
@ -48,14 +48,14 @@ export const setCustomNetwork = async (chainName: string, chainId: string, rpcUr
if (blockExplorerUrls) paramsObj.blockExplorerUrls = blockExplorerUrls
await (window as any).ethereum.request({
method: 'wallet_addEthereumChain',
params: [ paramsObj ]
params: [paramsObj]
})
await (window as any).ethereum.request({
method: 'wallet_switchEthereumChain',
params: [{chainId: chainId}]
params: [{ chainId: chainId }]
})
}
}
} catch (addError) {
// handle "add" error
}

@ -1,5 +1,5 @@
import * as packageJson from '../../../../../package.json'
import {InjectedCustomProvider} from './injected-custom-provider'
import { InjectedCustomProvider } from './injected-custom-provider'
import Web3 from 'web3'
const profile = {
@ -13,7 +13,7 @@ const profile = {
export class InjectedEphemeryTestnetProvider extends InjectedCustomProvider {
constructor() {
super(profile,
super(profile,
'Ephemery Testnet',
'',
['https://otter.bordel.wtf/erigon', 'https://eth.ephemeral.zeus.fyi'],
@ -25,7 +25,7 @@ export class InjectedEphemeryTestnetProvider extends InjectedCustomProvider {
[
'https://otter.bordel.wtf/',
'https://explorer.ephemery.dev/'
]
]
)
}

@ -1,5 +1,5 @@
import * as packageJson from '../../../../../package.json'
import {InjectedCustomProvider} from './injected-custom-provider'
import { InjectedCustomProvider } from './injected-custom-provider'
const profile = {
name: 'injected-optimism-provider',

@ -1,6 +1,6 @@
/* global ethereum */
import * as packageJson from '../../../../../package.json'
import {InjectedProvider} from './injected-provider'
import { InjectedProvider } from './injected-provider'
export class InjectedProviderDefaultBase extends InjectedProvider {
constructor(profile) {
@ -34,7 +34,7 @@ const profile = {
}
export class InjectedProviderDefault extends InjectedProviderDefaultBase {
provider: any
provider: any
constructor(provider: any, name: string) {
super({ ...profile, ...{ name, displayName: name } })
this.provider = provider

@ -1,6 +1,6 @@
/* global ethereum */
import * as packageJson from '../../../../../package.json'
import {InjectedProvider} from './injected-provider'
import { InjectedProvider } from './injected-provider'
const profile = {
name: 'injected-trustwallet',

@ -1,8 +1,8 @@
/* global ethereum */
import React from 'react' // eslint-disable-line
import {Plugin} from '@remixproject/engine'
import {JsonDataRequest, RejectRequest, SuccessRequest} from '../providers/abstract-provider'
import {IProvider} from './abstract-provider'
import { Plugin } from '@remixproject/engine'
import { JsonDataRequest, RejectRequest, SuccessRequest } from '../providers/abstract-provider'
import { IProvider } from './abstract-provider'
export abstract class InjectedProvider extends Plugin implements IProvider {
options: {[id: string]: any} = {}
@ -45,7 +45,7 @@ export abstract class InjectedProvider extends Plugin implements IProvider {
askPermission(throwIfNoInjectedProvider) {
const web3Provider = this.getInjectedProvider()
if (typeof web3Provider !== 'undefined' && typeof web3Provider.request === 'function') {
web3Provider.request({method: 'eth_requestAccounts'})
web3Provider.request({ method: 'eth_requestAccounts' })
} else if (throwIfNoInjectedProvider) {
throw new Error(this.notFound())
}
@ -86,19 +86,19 @@ export abstract class InjectedProvider extends Plugin implements IProvider {
}
try {
let resultData
if (web3Provider.request) resultData = await web3Provider.request({method: data.method, params: data.params})
if (web3Provider.request) resultData = await web3Provider.request({ method: data.method, params: data.params })
else if (web3Provider.send) resultData = await web3Provider.send(data.method, data.params)
else {
resolve({jsonrpc: '2.0', error: { message: 'provider not valid', code: -32603 }, id: data.id})
resolve({ jsonrpc: '2.0', error: { message: 'provider not valid', code: -32603 }, id: data.id })
return
}
if (resultData) {
if (resultData.jsonrpc && resultData.jsonrpc === '2.0') {
resultData = resultData.result
}
resolve({jsonrpc: '2.0', result: resultData, id: data.id})
resolve({ jsonrpc: '2.0', result: resultData, id: data.id })
} else {
resolve({jsonrpc: '2.0', result: null, id: data.id})
resolve({ jsonrpc: '2.0', result: null, id: data.id })
}
} catch (error) {
if (error.data && error.data.originalError && error.data.originalError.data) {

@ -13,9 +13,9 @@ const profile = {
export class InjectedSKALEChaosTestnetProvider extends InjectedCustomProvider {
constructor () {
super(profile,
'SKALE Chaos Testnet',
'0x50877ed6',
super(profile,
'SKALE Chaos Testnet',
'0x50877ed6',
['https://staging-v3.skalenodes.com/v1/staging-fast-active-bellatrix'],
{
"name": "sFUEL",

@ -1,5 +1,5 @@
import * as packageJson from '../../../../../package.json'
import {BasicVMProvider} from './vm-provider'
import { BasicVMProvider } from './vm-provider'
export class MainnetForkVMProvider extends BasicVMProvider {
nodeUrl: string

@ -1,5 +1,5 @@
import * as packageJson from '../../../../../package.json'
import {BasicVMProvider} from './vm-provider'
import { BasicVMProvider } from './vm-provider'
export class SepoliaForkVMProvider extends BasicVMProvider {
nodeUrl: string

@ -1,8 +1,8 @@
import React from 'react' // eslint-disable-line
import * as packageJson from '../../../../../package.json'
import {JsonDataRequest, RejectRequest, SuccessRequest} from '../providers/abstract-provider'
import {Plugin} from '@remixproject/engine'
import {IProvider} from './abstract-provider'
import { JsonDataRequest, RejectRequest, SuccessRequest } from '../providers/abstract-provider'
import { Plugin } from '@remixproject/engine'
import { IProvider } from './abstract-provider'
export class BasicVMProvider extends Plugin implements IProvider {
blockchain
@ -33,7 +33,7 @@ export class BasicVMProvider extends Plugin implements IProvider {
await this.blockchain.providers.vm.provider.sendAsync(data, (error, result) => {
if (error) return reject(error)
else {
resolve({jsonrpc: '2.0', result, id: data.id})
resolve({ jsonrpc: '2.0', result, id: data.id })
}
})
} catch (error) {

@ -26,7 +26,7 @@ export class CompileAndRun extends Plugin {
super(profile)
this.executionListener = async (e) => {
// ctrl+e or command+e
if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.keyCode === 83) {
const file = await this.call('fileManager', 'file')
if (file) {
@ -51,7 +51,7 @@ export class CompileAndRun extends Plugin {
}
async runScript (fileName, clearAllInstances) {
await this.call('terminal', 'log', { value: `running ${fileName} ...`, type: 'info' })
await this.call('terminal', 'log', { value: `running ${fileName} ...`, type: 'info' })
try {
const exists = await this.call('fileManager', 'exists', fileName)
if (!exists) {
@ -65,7 +65,7 @@ export class CompileAndRun extends Plugin {
await this.call('scriptRunner', 'execute', content, fileName)
} catch (e) {
this.call('notification', 'toast', e.message || e)
}
}
}
onActivation () {

@ -1,7 +1,7 @@
import {ViewPlugin} from '@remixproject/engine-web'
import { ViewPlugin } from '@remixproject/engine-web'
import * as packageJson from '../../../../../package.json'
import React from 'react' // eslint-disable-line
import {SearchTab} from '@remix-ui/search'
import { SearchTab } from '@remix-ui/search'
const profile = {
name: 'search',
displayName: 'Search in files',

@ -1,10 +1,10 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import React from 'react' // eslint-disable-line
import {ViewPlugin} from '@remixproject/engine-web'
import { ViewPlugin } from '@remixproject/engine-web'
import * as packageJson from '../../../../../package.json'
import {RemixUiSettings} from '@remix-ui/settings' //eslint-disable-line
import {Registry} from '@remix-project/remix-lib'
import {PluginViewWrapper} from '@remix-ui/helper'
import { Registry } from '@remix-project/remix-lib'
import { PluginViewWrapper } from '@remix-ui/helper'
declare global {
interface Window {
_paq: any
@ -62,7 +62,7 @@ module.exports = class SettingsTab extends ViewPlugin {
onActivation(): void {
}
render() {
return (
<div id="settingsTab">

@ -1,20 +1,20 @@
import React from 'react' // eslint-disable-line
import {fromWei, toBigInt, toWei} from 'web3-utils'
import {Plugin} from '@remixproject/engine'
import {toBytes, addHexPrefix} from '@ethereumjs/util'
import {EventEmitter} from 'events'
import {format} from 'util'
import {ExecutionContext} from './execution-context'
import { fromWei, toBigInt, toWei } from 'web3-utils'
import { Plugin } from '@remixproject/engine'
import { toBytes, addHexPrefix } from '@ethereumjs/util'
import { EventEmitter } from 'events'
import { format } from 'util'
import { ExecutionContext } from './execution-context'
import Config from '../config'
import {VMProvider} from './providers/vm'
import {InjectedProvider} from './providers/injected'
import {NodeProvider} from './providers/node'
import {execution, EventManager, helpers} from '@remix-project/remix-lib'
import {etherScanLink} from './helper'
import {logBuilder, cancelUpgradeMsg, cancelProxyMsg, addressToString} from '@remix-ui/helper'
const {txFormat, txExecution, typeConversion, txListener: Txlistener, TxRunner, TxRunnerWeb3, txHelper} = execution
const {txResultHelper} = helpers
const {resultToRemixTx} = txResultHelper
import { VMProvider } from './providers/vm'
import { InjectedProvider } from './providers/injected'
import { NodeProvider } from './providers/node'
import { execution, EventManager, helpers } from '@remix-project/remix-lib'
import { etherScanLink } from './helper'
import { logBuilder, cancelUpgradeMsg, cancelProxyMsg, addressToString } from '@remix-ui/helper'
const { txFormat, txExecution, typeConversion, txListener: Txlistener, TxRunner, TxRunnerWeb3, txHelper } = execution
const { txResultHelper } = helpers
const { resultToRemixTx } = txResultHelper
import * as packageJson from '../../../../package.json'
const _paq = (window._paq = window._paq || []) //eslint-disable-line
@ -91,7 +91,7 @@ export class Blockchain extends Plugin {
this.txRunner = new TxRunner(web3Runner, {})
this.networkcallid = 0
this.networkStatus = {network: {name: ' - ', id: ' - '}}
this.networkStatus = { network: { name: ' - ', id: ' - ' } }
this.registeredPluginEvents = []
this.setupEvents()
this.setupProviders()
@ -110,7 +110,7 @@ export class Blockchain extends Plugin {
this.registeredPluginEvents.push(plugin.name)
this.on(plugin.name, 'chainChanged', () => {
this.detectNetwork((error, network) => {
this.networkStatus = {network, error}
this.networkStatus = { network, error }
this._triggerEvent('networkStatus', [this.networkStatus])
})
})
@ -131,7 +131,7 @@ export class Blockchain extends Plugin {
await this.loadContext(context)
this._triggerEvent('contextChanged', [context])
this.detectNetwork((error, network) => {
this.networkStatus = {network, error}
this.networkStatus = { network, error }
this._triggerEvent('networkStatus', [this.networkStatus])
})
})
@ -146,7 +146,7 @@ export class Blockchain extends Plugin {
setInterval(() => {
this.detectNetwork((error, network) => {
this.networkStatus = {network, error}
this.networkStatus = { network, error }
this._triggerEvent('networkStatus', [this.networkStatus])
})
}, 30000)
@ -189,7 +189,7 @@ export class Blockchain extends Plugin {
}
deployContractAndLibraries(selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb) {
const {continueCb, promptCb, statusCb, finalCb} = callbacks
const { continueCb, promptCb, statusCb, finalCb } = callbacks
const constructor = selectedContract.getConstructorInterface()
txFormat.buildData(
selectedContract.name,
@ -215,7 +215,7 @@ export class Blockchain extends Plugin {
}
deployContractWithLibrary(selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb) {
const {continueCb, promptCb, statusCb, finalCb} = callbacks
const { continueCb, promptCb, statusCb, finalCb } = callbacks
const constructor = selectedContract.getConstructorInterface()
txFormat.encodeConstructorCallAndLinkLibraries(
selectedContract.object,
@ -257,7 +257,7 @@ export class Blockchain extends Plugin {
}
async runProxyTx(proxyData, implementationContractObject) {
const args = {useCall: false, data: proxyData}
const args = { useCall: false, data: proxyData }
let networkInfo
const confirmationCb = (network, tx, gasEstimation, continueTxExecution, cancelCb) => {
networkInfo = network
@ -308,7 +308,7 @@ export class Blockchain extends Plugin {
}
async runUpgradeTx(proxyAddress, data, newImplementationContractObject) {
const args = {useCall: false, data, to: proxyAddress}
const args = { useCall: false, data, to: proxyAddress }
let networkInfo
const confirmationCb = (network, tx, gasEstimation, continueTxExecution, cancelCb) => {
// continue using original authorization given by user
@ -336,7 +336,7 @@ export class Blockchain extends Plugin {
}
async saveDeployedContractStorageLayout(contractObject, proxyAddress, networkInfo) {
const {contractName, implementationAddress} = contractObject
const { contractName, implementationAddress } = contractObject
const networkName = networkInfo.name === 'custom' ? networkInfo.name + '-' + networkInfo.id : networkInfo.name
const hasPreviousDeploys = await this.call('fileManager', 'exists', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`)
// TODO: make deploys folder read only.
@ -436,7 +436,7 @@ export class Blockchain extends Plugin {
data.contractABI = selectedContract.abi
}
this.runTx({data: data, useCall: false}, confirmationCb, continueCb, promptCb, (error, txResult, address) => {
this.runTx({ data: data, useCall: false }, confirmationCb, continueCb, promptCb, (error, txResult, address) => {
if (error) {
return finalCb(`creation of ${selectedContract.name} errored: ${error.message ? error.message : error}`)
}
@ -578,7 +578,7 @@ export class Blockchain extends Plugin {
data.contract = contract
}
const useCall = funABI.stateMutability === 'view' || funABI.stateMutability === 'pure'
this.runTx({to: address, data, useCall}, confirmationCb, continueCb, promptCb, (error, txResult, _address, returnValue) => {
this.runTx({ to: address, data, useCall }, confirmationCb, continueCb, promptCb, (error, txResult, _address, returnValue) => {
if (error) {
return logCallback(`${logMsg} errored: ${error.message ? error.message : error}`)
}
@ -629,13 +629,13 @@ export class Blockchain extends Plugin {
async loadContext(context: string) {
const saveEvmState = this.config.get('settings/save-evm-state')
if (saveEvmState) {
const contextExists = await this.call('fileManager', 'exists', `.states/${context}/state.json`)
if (contextExists) {
const stateDb = await this.call('fileManager', 'readFile', `.states/${context}/state.json`)
await this.getCurrentProvider().resetEnvironment(stateDb)
} else {
await this.getCurrentProvider().resetEnvironment()
@ -676,7 +676,7 @@ export class Blockchain extends Plugin {
view on etherscan
</a>
)
}
}
})
})
this.txRunner = new TxRunner(web3Runner, {})
@ -866,7 +866,7 @@ export class Blockchain extends Plugin {
const eventName = tx.useCall ? 'callExecuted' : 'transactionExecuted'
this._triggerEvent(eventName, [error, tx.from, tx.to, tx.data, tx.useCall, result, timestamp, payLoad])
return resolve({result, tx})
return resolve({ result, tx })
})
} catch (err) {
return reject(err)
@ -894,7 +894,7 @@ export class Blockchain extends Plugin {
this.call('fileManager', 'writeFile', `.states/${this.executionContext.getProvider()}/state.json`, state)
} catch (e) {
console.error(e)
}
}
}
const hhlogs = await this.web3().remix.getHHLogsForTx(txResult.transactionHash)
@ -923,7 +923,7 @@ export class Blockchain extends Plugin {
this.call('terminal', 'logHtml', finalLogs)
}
execResult = await this.web3().remix.getExecutionResultFromSimulator(txResult.transactionHash)
if (execResult) {
// if it's not the VM, we don't have return value. We only have the transaction, and it does not contain the return value.
returnValue = execResult
@ -959,9 +959,9 @@ export class Blockchain extends Plugin {
cb((await buildError(errorMessage, errorData)).message)
} else if (error.message || error.data) {
errorMessage = error.message
errorData = error.data
errorData = error.data
cb((await buildError(errorMessage, errorData)).message)
} else
} else
cb(error)
}
}

@ -6,7 +6,7 @@ const transactionDetailsLinks = {
Goerli: 'https://goerli.etherscan.io/tx/',
Sepolia: 'https://sepolia.etherscan.io/tx/'
}
export function etherScanLink (network: string, hash: string): string {
if (transactionDetailsLinks[network]) {
return transactionDetailsLinks[network] + hash

@ -46,7 +46,7 @@ export class VMProvider {
stamps[msg.data.stamp].reject(msg.data.error)
} else {
stamps[msg.data.stamp].resolve(msg.data.result)
}
}
} else if (msg.data.cmd === 'initiateResult') {
if (!msg.data.error) {
this.provider = {
@ -55,7 +55,7 @@ export class VMProvider {
const stamp = Date.now() + incr
incr++
stamps[stamp] = { callback, resolve, reject }
this.worker.postMessage({ cmd: 'sendAsync', query, stamp })
this.worker.postMessage({ cmd: 'sendAsync', query, stamp })
})
}
}
@ -102,7 +102,6 @@ export class VMProvider {
})
}
// TODO: is still here because of the plugin API
// can be removed later when we update the API
createVMAccount (newAccount) {
@ -134,5 +133,5 @@ export class VMProvider {
this.web3.eth.sign(message, account)
.then(signedData => cb(null, bytesToHex(messageHash), signedData))
.catch(error => cb(error))
}
}
}

@ -4,9 +4,9 @@ let provider: Provider = null
self.onmessage = (e: MessageEvent) => {
const data = e.data
switch (data.cmd) {
case 'init':
case 'init':
{
provider = new Provider({ fork: data.fork, nodeUrl: data.nodeUrl, blockNumber: data.blockNumber, stateDb: data.stateDb, blocks: data.blocks})
provider = new Provider({ fork: data.fork, nodeUrl: data.nodeUrl, blockNumber: data.blockNumber, stateDb: data.stateDb, blocks: data.blocks })
provider.init().then(() => {
self.postMessage({
cmd: 'initiateResult',
@ -40,7 +40,7 @@ self.onmessage = (e: MessageEvent) => {
stamp: data.stamp
})
}
break
}
case 'addAccount':
@ -48,7 +48,7 @@ self.onmessage = (e: MessageEvent) => {
if (provider) {
provider.Accounts._addAccount(data.privateKey, data.balance)
}
break
}
case 'newAccount':
@ -67,11 +67,11 @@ self.onmessage = (e: MessageEvent) => {
result: address,
stamp: data.stamp
})
}
}
})
}
break
}
}
}
}

@ -1,11 +1,11 @@
// eslint-disable-next-line no-use-before-define
import React from 'react'
import './index.css'
import {ThemeModule} from './app/tabs/theme-module'
import {Preload} from './app/components/preload'
import { ThemeModule } from './app/tabs/theme-module'
import { Preload } from './app/components/preload'
import Config from './config'
import {Registry} from '@remix-project/remix-lib'
import {Storage} from '@remix-project/remix-lib'
import { Registry } from '@remix-project/remix-lib'
import { Storage } from '@remix-project/remix-lib'
import { createRoot } from 'react-dom/client'
@ -13,14 +13,14 @@ import { createRoot } from 'react-dom/client'
try {
const configStorage = new Storage('config-v0.8:')
const config = new Config(configStorage)
Registry.getInstance().put({api: config, name: 'config'})
Registry.getInstance().put({ api: config, name: 'config' })
} catch (e) {}
const theme = new ThemeModule()
theme.initTheme()
const container = document.getElementById('root');
const root = createRoot(container)
if (container) {
if (container) {
root.render(<Preload root={root} />);
}
}
})()

Loading…
Cancel
Save