diff --git a/libs/ghaction-helper/src/methods.ts b/libs/ghaction-helper/src/methods.ts index 8bea9f5532..b6558f4eb0 100644 --- a/libs/ghaction-helper/src/methods.ts +++ b/libs/ghaction-helper/src/methods.ts @@ -198,7 +198,7 @@ const getContractAt = async (contractNameOrABI: ethers.ContractInterface, addres if (result) { return new ethers.Contract(address, result.abi, signer || provider.getSigner()) } else { - throw new Error('Contract artifacts not found') + throw new Error('Contract artifacts not found') } } else { return new ethers.Contract(address, contractNameOrABI, signer || provider.getSigner()) diff --git a/libs/ghaction-helper/src/signer.ts b/libs/ghaction-helper/src/signer.ts index c6b6cf9d2a..ff5626b566 100644 --- a/libs/ghaction-helper/src/signer.ts +++ b/libs/ghaction-helper/src/signer.ts @@ -2,8 +2,8 @@ import { ethers } from "ethers" export class SignerWithAddress extends ethers.Signer { - address: string - _signer: { + address: string + _signer: { provider: any signTransaction: (transaction: any) => any, signMessage: (message: string) => any, @@ -11,43 +11,43 @@ export class SignerWithAddress extends ethers.Signer { connect: (provider: any) => any, _signTypedData: (...params: any) => any } - provider: any - static async create(signer: any) { - return new SignerWithAddress(await signer.getAddress(), signer) - } - - constructor(address: string, _signer: any) { - super() - this.address = address - this._signer = _signer - this.provider = _signer.provider - } - - async getAddress() { - return this.address - } - - signMessage(message: string){ - return this._signer.signMessage(message) - } - - signTransaction(transaction: any) { - return this._signer.signTransaction(transaction) - } - - sendTransaction(transaction: any) { - return this._signer.sendTransaction(transaction) - } - - connect(provider: any) { - return new SignerWithAddress(this.address, this._signer.connect(provider)) - } - - _signTypedData(...params: any) { - return this._signer._signTypedData(...params) - } - - toJSON() { - return `` - } + provider: any + static async create(signer: any) { + return new SignerWithAddress(await signer.getAddress(), signer) + } + + constructor(address: string, _signer: any) { + super() + this.address = address + this._signer = _signer + this.provider = _signer.provider + } + + async getAddress() { + return this.address + } + + signMessage(message: string){ + return this._signer.signMessage(message) + } + + signTransaction(transaction: any) { + return this._signer.signTransaction(transaction) + } + + sendTransaction(transaction: any) { + return this._signer.sendTransaction(transaction) + } + + connect(provider: any) { + return new SignerWithAddress(this.address, this._signer.connect(provider)) + } + + _signTypedData(...params: any) { + return this._signer._signTypedData(...params) + } + + toJSON() { + return `` + } } \ No newline at end of file diff --git a/libs/remix-analyzer/src/solidity-analyzer/modules/lowLevelCalls.ts b/libs/remix-analyzer/src/solidity-analyzer/modules/lowLevelCalls.ts index 39ee3faa2d..04193a6afb 100644 --- a/libs/remix-analyzer/src/solidity-analyzer/modules/lowLevelCalls.ts +++ b/libs/remix-analyzer/src/solidity-analyzer/modules/lowLevelCalls.ts @@ -43,31 +43,31 @@ export default class lowLevelCalls implements AnalyzerModule { let text = '' let morehref = '' switch (item.type) { - case lowLevelCallTypes.CALL: - text = `Use of "call": should be avoided whenever possible. + case lowLevelCallTypes.CALL: + text = `Use of "call": should be avoided whenever possible. It can lead to unexpected behavior if return value is not handled properly. Please use Direct Calls via specifying the called contract's interface.` - morehref = `https://solidity.readthedocs.io/en/${version}/control-structures.html?#external-function-calls` - break - case lowLevelCallTypes.CALLCODE: - text = `Use of "callcode": should be avoided whenever possible. + morehref = `https://solidity.readthedocs.io/en/${version}/control-structures.html?#external-function-calls` + break + case lowLevelCallTypes.CALLCODE: + text = `Use of "callcode": should be avoided whenever possible. External code, that is called can change the state of the calling contract and send ether from the caller's balance. If this is wanted behaviour, use the Solidity library feature if possible.` - morehref = `https://solidity.readthedocs.io/en/${version}/contracts.html#libraries` - break - case lowLevelCallTypes.DELEGATECALL: - text = `Use of "delegatecall": should be avoided whenever possible. + morehref = `https://solidity.readthedocs.io/en/${version}/contracts.html#libraries` + break + case lowLevelCallTypes.DELEGATECALL: + text = `Use of "delegatecall": should be avoided whenever possible. External code, that is called can change the state of the calling contract and send ether from the caller's balance. If this is wanted behaviour, use the Solidity library feature if possible.` - morehref = `https://solidity.readthedocs.io/en/${version}/contracts.html#libraries` - break - case lowLevelCallTypes.SEND: - text = `Use of "send": "send" does not throw an exception when not successful, make sure you deal with the failure case accordingly. + morehref = `https://solidity.readthedocs.io/en/${version}/contracts.html#libraries` + break + case lowLevelCallTypes.SEND: + text = `Use of "send": "send" does not throw an exception when not successful, make sure you deal with the failure case accordingly. Use "transfer" whenever failure of the ether transfer should rollback the whole transaction. Note: if you "send/transfer" ether to a contract the fallback function is called, the callees fallback function is very limited due to the limited amount of gas provided by "send/transfer". No state changes are possible but the callee can log the event or revert the transfer. "send/transfer" is syntactic sugar for a "call" to the fallback function with 2300 gas and a specified ether value.` - morehref = `https://solidity.readthedocs.io/en/${version}/security-considerations.html#sending-and-receiving-ether` - break + morehref = `https://solidity.readthedocs.io/en/${version}/security-considerations.html#sending-and-receiving-ether` + break } return { warning: text, more: morehref, location: item.node.src } }) diff --git a/libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts b/libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts index f8a1649053..859dfe9758 100644 --- a/libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts +++ b/libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts @@ -1,10 +1,10 @@ import { default as test} from "tape" import * as common from '../../src/solidity-analyzer/modules/staticAnalysisCommon' const { localCall, thisLocalCall, libCall, externalDirect, superLocal, assignment, abiNamespaceCallNodes, - inlineAssembly, unaryOperation, nowAst, blockTimestamp, stateVariableContractNode, - functionDefinition, requireCall, selfdestruct, storageVariableNodes, dynamicDeleteUnaryOp, - // eslint-disable-next-line @typescript-eslint/no-var-requires - lowlevelCall, parameterFunction, parameterFunctionCall, inheritance, blockHashAccess, contractDefinition, funcDefForComplexParams } = require('./astBlocks') + inlineAssembly, unaryOperation, nowAst, blockTimestamp, stateVariableContractNode, + functionDefinition, requireCall, selfdestruct, storageVariableNodes, dynamicDeleteUnaryOp, + // eslint-disable-next-line @typescript-eslint/no-var-requires + lowlevelCall, parameterFunction, parameterFunctionCall, inheritance, blockHashAccess, contractDefinition, funcDefForComplexParams } = require('./astBlocks') // eslint-disable-next-line @typescript-eslint/no-var-requires @@ -40,11 +40,11 @@ test('staticAnalysisCommon.helpers.buildFunctionSignature', function (t) { 'function (bytes memory) payable returns (bool,bytes memory)', 'check fixed call type') -t.equal(common.lowLevelCallTypes['CALL-0.4'].type, + t.equal(common.lowLevelCallTypes['CALL-0.4'].type, 'function () payable returns (bool)', 'check fixed call type for versions before 0.5.0') -t.equal(common.lowLevelCallTypes.CALLCODE.type, + t.equal(common.lowLevelCallTypes.CALLCODE.type, 'function () payable returns (bool)', 'check fixed callcode type') @@ -56,7 +56,7 @@ t.equal(common.lowLevelCallTypes.CALLCODE.type, 'function (bytes memory) returns (bool,bytes memory)', 'check fixed delegatecall type') -t.equal(common.lowLevelCallTypes['DELEGATECALL-0.4'].type, + t.equal(common.lowLevelCallTypes['DELEGATECALL-0.4'].type, 'function () returns (bool)', 'check fixed delegatecall type for version before 0.5.0') }) @@ -141,18 +141,18 @@ test('staticAnalysisCommon.helpers.expressionTypeDescription', function (t) { test('staticAnalysisCommon.getType', function (t) { t.plan(3) const node = { "argumentTypes": null, - "id": 3, - "name": "a", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 22, - "src": "52:1:0", - "typeDescriptions": + "id": 3, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 22, + "src": "52:1:0", + "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } - } + } t.ok(common.getType(blockHashAccess) === 'bytes32', 'gettype should work for different nodes') t.ok(common.getType(node) === 'uint256', 'gettype should work for different nodes') t.ok(common.getType(assignment) === 'uint256', 'gettype should work for different nodes') diff --git a/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts b/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts index 03cc61d5e2..18881e20ef 100644 --- a/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts +++ b/libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts @@ -816,11 +816,11 @@ test('Integration test forLoopIteratesOverDynamicArray module', function (t: tes function runModuleOnFiles (Module: any, t: test.Test, cb: ((fname: string, report: AnalysisReportObj[]) => void)): void { const statRunner: StatRunner = new StatRunner() testFiles.forEach((fileName: string) => { - const reports = statRunner.runWithModuleList(compilationResults[fileName], [{ name: new Module().name, mod: new Module() }]) - const report: AnalysisReportObj[] = reports[0].report - if (report.some((x: AnalysisReportObj) => x['warning'].includes('INTERNAL ERROR'))) { - t.comment('Error while executing Module: ' + JSON.stringify(report)) - } - cb(fileName, report) + const reports = statRunner.runWithModuleList(compilationResults[fileName], [{ name: new Module().name, mod: new Module() }]) + const report: AnalysisReportObj[] = reports[0].report + if (report.some((x: AnalysisReportObj) => x['warning'].includes('INTERNAL ERROR'))) { + t.comment('Error while executing Module: ' + JSON.stringify(report)) + } + cb(fileName, report) }) } diff --git a/libs/remix-core-plugin/src/lib/compiler-artefacts.ts b/libs/remix-core-plugin/src/lib/compiler-artefacts.ts index b1f9ac9634..c37e3a7dab 100644 --- a/libs/remix-core-plugin/src/lib/compiler-artefacts.ts +++ b/libs/remix-core-plugin/src/lib/compiler-artefacts.ts @@ -95,7 +95,7 @@ export class CompilerArtefacts extends Plugin { * filter compilation output for contracts compiled during a session of Remix IDE * @returns compilatin output */ - filterAllContractDatas (filter) { + filterAllContractDatas (filter) { const contractsData = {} Object.keys(this.compilersArtefactsPerFile).map((targetFile) => { const artefact = this.compilersArtefactsPerFile[targetFile] diff --git a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts index b64308ff34..50b9b08bb2 100644 --- a/libs/remix-core-plugin/src/lib/compiler-content-imports.ts +++ b/libs/remix-core-plugin/src/lib/compiler-content-imports.ts @@ -167,8 +167,8 @@ export class CompilerImports extends Plugin { Doesn't make sense to try to resolve "localhost/node_modules/localhost/node_modules/" and we'll end in an infinite loop. */ if (!exist && (url === 'remix_tests.sol' || url === 'remix_accounts.sol')) { - await this.call('solidityUnitTesting', 'createTestLibs') - exist = await provider.exists(url) + await this.call('solidityUnitTesting', 'createTestLibs') + exist = await provider.exists(url) } if (!exist && url.startsWith('browser/')) throw new Error(`not found ${url}`) if (!exist && url.startsWith('localhost/')) throw new Error(`not found ${url}`) diff --git a/libs/remix-core-plugin/src/lib/compiler-metadata.ts b/libs/remix-core-plugin/src/lib/compiler-metadata.ts index abf811551c..b45daeb5f0 100644 --- a/libs/remix-core-plugin/src/lib/compiler-metadata.ts +++ b/libs/remix-core-plugin/src/lib/compiler-metadata.ts @@ -88,10 +88,10 @@ export class CompilerMetadata extends Plugin { const buildData = {id, _format: format, solcVersion, solcLongVersion, input, output} await this.call('fileManager', 'writeFile', buildFilename, JSON.stringify(buildData, null, '\t')) } else if (this.buildInfoNames[filePath] && this.buildInfoNames[filePath] !== buildFilename) { - await this.call('fileManager', 'remove', this.buildInfoNames[filePath]) - this.buildInfoNames[filePath] = buildFilename - const buildData = {id, _format: format, solcVersion, solcLongVersion, input, output} - await this.call('fileManager', 'writeFile', buildFilename, JSON.stringify(buildData, null, '\t')) + await this.call('fileManager', 'remove', this.buildInfoNames[filePath]) + this.buildInfoNames[filePath] = buildFilename + const buildData = {id, _format: format, solcVersion, solcLongVersion, input, output} + await this.call('fileManager', 'writeFile', buildFilename, JSON.stringify(buildData, null, '\t')) } } diff --git a/libs/remix-core-plugin/src/lib/constants/uups.ts b/libs/remix-core-plugin/src/lib/constants/uups.ts index 9a3dc92757..3b67ea6af9 100644 --- a/libs/remix-core-plugin/src/lib/constants/uups.ts +++ b/libs/remix-core-plugin/src/lib/constants/uups.ts @@ -10,88 +10,88 @@ export const UUPSRuns = 0 export const UUPSEvmVersion = null export const UUPSABI = [ { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" }, { - "stateMutability": "payable", - "type": "fallback" + "stateMutability": "payable", + "type": "fallback" }, { - "stateMutability": "payable", - "type": "receive" + "stateMutability": "payable", + "type": "receive" } ] export const UUPSfunAbi = { name: "", inputs: [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } ], type: "constructor", outputs: [], @@ -99,17 +99,17 @@ export const UUPSfunAbi = { } export const UUPSupgradeAbi = { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } export const EnableProxyURLParam = 'deployProxy' export const EnableUpgradeURLParam = 'upgradeProxy' \ No newline at end of file diff --git a/libs/remix-core-plugin/src/types/contract.ts b/libs/remix-core-plugin/src/types/contract.ts index ba93c138f0..df518ed034 100644 --- a/libs/remix-core-plugin/src/types/contract.ts +++ b/libs/remix-core-plugin/src/types/contract.ts @@ -191,7 +191,7 @@ export interface ContractSources { } } - export interface NetworkDeploymentFile { +export interface NetworkDeploymentFile { id: string, network: string, deployments: { @@ -204,7 +204,7 @@ export interface ContractSources { }[] } - export interface SolcBuildFile { +export interface SolcBuildFile { solcInput: SolcInput, solcOutput: SolcOutput } diff --git a/libs/remix-debug/test.ts b/libs/remix-debug/test.ts index f0c43e4398..95a5a44c4c 100644 --- a/libs/remix-debug/test.ts +++ b/libs/remix-debug/test.ts @@ -67,7 +67,7 @@ cmdLine.startDebug(tx, shortFilename) cmdLine.events.on('source', () => { cmdLine.getSource().forEach(console.dir) }) - // }) +// }) // }) const repl = require('repl') diff --git a/libs/remix-debug/test/decoder/localsTests/helper.ts b/libs/remix-debug/test/decoder/localsTests/helper.ts index c041f4364a..d966c16f5a 100644 --- a/libs/remix-debug/test/decoder/localsTests/helper.ts +++ b/libs/remix-debug/test/decoder/localsTests/helper.ts @@ -31,15 +31,15 @@ export function decodeLocals (st, index, traceManager, callTree, verifier) { callback(error) } }], - index, - function (error, result) { - if (error) { - return st.fail(error) - } - solidityLocals(index, callTree, result[0].value, result[1].value, {}, result[2].value, { start: 5000 }, null).then((locals) => { - verifier(locals) - }) + index, + function (error, result) { + if (error) { + return st.fail(error) + } + solidityLocals(index, callTree, result[0].value, result[1].value, {}, result[2].value, { start: 5000 }, null).then((locals) => { + verifier(locals) }) + }) } catch (e) { st.fail(e.message) } diff --git a/libs/remix-debug/test/decoder/stateTests/mapping.ts b/libs/remix-debug/test/decoder/stateTests/mapping.ts index b633be9c8f..52b457e8ce 100644 --- a/libs/remix-debug/test/decoder/stateTests/mapping.ts +++ b/libs/remix-debug/test/decoder/stateTests/mapping.ts @@ -46,63 +46,63 @@ module.exports = async function testMappingStorage (st, cb) { function testMapping (st, privateKey, contractAddress, output, compilationResults, web3, cb) { (vmCall as any).sendTx(web3, {nonce: 1, privateKey: privateKey}, contractAddress, 0, '2fd0a83a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001074686973206973206120737472696e6700000000000000000000000000000000', - function (error, hash) { + function (error, hash) { + if (error) { + console.log(error) + st.end(error) + } else { + web3.eth.getTransaction(hash, (error, tx) => { if (error) { console.log(error) st.end(error) - } else { - web3.eth.getTransaction(hash, (error, tx) => { - if (error) { - console.log(error) - st.end(error) - } else { - const traceManager = new TraceManager({ web3 }) - const codeManager = new CodeManager(traceManager) - codeManager.clear() - console.log(compilationResults) - const solidityProxy = new SolidityProxy({ - getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), - getCode: codeManager.getCode.bind(codeManager), - compilationResult: () => compilationResults - }) - const debuggerEvent = new EventManager() - const callTree = new InternalCallTree(debuggerEvent, traceManager, solidityProxy, codeManager, { includeLocalVariables: true }) - callTree.event.register('callTreeBuildFailed', (error) => { - st.fail(error) - }) - callTree.event.register('callTreeNotReady', (reason) => { - st.fail(reason) - }) - callTree.event.register('callTreeReady', (scopes, scopeStarts) => { - const storageViewer = new StorageViewer({ - stepIndex: 268, - tx: tx, - address: contractAddress - }, new StorageResolver({web3}), traceManager) - const stateVars = stateDecoder.extractStateVariables('SimpleMappingState', output.sources) - stateDecoder.decodeState(stateVars, storageViewer).then((result) => { - st.equal(result['_num'].value, '1') - st.equal(result['_num'].type, 'uint256') - st.equal(result['_iBreakSolidityState'].type, 'mapping(string => uint256)') - st.equal(result['_iBreakSolidityState'].value['74686973206973206120737472696e67'].value, '1') - st.equal(result['_iBreakSolidityState'].value['74686973206973206120737472696e67'].type, 'uint256') - st.equal(result['_iBreakSolidityStateInt'].type, 'mapping(uint256 => uint256)') - st.equal(result['_iBreakSolidityStateInt'].value['0000000000000000000000000000000000000000000000000000000000000001'].value, '1') - st.equal(result['_iBreakSolidityStateInt'].value['0000000000000000000000000000000000000000000000000000000000000001'].type, 'uint256') - cb() - }, (reason) => { - console.log('fail') - st.end(reason) - }) - }) + } else { + const traceManager = new TraceManager({ web3 }) + const codeManager = new CodeManager(traceManager) + codeManager.clear() + console.log(compilationResults) + const solidityProxy = new SolidityProxy({ + getCurrentCalledAddressAt: traceManager.getCurrentCalledAddressAt.bind(traceManager), + getCode: codeManager.getCode.bind(codeManager), + compilationResult: () => compilationResults + }) + const debuggerEvent = new EventManager() + const callTree = new InternalCallTree(debuggerEvent, traceManager, solidityProxy, codeManager, { includeLocalVariables: true }) + callTree.event.register('callTreeBuildFailed', (error) => { + st.fail(error) + }) + callTree.event.register('callTreeNotReady', (reason) => { + st.fail(reason) + }) + callTree.event.register('callTreeReady', (scopes, scopeStarts) => { + const storageViewer = new StorageViewer({ + stepIndex: 268, + tx: tx, + address: contractAddress + }, new StorageResolver({web3}), traceManager) + const stateVars = stateDecoder.extractStateVariables('SimpleMappingState', output.sources) + stateDecoder.decodeState(stateVars, storageViewer).then((result) => { + st.equal(result['_num'].value, '1') + st.equal(result['_num'].type, 'uint256') + st.equal(result['_iBreakSolidityState'].type, 'mapping(string => uint256)') + st.equal(result['_iBreakSolidityState'].value['74686973206973206120737472696e67'].value, '1') + st.equal(result['_iBreakSolidityState'].value['74686973206973206120737472696e67'].type, 'uint256') + st.equal(result['_iBreakSolidityStateInt'].type, 'mapping(uint256 => uint256)') + st.equal(result['_iBreakSolidityStateInt'].value['0000000000000000000000000000000000000000000000000000000000000001'].value, '1') + st.equal(result['_iBreakSolidityStateInt'].value['0000000000000000000000000000000000000000000000000000000000000001'].type, 'uint256') + cb() + }, (reason) => { + console.log('fail') + st.end(reason) + }) + }) - traceManager.resolveTrace(tx).then(() => { - debuggerEvent.trigger('newTraceLoaded', [traceManager.trace]) - }).catch((error) => { - st.fail(error) - }) - } + traceManager.resolveTrace(tx).then(() => { + debuggerEvent.trigger('newTraceLoaded', [traceManager.trace]) + }).catch((error) => { + st.fail(error) }) } }) + } + }) } diff --git a/libs/remix-debug/test/resources/ast.ts b/libs/remix-debug/test/resources/ast.ts index 03fad53a77..f4ca65f47e 100644 --- a/libs/remix-debug/test/resources/ast.ts +++ b/libs/remix-debug/test/resources/ast.ts @@ -3,64 +3,64 @@ const node = {} node['ast'] = {"legacyAST":{"children":[{"attributes":{"fullyImplemented":true,"isLibrary":false,"linearizedBaseContracts":[5640396],"name":"test"},"children":[{"attributes":{"name":"x","type":"int256"},"children":[{"attributes":{"name":"int"},"id":5657860,"name":"ElementaryTypeName","src":"21:3:11"}],"id":5658100,"name":"VariableDeclaration","src":"21:5:11"},{"attributes":{"name":"y","type":"int256"},"children":[{"attributes":{"name":"int"},"id":5658180,"name":"ElementaryTypeName","src":"38:3:11"}],"id":5658268,"name":"VariableDeclaration","src":"38:5:11"},{"attributes":{"constant":false,"name":"set","public":true},"children":[{"children":[{"attributes":{"name":"_x","type":"int256"},"children":[{"attributes":{"name":"int"},"id":5658404,"name":"ElementaryTypeName","src":"68:3:11"}],"id":5658492,"name":"VariableDeclaration","src":"68:6:11"}],"id":5658572,"name":"ParameterList","src":"67:8:11"},{"children":[{"attributes":{"name":"_r","type":"int256"},"children":[{"attributes":{"name":"int"},"id":5658628,"name":"ElementaryTypeName","src":"85:3:11"}],"id":5658716,"name":"VariableDeclaration","src":"85:6:11"}],"id":5658796,"name":"ParameterList","src":"84:8:11"},{"children":[{"children":[{"attributes":{"operator":"=","type":"int256"},"children":[{"attributes":{"type":"int256","value":"x"},"id":5658900,"name":"Identifier","src":"108:1:11"},{"attributes":{"type":"int256","value":"_x"},"id":5658980,"name":"Identifier","src":"112:2:11"}],"id":5657492,"name":"Assignment","src":"108:6:11"}],"id":5659028,"name":"ExpressionStatement","src":"108:6:11"},{"children":[{"attributes":{"operator":"=","type":"int256"},"children":[{"attributes":{"type":"int256","value":"y"},"id":5659116,"name":"Identifier","src":"125:1:11"},{"attributes":{"string":null,"type":"int_const 10","value":"10"},"id":5659196,"name":"Literal","src":"129:2:11"}],"id":5659252,"name":"Assignment","src":"125:6:11"}],"id":5659316,"name":"ExpressionStatement","src":"125:6:11"},{"children":[{"attributes":{"operator":"=","type":"int256"},"children":[{"attributes":{"type":"int256","value":"_r"},"id":5659428,"name":"Identifier","src":"141:2:11"},{"attributes":{"type":"int256","value":"x"},"id":5639308,"name":"Identifier","src":"146:1:11"}],"id":5639356,"name":"Assignment","src":"141:6:11"}],"id":5639420,"name":"ExpressionStatement","src":"141:6:11"}],"id":5639516,"name":"Block","src":"97:57:11"}],"id":5639612,"name":"FunctionDefinition","src":"55:99:11"},{"attributes":{"constant":false,"name":"get","public":true},"children":[{"children":[],"id":5639764,"name":"ParameterList","src":"179:2:11"},{"children":[{"attributes":{"name":"x","type":"uint256"},"children":[{"attributes":{"name":"uint"},"id":5639820,"name":"ElementaryTypeName","src":"191:4:11"}],"id":5639908,"name":"VariableDeclaration","src":"191:6:11"},{"attributes":{"name":"y","type":"uint256"},"children":[{"attributes":{"name":"uint"},"id":5639988,"name":"ElementaryTypeName","src":"199:4:11"}],"id":5640076,"name":"VariableDeclaration","src":"199:6:11"}],"id":5640156,"name":"ParameterList","src":"190:16:11"},{"children":[],"id":5640212,"name":"Block","src":"212:17:11"}],"id":5640276,"name":"FunctionDefinition","src":"167:62:11"}],"id":5640396,"name":"ContractDefinition","src":"0:231:11"}],"name":"SourceUnit"}} node['ast'].ast = { - absolutePath: 'sample.sol', - exportedSymbols: { test: [ 33 ] }, - id: 34, - nodeType: 'SourceUnit', - nodes: + absolutePath: 'sample.sol', + exportedSymbols: { test: [ 33 ] }, + id: 34, + nodeType: 'SourceUnit', + nodes: [ { - abstract: false, - baseContracts: [], - contractDependencies: [], - contractKind: 'contract', - documentation: null, - fullyImplemented: true, - id: 33, - linearizedBaseContracts: [ 33 ], - name: 'test', - nodeType: 'ContractDefinition', - nodes: + abstract: false, + baseContracts: [], + contractDependencies: [], + contractKind: 'contract', + documentation: null, + fullyImplemented: true, + id: 33, + linearizedBaseContracts: [ 33 ], + name: 'test', + nodeType: 'ContractDefinition', + nodes: [ { constant: false, - id: 2, - name: 'x', - nodeType: 'VariableDeclaration', - overrides: null, - scope: 33, - src: '20:5:0', - stateVariable: true, - storageLocation: 'default', - typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' }, - typeName: { - id: 1, - name: 'int', - nodeType: 'ElementaryTypeName', - src: '20:3:0', - typeDescriptions: [Object] - }, - value: null, - visibility: 'internal' }, + id: 2, + name: 'x', + nodeType: 'VariableDeclaration', + overrides: null, + scope: 33, + src: '20:5:0', + stateVariable: true, + storageLocation: 'default', + typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' }, + typeName: { + id: 1, + name: 'int', + nodeType: 'ElementaryTypeName', + src: '20:3:0', + typeDescriptions: [Object] + }, + value: null, + visibility: 'internal' }, { constant: false, - id: 4, - name: 'y', - nodeType: 'VariableDeclaration', - overrides: null, - scope: 33, - src: '31:5:0', - stateVariable: true, - storageLocation: 'default', - typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' }, - typeName: + id: 4, + name: 'y', + nodeType: 'VariableDeclaration', + overrides: null, + scope: 33, + src: '31:5:0', + stateVariable: true, + storageLocation: 'default', + typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' }, + typeName: { id: 3, - name: 'int', - nodeType: 'ElementaryTypeName', - src: '31:3:0', - typeDescriptions: [Object] }, - value: null, - visibility: 'internal' }, + name: 'int', + nodeType: 'ElementaryTypeName', + src: '31:3:0', + typeDescriptions: [Object] }, + value: null, + visibility: 'internal' }, { body: { id: 23, - nodeType: 'Block', - src: '96:55:0', - statements: + nodeType: 'Block', + src: '96:55:0', + statements: [ { expression: { argumentTypes: null, id: 13, @@ -70,31 +70,31 @@ node['ast'].ast = { lValueRequested: false, leftHandSide: { argumentTypes: null, - id: 11, - name: 'x', - nodeType: 'Identifier', - overloadedDeclarations: [], - referencedDeclaration: 2, - src: '106:1:0', - typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' } }, + id: 11, + name: 'x', + nodeType: 'Identifier', + overloadedDeclarations: [], + referencedDeclaration: 2, + src: '106:1:0', + typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' } }, nodeType: 'Assignment', operator: '=', rightHandSide: { argumentTypes: null, - id: 12, - name: '_x', - nodeType: 'Identifier', - overloadedDeclarations: [], - referencedDeclaration: 6, - src: '110:2:0', - typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' } }, + id: 12, + name: '_x', + nodeType: 'Identifier', + overloadedDeclarations: [], + referencedDeclaration: 6, + src: '110:2:0', + typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' } }, src: '106:6:0', typeDescriptions: { typeIdentifier: 't_int256', typeString: 'int256' } }, - id: 14, - nodeType: 'ExpressionStatement', - src: '106:6:0' }, - { expression: + id: 14, + nodeType: 'ExpressionStatement', + src: '106:6:0' }, + { expression: { argumentTypes: null, id: 17, isConstant: false, @@ -107,10 +107,10 @@ node['ast'].ast = { rightHandSide: [Object], src: '122:6:0', typeDescriptions: [Object] }, - id: 18, - nodeType: 'ExpressionStatement', - src: '122:6:0' }, - { expression: + id: 18, + nodeType: 'ExpressionStatement', + src: '122:6:0' }, + { expression: { argumentTypes: null, id: 21, isConstant: false, @@ -123,61 +123,61 @@ node['ast'].ast = { rightHandSide: [Object], src: '138:6:0', typeDescriptions: [Object] }, - id: 22, - nodeType: 'ExpressionStatement', - src: '138:6:0' } ] - }, - documentation: null, - functionSelector: 'e5c19b2d', - id: 24, - implemented: true, - kind: 'function', - modifiers: [], - name: 'set', - nodeType: 'FunctionDefinition', - overrides: null, - parameters: { id: 7, - nodeType: 'ParameterList', - parameters: [Array], - src: '59:8:0' }, - returnParameters: { id: 10, - nodeType: 'ParameterList', - parameters: [Array], - src: '83:8:0' }, - scope: 33, - src: '47:104:0', - stateMutability: 'nonpayable', - virtual: false, - visibility: 'public' }, + id: 22, + nodeType: 'ExpressionStatement', + src: '138:6:0' } ] + }, + documentation: null, + functionSelector: 'e5c19b2d', + id: 24, + implemented: true, + kind: 'function', + modifiers: [], + name: 'set', + nodeType: 'FunctionDefinition', + overrides: null, + parameters: { id: 7, + nodeType: 'ParameterList', + parameters: [Array], + src: '59:8:0' }, + returnParameters: { id: 10, + nodeType: 'ParameterList', + parameters: [Array], + src: '83:8:0' }, + scope: 33, + src: '47:104:0', + stateMutability: 'nonpayable', + virtual: false, + visibility: 'public' }, { body: { id: 31, nodeType: 'Block', src: '214:17:0', statements: [] }, - documentation: null, - functionSelector: '6d4ce63c', - id: 32, - implemented: true, - kind: 'function', - modifiers: [], - name: 'get', - nodeType: 'FunctionDefinition', - overrides: null, - parameters: + documentation: null, + functionSelector: '6d4ce63c', + id: 32, + implemented: true, + kind: 'function', + modifiers: [], + name: 'get', + nodeType: 'FunctionDefinition', + overrides: null, + parameters: { id: 25, - nodeType: 'ParameterList', - parameters: [], - src: '175:2:0' }, - returnParameters: + nodeType: 'ParameterList', + parameters: [], + src: '175:2:0' }, + returnParameters: { id: 30, - nodeType: 'ParameterList', - parameters: [Array], - src: '193:16:0' }, - scope: 33, - src: '163:68:0', - stateMutability: 'nonpayable', - virtual: false, - visibility: 'public' } ], - scope: 34, - src: '0:233:0' + nodeType: 'ParameterList', + parameters: [Array], + src: '193:16:0' }, + scope: 33, + src: '163:68:0', + stateMutability: 'nonpayable', + virtual: false, + visibility: 'public' } ], + scope: 34, + src: '0:233:0' } ], - src: '0:233:0' + src: '0:233:0' } diff --git a/libs/remix-lib/src/execution/txFormat.ts b/libs/remix-lib/src/execution/txFormat.ts index 86718cf207..de6ec91357 100644 --- a/libs/remix-lib/src/execution/txFormat.ts +++ b/libs/remix-lib/src/execution/txFormat.ts @@ -134,21 +134,21 @@ export function encodeConstructorCallAndLinkLibraries (contract, params, funAbi, */ export function linkLibraries (contract, linkLibraries, linkReferences, callback) { let bytecodeToDeploy = contract.evm.bytecode.object - if (bytecodeToDeploy.indexOf('_') >= 0) { - if (linkLibraries && linkReferences) { - for (const libFile in linkLibraries) { - for (const lib in linkLibraries[libFile]) { - const address = linkLibraries[libFile][lib] - if (!isValidAddress(address)) return callback(address + ' is not a valid address. Please check the provided address is valid.') - bytecodeToDeploy = linkLibraryStandardFromlinkReferences(lib, address.replace('0x', ''), bytecodeToDeploy, linkReferences) - } + if (bytecodeToDeploy.indexOf('_') >= 0) { + if (linkLibraries && linkReferences) { + for (const libFile in linkLibraries) { + for (const lib in linkLibraries[libFile]) { + const address = linkLibraries[libFile][lib] + if (!isValidAddress(address)) return callback(address + ' is not a valid address. Please check the provided address is valid.') + bytecodeToDeploy = linkLibraryStandardFromlinkReferences(lib, address.replace('0x', ''), bytecodeToDeploy, linkReferences) } } } - if (bytecodeToDeploy.indexOf('_') >= 0) { - return callback('Failed to link some libraries') - } - return callback(null, bytecodeToDeploy) + } + if (bytecodeToDeploy.indexOf('_') >= 0) { + return callback('Failed to link some libraries') + } + return callback(null, bytecodeToDeploy) } /** @@ -459,7 +459,7 @@ export function parseFunctionParams (params) { args.push(parseFunctionParams(params.substring(i + 1, j))) i = j - 1 } else if (params.charAt(i) === ',' || i === params.length - 1) { // , or end of string - // if startIndex >= 0, it means a parameter was being parsed, it can be first or other parameter + // if startIndex >= 0, it means a parameter was being parsed, it can be first or other parameter if (startIndex >= 0) { let param = params.substring(startIndex, i === params.length - 1 ? undefined : i) param = normalizeParam(param) diff --git a/libs/remix-lib/src/hash.ts b/libs/remix-lib/src/hash.ts index b7d56237b1..624154be99 100644 --- a/libs/remix-lib/src/hash.ts +++ b/libs/remix-lib/src/hash.ts @@ -10,22 +10,22 @@ import { toBuffer, setLengthLeft, isHexString } from '@ethereumjs/util' */ export const keccak = function(a: Buffer, bits: number = 256): Buffer { assertIsBuffer(a) - switch (bits) { - case 224: { - return toBuffer(keccak224(a)) - } - case 256: { - return toBuffer(k256(a)) - } - case 384: { - return toBuffer(keccak384(a)) - } - case 512: { - return toBuffer(keccak512(a)) - } - default: { - throw new Error(`Invald algorithm: keccak${bits}`) - } + switch (bits) { + case 224: { + return toBuffer(keccak224(a)) + } + case 256: { + return toBuffer(k256(a)) + } + case 384: { + return toBuffer(keccak384(a)) + } + case 512: { + return toBuffer(keccak512(a)) + } + default: { + throw new Error(`Invald algorithm: keccak${bits}`) + } } } diff --git a/libs/remix-lib/src/util.ts b/libs/remix-lib/src/util.ts index 205488c941..74317dee97 100644 --- a/libs/remix-lib/src/util.ts +++ b/libs/remix-lib/src/util.ts @@ -222,7 +222,7 @@ export function getinputParameters (value) { if (regex && regex[1]) { return regex[1] } else - return '' + return '' } /** diff --git a/libs/remix-lib/test/txFormat.ts b/libs/remix-lib/test/txFormat.ts index 41ada91d24..4203d452e5 100644 --- a/libs/remix-lib/test/txFormat.ts +++ b/libs/remix-lib/test/txFormat.ts @@ -183,7 +183,7 @@ tape('ContractParameters - (TxFormat.buildData) - link Libraries', function (t) function testLinkLibrary (st, fakeDeployedContracts, callbackDeployLibraries) { const deployMsg = ['creation of library test.sol:lib1 pending...', - 'creation of library test.sol:lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2 pending...'] + 'creation of library test.sol:lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2 pending...'] txFormat.buildData('testContractLinkLibrary', context.contract, context.output.contracts, true, context.contract.abi[0], '', (error, data) => { if (error) { return st.fail(error) } console.log(data) @@ -212,7 +212,7 @@ function testLinkLibrary2 (st, callbackDeployLibraries) { const data = '608060405234801561001057600080fd5b506101e2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d4ce63c14610030575b600080fd5b61003861003a565b005b73f7a10e525d4b168f45f74db1b61f63d3e7619e116344733ae16040518163ffffffff1660e01b815260040160006040518083038186803b15801561007e57600080fd5b505af4158015610092573d6000803e3d6000fd5b5050505073f7a10e525d4b168f45f74db1b61f63d3e7619e336344733ae16040518163ffffffff1660e01b815260040160006040518083038186803b1580156100da57600080fd5b505af41580156100ee573d6000803e3d6000fd5b5050505073f7a10e525d4b168f45f74db1b61f63d3e7619e336344733ae16040518163ffffffff1660e01b815260040160006040518083038186803b15801561013657600080fd5b505af415801561014a573d6000803e3d6000fd5b5050505073f7a10e525d4b168f45f74db1b61f63d3e7619e116344733ae16040518163ffffffff1660e01b815260040160006040518083038186803b15801561019257600080fd5b505af41580156101a6573d6000803e3d6000fd5b5050505056fea264697066735822122007784c53df7f324243100f6642d889a08a88831c3811dd13eebe3163b7eb2e5464736f6c63430006000033' const deployMsg = ['creation of library test.sol:lib1 pending...', - 'creation of library test.sol:lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2 pending...'] + 'creation of library test.sol:lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2_lib2 pending...'] txFormat.encodeConstructorCallAndLinkLibraries(context.contract, '', context.contract.abi[0], librariesReference, context.contract.evm.bytecode.linkReferences, (error, result) => { console.log(error, result) st.equal(data, result.dataHex) diff --git a/libs/remix-simulator/src/methods/blocks.ts b/libs/remix-simulator/src/methods/blocks.ts index cfd8c30ef4..60b47bab25 100644 --- a/libs/remix-simulator/src/methods/blocks.ts +++ b/libs/remix-simulator/src/methods/blocks.ts @@ -43,25 +43,25 @@ export class Blocks { } const transactions = block.transactions.map((t) => { - const hash = '0x' + t.hash().toString('hex') - const tx = this.vmContext.txByHash[hash] - const receipt = this.vmContext.currentVm.web3vm.txsReceipt[hash] - if (receipt) { - return { - blockHash: '0x' + block.hash().toString('hex'), - blockNumber: bigIntToHex(block.header.number), - from: receipt.from, - gas: bigIntToHex(receipt.gas), - chainId: '0xd05', - gasPrice: '0x4a817c800', // 20000000000 - hash: receipt.transactionHash, - input: receipt.input, - nonce: bigIntToHex(tx.nonce), - transactionIndex: this.TX_INDEX, - value: bigIntToHex(tx.value), - to: receipt.to ? receipt.to : null + const hash = '0x' + t.hash().toString('hex') + const tx = this.vmContext.txByHash[hash] + const receipt = this.vmContext.currentVm.web3vm.txsReceipt[hash] + if (receipt) { + return { + blockHash: '0x' + block.hash().toString('hex'), + blockNumber: bigIntToHex(block.header.number), + from: receipt.from, + gas: bigIntToHex(receipt.gas), + chainId: '0xd05', + gasPrice: '0x4a817c800', // 20000000000 + hash: receipt.transactionHash, + input: receipt.input, + nonce: bigIntToHex(tx.nonce), + transactionIndex: this.TX_INDEX, + value: bigIntToHex(tx.value), + to: receipt.to ? receipt.to : null + } } - } }) const b = { baseFeePerGas: '0x01', @@ -101,22 +101,22 @@ export class Blocks { const tx = this.vmContext.txByHash[hash] const receipt = this.vmContext.currentVm.web3vm.txsReceipt[hash] if (receipt) { - return { - blockHash: '0x' + block.hash().toString('hex'), - blockNumber: bigIntToHex(block.header.number), - from: receipt.from, - gas: toHex(receipt.gas), - chainId: '0xd05', - gasPrice: '0x4a817c800', // 20000000000 - hash: receipt.transactionHash, - input: receipt.input, - nonce: bigIntToHex(tx.nonce), - transactionIndex: this.TX_INDEX, - value: bigIntToHex(tx.value), - to: receipt.to ? receipt.to : null - } + return { + blockHash: '0x' + block.hash().toString('hex'), + blockNumber: bigIntToHex(block.header.number), + from: receipt.from, + gas: toHex(receipt.gas), + chainId: '0xd05', + gasPrice: '0x4a817c800', // 20000000000 + hash: receipt.transactionHash, + input: receipt.input, + nonce: bigIntToHex(tx.nonce), + transactionIndex: this.TX_INDEX, + value: bigIntToHex(tx.value), + to: receipt.to ? receipt.to : null + } } - }) + }) const b = { baseFeePerGas: '0x01', number: bigIntToHex(block.header.number), diff --git a/libs/remix-solidity/src/compiler/compiler-abstract.ts b/libs/remix-solidity/src/compiler/compiler-abstract.ts index 84e2ec3373..52371b1d4f 100644 --- a/libs/remix-solidity/src/compiler/compiler-abstract.ts +++ b/libs/remix-solidity/src/compiler/compiler-abstract.ts @@ -3,53 +3,53 @@ import helper from './helper' import { CompilationResult, CompilerInput, CompilationSourceCode } from './types' export class CompilerAbstract { - languageversion: string - data: CompilationResult - source: CompilationSourceCode - input: CompilerInput - constructor (languageversion: string, data: CompilationResult, source: CompilationSourceCode, input?: CompilerInput) { - this.languageversion = languageversion - this.data = data - this.source = source // source code - this.input = input - } - - getContracts () { - return this.data.contracts || {} - } - - getContract (name) { - return helper.getContract(name, this.data.contracts) - } - - visitContracts (calllback) { - return helper.visitContracts(this.data.contracts, calllback) - } - - getData () { - return this.data - } - - getInput () { - return this.input - } - - getAsts () { - return this.data.sources // ast - } - - getSourceName (fileIndex) { - if (this.data && this.data.sources) { - return Object.keys(this.data.sources)[fileIndex] - } else if (Object.keys(this.source.sources).length === 1) { + languageversion: string + data: CompilationResult + source: CompilationSourceCode + input: CompilerInput + constructor (languageversion: string, data: CompilationResult, source: CompilationSourceCode, input?: CompilerInput) { + this.languageversion = languageversion + this.data = data + this.source = source // source code + this.input = input + } + + getContracts () { + return this.data.contracts || {} + } + + getContract (name) { + return helper.getContract(name, this.data.contracts) + } + + visitContracts (calllback) { + return helper.visitContracts(this.data.contracts, calllback) + } + + getData () { + return this.data + } + + getInput () { + return this.input + } + + getAsts () { + return this.data.sources // ast + } + + getSourceName (fileIndex) { + if (this.data && this.data.sources) { + return Object.keys(this.data.sources)[fileIndex] + } else if (Object.keys(this.source.sources).length === 1) { // if we don't have ast, we return the only one filename present. - const sourcesArray = Object.keys(this.source.sources) - return sourcesArray[0] - } - return null + const sourcesArray = Object.keys(this.source.sources) + return sourcesArray[0] } + return null + } - getSourceCode () { - return this.source - } + getSourceCode () { + return this.source + } } diff --git a/libs/remix-solidity/src/compiler/compiler.ts b/libs/remix-solidity/src/compiler/compiler.ts index 86e842d779..b26b2233b3 100644 --- a/libs/remix-solidity/src/compiler/compiler.ts +++ b/libs/remix-solidity/src/compiler/compiler.ts @@ -295,27 +295,27 @@ export class Compiler { return } switch (data.cmd) { - case 'versionLoaded': - if (data.data) this.onCompilerLoaded(data.data, data.license) - break - case 'compiled': - { - let result: CompilationResult - if (data.data && data.job !== undefined && data.job >= 0) { - try { - result = JSON.parse(data.data) - } catch (exception) { - result = { error: { formattedMessage: 'Invalid JSON output from the compiler: ' + exception } } - } - let sources: SourceWithTarget = {} - if (data.job in jobs !== undefined) { - sources = jobs[data.job].sources - delete jobs[data.job] - } - this.onCompilationFinished(result, data.missingInputs, sources, data.input, this.state.currentVersion) - } - break + case 'versionLoaded': + if (data.data) this.onCompilerLoaded(data.data, data.license) + break + case 'compiled': + { + let result: CompilationResult + if (data.data && data.job !== undefined && data.job >= 0) { + try { + result = JSON.parse(data.data) + } catch (exception) { + result = { error: { formattedMessage: 'Invalid JSON output from the compiler: ' + exception } } + } + let sources: SourceWithTarget = {} + if (data.job in jobs !== undefined) { + sources = jobs[data.job].sources + delete jobs[data.job] } + this.onCompilationFinished(result, data.missingInputs, sources, data.input, this.state.currentVersion) + } + break + } } }) diff --git a/libs/remix-solidity/src/compiler/types.ts b/libs/remix-solidity/src/compiler/types.ts index d1001755c0..fd1158e7f0 100644 --- a/libs/remix-solidity/src/compiler/types.ts +++ b/libs/remix-solidity/src/compiler/types.ts @@ -502,6 +502,6 @@ export interface BytecodeObject { } } - export interface EsWebWorkerHandlerInterface { +export interface EsWebWorkerHandlerInterface { getWorker(): Worker } diff --git a/libs/remix-solidity/src/lib/es-web-worker/compiler-worker.ts b/libs/remix-solidity/src/lib/es-web-worker/compiler-worker.ts index 96bac07806..60852272fb 100644 --- a/libs/remix-solidity/src/lib/es-web-worker/compiler-worker.ts +++ b/libs/remix-solidity/src/lib/es-web-worker/compiler-worker.ts @@ -6,42 +6,42 @@ const missingInputs: string[] = [] self.onmessage = (e: MessageEvent) => { const data: MessageToWorker = e.data switch (data.cmd) { - case 'loadVersion': - { - (self as any).importScripts(data.data) - const compiler = setupMethods(self) - compileJSON = (input) => { - try { - const missingInputsCallback = (path) => { - missingInputs.push(path) - return { error: 'Deferred import' } - } - return compiler.compile(input, { import: missingInputsCallback }) - } catch (exception) { - return JSON.stringify({ error: 'Uncaught JavaScript exception:\n' + exception }) - } + case 'loadVersion': + { + (self as any).importScripts(data.data) + const compiler = setupMethods(self) + compileJSON = (input) => { + try { + const missingInputsCallback = (path) => { + missingInputs.push(path) + return { error: 'Deferred import' } } - self.postMessage({ - cmd: 'versionLoaded', - data: compiler.version(), - license: compiler.license() - }) - break + return compiler.compile(input, { import: missingInputsCallback }) + } catch (exception) { + return JSON.stringify({ error: 'Uncaught JavaScript exception:\n' + exception }) } + } + self.postMessage({ + cmd: 'versionLoaded', + data: compiler.version(), + license: compiler.license() + }) + break + } - case 'compile': - missingInputs.length = 0 - if (data.input && compileJSON) { - self.postMessage({ - cmd: 'compiled', - job: data.job, - timestamp: data.timestamp, - data: compileJSON(data.input), - input: data.input, - missingInputs: missingInputs - }) - } - break + case 'compile': + missingInputs.length = 0 + if (data.input && compileJSON) { + self.postMessage({ + cmd: 'compiled', + job: data.job, + timestamp: data.timestamp, + data: compileJSON(data.input), + input: data.input, + missingInputs: missingInputs + }) + } + break } } diff --git a/libs/remix-solidity/src/lib/es-web-worker/es-web-worker-handler.ts b/libs/remix-solidity/src/lib/es-web-worker/es-web-worker-handler.ts index 356505c12d..03ba81cb3d 100644 --- a/libs/remix-solidity/src/lib/es-web-worker/es-web-worker-handler.ts +++ b/libs/remix-solidity/src/lib/es-web-worker/es-web-worker-handler.ts @@ -1,12 +1,12 @@ class ESWebWorkerHandler { - constructor() { + constructor() { - } + } - getWorker () { - // @ts-ignore - return new Worker(new URL('./compiler-worker', import.meta.url)) - } + getWorker () { + // @ts-ignore + return new Worker(new URL('./compiler-worker', import.meta.url)) + } } export default ESWebWorkerHandler \ No newline at end of file diff --git a/libs/remix-tests/src/logger.ts b/libs/remix-tests/src/logger.ts index c82b2b4d4e..e084ed00a2 100644 --- a/libs/remix-tests/src/logger.ts +++ b/libs/remix-tests/src/logger.ts @@ -31,28 +31,28 @@ const logFmt = winston.format.printf((info) => { }) class Log { - logger: Logger; - constructor () { - this.logger = winston.createLogger({ - level: 'info', - transports: [new winston.transports.Console()], - format: winston.format.combine( - winston.format.colorize({ all: true }), - logFmt - ) - }) - } - - setVerbosity (v: LoggerOptions['level']): void { - this.logger.configure({ - level: v, - transports: [new winston.transports.Console()], - format: winston.format.combine( - winston.format.colorize({ all: true }), - logFmt - ) - }) - } + logger: Logger; + constructor () { + this.logger = winston.createLogger({ + level: 'info', + transports: [new winston.transports.Console()], + format: winston.format.combine( + winston.format.colorize({ all: true }), + logFmt + ) + }) + } + + setVerbosity (v: LoggerOptions['level']): void { + this.logger.configure({ + level: v, + transports: [new winston.transports.Console()], + format: winston.format.combine( + winston.format.colorize({ all: true }), + logFmt + ) + }) + } } export default Log diff --git a/libs/remix-tests/tests/testRunner.cli.spec.ts b/libs/remix-tests/tests/testRunner.cli.spec.ts index c4824c9b8b..8ac5505f10 100644 --- a/libs/remix-tests/tests/testRunner.cli.spec.ts +++ b/libs/remix-tests/tests/testRunner.cli.spec.ts @@ -3,35 +3,35 @@ import { resolve } from 'path' import { expect } from 'chai'; describe('testRunner: remix-tests CLI', function(){ - this.timeout(120000) - // remix-tests binary, after build, is used as executable + this.timeout(120000) + // remix-tests binary, after build, is used as executable - const executablePath = resolve(__dirname + '/../../../dist/libs/remix-tests/bin/remix-tests') + const executablePath = resolve(__dirname + '/../../../dist/libs/remix-tests/bin/remix-tests') - const result = spawnSync('ls', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) - if(result) { - const dirContent = result.stdout.toString() - // Install dependencies if 'node_modules' is not already present - if(!dirContent.includes('node_modules')) { - execSync('yarn add @remix-project/remix-lib ../../libs/remix-lib', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) - execSync('yarn add @remix-project/remix-url-resolver ../../libs/remix-url-resolver', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) - execSync('yarn add @remix-project/remix-solidity ../../libs/remix-solidity', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) - execSync('yarn add @remix-project/remix-simulator ../../libs/remix-simulator', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) - execSync('yarn install', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) - } + const result = spawnSync('ls', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) + if(result) { + const dirContent = result.stdout.toString() + // Install dependencies if 'node_modules' is not already present + if(!dirContent.includes('node_modules')) { + execSync('yarn add @remix-project/remix-lib ../../libs/remix-lib', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) + execSync('yarn add @remix-project/remix-url-resolver ../../libs/remix-url-resolver', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) + execSync('yarn add @remix-project/remix-solidity ../../libs/remix-solidity', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) + execSync('yarn add @remix-project/remix-simulator ../../libs/remix-simulator', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) + execSync('yarn install', { cwd: resolve(__dirname + '/../../../dist/libs/remix-tests') }) } + } - describe('test various CLI options', function() { - it('remix-tests version', () => { - const res = spawnSync(executablePath, ['-V']) - // eslint-disable-next-line @typescript-eslint/no-var-requires - expect(res.stdout.toString().trim()).to.equal(require('../package.json').version) - }) + describe('test various CLI options', function() { + it('remix-tests version', () => { + const res = spawnSync(executablePath, ['-V']) + // eslint-disable-next-line @typescript-eslint/no-var-requires + expect(res.stdout.toString().trim()).to.equal(require('../package.json').version) + }) - it('remix-tests help', () => { - const res = spawnSync(executablePath, ['-h']) - const expectedHelp = `Usage: remix-tests [options] [command] + it('remix-tests help', () => { + const res = spawnSync(executablePath, ['-h']) + const expectedHelp = `Usage: remix-tests [options] [command] Arguments: file_path path to test file or directory @@ -55,8 +55,8 @@ Options: Commands: version output the version number help output usage information` - expect(res.stdout.toString().trim()).to.equal(expectedHelp) - }) + expect(res.stdout.toString().trim()).to.equal(expectedHelp) + }) it('remix-tests running a test file', function() { const res = spawnSync(executablePath, [resolve(__dirname + '/examples_0/assert_ok_test.sol')]) diff --git a/libs/remix-tests/tests/testRunner.spec.ts b/libs/remix-tests/tests/testRunner.spec.ts index 56ef68cd8a..cbdc1c4aa1 100644 --- a/libs/remix-tests/tests/testRunner.spec.ts +++ b/libs/remix-tests/tests/testRunner.spec.ts @@ -14,476 +14,476 @@ import { ResultsInterface, TestCbInterface, ResultCbInterface } from '../src/ind // In this specific test, we'll use this helper to exclude `time` keys. // Assertions for the existance of these will be made at the correct places. function deepEqualExcluding(a: any, b: any, excludedKeys: string[]) { - function removeKeysFromObject(obj: any, excludedKeys: string[]) { - if (obj !== Object(obj)) { - return obj - } - - if (Object.prototype.toString.call(obj) !== '[object Array]') { - obj = Object.assign({}, obj) - for (const key of excludedKeys) { - delete obj[key] - } + function removeKeysFromObject(obj: any, excludedKeys: string[]) { + if (obj !== Object(obj)) { + return obj + } - return obj - } + if (Object.prototype.toString.call(obj) !== '[object Array]') { + obj = Object.assign({}, obj) + for (const key of excludedKeys) { + delete obj[key] + } - const newObj = [] - for (const idx in obj) { - newObj[idx] = removeKeysFromObject(obj[idx], excludedKeys); - } + return obj + } - return newObj + const newObj = [] + for (const idx in obj) { + newObj[idx] = removeKeysFromObject(obj[idx], excludedKeys); } - const aStripped: any = removeKeysFromObject(a, excludedKeys); - const bStripped: any = removeKeysFromObject(b, excludedKeys); - assert.deepEqual(aStripped, bStripped) + return newObj + } + + const aStripped: any = removeKeysFromObject(a, excludedKeys); + const bStripped: any = removeKeysFromObject(b, excludedKeys); + assert.deepEqual(aStripped, bStripped) } let accounts: string[] const provider: any = new Provider() async function compileAndDeploy(filename: string, callback: any) { - const web3: Web3 = new Web3() - const sourceASTs: any = {} - await provider.init() - web3.setProvider(provider) - extend(web3) - let compilationData: any - async.waterfall([ - function getAccountList(next: any): void { - web3.eth.getAccounts((_err: Error | null | undefined, _accounts: string[]) => { - accounts = _accounts - web3.eth.defaultAccount = accounts[0] - next(_err) - }) - }, - function compile(next: any): void { - compileFileOrFiles(filename, false, { accounts }, null, next) - }, - function deployAllContracts(compilationResult: compilationInterface, asts, next: any): void { - for (const filename in asts) { - if (filename.endsWith('_test.sol')) - sourceASTs[filename] = asts[filename].ast - } - // eslint-disable-next-line no-useless-catch - try { - compilationData = compilationResult - deployAll(compilationResult, web3, accounts, false, null, next) - } catch (e) { - throw e - } - } - ], function (_err: Error | null | undefined, contracts: any): void { - callback(null, compilationData, contracts, sourceASTs, accounts, web3) - }) + const web3: Web3 = new Web3() + const sourceASTs: any = {} + await provider.init() + web3.setProvider(provider) + extend(web3) + let compilationData: any + async.waterfall([ + function getAccountList(next: any): void { + web3.eth.getAccounts((_err: Error | null | undefined, _accounts: string[]) => { + accounts = _accounts + web3.eth.defaultAccount = accounts[0] + next(_err) + }) + }, + function compile(next: any): void { + compileFileOrFiles(filename, false, { accounts }, null, next) + }, + function deployAllContracts(compilationResult: compilationInterface, asts, next: any): void { + for (const filename in asts) { + if (filename.endsWith('_test.sol')) + sourceASTs[filename] = asts[filename].ast + } + // eslint-disable-next-line no-useless-catch + try { + compilationData = compilationResult + deployAll(compilationResult, web3, accounts, false, null, next) + } catch (e) { + throw e + } + } + ], function (_err: Error | null | undefined, contracts: any): void { + callback(null, compilationData, contracts, sourceASTs, accounts, web3) + }) } describe('testRunner', function () { - let tests: any[] = [], results: ResultsInterface; + let tests: any[] = [], results: ResultsInterface; - const testCallback: TestCbInterface = (err, test) => { - if (err) { throw err } + const testCallback: TestCbInterface = (err, test) => { + if (err) { throw err } - if (test.type === 'testPass' || test.type === 'testFailure') { - assert.ok(test.time, 'test time not reported') - assert.ok(!Number.isInteger(test.time || 0), 'test time should not be an integer') - } - - tests.push(test) + if (test.type === 'testPass' || test.type === 'testFailure') { + assert.ok(test.time, 'test time not reported') + assert.ok(!Number.isInteger(test.time || 0), 'test time should not be an integer') } - const resultsCallback = (done) => { - return (err, _results) => { - if (err) { throw err } - results = _results - done() - } + tests.push(test) + } + + const resultsCallback = (done) => { + return (err, _results) => { + if (err) { throw err } + results = _results + done() } + } - describe('#runTest', function () { - this.timeout(10000) - describe('assert library OK method tests', () => { - const filename: string = __dirname + '/examples_0/assert_ok_test.sol' - - before((done) => { - compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { - runTest('AssertOkTest', contracts.AssertOkTest, compilationData[filename]['AssertOkTest'], asts[filename], { accounts, web3 }, testCallback, resultsCallback(done)) - }) - }) - - after(() => { tests = [] }) - - it('should have 1 passing test', () => { - assert.equal(results.passingNum, 1) - }) - - it('should have 1 failing test', () => { - assert.equal(results.failureNum, 1) - }) - - const hhLogs1 = [["AssertOkTest", "okPassTest"]] - const hhLogs2 = [["AssertOkTest", "okFailTest"]] - it('should return', () => { - deepEqualExcluding(tests, [ - { type: 'accountList', value: accounts }, - { type: 'contract', value: 'AssertOkTest', filename: __dirname + '/examples_0/assert_ok_test.sol' }, - { type: 'testPass', debugTxHash: '0x5b665752a4faf83229259b9b2811d3295be0af633b0051d4b90042283ef55707', value: 'Ok pass test', filename: __dirname + '/examples_0/assert_ok_test.sol', context: 'AssertOkTest', hhLogs: hhLogs1 }, - { type: 'testFailure', debugTxHash: '0xa0a30ad042a7fc3495f72be7ba788d705888ffbbec7173f60bb27e07721510f2', value: 'Ok fail test', filename: __dirname + '/examples_0/assert_ok_test.sol', errMsg: 'okFailTest fails', context: 'AssertOkTest', hhLogs: hhLogs2, assertMethod: 'ok', location: '366:36:0', expected: 'true', returned: 'false' }, - - ], ['time', 'web3']) - }) - }) + describe('#runTest', function () { + this.timeout(10000) + describe('assert library OK method tests', () => { + const filename: string = __dirname + '/examples_0/assert_ok_test.sol' - describe('assert library EQUAL method tests', function () { - const filename: string = __dirname + '/examples_0/assert_equal_test.sol' - - before((done) => { - compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { - runTest('AssertEqualTest', contracts.AssertEqualTest, compilationData[filename]['AssertEqualTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) - - after(() => { tests = [] }) - - it('should have 6 passing test', () => { - assert.equal(results.passingNum, 6) - }) - - it('should have 6 failing test', () => { - assert.equal(results.failureNum, 6) - }) - - it('should return', () => { - deepEqualExcluding(tests, [ - { type: 'accountList', value: accounts }, - { type: 'contract', value: 'AssertEqualTest', filename: __dirname + '/examples_0/assert_equal_test.sol' }, - { type: 'testPass', debugTxHash: '0x233b8d91f0fa068b1a4deae1141178bc3eb79c3d2a6786160595a358363a157c', value: 'Equal uint pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0xa5e39c78663c2e5071c08467047ba5b2650d16081b50369700d46d7f90c4d94b', value: 'Equal uint fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalUintFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '273:57:0', expected: '2', returned: '1' }, - { type: 'testPass', debugTxHash: '0x57af51c2c19db390a4ccf72fa3d32347fb3d998e70820909c7876bd8ccebf8a3', value: 'Equal int pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0x710f3a54a561c009fcf0277273b8fe337b2c493e9e83e0ae02786d487339ca7b', value: 'Equal int fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalIntFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '493:45:0', expected: '2', returned: '-1' }, - { type: 'testPass', debugTxHash: '0x10c1ed8651110ad5de6adcad8e1284aa5c1fd3a998a1e863bbecc0ec855fcd7b', value: 'Equal bool pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0x004871a82968f43e02278eab9dd3d7eb0bbe88b64d459efa50065e5996fe5fad', value: 'Equal bool fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalBoolFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '708:52:0', expected: false, returned: true }, - { type: 'testPass', debugTxHash: '0x64a4d4853ab7907712912cf2120ac2bfd2e08b4767b375250f0e907757546454', value: 'Equal address pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0xcf62fb76e3b2eb95d92aa2671a9e81e30fefb944f55e2fb8b97096c45fc74a38', value: 'Equal address fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalAddressFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1015:130:0', expected: '0x1c6637567229159d1eFD45f95A6675e77727E013', returned: '0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9' }, - { type: 'testPass', debugTxHash: '0x18ef613acc128a21282e09cf920b32ef3be648bb35c0299471ddbbbeeb0faf8c', value: 'Equal bytes32 pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0x86fbf2f14e13d228f80a87a947841270d8c55073adddf78e8d4e2ba05d724ec6', value: 'Equal bytes32 fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalBytes32FailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1670:48:0', expected: '0x72656d6978000000000000000000000000000000000000000000000000000000', returned: '0x72656d6979000000000000000000000000000000000000000000000000000000' }, - { type: 'testPass', debugTxHash: '0x80b3465f2504b74359790baa009237ba066685b24afa65a31814f1ad1bc4f99f', value: 'Equal string pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, - { type: 'testFailure', debugTxHash: '0x88b035a85c5f87f54a805334817f3e4599b4190d98f25947fe14d7804facd8b7', value: 'Equal string fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalStringFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1916:81:0', expected: 'remix-tests', returned: 'remix' } - ], ['time', 'web3']) - }) + before((done) => { + compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { + runTest('AssertOkTest', contracts.AssertOkTest, compilationData[filename]['AssertOkTest'], asts[filename], { accounts, web3 }, testCallback, resultsCallback(done)) }) + }) + + after(() => { tests = [] }) + + it('should have 1 passing test', () => { + assert.equal(results.passingNum, 1) + }) + it('should have 1 failing test', () => { + assert.equal(results.failureNum, 1) + }) + const hhLogs1 = [["AssertOkTest", "okPassTest"]] + const hhLogs2 = [["AssertOkTest", "okFailTest"]] + it('should return', () => { + deepEqualExcluding(tests, [ + { type: 'accountList', value: accounts }, + { type: 'contract', value: 'AssertOkTest', filename: __dirname + '/examples_0/assert_ok_test.sol' }, + { type: 'testPass', debugTxHash: '0x5b665752a4faf83229259b9b2811d3295be0af633b0051d4b90042283ef55707', value: 'Ok pass test', filename: __dirname + '/examples_0/assert_ok_test.sol', context: 'AssertOkTest', hhLogs: hhLogs1 }, + { type: 'testFailure', debugTxHash: '0xa0a30ad042a7fc3495f72be7ba788d705888ffbbec7173f60bb27e07721510f2', value: 'Ok fail test', filename: __dirname + '/examples_0/assert_ok_test.sol', errMsg: 'okFailTest fails', context: 'AssertOkTest', hhLogs: hhLogs2, assertMethod: 'ok', location: '366:36:0', expected: 'true', returned: 'false' }, - describe('assert library NOTEQUAL method tests', function () { - const filename: string = __dirname + '/examples_0/assert_notEqual_test.sol' - - before((done) => { - compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { - runTest('AssertNotEqualTest', contracts.AssertNotEqualTest, compilationData[filename]['AssertNotEqualTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) - - after(() => { tests = [] }) - - it('should have 6 passing test', () => { - assert.equal(results.passingNum, 6) - }) - - it('should have 6 failing test', () => { - assert.equal(results.failureNum, 6) - }) - - it('should return', () => { - deepEqualExcluding(tests, [ - { type: 'accountList', value: accounts }, - { type: 'contract', value: 'AssertNotEqualTest', filename: __dirname + '/examples_0/assert_notEqual_test.sol' }, - { type: 'testPass', debugTxHash: '0xdef34ec7fbc6a3e6c6ef619b424bf8ebf16db16ed3f74500d56d8170d3aeca66', value: 'Not equal uint pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0xfcbd35bc5f460e22e885951d560171d687cf90ccdffc41fb5de1beb7075fe4e9', value: 'Not equal uint fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualUintFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '288:63:0', expected: '1', returned: '1' }, - { type: 'testPass', debugTxHash: '0x7f269855c3fc5c677eca416eb85665b8f10df00d3b7ec5dcc00cbf8e6364cba4', value: 'Not equal int pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0x76555e218571d4ad69496d7d10ae46d30149c4bfd8c6e15ff2a58668ab6fba62', value: 'Not equal int fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualIntFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '525:52:0', expected: '-2', returned: '-2' }, - { type: 'testPass', debugTxHash: '0x5fe790b3f32b9580c1d5f9a2dbb0e10ddcb62846037d3f5800d47a51bb67cc91', value: 'Not equal bool pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0x660d0a73395e6855aea8f6d3450e63640437dc15071842b417c39f40e1d7ae61', value: 'Not equal bool fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualBoolFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '760:57:0', expected: true, returned: true }, - { type: 'testPass', debugTxHash: '0x6fddce5573bd6723acf5a3e4137d698ff78f695873a228939276c4323ddfb132', value: 'Not equal address pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - // eslint-disable-next-line @typescript-eslint/no-loss-of-precision - { type: 'testFailure', debugTxHash: '0x51479e46db802fb598c61ca0dd630345b9d70cc58667b5a80aa79e8119fa7787', value: 'Not equal address fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualAddressFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '1084:136:0', expected: 0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9, returned: 0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9 }, - { type: 'testPass', debugTxHash: '0xbcaf6d8977b655fdedb280e0e9221d728706d41e85e0973d00c8da1d128022c7', value: 'Not equal bytes32 pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0x34008ef0ea908fedbf80471424d801f5069e6e46221f8ee4a2ee16776a6eeef6', value: 'Not equal bytes32 fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualBytes32FailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '1756:54:0', expected: '0x72656d6978000000000000000000000000000000000000000000000000000000', returned: '0x72656d6978000000000000000000000000000000000000000000000000000000' }, - { type: 'testPass', debugTxHash: '0x8e0bc9dedea6e088ca7bd82b1e9fab516be5a52f7716a26ccca8197236aae105', value: 'Not equal string pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, - { type: 'testFailure', debugTxHash: '0x13c6d270c3609ef858dd6d0c79433ca0b43e47b485b2e40ffe363f18f2868ea8', value: 'Not equal string fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualStringFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '2026:81:0', expected: 'remix', returned: 'remix' }, - ], ['time', 'web3']) - }) + ], ['time', 'web3']) + }) + }) + + describe('assert library EQUAL method tests', function () { + const filename: string = __dirname + '/examples_0/assert_equal_test.sol' + + before((done) => { + compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { + runTest('AssertEqualTest', contracts.AssertEqualTest, compilationData[filename]['AssertEqualTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) + + after(() => { tests = [] }) + + it('should have 6 passing test', () => { + assert.equal(results.passingNum, 6) + }) + + it('should have 6 failing test', () => { + assert.equal(results.failureNum, 6) + }) + + it('should return', () => { + deepEqualExcluding(tests, [ + { type: 'accountList', value: accounts }, + { type: 'contract', value: 'AssertEqualTest', filename: __dirname + '/examples_0/assert_equal_test.sol' }, + { type: 'testPass', debugTxHash: '0x233b8d91f0fa068b1a4deae1141178bc3eb79c3d2a6786160595a358363a157c', value: 'Equal uint pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0xa5e39c78663c2e5071c08467047ba5b2650d16081b50369700d46d7f90c4d94b', value: 'Equal uint fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalUintFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '273:57:0', expected: '2', returned: '1' }, + { type: 'testPass', debugTxHash: '0x57af51c2c19db390a4ccf72fa3d32347fb3d998e70820909c7876bd8ccebf8a3', value: 'Equal int pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0x710f3a54a561c009fcf0277273b8fe337b2c493e9e83e0ae02786d487339ca7b', value: 'Equal int fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalIntFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '493:45:0', expected: '2', returned: '-1' }, + { type: 'testPass', debugTxHash: '0x10c1ed8651110ad5de6adcad8e1284aa5c1fd3a998a1e863bbecc0ec855fcd7b', value: 'Equal bool pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0x004871a82968f43e02278eab9dd3d7eb0bbe88b64d459efa50065e5996fe5fad', value: 'Equal bool fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalBoolFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '708:52:0', expected: false, returned: true }, + { type: 'testPass', debugTxHash: '0x64a4d4853ab7907712912cf2120ac2bfd2e08b4767b375250f0e907757546454', value: 'Equal address pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0xcf62fb76e3b2eb95d92aa2671a9e81e30fefb944f55e2fb8b97096c45fc74a38', value: 'Equal address fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalAddressFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1015:130:0', expected: '0x1c6637567229159d1eFD45f95A6675e77727E013', returned: '0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9' }, + { type: 'testPass', debugTxHash: '0x18ef613acc128a21282e09cf920b32ef3be648bb35c0299471ddbbbeeb0faf8c', value: 'Equal bytes32 pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0x86fbf2f14e13d228f80a87a947841270d8c55073adddf78e8d4e2ba05d724ec6', value: 'Equal bytes32 fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalBytes32FailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1670:48:0', expected: '0x72656d6978000000000000000000000000000000000000000000000000000000', returned: '0x72656d6979000000000000000000000000000000000000000000000000000000' }, + { type: 'testPass', debugTxHash: '0x80b3465f2504b74359790baa009237ba066685b24afa65a31814f1ad1bc4f99f', value: 'Equal string pass test', filename: __dirname + '/examples_0/assert_equal_test.sol', context: 'AssertEqualTest' }, + { type: 'testFailure', debugTxHash: '0x88b035a85c5f87f54a805334817f3e4599b4190d98f25947fe14d7804facd8b7', value: 'Equal string fail test', filename: __dirname + '/examples_0/assert_equal_test.sol', errMsg: 'equalStringFailTest fails', context: 'AssertEqualTest', assertMethod: 'equal', location: '1916:81:0', expected: 'remix-tests', returned: 'remix' } + ], ['time', 'web3']) + }) + }) + + - describe('assert library GREATERTHAN method tests', function () { - const filename: string = __dirname + '/examples_0/assert_greaterThan_test.sol' - - before((done) => { - compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { - runTest('AssertGreaterThanTest', contracts.AssertGreaterThanTest, compilationData[filename]['AssertGreaterThanTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) - - after(() => { tests = [] }) - - it('should have 4 passing test', () => { - assert.equal(results.passingNum, 4) - }) - - it('should have 4 failing test', () => { - assert.equal(results.failureNum, 4) - }) - it('should return', () => { - deepEqualExcluding(tests, [ - { type: 'accountList', value: accounts }, - { type: 'contract', value: 'AssertGreaterThanTest', filename: __dirname + '/examples_0/assert_greaterThan_test.sol' }, - { type: 'testPass', debugTxHash: '0xdc325916fd93227b76231131e52e67f8913d395098c5ac767032db9bd757a91c', value: 'Greater than uint pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, - { type: 'testFailure', debugTxHash: '0xf98eea22bb86f13e0bb4072df22b540289a46b332bdb203a1e488d7e14a1dcd4', value: 'Greater than uint fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanUintFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '303:69:0', expected: '4', returned: '1' }, - { type: 'testPass', debugTxHash: '0xef5ef38329ba6aac2f868d53d803053c52b1895a2c25b704260435c141a63bfc', value: 'Greater than int pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, - { type: 'testFailure', debugTxHash: '0x6b9430f3f12c12fb11e5a8d32fef849ab34614e644be20c6b41a25e510453440', value: 'Greater than int fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanIntFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '569:67:0', expected: '1', returned: '-1' }, - { type: 'testPass', debugTxHash: '0x4c6e10815a5e82bf2c60950606dc886317f680028a9229ba2dda17b5ea36325a', value: 'Greater than uint int pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, - { type: 'testFailure', debugTxHash: '0x989c405c32c8e270a5dea69e6250a514c05dacd6fcf018365a241abc28c2497b', value: 'Greater than uint int fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanUintIntFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '845:71:0', expected: '2', returned: '1' }, - { type: 'testPass', debugTxHash: '0x9fed670ae2061929f71780835b7ea3eb7da6d4fb553cd2d5f62950c353165861', value: 'Greater than int uint pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, - { type: 'testFailure', debugTxHash: '0xcf394fd279293cdcf58efc42f3a443595fdb171769a45df01b0c84cd76b3a9a2', value: 'Greater than int uint fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanIntUintFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '1125:76:0', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639836', returned: '100' } - ], ['time', 'web3']) - }) + describe('assert library NOTEQUAL method tests', function () { + const filename: string = __dirname + '/examples_0/assert_notEqual_test.sol' + + before((done) => { + compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { + runTest('AssertNotEqualTest', contracts.AssertNotEqualTest, compilationData[filename]['AssertNotEqualTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) + + after(() => { tests = [] }) + + it('should have 6 passing test', () => { + assert.equal(results.passingNum, 6) + }) + + it('should have 6 failing test', () => { + assert.equal(results.failureNum, 6) + }) + + it('should return', () => { + deepEqualExcluding(tests, [ + { type: 'accountList', value: accounts }, + { type: 'contract', value: 'AssertNotEqualTest', filename: __dirname + '/examples_0/assert_notEqual_test.sol' }, + { type: 'testPass', debugTxHash: '0xdef34ec7fbc6a3e6c6ef619b424bf8ebf16db16ed3f74500d56d8170d3aeca66', value: 'Not equal uint pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0xfcbd35bc5f460e22e885951d560171d687cf90ccdffc41fb5de1beb7075fe4e9', value: 'Not equal uint fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualUintFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '288:63:0', expected: '1', returned: '1' }, + { type: 'testPass', debugTxHash: '0x7f269855c3fc5c677eca416eb85665b8f10df00d3b7ec5dcc00cbf8e6364cba4', value: 'Not equal int pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0x76555e218571d4ad69496d7d10ae46d30149c4bfd8c6e15ff2a58668ab6fba62', value: 'Not equal int fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualIntFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '525:52:0', expected: '-2', returned: '-2' }, + { type: 'testPass', debugTxHash: '0x5fe790b3f32b9580c1d5f9a2dbb0e10ddcb62846037d3f5800d47a51bb67cc91', value: 'Not equal bool pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0x660d0a73395e6855aea8f6d3450e63640437dc15071842b417c39f40e1d7ae61', value: 'Not equal bool fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualBoolFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '760:57:0', expected: true, returned: true }, + { type: 'testPass', debugTxHash: '0x6fddce5573bd6723acf5a3e4137d698ff78f695873a228939276c4323ddfb132', value: 'Not equal address pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + // eslint-disable-next-line @typescript-eslint/no-loss-of-precision + { type: 'testFailure', debugTxHash: '0x51479e46db802fb598c61ca0dd630345b9d70cc58667b5a80aa79e8119fa7787', value: 'Not equal address fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualAddressFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '1084:136:0', expected: 0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9, returned: 0x7994f14563F39875a2F934Ce42cAbF48a93FdDA9 }, + { type: 'testPass', debugTxHash: '0xbcaf6d8977b655fdedb280e0e9221d728706d41e85e0973d00c8da1d128022c7', value: 'Not equal bytes32 pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0x34008ef0ea908fedbf80471424d801f5069e6e46221f8ee4a2ee16776a6eeef6', value: 'Not equal bytes32 fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualBytes32FailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '1756:54:0', expected: '0x72656d6978000000000000000000000000000000000000000000000000000000', returned: '0x72656d6978000000000000000000000000000000000000000000000000000000' }, + { type: 'testPass', debugTxHash: '0x8e0bc9dedea6e088ca7bd82b1e9fab516be5a52f7716a26ccca8197236aae105', value: 'Not equal string pass test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', context: 'AssertNotEqualTest' }, + { type: 'testFailure', debugTxHash: '0x13c6d270c3609ef858dd6d0c79433ca0b43e47b485b2e40ffe363f18f2868ea8', value: 'Not equal string fail test', filename: __dirname + '/examples_0/assert_notEqual_test.sol', errMsg: 'notEqualStringFailTest fails', context: 'AssertNotEqualTest', assertMethod: 'notEqual', location: '2026:81:0', expected: 'remix', returned: 'remix' }, + ], ['time', 'web3']) + }) + }) - describe('assert library LESSERTHAN method tests', function () { - const filename: string = __dirname + '/examples_0/assert_lesserThan_test.sol' - - before((done) => { - compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { - runTest('AssertLesserThanTest', contracts.AssertLesserThanTest, compilationData[filename]['AssertLesserThanTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) - - after(() => { tests = [] }) - - it('should have 4 passing test', () => { - assert.equal(results.passingNum, 4) - }) - - it('should have 4 failing test', () => { - assert.equal(results.failureNum, 4) - }) - - it('should return', () => { - deepEqualExcluding(tests, [ - { type: 'accountList', value: accounts }, - { type: 'contract', value: 'AssertLesserThanTest', filename: __dirname + '/examples_0/assert_lesserThan_test.sol' }, - { type: 'testPass', debugTxHash: '0x524fb46aa0e8a78bc11a99432908d422450c2933d837f858aeacba9b84706d5c', value: 'Lesser than uint pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, - { type: 'testFailure', debugTxHash: '0x0551a67b10b9e13182e8bdb4e530ed92466d5054ae959f999f2c558da2c39d22', value: 'Lesser than uint fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanUintFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '298:67:0', expected: '2', returned: '4' }, - { type: 'testPass', debugTxHash: '0x6d63958d8c3230e837d0ca8335e57262c6e0c6b2c07a5b481842b9ad7329ac28', value: 'Lesser than int pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, - { type: 'testFailure', debugTxHash: '0x38e96ef44f4e785db4d40a95862a9797e8cef6de0ce1d059da72ff42e2f3ca62', value: 'Lesser than int fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanIntFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '557:65:0', expected: '-1', returned: '1' }, - { type: 'testPass', debugTxHash: '0x699f9fc2bf7a14134e89b94cd9dc1c537b5d4581a1c26a34a0c3343ddede9608', value: 'Lesser than uint int pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, - { type: 'testFailure', debugTxHash: '0xce1391dcfbfdc6c611e357e6c1c9f6cd9f257153ee400cb80bd36af6d239c342', value: 'Lesser than uint int fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanUintIntFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '826:71:0', expected: '-1', returned: '115792089237316195423570985008687907853269984665640564039457584007913129639935' }, - { type: 'testPass', debugTxHash: '0x7040e6664c13e6b35ef1daaef93a8cae36a62150d818183892096a98b921800c', value: 'Lesser than int uint pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, - { type: 'testFailure', debugTxHash: '0x8c58bb433ea41760dcf11114232407d703e8ebf7d5e9637e2923282eae5caee6', value: 'Lesser than int uint fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanIntUintFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '1105:69:0', expected: '1', returned: '1' }, - ], ['time', 'web3']) - }) + describe('assert library GREATERTHAN method tests', function () { + const filename: string = __dirname + '/examples_0/assert_greaterThan_test.sol' + + before((done) => { + compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { + runTest('AssertGreaterThanTest', contracts.AssertGreaterThanTest, compilationData[filename]['AssertGreaterThanTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) + + after(() => { tests = [] }) + + it('should have 4 passing test', () => { + assert.equal(results.passingNum, 4) + }) + + it('should have 4 failing test', () => { + assert.equal(results.failureNum, 4) + }) + it('should return', () => { + deepEqualExcluding(tests, [ + { type: 'accountList', value: accounts }, + { type: 'contract', value: 'AssertGreaterThanTest', filename: __dirname + '/examples_0/assert_greaterThan_test.sol' }, + { type: 'testPass', debugTxHash: '0xdc325916fd93227b76231131e52e67f8913d395098c5ac767032db9bd757a91c', value: 'Greater than uint pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, + { type: 'testFailure', debugTxHash: '0xf98eea22bb86f13e0bb4072df22b540289a46b332bdb203a1e488d7e14a1dcd4', value: 'Greater than uint fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanUintFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '303:69:0', expected: '4', returned: '1' }, + { type: 'testPass', debugTxHash: '0xef5ef38329ba6aac2f868d53d803053c52b1895a2c25b704260435c141a63bfc', value: 'Greater than int pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, + { type: 'testFailure', debugTxHash: '0x6b9430f3f12c12fb11e5a8d32fef849ab34614e644be20c6b41a25e510453440', value: 'Greater than int fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanIntFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '569:67:0', expected: '1', returned: '-1' }, + { type: 'testPass', debugTxHash: '0x4c6e10815a5e82bf2c60950606dc886317f680028a9229ba2dda17b5ea36325a', value: 'Greater than uint int pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, + { type: 'testFailure', debugTxHash: '0x989c405c32c8e270a5dea69e6250a514c05dacd6fcf018365a241abc28c2497b', value: 'Greater than uint int fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanUintIntFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '845:71:0', expected: '2', returned: '1' }, + { type: 'testPass', debugTxHash: '0x9fed670ae2061929f71780835b7ea3eb7da6d4fb553cd2d5f62950c353165861', value: 'Greater than int uint pass test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', context: 'AssertGreaterThanTest' }, + { type: 'testFailure', debugTxHash: '0xcf394fd279293cdcf58efc42f3a443595fdb171769a45df01b0c84cd76b3a9a2', value: 'Greater than int uint fail test', filename: __dirname + '/examples_0/assert_greaterThan_test.sol', errMsg: 'greaterThanIntUintFailTest fails', context: 'AssertGreaterThanTest', assertMethod: 'greaterThan', location: '1125:76:0', expected: '115792089237316195423570985008687907853269984665640564039457584007913129639836', returned: '100' } + ], ['time', 'web3']) + }) + }) - describe('test with before', function () { - const filename: string = __dirname + '/examples_1/simple_storage_test.sol' - - before((done) => { - compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { - runTest('MyTest', contracts.MyTest, compilationData[filename]['MyTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) - - after(() => { tests = [] }) - - it('should have 3 passing test', () => { - assert.equal(results.passingNum, 3) - }) - - it('should have 1 failing test', () => { - assert.equal(results.failureNum, 1) - }) - - it('should return 6 messages', () => { - deepEqualExcluding(tests, [ - { type: 'accountList', value: accounts }, - { type: 'contract', value: 'MyTest', filename: __dirname + '/examples_1/simple_storage_test.sol' }, - { type: 'testPass', debugTxHash: '0xed5b6898331119c6e3d1185b9de65d87ad7329cc629a8f2d43b966cf180a5dc1', value: 'Initial value should be100', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' }, - { type: 'testPass', debugTxHash: '0x79cae5c4f44edfd7ae3490e01c75df5741b107672cef5e69800e4d30d380a721', value: 'Initial value should not be200', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' }, - { type: 'testFailure', debugTxHash: '0x24a20f7643e88f891e469ef495911ab0b75f99e2b09b9b091e688674910d1506', value: 'Should trigger one fail', filename: __dirname + '/examples_1/simple_storage_test.sol', errMsg: 'uint test 1 fails', context: 'MyTest', assertMethod: 'equal', location: '532:51:1', expected: '2', returned: '1' }, - { type: 'testPass', debugTxHash: '0x08b1f60c908b7e6cf2dd24fc166c755f0fe5336aebfb325cae4ce00ea9bbf932', value: 'Should trigger one pass', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' } - ], ['time', 'web3']) - }) + describe('assert library LESSERTHAN method tests', function () { + const filename: string = __dirname + '/examples_0/assert_lesserThan_test.sol' + + before((done) => { + compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { + runTest('AssertLesserThanTest', contracts.AssertLesserThanTest, compilationData[filename]['AssertLesserThanTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) + + after(() => { tests = [] }) + + it('should have 4 passing test', () => { + assert.equal(results.passingNum, 4) + }) + + it('should have 4 failing test', () => { + assert.equal(results.failureNum, 4) + }) + + it('should return', () => { + deepEqualExcluding(tests, [ + { type: 'accountList', value: accounts }, + { type: 'contract', value: 'AssertLesserThanTest', filename: __dirname + '/examples_0/assert_lesserThan_test.sol' }, + { type: 'testPass', debugTxHash: '0x524fb46aa0e8a78bc11a99432908d422450c2933d837f858aeacba9b84706d5c', value: 'Lesser than uint pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, + { type: 'testFailure', debugTxHash: '0x0551a67b10b9e13182e8bdb4e530ed92466d5054ae959f999f2c558da2c39d22', value: 'Lesser than uint fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanUintFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '298:67:0', expected: '2', returned: '4' }, + { type: 'testPass', debugTxHash: '0x6d63958d8c3230e837d0ca8335e57262c6e0c6b2c07a5b481842b9ad7329ac28', value: 'Lesser than int pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, + { type: 'testFailure', debugTxHash: '0x38e96ef44f4e785db4d40a95862a9797e8cef6de0ce1d059da72ff42e2f3ca62', value: 'Lesser than int fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanIntFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '557:65:0', expected: '-1', returned: '1' }, + { type: 'testPass', debugTxHash: '0x699f9fc2bf7a14134e89b94cd9dc1c537b5d4581a1c26a34a0c3343ddede9608', value: 'Lesser than uint int pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, + { type: 'testFailure', debugTxHash: '0xce1391dcfbfdc6c611e357e6c1c9f6cd9f257153ee400cb80bd36af6d239c342', value: 'Lesser than uint int fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanUintIntFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '826:71:0', expected: '-1', returned: '115792089237316195423570985008687907853269984665640564039457584007913129639935' }, + { type: 'testPass', debugTxHash: '0x7040e6664c13e6b35ef1daaef93a8cae36a62150d818183892096a98b921800c', value: 'Lesser than int uint pass test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', context: 'AssertLesserThanTest' }, + { type: 'testFailure', debugTxHash: '0x8c58bb433ea41760dcf11114232407d703e8ebf7d5e9637e2923282eae5caee6', value: 'Lesser than int uint fail test', filename: __dirname + '/examples_0/assert_lesserThan_test.sol', errMsg: 'lesserThanIntUintFailTest fails', context: 'AssertLesserThanTest', assertMethod: 'lesserThan', location: '1105:69:0', expected: '1', returned: '1' }, + ], ['time', 'web3']) + }) + }) + + describe('test with before', function () { + const filename: string = __dirname + '/examples_1/simple_storage_test.sol' - describe('test with beforeEach', function () { - const filename: string = __dirname + '/examples_2/simple_storage_test.sol' - - before(done => { - compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { - runTest('MyTest', contracts.MyTest, compilationData[filename]['MyTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) - - after(() => { tests = [] }) - - it('should have 2 passing tests', () => { - assert.equal(results.passingNum, 2) - }) - - it('should 0 failing tests', () => { - assert.equal(results.failureNum, 0) - }) - - it('should return 4 messages', () => { - deepEqualExcluding(tests, [ - { type: 'accountList', value: accounts }, - { type: 'contract', value: 'MyTest', filename: __dirname + '/examples_2/simple_storage_test.sol' }, - { type: 'testPass', debugTxHash: '0xed5b6898331119c6e3d1185b9de65d87ad7329cc629a8f2d43b966cf180a5dc1', value: 'Initial value should be100', filename: __dirname + '/examples_2/simple_storage_test.sol', context: 'MyTest' }, - { type: 'testPass', debugTxHash: '0x8ed5b4858405b43ad4052f5690b4b711c0f6cdeb67a64f54084417d43bc54308', value: 'Value is set200', filename: __dirname + '/examples_2/simple_storage_test.sol', context: 'MyTest' } - ], ['time', 'web3']) - }) + before((done) => { + compileAndDeploy(filename, (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) => { + runTest('MyTest', contracts.MyTest, compilationData[filename]['MyTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) + + after(() => { tests = [] }) + + it('should have 3 passing test', () => { + assert.equal(results.passingNum, 3) + }) + + it('should have 1 failing test', () => { + assert.equal(results.failureNum, 1) + }) + + it('should return 6 messages', () => { + deepEqualExcluding(tests, [ + { type: 'accountList', value: accounts }, + { type: 'contract', value: 'MyTest', filename: __dirname + '/examples_1/simple_storage_test.sol' }, + { type: 'testPass', debugTxHash: '0xed5b6898331119c6e3d1185b9de65d87ad7329cc629a8f2d43b966cf180a5dc1', value: 'Initial value should be100', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' }, + { type: 'testPass', debugTxHash: '0x79cae5c4f44edfd7ae3490e01c75df5741b107672cef5e69800e4d30d380a721', value: 'Initial value should not be200', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' }, + { type: 'testFailure', debugTxHash: '0x24a20f7643e88f891e469ef495911ab0b75f99e2b09b9b091e688674910d1506', value: 'Should trigger one fail', filename: __dirname + '/examples_1/simple_storage_test.sol', errMsg: 'uint test 1 fails', context: 'MyTest', assertMethod: 'equal', location: '532:51:1', expected: '2', returned: '1' }, + { type: 'testPass', debugTxHash: '0x08b1f60c908b7e6cf2dd24fc166c755f0fe5336aebfb325cae4ce00ea9bbf932', value: 'Should trigger one pass', filename: __dirname + '/examples_1/simple_storage_test.sol', context: 'MyTest' } + ], ['time', 'web3']) + }) + }) + + describe('test with beforeEach', function () { + const filename: string = __dirname + '/examples_2/simple_storage_test.sol' - // Test string equality - describe('test string equality', function () { - const filename: string = __dirname + '/examples_3/simple_string_test.sol' - - before(done => { - compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { - runTest('StringTest', contracts.StringTest, compilationData[filename]['StringTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) - - after(() => { tests = [] }) - - it('should 2 passing tests', () => { - assert.equal(results.passingNum, 2) - }) - - it('should return 4 messages', () => { - deepEqualExcluding(tests, [ - { type: 'accountList', value: accounts }, - { type: 'contract', value: 'StringTest', filename: __dirname + '/examples_3/simple_string_test.sol' }, - { type: 'testPass', debugTxHash: '0x3567da76ffbec37e3b43a41987a7ff3e61b41b4c544f35c010d2d4b39568d6d4', value: 'Initial value should be hello world', filename: __dirname + '/examples_3/simple_string_test.sol', context: 'StringTest' }, - { type: 'testPass', debugTxHash: '0x8619b743ccc99be7d5347a064732474b2d1b69844be65b0e7754c6ac1340d275', value: 'Value should not be hello wordl', filename: __dirname + '/examples_3/simple_string_test.sol', context: 'StringTest' } - ], ['time', 'web3']) - }) + before(done => { + compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { + runTest('MyTest', contracts.MyTest, compilationData[filename]['MyTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) + + after(() => { tests = [] }) + + it('should have 2 passing tests', () => { + assert.equal(results.passingNum, 2) + }) + + it('should 0 failing tests', () => { + assert.equal(results.failureNum, 0) + }) + + it('should return 4 messages', () => { + deepEqualExcluding(tests, [ + { type: 'accountList', value: accounts }, + { type: 'contract', value: 'MyTest', filename: __dirname + '/examples_2/simple_storage_test.sol' }, + { type: 'testPass', debugTxHash: '0xed5b6898331119c6e3d1185b9de65d87ad7329cc629a8f2d43b966cf180a5dc1', value: 'Initial value should be100', filename: __dirname + '/examples_2/simple_storage_test.sol', context: 'MyTest' }, + { type: 'testPass', debugTxHash: '0x8ed5b4858405b43ad4052f5690b4b711c0f6cdeb67a64f54084417d43bc54308', value: 'Value is set200', filename: __dirname + '/examples_2/simple_storage_test.sol', context: 'MyTest' } + ], ['time', 'web3']) + }) + }) - // Test multiple directory import in test contract - describe('test multiple directory import in test contract', function () { - const filename: string = __dirname + '/examples_5/test/simple_storage_test.sol' - - before(done => { - compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { - runTest('StorageResolveTest', contracts.StorageResolveTest, compilationData[filename]['StorageResolveTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) - - after(() => { tests = [] }) - - it('should 3 passing tests', () => { - assert.equal(results.passingNum, 3) - }) - - it('should return 4 messages', () => { - deepEqualExcluding(tests, [ - { type: 'accountList', value: accounts }, - { type: 'contract', value: 'StorageResolveTest', filename: __dirname + '/examples_5/test/simple_storage_test.sol' }, - { type: 'testPass', debugTxHash: '0xed5b6898331119c6e3d1185b9de65d87ad7329cc629a8f2d43b966cf180a5dc1', value: 'Initial value should be100', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' }, - { type: 'testPass', debugTxHash: '0x6893fe4f5a83cc51f03c9237ab93b93ffd826236167d58e20666be4c1b3128a4', value: 'Check if even', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' }, - { type: 'testPass', debugTxHash: '0x64e600b32be681b68926660042ddd96f22d07949b424959811b8acb56e72f719', value: 'Check if odd', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' } - ], ['time', 'web3']) - }) + // Test string equality + describe('test string equality', function () { + const filename: string = __dirname + '/examples_3/simple_string_test.sol' + + before(done => { + compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { + runTest('StringTest', contracts.StringTest, compilationData[filename]['StringTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) + + after(() => { tests = [] }) + + it('should 2 passing tests', () => { + assert.equal(results.passingNum, 2) + }) + + it('should return 4 messages', () => { + deepEqualExcluding(tests, [ + { type: 'accountList', value: accounts }, + { type: 'contract', value: 'StringTest', filename: __dirname + '/examples_3/simple_string_test.sol' }, + { type: 'testPass', debugTxHash: '0x3567da76ffbec37e3b43a41987a7ff3e61b41b4c544f35c010d2d4b39568d6d4', value: 'Initial value should be hello world', filename: __dirname + '/examples_3/simple_string_test.sol', context: 'StringTest' }, + { type: 'testPass', debugTxHash: '0x8619b743ccc99be7d5347a064732474b2d1b69844be65b0e7754c6ac1340d275', value: 'Value should not be hello wordl', filename: __dirname + '/examples_3/simple_string_test.sol', context: 'StringTest' } + ], ['time', 'web3']) + }) + }) - //Test SafeMath library methods - describe('test SafeMath library', function () { - const filename: string = __dirname + '/examples_4/SafeMath_test.sol' + // Test multiple directory import in test contract + describe('test multiple directory import in test contract', function () { + const filename: string = __dirname + '/examples_5/test/simple_storage_test.sol' - before(done => { - compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { - runTest('SafeMathTest', contracts.SafeMathTest, compilationData[filename]['SafeMathTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) + before(done => { + compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { + runTest('StorageResolveTest', contracts.StorageResolveTest, compilationData[filename]['StorageResolveTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) + }) + }) + + after(() => { tests = [] }) + + it('should 3 passing tests', () => { + assert.equal(results.passingNum, 3) + }) + + it('should return 4 messages', () => { + deepEqualExcluding(tests, [ + { type: 'accountList', value: accounts }, + { type: 'contract', value: 'StorageResolveTest', filename: __dirname + '/examples_5/test/simple_storage_test.sol' }, + { type: 'testPass', debugTxHash: '0xed5b6898331119c6e3d1185b9de65d87ad7329cc629a8f2d43b966cf180a5dc1', value: 'Initial value should be100', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' }, + { type: 'testPass', debugTxHash: '0x6893fe4f5a83cc51f03c9237ab93b93ffd826236167d58e20666be4c1b3128a4', value: 'Check if even', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' }, + { type: 'testPass', debugTxHash: '0x64e600b32be681b68926660042ddd96f22d07949b424959811b8acb56e72f719', value: 'Check if odd', filename: __dirname + '/examples_5/test/simple_storage_test.sol', context: 'StorageResolveTest' } + ], ['time', 'web3']) + }) + }) - after(() => { tests = [] }) + //Test SafeMath library methods + describe('test SafeMath library', function () { + const filename: string = __dirname + '/examples_4/SafeMath_test.sol' - it('should have 10 passing tests', () => { - assert.equal(results.passingNum, 10) - }) - it('should have 0 failing tests', () => { - assert.equal(results.failureNum, 0) - }) + before(done => { + compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { + runTest('SafeMathTest', contracts.SafeMathTest, compilationData[filename]['SafeMathTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) - //Test signed/unsigned integer weight - describe('test number weight', function () { - const filename: string = __dirname + '/number/number_test.sol' + after(() => { tests = [] }) - before(done => { - compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { - runTest('IntegerTest', contracts.IntegerTest, compilationData[filename]['IntegerTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) + it('should have 10 passing tests', () => { + assert.equal(results.passingNum, 10) + }) + it('should have 0 failing tests', () => { + assert.equal(results.failureNum, 0) + }) + }) - after(() => { tests = [] }) + //Test signed/unsigned integer weight + describe('test number weight', function () { + const filename: string = __dirname + '/number/number_test.sol' - it('should have 6 passing tests', () => { - assert.equal(results.passingNum, 6) - }) - it('should have 2 failing tests', () => { - assert.equal(results.failureNum, 2) - }) + before(done => { + compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { + runTest('IntegerTest', contracts.IntegerTest, compilationData[filename]['IntegerTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) - // Test Transaction with custom sender & value - describe('various sender', function () { - const filename: string = __dirname + '/various_sender/sender_and_value_test.sol' + after(() => { tests = [] }) - before(done => { - compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { - runTest('SenderAndValueTest', contracts.SenderAndValueTest, compilationData[filename]['SenderAndValueTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) - }) - }) + it('should have 6 passing tests', () => { + assert.equal(results.passingNum, 6) + }) + it('should have 2 failing tests', () => { + assert.equal(results.failureNum, 2) + }) + }) - after(() => { tests = [] }) + // Test Transaction with custom sender & value + describe('various sender', function () { + const filename: string = __dirname + '/various_sender/sender_and_value_test.sol' - it('should have 17 passing tests', () => { - assert.equal(results.passingNum, 17) - }) - it('should have 0 failing tests', () => { - assert.equal(results.failureNum, 0) - }) + before(done => { + compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { + runTest('SenderAndValueTest', contracts.SenderAndValueTest, compilationData[filename]['SenderAndValueTest'], asts[filename], { accounts }, testCallback, resultsCallback(done)) }) + }) - // Test `runTest` method without sending contract object (should throw error) - describe('runTest method without contract json interface', function () { - const filename: string = __dirname + '/various_sender/sender_and_value_test.sol' - const errorCallback: any = (done) => { - return (err, _results) => { - if (err && err.message.includes('Contract interface not available')) { - results = _results - done() - } - else throw err - } - } - before(done => { - compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { - runTest('SenderAndValueTest', undefined, compilationData[filename]['SenderAndValueTest'], asts[filename], { accounts }, testCallback, errorCallback(done)) - }) - }) - - it('should have 0 passing tests', () => { - assert.equal(results.passingNum, 0) - }) - it('should have 0 failing tests', () => { - assert.equal(results.failureNum, 0) - }) - }) + after(() => { tests = [] }) + + it('should have 17 passing tests', () => { + assert.equal(results.passingNum, 17) + }) + it('should have 0 failing tests', () => { + assert.equal(results.failureNum, 0) + }) + }) + // Test `runTest` method without sending contract object (should throw error) + describe('runTest method without contract json interface', function () { + const filename: string = __dirname + '/various_sender/sender_and_value_test.sol' + const errorCallback: any = (done) => { + return (err, _results) => { + if (err && err.message.includes('Contract interface not available')) { + results = _results + done() + } + else throw err + } + } + before(done => { + compileAndDeploy(filename, function (_err: Error | null | undefined, compilationData: any, contracts: any, asts: any, accounts: string[], web3: any) { + runTest('SenderAndValueTest', undefined, compilationData[filename]['SenderAndValueTest'], asts[filename], { accounts }, testCallback, errorCallback(done)) + }) + }) + + it('should have 0 passing tests', () => { + assert.equal(results.passingNum, 0) + }) + it('should have 0 failing tests', () => { + assert.equal(results.failureNum, 0) + }) }) + + }) }) \ No newline at end of file diff --git a/libs/remix-ui/app/src/lib/remix-app/components/modals/modal-wrapper.tsx b/libs/remix-ui/app/src/lib/remix-app/components/modals/modal-wrapper.tsx index 450d59f1de..38c8d8579e 100644 --- a/libs/remix-ui/app/src/lib/remix-app/components/modals/modal-wrapper.tsx +++ b/libs/remix-ui/app/src/lib/remix-app/components/modals/modal-wrapper.tsx @@ -74,10 +74,10 @@ const ModalWrapper = (props: ModalWrapperProps) => { const createForm = (validation: ValidationResult) => { return ( <> -
+ {props.message} -
- {validation && !validation.valid && {validation.message}} + + {validation && !validation.valid && {validation.message}} ) } @@ -86,30 +86,30 @@ const ModalWrapper = (props: ModalWrapperProps) => { data.current = props.data if (props.modalType) { switch (props.modalType) { - case ModalTypes.prompt: - case ModalTypes.password: - setState({ - ...props, - okFn: onFinishPrompt, - cancelFn: onCancelFn, - message: createModalMessage(props.defaultValue, { valid: true }) - }) - break - case ModalTypes.form: - setState({ - ...props, - okFn: onFinishPrompt, - cancelFn: onCancelFn, - message: createForm({ valid: true }) - }) - break - default: - setState({ - ...props, - okFn: onOkFn, - cancelFn: onCancelFn - }) - break + case ModalTypes.prompt: + case ModalTypes.password: + setState({ + ...props, + okFn: onFinishPrompt, + cancelFn: onCancelFn, + message: createModalMessage(props.defaultValue, { valid: true }) + }) + break + case ModalTypes.form: + setState({ + ...props, + okFn: onFinishPrompt, + cancelFn: onCancelFn, + message: createForm({ valid: true }) + }) + break + default: + setState({ + ...props, + okFn: onOkFn, + cancelFn: onCancelFn + }) + break } } else { setState({ diff --git a/libs/remix-ui/app/src/lib/remix-app/reducer/modals.ts b/libs/remix-ui/app/src/lib/remix-app/reducer/modals.ts index e2961285d6..4330d967a6 100644 --- a/libs/remix-ui/app/src/lib/remix-app/reducer/modals.ts +++ b/libs/remix-ui/app/src/lib/remix-app/reducer/modals.ts @@ -4,80 +4,80 @@ import { AppModal, ModalState } from '../interface' export const modalReducer = (state: ModalState = ModalInitialState, action: ModalAction) => { switch (action.type) { - case modalActionTypes.setModal: { - const timestamp = Date.now() - const focusModal: AppModal = { - timestamp, - id: action.payload.id || timestamp.toString(), - hide: false, - title: action.payload.title, - validationFn: action.payload.validationFn, - message: action.payload.message, - okLabel: action.payload.okLabel, - okFn: action.payload.okFn, - cancelLabel: action.payload.cancelLabel, - cancelFn: action.payload.cancelFn, - modalType: action.payload.modalType, - defaultValue: action.payload.defaultValue, - hideFn: action.payload.hideFn, - resolve: action.payload.resolve, - next: action.payload.next, - data: action.payload.data - } + case modalActionTypes.setModal: { + const timestamp = Date.now() + const focusModal: AppModal = { + timestamp, + id: action.payload.id || timestamp.toString(), + hide: false, + title: action.payload.title, + validationFn: action.payload.validationFn, + message: action.payload.message, + okLabel: action.payload.okLabel, + okFn: action.payload.okFn, + cancelLabel: action.payload.cancelLabel, + cancelFn: action.payload.cancelFn, + modalType: action.payload.modalType, + defaultValue: action.payload.defaultValue, + hideFn: action.payload.hideFn, + resolve: action.payload.resolve, + next: action.payload.next, + data: action.payload.data + } - const modalList: AppModal[] = state.modals.slice() - modalList.push(focusModal) + const modalList: AppModal[] = state.modals.slice() + modalList.push(focusModal) - if (modalList.length === 1) { - return { ...state, modals: modalList, focusModal } - } else { - return { ...state, modals: modalList } - } - } - case modalActionTypes.handleHideModal: { - setTimeout(() => { - if (state.focusModal.hideFn) { - state.focusModal.hideFn() - } - if (state.focusModal.resolve) { - state.focusModal.resolve(undefined) - } - if (state.focusModal.next) { - state.focusModal.next() - } - }, 250) - const modalList: AppModal[] = state.modals.slice() - modalList.shift() // remove the current modal from the list - state.focusModal = { ...state.focusModal, hide: true, message: null } + if (modalList.length === 1) { + return { ...state, modals: modalList, focusModal } + } else { return { ...state, modals: modalList } } - case modalActionTypes.processQueue: { - const modalList: AppModal[] = state.modals.slice() - if (modalList.length) { - const focusModal = modalList[0] // extract the next modal from the list - return { ...state, modals: modalList, focusModal } - } else { - return { ...state, modals: modalList } + } + case modalActionTypes.handleHideModal: { + setTimeout(() => { + if (state.focusModal.hideFn) { + state.focusModal.hideFn() } - } - case modalActionTypes.setToast: { - const toasterList = state.toasters.slice() - toasterList.push(action.payload) - if (toasterList.length === 1) { - return { ...state, toasters: toasterList, focusToaster: action.payload } - } else { - return { ...state, toasters: toasterList } + if (state.focusModal.resolve) { + state.focusModal.resolve(undefined) } - } - case modalActionTypes.handleToaster: { - const toasterList = state.toasters.slice() - toasterList.shift() - if (toasterList.length) { - const toaster = toasterList[0] - return { ...state, toasters: toasterList, focusToaster: toaster } - } else { - return { ...state, toasters: [] } + if (state.focusModal.next) { + state.focusModal.next() } + }, 250) + const modalList: AppModal[] = state.modals.slice() + modalList.shift() // remove the current modal from the list + state.focusModal = { ...state.focusModal, hide: true, message: null } + return { ...state, modals: modalList } + } + case modalActionTypes.processQueue: { + const modalList: AppModal[] = state.modals.slice() + if (modalList.length) { + const focusModal = modalList[0] // extract the next modal from the list + return { ...state, modals: modalList, focusModal } + } else { + return { ...state, modals: modalList } + } + } + case modalActionTypes.setToast: { + const toasterList = state.toasters.slice() + toasterList.push(action.payload) + if (toasterList.length === 1) { + return { ...state, toasters: toasterList, focusToaster: action.payload } + } else { + return { ...state, toasters: toasterList } } } + case modalActionTypes.handleToaster: { + const toasterList = state.toasters.slice() + toasterList.shift() + if (toasterList.length) { + const toaster = toasterList[0] + return { ...state, toasters: toasterList, focusToaster: toaster } + } else { + return { ...state, toasters: [] } + } + } + } } diff --git a/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx b/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx index a70892796f..faf4dc8f39 100644 --- a/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx +++ b/libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx @@ -43,10 +43,10 @@ export const RemixUiCheckbox = ({ const childJSXWithTooltip = ( + tooltipText={title} + tooltipId={`${name}Tooltip`} + placement={tooltipPlacement} + >
- - -
+ + + ) return ( title ? (childJSXWithTooltip) : (childJSX) diff --git a/libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx b/libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx index 2586761ab7..fa01696604 100644 --- a/libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx +++ b/libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx @@ -52,8 +52,8 @@ export const CopyToClipboard = (props: ICopyToClipboard) => { const childJSX = ( children || () + {...otherProps} + >) ) return ( diff --git a/libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts b/libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts index 4830f0debb..34fc44ed7e 100644 --- a/libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts +++ b/libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts @@ -49,16 +49,16 @@ export const DebuggerApiMixin = (Base) => class extends Base { await this.call('editor', 'highlight', lineColumnPos, path, '', { focus: true }) const label = `${stepDetail.op} costs ${stepDetail.gasCost} gas - this line costs ${lineGasCost} gas - ${stepDetail.gas} gas left` const linetext: lineText = { - content: label, - position: lineColumnPos, - hide: false, - className: 'text-muted small', - afterContentClassName: 'text-muted small fas fa-gas-pump pl-4', - from: 'debugger', - hoverMessage: [{ - value: label, - }, - ], + content: label, + position: lineColumnPos, + hide: false, + className: 'text-muted small', + afterContentClassName: 'text-muted small fas fa-gas-pump pl-4', + from: 'debugger', + hoverMessage: [{ + value: label, + }, + ], } await this.call('editor', 'addLineText' as any, linetext, path) } diff --git a/libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx b/libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx index a63f98bb36..c8d09866aa 100644 --- a/libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx @@ -64,81 +64,81 @@ export const ButtonNavigation = ({ stepOverBack, stepIntoBack, stepIntoForward, placement: 'top-start', tagId: 'overbackTooltip', tooltipMsg: 'Step over back' - }, + }, stepBackJSX : { markup: ( -
{ stepIntoBack && stepIntoBack() }} data-id="buttonNavigatorIntoBack" id="buttonNavigatorIntoBackContainer"> - -
- ), - placement: 'top-start', - tagId: 'intobackTooltip', - tooltipMsg: 'Step back' - }, + + + ), + placement: 'top-start', + tagId: 'intobackTooltip', + tooltipMsg: 'Step back' + }, stepIntoJSX : { markup: ( -
{ stepIntoForward && stepIntoForward() }} data-id="buttonNavigatorIntoForward" id="buttonNavigatorIntoFowardContainer"> - -
- ), - placement: 'top-start', - tagId: 'intoforwardTooltip', - tooltipMsg: 'Step into' - }, + + + ), + placement: 'top-start', + tagId: 'intoforwardTooltip', + tooltipMsg: 'Step into' + }, stepOverForwardJSX : { markup: ( -
{ stepOverForward && stepOverForward() }} data-id="buttonNavigatorOverForward" id="buttonNavigatorOverForwardContainer"> - -
- ), - placement: 'top-end', - tagId: 'overbackTooltip', - tooltipMsg: 'Step over forward', + + + ), + placement: 'top-end', + tagId: 'overbackTooltip', + tooltipMsg: 'Step over forward', + } } -} const jumpMarkupStructure = { jumpPreviousBreakpointJSX : { markup: ( -
{ jumpPreviousBreakpoint && jumpPreviousBreakpoint() }} data-id="buttonNavigatorJumpPreviousBreakpoint"> - -
- ), - placement: 'bottom-start', - tagId: 'jumppreviousbreakpointTooltip', - tooltipMsg: 'Jump to the previous breakpoint' - }, +
{ jumpPreviousBreakpoint && jumpPreviousBreakpoint() }} data-id="buttonNavigatorJumpPreviousBreakpoint"> + +
+ ), + placement: 'bottom-start', + tagId: 'jumppreviousbreakpointTooltip', + tooltipMsg: 'Jump to the previous breakpoint' + }, jumpOutJSX : { markup: ( -
{ jumpOut && jumpOut() }} data-id="buttonNavigatorJumpOut" id="buttonNavigatorJumpOutContainer"> - -
- ), - placement: 'bottom-end', - tagId: 'jumpoutTooltip', - tooltipMsg: 'Jump out' +
{ jumpOut && jumpOut() }} data-id="buttonNavigatorJumpOut" id="buttonNavigatorJumpOutContainer"> + +
+ ), + placement: 'bottom-end', + tagId: 'jumpoutTooltip', + tooltipMsg: 'Jump out' }, jumpNextBreakpointJSX : { markup: ( -
{ jumpNextBreakpoint && jumpNextBreakpoint() }} data-id="buttonNavigatorJumpNextBreakpoint" id="buttonNavigatorJumpNextBreakpointContainer"> - -
- ), - placement: 'bottom-end', +
{ jumpNextBreakpoint && jumpNextBreakpoint() }} data-id="buttonNavigatorJumpNextBreakpoint" id="buttonNavigatorJumpNextBreakpointContainer"> + +
+ ), + placement: 'bottom-end', tagId: 'jumpnextbreakpointTooltip', tooltipMsg: 'Jump to the next breakpoint' } @@ -162,18 +162,18 @@ export const ButtonNavigation = ({ stepOverBack, stepIntoBack, stepIntoForward,
- { - Object.keys(jumpMarkupStructure).map(x => ( - - {jumpMarkupStructure[x].markup} + { + Object.keys(jumpMarkupStructure).map(x => ( + + {jumpMarkupStructure[x].markup} - )) - } + )) + }
This call has reverted, state changes made during the call will be reverted. diff --git a/libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx b/libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx index d651e8e16c..c8942526d1 100644 --- a/libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx @@ -379,7 +379,7 @@ export const DebuggerUI = (props: DebuggerUIProps) => { data-id="debugGeneratedSourcesLabel" className="form-check-label custom-control-label" htmlFor="debugGeneratedSourcesInput"> - (Solidity {'>='} v0.7.2) + (Solidity {'>='} v0.7.2) ) diff --git a/libs/remix-ui/debugger-ui/src/lib/tx-browser/tx-browser.tsx b/libs/remix-ui/debugger-ui/src/lib/tx-browser/tx-browser.tsx index bc25a233bb..24a5d10dba 100644 --- a/libs/remix-ui/debugger-ui/src/lib/tx-browser/tx-browser.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/tx-browser/tx-browser.tsx @@ -52,17 +52,17 @@ export const TxBrowser = ({ requestDebug, updateTxNumberFlag, unloadRequested, t } const customJSX = (
- -
+ +
) return (
diff --git a/libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts b/libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts index 7a7d75eb12..5c8c51d79c 100644 --- a/libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts +++ b/libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts @@ -44,54 +44,54 @@ const reducedOpcode = (opCodes, payload) => { export const reducer = (state = initialState, action: Action) => { switch (action.type) { - case 'FETCH_OPCODES_REQUEST': { - return { - ...state, - isRequesting: true, - isSuccessful: false, - hasError: null - } + case 'FETCH_OPCODES_REQUEST': { + return { + ...state, + isRequesting: true, + isSuccessful: false, + hasError: null } - case 'FETCH_OPCODES_SUCCESS': { - const opCodes = action.payload.address === state.opCodes.address ? { - ...state.opCodes, index: action.payload.index, nextIndexes: action.payload.nextIndexes, absoluteCurrentLineIndexes: state.absoluteCurrentLineIndexes - } : deepEqual(action.payload.code, state.opCodes.code) ? state.opCodes : action.payload + } + case 'FETCH_OPCODES_SUCCESS': { + const opCodes = action.payload.address === state.opCodes.address ? { + ...state.opCodes, index: action.payload.index, nextIndexes: action.payload.nextIndexes, absoluteCurrentLineIndexes: state.absoluteCurrentLineIndexes + } : deepEqual(action.payload.code, state.opCodes.code) ? state.opCodes : action.payload - const reduced = reducedOpcode(opCodes, action.payload) - return { - ...state, - opCodes, - display: reduced.display, - initialIndex: action.payload.index, - index: reduced.index, - nextIndexes: reduced.nextIndexes, - isRequesting: false, - isSuccessful: true, - hasError: null, - returnInstructionIndexes: reduced.returnInstructionIndexes, - outOfGasInstructionIndexes: reduced.outOfGasInstructionIndexes, - currentLineIndexes: reduced.currentLineIndexes - } + const reduced = reducedOpcode(opCodes, action.payload) + return { + ...state, + opCodes, + display: reduced.display, + initialIndex: action.payload.index, + index: reduced.index, + nextIndexes: reduced.nextIndexes, + isRequesting: false, + isSuccessful: true, + hasError: null, + returnInstructionIndexes: reduced.returnInstructionIndexes, + outOfGasInstructionIndexes: reduced.outOfGasInstructionIndexes, + currentLineIndexes: reduced.currentLineIndexes } - case 'FETCH_OPCODES_ERROR': { - return { - ...state, - isRequesting: false, - isSuccessful: false, - hasError: action.payload - } + } + case 'FETCH_OPCODES_ERROR': { + return { + ...state, + isRequesting: false, + isSuccessful: false, + hasError: action.payload } - case 'FETCH_INDEXES_FOR_NEW_LINE': { - let bottom = state.initialIndex - 10 - bottom = bottom < 0 ? 0 : bottom - return { - ...state, - absoluteCurrentLineIndexes: action.payload.currentLineIndexes, - currentLineIndexes: action.payload.currentLineIndexes.map(index => index - bottom), - line: action.payload.line - } + } + case 'FETCH_INDEXES_FOR_NEW_LINE': { + let bottom = state.initialIndex - 10 + bottom = bottom < 0 ? 0 : bottom + return { + ...state, + absoluteCurrentLineIndexes: action.payload.currentLineIndexes, + currentLineIndexes: action.payload.currentLineIndexes.map(index => index - bottom), + line: action.payload.line } - default: - throw new Error() + } + default: + throw new Error() } } diff --git a/libs/remix-ui/debugger-ui/src/reducers/calldata.ts b/libs/remix-ui/debugger-ui/src/reducers/calldata.ts index e33425d8fd..de5dcc1c0a 100644 --- a/libs/remix-ui/debugger-ui/src/reducers/calldata.ts +++ b/libs/remix-ui/debugger-ui/src/reducers/calldata.ts @@ -12,50 +12,50 @@ export const initialState = { export const reducer = (state = initialState, action: Action) => { switch (action.type) { - case 'FETCH_CALLDATA_REQUEST': - return { - ...state, - isRequesting: true, - isSuccessful: false, - hasError: null - } - case 'FETCH_CALLDATA_SUCCESS': - return { - calldata: action.payload, - isRequesting: false, - isSuccessful: true, - hasError: null - } - case 'FETCH_CALLDATA_ERROR': - return { - ...state, - isRequesting: false, - isSuccessful: false, - hasError: action.payload - } - case 'UPDATE_CALLDATA_REQUEST': - return { - ...state, - isRequesting: true, - isSuccessful: false, - hasError: null - } - case 'UPDATE_CALLDATA_SUCCESS': - return { - calldata: mergeLocals(action.payload, state.calldata), - isRequesting: false, - isSuccessful: true, - hasError: null - } - case 'UPDATE_CALLDATA_ERROR': - return { - ...state, - isRequesting: false, - isSuccessful: false, - hasError: action.payload - } - default: - throw new Error() + case 'FETCH_CALLDATA_REQUEST': + return { + ...state, + isRequesting: true, + isSuccessful: false, + hasError: null + } + case 'FETCH_CALLDATA_SUCCESS': + return { + calldata: action.payload, + isRequesting: false, + isSuccessful: true, + hasError: null + } + case 'FETCH_CALLDATA_ERROR': + return { + ...state, + isRequesting: false, + isSuccessful: false, + hasError: action.payload + } + case 'UPDATE_CALLDATA_REQUEST': + return { + ...state, + isRequesting: true, + isSuccessful: false, + hasError: null + } + case 'UPDATE_CALLDATA_SUCCESS': + return { + calldata: mergeLocals(action.payload, state.calldata), + isRequesting: false, + isSuccessful: true, + hasError: null + } + case 'UPDATE_CALLDATA_ERROR': + return { + ...state, + isRequesting: false, + isSuccessful: false, + hasError: action.payload + } + default: + throw new Error() } } diff --git a/libs/remix-ui/drag-n-drop/src/lib/drag-n-drop.tsx b/libs/remix-ui/drag-n-drop/src/lib/drag-n-drop.tsx index ea94d40ca1..ff74b3f360 100644 --- a/libs/remix-ui/drag-n-drop/src/lib/drag-n-drop.tsx +++ b/libs/remix-ui/drag-n-drop/src/lib/drag-n-drop.tsx @@ -68,25 +68,25 @@ export const Draggable = (props: DraggableType) => { <> { props.isDraggable ? props.children : - { - handleDrop(event) - }} - onDragStart={() => { - if (destination) { - handleDrag() - } - }} - onDragOver={(event) => { - if (destination) { - handleDragover(event) - } - }} - > - {props.children} - + { + handleDrop(event) + }} + onDragStart={() => { + if (destination) { + handleDrag() + } + }} + onDragOver={(event) => { + if (destination) { + handleDragover(event) + } + }} + > + {props.children} + } ) diff --git a/libs/remix-ui/editor/src/lib/actions/editor.ts b/libs/remix-ui/editor/src/lib/actions/editor.ts index c0e20d79ba..d71d731292 100644 --- a/libs/remix-ui/editor/src/lib/actions/editor.ts +++ b/libs/remix-ui/editor/src/lib/actions/editor.ts @@ -13,87 +13,87 @@ export const reducerActions = (models = initialState, action: Action) => { const monaco = action.monaco const editor = action.editor switch (action.type) { - case 'ADD_MODEL': { - if (!editor) return models - const uri = action.payload.uri - const value = action.payload.value - const language = action.payload.language - const readOnly = action.payload.readOnly - if (models[uri]) return models // already existing - models[uri] = { language, uri, readOnly } - let model - try { - model = monaco.editor.createModel(value, language, monaco.Uri.parse(uri)) - } catch (e) { + case 'ADD_MODEL': { + if (!editor) return models + const uri = action.payload.uri + const value = action.payload.value + const language = action.payload.language + const readOnly = action.payload.readOnly + if (models[uri]) return models // already existing + models[uri] = { language, uri, readOnly } + let model + try { + model = monaco.editor.createModel(value, language, monaco.Uri.parse(uri)) + } catch (e) { - } - models[uri].model = model - model.onDidChangeContent(() => action.payload.events.onDidChangeContent(uri)) - return models } - case 'DISPOSE_MODEL': { - const uri = action.payload.uri - const model = models[uri]?.model - if (model) model.dispose() - delete models[uri] - return models - } - case 'SET_VALUE': { - if (!editor) return models - const uri = action.payload.uri - const value = action.payload.value - const model = models[uri]?.model - if (model) { - model.setValue(value) - } - return models - } - case 'REVEAL_LINE': { - if (!editor) return models - const line = action.payload.line - const column = action.payload.column - editor.revealLine(line) - editor.setPosition({ column, lineNumber: line }) - return models - } - case 'REVEAL_RANGE': { - if (!editor) return models - const range: monacoTypes.IRange = { - startLineNumber: action.payload.startLineNumber + 1, - startColumn: action.payload.startColumn, - endLineNumber: action.payload.endLineNumber + 1, - endColumn: action.payload.endColumn - } - // reset to start of line - if (action.payload.startColumn < 100) { - editor.revealRange({ - startLineNumber: range.startLineNumber, - startColumn: 1, - endLineNumber: range.endLineNumber, - endColumn: 1 - }) - } else { - editor.revealRangeInCenter(range) - } - return models - } - case 'FOCUS': { - if (!editor) return models - editor.focus() - return models + models[uri].model = model + model.onDidChangeContent(() => action.payload.events.onDidChangeContent(uri)) + return models + } + case 'DISPOSE_MODEL': { + const uri = action.payload.uri + const model = models[uri]?.model + if (model) model.dispose() + delete models[uri] + return models + } + case 'SET_VALUE': { + if (!editor) return models + const uri = action.payload.uri + const value = action.payload.value + const model = models[uri]?.model + if (model) { + model.setValue(value) } - case 'SET_FONTSIZE': { - if (!editor) return models - const size = action.payload.size - editor.updateOptions({ fontSize: size }) - return models + return models + } + case 'REVEAL_LINE': { + if (!editor) return models + const line = action.payload.line + const column = action.payload.column + editor.revealLine(line) + editor.setPosition({ column, lineNumber: line }) + return models + } + case 'REVEAL_RANGE': { + if (!editor) return models + const range: monacoTypes.IRange = { + startLineNumber: action.payload.startLineNumber + 1, + startColumn: action.payload.startColumn, + endLineNumber: action.payload.endLineNumber + 1, + endColumn: action.payload.endColumn } - case 'SET_WORDWRAP': { - if (!editor) return models - const wrap = action.payload.wrap - editor.updateOptions({ wordWrap: wrap ? 'on' : 'off' }) - return models + // reset to start of line + if (action.payload.startColumn < 100) { + editor.revealRange({ + startLineNumber: range.startLineNumber, + startColumn: 1, + endLineNumber: range.endLineNumber, + endColumn: 1 + }) + } else { + editor.revealRangeInCenter(range) } + return models + } + case 'FOCUS': { + if (!editor) return models + editor.focus() + return models + } + case 'SET_FONTSIZE': { + if (!editor) return models + const size = action.payload.size + editor.updateOptions({ fontSize: size }) + return models + } + case 'SET_WORDWRAP': { + if (!editor) return models + const wrap = action.payload.wrap + editor.updateOptions({ wordWrap: wrap ? 'on' : 'off' }) + return models + } } } diff --git a/libs/remix-ui/editor/src/lib/helpers/retrieveNodesAtPosition.ts b/libs/remix-ui/editor/src/lib/helpers/retrieveNodesAtPosition.ts index 3e21a6804f..0d61f990bf 100644 --- a/libs/remix-ui/editor/src/lib/helpers/retrieveNodesAtPosition.ts +++ b/libs/remix-ui/editor/src/lib/helpers/retrieveNodesAtPosition.ts @@ -1,15 +1,15 @@ import { EditorAPIType, PluginType } from "../remix-ui-editor" export const retrieveNodesAtPosition = async (editorAPI: EditorAPIType, plugin: PluginType) => { - const cursorPosition = editorAPI.getCursorPosition() - let nodesAtPosition = await plugin.call('codeParser', 'nodesAtPosition', cursorPosition) - // if no nodes exits at position, try to get the block of which the position is in - const block = await plugin.call('codeParser', 'getANTLRBlockAtPosition', cursorPosition, null) + const cursorPosition = editorAPI.getCursorPosition() + let nodesAtPosition = await plugin.call('codeParser', 'nodesAtPosition', cursorPosition) + // if no nodes exits at position, try to get the block of which the position is in + const block = await plugin.call('codeParser', 'getANTLRBlockAtPosition', cursorPosition, null) - if (!nodesAtPosition.length) { - if (block) { - nodesAtPosition = await plugin.call('codeParser', 'nodesAtPosition', block.start) - } + if (!nodesAtPosition.length) { + if (block) { + nodesAtPosition = await plugin.call('codeParser', 'nodesAtPosition', block.start) } - return { nodesAtPosition, block } + } + return { nodesAtPosition, block } } \ No newline at end of file diff --git a/libs/remix-ui/editor/src/lib/providers/completion/completionGlobals.ts b/libs/remix-ui/editor/src/lib/providers/completion/completionGlobals.ts index b4dc57cb73..21436a1998 100644 --- a/libs/remix-ui/editor/src/lib/providers/completion/completionGlobals.ts +++ b/libs/remix-ui/editor/src/lib/providers/completion/completionGlobals.ts @@ -8,758 +8,758 @@ type CodeParserImportsData = { } export function getStringCompletionItems(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: 'concatenate an arbitrary number of string values', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'concat(${1:string})', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'concat()', - range, - }, - ] + return [ + { + detail: 'concatenate an arbitrary number of string values', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'concat(${1:string})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'concat()', + range, + }, + ] } export function getBytesCompletionItems(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: 'concatenate an arbitrary number of values', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'concat(${1:bytes})', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'concat()', - range, - }, - ] + return [ + { + detail: 'concatenate an arbitrary number of values', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'concat(${1:bytes})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'concat()', + range, + }, + ] } export function getBlockCompletionItems(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: '(address): Current block miner’s address', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'coinbase', - label: 'coinbase', - range, - }, - { - detail: '(uint): Current block’s base fee', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'basefee', - label: 'basefee', - range, - }, - { - detail: '(uint): Current chain id', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'chainid', - label: 'chainid', - range, - }, - { - detail: '(bytes32): DEPRICATED In 0.4.22 use blockhash(uint) instead. Hash of the given block - only works for 256 most recent blocks excluding current', - insertText: 'blockhash(${1:blockNumber});', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'blockhash', - range - }, - { - detail: '(uint): current block difficulty', - kind: monaco.languages.CompletionItemKind.Property, - label: 'difficulty', - insertText: 'difficulty', - range - }, - { - detail: '(uint): current block gaslimit', - kind: monaco.languages.CompletionItemKind.Property, - label: 'gaslimit', - insertText: 'gaslimit', - range - }, - { - detail: '(uint): current block number', - kind: monaco.languages.CompletionItemKind.Property, - label: 'number', - insertText: 'number', - range - }, - { - detail: '(uint): current block timestamp as seconds since unix epoch', - kind: monaco.languages.CompletionItemKind.Property, - label: 'timestamp', - insertText: 'timestamp', - range - }, - ]; + return [ + { + detail: '(address): Current block miner’s address', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'coinbase', + label: 'coinbase', + range, + }, + { + detail: '(uint): Current block’s base fee', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'basefee', + label: 'basefee', + range, + }, + { + detail: '(uint): Current chain id', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'chainid', + label: 'chainid', + range, + }, + { + detail: '(bytes32): DEPRICATED In 0.4.22 use blockhash(uint) instead. Hash of the given block - only works for 256 most recent blocks excluding current', + insertText: 'blockhash(${1:blockNumber});', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'blockhash', + range + }, + { + detail: '(uint): current block difficulty', + kind: monaco.languages.CompletionItemKind.Property, + label: 'difficulty', + insertText: 'difficulty', + range + }, + { + detail: '(uint): current block gaslimit', + kind: monaco.languages.CompletionItemKind.Property, + label: 'gaslimit', + insertText: 'gaslimit', + range + }, + { + detail: '(uint): current block number', + kind: monaco.languages.CompletionItemKind.Property, + label: 'number', + insertText: 'number', + range + }, + { + detail: '(uint): current block timestamp as seconds since unix epoch', + kind: monaco.languages.CompletionItemKind.Property, + label: 'timestamp', + insertText: 'timestamp', + range + }, + ]; } export function getCompletionSnippets(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - label: 'contract', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'contract ${1:Name} {\n\t$0\n}', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'library', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'library ${1:Name} {\n\t$0\n}', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'interface', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'interface ${1:Name} {\n\t$0\n}', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'enum', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'enum ${1:Name} {${2:item1}, ${3:item2} }', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'function', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'function ${1:name}(${2:params}) {\n\t${3:code}\n}', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'constructor', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'constructor(${1:params}) {\n\t${2:code}\n}', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'ifstatement', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'if (${1:condition}) {\n\t${2:code}\n}', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'ifstatementelse', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'if (${1:condition}) {\n\t${2:code}\n} else {\n\t${3:code}\n}', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'while loop', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'while (${1:condition}) \n{\n\t${2:code}\n};', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'do while loop', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'do {\n\t${2:code}\n} \nwhile (${1:condition});', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'for loop', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: 'for (${1:init}; ${2:condition}; ${3:increment}) \n{\n\t${4:code}\n};', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'pragma', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: '// SPDX-License-Identifier: MIT\npragma solidity ${1:version};', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - }, - { - label: 'SPDX-License-Identifier', - kind: monaco.languages.CompletionItemKind.Snippet, - insertText: '// SPDX-License-Identifier: MIT', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range - } - ] + return [ + { + label: 'contract', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'contract ${1:Name} {\n\t$0\n}', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'library', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'library ${1:Name} {\n\t$0\n}', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'interface', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'interface ${1:Name} {\n\t$0\n}', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'enum', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'enum ${1:Name} {${2:item1}, ${3:item2} }', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'function', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'function ${1:name}(${2:params}) {\n\t${3:code}\n}', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'constructor', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'constructor(${1:params}) {\n\t${2:code}\n}', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'ifstatement', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'if (${1:condition}) {\n\t${2:code}\n}', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'ifstatementelse', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'if (${1:condition}) {\n\t${2:code}\n} else {\n\t${3:code}\n}', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'while loop', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'while (${1:condition}) \n{\n\t${2:code}\n};', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'do while loop', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'do {\n\t${2:code}\n} \nwhile (${1:condition});', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'for loop', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: 'for (${1:init}; ${2:condition}; ${3:increment}) \n{\n\t${4:code}\n};', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'pragma', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: '// SPDX-License-Identifier: MIT\npragma solidity ${1:version};', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + }, + { + label: 'SPDX-License-Identifier', + kind: monaco.languages.CompletionItemKind.Snippet, + insertText: '// SPDX-License-Identifier: MIT', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range + } + ] } export function getTxCompletionItems(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: '(uint): gas price of the transaction', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'gas', - label: 'gas', - range - }, - { - detail: '(address): sender of the transaction (full call chain)', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'origin', - label: 'origin', - range - }, - ]; + return [ + { + detail: '(uint): gas price of the transaction', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'gas', + label: 'gas', + range + }, + { + detail: '(address): sender of the transaction (full call chain)', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'origin', + label: 'origin', + range + }, + ]; } export function getMsgCompletionItems(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: '(bytes): complete calldata', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'data', - label: 'data', - range - }, - { - detail: '(uint): remaining gas DEPRICATED in 0.4.21 use gasleft()', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'gas', - label: 'gas', - range - }, - { - detail: '(address): sender of the message (current call)', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'sender', - label: 'sender', - range - }, - { - detail: '(bytes4): first four bytes of the calldata (i.e. export function identifier)', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'sig', - label: 'sig', - range - }, - { - detail: '(uint): number of wei sent with the message', - kind: monaco.languages.CompletionItemKind.Property, - insertText: 'value', - label: 'value', - range - }, - ]; + return [ + { + detail: '(bytes): complete calldata', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'data', + label: 'data', + range + }, + { + detail: '(uint): remaining gas DEPRICATED in 0.4.21 use gasleft()', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'gas', + label: 'gas', + range + }, + { + detail: '(address): sender of the message (current call)', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'sender', + label: 'sender', + range + }, + { + detail: '(bytes4): first four bytes of the calldata (i.e. export function identifier)', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'sig', + label: 'sig', + range + }, + { + detail: '(uint): number of wei sent with the message', + kind: monaco.languages.CompletionItemKind.Property, + insertText: 'value', + label: 'value', + range + }, + ]; } export function getAbiCompletionItems(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: 'encode(..) returs (bytes): ABI-encodes the given arguments', - insertText: 'encode(${1:arg});', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'encode', - range - }, - { - detail: 'encodeCall(function functionPointer, (...)) returns (bytes memory) ABI-encodes a call to functionPointer with the arguments found in the tuple', - insertText: 'encode(${1:arg});', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'encodecall', - range - }, - { - detail: 'encodePacked(..) returns (bytes): Performes packed encoding of the given arguments', - insertText: 'encodePacked(${1:arg});', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'encodePacked', - range - }, - { - detail: 'encodeWithSelector(bytes4,...) returns (bytes): ABI-encodes the given arguments starting from the second and prepends the given four-byte selector', - insertText: 'encodeWithSelector(${1:bytes4}, ${2:arg});', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'encodeWithSelector', - range - }, - { - detail: 'encodeWithSignature(string,...) returns (bytes): Equivalent to abi.encodeWithSelector(bytes4(keccak256(signature), ...)`', - insertText: 'encodeWithSignature(${1:signatureString}, ${2:arg});', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'encodeWithSignature', - range - }, - ]; + return [ + { + detail: 'encode(..) returs (bytes): ABI-encodes the given arguments', + insertText: 'encode(${1:arg});', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'encode', + range + }, + { + detail: 'encodeCall(function functionPointer, (...)) returns (bytes memory) ABI-encodes a call to functionPointer with the arguments found in the tuple', + insertText: 'encode(${1:arg});', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'encodecall', + range + }, + { + detail: 'encodePacked(..) returns (bytes): Performes packed encoding of the given arguments', + insertText: 'encodePacked(${1:arg});', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'encodePacked', + range + }, + { + detail: 'encodeWithSelector(bytes4,...) returns (bytes): ABI-encodes the given arguments starting from the second and prepends the given four-byte selector', + insertText: 'encodeWithSelector(${1:bytes4}, ${2:arg});', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'encodeWithSelector', + range + }, + { + detail: 'encodeWithSignature(string,...) returns (bytes): Equivalent to abi.encodeWithSelector(bytes4(keccak256(signature), ...)`', + insertText: 'encodeWithSignature(${1:signatureString}, ${2:arg});', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'encodeWithSignature', + range + }, + ]; } export function GetCompletionTypes(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - const completionItems = []; - const types = ['address', 'string', 'bytes', 'byte', 'int', 'uint', 'bool', 'hash']; - for (let index = 8; index <= 256; index += 8) { - types.push('int' + index); - types.push('uint' + index); - types.push('bytes' + index / 8); - } - types.forEach(type => { - const completionItem = CreateCompletionItem(type, monaco.languages.CompletionItemKind.Keyword, type + ' type', range); - completionItems.push(completionItem); - }); - // add mapping - return completionItems; + const completionItems = []; + const types = ['address', 'string', 'bytes', 'byte', 'int', 'uint', 'bool', 'hash']; + for (let index = 8; index <= 256; index += 8) { + types.push('int' + index); + types.push('uint' + index); + types.push('bytes' + index / 8); + } + types.forEach(type => { + const completionItem = CreateCompletionItem(type, monaco.languages.CompletionItemKind.Keyword, type + ' type', range); + completionItems.push(completionItem); + }); + // add mapping + return completionItems; } function CreateCompletionItem(label: string, kind: monacoTypes.languages.CompletionItemKind, detail: string, range: monacoTypes.IRange) { - const completionItem: monacoTypes.languages.CompletionItem = { - label, - kind, - detail, - insertText: label, - range - } - completionItem.kind = kind; - completionItem.detail = detail; - return completionItem; + const completionItem: monacoTypes.languages.CompletionItem = { + label, + kind, + detail, + insertText: label, + range + } + completionItem.kind = kind; + completionItem.detail = detail; + return completionItem; } export function GetCompletionKeywords(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - const completionItems = []; - const keywords = ['modifier', 'mapping', 'break', 'continue', 'delete', 'else', 'for', - 'after', 'promise', 'alias', 'apply', 'auto', 'copyof', 'default', 'define', 'final', 'implements', - 'inline', 'let', 'macro', 'match', 'mutable', 'null', 'of', 'partial', 'reference', 'relocatable', - 'sealed', 'sizeof', 'static', 'supports', 'switch', 'typedef', - 'if', 'new', 'return', 'returns', 'while', 'using', 'emit', 'anonymous', 'indexed', - 'private', 'public', 'external', 'internal', 'payable', 'nonpayable', 'view', 'pure', 'case', 'do', 'else', 'finally', - 'in', 'instanceof', 'return', 'throw', 'try', 'catch', 'typeof', 'yield', 'void', 'virtual', 'override']; - keywords.forEach(unit => { - const completionItem: monacoTypes.languages.CompletionItem = { - label: unit, - kind: monaco.languages.CompletionItemKind.Keyword, - detail: unit + ' keyword', - insertText: `${unit} `, - range - } - completionItems.push(completionItem); - }); - - completionItems.push(CreateCompletionItem('contract', monaco.languages.CompletionItemKind.Class, null, range)); - completionItems.push(CreateCompletionItem('library', monaco.languages.CompletionItemKind.Class, null, range)); - completionItems.push(CreateCompletionItem('storage', monaco.languages.CompletionItemKind.Field, null, range)); - completionItems.push(CreateCompletionItem('calldata', monaco.languages.CompletionItemKind.Field, null, range)); - completionItems.push(CreateCompletionItem('memory', monaco.languages.CompletionItemKind.Field, null, range)); - completionItems.push(CreateCompletionItem('var', monaco.languages.CompletionItemKind.Field, null, range)); - completionItems.push(CreateCompletionItem('constant', monaco.languages.CompletionItemKind.Constant, null, range)); - completionItems.push(CreateCompletionItem('immutable', monaco.languages.CompletionItemKind.Keyword, null, range)); - completionItems.push(CreateCompletionItem('constructor', monaco.languages.CompletionItemKind.Constructor, null, range)); - completionItems.push(CreateCompletionItem('event', monaco.languages.CompletionItemKind.Event, null, range)); - completionItems.push(CreateCompletionItem('import', monaco.languages.CompletionItemKind.Module, null, range)); - completionItems.push(CreateCompletionItem('enum', monaco.languages.CompletionItemKind.Enum, null, range)); - completionItems.push(CreateCompletionItem('struct', monaco.languages.CompletionItemKind.Struct, null, range)); - completionItems.push(CreateCompletionItem('function', monaco.languages.CompletionItemKind.Function, null, range)); - - return completionItems; + const completionItems = []; + const keywords = ['modifier', 'mapping', 'break', 'continue', 'delete', 'else', 'for', + 'after', 'promise', 'alias', 'apply', 'auto', 'copyof', 'default', 'define', 'final', 'implements', + 'inline', 'let', 'macro', 'match', 'mutable', 'null', 'of', 'partial', 'reference', 'relocatable', + 'sealed', 'sizeof', 'static', 'supports', 'switch', 'typedef', + 'if', 'new', 'return', 'returns', 'while', 'using', 'emit', 'anonymous', 'indexed', + 'private', 'public', 'external', 'internal', 'payable', 'nonpayable', 'view', 'pure', 'case', 'do', 'else', 'finally', + 'in', 'instanceof', 'return', 'throw', 'try', 'catch', 'typeof', 'yield', 'void', 'virtual', 'override']; + keywords.forEach(unit => { + const completionItem: monacoTypes.languages.CompletionItem = { + label: unit, + kind: monaco.languages.CompletionItemKind.Keyword, + detail: unit + ' keyword', + insertText: `${unit} `, + range + } + completionItems.push(completionItem); + }); + + completionItems.push(CreateCompletionItem('contract', monaco.languages.CompletionItemKind.Class, null, range)); + completionItems.push(CreateCompletionItem('library', monaco.languages.CompletionItemKind.Class, null, range)); + completionItems.push(CreateCompletionItem('storage', monaco.languages.CompletionItemKind.Field, null, range)); + completionItems.push(CreateCompletionItem('calldata', monaco.languages.CompletionItemKind.Field, null, range)); + completionItems.push(CreateCompletionItem('memory', monaco.languages.CompletionItemKind.Field, null, range)); + completionItems.push(CreateCompletionItem('var', monaco.languages.CompletionItemKind.Field, null, range)); + completionItems.push(CreateCompletionItem('constant', monaco.languages.CompletionItemKind.Constant, null, range)); + completionItems.push(CreateCompletionItem('immutable', monaco.languages.CompletionItemKind.Keyword, null, range)); + completionItems.push(CreateCompletionItem('constructor', monaco.languages.CompletionItemKind.Constructor, null, range)); + completionItems.push(CreateCompletionItem('event', monaco.languages.CompletionItemKind.Event, null, range)); + completionItems.push(CreateCompletionItem('import', monaco.languages.CompletionItemKind.Module, null, range)); + completionItems.push(CreateCompletionItem('enum', monaco.languages.CompletionItemKind.Enum, null, range)); + completionItems.push(CreateCompletionItem('struct', monaco.languages.CompletionItemKind.Struct, null, range)); + completionItems.push(CreateCompletionItem('function', monaco.languages.CompletionItemKind.Function, null, range)); + + return completionItems; } export function GeCompletionUnits(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - const completionItems = []; - const etherUnits = ['wei', 'gwei', 'finney', 'szabo', 'ether']; - etherUnits.forEach(unit => { - const completionItem = CreateCompletionItem(unit, monaco.languages.CompletionItemKind.Unit, unit + ': ether unit', range); - completionItems.push(completionItem); - }); - - const timeUnits = ['seconds', 'minutes', 'hours', 'days', 'weeks', 'years']; - timeUnits.forEach(unit => { - const completionItem = CreateCompletionItem(unit, monaco.languages.CompletionItemKind.Unit, unit + ': time unit', range); - completionItem.kind = monaco.languages.CompletionItemKind.Unit; - - if (unit !== 'years') { - completionItem.detail = unit + ': time unit'; - } else { - completionItem.detail = 'DEPRECATED: ' + unit + ': time unit'; - } - completionItems.push(completionItem); - }); + const completionItems = []; + const etherUnits = ['wei', 'gwei', 'finney', 'szabo', 'ether']; + etherUnits.forEach(unit => { + const completionItem = CreateCompletionItem(unit, monaco.languages.CompletionItemKind.Unit, unit + ': ether unit', range); + completionItems.push(completionItem); + }); + + const timeUnits = ['seconds', 'minutes', 'hours', 'days', 'weeks', 'years']; + timeUnits.forEach(unit => { + const completionItem = CreateCompletionItem(unit, monaco.languages.CompletionItemKind.Unit, unit + ': time unit', range); + completionItem.kind = monaco.languages.CompletionItemKind.Unit; + + if (unit !== 'years') { + completionItem.detail = unit + ': time unit'; + } else { + completionItem.detail = 'DEPRECATED: ' + unit + ': time unit'; + } + completionItems.push(completionItem); + }); - return completionItems; + return completionItems; } export function GetImports(range: monacoTypes.IRange - , monaco, data: CodeParserImportsData - , word: string + , monaco, data: CodeParserImportsData + , word: string ): monacoTypes.languages.CompletionItem[] { - let list = [] - if (!word.startsWith('@')) { - word = word.replace('"', ''); - const nextPaths = [...new Set(data.files - .filter((item) => item.startsWith(word)) - .map((item) => item.replace(word, '').split('/')[0]))] - - list = [...list, ...nextPaths - .filter((item) => !item.endsWith('.sol')) - .map((item) => { - return { - kind: monaco.languages.CompletionItemKind.Folder, - range: range, - label: `${item}`, - insertText: `${item}`, - } - })] - - - list = [...list, - ...data.files - .filter((item) => item.startsWith(word)) - .map((item) => { - return { - kind: monaco.languages.CompletionItemKind.File, - range: range, - label: `${item}`, - insertText: `${item.replace(word, '')}`, - } - })] - } - if (word === '@' || word === '') { - list = [...list, ...data.packages.map((item) => { - return { - kind: monaco.languages.CompletionItemKind.Module, - range: range, - label: `${item}`, - insertText: word === '@' ? `${item.replace('@', '')}` : `${item}`, - } - })] - } - if (word.startsWith('@') && word.length > 1) { - const nextPaths = [...new Set(data.modules - .filter((item) => item.startsWith(word)) - .map((item) => item.replace(word, '').split('/')[0]))] - - list = [...list, ...nextPaths - .filter((item) => !item.endsWith('.sol')) - .map((item) => { - return { - kind: monaco.languages.CompletionItemKind.Folder, - range: range, - label: `${item}`, - insertText: `${item}`, - } + let list = [] + if (!word.startsWith('@')) { + word = word.replace('"', ''); + const nextPaths = [...new Set(data.files + .filter((item) => item.startsWith(word)) + .map((item) => item.replace(word, '').split('/')[0]))] + + list = [...list, ...nextPaths + .filter((item) => !item.endsWith('.sol')) + .map((item) => { + return { + kind: monaco.languages.CompletionItemKind.Folder, + range: range, + label: `${item}`, + insertText: `${item}`, + } + })] + + + list = [...list, + ...data.files + .filter((item) => item.startsWith(word)) + .map((item) => { + return { + kind: monaco.languages.CompletionItemKind.File, + range: range, + label: `${item}`, + insertText: `${item.replace(word, '')}`, + } })] - - list = [...list - , ...data.modules - .filter((item) => item.startsWith(word)) - .map((item) => { - // remove the first part if it starts with @ - let label = item; - if (label.startsWith('@')) { - label = label.substring(label.indexOf('/') + 1); - } - const filename = path.basename(label) - return { - kind: monaco.languages.CompletionItemKind.Reference, - range: range, - label: `${filename}: ${label}`, - insertText: `${item.replace(word, '')}`, - } - }) - ] - } - return list; + } + if (word === '@' || word === '') { + list = [...list, ...data.packages.map((item) => { + return { + kind: monaco.languages.CompletionItemKind.Module, + range: range, + label: `${item}`, + insertText: word === '@' ? `${item.replace('@', '')}` : `${item}`, + } + })] + } + if (word.startsWith('@') && word.length > 1) { + const nextPaths = [...new Set(data.modules + .filter((item) => item.startsWith(word)) + .map((item) => item.replace(word, '').split('/')[0]))] + + list = [...list, ...nextPaths + .filter((item) => !item.endsWith('.sol')) + .map((item) => { + return { + kind: monaco.languages.CompletionItemKind.Folder, + range: range, + label: `${item}`, + insertText: `${item}`, + } + })] + + list = [...list + , ...data.modules + .filter((item) => item.startsWith(word)) + .map((item) => { + // remove the first part if it starts with @ + let label = item; + if (label.startsWith('@')) { + label = label.substring(label.indexOf('/') + 1); + } + const filename = path.basename(label) + return { + kind: monaco.languages.CompletionItemKind.Reference, + range: range, + label: `${filename}: ${label}`, + insertText: `${item.replace(word, '')}`, + } + }) + ] + } + return list; }; export function GetGlobalVariable(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: 'Current block', - kind: monaco.languages.CompletionItemKind.Variable, - insertText: 'block', - label: 'block', - range - }, - { - detail: 'Current Message', - kind: monaco.languages.CompletionItemKind.Variable, - insertText: 'msg', - label: 'msg', - range - }, - { - detail: '(uint): current block timestamp (alias for block.timestamp)', - kind: monaco.languages.CompletionItemKind.Variable, - insertText: 'now', - label: 'now', - range - }, - { - detail: 'Current transaction', - kind: monaco.languages.CompletionItemKind.Variable, - label: 'tx', - insertText: 'tx', - range - }, - { - detail: 'ABI encoding / decoding', - kind: monaco.languages.CompletionItemKind.Variable, - label: 'abi', - insertText: 'abi', - range - }, - { - detail: '', - kind: monaco.languages.CompletionItemKind.Variable, - label: 'this', - insertText: 'this', - range - }, - ]; + return [ + { + detail: 'Current block', + kind: monaco.languages.CompletionItemKind.Variable, + insertText: 'block', + label: 'block', + range + }, + { + detail: 'Current Message', + kind: monaco.languages.CompletionItemKind.Variable, + insertText: 'msg', + label: 'msg', + range + }, + { + detail: '(uint): current block timestamp (alias for block.timestamp)', + kind: monaco.languages.CompletionItemKind.Variable, + insertText: 'now', + label: 'now', + range + }, + { + detail: 'Current transaction', + kind: monaco.languages.CompletionItemKind.Variable, + label: 'tx', + insertText: 'tx', + range + }, + { + detail: 'ABI encoding / decoding', + kind: monaco.languages.CompletionItemKind.Variable, + label: 'abi', + insertText: 'abi', + range + }, + { + detail: '', + kind: monaco.languages.CompletionItemKind.Variable, + label: 'this', + insertText: 'this', + range + }, + ]; } export function GetGlobalFunctions(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: 'assert(bool condition): throws if the condition is not met - to be used for internal errors.', - insertText: 'assert(${1:condition});', - kind: monaco.languages.CompletionItemKind.Function, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'assert', - range - }, - { - detail: 'gasleft(): returns the remaining gas', - insertText: 'gasleft();', - kind: monaco.languages.CompletionItemKind.Function, - label: 'gasleft', - range - }, - { - detail: 'unicode: converts string into unicode', - insertText: 'unicode"${1:text}"', - kind: monaco.languages.CompletionItemKind.Function, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'unicode', - range - }, - { - detail: 'blockhash(uint blockNumber): hash of the given block - only works for 256 most recent, excluding current, blocks', - insertText: 'blockhash(${1:blockNumber});', - kind: monaco.languages.CompletionItemKind.Function, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'blockhash', - range - }, - { - detail: 'require(bool condition): reverts if the condition is not met - to be used for errors in inputs or external components.', - insertText: 'require(${1:condition});', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'require', - range - }, - { - // tslint:disable-next-line:max-line-length - detail: 'require(bool condition, string message): reverts if the condition is not met - to be used for errors in inputs or external components. Also provides an error message.', - insertText: 'require(${1:condition}, ${2:message});', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'require', - range - }, - { - detail: 'revert(): abort execution and revert state changes', - insertText: 'revert();', - kind: monaco.languages.CompletionItemKind.Method, - label: 'revert', - range - }, - { - detail: 'addmod(uint x, uint y, uint k) returns (uint):' + + return [ + { + detail: 'assert(bool condition): throws if the condition is not met - to be used for internal errors.', + insertText: 'assert(${1:condition});', + kind: monaco.languages.CompletionItemKind.Function, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'assert', + range + }, + { + detail: 'gasleft(): returns the remaining gas', + insertText: 'gasleft();', + kind: monaco.languages.CompletionItemKind.Function, + label: 'gasleft', + range + }, + { + detail: 'unicode: converts string into unicode', + insertText: 'unicode"${1:text}"', + kind: monaco.languages.CompletionItemKind.Function, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'unicode', + range + }, + { + detail: 'blockhash(uint blockNumber): hash of the given block - only works for 256 most recent, excluding current, blocks', + insertText: 'blockhash(${1:blockNumber});', + kind: monaco.languages.CompletionItemKind.Function, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'blockhash', + range + }, + { + detail: 'require(bool condition): reverts if the condition is not met - to be used for errors in inputs or external components.', + insertText: 'require(${1:condition});', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'require', + range + }, + { + // tslint:disable-next-line:max-line-length + detail: 'require(bool condition, string message): reverts if the condition is not met - to be used for errors in inputs or external components. Also provides an error message.', + insertText: 'require(${1:condition}, ${2:message});', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'require', + range + }, + { + detail: 'revert(): abort execution and revert state changes', + insertText: 'revert();', + kind: monaco.languages.CompletionItemKind.Method, + label: 'revert', + range + }, + { + detail: 'addmod(uint x, uint y, uint k) returns (uint):' + 'compute (x + y) % k where the addition is performed with arbitrary precision and does not wrap around at 2**256', - insertText: 'addmod(${1:x}, ${2:y}, ${3:k})', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'addmod', - range - }, - { - detail: 'mulmod(uint x, uint y, uint k) returns (uint):' + + insertText: 'addmod(${1:x}, ${2:y}, ${3:k})', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'addmod', + range + }, + { + detail: 'mulmod(uint x, uint y, uint k) returns (uint):' + 'compute (x * y) % k where the multiplication is performed with arbitrary precision and does not wrap around at 2**256', - insertText: 'mulmod(${1:x}, ${2:y}, ${3:k})', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'mulmod', - range - }, - { - detail: 'keccak256(...) returns (bytes32):' + + insertText: 'mulmod(${1:x}, ${2:y}, ${3:k})', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'mulmod', + range + }, + { + detail: 'keccak256(...) returns (bytes32):' + 'compute the Ethereum-SHA-3 (Keccak-256) hash of the (tightly packed) arguments', - insertText: 'keccak256(${1:x})', - kind: monaco.languages.CompletionItemKind.Method, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'keccak256', - range - }, - { - detail: 'sha256(...) returns (bytes32):' + + insertText: 'keccak256(${1:x})', + kind: monaco.languages.CompletionItemKind.Method, + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'keccak256', + range + }, + { + detail: 'sha256(...) returns (bytes32):' + 'compute the SHA-256 hash of the (tightly packed) arguments', - insertText: 'sha256(${1:x})', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - kind: monaco.languages.CompletionItemKind.Method, - label: 'sha256', - range - }, - { - detail: 'sha3(...) returns (bytes32):' + + insertText: 'sha256(${1:x})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + kind: monaco.languages.CompletionItemKind.Method, + label: 'sha256', + range + }, + { + detail: 'sha3(...) returns (bytes32):' + 'alias to keccak256', - insertText: 'sha3(${1:x})', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - kind: monaco.languages.CompletionItemKind.Method, - label: 'sha3', - range - }, - { - detail: 'ripemd160(...) returns (bytes20):' + + insertText: 'sha3(${1:x})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + kind: monaco.languages.CompletionItemKind.Method, + label: 'sha3', + range + }, + { + detail: 'ripemd160(...) returns (bytes20):' + 'compute RIPEMD-160 hash of the (tightly packed) arguments', - insertText: 'ripemd160(${1:x})', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - kind: monaco.languages.CompletionItemKind.Method, - label: 'ripemd160', - range - }, - { - detail: 'ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address):' + + insertText: 'ripemd160(${1:x})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + kind: monaco.languages.CompletionItemKind.Method, + label: 'ripemd160', + range + }, + { + detail: 'ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address):' + 'recover the address associated with the public key from elliptic curve signature or return zero on error', - insertText: 'ecrecover(${1:hash}, ${2:v}, ${3:r}, ${4:s})', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - kind: monaco.languages.CompletionItemKind.Method, - label: 'ecrecover', - range - }, - - ]; + insertText: 'ecrecover(${1:hash}, ${2:v}, ${3:r}, ${4:s})', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + kind: monaco.languages.CompletionItemKind.Method, + label: 'ecrecover', + range + }, + + ]; } export function getContextualAutoCompleteByGlobalVariable(word: string, range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - if (word === 'block') { - return getBlockCompletionItems(range, monaco); - } - if (word === 'string') { - return getStringCompletionItems(range, monaco); - } - if (word === 'bytes') { - return getBytesCompletionItems(range, monaco); - } - if (word === 'msg') { - return getMsgCompletionItems(range, monaco); - } - if (word === 'tx') { - return getTxCompletionItems(range, monaco); - } - if (word === 'abi') { - return getAbiCompletionItems(range, monaco); - } - if (word === 'sender') { - return getAddressCompletionItems(range, monaco); - } - return null; + if (word === 'block') { + return getBlockCompletionItems(range, monaco); + } + if (word === 'string') { + return getStringCompletionItems(range, monaco); + } + if (word === 'bytes') { + return getBytesCompletionItems(range, monaco); + } + if (word === 'msg') { + return getMsgCompletionItems(range, monaco); + } + if (word === 'tx') { + return getTxCompletionItems(range, monaco); + } + if (word === 'abi') { + return getAbiCompletionItems(range, monaco); + } + if (word === 'sender') { + return getAddressCompletionItems(range, monaco); + } + return null; } export function getArrayCompletionItems(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: '', - kind: monaco.languages.CompletionItemKind.Method, - insertText: 'length;', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'length', - range, - }, - { - detail: '', - kind: monaco.languages.CompletionItemKind.Method, - insertText: 'push(${1:value});', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'push(value)', - range, - }, - { - detail: '', - kind: monaco.languages.CompletionItemKind.Method, - insertText: 'push();', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'push()', - range, - }, - { - detail: '', - kind: monaco.languages.CompletionItemKind.Method, - insertText: 'pop();', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'pop()', - range, - }, - ] + return [ + { + detail: '', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'length;', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'length', + range, + }, + { + detail: '', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'push(${1:value});', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'push(value)', + range, + }, + { + detail: '', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'push();', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'push()', + range, + }, + { + detail: '', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'pop();', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'pop()', + range, + }, + ] } export function getAddressCompletionItems(range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - return [ - { - detail: '(uint256): balance of the Address in Wei', - kind: monaco.languages.CompletionItemKind.Method, - insertText: 'balance;', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'balance', - range, - }, - { - detail: '(bytes memory): code at the Address (can be empty)', - kind: monaco.languages.CompletionItemKind.Method, - insertText: 'code;', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'code', - range, - }, - { - detail: '(bytes32): the codehash of the Address', - kind: monaco.languages.CompletionItemKind.Method, - insertText: 'codehash;', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'codehash', - range, - }, - { - detail: '(uint256 amount) returns (bool): send given amount of Wei to Address, returns false on failure', - kind: monaco.languages.CompletionItemKind.Method, - insertText: 'send(${1:value});', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'send()', - range, - }, - { - detail: '(uint256 amount): send given amount of Wei to Address, throws on failure', - kind: monaco.languages.CompletionItemKind.Method, - insertText: 'transfer(${1:value});', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - label: 'transfer()', - range, - }, - ] + return [ + { + detail: '(uint256): balance of the Address in Wei', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'balance;', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'balance', + range, + }, + { + detail: '(bytes memory): code at the Address (can be empty)', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'code;', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'code', + range, + }, + { + detail: '(bytes32): the codehash of the Address', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'codehash;', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'codehash', + range, + }, + { + detail: '(uint256 amount) returns (bool): send given amount of Wei to Address, returns false on failure', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'send(${1:value});', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'send()', + range, + }, + { + detail: '(uint256 amount): send given amount of Wei to Address, throws on failure', + kind: monaco.languages.CompletionItemKind.Method, + insertText: 'transfer(${1:value});', + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + label: 'transfer()', + range, + }, + ] } export function getContextualAutoCompleteBTypeName(word: string, range: monacoTypes.IRange, monaco): monacoTypes.languages.CompletionItem[] { - if (word === 'ArrayTypeName') { - return getArrayCompletionItems(range, monaco); - } - if (word === 'bytes') { - return getBytesCompletionItems(range, monaco); - } - if (word === 'address') { - return getAddressCompletionItems(range, monaco); - } - return []; + if (word === 'ArrayTypeName') { + return getArrayCompletionItems(range, monaco); + } + if (word === 'bytes') { + return getBytesCompletionItems(range, monaco); + } + if (word === 'address') { + return getAddressCompletionItems(range, monaco); + } + return []; } diff --git a/libs/remix-ui/editor/src/lib/providers/completionProvider.ts b/libs/remix-ui/editor/src/lib/providers/completionProvider.ts index 305095cc76..d375748413 100644 --- a/libs/remix-ui/editor/src/lib/providers/completionProvider.ts +++ b/libs/remix-ui/editor/src/lib/providers/completionProvider.ts @@ -6,431 +6,431 @@ import { monacoTypes } from '@remix-ui/editor'; import { retrieveNodesAtPosition } from "../helpers/retrieveNodesAtPosition"; export class RemixCompletionProvider implements monacoTypes.languages.CompletionItemProvider { - props: EditorUIProps - monaco: any - maximumItemsForContractCompletion = 100 - - constructor(props: any, monaco: any) { - this.props = props - this.monaco = monaco - } - - triggerCharacters = ['.', '', '"', '@', '/'] - async provideCompletionItems(model: monacoTypes.editor.ITextModel, position: monacoTypes.Position, context: monacoTypes.languages.CompletionContext): Promise { - - const completionSettings = await this.props.plugin.call('config', 'getAppParameter', 'settings/auto-completion') - if (!completionSettings) return - - const word = model.getWordUntilPosition(position); - const range = { - startLineNumber: position.lineNumber, - endLineNumber: position.lineNumber, - startColumn: word.startColumn, - endColumn: word.endColumn - }; - - const line = model.getLineContent(position.lineNumber) - let nodes: AstNode[] = [] - let suggestions: monacoTypes.languages.CompletionItem[] = [] - if (context.triggerCharacter === '"' || context.triggerCharacter === '@' || context.triggerCharacter === '/') { - - const lastpart = line.substring(0, position.column - 1).split(';').pop() - if (lastpart.startsWith('import')) { - const imports = await this.props.plugin.call('codeParser', 'getImports') - if (context.triggerCharacter === '"' || context.triggerCharacter === '@') { - suggestions = [...suggestions, - ...GetImports(range, this.monaco, imports, context.triggerCharacter), - ] - } else if (context.triggerCharacter === '/') { - const word = line.split('"')[1] - suggestions = [...suggestions, - ...GetImports(range, this.monaco, imports, word), - ] - } else { - return - } - } - - } else if (context.triggerCharacter === '.') { - const lineTextBeforeCursor: string = line.substring(0, position.column - 1) - const lastNodeInExpression = await this.getLastNodeInExpression(lineTextBeforeCursor) - const expressionElements = lineTextBeforeCursor.split('.') + props: EditorUIProps + monaco: any + maximumItemsForContractCompletion = 100 + + constructor(props: any, monaco: any) { + this.props = props + this.monaco = monaco + } + + triggerCharacters = ['.', '', '"', '@', '/'] + async provideCompletionItems(model: monacoTypes.editor.ITextModel, position: monacoTypes.Position, context: monacoTypes.languages.CompletionContext): Promise { + + const completionSettings = await this.props.plugin.call('config', 'getAppParameter', 'settings/auto-completion') + if (!completionSettings) return + + const word = model.getWordUntilPosition(position); + const range = { + startLineNumber: position.lineNumber, + endLineNumber: position.lineNumber, + startColumn: word.startColumn, + endColumn: word.endColumn + }; + + const line = model.getLineContent(position.lineNumber) + let nodes: AstNode[] = [] + let suggestions: monacoTypes.languages.CompletionItem[] = [] + if (context.triggerCharacter === '"' || context.triggerCharacter === '@' || context.triggerCharacter === '/') { + + const lastpart = line.substring(0, position.column - 1).split(';').pop() + if (lastpart.startsWith('import')) { + const imports = await this.props.plugin.call('codeParser', 'getImports') + if (context.triggerCharacter === '"' || context.triggerCharacter === '@') { + suggestions = [...suggestions, + ...GetImports(range, this.monaco, imports, context.triggerCharacter), + ] + } else if (context.triggerCharacter === '/') { + const word = line.split('"')[1] + suggestions = [...suggestions, + ...GetImports(range, this.monaco, imports, word), + ] + } else { + return + } + } + + } else if (context.triggerCharacter === '.') { + const lineTextBeforeCursor: string = line.substring(0, position.column - 1) + const lastNodeInExpression = await this.getLastNodeInExpression(lineTextBeforeCursor) + const expressionElements = lineTextBeforeCursor.split('.') + + let dotCompleted = false + + // handles completion from for builtin types + if (lastNodeInExpression.memberName === 'sender') { // exception for this member + lastNodeInExpression.name = 'sender' + } + const globalCompletion = getContextualAutoCompleteByGlobalVariable(lastNodeInExpression.name, range, this.monaco) + if (globalCompletion) { + dotCompleted = true + suggestions = [...suggestions, ...globalCompletion] + } + // handle completion for global THIS. + if (lastNodeInExpression.name === 'this') { + dotCompleted = true + nodes = [...nodes, ...await this.getThisCompletions()] + } + // handle completion for other dot completions + if (expressionElements.length > 1 && !dotCompleted) { + + const nameOfLastTypedExpression = lastNodeInExpression.name || lastNodeInExpression.memberName + const dotCompletions = await this.getDotCompletions(nameOfLastTypedExpression, range) + nodes = [...nodes, ...dotCompletions.nodes] + suggestions = [...suggestions, ...dotCompletions.suggestions] + } + } else { + + // handles contract completions and other suggestions + suggestions = [...suggestions, + ...GetGlobalVariable(range, this.monaco), + ...getCompletionSnippets(range, this.monaco), + ...GetCompletionTypes(range, this.monaco), + ...GetCompletionKeywords(range, this.monaco), + ...GetGlobalFunctions(range, this.monaco), + ...GeCompletionUnits(range, this.monaco), + ] + + let contractCompletions = await this.getContractCompletions() + + // we can't have external nodes without using this. + contractCompletions = contractCompletions.filter(node => { + if (node.visibility && node.visibility === 'external') { + return false + } + return true + }) - let dotCompleted = false + nodes = [...nodes, ...contractCompletions] - // handles completion from for builtin types - if (lastNodeInExpression.memberName === 'sender') { // exception for this member - lastNodeInExpression.name = 'sender' - } - const globalCompletion = getContextualAutoCompleteByGlobalVariable(lastNodeInExpression.name, range, this.monaco) - if (globalCompletion) { - dotCompleted = true - suggestions = [...suggestions, ...globalCompletion] - } - // handle completion for global THIS. - if (lastNodeInExpression.name === 'this') { - dotCompleted = true - nodes = [...nodes, ...await this.getThisCompletions()] - } - // handle completion for other dot completions - if (expressionElements.length > 1 && !dotCompleted) { + } - const nameOfLastTypedExpression = lastNodeInExpression.name || lastNodeInExpression.memberName - const dotCompletions = await this.getDotCompletions(nameOfLastTypedExpression, range) - nodes = [...nodes, ...dotCompletions.nodes] - suggestions = [...suggestions, ...dotCompletions.suggestions] - } - } else { + // remove duplicates + const nodeIds = {}; + let filteredNodes = nodes.filter((node) => { + if (node.id) { + if (nodeIds[node.id]) { + return false; + } + nodeIds[node.id] = true; + } + return true; + }); + + // truncate for performance + if (filteredNodes.length > this.maximumItemsForContractCompletion) { + // await this.props.plugin.call('notification', 'toast', `Too many completion items. Only ${this.maximumItemsForContractCompletion} items will be shown.`) + filteredNodes = filteredNodes.slice(0, this.maximumItemsForContractCompletion) + } - // handles contract completions and other suggestions - suggestions = [...suggestions, - ...GetGlobalVariable(range, this.monaco), - ...getCompletionSnippets(range, this.monaco), - ...GetCompletionTypes(range, this.monaco), - ...GetCompletionKeywords(range, this.monaco), - ...GetGlobalFunctions(range, this.monaco), - ...GeCompletionUnits(range, this.monaco), - ] + const getNodeLink = async (node: any) => { + return await this.props.plugin.call('codeParser', 'getNodeLink', node) + } - let contractCompletions = await this.getContractCompletions() + const getDocs = async (node: any) => { + return await this.props.plugin.call('codeParser', 'getNodeDocumentation', node) + } - // we can't have external nodes without using this. - contractCompletions = contractCompletions.filter(node => { - if (node.visibility && node.visibility === 'external') { - return false - } - return true - }) + const getParamaters = async (node: any) => { + return await this.props.plugin.call('codeParser', 'getFunctionParamaters', node) + } - nodes = [...nodes, ...contractCompletions] + const completeParameters = async (parameters: any) => { + const localParam = (parameters && parameters.parameters) || (parameters) + if (localParam) { + const params = [] + for (const key in localParam) { + params.push('${' + (key + 1) + ':' + localParam[key].name + '}') + } + return `(${params.join(', ')})` + } + } + const getVariableDeclaration = async (node: any) => { + let variableDeclaration = await this.props.plugin.call('codeParser', 'getVariableDeclaration', node) + if (node.scope) { + const scopeNode = await this.props.plugin.call('codeParser', 'getNodeById', node.scope) + if (scopeNode) { + variableDeclaration = `${scopeNode.name}.${variableDeclaration}` } + } + return variableDeclaration + } - // remove duplicates - const nodeIds = {}; - let filteredNodes = nodes.filter((node) => { - if (node.id) { - if (nodeIds[node.id]) { - return false; - } - nodeIds[node.id] = true; - } - return true; - }); - // truncate for performance - if (filteredNodes.length > this.maximumItemsForContractCompletion) { - // await this.props.plugin.call('notification', 'toast', `Too many completion items. Only ${this.maximumItemsForContractCompletion} items will be shown.`) - filteredNodes = filteredNodes.slice(0, this.maximumItemsForContractCompletion) + for (const node of Object.values(filteredNodes) as any[]) { + if (!node.name) continue + if (node.nodeType === 'VariableDeclaration') { + const completion = { + label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${await getVariableDeclaration(node)}` }, + kind: this.monaco.languages.CompletionItemKind.Variable, + insertText: node.name, + range: range, + documentation: await getDocs(node) } - - const getNodeLink = async (node: any) => { - return await this.props.plugin.call('codeParser', 'getNodeLink', node) + suggestions.push(completion) + } else if (node.nodeType === 'FunctionDefinition') { + const completion = { + label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` -> ${node.name} ${await getParamaters(node)}` }, + kind: this.monaco.languages.CompletionItemKind.Function, + insertText: `${node.name}${await completeParameters(node.parameters)};`, + insertTextRules: this.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range: range, + documentation: await getDocs(node) } - - const getDocs = async (node: any) => { - return await this.props.plugin.call('codeParser', 'getNodeDocumentation', node) + suggestions.push(completion) + } else if + (node.nodeType === 'ContractDefinition') { + const completion = { + label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${node.name}` }, + kind: this.monaco.languages.CompletionItemKind.Interface, + insertText: node.name, + range: range, + documentation: await getDocs(node) } - - const getParamaters = async (node: any) => { - return await this.props.plugin.call('codeParser', 'getFunctionParamaters', node) + suggestions.push(completion) + } else if + (node.nodeType === 'StructDefinition') { + const completion = { + label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${node.name}` }, + kind: this.monaco.languages.CompletionItemKind.Struct, + insertText: node.name, + range: range, + documentation: await getDocs(node) } - - const completeParameters = async (parameters: any) => { - const localParam = (parameters && parameters.parameters) || (parameters) - if (localParam) { - const params = [] - for (const key in localParam) { - params.push('${' + (key + 1) + ':' + localParam[key].name + '}') - } - return `(${params.join(', ')})` - } + suggestions.push(completion) + } else if + (node.nodeType === 'EnumDefinition') { + const completion = { + label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${node.name}` }, + kind: this.monaco.languages.CompletionItemKind.Enum, + insertText: node.name, + range: range, + documentation: await getDocs(node) } - - const getVariableDeclaration = async (node: any) => { - let variableDeclaration = await this.props.plugin.call('codeParser', 'getVariableDeclaration', node) - if (node.scope) { - const scopeNode = await this.props.plugin.call('codeParser', 'getNodeById', node.scope) - if (scopeNode) { - variableDeclaration = `${scopeNode.name}.${variableDeclaration}` - } - } - return variableDeclaration + suggestions.push(completion) + } else if + (node.nodeType === 'EventDefinition') { + const completion = { + label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` -> ${node.name} ${await getParamaters(node)}` }, + kind: this.monaco.languages.CompletionItemKind.Event, + insertText: `${node.name}${await completeParameters(node.parameters)};`, + insertTextRules: this.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range: range, + documentation: await getDocs(node) } - - - for (const node of Object.values(filteredNodes) as any[]) { - if (!node.name) continue - if (node.nodeType === 'VariableDeclaration') { - const completion = { - label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${await getVariableDeclaration(node)}` }, - kind: this.monaco.languages.CompletionItemKind.Variable, - insertText: node.name, - range: range, - documentation: await getDocs(node) - } - suggestions.push(completion) - } else if (node.nodeType === 'FunctionDefinition') { - const completion = { - label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` -> ${node.name} ${await getParamaters(node)}` }, - kind: this.monaco.languages.CompletionItemKind.Function, - insertText: `${node.name}${await completeParameters(node.parameters)};`, - insertTextRules: this.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range: range, - documentation: await getDocs(node) - } - suggestions.push(completion) - } else if - (node.nodeType === 'ContractDefinition') { - const completion = { - label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${node.name}` }, - kind: this.monaco.languages.CompletionItemKind.Interface, - insertText: node.name, - range: range, - documentation: await getDocs(node) - } - suggestions.push(completion) - } else if - (node.nodeType === 'StructDefinition') { - const completion = { - label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${node.name}` }, - kind: this.monaco.languages.CompletionItemKind.Struct, - insertText: node.name, - range: range, - documentation: await getDocs(node) - } - suggestions.push(completion) - } else if - (node.nodeType === 'EnumDefinition') { - const completion = { - label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${node.name}` }, - kind: this.monaco.languages.CompletionItemKind.Enum, - insertText: node.name, - range: range, - documentation: await getDocs(node) - } - suggestions.push(completion) - } else if - (node.nodeType === 'EventDefinition') { - const completion = { - label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` -> ${node.name} ${await getParamaters(node)}` }, - kind: this.monaco.languages.CompletionItemKind.Event, - insertText: `${node.name}${await completeParameters(node.parameters)};`, - insertTextRules: this.monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - range: range, - documentation: await getDocs(node) - } - suggestions.push(completion) - } else if - (node.nodeType === 'ModifierDefinition') { - const completion = { - label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${node.name}` }, - kind: this.monaco.languages.CompletionItemKind.Method, - insertText: node.name, - range: range, - documentation: await getDocs(node) - } - suggestions.push(completion) - } else if - (node.nodeType === 'EnumValue' || node.type === 'EnumValue') { - const completion = { - label: { label: `"${node.name}"` }, - kind: this.monaco.languages.CompletionItemKind.EnumMember, - insertText: node.name, - range: range, - documentation: null - } - suggestions.push(completion) - - } + suggestions.push(completion) + } else if + (node.nodeType === 'ModifierDefinition') { + const completion = { + label: { label: `"${node.name}"`, description: await getNodeLink(node), detail: ` ${node.name}` }, + kind: this.monaco.languages.CompletionItemKind.Method, + insertText: node.name, + range: range, + documentation: await getDocs(node) } - - return { - suggestions + suggestions.push(completion) + } else if + (node.nodeType === 'EnumValue' || node.type === 'EnumValue') { + const completion = { + label: { label: `"${node.name}"` }, + kind: this.monaco.languages.CompletionItemKind.EnumMember, + insertText: node.name, + range: range, + documentation: null } + suggestions.push(completion) + + } } - private getContractCompletions = async () => { - let nodes: any[] = [] - const { nodesAtPosition, block } = await retrieveNodesAtPosition(this.props.editorAPI, this.props.plugin) - const fileNodes = await this.props.plugin.call('codeParser', 'getCurrentFileNodes') - // find the contract and get the nodes of the contract and the base contracts and imports - if (isArray(nodesAtPosition) && nodesAtPosition.length) { - let contractNode: any = {} - for (const node of nodesAtPosition) { - if (node.nodeType === 'ContractDefinition') { - contractNode = node - const contractNodes = fileNodes.contracts[node.name] - nodes = [...Object.values(contractNodes.contractScopeNodes), ...nodes] - nodes = [...Object.values(contractNodes.baseNodesWithBaseContractScope), ...nodes] - nodes = [...Object.values(fileNodes.imports), ...nodes] - // add the nodes at the block itself - if (block && block.name) { - const contractNodes = fileNodes.contracts[node.name].contractNodes - for (const contractNode of Object.values(contractNodes)) { - if (contractNode['name'] === block.name + return { + suggestions + } + } + + private getContractCompletions = async () => { + let nodes: any[] = [] + const { nodesAtPosition, block } = await retrieveNodesAtPosition(this.props.editorAPI, this.props.plugin) + const fileNodes = await this.props.plugin.call('codeParser', 'getCurrentFileNodes') + // find the contract and get the nodes of the contract and the base contracts and imports + if (isArray(nodesAtPosition) && nodesAtPosition.length) { + let contractNode: any = {} + for (const node of nodesAtPosition) { + if (node.nodeType === 'ContractDefinition') { + contractNode = node + const contractNodes = fileNodes.contracts[node.name] + nodes = [...Object.values(contractNodes.contractScopeNodes), ...nodes] + nodes = [...Object.values(contractNodes.baseNodesWithBaseContractScope), ...nodes] + nodes = [...Object.values(fileNodes.imports), ...nodes] + // add the nodes at the block itself + if (block && block.name) { + const contractNodes = fileNodes.contracts[node.name].contractNodes + for (const contractNode of Object.values(contractNodes)) { + if (contractNode['name'] === block.name || (contractNode['kind'] === 'constructor' && block.name === 'constructor') - ) { - let nodeOfScope = await this.props.plugin.call('codeParser', 'getNodesWithScope', (contractNode as any).id) - nodes = [...nodes, ...nodeOfScope] - if (contractNode['body']) { - nodeOfScope = await this.props.plugin.call('codeParser', 'getNodesWithScope', (contractNode['body'] as any).id) - nodes = [...nodes, ...nodeOfScope] - } - } - } - } else { // we use the block info from the nodesAtPosition - const contractNodes = fileNodes.contracts[node.name].contractNodes - for (const contractNode of Object.values(contractNodes)) { - if((contractNode as any).nodeType === 'Block'){ - const nodeOfScope = await this.props.plugin.call('codeParser', 'getNodesWithScope', (contractNode as any).id) - nodes = [...nodes, ...nodeOfScope] - } - } - } - // filter private nodes, only allow them when contract ID is the same as the current contract - nodes = nodes.filter(node => { - if (node.visibility) { - if (node.visibility === 'private') { - return (node.contractId ? node.contractId === contractNode.id : false) || false - } - } - return true - }) - break; + ) { + let nodeOfScope = await this.props.plugin.call('codeParser', 'getNodesWithScope', (contractNode as any).id) + nodes = [...nodes, ...nodeOfScope] + if (contractNode['body']) { + nodeOfScope = await this.props.plugin.call('codeParser', 'getNodesWithScope', (contractNode['body'] as any).id) + nodes = [...nodes, ...nodeOfScope] } - + } } - } else { - // get all the nodes from a simple code parser which only parses the current file - const allNodesFromAntlr = await this.props.plugin.call('codeParser', 'listAstNodes') - if (allNodesFromAntlr) { - nodes = [...nodes, ...allNodesFromAntlr] + } else { // we use the block info from the nodesAtPosition + const contractNodes = fileNodes.contracts[node.name].contractNodes + for (const contractNode of Object.values(contractNodes)) { + if((contractNode as any).nodeType === 'Block'){ + const nodeOfScope = await this.props.plugin.call('codeParser', 'getNodesWithScope', (contractNode as any).id) + nodes = [...nodes, ...nodeOfScope] + } } - } - return nodes - } - - private getThisCompletions = async () => { - let nodes: any[] = [] - let thisCompletionNodes = await this.getContractCompletions() - const allowedTypesForThisCompletion = ['VariableDeclaration', 'FunctionDefinition'] - // with this. you can't have internal nodes and no contractDefinitions - thisCompletionNodes = thisCompletionNodes.filter(node => { - if (node.visibility && (node.visibility === 'internal' || node.visibility === 'private')) { - return false - } - if (node.nodeType && !allowedTypesForThisCompletion.includes(node.nodeType)) { - return false + } + // filter private nodes, only allow them when contract ID is the same as the current contract + nodes = nodes.filter(node => { + if (node.visibility) { + if (node.visibility === 'private') { + return (node.contractId ? node.contractId === contractNode.id : false) || false + } } return true - }) - nodes = [...nodes, ...thisCompletionNodes] - return nodes - } + }) + break; + } - private getDotCompletions = async (nameOfLastTypedExpression: string, range) => { - const contractCompletions = await this.getContractCompletions() - let nodes: any[] = [] - let suggestions: monacoTypes.languages.CompletionItem[] = [] - - const filterNodes = (nodes: any[], parentNode: any, declarationOf: any = null) => { - return nodes && nodes.filter(node => { - if (node.visibility) { - if (declarationOf && declarationOf.nodeType && declarationOf.nodeType === 'StructDefinition') { - return true - } - if ((node.visibility === 'internal' && !parentNode.isBaseNode) || node.visibility === 'private') { - return false - } - } - return true - }) + } + } else { + // get all the nodes from a simple code parser which only parses the current file + const allNodesFromAntlr = await this.props.plugin.call('codeParser', 'listAstNodes') + if (allNodesFromAntlr) { + nodes = [...nodes, ...allNodesFromAntlr] + } + } + return nodes + } + + private getThisCompletions = async () => { + let nodes: any[] = [] + let thisCompletionNodes = await this.getContractCompletions() + const allowedTypesForThisCompletion = ['VariableDeclaration', 'FunctionDefinition'] + // with this. you can't have internal nodes and no contractDefinitions + thisCompletionNodes = thisCompletionNodes.filter(node => { + if (node.visibility && (node.visibility === 'internal' || node.visibility === 'private')) { + return false + } + if (node.nodeType && !allowedTypesForThisCompletion.includes(node.nodeType)) { + return false + } + return true + }) + nodes = [...nodes, ...thisCompletionNodes] + return nodes + } + + private getDotCompletions = async (nameOfLastTypedExpression: string, range) => { + const contractCompletions = await this.getContractCompletions() + let nodes: any[] = [] + let suggestions: monacoTypes.languages.CompletionItem[] = [] + + const filterNodes = (nodes: any[], parentNode: any, declarationOf: any = null) => { + return nodes && nodes.filter(node => { + if (node.visibility) { + if (declarationOf && declarationOf.nodeType && declarationOf.nodeType === 'StructDefinition') { + return true + } + if ((node.visibility === 'internal' && !parentNode.isBaseNode) || node.visibility === 'private') { + return false + } } + return true + }) + } - for (const nodeOfScope of contractCompletions) { - if (nodeOfScope.name === nameOfLastTypedExpression) { - if (nodeOfScope.typeName && nodeOfScope.typeName.nodeType === 'UserDefinedTypeName') { - const declarationOf: AstNode = await this.props.plugin.call('codeParser', 'declarationOf', nodeOfScope.typeName) - nodes = [...nodes, - ...filterNodes(declarationOf.nodes, nodeOfScope, declarationOf) + for (const nodeOfScope of contractCompletions) { + if (nodeOfScope.name === nameOfLastTypedExpression) { + if (nodeOfScope.typeName && nodeOfScope.typeName.nodeType === 'UserDefinedTypeName') { + const declarationOf: AstNode = await this.props.plugin.call('codeParser', 'declarationOf', nodeOfScope.typeName) + nodes = [...nodes, + ...filterNodes(declarationOf.nodes, nodeOfScope, declarationOf) || filterNodes(declarationOf.members, nodeOfScope, declarationOf)] - const baseContracts = await this.getlinearizedBaseContracts(declarationOf) - for (const baseContract of baseContracts) { - nodes = [...nodes, ...filterNodes(baseContract.nodes, nodeOfScope)] - } - } else if (nodeOfScope.members) { - nodes = [...nodes, ...filterNodes(nodeOfScope.members, nodeOfScope)] - } else if (nodeOfScope.typeName && nodeOfScope.typeName.nodeType === 'ArrayTypeName') { - suggestions = [...suggestions, ...getContextualAutoCompleteBTypeName('ArrayTypeName', range, this.monaco)] - } else if (nodeOfScope.typeName && nodeOfScope.typeName.nodeType === 'ElementaryTypeName' && nodeOfScope.typeName.name === 'bytes') { - suggestions = [...suggestions, ...getContextualAutoCompleteBTypeName('bytes', range, this.monaco)] - } else if (nodeOfScope.typeName && nodeOfScope.typeName.nodeType === 'ElementaryTypeName' && nodeOfScope.typeName.name === 'address') { - suggestions = [...suggestions, ...getContextualAutoCompleteBTypeName('address', range, this.monaco)] - } - } - + const baseContracts = await this.getlinearizedBaseContracts(declarationOf) + for (const baseContract of baseContracts) { + nodes = [...nodes, ...filterNodes(baseContract.nodes, nodeOfScope)] + } + } else if (nodeOfScope.members) { + nodes = [...nodes, ...filterNodes(nodeOfScope.members, nodeOfScope)] + } else if (nodeOfScope.typeName && nodeOfScope.typeName.nodeType === 'ArrayTypeName') { + suggestions = [...suggestions, ...getContextualAutoCompleteBTypeName('ArrayTypeName', range, this.monaco)] + } else if (nodeOfScope.typeName && nodeOfScope.typeName.nodeType === 'ElementaryTypeName' && nodeOfScope.typeName.name === 'bytes') { + suggestions = [...suggestions, ...getContextualAutoCompleteBTypeName('bytes', range, this.monaco)] + } else if (nodeOfScope.typeName && nodeOfScope.typeName.nodeType === 'ElementaryTypeName' && nodeOfScope.typeName.name === 'address') { + suggestions = [...suggestions, ...getContextualAutoCompleteBTypeName('address', range, this.monaco)] } + } + } - return { nodes, suggestions } - } - private getlinearizedBaseContracts = async (node: any) => { - let params = [] - if (node.linearizedBaseContracts) { - for (const id of node.linearizedBaseContracts) { - if (id !== node.id) { - const baseContract = await this.props.plugin.call('codeParser', 'getNodeById', id) - params = [...params, ...[baseContract]] - } - } + return { nodes, suggestions } + } + + private getlinearizedBaseContracts = async (node: any) => { + let params = [] + if (node.linearizedBaseContracts) { + for (const id of node.linearizedBaseContracts) { + if (id !== node.id) { + const baseContract = await this.props.plugin.call('codeParser', 'getNodeById', id) + params = [...params, ...[baseContract]] } - return params + } } + return params + } - /** + /** * * @param lineTextBeforeCursor * @returns */ - private async getLastNodeInExpression(lineTextBeforeCursor: string) { + private async getLastNodeInExpression(lineTextBeforeCursor: string) { - const wrapLineInFunction = async (text: string) => { - return `function() { + const wrapLineInFunction = async (text: string) => { + return `function() { ${text} }` - } + } - let lastNodeInExpression + let lastNodeInExpression - const linesToCheck = + const linesToCheck = [ - lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;", - lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;}", - lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode);", - await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;"), - await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;}"), - await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;)"), - await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode)"), - await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode);"), + lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;", + lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;}", + lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode);", + await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;"), + await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;}"), + await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode;)"), + await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode)"), + await wrapLineInFunction(lineTextBeforeCursor.substring(0, lineTextBeforeCursor.lastIndexOf('.')) + ".lastnode);"), ] - for (const line of linesToCheck) { - try { - const lineAst = await this.props.plugin.call('codeParser', 'parseSolidity', line) - const lastNode = await this.props.plugin.call('codeParser', 'getLastNodeInLine', lineAst) - if (lastNode) { - lastNodeInExpression = lastNode - break - } + for (const line of linesToCheck) { + try { + const lineAst = await this.props.plugin.call('codeParser', 'parseSolidity', line) + const lastNode = await this.props.plugin.call('codeParser', 'getLastNodeInLine', lineAst) + if (lastNode) { + lastNodeInExpression = lastNode + break + } - } catch (e) { + } catch (e) { - } - } - return lastNodeInExpression + } } + return lastNodeInExpression + } } \ No newline at end of file diff --git a/libs/remix-ui/editor/src/lib/providers/definitionProvider.ts b/libs/remix-ui/editor/src/lib/providers/definitionProvider.ts index b7bbfedf74..247a215eab 100644 --- a/libs/remix-ui/editor/src/lib/providers/definitionProvider.ts +++ b/libs/remix-ui/editor/src/lib/providers/definitionProvider.ts @@ -3,86 +3,86 @@ import monaco from "../../types/monaco" import { EditorUIProps } from "../remix-ui-editor" export class RemixDefinitionProvider implements monaco.languages.DefinitionProvider { - props: EditorUIProps - monaco: Monaco - constructor(props: any, monaco: any) { - this.props = props - this.monaco = monaco - } + props: EditorUIProps + monaco: Monaco + constructor(props: any, monaco: any) { + this.props = props + this.monaco = monaco + } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async provideDefinition(model: monaco.editor.ITextModel, position: monaco.Position, token: monaco.CancellationToken): Promise { - const cursorPosition = this.props.editorAPI.getCursorPosition() - let jumpLocation = await this.jumpToDefinition(cursorPosition) - if (!jumpLocation || !jumpLocation.fileName) { - const line = model.getLineContent(position.lineNumber) - const lastpart = line.substring(0, position.column - 1).split(';').pop() - if (lastpart.startsWith('import')) { - const importPath = line.substring(lastpart.indexOf('"') + 1) - const importPath2 = importPath.substring(0, importPath.indexOf('"')) - jumpLocation = { - startLineNumber: 1, - startColumn: 1, - endColumn: 1, - endLineNumber: 1, - fileName: importPath2 - } - } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async provideDefinition(model: monaco.editor.ITextModel, position: monaco.Position, token: monaco.CancellationToken): Promise { + const cursorPosition = this.props.editorAPI.getCursorPosition() + let jumpLocation = await this.jumpToDefinition(cursorPosition) + if (!jumpLocation || !jumpLocation.fileName) { + const line = model.getLineContent(position.lineNumber) + const lastpart = line.substring(0, position.column - 1).split(';').pop() + if (lastpart.startsWith('import')) { + const importPath = line.substring(lastpart.indexOf('"') + 1) + const importPath2 = importPath.substring(0, importPath.indexOf('"')) + jumpLocation = { + startLineNumber: 1, + startColumn: 1, + endColumn: 1, + endLineNumber: 1, + fileName: importPath2 } - if (jumpLocation && jumpLocation.fileName) { - return [{ - uri: this.monaco.Uri.parse(jumpLocation.fileName), - range: { - startLineNumber: jumpLocation.startLineNumber, - startColumn: jumpLocation.startColumn, - endLineNumber: jumpLocation.endLineNumber, - endColumn: jumpLocation.endColumn - } - }] + } + } + if (jumpLocation && jumpLocation.fileName) { + return [{ + uri: this.monaco.Uri.parse(jumpLocation.fileName), + range: { + startLineNumber: jumpLocation.startLineNumber, + startColumn: jumpLocation.startColumn, + endLineNumber: jumpLocation.endLineNumber, + endColumn: jumpLocation.endColumn } - return [] + }] } + return [] + } - async jumpToDefinition(position: any) { - const node = await this.props.plugin.call('codeParser', 'definitionAtPosition', position) - const sourcePosition = await this.props.plugin.call('codeParser', 'positionOfDefinition', node) - if (sourcePosition) { - return await this.jumpToPosition(sourcePosition) - } + async jumpToDefinition(position: any) { + const node = await this.props.plugin.call('codeParser', 'definitionAtPosition', position) + const sourcePosition = await this.props.plugin.call('codeParser', 'positionOfDefinition', node) + if (sourcePosition) { + return await this.jumpToPosition(sourcePosition) } + } - /* + /* * onClick jump to position of ast node in the editor */ - async jumpToPosition(position: any) { - const jumpToLine = async (fileName: string, lineColumn: any) => { - const fileTarget = await this.props.plugin.call('fileManager', 'getPathFromUrl', fileName) - if (fileName !== await this.props.plugin.call('fileManager', 'file')) { - await this.props.plugin.call('contentImport', 'resolveAndSave', fileName, null) - const fileContent = await this.props.plugin.call('fileManager', 'readFile', fileName) - try { - await this.props.plugin.call('editor', 'addModel', fileTarget.file, fileContent) - } catch (e) { + async jumpToPosition(position: any) { + const jumpToLine = async (fileName: string, lineColumn: any) => { + const fileTarget = await this.props.plugin.call('fileManager', 'getPathFromUrl', fileName) + if (fileName !== await this.props.plugin.call('fileManager', 'file')) { + await this.props.plugin.call('contentImport', 'resolveAndSave', fileName, null) + const fileContent = await this.props.plugin.call('fileManager', 'readFile', fileName) + try { + await this.props.plugin.call('editor', 'addModel', fileTarget.file, fileContent) + } catch (e) { - } - } - if (lineColumn.start && lineColumn.start.line >= 0 && lineColumn.start.column >= 0) { - const pos = { - startLineNumber: lineColumn.start.line + 1, - startColumn: lineColumn.start.column + 1, - endColumn: lineColumn.end.column + 1, - endLineNumber: lineColumn.end.line + 1, - fileName: (fileTarget && fileTarget.file) || fileName - } - return pos - } } - const lastCompilationResult = await this.props.plugin.call('codeParser', 'getLastCompilationResult') // await this.props.plugin.call('compilerArtefacts', 'getLastCompilationResult') - if (lastCompilationResult && lastCompilationResult.languageversion.indexOf('soljson') === 0 && lastCompilationResult.data) { - - const lineColumn = await this.props.plugin.call('codeParser', 'getLineColumnOfPosition', position) - const filename = lastCompilationResult.getSourceName(position.file) - return await jumpToLine(filename, lineColumn) + } + if (lineColumn.start && lineColumn.start.line >= 0 && lineColumn.start.column >= 0) { + const pos = { + startLineNumber: lineColumn.start.line + 1, + startColumn: lineColumn.start.column + 1, + endColumn: lineColumn.end.column + 1, + endLineNumber: lineColumn.end.line + 1, + fileName: (fileTarget && fileTarget.file) || fileName } + return pos + } + } + const lastCompilationResult = await this.props.plugin.call('codeParser', 'getLastCompilationResult') // await this.props.plugin.call('compilerArtefacts', 'getLastCompilationResult') + if (lastCompilationResult && lastCompilationResult.languageversion.indexOf('soljson') === 0 && lastCompilationResult.data) { + + const lineColumn = await this.props.plugin.call('codeParser', 'getLineColumnOfPosition', position) + const filename = lastCompilationResult.getSourceName(position.file) + return await jumpToLine(filename, lineColumn) } + } } \ No newline at end of file diff --git a/libs/remix-ui/editor/src/lib/providers/highlightProvider.ts b/libs/remix-ui/editor/src/lib/providers/highlightProvider.ts index cad254a208..b1f3305df6 100644 --- a/libs/remix-ui/editor/src/lib/providers/highlightProvider.ts +++ b/libs/remix-ui/editor/src/lib/providers/highlightProvider.ts @@ -4,35 +4,35 @@ import monaco from "../../types/monaco" import { EditorUIProps } from "../remix-ui-editor" export class RemixHighLightProvider implements monaco.languages.DocumentHighlightProvider { - props: EditorUIProps - monaco: Monaco - constructor(props: any, monaco: any) { - this.props = props - this.monaco = monaco - } + props: EditorUIProps + monaco: Monaco + constructor(props: any, monaco: any) { + this.props = props + this.monaco = monaco + } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async provideDocumentHighlights(model: monaco.editor.ITextModel, position: monaco.Position, token: monaco.CancellationToken): Promise { - const cursorPosition = this.props.editorAPI.getCursorPosition() - const nodes = await this.props.plugin.call('codeParser', 'referrencesAtPosition', cursorPosition) - const highlights: monaco.languages.DocumentHighlight[] = [] - if (nodes && nodes.length) { - const compilationResult = await this.props.plugin.call('codeParser', 'getLastCompilationResult') - const file = await this.props.plugin.call('fileManager', 'file') - if (compilationResult && compilationResult.data && compilationResult.data.sources[file]) { - for (const node of nodes) { - const position = sourceMappingDecoder.decode(node.src) - const fileInNode = compilationResult.getSourceName(position.file) - if (fileInNode === file) { - const lineColumn = await this.props.plugin.call('codeParser', 'getLineColumnOfPosition', position) - const range = new this.monaco.Range(lineColumn.start.line + 1, lineColumn.start.column + 1, lineColumn.end.line + 1, lineColumn.end.column + 1) - highlights.push({ - range, - }) - } - } - } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async provideDocumentHighlights(model: monaco.editor.ITextModel, position: monaco.Position, token: monaco.CancellationToken): Promise { + const cursorPosition = this.props.editorAPI.getCursorPosition() + const nodes = await this.props.plugin.call('codeParser', 'referrencesAtPosition', cursorPosition) + const highlights: monaco.languages.DocumentHighlight[] = [] + if (nodes && nodes.length) { + const compilationResult = await this.props.plugin.call('codeParser', 'getLastCompilationResult') + const file = await this.props.plugin.call('fileManager', 'file') + if (compilationResult && compilationResult.data && compilationResult.data.sources[file]) { + for (const node of nodes) { + const position = sourceMappingDecoder.decode(node.src) + const fileInNode = compilationResult.getSourceName(position.file) + if (fileInNode === file) { + const lineColumn = await this.props.plugin.call('codeParser', 'getLineColumnOfPosition', position) + const range = new this.monaco.Range(lineColumn.start.line + 1, lineColumn.start.column + 1, lineColumn.end.line + 1, lineColumn.end.column + 1) + highlights.push({ + range, + }) + } } - return highlights + } } + return highlights + } } \ No newline at end of file diff --git a/libs/remix-ui/editor/src/lib/providers/hoverProvider.ts b/libs/remix-ui/editor/src/lib/providers/hoverProvider.ts index eed9b7609d..035eca6f4f 100644 --- a/libs/remix-ui/editor/src/lib/providers/hoverProvider.ts +++ b/libs/remix-ui/editor/src/lib/providers/hoverProvider.ts @@ -4,203 +4,203 @@ import { EditorUIProps } from '../remix-ui-editor' import { monacoTypes } from '@remix-ui/editor'; export class RemixHoverProvider implements monacoTypes.languages.HoverProvider { - props: EditorUIProps - monaco: Monaco - constructor(props: any, monaco: any) { - this.props = props - this.monaco = monaco + props: EditorUIProps + monaco: Monaco + constructor(props: any, monaco: any) { + this.props = props + this.monaco = monaco + } + + provideHover = async function (model: monacoTypes.editor.ITextModel, position: monacoTypes.Position): Promise { + const cursorPosition = this.props.editorAPI.getHoverPosition(position) + const nodeAtPosition = await this.props.plugin.call('codeParser', 'definitionAtPosition', cursorPosition) + const contents = [] + + const getDocs = async (node: any) => { + contents.push({ + value: await this.props.plugin.call('codeParser', 'getNodeDocumentation', node) + }) } - provideHover = async function (model: monacoTypes.editor.ITextModel, position: monacoTypes.Position): Promise { - const cursorPosition = this.props.editorAPI.getHoverPosition(position) - const nodeAtPosition = await this.props.plugin.call('codeParser', 'definitionAtPosition', cursorPosition) - const contents = [] + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const getScope = async (node: any) => { + if (node.id) { + contents.push({ + value: `id: ${node.id}` + }) + } + if (node.scope) { + contents.push({ + value: `scope: ${node.scope}` + }) + } + } - const getDocs = async (node: any) => { - contents.push({ - value: await this.props.plugin.call('codeParser', 'getNodeDocumentation', node) - }) - } + const getLinks = async (node: any) => { + contents.push({ + value: await this.props.plugin.call('codeParser', 'getNodeLink', node) + }) + } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const getScope = async (node: any) => { - if (node.id) { - contents.push({ - value: `id: ${node.id}` - }) - } - if (node.scope) { - contents.push({ - value: `scope: ${node.scope}` - }) - } - } + const getVariableDeclaration = async (node: any) => { + return await this.props.plugin.call('codeParser', 'getVariableDeclaration', node) + } - const getLinks = async (node: any) => { - contents.push({ - value: await this.props.plugin.call('codeParser', 'getNodeLink', node) - }) - } - const getVariableDeclaration = async (node: any) => { - return await this.props.plugin.call('codeParser', 'getVariableDeclaration', node) - } + const getParamaters = async (node: any) => { + return await this.props.plugin.call('codeParser', 'getFunctionParamaters', node) + } + + const getReturnParameters = async (node: any) => { + return await this.props.plugin.call('codeParser', 'getFunctionReturnParameters', node) + } - const getParamaters = async (node: any) => { - return await this.props.plugin.call('codeParser', 'getFunctionParamaters', node) + const getOverrides = async (node: any) => { + if (node.overrides) { + const overrides = [] + for (const override of node.overrides.overrides) { + overrides.push(override.name) } + if (overrides.length) + return ` overrides (${overrides.join(', ')})` + } + return '' + } - const getReturnParameters = async (node: any) => { - return await this.props.plugin.call('codeParser', 'getFunctionReturnParameters', node) + const getlinearizedBaseContracts = async (node: any) => { + const params = [] + if (node.linearizedBaseContracts) { + for (const id of node.linearizedBaseContracts) { + const baseContract = await this.props.plugin.call('codeParser', 'getNodeById', id) + params.push( + baseContract.name + ) } + if (params.length) + return `is ${params.join(', ')}` + } + return '' + } - - const getOverrides = async (node: any) => { - if (node.overrides) { - const overrides = [] - for (const override of node.overrides.overrides) { - overrides.push(override.name) - } - if (overrides.length) - return ` overrides (${overrides.join(', ')})` - } - return '' + if (nodeAtPosition) { + if (nodeAtPosition.absolutePath) { + const target = await this.props.plugin.call('fileManager', 'getPathFromUrl', nodeAtPosition.absolutePath) + if (target.file !== nodeAtPosition.absolutePath) { + contents.push({ + value: `${target.file}` + }) } - - const getlinearizedBaseContracts = async (node: any) => { - const params = [] - if (node.linearizedBaseContracts) { - for (const id of node.linearizedBaseContracts) { - const baseContract = await this.props.plugin.call('codeParser', 'getNodeById', id) - params.push( - baseContract.name - ) - } - if (params.length) - return `is ${params.join(', ')}` - } - return '' + contents.push({ + value: `${nodeAtPosition.absolutePath}` + }) + } + if (nodeAtPosition.nodeType === 'VariableDeclaration') { + contents.push({ + value: await getVariableDeclaration(nodeAtPosition) + }) + + } + else if (nodeAtPosition.nodeType === 'ElementaryTypeName') { + contents.push({ + value: `${nodeAtPosition.typeDescriptions.typeString}` + }) + + } else if (nodeAtPosition.nodeType === 'FunctionDefinition') { + if (!nodeAtPosition.name) return + const returns = await getReturnParameters(nodeAtPosition) + contents.push({ + value: `function ${nodeAtPosition.name} ${await getParamaters(nodeAtPosition)} ${nodeAtPosition.visibility} ${nodeAtPosition.stateMutability}${await getOverrides(nodeAtPosition)} ${returns ? `returns ${returns}` : ''}` + }) + + } else if (nodeAtPosition.nodeType === 'ModifierDefinition') { + contents.push({ + value: `modifier ${nodeAtPosition.name} ${await getParamaters(nodeAtPosition)}` + }) + } else if (nodeAtPosition.nodeType === 'EventDefinition') { + contents.push({ + value: `modifier ${nodeAtPosition.name} ${await getParamaters(nodeAtPosition)}` + }) + } else if (nodeAtPosition.nodeType === 'ContractDefinition') { + contents.push({ + value: `${nodeAtPosition.contractKind || nodeAtPosition.kind} ${nodeAtPosition.name} ${await getlinearizedBaseContracts(nodeAtPosition)}` + }) + + } else if (nodeAtPosition.nodeType === 'InvalidNode') { + contents.push({ + value: `There are errors in the code.` + }) + } else if (nodeAtPosition.nodeType === 'Block') { + + } else { + contents.push({ + value: `${nodeAtPosition.nodeType}` + }) + + } + + for (const key in contents) { + contents[key].value = '```remix-solidity\n' + contents[key].value + '\n```' + } + getLinks(nodeAtPosition) + getDocs(nodeAtPosition) + // getScope(nodeAtPosition) + + try { + if (nodeAtPosition?.name === 'msg') { + const global = await this.props.plugin.call('debugger', 'globalContext') + if (global !== null && global[nodeAtPosition?.name]) { + contents.push({ + value: `GLOBAL VARIABLE ${nodeAtPosition.name}: ${JSON.stringify(global[nodeAtPosition?.name], null, '\t')}` + }) + } } + } catch (e) {} - if (nodeAtPosition) { - if (nodeAtPosition.absolutePath) { - const target = await this.props.plugin.call('fileManager', 'getPathFromUrl', nodeAtPosition.absolutePath) - if (target.file !== nodeAtPosition.absolutePath) { - contents.push({ - value: `${target.file}` - }) - } - contents.push({ - value: `${nodeAtPosition.absolutePath}` - }) - } - if (nodeAtPosition.nodeType === 'VariableDeclaration') { - contents.push({ - value: await getVariableDeclaration(nodeAtPosition) - }) - - } - else if (nodeAtPosition.nodeType === 'ElementaryTypeName') { - contents.push({ - value: `${nodeAtPosition.typeDescriptions.typeString}` - }) - - } else if (nodeAtPosition.nodeType === 'FunctionDefinition') { - if (!nodeAtPosition.name) return - const returns = await getReturnParameters(nodeAtPosition) - contents.push({ - value: `function ${nodeAtPosition.name} ${await getParamaters(nodeAtPosition)} ${nodeAtPosition.visibility} ${nodeAtPosition.stateMutability}${await getOverrides(nodeAtPosition)} ${returns ? `returns ${returns}` : ''}` - }) - - } else if (nodeAtPosition.nodeType === 'ModifierDefinition') { - contents.push({ - value: `modifier ${nodeAtPosition.name} ${await getParamaters(nodeAtPosition)}` - }) - } else if (nodeAtPosition.nodeType === 'EventDefinition') { - contents.push({ - value: `modifier ${nodeAtPosition.name} ${await getParamaters(nodeAtPosition)}` - }) - } else if (nodeAtPosition.nodeType === 'ContractDefinition') { - contents.push({ - value: `${nodeAtPosition.contractKind || nodeAtPosition.kind} ${nodeAtPosition.name} ${await getlinearizedBaseContracts(nodeAtPosition)}` - }) - - } else if (nodeAtPosition.nodeType === 'InvalidNode') { - contents.push({ - value: `There are errors in the code.` - }) - } else if (nodeAtPosition.nodeType === 'Block') { - - } else { - contents.push({ - value: `${nodeAtPosition.nodeType}` - }) - - } - - for (const key in contents) { - contents[key].value = '```remix-solidity\n' + contents[key].value + '\n```' - } - getLinks(nodeAtPosition) - getDocs(nodeAtPosition) - // getScope(nodeAtPosition) - - try { - if (nodeAtPosition?.name === 'msg') { - const global = await this.props.plugin.call('debugger', 'globalContext') - if (global !== null && global[nodeAtPosition?.name]) { - contents.push({ - value: `GLOBAL VARIABLE ${nodeAtPosition.name}: ${JSON.stringify(global[nodeAtPosition?.name], null, '\t')}` - }) - } - } - } catch (e) {} - - try { - if (nodeAtPosition?.expression?.name === 'msg' && nodeAtPosition?.memberName) { - const global = await this.props.plugin.call('debugger', 'globalContext') - if (global !== null && global[nodeAtPosition?.expression?.name][nodeAtPosition.memberName] && global[nodeAtPosition?.expression?.name][nodeAtPosition.memberName]) { - contents.push({ - value: `GLOBAL VARIABLE msg.${nodeAtPosition.memberName}: ${global[nodeAtPosition?.expression?.name][nodeAtPosition.memberName]}` - }) - } - } - } catch (e) {} - - try { - const decodedVar = await this.props.plugin.call('debugger', 'decodeLocalVariable', nodeAtPosition.id) - if (decodedVar !== null && decodedVar.type) { - contents.push({ - value: `LOCAL VARIABLE ${nodeAtPosition.name}: ${typeof(decodedVar.value) === 'string' ? decodedVar.value : JSON.stringify(decodedVar.value, null, '\t')}` - }) - } - } catch (e) {} - - try { - const decodedVar = await this.props.plugin.call('debugger', 'decodeStateVariable', nodeAtPosition.id) - if (decodedVar !== null && decodedVar.type) { - contents.push({ - value: `STATE VARIABLE ${nodeAtPosition.name}: ${typeof(decodedVar.value) === 'string' ? decodedVar.value : JSON.stringify(decodedVar.value, null, '\t')}` - }) - } - } catch (e) {} + try { + if (nodeAtPosition?.expression?.name === 'msg' && nodeAtPosition?.memberName) { + const global = await this.props.plugin.call('debugger', 'globalContext') + if (global !== null && global[nodeAtPosition?.expression?.name][nodeAtPosition.memberName] && global[nodeAtPosition?.expression?.name][nodeAtPosition.memberName]) { + contents.push({ + value: `GLOBAL VARIABLE msg.${nodeAtPosition.memberName}: ${global[nodeAtPosition?.expression?.name][nodeAtPosition.memberName]}` + }) + } } - - setTimeout(() => { - // eslint-disable-next-line no-debugger - // debugger - },1000) - - return { - range: new this.monaco.Range( - position.lineNumber, - position.column, - position.lineNumber, - model.getLineMaxColumn(position.lineNumber) - ), - contents: contents - }; + } catch (e) {} + + try { + const decodedVar = await this.props.plugin.call('debugger', 'decodeLocalVariable', nodeAtPosition.id) + if (decodedVar !== null && decodedVar.type) { + contents.push({ + value: `LOCAL VARIABLE ${nodeAtPosition.name}: ${typeof(decodedVar.value) === 'string' ? decodedVar.value : JSON.stringify(decodedVar.value, null, '\t')}` + }) + } + } catch (e) {} + + try { + const decodedVar = await this.props.plugin.call('debugger', 'decodeStateVariable', nodeAtPosition.id) + if (decodedVar !== null && decodedVar.type) { + contents.push({ + value: `STATE VARIABLE ${nodeAtPosition.name}: ${typeof(decodedVar.value) === 'string' ? decodedVar.value : JSON.stringify(decodedVar.value, null, '\t')}` + }) + } + } catch (e) {} } + setTimeout(() => { + // eslint-disable-next-line no-debugger + // debugger + },1000) + + return { + range: new this.monaco.Range( + position.lineNumber, + position.column, + position.lineNumber, + model.getLineMaxColumn(position.lineNumber) + ), + contents: contents + }; + } + } \ No newline at end of file diff --git a/libs/remix-ui/editor/src/lib/providers/referenceProvider.ts b/libs/remix-ui/editor/src/lib/providers/referenceProvider.ts index 410dbe588d..badee820e5 100644 --- a/libs/remix-ui/editor/src/lib/providers/referenceProvider.ts +++ b/libs/remix-ui/editor/src/lib/providers/referenceProvider.ts @@ -4,44 +4,44 @@ import monaco from "../../types/monaco" import { EditorUIProps } from "../remix-ui-editor" export class RemixReferenceProvider implements monaco.languages.ReferenceProvider { - props: EditorUIProps - monaco: Monaco - constructor(props: any, monaco: any) { - this.props = props - this.monaco = monaco - } + props: EditorUIProps + monaco: Monaco + constructor(props: any, monaco: any) { + this.props = props + this.monaco = monaco + } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - async provideReferences(model: monaco.editor.ITextModel, position: monaco.Position, context: monaco.languages.ReferenceContext, token: monaco.CancellationToken) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async provideReferences(model: monaco.editor.ITextModel, position: monaco.Position, context: monaco.languages.ReferenceContext, token: monaco.CancellationToken) { - const cursorPosition = this.props.editorAPI.getCursorPosition() - const nodes = await this.props.plugin.call('codeParser', 'referrencesAtPosition', cursorPosition) - const references = [] - if (nodes && nodes.length) { - const compilationResult = await this.props.plugin.call('codeParser', 'getLastCompilationResult') - const file = await this.props.plugin.call('fileManager', 'file') - if (compilationResult && compilationResult.data && compilationResult.data.sources[file]) { - for (const node of nodes) { - const position = sourceMappingDecoder.decode(node.src) - const fileInNode = compilationResult.getSourceName(position.file) - let fileTarget = await this.props.plugin.call('fileManager', 'getPathFromUrl', fileInNode) - fileTarget = fileTarget.file - const fileContent = await this.props.plugin.call('fileManager', 'readFile', fileInNode) - const lineColumn = await this.props.plugin.call('codeParser', 'getLineColumnOfPosition', position) + const cursorPosition = this.props.editorAPI.getCursorPosition() + const nodes = await this.props.plugin.call('codeParser', 'referrencesAtPosition', cursorPosition) + const references = [] + if (nodes && nodes.length) { + const compilationResult = await this.props.plugin.call('codeParser', 'getLastCompilationResult') + const file = await this.props.plugin.call('fileManager', 'file') + if (compilationResult && compilationResult.data && compilationResult.data.sources[file]) { + for (const node of nodes) { + const position = sourceMappingDecoder.decode(node.src) + const fileInNode = compilationResult.getSourceName(position.file) + let fileTarget = await this.props.plugin.call('fileManager', 'getPathFromUrl', fileInNode) + fileTarget = fileTarget.file + const fileContent = await this.props.plugin.call('fileManager', 'readFile', fileInNode) + const lineColumn = await this.props.plugin.call('codeParser', 'getLineColumnOfPosition', position) - try { - this.props.plugin.call('editor', 'addModel', fileTarget, fileContent) - } catch (e) { + try { + this.props.plugin.call('editor', 'addModel', fileTarget, fileContent) + } catch (e) { - } - const range = new this.monaco.Range(lineColumn.start.line + 1, lineColumn.start.column + 1, lineColumn.end.line + 1, lineColumn.end.column + 1) - references.push({ - range, - uri: this.monaco.Uri.parse(fileTarget) - }) - } } + const range = new this.monaco.Range(lineColumn.start.line + 1, lineColumn.start.column + 1, lineColumn.end.line + 1, lineColumn.end.column + 1) + references.push({ + range, + uri: this.monaco.Uri.parse(fileTarget) + }) } - return references } + } + return references + } } \ No newline at end of file diff --git a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx index ee614eddaa..f88cdeb9ee 100644 --- a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx +++ b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx @@ -565,7 +565,7 @@ export const EditorUI = (props: EditorUIProps) => { }) editor.onDidPaste((e) => { - if (!pasteCodeRef.current && e && e.range && e.range.startLineNumber >= 0 && e.range.endLineNumber >= 0 && e.range.endLineNumber - e.range.startLineNumber > 10) { + if (!pasteCodeRef.current && e && e.range && e.range.startLineNumber >= 0 && e.range.endLineNumber >= 0 && e.range.endLineNumber - e.range.startLineNumber > 10) { const modalContent: AlertModal = { id: 'newCodePasted', title: 'Pasted Code Alert', @@ -767,7 +767,7 @@ export const EditorUI = (props: EditorUIProps) => { {editorModelsState[props.currentFile]?.readOnly && The file is opened in read-only mode. - + }
) diff --git a/libs/remix-ui/editor/src/lib/web-types.ts b/libs/remix-ui/editor/src/lib/web-types.ts index cdf48b9219..dd70a43bc0 100644 --- a/libs/remix-ui/editor/src/lib/web-types.ts +++ b/libs/remix-ui/editor/src/lib/web-types.ts @@ -2,240 +2,240 @@ import { remixTypes } from './remix-plugin-types' import { hardhatEthersExtension } from './hardhat-ethers-extension' export const loadTypes = async (monaco) => { - // ethers.js - - // @ts-ignore - const ethersAbi = await import('raw-loader!@ethersproject/abi/lib/index.d.ts') - const ethersAbiDefault = ethersAbi.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersAbiDefault, `file:///node_modules/@types/@ethersproject_abi/index.d.ts`) - - // @ts-ignore - const ethersAbstract = await import('raw-loader!@ethersproject/abstract-provider/lib/index.d.ts') - const ethersAbstractDefault = ethersAbstract.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersAbstractDefault, `file:///node_modules/@types/@ethersproject_abstract-provider/index.d.ts`) - - // @ts-ignore - const ethersSigner = await import('raw-loader!@ethersproject/abstract-signer/lib/index.d.ts') - const ethersSignerDefault = ethersSigner.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersSignerDefault, `file:///node_modules/@types/@ethersproject_abstract-signer/index.d.ts`) - - // @ts-ignore - const ethersAddress = await import('raw-loader!@ethersproject/address/lib/index.d.ts') - const ethersAddressDefault = ethersAddress.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersAddressDefault, `file:///node_modules/@types/@ethersproject_address/index.d.ts`) - - // @ts-ignore - const ethersBase64 = await import('raw-loader!@ethersproject/base64/lib/index.d.ts') - const ethersBase64Default = ethersBase64.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersBase64Default, `file:///node_modules/@types/@ethersproject_base64/index.d.ts`) + // ethers.js + + // @ts-ignore + const ethersAbi = await import('raw-loader!@ethersproject/abi/lib/index.d.ts') + const ethersAbiDefault = ethersAbi.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersAbiDefault, `file:///node_modules/@types/@ethersproject_abi/index.d.ts`) + + // @ts-ignore + const ethersAbstract = await import('raw-loader!@ethersproject/abstract-provider/lib/index.d.ts') + const ethersAbstractDefault = ethersAbstract.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersAbstractDefault, `file:///node_modules/@types/@ethersproject_abstract-provider/index.d.ts`) + + // @ts-ignore + const ethersSigner = await import('raw-loader!@ethersproject/abstract-signer/lib/index.d.ts') + const ethersSignerDefault = ethersSigner.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersSignerDefault, `file:///node_modules/@types/@ethersproject_abstract-signer/index.d.ts`) + + // @ts-ignore + const ethersAddress = await import('raw-loader!@ethersproject/address/lib/index.d.ts') + const ethersAddressDefault = ethersAddress.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersAddressDefault, `file:///node_modules/@types/@ethersproject_address/index.d.ts`) + + // @ts-ignore + const ethersBase64 = await import('raw-loader!@ethersproject/base64/lib/index.d.ts') + const ethersBase64Default = ethersBase64.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersBase64Default, `file:///node_modules/@types/@ethersproject_base64/index.d.ts`) - // @ts-ignore - const ethersBasex = await import('raw-loader!@ethersproject/basex/lib/index.d.ts') - const ethersBasexDefault = ethersBasex.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersBasexDefault, `file:///node_modules/@types/@ethersproject_basex/index.d.ts`) - - // @ts-ignore - const ethersBignumber = await import('raw-loader!@ethersproject/bignumber/lib/index.d.ts') - const ethersBignumberDefault = ethersBignumber.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersBignumberDefault, `file:///node_modules/@types/@ethersproject_bignumber/index.d.ts`) - - // @ts-ignore - const ethersBytes = await import('raw-loader!@ethersproject/bytes/lib/index.d.ts') - const ethersBytesDefault = ethersBytes.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersBytesDefault, `file:///node_modules/@types/@ethersproject_bytes/index.d.ts`) - - // @ts-ignore - const ethersConstants = await import('raw-loader!@ethersproject/constants/lib/index.d.ts') - const ethersConstantsDefault = ethersConstants.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersConstantsDefault, `file:///node_modules/@types/@ethersproject_constants/index.d.ts`) - - // @ts-ignore - const ethersContracts = await import('raw-loader!@ethersproject/contracts/lib/index.d.ts') - const ethersContractsDefault = ethersContracts.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersContractsDefault, `file:///node_modules/@types/@ethersproject_contracts/index.d.ts`) - - // @ts-ignore - const ethersHash = await import('raw-loader!@ethersproject/hash/lib/index.d.ts') - const ethersHashDefault = ethersHash.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersHashDefault, `file:///node_modules/@types/@ethersproject_hash/index.d.ts`) - - // @ts-ignore - const ethersHdnode = await import('raw-loader!@ethersproject/hdnode/lib/index.d.ts') - const ethersHdnodeDefault = ethersHdnode.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersHdnodeDefault, `file:///node_modules/@types/@ethersproject_hdnode/index.d.ts`) - - // @ts-ignore - const ethersJsonWallets = await import('raw-loader!@ethersproject/json-wallets/lib/index.d.ts') - const ethersJsonWalletsDefault = ethersJsonWallets.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersJsonWalletsDefault, `file:///node_modules/@types/@ethersproject_json-wallets/index.d.ts`) - - // @ts-ignore - const ethersKeccak256 = await import('raw-loader!@ethersproject/keccak256/lib/index.d.ts') - const ethersKeccak256Default = ethersKeccak256.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersKeccak256Default, `file:///node_modules/@types/@ethersproject_keccak256/index.d.ts`) - - // @ts-ignore - const ethersLogger = await import('raw-loader!@ethersproject/logger/lib/index.d.ts') - const ethersLoggerDefault = ethersLogger.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersLoggerDefault, `file:///node_modules/@types/@ethersproject_logger/index.d.ts`) - - // @ts-ignore - const ethersNetworks = await import('raw-loader!@ethersproject/networks/lib/index.d.ts') - const ethersNetworksDefault = ethersNetworks.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersNetworksDefault, `file:///node_modules/@types/@ethersproject_networks/index.d.ts`) - - // @ts-ignore - const ethersPbkdf2 = await import('raw-loader!@ethersproject/pbkdf2/lib/index.d.ts') - const ethersPbkdf2Default = ethersPbkdf2.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersPbkdf2Default, `file:///node_modules/@types/@ethersproject_pbkdf2/index.d.ts`) - - // @ts-ignore - const ethersProperties = await import('raw-loader!@ethersproject/properties/lib/index.d.ts') - const ethersPropertiesDefault = ethersProperties.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersPropertiesDefault, `file:///node_modules/@types/@ethersproject_properties/index.d.ts`) - - // @ts-ignore - const ethersProviders = await import('raw-loader!@ethersproject/providers/lib/index.d.ts') - const ethersProvidersDefault = ethersProviders.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersProvidersDefault, `file:///node_modules/@types/@ethersproject_providers/index.d.ts`) - - // @ts-ignore - const ethersRandom = await import('raw-loader!@ethersproject/random/lib/index.d.ts') - const ethersRandomDefault = ethersRandom.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersRandomDefault, `file:///node_modules/@types/@ethersproject_random/index.d.ts`) - - // @ts-ignore - const ethersRlp = await import('raw-loader!@ethersproject/rlp/lib/index.d.ts') - const ethersRlpDefault = ethersRlp.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersRlpDefault, `file:///node_modules/@types/@ethersproject_rlp/index.d.ts`) - - // @ts-ignore - const ethersSha2 = await import('raw-loader!@ethersproject/sha2/lib/index.d.ts') - const ethersSha2Default = ethersSha2.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersSha2Default, `file:///node_modules/@types/@ethersproject_sha2/index.d.ts`) - - // @ts-ignore - const ethersSingningkey = await import('raw-loader!@ethersproject/signing-key/lib/index.d.ts') - const ethersSingningkeyDefault = ethersSingningkey.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersSingningkeyDefault, `file:///node_modules/@types/@ethersproject_signing-key/index.d.ts`) - - // @ts-ignore - const ethersSolidity = await import('raw-loader!@ethersproject/solidity/lib/index.d.ts') - const ethersSolidityDefault = ethersSolidity.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersSolidityDefault, `file:///node_modules/@types/@ethersproject_solidity/index.d.ts`) - - // @ts-ignore - const ethersStrings = await import('raw-loader!@ethersproject/strings/lib/index.d.ts') - const ethersStringsDefault = ethersStrings.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersStringsDefault, `file:///node_modules/@types/@ethersproject_strings/index.d.ts`) - - // @ts-ignore - const ethersTransactions = await import('raw-loader!@ethersproject/transactions/lib/index.d.ts') - const ethersTransactionsDefault = ethersTransactions.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersTransactionsDefault, `file:///node_modules/@types/@ethersproject_transactions/index.d.ts`) - - // @ts-ignore - const ethersUnits = await import('raw-loader!@ethersproject/units/lib/index.d.ts') - const ethersUnitsDefault = ethersUnits.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersUnitsDefault, `file:///node_modules/@types/@ethersproject_units/index.d.ts`) - - // @ts-ignore - const ethersWallet = await import('raw-loader!@ethersproject/wallet/lib/index.d.ts') - const ethersWalletDefault = ethersWallet.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersWalletDefault, `file:///node_modules/@types/@ethersproject_wallet/index.d.ts`) - - // @ts-ignore - const ethersWeb = await import('raw-loader!@ethersproject/web/lib/index.d.ts') - const ethersWebDefault = ethersWeb.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersWebDefault, `file:///node_modules/@types/@ethersproject_web/index.d.ts`) - - // @ts-ignore - const ethersWordlists = await import('raw-loader!@ethersproject/wordlists/lib/index.d.ts') - const ethersWordlistsDefault = ethersWordlists.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersWordlistsDefault, `file:///node_modules/@types/@ethersproject_wordlists/index.d.ts`) - - // @ts-ignore - const versionEthers = await import('raw-loader!ethers/lib/_version.d.ts') - const versionEthersDefault = versionEthers.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(versionEthersDefault, `file:///node_modules/@types/_version-ethers-lib/index.d.ts`) - - // @ts-ignore - const utilEthers = await import('raw-loader!ethers/lib/utils.d.ts') - const utilEthersDefault = utilEthers.default.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(utilEthersDefault, `file:///node_modules/@types/utils-ethers-lib/index.d.ts`) - - // @ts-ignore - const ethers = await import('raw-loader!ethers/lib/ethers.d.ts') - let ethersDefault = ethers.default - ethersDefault = ethersDefault.replace(/.\/utils/g, 'utils-ethers-lib') - ethersDefault = ethersDefault.replace(/.\/_version/g, '_version-ethers-lib') - ethersDefault = ethersDefault.replace(/.\/ethers/g, 'ethers-lib') - ethersDefault = ethersDefault.replace(/@ethersproject\//g, '@ethersproject_') - ethersDefault = ethersDefault + '\n' + hardhatEthersExtension - monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersDefault, `file:///node_modules/@types/ethers-lib/index.d.ts`) - - // @ts-ignore - const indexEthers = await import('raw-loader!ethers/lib/index.d.ts') - let indexEthersDefault = indexEthers.default - indexEthersDefault = indexEthersDefault.replace(/.\/ethers/g, 'ethers-lib') - indexEthersDefault = indexEthersDefault.replace(/@ethersproject\//g, '@ethersproject_') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexEthersDefault, `file:///node_modules/@types/ethers/index.d.ts`) - - // Web3 - - // @ts-ignore - const indexWeb3 = await import('raw-loader!web3/types/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3.default, `file:///node_modules/@types/web3/index.d.ts`) - - // @ts-ignore - const indexWeb3Bzz = await import('raw-loader!web3-bzz/types/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Bzz.default, `file:///node_modules/@types/web3-bzz/index.d.ts`) - - // @ts-ignore - const indexWeb3Core = await import('raw-loader!web3-core/types/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Core.default, `file:///node_modules/@types/web3-core/index.d.ts`) - - // @ts-ignore - const indexWeb3Eth = await import('raw-loader!web3-eth/types/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Eth.default, `file:///node_modules/@types/web3-eth/index.d.ts`) - - // @ts-ignore - const indexWeb3Personal = await import('raw-loader!web3-eth-personal/types/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Personal.default, `file:///node_modules/@types/web3-eth-personal/index.d.ts`) - - // @ts-ignore - const indexWeb3Contract = await import('raw-loader!web3-eth-contract/types/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Contract.default, `file:///node_modules/@types/web3-eth-contract/index.d.ts`) - - // @ts-ignore - const indexWeb3Net = await import('raw-loader!web3-net/types/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Net.default, `file:///node_modules/@types/web3-net/index.d.ts`) - - // @ts-ignore - const indexWeb3Shh = await import('raw-loader!web3-shh/types/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Shh.default, `file:///node_modules/@types/web3-shh/index.d.ts`) - - // @ts-ignore - const indexWeb3Util = await import('raw-loader!web3-utils/types/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Util.default, `file:///node_modules/@types/web3-utils/index.d.ts`) - // remix - const indexRemixApi = remixTypes + `\n + // @ts-ignore + const ethersBasex = await import('raw-loader!@ethersproject/basex/lib/index.d.ts') + const ethersBasexDefault = ethersBasex.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersBasexDefault, `file:///node_modules/@types/@ethersproject_basex/index.d.ts`) + + // @ts-ignore + const ethersBignumber = await import('raw-loader!@ethersproject/bignumber/lib/index.d.ts') + const ethersBignumberDefault = ethersBignumber.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersBignumberDefault, `file:///node_modules/@types/@ethersproject_bignumber/index.d.ts`) + + // @ts-ignore + const ethersBytes = await import('raw-loader!@ethersproject/bytes/lib/index.d.ts') + const ethersBytesDefault = ethersBytes.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersBytesDefault, `file:///node_modules/@types/@ethersproject_bytes/index.d.ts`) + + // @ts-ignore + const ethersConstants = await import('raw-loader!@ethersproject/constants/lib/index.d.ts') + const ethersConstantsDefault = ethersConstants.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersConstantsDefault, `file:///node_modules/@types/@ethersproject_constants/index.d.ts`) + + // @ts-ignore + const ethersContracts = await import('raw-loader!@ethersproject/contracts/lib/index.d.ts') + const ethersContractsDefault = ethersContracts.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersContractsDefault, `file:///node_modules/@types/@ethersproject_contracts/index.d.ts`) + + // @ts-ignore + const ethersHash = await import('raw-loader!@ethersproject/hash/lib/index.d.ts') + const ethersHashDefault = ethersHash.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersHashDefault, `file:///node_modules/@types/@ethersproject_hash/index.d.ts`) + + // @ts-ignore + const ethersHdnode = await import('raw-loader!@ethersproject/hdnode/lib/index.d.ts') + const ethersHdnodeDefault = ethersHdnode.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersHdnodeDefault, `file:///node_modules/@types/@ethersproject_hdnode/index.d.ts`) + + // @ts-ignore + const ethersJsonWallets = await import('raw-loader!@ethersproject/json-wallets/lib/index.d.ts') + const ethersJsonWalletsDefault = ethersJsonWallets.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersJsonWalletsDefault, `file:///node_modules/@types/@ethersproject_json-wallets/index.d.ts`) + + // @ts-ignore + const ethersKeccak256 = await import('raw-loader!@ethersproject/keccak256/lib/index.d.ts') + const ethersKeccak256Default = ethersKeccak256.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersKeccak256Default, `file:///node_modules/@types/@ethersproject_keccak256/index.d.ts`) + + // @ts-ignore + const ethersLogger = await import('raw-loader!@ethersproject/logger/lib/index.d.ts') + const ethersLoggerDefault = ethersLogger.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersLoggerDefault, `file:///node_modules/@types/@ethersproject_logger/index.d.ts`) + + // @ts-ignore + const ethersNetworks = await import('raw-loader!@ethersproject/networks/lib/index.d.ts') + const ethersNetworksDefault = ethersNetworks.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersNetworksDefault, `file:///node_modules/@types/@ethersproject_networks/index.d.ts`) + + // @ts-ignore + const ethersPbkdf2 = await import('raw-loader!@ethersproject/pbkdf2/lib/index.d.ts') + const ethersPbkdf2Default = ethersPbkdf2.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersPbkdf2Default, `file:///node_modules/@types/@ethersproject_pbkdf2/index.d.ts`) + + // @ts-ignore + const ethersProperties = await import('raw-loader!@ethersproject/properties/lib/index.d.ts') + const ethersPropertiesDefault = ethersProperties.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersPropertiesDefault, `file:///node_modules/@types/@ethersproject_properties/index.d.ts`) + + // @ts-ignore + const ethersProviders = await import('raw-loader!@ethersproject/providers/lib/index.d.ts') + const ethersProvidersDefault = ethersProviders.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersProvidersDefault, `file:///node_modules/@types/@ethersproject_providers/index.d.ts`) + + // @ts-ignore + const ethersRandom = await import('raw-loader!@ethersproject/random/lib/index.d.ts') + const ethersRandomDefault = ethersRandom.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersRandomDefault, `file:///node_modules/@types/@ethersproject_random/index.d.ts`) + + // @ts-ignore + const ethersRlp = await import('raw-loader!@ethersproject/rlp/lib/index.d.ts') + const ethersRlpDefault = ethersRlp.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersRlpDefault, `file:///node_modules/@types/@ethersproject_rlp/index.d.ts`) + + // @ts-ignore + const ethersSha2 = await import('raw-loader!@ethersproject/sha2/lib/index.d.ts') + const ethersSha2Default = ethersSha2.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersSha2Default, `file:///node_modules/@types/@ethersproject_sha2/index.d.ts`) + + // @ts-ignore + const ethersSingningkey = await import('raw-loader!@ethersproject/signing-key/lib/index.d.ts') + const ethersSingningkeyDefault = ethersSingningkey.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersSingningkeyDefault, `file:///node_modules/@types/@ethersproject_signing-key/index.d.ts`) + + // @ts-ignore + const ethersSolidity = await import('raw-loader!@ethersproject/solidity/lib/index.d.ts') + const ethersSolidityDefault = ethersSolidity.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersSolidityDefault, `file:///node_modules/@types/@ethersproject_solidity/index.d.ts`) + + // @ts-ignore + const ethersStrings = await import('raw-loader!@ethersproject/strings/lib/index.d.ts') + const ethersStringsDefault = ethersStrings.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersStringsDefault, `file:///node_modules/@types/@ethersproject_strings/index.d.ts`) + + // @ts-ignore + const ethersTransactions = await import('raw-loader!@ethersproject/transactions/lib/index.d.ts') + const ethersTransactionsDefault = ethersTransactions.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersTransactionsDefault, `file:///node_modules/@types/@ethersproject_transactions/index.d.ts`) + + // @ts-ignore + const ethersUnits = await import('raw-loader!@ethersproject/units/lib/index.d.ts') + const ethersUnitsDefault = ethersUnits.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersUnitsDefault, `file:///node_modules/@types/@ethersproject_units/index.d.ts`) + + // @ts-ignore + const ethersWallet = await import('raw-loader!@ethersproject/wallet/lib/index.d.ts') + const ethersWalletDefault = ethersWallet.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersWalletDefault, `file:///node_modules/@types/@ethersproject_wallet/index.d.ts`) + + // @ts-ignore + const ethersWeb = await import('raw-loader!@ethersproject/web/lib/index.d.ts') + const ethersWebDefault = ethersWeb.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersWebDefault, `file:///node_modules/@types/@ethersproject_web/index.d.ts`) + + // @ts-ignore + const ethersWordlists = await import('raw-loader!@ethersproject/wordlists/lib/index.d.ts') + const ethersWordlistsDefault = ethersWordlists.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersWordlistsDefault, `file:///node_modules/@types/@ethersproject_wordlists/index.d.ts`) + + // @ts-ignore + const versionEthers = await import('raw-loader!ethers/lib/_version.d.ts') + const versionEthersDefault = versionEthers.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(versionEthersDefault, `file:///node_modules/@types/_version-ethers-lib/index.d.ts`) + + // @ts-ignore + const utilEthers = await import('raw-loader!ethers/lib/utils.d.ts') + const utilEthersDefault = utilEthers.default.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(utilEthersDefault, `file:///node_modules/@types/utils-ethers-lib/index.d.ts`) + + // @ts-ignore + const ethers = await import('raw-loader!ethers/lib/ethers.d.ts') + let ethersDefault = ethers.default + ethersDefault = ethersDefault.replace(/.\/utils/g, 'utils-ethers-lib') + ethersDefault = ethersDefault.replace(/.\/_version/g, '_version-ethers-lib') + ethersDefault = ethersDefault.replace(/.\/ethers/g, 'ethers-lib') + ethersDefault = ethersDefault.replace(/@ethersproject\//g, '@ethersproject_') + ethersDefault = ethersDefault + '\n' + hardhatEthersExtension + monaco.languages.typescript.typescriptDefaults.addExtraLib(ethersDefault, `file:///node_modules/@types/ethers-lib/index.d.ts`) + + // @ts-ignore + const indexEthers = await import('raw-loader!ethers/lib/index.d.ts') + let indexEthersDefault = indexEthers.default + indexEthersDefault = indexEthersDefault.replace(/.\/ethers/g, 'ethers-lib') + indexEthersDefault = indexEthersDefault.replace(/@ethersproject\//g, '@ethersproject_') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexEthersDefault, `file:///node_modules/@types/ethers/index.d.ts`) + + // Web3 + + // @ts-ignore + const indexWeb3 = await import('raw-loader!web3/types/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3.default, `file:///node_modules/@types/web3/index.d.ts`) + + // @ts-ignore + const indexWeb3Bzz = await import('raw-loader!web3-bzz/types/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Bzz.default, `file:///node_modules/@types/web3-bzz/index.d.ts`) + + // @ts-ignore + const indexWeb3Core = await import('raw-loader!web3-core/types/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Core.default, `file:///node_modules/@types/web3-core/index.d.ts`) + + // @ts-ignore + const indexWeb3Eth = await import('raw-loader!web3-eth/types/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Eth.default, `file:///node_modules/@types/web3-eth/index.d.ts`) + + // @ts-ignore + const indexWeb3Personal = await import('raw-loader!web3-eth-personal/types/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Personal.default, `file:///node_modules/@types/web3-eth-personal/index.d.ts`) + + // @ts-ignore + const indexWeb3Contract = await import('raw-loader!web3-eth-contract/types/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Contract.default, `file:///node_modules/@types/web3-eth-contract/index.d.ts`) + + // @ts-ignore + const indexWeb3Net = await import('raw-loader!web3-net/types/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Net.default, `file:///node_modules/@types/web3-net/index.d.ts`) + + // @ts-ignore + const indexWeb3Shh = await import('raw-loader!web3-shh/types/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Shh.default, `file:///node_modules/@types/web3-shh/index.d.ts`) + + // @ts-ignore + const indexWeb3Util = await import('raw-loader!web3-utils/types/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexWeb3Util.default, `file:///node_modules/@types/web3-utils/index.d.ts`) + // remix + const indexRemixApi = remixTypes + `\n declare global { const remix: PluginClient; const web3Provider; } ` - monaco.languages.typescript.typescriptDefaults.addExtraLib(indexRemixApi) + monaco.languages.typescript.typescriptDefaults.addExtraLib(indexRemixApi) - // @ts-ignore - const chaiType = await import('raw-loader!@types/chai/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(chaiType.default, `file:///node_modules/@types/chai/index.d.ts`) + // @ts-ignore + const chaiType = await import('raw-loader!@types/chai/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(chaiType.default, `file:///node_modules/@types/chai/index.d.ts`) - // @ts-ignore - const mochaType = await import('raw-loader!@types/mocha/index.d.ts') - monaco.languages.typescript.typescriptDefaults.addExtraLib(mochaType.default, `file:///node_modules/@types/mocha/index.d.ts`) + // @ts-ignore + const mochaType = await import('raw-loader!@types/mocha/index.d.ts') + monaco.languages.typescript.typescriptDefaults.addExtraLib(mochaType.default, `file:///node_modules/@types/mocha/index.d.ts`) - const loadedElement = document.createElement('span') - loadedElement.setAttribute('data-id', 'typesloaded') - document.body.appendChild(loadedElement) + const loadedElement = document.createElement('span') + loadedElement.setAttribute('data-id', 'typesloaded') + document.body.appendChild(loadedElement) } \ No newline at end of file diff --git a/libs/remix-ui/file-decorators/src/lib/components/file-decoration-icon.tsx b/libs/remix-ui/file-decorators/src/lib/components/file-decoration-icon.tsx index 20a648fc68..ba2e25fde9 100644 --- a/libs/remix-ui/file-decorators/src/lib/components/file-decoration-icon.tsx +++ b/libs/remix-ui/file-decorators/src/lib/components/file-decoration-icon.tsx @@ -24,15 +24,15 @@ export const FileDecorationIcons = (props: fileDecorationProps) => { for (const [index, state] of states.entries()) { switch (state.fileStateType) { - case fileDecorationType.Error: - elements.push(}/>) - break - case fileDecorationType.Warning: - elements.push(}/>) - break - case fileDecorationType.Custom: - elements.push(}/>) - break + case fileDecorationType.Error: + elements.push(}/>) + break + case fileDecorationType.Warning: + elements.push(}/>) + break + case fileDecorationType.Custom: + elements.push(}/>) + break } } return elements diff --git a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-custom-icon.tsx b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-custom-icon.tsx index 457036e2f3..80822b9237 100644 --- a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-custom-icon.tsx +++ b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-custom-icon.tsx @@ -5,9 +5,9 @@ import { fileDecoration } from '../../types' const FileDecorationCustomIcon = (props: { fileDecoration: fileDecoration }) => { - return <> - <>{props.fileDecoration.fileStateIcon} - + return <> + <>{props.fileDecoration.fileStateIcon} + } export default FileDecorationCustomIcon \ No newline at end of file diff --git a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-error-icon.tsx b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-error-icon.tsx index 5a9c48b555..675db8f354 100644 --- a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-error-icon.tsx +++ b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-error-icon.tsx @@ -6,9 +6,9 @@ import { fileDecoration } from '../../types' const FileDecorationErrorIcon = (props: { fileDecoration: fileDecoration }) => { - return <> - {props.fileDecoration.text} - + return <> + {props.fileDecoration.text} + } export default FileDecorationErrorIcon \ No newline at end of file diff --git a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx index d841e85021..31eda11fb8 100644 --- a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx +++ b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx @@ -25,7 +25,7 @@ const FileDecorationTooltip = (props: {
{getComments(props.fileDecoration)}
- + } >
{props.icon}
diff --git a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-warning-icon.tsx b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-warning-icon.tsx index 9bfd368506..7be59ea224 100644 --- a/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-warning-icon.tsx +++ b/libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-warning-icon.tsx @@ -5,7 +5,7 @@ import { fileDecoration } from '../../types' const FileDecorationWarningIcon = (props: { fileDecoration: fileDecoration }) => { - return <>{props.fileDecoration.text} + return <>{props.fileDecoration.text} } export default FileDecorationWarningIcon \ No newline at end of file diff --git a/libs/remix-ui/file-decorators/src/lib/helper/index.tsx b/libs/remix-ui/file-decorators/src/lib/helper/index.tsx index 10bad7d3fc..215d926e89 100644 --- a/libs/remix-ui/file-decorators/src/lib/helper/index.tsx +++ b/libs/remix-ui/file-decorators/src/lib/helper/index.tsx @@ -2,10 +2,10 @@ import React from "react" import { fileDecoration } from "../types" export const getComments = function (fileDecoration: fileDecoration) { - if(fileDecoration.comment){ - const comments = Array.isArray(fileDecoration.comment) ? fileDecoration.comment : [fileDecoration.comment] - return comments.map((comment, index) => { - return
{comment}

- }) - } + if(fileDecoration.comment){ + const comments = Array.isArray(fileDecoration.comment) ? fileDecoration.comment : [fileDecoration.comment] + return comments.map((comment, index) => { + return
{comment}

+ }) + } } \ No newline at end of file diff --git a/libs/remix-ui/file-decorators/src/lib/types/index.ts b/libs/remix-ui/file-decorators/src/lib/types/index.ts index fa783ec6e5..bb84b6d26c 100644 --- a/libs/remix-ui/file-decorators/src/lib/types/index.ts +++ b/libs/remix-ui/file-decorators/src/lib/types/index.ts @@ -5,7 +5,7 @@ export enum fileDecorationType { None = 'NONE' } - export type fileDecoration = { +export type fileDecoration = { path: string, isDirectory: boolean, fileStateType: fileDecorationType, @@ -20,7 +20,7 @@ export enum fileDecorationType { comment?: string[] | string } - export interface FileType { +export interface FileType { path: string, name?: string, isDirectory?: boolean, diff --git a/libs/remix-ui/helper/src/lib/components/PluginViewWrapper.tsx b/libs/remix-ui/helper/src/lib/components/PluginViewWrapper.tsx index 058fa3aee0..6cdb45e232 100644 --- a/libs/remix-ui/helper/src/lib/components/PluginViewWrapper.tsx +++ b/libs/remix-ui/helper/src/lib/components/PluginViewWrapper.tsx @@ -7,18 +7,18 @@ interface IPluginViewWrapperProps { export const PluginViewWrapper = (props: IPluginViewWrapperProps) => { - const [state, setState] = useState(null) + const [state, setState] = useState(null) - useEffect(() => { - if(props.plugin.setDispatch){ - props.plugin.setDispatch(setState) - } - }, []) + useEffect(() => { + if(props.plugin.setDispatch){ + props.plugin.setDispatch(setState) + } + }, []) - return ( - <>{state? - <>{props.plugin.updateComponent(state)} + return ( + <>{state? + <>{props.plugin.updateComponent(state)} :<> - } - ) - } \ No newline at end of file + } + ) +} \ No newline at end of file diff --git a/libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx b/libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx index a116c82b44..abc1e923df 100644 --- a/libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx +++ b/libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx @@ -102,7 +102,7 @@ export const ProxyDropdownMenu = React.forwardRef( >
    { - children + children }
diff --git a/libs/remix-ui/helper/src/lib/helper-components.tsx b/libs/remix-ui/helper/src/lib/helper-components.tsx index 789999e558..4792b22308 100644 --- a/libs/remix-ui/helper/src/lib/helper-components.tsx +++ b/libs/remix-ui/helper/src/lib/helper-components.tsx @@ -99,7 +99,7 @@ export const cancelUpgradeMsg = () => ( export const deployWithProxyMsg = () => (
- Deploy with Proxy will initiate two (2) transactions: + Deploy with Proxy will initiate two (2) transactions:
  1. Deploying the implementation contract
  2. Deploying an ERC1967 proxy contract
  3. @@ -128,7 +128,7 @@ export const upgradeReportMsg = (report: LayoutCompatibilityReport) => (
    - +
    The storage layout of new implementation is NOT compatible with the previous implementation. diff --git a/libs/remix-ui/helper/src/lib/remix-ui-helper.ts b/libs/remix-ui/helper/src/lib/remix-ui-helper.ts index 3573f42d20..e06253c325 100644 --- a/libs/remix-ui/helper/src/lib/remix-ui-helper.ts +++ b/libs/remix-ui/helper/src/lib/remix-ui-helper.ts @@ -79,8 +79,8 @@ export const getPathIcon = (path: string) => { ? 'small fak fa-vyper2' : path.endsWith('.lex') ? 'fak fa-lexon' : path.endsWith('ts') ? 'small fak fa-ts-logo' : path.endsWith('.tsc') - ? 'fad fa-brackets-curly' : path.endsWith('.cairo') - ? 'small fak fa-cairo' : 'far fa-file' + ? 'fad fa-brackets-curly' : path.endsWith('.cairo') + ? 'small fak fa-cairo' : 'far fa-file' } export const isNumeric = (value) => { diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx index df6b89dd79..3a9acbf525 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx @@ -137,19 +137,19 @@ function HomeTabFile ({plugin}: HomeTabFileProps) {
    { state.modalInfo.prefix && ipfs:// } { - setState(prevState => { - return { ...prevState, importSource: inputValue.current.value } - }) - }} - /> + ref={inputValue} + type='text' + name='prompt_text' + id='inputPrompt_text' + className="w-100 mt-1 form-control" + data-id="homeTabModalDialogCustomPromptText" + value={state.importSource} + onInput={(e) => { + setState(prevState => { + return { ...prevState, importSource: inputValue.current.value } + }) + }} + />
    diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx index 8b672d8994..50973b4cf4 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx @@ -118,26 +118,26 @@ function HomeTabGetStarted ({plugin}: HomeTabGetStartedProps) { workspaceTitle="0xProject ERC20" description={intl.formatMessage({ id: 'home.zeroxErc20TemplateDesc' })} callback={() => createWorkspace("zeroxErc20")} /> - createWorkspace("ozerc20")} /> - createWorkspace("ozerc721")} /> - createWorkspace("ozerc1155")} /> - createWorkspace("remixDefault")} /> + createWorkspace("ozerc20")} /> + createWorkspace("ozerc721")} /> + createWorkspace("ozerc1155")} /> + createWorkspace("remixDefault")} />
    diff --git a/libs/remix-ui/home-tab/src/lib/components/homeTabLearn.tsx b/libs/remix-ui/home-tab/src/lib/components/homeTabLearn.tsx index c03b96eed6..50bf1aad33 100644 --- a/libs/remix-ui/home-tab/src/lib/components/homeTabLearn.tsx +++ b/libs/remix-ui/home-tab/src/lib/components/homeTabLearn.tsx @@ -53,11 +53,11 @@ function HomeTabLearn ({plugin}: HomeTabLearnProps) {
diff --git a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx index 066d664f27..c73f6c9fa0 100644 --- a/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx +++ b/libs/remix-ui/panel/src/lib/plugins/panel-header.tsx @@ -43,7 +43,7 @@ const RemixUIPanelHeader = (props: RemixPanelProps) => { tooltipId="maintainedByTooltip" tooltipClasses="text-nowrap" tooltipText="Maintained by Remix" - > + >
)} diff --git a/libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx b/libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx index fb2b1376c4..ddff788cbb 100644 --- a/libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx +++ b/libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx @@ -55,9 +55,9 @@ const PermissionHandlerDialog = (props: PermissionHandlerProps) => {
{
- - -
+ + + }
diff --git a/libs/remix-ui/plugin-manager/src/lib/reducers/pluginManagerReducer.ts b/libs/remix-ui/plugin-manager/src/lib/reducers/pluginManagerReducer.ts index 5c2d1951ab..6b701652ee 100644 --- a/libs/remix-ui/plugin-manager/src/lib/reducers/pluginManagerReducer.ts +++ b/libs/remix-ui/plugin-manager/src/lib/reducers/pluginManagerReducer.ts @@ -6,9 +6,9 @@ export type localPluginReducerActionType = { export function localPluginToastReducer (currentState: string, toastAction: localPluginReducerActionType) { switch (toastAction.type) { - case 'show': - return `Cannot create Plugin : ${toastAction.payload!}` - default: - return currentState + case 'show': + return `Cannot create Plugin : ${toastAction.payload!}` + default: + return currentState } } diff --git a/libs/remix-ui/plugin-manager/src/types.d.ts b/libs/remix-ui/plugin-manager/src/types.d.ts index 36a4ebdba2..727e361b67 100644 --- a/libs/remix-ui/plugin-manager/src/types.d.ts +++ b/libs/remix-ui/plugin-manager/src/types.d.ts @@ -107,30 +107,30 @@ declare class LocalPlugin { profile: any }> - profile: any - /** + profile: any + /** * Create the object to add to the plugin-list */ - create(): any - updateName({ target }: { + create(): any + updateName({ target }: { target: any }): void - updateUrl({ target }: { + updateUrl({ target }: { target: any }): void - updateDisplayName({ target }: { + updateDisplayName({ target }: { target: any }): void - updateProfile(key: any, e: any): void - updateMethods({ target }: { + updateProfile(key: any, e: any): void + updateMethods({ target }: { target: any }): void - /** The form to create a local plugin */ - form(): any + /** The form to create a local plugin */ + form(): any } export interface PluginManagerContextProviderProps { @@ -148,11 +148,11 @@ export interface RemixUiPluginManagerProps { **/ declare class PluginLoader { get currentLoader(): any - donotAutoReload: string[] - loaders: Record - current: string - set(plugin: any, actives: any): void - get(): any + donotAutoReload: string[] + loaders: Record + current: string + set(plugin: any, actives: any): void + get(): any } // eslint-disable-next-line no-redeclare export type PluginManagerSettings = { diff --git a/libs/remix-ui/run-tab/src/lib/actions/deploy.ts b/libs/remix-ui/run-tab/src/lib/actions/deploy.ts index e35d3b74f4..6872095571 100644 --- a/libs/remix-ui/run-tab/src/lib/actions/deploy.ts +++ b/libs/remix-ui/run-tab/src/lib/actions/deploy.ts @@ -240,25 +240,25 @@ const deployContract = (plugin: RunTab, selectedContract, args, contractMetadata export const loadAddress = (plugin: RunTab, dispatch: React.Dispatch, contract: ContractData, address: string) => { loadContractFromAddress(plugin, address, - (cb) => { - dispatch(displayNotification('At Address', `Do you really want to interact with ${address} using the current ABI definition?`, 'OK', 'Cancel', cb, null)) - }, - (error, loadType, abi) => { - if (error) { - return dispatch(displayNotification('Alert', error, 'OK', null)) - } - if (loadType === 'abi') { - return addInstance(dispatch, { abi, address, name: '' }) - } else if (loadType === 'instance') { - if (!contract) return dispatch(displayPopUp('No compiled contracts found.')) - const currentFile = plugin.REACT_API.contracts.currentFile - const compiler = plugin.REACT_API.contracts.contractList[currentFile].find(item => item.alias === contract.name) - const contractData = getSelectedContract(contract.name, compiler.compiler) - return addInstance(dispatch, { contractData, address, name: contract.name }) - } - } - ) - } + (cb) => { + dispatch(displayNotification('At Address', `Do you really want to interact with ${address} using the current ABI definition?`, 'OK', 'Cancel', cb, null)) + }, + (error, loadType, abi) => { + if (error) { + return dispatch(displayNotification('Alert', error, 'OK', null)) + } + if (loadType === 'abi') { + return addInstance(dispatch, { abi, address, name: '' }) + } else if (loadType === 'instance') { + if (!contract) return dispatch(displayPopUp('No compiled contracts found.')) + const currentFile = plugin.REACT_API.contracts.currentFile + const compiler = plugin.REACT_API.contracts.contractList[currentFile].find(item => item.alias === contract.name) + const contractData = getSelectedContract(contract.name, compiler.compiler) + return addInstance(dispatch, { contractData, address, name: contract.name }) + } + } + ) +} export const getContext = (plugin: RunTab) => { return plugin.blockchain.context() @@ -390,23 +390,23 @@ export const isValidContractUpgrade = async (plugin: RunTab, proxyAddress: strin const networkFile: string = await plugin.call('fileManager', 'readFile', `.deploys/upgradeable-contracts/${identifier}/UUPS.json`) const parsedNetworkFile: NetworkDeploymentFile = JSON.parse(networkFile) - if (parsedNetworkFile.deployments[proxyAddress] && parsedNetworkFile.deployments[proxyAddress].implementationAddress) { - const solcBuildExists = await plugin.call('fileManager', 'exists', `.deploys/upgradeable-contracts/${identifier}/solc-${parsedNetworkFile.deployments[proxyAddress].implementationAddress}.json`) + if (parsedNetworkFile.deployments[proxyAddress] && parsedNetworkFile.deployments[proxyAddress].implementationAddress) { + const solcBuildExists = await plugin.call('fileManager', 'exists', `.deploys/upgradeable-contracts/${identifier}/solc-${parsedNetworkFile.deployments[proxyAddress].implementationAddress}.json`) - if (solcBuildExists) { - const solcFile: string = await plugin.call('fileManager', 'readFile', `.deploys/upgradeable-contracts/${identifier}/solc-${parsedNetworkFile.deployments[proxyAddress].implementationAddress}.json`) - const parsedSolcFile: SolcBuildFile = JSON.parse(solcFile) - const oldImpl = new UpgradeableContract(parsedNetworkFile.deployments[proxyAddress].contractName, parsedSolcFile.solcInput, parsedSolcFile.solcOutput, { kind: 'uups' }) - const newImpl = new UpgradeableContract(newContractName, solcInput, solcOutput, { kind: 'uups' }) - const report = oldImpl.getStorageUpgradeReport(newImpl, { kind: 'uups' }) - - return report - } else { - return { ok: false, pass: false, warning: true } - } + if (solcBuildExists) { + const solcFile: string = await plugin.call('fileManager', 'readFile', `.deploys/upgradeable-contracts/${identifier}/solc-${parsedNetworkFile.deployments[proxyAddress].implementationAddress}.json`) + const parsedSolcFile: SolcBuildFile = JSON.parse(solcFile) + const oldImpl = new UpgradeableContract(parsedNetworkFile.deployments[proxyAddress].contractName, parsedSolcFile.solcInput, parsedSolcFile.solcOutput, { kind: 'uups' }) + const newImpl = new UpgradeableContract(newContractName, solcInput, solcOutput, { kind: 'uups' }) + const report = oldImpl.getStorageUpgradeReport(newImpl, { kind: 'uups' }) + + return report } else { return { ok: false, pass: false, warning: true } } + } else { + return { ok: false, pass: false, warning: true } + } } else { return { ok: false, pass: false, warning: true } } diff --git a/libs/remix-ui/run-tab/src/lib/components/account.tsx b/libs/remix-ui/run-tab/src/lib/components/account.tsx index e067dab634..ad7dfd9c50 100644 --- a/libs/remix-ui/run-tab/src/lib/components/account.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/account.tsx @@ -23,60 +23,60 @@ export function AccountUI (props: AccountProps) { useEffect(() => { switch (props.selectExEnv) { - case 'injected': + case 'injected': + setPlusOpt({ + classList: 'udapp_disableMouseEvents', + title: "Unfortunately it's not possible to create an account using injected provider. Please create the account directly from your provider (i.e metamask or other of the same type)." + }) + break + + case 'vm-merge': + setPlusOpt({ + classList: '', + title: 'Create a new account' + }) + break + + case 'vm-london': + setPlusOpt({ + classList: '', + title: 'Create a new account' + }) + break + + case 'vm-berlin': + setPlusOpt({ + classList: '', + title: 'Create a new account' + }) + break + + case 'vm-shanghai': + setPlusOpt({ + classList: '', + title: 'Create a new account' + }) + break + + case 'web3': + if (!props.personalMode) { setPlusOpt({ - classList: 'udapp_disableMouseEvents', - title: "Unfortunately it's not possible to create an account using injected provider. Please create the account directly from your provider (i.e metamask or other of the same type)." - }) - break - - case 'vm-merge': - setPlusOpt({ - classList: '', - title: 'Create a new account' - }) - break - - case 'vm-london': - setPlusOpt({ - classList: '', - title: 'Create a new account' - }) - break - - case 'vm-berlin': - setPlusOpt({ - classList: '', - title: 'Create a new account' + classList: 'disableMouseEvents', + title: 'Creating an account is possible only in Personal mode. Please go to Settings to enable it.' }) - break - - case 'vm-shanghai': + } else { setPlusOpt({ classList: '', title: 'Create a new account' }) - break - - case 'web3': - if (!props.personalMode) { - setPlusOpt({ - classList: 'disableMouseEvents', - title: 'Creating an account is possible only in Personal mode. Please go to Settings to enable it.' - }) - } else { - setPlusOpt({ - classList: '', - title: 'Create a new account' - }) - } - break - - default: - setPlusOpt({ - classList: 'disableMouseEvents', - title: `Unfortunately it's not possible to create an account using an external wallet (${props.selectExEnv}).` - }) + } + break + + default: + setPlusOpt({ + classList: 'disableMouseEvents', + title: `Unfortunately it's not possible to create an account using an external wallet (${props.selectExEnv}).` + }) } // this._deps.config.get('settings/personal-mode') }, [props.selectExEnv, props.personalMode]) @@ -179,9 +179,9 @@ export function AccountUI (props: AccountProps) {
) - : null } + : null }
{abiLabel.content}
{ evmVersion && loadedContractData && - - - } - > - evm version: {evmVersion} - + placement={'right'} + tooltipClasses="text-wrap text-left" + tooltipId="info-evm-version-warn" + tooltipText={ + + + } + > + evm version: {evmVersion} + }
diff --git a/libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx b/libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx index 1110dfc923..eb2d0a5a52 100644 --- a/libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx @@ -89,9 +89,9 @@ export function ContractGUI (props: ContractGUIProps) { const multiJSON = JSON.parse('[' + multiString + ']') const encodeObj = txFormat.encodeData( - props.funcABI, - multiJSON, - props.funcABI.type === 'constructor' ? props.evmBC : null) + props.funcABI, + multiJSON, + props.funcABI.type === 'constructor' ? props.evmBC : null) if (encodeObj.error) { console.error(encodeObj.error) @@ -272,27 +272,27 @@ export function ContractGUI (props: ContractGUIProps) { className="udapp_contractActionsContainerSingle pt-2" style={{ display: toggleContainer ? "none" : "flex" }} > -
+ -
+ + +
handleDeployProxySelect(e.target.checked)} checked={deployState.deploy} /> - +
{props.initializerOptions && props.initializerOptions.initializeInputs ? ( - - - - ) : null} + + + + ) : null}
{props.initializerOptions && props.initializerOptions.initializeInputs ? ( -
-
- {props.initializerOptions.inputs.inputs.map((inp, index) => { - return ( -
- - { - initializeFields.current[index] = el; - }} - style={{ height: 32 }} - className="form-control udapp_input" - placeholder={inp.type} - /> -
- ); - })} +
+
+ {props.initializerOptions.inputs.inputs.map((inp, index) => { + return ( +
+ + { + initializeFields.current[index] = el; + }} + style={{ height: 32 }} + className="form-control udapp_input" + placeholder={inp.type} + /> +
+ ); + })} +
-
- ) : null} + ) : null}
handleUpgradeImpSelect(e.target.checked)} checked={deployState.upgrade} /> - +
{ proxyAddress === deployment.address ? - ✓ { deployment.contractName + ' ' + shortenProxyAddress(deployment.address) } - : { deployment.contractName + ' ' + shortenProxyAddress(deployment.address) } } + ✓ { deployment.contractName + ' ' + shortenProxyAddress(deployment.address) } + : { deployment.contractName + ' ' + shortenProxyAddress(deployment.address) } } diff --git a/libs/remix-ui/run-tab/src/lib/components/deployButton.tsx b/libs/remix-ui/run-tab/src/lib/components/deployButton.tsx index 6e72485186..3ad2922649 100644 --- a/libs/remix-ui/run-tab/src/lib/components/deployButton.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/deployButton.tsx @@ -13,37 +13,37 @@ export function DeployButton (props: DeployButtonProps) { return ( <> - { props.deployOptions && (props.deployOptions || []).length > 0 ? - - + + + { + (props.deployOptions).map(({ title, active }, index) => { + props.setSelectedIndex(index) + toggleOptions() + }} key={index}> { props.selectedIndex === index ? ✓ {title} : {title} }) + } + + : + - { props.deployOptions[props.selectedIndex] ? props.deployOptions[props.selectedIndex].title : 'Deploy' } - - - - { - (props.deployOptions).map(({ title, active }, index) => { - props.setSelectedIndex(index) - toggleOptions() - }} key={index}> { props.selectedIndex === index ? ✓ {title} : {title} }) - } - - : - - - - } + + + } ) } diff --git a/libs/remix-ui/run-tab/src/lib/components/environment.tsx b/libs/remix-ui/run-tab/src/lib/components/environment.tsx index c4dc956f81..2fe915fce6 100644 --- a/libs/remix-ui/run-tab/src/lib/components/environment.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/environment.tsx @@ -26,8 +26,8 @@ export function EnvironmentUI (props: EnvironmentProps) { - + tooltipText="Open chainlist.org and get the connection specs of the chain you want to interact with."> + @@ -63,7 +63,7 @@ export function EnvironmentUI (props: EnvironmentProps) { }> + tooltipText={}> diff --git a/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx b/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx index edb535a6b2..5da9a49345 100644 --- a/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx @@ -28,7 +28,7 @@ export function InstanceContainerUI (props: InstanceContainerProps) { { instanceList.length > 0 - ? ( + ? ( - ) : null - } + ) : null + }
{ instanceList.length > 0 ?
{ props.instances.instanceList.map((instance, index) => { diff --git a/libs/remix-ui/run-tab/src/lib/components/recorderCardUI.tsx b/libs/remix-ui/run-tab/src/lib/components/recorderCardUI.tsx index 5f9639077c..23e1127f16 100644 --- a/libs/remix-ui/run-tab/src/lib/components/recorderCardUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/recorderCardUI.tsx @@ -42,7 +42,7 @@ export function RecorderUI (props: RecorderProps) { tooltipId="recordedTransactionsCounttooltip" tooltipText={} > -
{props.count}
+
{props.count}
}} />} > - - + +
@@ -79,10 +79,10 @@ export function RecorderUI (props: RecorderProps) { tooltipClasses="text-nowrap" tooltipId="remixUdappTransactionSavetooltip" tooltipText={ - props.count === 0 ? intl.formatMessage({ id: 'udapp.transactionSaveTooltip1' }) - : props.count === 1 ? intl.formatMessage({ id: 'udapp.transactionSaveTooltip2' }, { count: props.count }) + props.count === 0 ? intl.formatMessage({ id: 'udapp.transactionSaveTooltip1' }) + : props.count === 1 ? intl.formatMessage({ id: 'udapp.transactionSaveTooltip2' }, { count: props.count }) : intl.formatMessage({ id: 'udapp.transactionSaveTooltip3' }, { count: props.count }) - } + } > : null} - ) + : null} + ) } diff --git a/libs/remix-ui/search/src/lib/components/results/ResultItem.tsx b/libs/remix-ui/search/src/lib/components/results/ResultItem.tsx index 36ebb04a87..d064772c5d 100644 --- a/libs/remix-ui/search/src/lib/components/results/ResultItem.tsx +++ b/libs/remix-ui/search/src/lib/components/results/ResultItem.tsx @@ -127,10 +127,10 @@ export const ResultItem = (props: ResultItemProps) => { {state.replaceEnabled?
replace()} className='btn btn-secondary mb-2 btn-sm'> - +
- :null} + :null} {lines.map((line, index) => ( { <> {props.line.lines.map((lineItem, index) => (
-
{ - selectLine(lineItem) - }} - data-id={`${props.searchResult.filename}-${lineItem.position.start.line}-${lineItem.position.start.column}`} - key={props.searchResult.filename} - className='search_plugin_search_line pb-1' - > -
{lineItem.left.substring(lineItem.left.length - 20).trimStart()}
- {lineItem.center} - {state.replace && state.replaceEnabled? {state.replace}:<>} -
{lineItem.right.substring(0, 100)}
-
- {state.replaceEnabled? -
- -
{ - replace(lineItem) - }} className="codicon codicon-find-replace" role="button" aria-label="Replace" aria-disabled="false">
-
-
:null} +
{ + selectLine(lineItem) + }} + data-id={`${props.searchResult.filename}-${lineItem.position.start.line}-${lineItem.position.start.column}`} + key={props.searchResult.filename} + className='search_plugin_search_line pb-1' + > +
{lineItem.left.substring(lineItem.left.length - 20).trimStart()}
+ {lineItem.center} + {state.replace && state.replaceEnabled? {state.replace}:<>} +
{lineItem.right.substring(0, 100)}
+
+ {state.replaceEnabled? +
+ +
{ + replace(lineItem) + }} className="codicon codicon-find-replace" role="button" aria-label="Replace" aria-disabled="false">
+
+
:null}
))} diff --git a/libs/remix-ui/search/src/lib/components/results/Results.tsx b/libs/remix-ui/search/src/lib/components/results/Results.tsx index f7573bf3b5..1b46cd0ea7 100644 --- a/libs/remix-ui/search/src/lib/components/results/Results.tsx +++ b/libs/remix-ui/search/src/lib/components/results/Results.tsx @@ -8,7 +8,7 @@ export const Results = () => { return (
- {state.searching && !state.clipped ? : null} {state.searching && !state.clipped + {state.searching && !state.clipped ? : null} {state.searching && !state.clipped ? `searching in ${state.searching}` : null}

diff --git a/libs/remix-ui/search/src/lib/components/results/SearchHelper.ts b/libs/remix-ui/search/src/lib/components/results/SearchHelper.ts index fb6b096df2..ee23f2f2f4 100644 --- a/libs/remix-ui/search/src/lib/components/results/SearchHelper.ts +++ b/libs/remix-ui/search/src/lib/components/results/SearchHelper.ts @@ -3,93 +3,93 @@ import { SearchResultLineLine } from '../../types' export const getDirectory = async (dir: string, plugin: any) => { - let result = [] - const files = await plugin.call('fileManager', 'readdir', dir) - const fileArray = normalize(files) - for (const fi of fileArray) { - if (fi) { - const type = fi.data.isDirectory - if (type === true) { - result = [...result, ...(await getDirectory(`${fi.filename}`, plugin))] - } else { - result = [...result, fi.filename] - } + let result = [] + const files = await plugin.call('fileManager', 'readdir', dir) + const fileArray = normalize(files) + for (const fi of fileArray) { + if (fi) { + const type = fi.data.isDirectory + if (type === true) { + result = [...result, ...(await getDirectory(`${fi.filename}`, plugin))] + } else { + result = [...result, fi.filename] } } - return result } + return result +} - const normalize = filesList => { - const folders = [] - const files = [] - Object.keys(filesList || {}).forEach(key => { - if (filesList[key].isDirectory) { - folders.push({ - filename: key, - data: filesList[key] - }) - } else { - files.push({ - filename: key, - data: filesList[key] - }) - } - }) - return [...folders, ...files] - } +const normalize = filesList => { + const folders = [] + const files = [] + Object.keys(filesList || {}).forEach(key => { + if (filesList[key].isDirectory) { + folders.push({ + filename: key, + data: filesList[key] + }) + } else { + files.push({ + filename: key, + data: filesList[key] + }) + } + }) + return [...folders, ...files] +} export const findLinesInStringWithMatch = (str: string, re: RegExp) => { - return str - .split(/\r?\n/) - .map(function (line, i) { - const matchResult = matchesInString(line, re) - if (matchResult.length) { - return { - lines: splitLines(matchResult, i), - } - } - }) - .filter(Boolean) + return str + .split(/\r?\n/) + .map(function (line, i) { + const matchResult = matchesInString(line, re) + if (matchResult.length) { + return { + lines: splitLines(matchResult, i), + } + } + }) + .filter(Boolean) } const matchesInString = (str: string, re: RegExp) => { - let a: RegExpExecArray - const results:RegExpExecArray[] = []; - while ((a = re.exec(str || '')) !== null) { - results.push(a); - } - return results + let a: RegExpExecArray + const results:RegExpExecArray[] = []; + while ((a = re.exec(str || '')) !== null) { + results.push(a); + } + return results } const splitLines = (matchResult: RegExpExecArray[], lineNumber: number) => { - return matchResult.map((matchResultPart, i) => { - const result:SearchResultLineLine = { - left: matchResultPart.input.substring(0, matchResultPart.index), - right: matchResultPart.input.substring(matchResultPart.index + matchResultPart[0].length), - center: matchResultPart[0], - position : { - start: { - line: lineNumber, - column: matchResultPart.index, - }, - end: { - line: lineNumber, - column: matchResultPart.index + matchResultPart[0].length, - }, - }, - } - return result - }) + return matchResult.map((matchResultPart, i) => { + const result:SearchResultLineLine = { + left: matchResultPart.input.substring(0, matchResultPart.index), + right: matchResultPart.input.substring(matchResultPart.index + matchResultPart[0].length), + center: matchResultPart[0], + position : { + start: { + line: lineNumber, + column: matchResultPart.index, + }, + end: { + line: lineNumber, + column: matchResultPart.index + matchResultPart[0].length, + }, + }, + } + return result + }) } function getEOL(text) { - const m = text.match(/\r\n|\n/g); - const u = m && m.filter(a => a === '\n').length; - const w = m && m.length - u; - if (u === w) { - return EOL; // use the OS default - } - return u > w ? '\n' : '\r\n'; + const m = text.match(/\r\n|\n/g); + const u = m && m.filter(a => a === '\n').length; + const w = m && m.length - u; + if (u === w) { + return EOL; // use the OS default + } + return u > w ? '\n' : '\r\n'; } export const replaceAllInFile = (string: string, re:RegExp, newText: string) => { @@ -97,13 +97,13 @@ export const replaceAllInFile = (string: string, re:RegExp, newText: string) => } export const replaceTextInLine = (str: string, searchResultLine: SearchResultLineLine, newText: string) => { - return str + return str .split(/\r?\n/) .map(function (line, i) { - if (i === searchResultLine.position.start.line) { - return searchResultLine.left + newText + searchResultLine.right - } - return line + if (i === searchResultLine.position.start.line) { + return searchResultLine.left + newText + searchResultLine.right + } + return line }).join(getEOL(str)) } diff --git a/libs/remix-ui/search/src/lib/reducers/Reducer.ts b/libs/remix-ui/search/src/lib/reducers/Reducer.ts index 8ff867d1c8..c10efcf869 100644 --- a/libs/remix-ui/search/src/lib/reducers/Reducer.ts +++ b/libs/remix-ui/search/src/lib/reducers/Reducer.ts @@ -1,181 +1,181 @@ import { Action, SearchingInitialState, SearchState, undoBufferRecord } from "../types" export const SearchReducer = (state: SearchState = SearchingInitialState, action: Action) => { - switch (action.type) { - case 'START_SEARCH': - return { - ...state, - timeStamp: Date.now() - } - case 'SET_FIND': - return { - ...state, - searchResults: null, - find: action.payload - } + switch (action.type) { + case 'START_SEARCH': + return { + ...state, + timeStamp: Date.now() + } + case 'SET_FIND': + return { + ...state, + searchResults: null, + find: action.payload + } - case 'SET_REPLACE': - return { - ...state, - replace: action.payload, - } + case 'SET_REPLACE': + return { + ...state, + replace: action.payload, + } - case 'SET_REPLACE_ENABLED': - return { - ...state, - replaceEnabled: action.payload, - } + case 'SET_REPLACE_ENABLED': + return { + ...state, + replaceEnabled: action.payload, + } - case 'SET_INCLUDE': - return { - ...state, - include: action.payload, - } + case 'SET_INCLUDE': + return { + ...state, + include: action.payload, + } - case 'SET_EXCLUDE': - return { - ...state, - exclude: action.payload, - } + case 'SET_EXCLUDE': + return { + ...state, + exclude: action.payload, + } - case 'SET_SEARCH_RESULTS': - return { - ...state, - searchResults: action.payload, - count: 0, - run: true - } - case 'SET_UNDO_ENABLED': - if(action.payload.workspace && state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`]){ - state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`].enabled = (action.payload.content === state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`].newContent) - state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`].visible = (action.payload.content !== state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`].oldContent) - } - return { - ...state, - } - case 'SET_UNDO': { - const undoState = { - newContent : action.payload.newContent, - oldContent: action.payload.oldContent, - path: action.payload.path, - workspace: action.payload.workspace, - timeStamp: Date.now(), - enabled: true, - visible: true - } - state.undoBuffer[`${undoState.workspace}/${undoState.path}`] = undoState - return { - ...state, - } - } - case 'CLEAR_STATS': - return { - ...state, - count: 0, - fileCount: 0, - searchResults: null, - searching: null - } + case 'SET_SEARCH_RESULTS': + return { + ...state, + searchResults: action.payload, + count: 0, + run: true + } + case 'SET_UNDO_ENABLED': + if(action.payload.workspace && state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`]){ + state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`].enabled = (action.payload.content === state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`].newContent) + state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`].visible = (action.payload.content !== state.undoBuffer[`${action.payload.workspace}/${action.payload.path}`].oldContent) + } + return { + ...state, + } + case 'SET_UNDO': { + const undoState = { + newContent : action.payload.newContent, + oldContent: action.payload.oldContent, + path: action.payload.path, + workspace: action.payload.workspace, + timeStamp: Date.now(), + enabled: true, + visible: true + } + state.undoBuffer[`${undoState.workspace}/${undoState.path}`] = undoState + return { + ...state, + } + } + case 'CLEAR_STATS': + return { + ...state, + count: 0, + fileCount: 0, + searchResults: null, + searching: null + } - case 'SET_SEARCHING': - return { - ...state, - searching: action.payload, - } + case 'SET_SEARCHING': + return { + ...state, + searching: action.payload, + } - case 'CLEAR_UNDO': { - state.undoBuffer = [] - return { - ...state, - } + case 'CLEAR_UNDO': { + state.undoBuffer = [] + return { + ...state, + } + } + case 'UPDATE_COUNT': + if (state.searchResults) { + const findFile = state.searchResults.find(file => file.filename === action.payload.file) + let count = 0 + let fileCount = 0 + const clipped = false + if (findFile) { + findFile.count = action.payload.count + } + state.searchResults.forEach(file => { + if (file.count) { + count += file.count + fileCount++ } - case 'UPDATE_COUNT': - if (state.searchResults) { - const findFile = state.searchResults.find(file => file.filename === action.payload.file) - let count = 0 - let fileCount = 0 - const clipped = false - if (findFile) { - findFile.count = action.payload.count - } - state.searchResults.forEach(file => { - if (file.count) { - count += file.count - fileCount++ - } - }) - return { - ...state, - count: count, - fileCount, - clipped - } - } else { - return state - } + }) + return { + ...state, + count: count, + fileCount, + clipped + } + } else { + return state + } - case 'SET_CLIPPED': - return { - ...state, - clipped: action.payload - } - case 'SET_RUN': - return { - ...state, - run: action.payload - } - case 'TOGGLE_CASE_SENSITIVE': - return { - ...state, - casesensitive: !state.casesensitive, - timeStamp: Date.now() - } - case 'TOGGLE_USE_REGEX': - return { - ...state, - useRegExp: !state.useRegExp, - timeStamp: Date.now() - } - case 'TOGGLE_MATCH_WHOLE_WORD': - return { - ...state, - matchWord: !state.matchWord, - timeStamp: Date.now() - } - case 'SET_REPLACE_WITHOUT_CONFIRMATION': - return { - ...state, - replaceWithOutConfirmation: action.payload, - } - case 'DISABLE_FORCE_RELOAD': - if (state.searchResults) { - const findFile = state.searchResults.find(file => file.filename === action.payload) - if (findFile) findFile.forceReload = false - } - return { - ...state, - } - case 'SET_CURRENT_FILE': - return { - ...state, - currentFile: action.payload, - } - case 'SET_CURRENT_WORKSPACE': - return { - ...state, - workspace: action.payload, - } - case 'RELOAD_FILE': - if (state.searchResults) { - const findFile = state.searchResults.find(file => file.filename === action.payload) - if (findFile) findFile.forceReload = true - } - return { - ...state, - } - default: - return { - ...state, - } + case 'SET_CLIPPED': + return { + ...state, + clipped: action.payload + } + case 'SET_RUN': + return { + ...state, + run: action.payload + } + case 'TOGGLE_CASE_SENSITIVE': + return { + ...state, + casesensitive: !state.casesensitive, + timeStamp: Date.now() + } + case 'TOGGLE_USE_REGEX': + return { + ...state, + useRegExp: !state.useRegExp, + timeStamp: Date.now() + } + case 'TOGGLE_MATCH_WHOLE_WORD': + return { + ...state, + matchWord: !state.matchWord, + timeStamp: Date.now() + } + case 'SET_REPLACE_WITHOUT_CONFIRMATION': + return { + ...state, + replaceWithOutConfirmation: action.payload, + } + case 'DISABLE_FORCE_RELOAD': + if (state.searchResults) { + const findFile = state.searchResults.find(file => file.filename === action.payload) + if (findFile) findFile.forceReload = false + } + return { + ...state, + } + case 'SET_CURRENT_FILE': + return { + ...state, + currentFile: action.payload, + } + case 'SET_CURRENT_WORKSPACE': + return { + ...state, + workspace: action.payload, + } + case 'RELOAD_FILE': + if (state.searchResults) { + const findFile = state.searchResults.find(file => file.filename === action.payload) + if (findFile) findFile.forceReload = true + } + return { + ...state, + } + default: + return { + ...state, } + } } \ No newline at end of file diff --git a/libs/remix-ui/search/src/lib/types/index.ts b/libs/remix-ui/search/src/lib/types/index.ts index b59eb23deb..4c3ffa959d 100644 --- a/libs/remix-ui/search/src/lib/types/index.ts +++ b/libs/remix-ui/search/src/lib/types/index.ts @@ -69,25 +69,25 @@ export interface SearchState { } export const SearchingInitialState: SearchState = { - find: '', - replace: '', - include: '', - exclude: '', - replaceEnabled: false, - searchResults: [], - casesensitive: false, - matchWord: false, - useRegExp: false, - replaceWithOutConfirmation: false, - timeStamp: 0, - count: 0, - fileCount: 0, - maxFiles: 5000, - maxLines: 5000, - clipped: false, - undoBuffer: null, - currentFile: '', - workspace: '', - searching: null, - run: false, + find: '', + replace: '', + include: '', + exclude: '', + replaceEnabled: false, + searchResults: [], + casesensitive: false, + matchWord: false, + useRegExp: false, + replaceWithOutConfirmation: false, + timeStamp: 0, + count: 0, + fileCount: 0, + maxFiles: 5000, + maxLines: 5000, + clipped: false, + undoBuffer: null, + currentFile: '', + workspace: '', + searching: null, + run: false, } \ No newline at end of file diff --git a/libs/remix-ui/settings/src/lib/constants.ts b/libs/remix-ui/settings/src/lib/constants.ts index 44043493c3..90f23a0939 100644 --- a/libs/remix-ui/settings/src/lib/constants.ts +++ b/libs/remix-ui/settings/src/lib/constants.ts @@ -4,12 +4,12 @@ export const textDark = 'text-dark' export const gitAccessTokenLink = 'https://github.com/settings/tokens/new?scopes=gist,repo&description=Remix%20IDE%20Token' export const etherscanTokenLink = 'https://etherscan.io/myapikey' export const labels = { - 'gist': { - 'link': gitAccessTokenLink, - 'key': 'gist-access-token' - }, - 'etherscan': { - 'link': etherscanTokenLink, - 'key': 'etherscan-access-token' - } + 'gist': { + 'link': gitAccessTokenLink, + 'key': 'gist-access-token' + }, + 'etherscan': { + 'link': etherscanTokenLink, + 'key': 'etherscan-access-token' + } } diff --git a/libs/remix-ui/settings/src/lib/etherscan-settings.tsx b/libs/remix-ui/settings/src/lib/etherscan-settings.tsx index f7903cb0e4..218eea1282 100644 --- a/libs/remix-ui/settings/src/lib/etherscan-settings.tsx +++ b/libs/remix-ui/settings/src/lib/etherscan-settings.tsx @@ -58,8 +58,8 @@ export function EtherscanSettings (props: EtherscanSettingsProps) { placement="left-start" > + +
diff --git a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx index 8ac7db82dc..1fcbf2c44d 100644 --- a/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx +++ b/libs/remix-ui/settings/src/lib/remix-ui-settings.tsx @@ -308,38 +308,38 @@ export const RemixUiSettings = (props: RemixUiSettingsProps) => { const ipfsSettings = () => (
-
-
-
-
- +
+
+
+
+ +
-
-
-
- +
+
+ +
-
-
-
- +
+
+ +
-
-
-
- +
+
+ +
-
-
-
- +
+
+ +
+
+
+ saveIpfsSettings()} value={intl.formatMessage({ id: 'settings.save' })} type="button">
-
- saveIpfsSettings()} value={intl.formatMessage({ id: 'settings.save' })} type="button"> -
-
-
) +
) return ( diff --git a/libs/remix-ui/settings/src/lib/settingsReducer.ts b/libs/remix-ui/settings/src/lib/settingsReducer.ts index 27335af05a..4c1db50ad2 100644 --- a/libs/remix-ui/settings/src/lib/settingsReducer.ts +++ b/libs/remix-ui/settings/src/lib/settingsReducer.ts @@ -47,89 +47,89 @@ export const initialState = { export const settingReducer = (state, action) => { switch (action.type) { - case 'contractMetadata': - state.elementState.map(element => { - if (element.name === 'contractMetadata') { - element.isChecked = action.payload.isChecked - element.textClass = action.payload.textClass - } - }) - return { - ...state + case 'contractMetadata': + state.elementState.map(element => { + if (element.name === 'contractMetadata') { + element.isChecked = action.payload.isChecked + element.textClass = action.payload.textClass } - case 'ethereumVM': - state.elementState.map(element => { - if (element.name === 'ethereumVM') { - element.isChecked = action.payload.isChecked - element.textClass = action.payload.textClass - } - }) - return { - ...state + }) + return { + ...state + } + case 'ethereumVM': + state.elementState.map(element => { + if (element.name === 'ethereumVM') { + element.isChecked = action.payload.isChecked + element.textClass = action.payload.textClass } - case 'textWrap': - state.elementState.map(element => { - if (element.name === 'textWrap') { - element.isChecked = action.payload.isChecked - element.textClass = action.payload.textClass - } - }) - return { - ...state + }) + return { + ...state + } + case 'textWrap': + state.elementState.map(element => { + if (element.name === 'textWrap') { + element.isChecked = action.payload.isChecked + element.textClass = action.payload.textClass } - case 'personal': - state.elementState.map(element => { - if (element.name === 'personal') { - element.isChecked = action.payload.isChecked - element.textClass = action.payload.textClass - } - }) - return { - ...state + }) + return { + ...state + } + case 'personal': + state.elementState.map(element => { + if (element.name === 'personal') { + element.isChecked = action.payload.isChecked + element.textClass = action.payload.textClass } - case 'useMatomoAnalytics': - state.elementState.map(element => { - if (element.name === 'useMatomoAnalytics') { - element.isChecked = action.payload.isChecked - element.textClass = action.payload.textClass - } - }) - return { - ...state + }) + return { + ...state + } + case 'useMatomoAnalytics': + state.elementState.map(element => { + if (element.name === 'useMatomoAnalytics') { + element.isChecked = action.payload.isChecked + element.textClass = action.payload.textClass } + }) + return { + ...state + } - case 'useAutoCompletion': - state.elementState.map(element => { - if (element.name === 'useAutoCompletion') { - element.isChecked = action.payload.isChecked - element.textClass = action.payload.textClass - } - }) - return { - ...state + case 'useAutoCompletion': + state.elementState.map(element => { + if (element.name === 'useAutoCompletion') { + element.isChecked = action.payload.isChecked + element.textClass = action.payload.textClass } - case 'displayErrors': - state.elementState.map(element => { - if (element.name === 'displayErrors') { - element.isChecked = action.payload.isChecked - element.textClass = action.payload.textClass - } - }) - return { - ...state - } - case 'useShowGasInEditor': - state.elementState.map(element => { - if (element.name === 'useShowGasInEditor') { - element.isChecked = action.payload.isChecked - element.textClass = action.payload.textClass - } - }) - return { - ...state + }) + return { + ...state + } + case 'displayErrors': + state.elementState.map(element => { + if (element.name === 'displayErrors') { + element.isChecked = action.payload.isChecked + element.textClass = action.payload.textClass + } + }) + return { + ...state + } + case 'useShowGasInEditor': + state.elementState.map(element => { + if (element.name === 'useShowGasInEditor') { + element.isChecked = action.payload.isChecked + element.textClass = action.payload.textClass } - default: - return initialState + }) + return { + ...state + } + default: + return initialState } } @@ -140,11 +140,11 @@ export const toastInitialState = { export const toastReducer = (state, action) => { switch (action.type) { - case 'save' : - return { ...state, message: action.payload.message } - case 'removed' : - return { ...state, message: action.payload.message } - default : - return { ...state, message: '' } + case 'save' : + return { ...state, message: action.payload.message } + case 'removed' : + return { ...state, message: action.payload.message } + default : + return { ...state, message: '' } } } diff --git a/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx b/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx index 78570be9b4..70b51d0d2d 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx +++ b/libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx @@ -179,21 +179,21 @@ export const CompilerContainer = (props: CompilerContainerProps) => { useEffect(() => { if (compilerContainer.compiler.mode) { switch (compilerContainer.compiler.mode) { - case 'startingCompilation': - startingCompilation() - break - case 'compilationDuration': - compilationDuration(compilerContainer.compiler.args[0]) - break - case 'loadingCompiler': - loadingCompiler() - break - case 'compilerLoaded': - compilerLoaded(compilerContainer.compiler.args[1]) - break - case 'compilationFinished': - compilationFinished() - break + case 'startingCompilation': + startingCompilation() + break + case 'compilationDuration': + compilationDuration(compilerContainer.compiler.args[0]) + break + case 'loadingCompiler': + loadingCompiler() + break + case 'compilerLoaded': + compilerLoaded(compilerContainer.compiler.args[1]) + break + case 'compilationFinished': + compilationFinished() + break } } }, [compilerContainer.compiler.mode]) @@ -201,14 +201,14 @@ export const CompilerContainer = (props: CompilerContainerProps) => { useEffect(() => { if (compilerContainer.editor.mode) { switch (compilerContainer.editor.mode) { - case 'sessionSwitched': - sessionSwitched() - resetEditorMode()(dispatch) - break - case 'contentChanged': - contentChanged() - resetEditorMode()(dispatch) - break + case 'sessionSwitched': + sessionSwitched() + resetEditorMode()(dispatch) + break + case 'contentChanged': + contentChanged() + resetEditorMode()(dispatch) + break } } }, [compilerContainer.editor.mode]) @@ -800,8 +800,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => { tooltipClasses="text-nowrap" tooltipId="overlay-tooltip-hardhat" tooltipText={ - - } + + } > @@ -821,8 +821,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => { tooltipClasses="text-nowrap" tooltipId="overlay-tooltip-truffle" tooltipText={ - - } + + } > @@ -904,18 +904,18 @@ export const CompilerContainer = (props: CompilerContainerProps) => {
{(!showFilePathInput && state.useFileConfiguration) && + placement="bottom" + tooltipId="configfileTooltip" + tooltipClasses="text-nowrap" + tooltipText={ Click to open the config file - } - > - { } : async () => { await openFile() }} - className="py-2 remixui_compilerConfigPath" - >{configFilePath === '' ? 'No file selected.' : configFilePath} - } + } + > + { } : async () => { await openFile() }} + className="py-2 remixui_compilerConfigPath" + >{configFilePath === '' ? 'No file selected.' : configFilePath} + } {(!showFilePathInput && !state.useFileConfiguration) && {configFilePath}} { placement="auto" tooltipId="overlay-tooltip-compile" tooltipText={
- {!(configFilePath === '' && state.useFileConfiguration) &&
Ctrl+S to compile {state.compiledFileName.endsWith('.sol') ? state.compiledFileName : null}
} - {(configFilePath === '' && state.useFileConfiguration) &&
No config file selected
} -
} + {!(configFilePath === '' && state.useFileConfiguration) &&
Ctrl+S to compile {state.compiledFileName.endsWith('.sol') ? state.compiledFileName : null}
} + {(configFilePath === '' && state.useFileConfiguration) &&
No config file selected
} +
} >
{ } @@ -959,8 +959,8 @@ export const CompilerContainer = (props: CompilerContainerProps) => { id: 'solidity.noFileSelected', })}>` : `<${intl.formatMessage({ - id: 'solidity.noFileSelected', - })}>`} + id: 'solidity.noFileSelected', + })}>`}
diff --git a/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts b/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts index 9ac45e720b..9f36b48e9c 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts +++ b/libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts @@ -47,7 +47,7 @@ export class CompileTabLogic { this.evmVersion === 'null' || !this.evmVersion || !this.evmVersions.includes(this.evmVersion)) { - this.evmVersion = null + this.evmVersion = null } this.api.setCompilerParameters({ evmVersion: this.evmVersion }) this.compiler.set('evmVersion', this.evmVersion) diff --git a/libs/remix-ui/solidity-compiler/src/lib/logic/flattenerUtilities.ts b/libs/remix-ui/solidity-compiler/src/lib/logic/flattenerUtilities.ts index a354920c29..b4b0824ebb 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/logic/flattenerUtilities.ts +++ b/libs/remix-ui/solidity-compiler/src/lib/logic/flattenerUtilities.ts @@ -2,181 +2,181 @@ const IMPORT_SOLIDITY_REGEX = /^\s*import(\s+).*$/gm; const SPDX_SOLIDITY_REGEX = /^\s*\/\/ SPDX-License-Identifier:.*$/gm; export function getDependencyGraph(ast, target) { - const graph = tsort(); - const visited = {}; - visited[target] = 1; - _traverse(graph, visited, ast, target); - return graph; + const graph = tsort(); + const visited = {}; + visited[target] = 1; + _traverse(graph, visited, ast, target); + return graph; } export function concatSourceFiles(files: any[], sources: any) { - let concat = ''; - for (const file of files) { - const source = sources[file].content; - const sourceWithoutImport = source.replace(IMPORT_SOLIDITY_REGEX, ''); - const sourceWithoutSPDX = sourceWithoutImport.replace(SPDX_SOLIDITY_REGEX, ''); - concat += `\n// File: ${file}\n\n`; - concat += sourceWithoutSPDX; - } - return concat; + let concat = ''; + for (const file of files) { + const source = sources[file].content; + const sourceWithoutImport = source.replace(IMPORT_SOLIDITY_REGEX, ''); + const sourceWithoutSPDX = sourceWithoutImport.replace(SPDX_SOLIDITY_REGEX, ''); + concat += `\n// File: ${file}\n\n`; + concat += sourceWithoutSPDX; + } + return concat; } function _traverse(graph, visited, ast, name) { - let currentAst = null - currentAst = ast[name].ast - const dependencies = _getDependencies(currentAst); - for (const dependency of dependencies) { - const path = resolve(name, dependency); - if (path in visited) { - // continue; // fixes wrong ordering of source in flattened file - } - visited[path] = 1; - graph.add(name, path); - _traverse(graph, visited, ast, path); - } + let currentAst = null + currentAst = ast[name].ast + const dependencies = _getDependencies(currentAst); + for (const dependency of dependencies) { + const path = resolve(name, dependency); + if (path in visited) { + // continue; // fixes wrong ordering of source in flattened file + } + visited[path] = 1; + graph.add(name, path); + _traverse(graph, visited, ast, path); + } } function _getDependencies(ast) { - const dependencies = ast?.nodes - .filter(node => node?.nodeType === 'ImportDirective') - .map(node => node?.file); - return dependencies; + const dependencies = ast?.nodes + .filter(node => node?.nodeType === 'ImportDirective') + .map(node => node?.file); + return dependencies; } // TSORT function tsort(initial?: any) { - const graph = new Graph(); + const graph = new Graph(); - if (initial) { - initial.forEach(function (entry) { - Graph.prototype.add.apply(graph, entry); - }); - } + if (initial) { + initial.forEach(function (entry) { + Graph.prototype.add.apply(graph, entry); + }); + } - return graph; + return graph; } function Graph() { - this.nodes = {}; + this.nodes = {}; } // Add sorted items to the graph Graph.prototype.add = function () { - const self = this; - // eslint-disable-next-line prefer-rest-params - let items = [].slice.call(arguments); + const self = this; + // eslint-disable-next-line prefer-rest-params + let items = [].slice.call(arguments); - if (items.length === 1 && Array.isArray(items[0])) - items = items[0]; + if (items.length === 1 && Array.isArray(items[0])) + items = items[0]; - items.forEach(function (item) { - if (!self.nodes[item]) { - self.nodes[item] = []; - } - }); + items.forEach(function (item) { + if (!self.nodes[item]) { + self.nodes[item] = []; + } + }); - for (let i = 1; i < items.length; i++) { - const from = items[i]; - const to = items[i - 1]; + for (let i = 1; i < items.length; i++) { + const from = items[i]; + const to = items[i - 1]; - self.nodes[from].push(to); - } + self.nodes[from].push(to); + } - return self; + return self; }; // Depth first search // As given in http://en.wikipedia.org/wiki/Topological_sorting Graph.prototype.sort = function () { - const self = this; - const nodes = Object.keys(this.nodes); + const self = this; + const nodes = Object.keys(this.nodes); - const sorted = []; - const marks = {}; + const sorted = []; + const marks = {}; - for (let i = 0; i < nodes.length; i++) { - const node = nodes[i]; + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; - if (!marks[node]) { - visit(node); - } - } + if (!marks[node]) { + visit(node); + } + } - return sorted; + return sorted; - function visit(node) { - if (marks[node] === 'temp') - throw new Error("There is a cycle in the graph. It is not possible to derive a topological sort."); - else if (marks[node]) - return; + function visit(node) { + if (marks[node] === 'temp') + throw new Error("There is a cycle in the graph. It is not possible to derive a topological sort."); + else if (marks[node]) + return; - marks[node] = 'temp'; - self.nodes[node].forEach(visit); - marks[node] = 'perm'; + marks[node] = 'temp'; + self.nodes[node].forEach(visit); + marks[node] = 'perm'; - sorted.push(node); - } + sorted.push(node); + } }; Graph.prototype.isEmpty = function () { - const nodes = Object.keys(this.nodes); - return nodes.length === 0; + const nodes = Object.keys(this.nodes); + return nodes.length === 0; } // PATH function resolve(parentPath, childPath) { - if (_isAbsolute(childPath)) { - return childPath; - } - const path = parentPath + '/../' + childPath; - const pathParts = path.split('/'); - const resolvedParts = _resolvePathArray(pathParts); - const resolvedPath = resolvedParts - .join('/') - .replace('http:/', 'http://') - .replace('https:/', 'https://'); - return resolvedPath; + if (_isAbsolute(childPath)) { + return childPath; + } + const path = parentPath + '/../' + childPath; + const pathParts = path.split('/'); + const resolvedParts = _resolvePathArray(pathParts); + const resolvedPath = resolvedParts + .join('/') + .replace('http:/', 'http://') + .replace('https:/', 'https://'); + return resolvedPath; } function _isAbsolute(path) { - return path[0] !== '.'; + return path[0] !== '.'; } function _resolvePathArray(parts) { - const res = []; - for (let i = 0; i < parts.length; i++) { - const p = parts[i]; - - // ignore empty parts - if (!p || p === '.') - continue; - - if (p === '..') { - if (res.length && res[res.length - 1] !== '..') { - res.pop(); - } - } else { - res.push(p); - } - } - - return res; + const res = []; + for (let i = 0; i < parts.length; i++) { + const p = parts[i]; + + // ignore empty parts + if (!p || p === '.') + continue; + + if (p === '..') { + if (res.length && res[res.length - 1] !== '..') { + res.pop(); + } + } else { + res.push(p); + } + } + + return res; } export function normalizeContractPath(contractPath: string): string[] { - const paths = contractPath.split('/') - const filename = paths[paths.length - 1].split('.')[0] - let folders = '' - for (let i = 0; i < paths.length - 1; i++) { - if(i !== paths.length -1) { - folders += `${paths[i]}/` - } + const paths = contractPath.split('/') + const filename = paths[paths.length - 1].split('.')[0] + let folders = '' + for (let i = 0; i < paths.length - 1; i++) { + if(i !== paths.length -1) { + folders += `${paths[i]}/` } - const resultingPath = `${folders}${filename}` - return [folders,resultingPath, filename] + } + const resultingPath = `${folders}${filename}` + return [folders,resultingPath, filename] } \ No newline at end of file diff --git a/libs/remix-ui/solidity-compiler/src/lib/reducers/compiler.ts b/libs/remix-ui/solidity-compiler/src/lib/reducers/compiler.ts index f705c0f3cc..8734d8339c 100644 --- a/libs/remix-ui/solidity-compiler/src/lib/reducers/compiler.ts +++ b/libs/remix-ui/solidity-compiler/src/lib/reducers/compiler.ts @@ -15,49 +15,49 @@ export const compilerInitialState = { export const compilerReducer = (state = compilerInitialState, action: Action) => { switch (action.type) { - case 'SET_COMPILER_MODE': { - return { - ...state, - compiler: { - ...state.compiler, - mode: action.payload.mode, - args: action.payload.args || null - } + case 'SET_COMPILER_MODE': { + return { + ...state, + compiler: { + ...state.compiler, + mode: action.payload.mode, + args: action.payload.args || null } } + } - case 'RESET_COMPILER_MODE': { - return { - ...state, - compiler: { - ...state.compiler, - mode: '', - args: null - } + case 'RESET_COMPILER_MODE': { + return { + ...state, + compiler: { + ...state.compiler, + mode: '', + args: null } } + } - case 'SET_EDITOR_MODE': { - return { - ...state, - editor: { - ...state.editor, - mode: action.payload - } + case 'SET_EDITOR_MODE': { + return { + ...state, + editor: { + ...state.editor, + mode: action.payload } } + } - case 'RESET_EDITOR_MODE': { - return { - ...state, - editor: { - ...state.editor, - mode: '' - } + case 'RESET_EDITOR_MODE': { + return { + ...state, + editor: { + ...state.editor, + mode: '' } } + } - default: - throw new Error() + default: + throw new Error() } } diff --git a/libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx b/libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx index c729f91967..25c8fc4095 100644 --- a/libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx +++ b/libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx @@ -127,13 +127,13 @@ export function RemixUiSolidityUmlGen ({ updatedSvg, loading, fileName, themeDar ) : loading ?
- -
: } + +
: }
- )} + )} return (<> { } - + ) } diff --git a/libs/remix-ui/solidity-unit-testing/src/lib/logic/testTabLogic.ts b/libs/remix-ui/solidity-unit-testing/src/lib/logic/testTabLogic.ts index 6179adb62c..79954f42de 100644 --- a/libs/remix-ui/solidity-unit-testing/src/lib/logic/testTabLogic.ts +++ b/libs/remix-ui/solidity-unit-testing/src/lib/logic/testTabLogic.ts @@ -2,95 +2,95 @@ import remixPath from 'path' export class TestTabLogic { - fileManager - currentPath - helper - // eslint-disable-next-line @typescript-eslint/no-explicit-any - constructor (fileManager: any, helper: any) { - this.fileManager = fileManager - this.helper = helper - this.currentPath = '/tests' + fileManager + currentPath + helper + // eslint-disable-next-line @typescript-eslint/no-explicit-any + constructor (fileManager: any, helper: any) { + this.fileManager = fileManager + this.helper = helper + this.currentPath = '/tests' + } + + setCurrentPath (path: string) { + if (path === '/') { + this.currentPath = '/' + return } - - setCurrentPath (path: string) { - if (path === '/') { - this.currentPath = '/' - return - } - if (path.indexOf('/') === 0) return - this.currentPath = this.helper.removeMultipleSlashes(this.helper.removeTrailingSlashes(path)) - } - - async generateTestFolder (path:string) { - // Todo move this check to File Manager after refactoring - // Checking to ignore the value which contains only whitespaces - if (!path || !(/\S/.test(path))) return - path = this.helper.removeMultipleSlashes(path) - const fileProvider = this.fileManager.fileProviderOf(path.split('/')[0]) - if(!await fileProvider.exists(path)) fileProvider.createDir(path) - } - - async pathExists (path: string) { - // Checking to ignore the value which contains only whitespaces - if (!path || !(/\S/.test(path))) return - const fileProvider = this.fileManager.fileProviderOf(path.split('/')[0]) - return await fileProvider.exists(path) - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - async generateTestFile (errorCb:any) { - let fileName = this.fileManager.currentFile() - const hasCurrent = !!fileName && this.fileManager.currentFile().split('.').pop().toLowerCase() === 'sol' - if (!hasCurrent) fileName = this.currentPath + '/newFile.sol' - const fileProvider = await this.fileManager.fileProviderOf(this.currentPath) - if (!fileProvider) return - const splittedFileName = fileName.split('/') - const fileNameToImport = (!hasCurrent) ? fileName : this.currentPath + '/' + splittedFileName[splittedFileName.length - 1] - this.helper.createNonClashingNameWithPrefix(fileNameToImport, fileProvider, '_test', async (error: Error, newFile: string) => { - if (error) return errorCb('Failed to create file. ' + newFile + ' ' + error) - try{ - await fileProvider.set(newFile, this.generateTestContractSample(hasCurrent, fileName)) - await this.fileManager.open(newFile) - await this.fileManager.syncEditor(newFile) - }catch(e){ - return errorCb('Failed to create test file ' + newFile) - } - }) + if (path.indexOf('/') === 0) return + this.currentPath = this.helper.removeMultipleSlashes(this.helper.removeTrailingSlashes(path)) + } + + async generateTestFolder (path:string) { + // Todo move this check to File Manager after refactoring + // Checking to ignore the value which contains only whitespaces + if (!path || !(/\S/.test(path))) return + path = this.helper.removeMultipleSlashes(path) + const fileProvider = this.fileManager.fileProviderOf(path.split('/')[0]) + if(!await fileProvider.exists(path)) fileProvider.createDir(path) + } + + async pathExists (path: string) { + // Checking to ignore the value which contains only whitespaces + if (!path || !(/\S/.test(path))) return + const fileProvider = this.fileManager.fileProviderOf(path.split('/')[0]) + return await fileProvider.exists(path) + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + async generateTestFile (errorCb:any) { + let fileName = this.fileManager.currentFile() + const hasCurrent = !!fileName && this.fileManager.currentFile().split('.').pop().toLowerCase() === 'sol' + if (!hasCurrent) fileName = this.currentPath + '/newFile.sol' + const fileProvider = await this.fileManager.fileProviderOf(this.currentPath) + if (!fileProvider) return + const splittedFileName = fileName.split('/') + const fileNameToImport = (!hasCurrent) ? fileName : this.currentPath + '/' + splittedFileName[splittedFileName.length - 1] + this.helper.createNonClashingNameWithPrefix(fileNameToImport, fileProvider, '_test', async (error: Error, newFile: string) => { + if (error) return errorCb('Failed to create file. ' + newFile + ' ' + error) + try{ + await fileProvider.set(newFile, this.generateTestContractSample(hasCurrent, fileName)) + await this.fileManager.open(newFile) + await this.fileManager.syncEditor(newFile) + }catch(e){ + return errorCb('Failed to create test file ' + newFile) + } + }) + } + + dirList (path:string) { + return this.fileManager.dirList(path) + } + + isRemixDActive () { + return this.fileManager.isRemixDActive() + } + + async getTests () { + if (!this.currentPath) return [] + const provider = this.fileManager.fileProviderOf(this.currentPath) + if (!provider) return [] + const tests = [] + let files = [] + try { + if (await this.fileManager.exists(this.currentPath)) files = await this.fileManager.readdir(this.currentPath) + } catch (e: any) { // eslint-disable-line @typescript-eslint/no-explicit-any + throw e.message } - - dirList (path:string) { - return this.fileManager.dirList(path) - } - - isRemixDActive () { - return this.fileManager.isRemixDActive() + for (const file in files) { + const filepath = provider && provider.type ? provider.type + '/' + file : file + if (/.(_test.sol)$/.exec(file)) tests.push(filepath) } - - async getTests () { - if (!this.currentPath) return [] - const provider = this.fileManager.fileProviderOf(this.currentPath) - if (!provider) return [] - const tests = [] - let files = [] - try { - if (await this.fileManager.exists(this.currentPath)) files = await this.fileManager.readdir(this.currentPath) - } catch (e: any) { // eslint-disable-line @typescript-eslint/no-explicit-any - throw e.message - } - for (const file in files) { - const filepath = provider && provider.type ? provider.type + '/' + file : file - if (/.(_test.sol)$/.exec(file)) tests.push(filepath) - } - return tests - } - - // @todo(#2758): If currently selected file is compiled and compilation result is available, - // 'contractName' should be + '_testSuite' - generateTestContractSample (hasCurrent: boolean, fileToImport: string, contractName = 'testSuite') { - let relative = remixPath.relative(this.currentPath, remixPath.dirname(fileToImport)) - if (relative === '') relative = '.' - const comment = hasCurrent ? `import "${relative}/${remixPath.basename(fileToImport)}";` : '// ' - return `// SPDX-License-Identifier: GPL-3.0 + return tests + } + + // @todo(#2758): If currently selected file is compiled and compilation result is available, + // 'contractName' should be + '_testSuite' + generateTestContractSample (hasCurrent: boolean, fileToImport: string, contractName = 'testSuite') { + let relative = remixPath.relative(this.currentPath, remixPath.dirname(fileToImport)) + if (relative === '') relative = '.' + const comment = hasCurrent ? `import "${relative}/${remixPath.basename(fileToImport)}";` : '// ' + return `// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.22 <0.9.0; @@ -139,5 +139,5 @@ contract ${contractName} { } } ` - } + } } diff --git a/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx b/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx index 6eae02296c..f01c1683f9 100644 --- a/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx +++ b/libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx @@ -301,20 +301,20 @@ export const SolidityUnitTesting = (props: Record) => { // eslint-d if (index > -1) { const className = "alert-danger d-inline-block mb-1 mr-1 p-1 failed_" + runningTestFileName label = ( -
FAIL
-
) + placement={'right'} + tooltipClasses="text-nowrap" + tooltipId="info-recorder" + tooltipText="At least one contract test failed" + > +
FAIL
+ ) } else { const className = "alert-success d-inline-block mb-1 mr-1 p-1 passed_" + runningTestFileName label = ( -
PASS
-
) + tooltipText="All contract tests passed" + > +
PASS
+ ) } // show contract and file name with label const ContractCard: ReactElement = ( @@ -742,9 +742,9 @@ export const SolidityUnitTesting = (props: Record) => { // eslint-d placement={'top'} > - + - +
) => { // eslint-d tooltipClasses="text-nowrap" tooltipId="info-recorder" tooltipText={runButtonTitle} - > + >
diff --git a/libs/remix-ui/static-analyser/src/lib/Button/StaticAnalyserButton.tsx b/libs/remix-ui/static-analyser/src/lib/Button/StaticAnalyserButton.tsx index cc38e0b3d0..34614e4cde 100644 --- a/libs/remix-ui/static-analyser/src/lib/Button/StaticAnalyserButton.tsx +++ b/libs/remix-ui/static-analyser/src/lib/Button/StaticAnalyserButton.tsx @@ -18,7 +18,7 @@ const StaticAnalyserButton = ({ }: StaticAnalyserButtonProps) => { const defaultStyle = "btn btn-sm btn-block btn-primary" const newclassList = disabled && classList.length > 0 ? `${classList} disabled` : - classList.length === 0 && disabled ? `${defaultStyle} disabled` : classList.length > 0 ? `${classList}` : defaultStyle + classList.length === 0 && disabled ? `${defaultStyle} disabled` : classList.length > 0 ? `${classList}` : defaultStyle const buttonWithoutTooltip = () => (
@@ -772,12 +772,12 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { state.source && startAnalysis && hints.length > 0 ? ( - + Loading... - - ) : ( - - )} + + ) : ( + + )} ), title: ( @@ -828,25 +828,8 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => {
{!hideWarnings && !showLibsWarning && ssaWarnings.length > 0 ? ssaWarnings - .filter((x) => !x.options.isLibrary && x.hasWarning) - .map((x, i) => ( -
- -
- )) - : !hideWarnings && showLibsWarning && ssaWarnings.length > 0 - ? ssaWarnings.map((x, i) => ( + .filter((x) => !x.options.isLibrary && x.hasWarning) + .map((x, i) => (
{ />
)) - : !hideWarnings && !showLibsWarning && basicEnabled - ? ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning) - .map((x, i) => ( + : !hideWarnings && showLibsWarning && ssaWarnings.length > 0 + ? ssaWarnings.map((x, i) => (
{ editor={props.analysisModule} />
- )) : null} + )) + : !hideWarnings && !showLibsWarning && basicEnabled + ? ssaWarnings.filter((x) => !x.options.isLibrary && x.hasWarning) + .map((x, i) => ( +
+ +
+ )) : null}
@@ -888,12 +888,12 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { state.source && startAnalysis && Object.entries(warningState).length > 0 ? ( - + Loading... - - ) : ( - - )} + + ) : ( + + )} ), }, @@ -937,55 +937,55 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { {!hideWarnings ? showLibsWarning ? slitherWarnings.map((warning, index) => ( -
- -
- )) +
+ +
+ )) : noLibSlitherWarnings.map((warning, index) => ( -
- -
- )) +
+ +
+ )) : slitherWarnings - .filter((x) => x.options.type === "error") - .map((warning, index) => ( -
- -
- ))} + .filter((x) => x.options.type === "error") + .map((warning, index) => ( +
+ +
+ ))} @@ -994,12 +994,12 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { state.source && startAnalysis && slitherWarnings.length > 0 ? ( - + Loading... - - ) : ( - - )} + + ) : ( + + )} ), }, @@ -1159,24 +1159,24 @@ export const RemixUiStaticAnalyser = (props: RemixUiStaticAnalyserProps) => { {slitherWarnings.length > 0 || hints.length > 0 || ssaWarnings.length > 0 ? ( -
0 || +
0 || hints.length > 0 || ssaWarnings.length > 0 - ? "border-top" - : "" - } flex-column`} - > - Last results for: - - {state.file} - -
- ) : null} + Last results for: + + {state.file} + +
+ ) : null}
{ switch (action.type) { - case 'SELECT_INDEX': - return { - ...state, - currentExt: action.ext, - selectedIndex: action.payload, - } - case 'SET_FILE_DECORATIONS': - return { - ...state, - fileDecorations: action.payload as fileDecoration[], - } - default: - return state + case 'SELECT_INDEX': + return { + ...state, + currentExt: action.ext, + selectedIndex: action.payload, + } + case 'SET_FILE_DECORATIONS': + return { + ...state, + fileDecorations: action.payload as fileDecoration[], + } + default: + return state } } @@ -84,7 +84,7 @@ export const TabsUI = (props: TabsUIProps) => { return } - const renderTab = (tab, index) => { + const renderTab = (tab, index) => { const classNameImg = 'my-1 mr-1 text-dark ' + tab.iconClass const classNameTab = 'nav-item nav-link d-flex justify-content-center align-items-center px-2 py-1 tab' + (index === currentIndexRef.current ? ' active' : '') const invert = props.themeQuality === 'dark' ? 'invert(1)' : 'invert(0)' @@ -177,9 +177,9 @@ export const TabsUI = (props: TabsUIProps) => { placement="bottom" tooltipId="overlay-tooltip-run-script" tooltipText={ - {(tabsState.currentExt === 'js' || tabsState.currentExt === 'ts') ? "Run script (CTRL + SHIFT + S)" : - tabsState.currentExt === 'sol' || tabsState.currentExt === 'yul'? "Compile CTRL + S" : "Select .sol or .yul file to compile or a .ts or .js file and run it"} - } + {(tabsState.currentExt === 'js' || tabsState.currentExt === 'ts') ? "Run script (CTRL + SHIFT + S)" : + tabsState.currentExt === 'sol' || tabsState.currentExt === 'yul'? "Compile CTRL + S" : "Select .sol or .yul file to compile or a .ts or .js file and run it"} + } > diff --git a/libs/remix-ui/terminal/src/lib/reducers/terminalReducer.ts b/libs/remix-ui/terminal/src/lib/reducers/terminalReducer.ts index e8046e4c96..61ba9d85fc 100644 --- a/libs/remix-ui/terminal/src/lib/reducers/terminalReducer.ts +++ b/libs/remix-ui/terminal/src/lib/reducers/terminalReducer.ts @@ -25,171 +25,171 @@ export const initialState = { export const registerCommandReducer = (state, action) => { switch (action.type) { - case HTML : - return { - ...state, - _commands: Object.assign(initialState._commands, action.payload._commands), - commands: Object.assign(initialState.commands, action.payload.commands), - data: Object.assign(initialState.data, { ...action.payload.data }) - } - case LOG: - return { - ...state, - _commands: Object.assign(initialState._commands, action.payload._commands), - commands: Object.assign(initialState.commands, action.payload.commands), - data: Object.assign(initialState.data, { ...action.payload.data }) + case HTML : + return { + ...state, + _commands: Object.assign(initialState._commands, action.payload._commands), + commands: Object.assign(initialState.commands, action.payload.commands), + data: Object.assign(initialState.data, { ...action.payload.data }) + } + case LOG: + return { + ...state, + _commands: Object.assign(initialState._commands, action.payload._commands), + commands: Object.assign(initialState.commands, action.payload.commands), + data: Object.assign(initialState.data, { ...action.payload.data }) - } - case INFO: - return { - ...state, - _commands: Object.assign(initialState._commands, action.payload._commands), - commands: Object.assign(initialState.commands, action.payload.commands), - data: Object.assign(initialState.data, action.payload.data) - } - case WARN: - return { - ...state, - _commands: Object.assign(initialState._commands, action.payload._commands), - commands: Object.assign(initialState.commands, action.payload.commands), - data: Object.assign(initialState.data, action.payload.data) - } - case ERROR: - return { - ...state, - _commands: Object.assign(initialState._commands, action.payload._commands), - commands: Object.assign(initialState.commands, action.payload.commands), - data: Object.assign(initialState.data, action.payload.data) - } - case SCRIPT: - return { - ...state, - _commands: Object.assign(initialState._commands, action.payload._commands), - commands: Object.assign(initialState.commands, action.payload.commands), - data: Object.assign(initialState.data, action.payload.data) - } - case CLEAR_CONSOLE: - return { - ...state, - ...state.journalBlocks.splice(0) - } - case LISTEN_ON_NETWORK: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-log' }) - } - default : - return { state } + } + case INFO: + return { + ...state, + _commands: Object.assign(initialState._commands, action.payload._commands), + commands: Object.assign(initialState.commands, action.payload.commands), + data: Object.assign(initialState.data, action.payload.data) + } + case WARN: + return { + ...state, + _commands: Object.assign(initialState._commands, action.payload._commands), + commands: Object.assign(initialState.commands, action.payload.commands), + data: Object.assign(initialState.data, action.payload.data) + } + case ERROR: + return { + ...state, + _commands: Object.assign(initialState._commands, action.payload._commands), + commands: Object.assign(initialState.commands, action.payload.commands), + data: Object.assign(initialState.data, action.payload.data) + } + case SCRIPT: + return { + ...state, + _commands: Object.assign(initialState._commands, action.payload._commands), + commands: Object.assign(initialState.commands, action.payload.commands), + data: Object.assign(initialState.data, action.payload.data) + } + case CLEAR_CONSOLE: + return { + ...state, + ...state.journalBlocks.splice(0) + } + case LISTEN_ON_NETWORK: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-log' }) + } + default : + return { state } } } export const registerFilterReducer = (state, action) => { switch (action.type) { - case LOG: - return { - ...state, - data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) + case LOG: + return { + ...state, + data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) - } - case INFO: - return { - ...state, - data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) - } - case WARN: - return { - ...state, - data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) - } - case ERROR: - return { - ...state, - data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) - } - case SCRIPT: - return { - ...state, - data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) - } - default : - return { state } + } + case INFO: + return { + ...state, + data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) + } + case WARN: + return { + ...state, + data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) + } + case ERROR: + return { + ...state, + data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) + } + case SCRIPT: + return { + ...state, + data: Object.assign(initialState.data.filterFns, action.payload.data.filterFns) + } + default : + return { state } } } export const addCommandHistoryReducer = (state, action) => { switch (action.type) { - case CMD_HISTORY: - return { - ...state, - _commandHistory: initialState._commandHistory.unshift(action.payload.script) + case CMD_HISTORY: + return { + ...state, + _commandHistory: initialState._commandHistory.unshift(action.payload.script) - } - default : - return { state } + } + default : + return { state } } } export const remixWelcomeTextReducer = (state, action) => { switch (action.type) { - case 'welcomeText' : - return { - ...state, - journalBlocks: initialState.journalBlocks.push(action.payload.welcomeText) - } + case 'welcomeText' : + return { + ...state, + journalBlocks: initialState.journalBlocks.push(action.payload.welcomeText) + } } } export const registerScriptRunnerReducer = (state, action) => { switch (action.type) { - case HTML: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-log', provider: action.payload.provider }) - } - case LOG: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-log', provider: action.payload.provider }) - } - case INFO: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-success', provider: action.payload.provider }) - } - case WARN: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-warning', provider: action.payload.provider }) - } - case ERROR: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-danger', provider: action.payload.provider }) - } - case SCRIPT: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-log', provider: action.payload.provider }) - } - case KNOWN_TRANSACTION: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: '', name: 'knownTransaction', provider: action.payload.provider }) - } - case UNKNOWN_TRANSACTION: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: '', name: 'unknownTransaction', provider: action.payload.provider }) - } - case EMPTY_BLOCK: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: '', name: 'emptyBlock', provider: action.payload.provider }) - } - case NEW_TRANSACTION: - return { - ...state, - journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: '', provider: action.payload.provider }) - } + case HTML: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-log', provider: action.payload.provider }) + } + case LOG: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-log', provider: action.payload.provider }) + } + case INFO: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-success', provider: action.payload.provider }) + } + case WARN: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-warning', provider: action.payload.provider }) + } + case ERROR: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-danger', provider: action.payload.provider }) + } + case SCRIPT: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: 'text-log', provider: action.payload.provider }) + } + case KNOWN_TRANSACTION: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: '', name: 'knownTransaction', provider: action.payload.provider }) + } + case UNKNOWN_TRANSACTION: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: '', name: 'unknownTransaction', provider: action.payload.provider }) + } + case EMPTY_BLOCK: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: '', name: 'emptyBlock', provider: action.payload.provider }) + } + case NEW_TRANSACTION: + return { + ...state, + journalBlocks: initialState.journalBlocks.push({ message: action.payload.message, style: '', provider: action.payload.provider }) + } } } diff --git a/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx b/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx index 47a2627d8a..5aaf78ef45 100644 --- a/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx +++ b/libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx @@ -451,7 +451,7 @@ export const RemixUiTerminal = (props: RemixUiTerminalProps) => {
- { - themeModule.switchTheme() + themeModule.switchTheme() }, [themeName, themeModule]) return ( @@ -23,31 +23,31 @@ export function RemixUiThemeModule({ themeModule }: RemixUiThemeModuleProps) {
{themeModule.getThemes() ? themeModule.getThemes().map((theme, idx) => ( -
+ { + themeModule.switchTheme(theme.name); + setThemeName(theme.name); + }} + className="align-middle custom-control-input" + name="theme" + id={theme.name} + data-id={`settingsTabTheme${theme.name}`} + checked={themeModule.active === theme.name.toLocaleLowerCase()} + /> +
- )) + {theme.name} ({theme.quality}) + +
+ )) : null}
diff --git a/libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx b/libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx index 96859c424a..f5ed27ac3b 100644 --- a/libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx +++ b/libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx @@ -6,9 +6,9 @@ import './tooltip-popup.module.css' const popover = (title?: string, content?: string | React.ReactNode) => ( { title || 'Tooltip' } - - { content } - + + { content } + ) diff --git a/libs/remix-ui/tree-view/src/lib/tree-view-item/tree-view-item.tsx b/libs/remix-ui/tree-view/src/lib/tree-view-item/tree-view-item.tsx index fd092c882d..795f71f7b5 100644 --- a/libs/remix-ui/tree-view/src/lib/tree-view-item/tree-view-item.tsx +++ b/libs/remix-ui/tree-view/src/lib/tree-view-item/tree-view-item.tsx @@ -17,7 +17,7 @@ export const TreeViewItem = (props: TreeViewItemProps) => { { children && showIcon ?
: icon ?
: null + >
: icon ?
: null } { label } diff --git a/libs/remix-ui/vertical-icons-panel/src/lib/components/Badge.tsx b/libs/remix-ui/vertical-icons-panel/src/lib/components/Badge.tsx index 6362a7ed62..6a6c57fc08 100644 --- a/libs/remix-ui/vertical-icons-panel/src/lib/components/Badge.tsx +++ b/libs/remix-ui/vertical-icons-panel/src/lib/components/Badge.tsx @@ -19,21 +19,21 @@ function Badge ({ badgeStatus }: BadgeProps) { function resolveClasses (key: string, type: string) { let classes = 'remixui_status' switch (key) { - case 'succeed': - classes += ' fas fa-check-circle text-' + type + ' ' + 'remixui_statusCheck' - break - case 'edited': - classes += ' fas fa-sync text-' + type + ' ' + 'remixui_statusCheck' - break - case 'loading': - classes += ' fas fa-spinner text-' + type + ' ' + 'remixui_statusCheck' - break - case 'failed': - classes += ' fas fa-exclamation-triangle text-' + type + ' ' + 'remixui_statusCheck' - break - default: { - classes += ' badge badge-pill badge-' + type - } + case 'succeed': + classes += ' fas fa-check-circle text-' + type + ' ' + 'remixui_statusCheck' + break + case 'edited': + classes += ' fas fa-sync text-' + type + ' ' + 'remixui_statusCheck' + break + case 'loading': + classes += ' fas fa-spinner text-' + type + ' ' + 'remixui_statusCheck' + break + case 'failed': + classes += ' fas fa-exclamation-triangle text-' + type + ' ' + 'remixui_statusCheck' + break + default: { + classes += ' badge badge-pill badge-' + type + } } return classes } @@ -66,11 +66,11 @@ function Badge ({ badgeStatus }: BadgeProps) { ) : ( -   +   ) ) : ( - badgeStatus.text - )} + badgeStatus.text + )} ) : null} diff --git a/libs/remix-ui/vertical-icons-panel/src/lib/components/Icon.tsx b/libs/remix-ui/vertical-icons-panel/src/lib/components/Icon.tsx index 95bff088c8..c1174f1476 100644 --- a/libs/remix-ui/vertical-icons-panel/src/lib/components/Icon.tsx +++ b/libs/remix-ui/vertical-icons-panel/src/lib/components/Icon.tsx @@ -106,9 +106,9 @@ const Icon = ({ ref={iconRef} > {name} - +
{showContext ? ( diff --git a/libs/remix-ui/vertical-icons-panel/src/lib/vertical-icons-context-menu.tsx b/libs/remix-ui/vertical-icons-panel/src/lib/vertical-icons-context-menu.tsx index 0330af0412..7c5850579a 100644 --- a/libs/remix-ui/vertical-icons-panel/src/lib/vertical-icons-context-menu.tsx +++ b/libs/remix-ui/vertical-icons-panel/src/lib/vertical-icons-context-menu.tsx @@ -106,17 +106,17 @@ const MenuForLinks = ({ ) } - function ClickOutside(ref: React.MutableRefObject, hideFn: () => void) { +function ClickOutside(ref: React.MutableRefObject, hideFn: () => void) { useEffect(() => { - function handleClickOutside(event: any) { - if (ref.current && !ref.current.contains(event.target)) { - hideFn() - } + function handleClickOutside(event: any) { + if (ref.current && !ref.current.contains(event.target)) { + hideFn() } - document.addEventListener("mousedown", handleClickOutside); - return () => { - document.removeEventListener("mousedown", handleClickOutside); - }; + } + document.addEventListener("mousedown", handleClickOutside); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; }, [ref]); } diff --git a/libs/remix-ui/workspace/src/lib/actions/workspace.ts b/libs/remix-ui/workspace/src/lib/actions/workspace.ts index a994416f3c..37652f1b04 100644 --- a/libs/remix-ui/workspace/src/lib/actions/workspace.ts +++ b/libs/remix-ui/workspace/src/lib/actions/workspace.ts @@ -168,93 +168,93 @@ export const loadWorkspacePreset = async (template: WorkspaceTemplate = 'remixDe const params = queryParams.get() as UrlParametersType switch (template) { - case 'code-template': - // creates a new workspace code-sample and loads code from url params. - try { - let path = ''; let content + case 'code-template': + // creates a new workspace code-sample and loads code from url params. + try { + let path = ''; let content - if (params.code) { - const hashed = bufferToHex(hash.keccakFromString(params.code)) + if (params.code) { + const hashed = bufferToHex(hash.keccakFromString(params.code)) - path = 'contract-' + hashed.replace('0x', '').substring(0, 10) + (params.language && params.language.toLowerCase() === 'yul' ? '.yul' : '.sol') - content = atob(decodeURIComponent(params.code)) - await workspaceProvider.set(path, content) - } - if (params.url) { - const data = await plugin.call('contentImport', 'resolve', params.url) - - path = data.cleanUrl - content = data.content - - try { - content = JSON.parse(content) as any - if (content.language && content.language === "Solidity" && content.sources) { - const standardInput: JSONStandardInput = content as JSONStandardInput - for (const [fname, source] of Object.entries(standardInput.sources)) { - await workspaceProvider.set(fname, source.content) - } - return Object.keys(standardInput.sources)[0] - } else { - await workspaceProvider.set(path, JSON.stringify(content)) + path = 'contract-' + hashed.replace('0x', '').substring(0, 10) + (params.language && params.language.toLowerCase() === 'yul' ? '.yul' : '.sol') + content = atob(decodeURIComponent(params.code)) + await workspaceProvider.set(path, content) + } + if (params.url) { + const data = await plugin.call('contentImport', 'resolve', params.url) + + path = data.cleanUrl + content = data.content + + try { + content = JSON.parse(content) as any + if (content.language && content.language === "Solidity" && content.sources) { + const standardInput: JSONStandardInput = content as JSONStandardInput + for (const [fname, source] of Object.entries(standardInput.sources)) { + await workspaceProvider.set(fname, source.content) } - } catch (e) { - console.log(e) - await workspaceProvider.set(path, content) + return Object.keys(standardInput.sources)[0] + } else { + await workspaceProvider.set(path, JSON.stringify(content)) } + } catch (e) { + console.log(e) + await workspaceProvider.set(path, content) } - return path - } catch (e) { - console.error(e) } - break + return path + } catch (e) { + console.error(e) + } + break - case 'gist-template': - // creates a new workspace gist-sample and get the file from gist - try { - const gistId = params.gist - const response: AxiosResponse = await axios.get(`https://api.github.com/gists/${gistId}`) - const data = response.data as { files: any } + case 'gist-template': + // creates a new workspace gist-sample and get the file from gist + try { + const gistId = params.gist + const response: AxiosResponse = await axios.get(`https://api.github.com/gists/${gistId}`) + const data = response.data as { files: any } - if (!data.files) { - return dispatch(displayNotification('Gist load error', 'No files found', 'OK', null, () => { dispatch(hideNotification()) }, null)) - } - const obj = {} + if (!data.files) { + return dispatch(displayNotification('Gist load error', 'No files found', 'OK', null, () => { dispatch(hideNotification()) }, null)) + } + const obj = {} - Object.keys(data.files).forEach((element) => { - const path = element.replace(/\.\.\./g, '/') + Object.keys(data.files).forEach((element) => { + const path = element.replace(/\.\.\./g, '/') - obj['/' + 'gist-' + gistId + '/' + path] = data.files[element] - }) - plugin.fileManager.setBatchFiles(obj, 'workspace', true, (errorLoadingFile) => { - if (errorLoadingFile) { - dispatch(displayNotification('', errorLoadingFile.message || errorLoadingFile, 'OK', null, () => { }, null)) - } - }) - } catch (e) { - dispatch(displayNotification('Gist load error', e.message, 'OK', null, () => { dispatch(hideNotification()) }, null)) - console.error(e) - } - break - - default: - try { - const templateList = Object.keys(templateWithContent) - if (!templateList.includes(template)) break - _paq.push(['trackEvent', 'workspace', 'template', template]) - // @ts-ignore - const files = await templateWithContent[template](opts) - for (const file in files) { - try { - await workspaceProvider.set(file, files[file]) - } catch (error) { - console.error(error) - } + obj['/' + 'gist-' + gistId + '/' + path] = data.files[element] + }) + plugin.fileManager.setBatchFiles(obj, 'workspace', true, (errorLoadingFile) => { + if (errorLoadingFile) { + dispatch(displayNotification('', errorLoadingFile.message || errorLoadingFile, 'OK', null, () => { }, null)) + } + }) + } catch (e) { + dispatch(displayNotification('Gist load error', e.message, 'OK', null, () => { dispatch(hideNotification()) }, null)) + console.error(e) + } + break + + default: + try { + const templateList = Object.keys(templateWithContent) + if (!templateList.includes(template)) break + _paq.push(['trackEvent', 'workspace', 'template', template]) + // @ts-ignore + const files = await templateWithContent[template](opts) + for (const file in files) { + try { + await workspaceProvider.set(file, files[file]) + } catch (error) { + console.error(error) } - } catch (e) { - dispatch(displayNotification('Workspace load error', e.message, 'OK', null, () => { dispatch(hideNotification()) }, null)) - console.error(e) } - break + } catch (e) { + dispatch(displayNotification('Workspace load error', e.message, 'OK', null, () => { dispatch(hideNotification()) }, null)) + console.error(e) + } + break } } diff --git a/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx b/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx index 146721b3b4..d28c4856ce 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx @@ -86,25 +86,25 @@ export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => group = item.group if(item.name === "Upload File"){ return
  • { - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'uploadFile']) - setShowFileExplorer(true) - }} + id={`menuitem${item.name.toLowerCase()}`} + key={key} + className={className} + onClick={()=>{ + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'uploadFile']) + setShowFileExplorer(true) + }} >{intl.formatMessage({id: `filePanel.${item.id}`, defaultMessage: item.label || item.name})}
  • } if(item.name === "Load a Local File"){ return
  • { - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'uploadFile']) - setShowFileExplorer(true) - }} + id={`menuitem${item.name.toLowerCase()}`} + key={key} + className={className} + onClick={()=>{ + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'uploadFile']) + setShowFileExplorer(true) + }} >{intl.formatMessage({id: `filePanel.${item.id}`, defaultMessage: item.label || item.name})}
  • } return
  • onClick={(e) => { e.stopPropagation() switch (item.name) { - case 'New File': - createNewFile(path) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'newFile']) - break - case 'New Folder': - createNewFolder(path) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'newFolder']) - break - case 'Rename': - renamePath(path, type) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'rename']) - break - case 'Delete': - deletePath(getPath()) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'delete']) - break - case 'Download': - downloadPath(path) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'download']) - break - case 'Push changes to gist': - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'pushToChangesoGist']) - pushChangesToGist(path, type) - break - case 'Publish folder to gist': - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'publishFolderToGist']) - publishFolderToGist(path, type) - break - case 'Publish file to gist': - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'publishFileToGist']) - publishFileToGist(path, type) - break - case 'Run': - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'runScript']) - runScript(path) - break - case 'Copy': - copy(path, type) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'copy']) - break - case 'Copy name': - copyFileName(path, type) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'copy']) - break - case 'Copy path': - copyPath(path, type) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'copy']) - break - case 'Paste': - paste(path, type) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'paste']) - break - case 'Delete All': - deletePath(getPath()) - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'deleteAll']) - break - case 'Publish Workspace to Gist': - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'publishWorkspace']) - publishFolderToGist(path, type) - break - default: - _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', `${item.id}/${item.name}`]) - emit && emit({ ...item, path: [path] } as customAction) - break + case 'New File': + createNewFile(path) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'newFile']) + break + case 'New Folder': + createNewFolder(path) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'newFolder']) + break + case 'Rename': + renamePath(path, type) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'rename']) + break + case 'Delete': + deletePath(getPath()) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'delete']) + break + case 'Download': + downloadPath(path) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'download']) + break + case 'Push changes to gist': + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'pushToChangesoGist']) + pushChangesToGist(path, type) + break + case 'Publish folder to gist': + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'publishFolderToGist']) + publishFolderToGist(path, type) + break + case 'Publish file to gist': + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'publishFileToGist']) + publishFileToGist(path, type) + break + case 'Run': + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'runScript']) + runScript(path) + break + case 'Copy': + copy(path, type) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'copy']) + break + case 'Copy name': + copyFileName(path, type) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'copy']) + break + case 'Copy path': + copyPath(path, type) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'copy']) + break + case 'Paste': + paste(path, type) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'paste']) + break + case 'Delete All': + deletePath(getPath()) + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'deleteAll']) + break + case 'Publish Workspace to Gist': + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'publishWorkspace']) + publishFolderToGist(path, type) + break + default: + _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', `${item.id}/${item.name}`]) + emit && emit({ ...item, path: [path] } as customAction) + break } hideContextMenu() }}>{intl.formatMessage({id: `filePanel.${item.id}`, defaultMessage: item.label || item.name})}
  • diff --git a/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx b/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx index db0e36379b..c37eb897ae 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx @@ -86,13 +86,13 @@ export const FileExplorerMenu = (props: FileExplorerMenuProps) => { className={icon + ' mb-0 px-1 remixui_newFile'} key={`index-${action}-${placement}-${icon}`} > - { - e.stopPropagation() - _paq.push(['trackEvent', 'fileExplorer', 'fileAction', action]) - props.uploadFile(e.target) - e.target.value = null - }} - multiple /> + { + e.stopPropagation() + _paq.push(['trackEvent', 'fileExplorer', 'fileAction', action]) + props.uploadFile(e.target) + e.target.value = null + }} + multiple /> ) @@ -111,13 +111,13 @@ export const FileExplorerMenu = (props: FileExplorerMenuProps) => { className={icon + ' mb-0 px-1 remixui_newFile'} key={`index-${action}-${placement}-${icon}`} > - { - e.stopPropagation() - _paq.push(['trackEvent', 'fileExplorer', 'fileAction', action]) - props.uploadFolder(e.target) - e.target.value = null - }} - {...enableDirUpload} multiple /> + { + e.stopPropagation() + _paq.push(['trackEvent', 'fileExplorer', 'fileAction', action]) + props.uploadFolder(e.target) + e.target.value = null + }} + {...enableDirUpload} multiple /> ) diff --git a/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx b/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx index 15e29a83f6..ae17e2af9a 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-explorer.tsx @@ -232,50 +232,50 @@ export const FileExplorer = (props: FileExplorerProps) => { return ( -
    - - - +
    + + + +
    + } + expand={true}> +
    + + { + files[ROOT_PATH] && Object.keys(files[ROOT_PATH]).map((key, index) => ) + } +
    - } - expand={true}> -
    - - { - files[ROOT_PATH] && Object.keys(files[ROOT_PATH]).map((key, index) => ) - } - -
    -
    -
    -
    + + +
    ) } diff --git a/libs/remix-ui/workspace/src/lib/components/upload-file.tsx b/libs/remix-ui/workspace/src/lib/components/upload-file.tsx index 2ce89cae39..b8fe0b9edd 100644 --- a/libs/remix-ui/workspace/src/lib/components/upload-file.tsx +++ b/libs/remix-ui/workspace/src/lib/components/upload-file.tsx @@ -12,8 +12,8 @@ const UploadFile = (props: UploadFileProps) => { useEffect(() => { ref.current.click(); ref.current.onchange= (event)=>{ - //@ts-ignore - props.onUpload(event.target, event.target.files); + //@ts-ignore + props.onUpload(event.target, event.target.files); } }, []); diff --git a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx index 9651c94c09..b4cdeef44b 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx @@ -14,100 +14,100 @@ export interface HamburgerMenuItemProps { export function HamburgerMenuItem (props: HamburgerMenuItemProps) { const { hideOption } = props - const uid = 'workspace' + props.kind - return ( - <> - - } + const uid = 'workspace' + props.kind + return ( + <> + + } + > +
    { + props.actionOnClick() + _paq.push(['trackEvent', 'fileExplorer', 'workspaceMenu', uid]) + }} + > + + + + +
    +
    +
    + + ) +} - // keeping the following for a later use: - export function NavHamburgerMenuItem (props: HamburgerMenuItemProps) { - const { hideOption } = props - const uid = 'workspace' + props.kind - return ( - <> - - } - > -
    { - props.actionOnClick() - _paq.push(['trackEvent', 'fileExplorer', 'workspaceMenu', uid]) - }} - > - - - - -
    -
    -
    - - ) - } +// keeping the following for a later use: +export function NavHamburgerMenuItem (props: HamburgerMenuItemProps) { + const { hideOption } = props + const uid = 'workspace' + props.kind + return ( + <> + + } + > +
    { + props.actionOnClick() + _paq.push(['trackEvent', 'fileExplorer', 'workspaceMenu', uid]) + }} + > + + + + +
    +
    +
    + + ) +} - export interface HamburgerSubMenuItemProps { +export interface HamburgerSubMenuItemProps { id: string title: string subMenus: Array } - export function HamburgerSubMenuItem (props: HamburgerSubMenuItemProps) { - return ( - <> - + - {props.subMenus.map(item => )} - - - ) - } \ No newline at end of file + > + {props.subMenus.map(item => )} + + + ) +} \ No newline at end of file diff --git a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx index bf00c5aa56..09e8d37f62 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx @@ -23,69 +23,69 @@ export interface HamburgerMenuProps { export function HamburgerMenu (props: HamburgerMenuProps) { const { showIconsMenu, hideWorkspaceOptions, hideLocalhostOptions } = props - return ( - <> - { - props.createWorkspace() - props.hideIconsMenu(!showIconsMenu) - }}> - { - props.cloneGitRepository() - props.hideIconsMenu(!showIconsMenu) - }}> - { - props.renameCurrentWorkspace() - props.hideIconsMenu(!showIconsMenu) - }}> - { - props.downloadCurrentWorkspace() - props.hideIconsMenu(!showIconsMenu) - }}> - { - props.deleteCurrentWorkspace() - props.hideIconsMenu(!showIconsMenu) - }}> - - { - props.deleteAllWorkspaces() - props.hideIconsMenu(!showIconsMenu) - }}> - { - props.downloadWorkspaces() - props.hideIconsMenu(!showIconsMenu) - }}> - { - props.restoreBackup() - props.hideIconsMenu(!showIconsMenu) - }}> - - { - props.addGithubAction() - props.hideIconsMenu(!showIconsMenu) - }}> - { - props.addTsSolTestGithubAction() - props.hideIconsMenu(!showIconsMenu) - }}> - { - props.addSlitherGithubAction() - props.hideIconsMenu(!showIconsMenu) - }}> - - { - props.addHelperScripts('etherscan') - props.hideIconsMenu(!showIconsMenu) - }}> - { - props.addHelperScripts('deployer') - props.hideIconsMenu(!showIconsMenu) - }}> - - ) - } + return ( + <> + { + props.createWorkspace() + props.hideIconsMenu(!showIconsMenu) + }}> + { + props.cloneGitRepository() + props.hideIconsMenu(!showIconsMenu) + }}> + { + props.renameCurrentWorkspace() + props.hideIconsMenu(!showIconsMenu) + }}> + { + props.downloadCurrentWorkspace() + props.hideIconsMenu(!showIconsMenu) + }}> + { + props.deleteCurrentWorkspace() + props.hideIconsMenu(!showIconsMenu) + }}> + + { + props.deleteAllWorkspaces() + props.hideIconsMenu(!showIconsMenu) + }}> + { + props.downloadWorkspaces() + props.hideIconsMenu(!showIconsMenu) + }}> + { + props.restoreBackup() + props.hideIconsMenu(!showIconsMenu) + }}> + + { + props.addGithubAction() + props.hideIconsMenu(!showIconsMenu) + }}> + { + props.addTsSolTestGithubAction() + props.hideIconsMenu(!showIconsMenu) + }}> + { + props.addSlitherGithubAction() + props.hideIconsMenu(!showIconsMenu) + }}> + + { + props.addHelperScripts('etherscan') + props.hideIconsMenu(!showIconsMenu) + }}> + { + props.addHelperScripts('deployer') + props.hideIconsMenu(!showIconsMenu) + }}> + + ) +} - // keep for later use - /* Promise, dispatchCreateSlitherGithubAction: () => Promise dispatchCreateHelperScripts: (script: string) => Promise -}>(null) + }>(null) \ No newline at end of file diff --git a/libs/remix-ui/workspace/src/lib/reducers/workspace.ts b/libs/remix-ui/workspace/src/lib/reducers/workspace.ts index cceec06c7f..a6d82f2885 100644 --- a/libs/remix-ui/workspace/src/lib/reducers/workspace.ts +++ b/libs/remix-ui/workspace/src/lib/reducers/workspace.ts @@ -123,614 +123,614 @@ export const browserInitialState: BrowserState = { export const browserReducer = (state = browserInitialState, action: Action) => { switch (action.type) { - case 'SET_CURRENT_WORKSPACE': { - const payload = action.payload as { name: string; isGitRepo: boolean; branches?: { remote: any; name: string; }[], currentBranch?: string } - const workspaces = state.browser.workspaces.find(({ name }) => name === payload.name) ? state.browser.workspaces : [...state.browser.workspaces, action.payload] - - return { - ...state, - browser: { - ...state.browser, - currentWorkspace: payload.name, - workspaces: workspaces.filter(workspace => workspace) - } + case 'SET_CURRENT_WORKSPACE': { + const payload = action.payload as { name: string; isGitRepo: boolean; branches?: { remote: any; name: string; }[], currentBranch?: string } + const workspaces = state.browser.workspaces.find(({ name }) => name === payload.name) ? state.browser.workspaces : [...state.browser.workspaces, action.payload] + + return { + ...state, + browser: { + ...state.browser, + currentWorkspace: payload.name, + workspaces: workspaces.filter(workspace => workspace) } } + } - case 'SET_WORKSPACES': { - const payload = action.payload as { name: string; isGitRepo: boolean; branches?: { remote: any; name: string; }[], currentBranch?: string }[] + case 'SET_WORKSPACES': { + const payload = action.payload as { name: string; isGitRepo: boolean; branches?: { remote: any; name: string; }[], currentBranch?: string }[] - return { - ...state, - browser: { - ...state.browser, - workspaces: payload.filter(workspace => workspace) - } + return { + ...state, + browser: { + ...state.browser, + workspaces: payload.filter(workspace => workspace) } } + } - case 'SET_MODE': { - const payload = action.payload as 'browser' | 'localhost' + case 'SET_MODE': { + const payload = action.payload as 'browser' | 'localhost' - return { - ...state, - mode: payload - } + return { + ...state, + mode: payload } + } - case 'FETCH_DIRECTORY_REQUEST': { - return { - ...state, - browser: { - ...state.browser, - isRequestingDirectory: state.mode === 'browser', - isSuccessfulDirectory: false, - error: null - }, - localhost: { - ...state.localhost, - isRequestingDirectory: state.mode === 'localhost', - isSuccessfulDirectory: false, - error: null - } + case 'FETCH_DIRECTORY_REQUEST': { + return { + ...state, + browser: { + ...state.browser, + isRequestingDirectory: state.mode === 'browser', + isSuccessfulDirectory: false, + error: null + }, + localhost: { + ...state.localhost, + isRequestingDirectory: state.mode === 'localhost', + isSuccessfulDirectory: false, + error: null } } + } - case 'FETCH_DIRECTORY_SUCCESS': { - const payload = action.payload as { path: string, fileTree } - - return { - ...state, - browser: { - ...state.browser, - files: state.mode === 'browser' ? fetchDirectoryContent(state, payload) : state.browser.files, - isRequestingDirectory: false, - isSuccessfulDirectory: true, - error: null - }, - localhost: { - ...state.localhost, - files: state.mode === 'localhost' ? fetchDirectoryContent(state, payload) : state.localhost.files, - isRequestingDirectory: false, - isSuccessfulDirectory: true, - error: null - } + case 'FETCH_DIRECTORY_SUCCESS': { + const payload = action.payload as { path: string, fileTree } + + return { + ...state, + browser: { + ...state.browser, + files: state.mode === 'browser' ? fetchDirectoryContent(state, payload) : state.browser.files, + isRequestingDirectory: false, + isSuccessfulDirectory: true, + error: null + }, + localhost: { + ...state.localhost, + files: state.mode === 'localhost' ? fetchDirectoryContent(state, payload) : state.localhost.files, + isRequestingDirectory: false, + isSuccessfulDirectory: true, + error: null } } + } - case 'FETCH_DIRECTORY_ERROR': { - return { - ...state, - browser: { - ...state.browser, - isRequestingDirectory: false, - isSuccessfulDirectory: false, - error: state.mode === 'browser' ? action.payload : null - }, - localhost: { - ...state.localhost, - isRequestingDirectory: false, - isSuccessfulDirectory: false, - error: state.mode === 'localhost' ? action.payload : null - } + case 'FETCH_DIRECTORY_ERROR': { + return { + ...state, + browser: { + ...state.browser, + isRequestingDirectory: false, + isSuccessfulDirectory: false, + error: state.mode === 'browser' ? action.payload : null + }, + localhost: { + ...state.localhost, + isRequestingDirectory: false, + isSuccessfulDirectory: false, + error: state.mode === 'localhost' ? action.payload : null } } + } - case 'FETCH_WORKSPACE_DIRECTORY_REQUEST': { - return { - ...state, - browser: { - ...state.browser, - isRequestingWorkspace: state.mode === 'browser', - isSuccessfulWorkspace: false, - error: null - }, - localhost: { - ...state.localhost, - isRequestingWorkspace: state.mode === 'localhost', - isSuccessfulWorkspace: false, - error: null - } + case 'FETCH_WORKSPACE_DIRECTORY_REQUEST': { + return { + ...state, + browser: { + ...state.browser, + isRequestingWorkspace: state.mode === 'browser', + isSuccessfulWorkspace: false, + error: null + }, + localhost: { + ...state.localhost, + isRequestingWorkspace: state.mode === 'localhost', + isSuccessfulWorkspace: false, + error: null } } + } - case 'FETCH_WORKSPACE_DIRECTORY_SUCCESS': { - const payload = action.payload as { path: string, fileTree } - - return { - ...state, - browser: { - ...state.browser, - files: state.mode === 'browser' ? fetchWorkspaceDirectoryContent(state, payload) : state.browser.files, - isRequestingWorkspace: false, - isSuccessfulWorkspace: true, - error: null - }, - localhost: { - ...state.localhost, - files: state.mode === 'localhost' ? fetchWorkspaceDirectoryContent(state, payload) : state.localhost.files, - isRequestingWorkspace: false, - isSuccessfulWorkspace: true, - error: null, - sharedFolder: null - } + case 'FETCH_WORKSPACE_DIRECTORY_SUCCESS': { + const payload = action.payload as { path: string, fileTree } + + return { + ...state, + browser: { + ...state.browser, + files: state.mode === 'browser' ? fetchWorkspaceDirectoryContent(state, payload) : state.browser.files, + isRequestingWorkspace: false, + isSuccessfulWorkspace: true, + error: null + }, + localhost: { + ...state.localhost, + files: state.mode === 'localhost' ? fetchWorkspaceDirectoryContent(state, payload) : state.localhost.files, + isRequestingWorkspace: false, + isSuccessfulWorkspace: true, + error: null, + sharedFolder: null } } + } - case 'FETCH_WORKSPACE_DIRECTORY_ERROR': { - return { - ...state, - browser: { - ...state.browser, - isRequestingWorkspace: false, - isSuccessfulWorkspace: false, - error: state.mode === 'browser' ? action.payload : null - }, - localhost: { - ...state.localhost, - isRequestingWorkspace: false, - isSuccessfulWorkspace: false, - error: state.mode === 'localhost' ? action.payload : null - } + case 'FETCH_WORKSPACE_DIRECTORY_ERROR': { + return { + ...state, + browser: { + ...state.browser, + isRequestingWorkspace: false, + isSuccessfulWorkspace: false, + error: state.mode === 'browser' ? action.payload : null + }, + localhost: { + ...state.localhost, + isRequestingWorkspace: false, + isSuccessfulWorkspace: false, + error: state.mode === 'localhost' ? action.payload : null } } + } - case 'DISPLAY_NOTIFICATION': { - const payload = action.payload as { title: string, message: string, actionOk: () => void, actionCancel: () => void, labelOk: string, labelCancel: string } + case 'DISPLAY_NOTIFICATION': { + const payload = action.payload as { title: string, message: string, actionOk: () => void, actionCancel: () => void, labelOk: string, labelCancel: string } - return { - ...state, - notification: { - title: payload.title, - message: payload.message, - actionOk: payload.actionOk || browserInitialState.notification.actionOk, - actionCancel: payload.actionCancel || browserInitialState.notification.actionCancel, - labelOk: payload.labelOk, - labelCancel: payload.labelCancel - } + return { + ...state, + notification: { + title: payload.title, + message: payload.message, + actionOk: payload.actionOk || browserInitialState.notification.actionOk, + actionCancel: payload.actionCancel || browserInitialState.notification.actionCancel, + labelOk: payload.labelOk, + labelCancel: payload.labelCancel } } + } - case 'HIDE_NOTIFICATION': { - return { - ...state, - notification: browserInitialState.notification - } + case 'HIDE_NOTIFICATION': { + return { + ...state, + notification: browserInitialState.notification } + } - case 'FILE_ADDED_SUCCESS': { - const payload = action.payload as string + case 'FILE_ADDED_SUCCESS': { + const payload = action.payload as string - return { - ...state, - browser: { - ...state.browser, - files: state.mode === 'browser' ? fileAdded(state, payload) : state.browser.files, - expandPath: state.mode === 'browser' ? [...new Set([...state.browser.expandPath, payload])] : state.browser.expandPath - }, - localhost: { - ...state.localhost, - files: state.mode === 'localhost' ? fileAdded(state, payload) : state.localhost.files, - expandPath: state.mode === 'localhost' ? [...new Set([...state.localhost.expandPath, payload])] : state.localhost.expandPath - } + return { + ...state, + browser: { + ...state.browser, + files: state.mode === 'browser' ? fileAdded(state, payload) : state.browser.files, + expandPath: state.mode === 'browser' ? [...new Set([...state.browser.expandPath, payload])] : state.browser.expandPath + }, + localhost: { + ...state.localhost, + files: state.mode === 'localhost' ? fileAdded(state, payload) : state.localhost.files, + expandPath: state.mode === 'localhost' ? [...new Set([...state.localhost.expandPath, payload])] : state.localhost.expandPath } } + } - case 'FOLDER_ADDED_SUCCESS': { - const payload = action.payload as { path: string, folderPath: string, fileTree } + case 'FOLDER_ADDED_SUCCESS': { + const payload = action.payload as { path: string, folderPath: string, fileTree } - return { - ...state, - browser: { - ...state.browser, - files: state.mode === 'browser' ? fetchDirectoryContent(state, payload) : state.browser.files, - expandPath: state.mode === 'browser' ? [...new Set([...state.browser.expandPath, payload.folderPath])] : state.browser.expandPath - }, - localhost: { - ...state.localhost, - files: state.mode === 'localhost' ? fetchDirectoryContent(state, payload) : state.localhost.files, - expandPath: state.mode === 'localhost' ? [...new Set([...state.localhost.expandPath, payload.folderPath])] : state.localhost.expandPath - } + return { + ...state, + browser: { + ...state.browser, + files: state.mode === 'browser' ? fetchDirectoryContent(state, payload) : state.browser.files, + expandPath: state.mode === 'browser' ? [...new Set([...state.browser.expandPath, payload.folderPath])] : state.browser.expandPath + }, + localhost: { + ...state.localhost, + files: state.mode === 'localhost' ? fetchDirectoryContent(state, payload) : state.localhost.files, + expandPath: state.mode === 'localhost' ? [...new Set([...state.localhost.expandPath, payload.folderPath])] : state.localhost.expandPath } } + } - case 'FILE_REMOVED_SUCCESS': { - const payload = action.payload as string + case 'FILE_REMOVED_SUCCESS': { + const payload = action.payload as string - return { - ...state, - browser: { - ...state.browser, - files: state.mode === 'browser' ? fileRemoved(state, payload) : state.browser.files, - expandPath: state.mode === 'browser' ? [...(state.browser.expandPath.filter(path => path !== payload))] : state.browser.expandPath - }, - localhost: { - ...state.localhost, - files: state.mode === 'localhost' ? fileRemoved(state, payload) : state.localhost.files, - expandPath: state.mode === 'localhost' ? [...(state.browser.expandPath.filter(path => path !== payload))] : state.localhost.expandPath - } + return { + ...state, + browser: { + ...state.browser, + files: state.mode === 'browser' ? fileRemoved(state, payload) : state.browser.files, + expandPath: state.mode === 'browser' ? [...(state.browser.expandPath.filter(path => path !== payload))] : state.browser.expandPath + }, + localhost: { + ...state.localhost, + files: state.mode === 'localhost' ? fileRemoved(state, payload) : state.localhost.files, + expandPath: state.mode === 'localhost' ? [...(state.browser.expandPath.filter(path => path !== payload))] : state.localhost.expandPath } } + } - case 'ROOT_FOLDER_CHANGED': { - const payload = action.payload as string - return { - ...state, - localhost: { - ...state.localhost, - sharedFolder: payload, - files: {} - } + case 'ROOT_FOLDER_CHANGED': { + const payload = action.payload as string + return { + ...state, + localhost: { + ...state.localhost, + sharedFolder: payload, + files: {} } } + } - case 'ADD_INPUT_FIELD': { - const payload = action.payload as { path: string, fileTree, type: 'file' | 'folder' } + case 'ADD_INPUT_FIELD': { + const payload = action.payload as { path: string, fileTree, type: 'file' | 'folder' } - return { - ...state, - browser: { - ...state.browser, - files: state.mode === 'browser' ? fetchDirectoryContent(state, payload) : state.browser.files - }, - localhost: { - ...state.localhost, - files: state.mode === 'localhost' ? fetchDirectoryContent(state, payload) : state.localhost.files - }, - focusEdit: payload.path + '/' + 'blank' - } + return { + ...state, + browser: { + ...state.browser, + files: state.mode === 'browser' ? fetchDirectoryContent(state, payload) : state.browser.files + }, + localhost: { + ...state.localhost, + files: state.mode === 'localhost' ? fetchDirectoryContent(state, payload) : state.localhost.files + }, + focusEdit: payload.path + '/' + 'blank' } + } - case 'REMOVE_INPUT_FIELD': { - const payload = action.payload as { path: string, fileTree } + case 'REMOVE_INPUT_FIELD': { + const payload = action.payload as { path: string, fileTree } - return { - ...state, - browser: { - ...state.browser, - files: state.mode === 'browser' ? removeInputField(state, payload.path) : state.browser.files - }, - localhost: { - ...state.localhost, - files: state.mode === 'localhost' ? removeInputField(state, payload.path) : state.localhost.files - }, - focusEdit: null - } + return { + ...state, + browser: { + ...state.browser, + files: state.mode === 'browser' ? removeInputField(state, payload.path) : state.browser.files + }, + localhost: { + ...state.localhost, + files: state.mode === 'localhost' ? removeInputField(state, payload.path) : state.localhost.files + }, + focusEdit: null } + } - case 'SET_READ_ONLY_MODE': { - const payload = action.payload as boolean + case 'SET_READ_ONLY_MODE': { + const payload = action.payload as boolean - return { - ...state, - readonly: payload - } + return { + ...state, + readonly: payload } + } - case 'FILE_RENAMED_SUCCESS': { - const payload = action.payload as { path: string, oldPath: string, fileTree } + case 'FILE_RENAMED_SUCCESS': { + const payload = action.payload as { path: string, oldPath: string, fileTree } - return { - ...state, - browser: { - ...state.browser, - files: state.mode === 'browser' ? fetchDirectoryContent(state, payload, payload.oldPath) : state.browser.files - }, - localhost: { - ...state.localhost, - files: state.mode === 'localhost' ? fetchDirectoryContent(state, payload, payload.oldPath) : state.localhost.files - } + return { + ...state, + browser: { + ...state.browser, + files: state.mode === 'browser' ? fetchDirectoryContent(state, payload, payload.oldPath) : state.browser.files + }, + localhost: { + ...state.localhost, + files: state.mode === 'localhost' ? fetchDirectoryContent(state, payload, payload.oldPath) : state.localhost.files } } + } - case 'CREATE_WORKSPACE_REQUEST': { - return { - ...state, - browser: { - ...state.browser, - isRequestingWorkspace: true, - isSuccessfulWorkspace: false, - error: null - } + case 'CREATE_WORKSPACE_REQUEST': { + return { + ...state, + browser: { + ...state.browser, + isRequestingWorkspace: true, + isSuccessfulWorkspace: false, + error: null } } + } - case 'CREATE_WORKSPACE_SUCCESS': { - const payload = action.payload as { name: string; isGitRepo: boolean; branches?: { remote: any; name: string; }[], currentBranch?: string } - const workspaces = state.browser.workspaces.find(({ name }) => name === payload.name) ? state.browser.workspaces : [...state.browser.workspaces, action.payload] + case 'CREATE_WORKSPACE_SUCCESS': { + const payload = action.payload as { name: string; isGitRepo: boolean; branches?: { remote: any; name: string; }[], currentBranch?: string } + const workspaces = state.browser.workspaces.find(({ name }) => name === payload.name) ? state.browser.workspaces : [...state.browser.workspaces, action.payload] - return { - ...state, - browser: { - ...state.browser, - currentWorkspace: payload.name, - workspaces: workspaces.filter(workspace => workspace), - isRequestingWorkspace: false, - isSuccessfulWorkspace: true, - error: null - } + return { + ...state, + browser: { + ...state.browser, + currentWorkspace: payload.name, + workspaces: workspaces.filter(workspace => workspace), + isRequestingWorkspace: false, + isSuccessfulWorkspace: true, + error: null } } + } - case 'CREATE_WORKSPACE_ERROR': { - return { - ...state, - browser: { - ...state.browser, - isRequestingWorkspace: false, - isSuccessfulWorkspace: false, - error: action.payload - } + case 'CREATE_WORKSPACE_ERROR': { + return { + ...state, + browser: { + ...state.browser, + isRequestingWorkspace: false, + isSuccessfulWorkspace: false, + error: action.payload } } + } - case 'RENAME_WORKSPACE': { - const payload = action.payload as { oldName: string, workspaceName: string } - let renamedWorkspace - const workspaces = state.browser.workspaces.filter(({ name, isGitRepo, branches, currentBranch }) => { - if (name && (name !== payload.oldName)) { - return true - } else { - renamedWorkspace = { - name: payload.workspaceName, - isGitRepo, - branches, - currentBranch - } - return false - } - }) - - return { - ...state, - browser: { - ...state.browser, - currentWorkspace: payload.workspaceName, - workspaces: [...workspaces, renamedWorkspace], - expandPath: [] + case 'RENAME_WORKSPACE': { + const payload = action.payload as { oldName: string, workspaceName: string } + let renamedWorkspace + const workspaces = state.browser.workspaces.filter(({ name, isGitRepo, branches, currentBranch }) => { + if (name && (name !== payload.oldName)) { + return true + } else { + renamedWorkspace = { + name: payload.workspaceName, + isGitRepo, + branches, + currentBranch } + return false + } + }) + + return { + ...state, + browser: { + ...state.browser, + currentWorkspace: payload.workspaceName, + workspaces: [...workspaces, renamedWorkspace], + expandPath: [] } } + } - case 'DELETE_WORKSPACE': { - const payload = action.payload as string - const workspaces = state.browser.workspaces.filter(({ name }) => name && (name !== payload)) + case 'DELETE_WORKSPACE': { + const payload = action.payload as string + const workspaces = state.browser.workspaces.filter(({ name }) => name && (name !== payload)) - return { - ...state, - browser: { - ...state.browser, - workspaces: workspaces - } + return { + ...state, + browser: { + ...state.browser, + workspaces: workspaces } } + } - case 'DISPLAY_POPUP_MESSAGE': { - const payload = action.payload as string + case 'DISPLAY_POPUP_MESSAGE': { + const payload = action.payload as string - return { - ...state, - popup: payload - } + return { + ...state, + popup: payload } + } - case 'HIDE_POPUP_MESSAGE': { - return { - ...state, - popup: '' - } + case 'HIDE_POPUP_MESSAGE': { + return { + ...state, + popup: '' } + } - case 'SET_FOCUS_ELEMENT': { - const payload = action.payload as { key: string, type: 'file' | 'folder' | 'gist' }[] + case 'SET_FOCUS_ELEMENT': { + const payload = action.payload as { key: string, type: 'file' | 'folder' | 'gist' }[] - return { - ...state, - focusElement: payload - } + return { + ...state, + focusElement: payload } + } - case 'REMOVE_FOCUS_ELEMENT': { - const payload: string = action.payload + case 'REMOVE_FOCUS_ELEMENT': { + const payload: string = action.payload - return { - ...state, - focusElement: state.focusElement.filter(element => element.key !== payload) - } + return { + ...state, + focusElement: state.focusElement.filter(element => element.key !== payload) } + } - case 'SET_CONTEXT_MENU_ITEM': { - const payload = action.payload as action + case 'SET_CONTEXT_MENU_ITEM': { + const payload = action.payload as action - return { - ...state, - browser: { - ...state.browser, - contextMenu: addContextMenuItem(state, payload) - }, - localhost: { - ...state.localhost, - contextMenu: addContextMenuItem(state, payload) - } + return { + ...state, + browser: { + ...state.browser, + contextMenu: addContextMenuItem(state, payload) + }, + localhost: { + ...state.localhost, + contextMenu: addContextMenuItem(state, payload) } } + } - case 'REMOVE_CONTEXT_MENU_ITEM': { - const payload = action.payload + case 'REMOVE_CONTEXT_MENU_ITEM': { + const payload = action.payload - return { - ...state, - browser: { - ...state.browser, - contextMenu: removeContextMenuItem(state, payload) - }, - localhost: { - ...state.localhost, - contextMenu: removeContextMenuItem(state, payload) - } + return { + ...state, + browser: { + ...state.browser, + contextMenu: removeContextMenuItem(state, payload) + }, + localhost: { + ...state.localhost, + contextMenu: removeContextMenuItem(state, payload) } } + } - case 'SET_EXPAND_PATH': { - const payload = action.payload as string[] + case 'SET_EXPAND_PATH': { + const payload = action.payload as string[] - return { - ...state, - browser: { - ...state.browser, - expandPath: payload - }, - localhost: { - ...state.localhost, - expandPath: payload - } + return { + ...state, + browser: { + ...state.browser, + expandPath: payload + }, + localhost: { + ...state.localhost, + expandPath: payload } } + } - case 'LOAD_LOCALHOST_REQUEST': { - return { - ...state, - localhost: { - ...state.localhost, - isRequestingLocalhost: true, - isSuccessfulLocalhost: false, - error: null - } + case 'LOAD_LOCALHOST_REQUEST': { + return { + ...state, + localhost: { + ...state.localhost, + isRequestingLocalhost: true, + isSuccessfulLocalhost: false, + error: null } } + } - case 'LOAD_LOCALHOST_SUCCESS': { - return { - ...state, - localhost: { - ...state.localhost, - isRequestingLocalhost: false, - isSuccessfulLocalhost: true, - error: null - } + case 'LOAD_LOCALHOST_SUCCESS': { + return { + ...state, + localhost: { + ...state.localhost, + isRequestingLocalhost: false, + isSuccessfulLocalhost: true, + error: null } } + } - case 'LOAD_LOCALHOST_ERROR': { - const payload = action.payload as string + case 'LOAD_LOCALHOST_ERROR': { + const payload = action.payload as string - return { - ...state, - localhost: { - ...state.localhost, - isRequestingLocalhost: false, - isSuccessfulLocalhost: false, - error: payload - } + return { + ...state, + localhost: { + ...state.localhost, + isRequestingLocalhost: false, + isSuccessfulLocalhost: false, + error: payload } } + } - case 'CLONE_REPOSITORY_REQUEST': { - return { - ...state, - browser: { - ...state.browser, - isRequestingCloning: true, - isSuccessfulCloning: false - } + case 'CLONE_REPOSITORY_REQUEST': { + return { + ...state, + browser: { + ...state.browser, + isRequestingCloning: true, + isSuccessfulCloning: false } } + } - case 'CLONE_REPOSITORY_SUCCESS': { - return { - ...state, - browser: { - ...state.browser, - isRequestingCloning: false, - isSuccessfulCloning: true - } + case 'CLONE_REPOSITORY_SUCCESS': { + return { + ...state, + browser: { + ...state.browser, + isRequestingCloning: false, + isSuccessfulCloning: true } } + } - case 'CLONE_REPOSITORY_FAILED': { - return { - ...state, - browser: { - ...state.browser, - isRequestingCloning: false, - isSuccessfulCloning: false - } + case 'CLONE_REPOSITORY_FAILED': { + return { + ...state, + browser: { + ...state.browser, + isRequestingCloning: false, + isSuccessfulCloning: false } } + } - case 'FS_INITIALIZATION_COMPLETED': { - return { - ...state, - initializingFS: false - } + case 'FS_INITIALIZATION_COMPLETED': { + return { + ...state, + initializingFS: false } + } - case 'SET_FILE_DECORATION_SUCCESS': { - return { - ...state, - browser: { - ...state.browser, - fileState: action.payload - } + case 'SET_FILE_DECORATION_SUCCESS': { + return { + ...state, + browser: { + ...state.browser, + fileState: action.payload } } + } - case 'SET_CURRENT_WORKSPACE_BRANCHES': { - const payload: { remote: any, name: string }[] = action.payload + case 'SET_CURRENT_WORKSPACE_BRANCHES': { + const payload: { remote: any, name: string }[] = action.payload - return { - ...state, - browser: { - ...state.browser, - workspaces: state.browser.workspaces.map((workspace) => { - if (workspace.name === state.browser.currentWorkspace) workspace.branches = payload - return workspace - }) - } + return { + ...state, + browser: { + ...state.browser, + workspaces: state.browser.workspaces.map((workspace) => { + if (workspace.name === state.browser.currentWorkspace) workspace.branches = payload + return workspace + }) } } + } - case 'SET_CURRENT_WORKSPACE_CURRENT_BRANCH': { - const payload: string = action.payload + case 'SET_CURRENT_WORKSPACE_CURRENT_BRANCH': { + const payload: string = action.payload - return { - ...state, - browser: { - ...state.browser, - workspaces: state.browser.workspaces.map((workspace) => { - if (workspace.name === state.browser.currentWorkspace) workspace.currentBranch = payload - return workspace - }) - } + return { + ...state, + browser: { + ...state.browser, + workspaces: state.browser.workspaces.map((workspace) => { + if (workspace.name === state.browser.currentWorkspace) workspace.currentBranch = payload + return workspace + }) } } + } - case 'SET_CURRENT_WORKSPACE_IS_GITREPO': { - const payload: boolean = action.payload + case 'SET_CURRENT_WORKSPACE_IS_GITREPO': { + const payload: boolean = action.payload - return { - ...state, - browser: { - ...state.browser, - workspaces: state.browser.workspaces.map((workspace) => { - if (workspace.name === state.browser.currentWorkspace) workspace.isGitRepo = payload - return workspace - }) - } + return { + ...state, + browser: { + ...state.browser, + workspaces: state.browser.workspaces.map((workspace) => { + if (workspace.name === state.browser.currentWorkspace) workspace.isGitRepo = payload + return workspace + }) } } + } - case 'SET_GIT_CONFIG' : { - const payload: { username: string, token: string, email: string } = action.payload - return { - ...state, - gitConfig: payload - } + case 'SET_GIT_CONFIG' : { + const payload: { username: string, token: string, email: string } = action.payload + return { + ...state, + gitConfig: payload } + } - default: - throw new Error() + default: + throw new Error() } } diff --git a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx index a64ddb8979..593fdf8736 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -588,28 +588,28 @@ export function Workspace () {
    - - + +
    - - + +
    - - + +
    - - + +
    - - + +
    @@ -639,7 +639,7 @@ export function Workspace () { {!global.fs.gitConfig.username || !global.fs.gitConfig.email ? ( -
    ) +
    ) :<> } @@ -679,48 +679,48 @@ export function Workspace () { e.preventDefault() handleContextMenu(e.pageX, e.pageY, ROOT_PATH, "workspace", 'workspace') } - }> + }>
    {currentWorkspace !== LOCALHOST ? ( - hideIconsMenu(!showIconsMenu)} show={showIconsMenu}> - { - hideIconsMenu(!showIconsMenu) - }} - icon={'fas fa-bars'} - > - - - - - ) : null} - - - + hideIconsMenu(!showIconsMenu)} show={showIconsMenu}> + { + hideIconsMenu(!showIconsMenu) + }} + icon={'fas fa-bars'} + > + + + + + ) : null} + + +
    : { currentWorkspace === name ? ✓ { name } : { name } } } - - )) - } - { ((global.fs.browser.workspaces.length <= 0) || currentWorkspace === NO_WORKSPACE) && { switchWorkspace(NO_WORKSPACE) }}>{ NO_WORKSPACE } } - - -
    -
    -
    -
    { toggleDropdown(false) }}> + + )) + } + { ((global.fs.browser.workspaces.length <= 0) || currentWorkspace === NO_WORKSPACE) && { switchWorkspace(NO_WORKSPACE) }}>{ NO_WORKSPACE } } + + +
    + +
    +
    { toggleDropdown(false) }}>
    - { (global.fs.browser.isRequestingWorkspace || global.fs.browser.isRequestingCloning) &&
    } - { !(global.fs.browser.isRequestingWorkspace || global.fs.browser.isRequestingCloning) && + { (global.fs.browser.isRequestingWorkspace || global.fs.browser.isRequestingCloning) &&
    } + { !(global.fs.browser.isRequestingWorkspace || global.fs.browser.isRequestingCloning) && (global.fs.mode === 'browser') && (currentWorkspace !== NO_WORKSPACE) &&
    + />
    - } - { global.fs.localhost.isRequestingLocalhost &&
    } - { (global.fs.mode === 'localhost' && global.fs.localhost.isSuccessfulLocalhost) && + } + { global.fs.localhost.isRequestingLocalhost &&
    } + { (global.fs.mode === 'localhost' && global.fs.localhost.isSuccessfulLocalhost) &&
    - } + }
    - - { - selectedWorkspace && + + { + selectedWorkspace &&
    GIT
    @@ -918,18 +918,18 @@ export function Workspace () {
    { (currentBranch === branch.name) && !branch.remote ? - { branch.name } : - { branch.remote ? `${branch.remote}/${branch.name}` : branch.name } + { branch.name } : + { branch.remote ? `${branch.remote}/${branch.name}` : branch.name } }
    ) }) : - -
    - : { branchFilter } from '{currentBranch}' -
    -
    + +
    + : { branchFilter } from '{currentBranch}' +
    +
    }
    { @@ -941,33 +941,33 @@ export function Workspace () {
    - } - {state.showContextMenu && 1 ? state.actions.filter(item => item.multiselect) : state.actions.filter(item => !item.multiselect)} - hideContextMenu={hideContextMenu} - createNewFile={handleNewFileInput} - createNewFolder={handleNewFolderInput} - deletePath={deletePath} - renamePath={editModeOn} - runScript={runScript} - copy={handleCopyClick} - paste={handlePasteClick} - copyFileName={handleCopyFileNameClick} - copyPath={handleCopyFilePathClick} - emit={emitContextMenuEvent} - pageX={state.focusContext.x} - pageY={state.focusContext.y} - path={state.focusContext.element} - type={state.focusContext.type} - focus={global.fs.focusElement} - pushChangesToGist={pushChangesToGist} - publishFolderToGist={publishFolderToGist} - publishFileToGist={publishFileToGist} - uploadFile={uploadFile} - downloadPath={downloadPath} - - /> - } + } + {state.showContextMenu && 1 ? state.actions.filter(item => item.multiselect) : state.actions.filter(item => !item.multiselect)} + hideContextMenu={hideContextMenu} + createNewFile={handleNewFileInput} + createNewFolder={handleNewFolderInput} + deletePath={deletePath} + renamePath={editModeOn} + runScript={runScript} + copy={handleCopyClick} + paste={handlePasteClick} + copyFileName={handleCopyFileNameClick} + copyPath={handleCopyFilePathClick} + emit={emitContextMenuEvent} + pageX={state.focusContext.x} + pageY={state.focusContext.y} + path={state.focusContext.element} + type={state.focusContext.type} + focus={global.fs.focusElement} + pushChangesToGist={pushChangesToGist} + publishFolderToGist={publishFolderToGist} + publishFileToGist={publishFileToGist} + uploadFile={uploadFile} + downloadPath={downloadPath} + + /> + } ) } diff --git a/libs/remix-ui/workspace/src/lib/utils/gitStatusFilter.ts b/libs/remix-ui/workspace/src/lib/utils/gitStatusFilter.ts index 1b95e12538..ece2c219de 100644 --- a/libs/remix-ui/workspace/src/lib/utils/gitStatusFilter.ts +++ b/libs/remix-ui/workspace/src/lib/utils/gitStatusFilter.ts @@ -1,8 +1,8 @@ const FILE = 0, HEAD = 1, WORKDIR = 2, STAGE = 3 export const getUncommittedFiles = (statusMatrix: Array>) => { - statusMatrix = statusMatrix.filter(row => (row[HEAD] !== row[WORKDIR]) || (row[HEAD] !== row[STAGE])) - const uncommitedFiles = statusMatrix.map(row => row[FILE]) + statusMatrix = statusMatrix.filter(row => (row[HEAD] !== row[WORKDIR]) || (row[HEAD] !== row[STAGE])) + const uncommitedFiles = statusMatrix.map(row => row[FILE]) - return uncommitedFiles + return uncommitedFiles } \ No newline at end of file diff --git a/libs/remix-url-resolver/src/resolve.ts b/libs/remix-url-resolver/src/resolve.ts index d0b08eeaf7..3b38c3a0ed 100644 --- a/libs/remix-url-resolver/src/resolve.ts +++ b/libs/remix-url-resolver/src/resolve.ts @@ -138,68 +138,68 @@ export class RemixURLResolver { */ async handleNpmImport(url: string): Promise { - if (!url) throw new Error('url is empty') - const isVersionned = semverRegex().exec(url.replace(/@/g, '@ ').replace(/\//g, ' /')) - if (this.getDependencies && !isVersionned) { - try { - const { deps, yarnLock, packageLock } = await this.getDependencies() - let matchLength = 0 - let pkg - if (deps) { - Object.keys(deps).map((dep) => { - const reg = new RegExp(dep + '/', 'g') - const match = url.match(reg) - if (match && match.length > 0 && matchLength < match[0].length) { - matchLength = match[0].length - pkg = dep - } - }) - if (pkg) { - let version - if (yarnLock) { - // yarn.lock - const regex = new RegExp(`"${pkg}@(.*)"`, 'g') - const yarnVersion = regex.exec(yarnLock) - if (yarnVersion && yarnVersion.length > 1) { - version = yarnVersion[1] - } - } - if (!version && packageLock && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { - // package-lock.json - version = packageLock['dependencies'][pkg]['version'] - } - if (!version) { - // package.json - version = deps[pkg] - } - if (version) { - const versionSemver = semver.minVersion(version) - url = url.replace(pkg, `${pkg}@${versionSemver.version}`) + if (!url) throw new Error('url is empty') + const isVersionned = semverRegex().exec(url.replace(/@/g, '@ ').replace(/\//g, ' /')) + if (this.getDependencies && !isVersionned) { + try { + const { deps, yarnLock, packageLock } = await this.getDependencies() + let matchLength = 0 + let pkg + if (deps) { + Object.keys(deps).map((dep) => { + const reg = new RegExp(dep + '/', 'g') + const match = url.match(reg) + if (match && match.length > 0 && matchLength < match[0].length) { + matchLength = match[0].length + pkg = dep + } + }) + if (pkg) { + let version + if (yarnLock) { + // yarn.lock + const regex = new RegExp(`"${pkg}@(.*)"`, 'g') + const yarnVersion = regex.exec(yarnLock) + if (yarnVersion && yarnVersion.length > 1) { + version = yarnVersion[1] } } + if (!version && packageLock && packageLock['dependencies'] && packageLock['dependencies'][pkg] && packageLock['dependencies'][pkg]['version']) { + // package-lock.json + version = packageLock['dependencies'][pkg]['version'] + } + if (!version) { + // package.json + version = deps[pkg] + } + if (version) { + const versionSemver = semver.minVersion(version) + url = url.replace(pkg, `${pkg}@${versionSemver.version}`) + } } - } catch (e) { - console.log(e) } + } catch (e) { + console.log(e) } + } - const npm_urls = ["https://cdn.jsdelivr.net/npm/", "https://unpkg.com/"] - process && process.env && process.env['NPM_URL'] && npm_urls.unshift(process.env['NPM_URL']) - let content = null - // get response from all urls - for (let i = 0; i < npm_urls.length; i++) { - try { - const req = npm_urls[i] + url - const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) - content = response.data - break - } catch (e) { - // try next url - } - + const npm_urls = ["https://cdn.jsdelivr.net/npm/", "https://unpkg.com/"] + process && process.env && process.env['NPM_URL'] && npm_urls.unshift(process.env['NPM_URL']) + let content = null + // get response from all urls + for (let i = 0; i < npm_urls.length; i++) { + try { + const req = npm_urls[i] + url + const response: AxiosResponse = await axios.get(req, { transformResponse: [] }) + content = response.data + break + } catch (e) { + // try next url } - if (!content) throw new Error('Unable to load ' + url) - return { content, cleanUrl: url } + + } + if (!content) throw new Error('Unable to load ' + url) + return { content, cleanUrl: url } } @@ -261,5 +261,5 @@ export class RemixURLResolver { // see npm semver-regex function semverRegex() { - return /(?<=^v?|\sv?)(?:(?:0|[1-9]\d{0,9}?)\.){2}(?:0|[1-9]\d{0,9})(?:-(?:--+)?(?:0|[1-9]\d*|\d*[a-z]+\d*)){0,100}(?=$| |\+|\.)(?:(?<=-\S+)(?:\.(?:--?|[\da-z-]*[a-z-]\d*|0|[1-9]\d*)){1,100}?)?(?!\.)(?:\+(?:[\da-z]\.?-?){1,100}?(?!\w))?(?!\+)/gi; + return /(?<=^v?|\sv?)(?:(?:0|[1-9]\d{0,9}?)\.){2}(?:0|[1-9]\d{0,9})(?:-(?:--+)?(?:0|[1-9]\d*|\d*[a-z]+\d*)){0,100}(?=$| |\+|\.)(?:(?<=-\S+)(?:\.(?:--?|[\da-z-]*[a-z-]\d*|0|[1-9]\d*)){1,100}?)?(?!\.)(?:\+(?:[\da-z]\.?-?){1,100}?(?!\w))?(?!\+)/gi; } diff --git a/libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts b/libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts index e875db9a43..2753f9bcd0 100644 --- a/libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts +++ b/libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts @@ -9,21 +9,21 @@ import { ethers } from 'ethers' */ export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - // 'web3Provider' is a remix global variable object + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + // 'web3Provider' is a remix global variable object - const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) - const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) + const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) - // The contract is NOT deployed yet; we must wait until it is mined - await contract.deployed() - return contract + // The contract is NOT deployed yet; we must wait until it is mined + await contract.deployed() + return contract } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/script-templates/contract-deployer/create2-factory-deploy.ts b/libs/remix-ws-templates/src/script-templates/contract-deployer/create2-factory-deploy.ts index 13b6d690a7..269dabb693 100644 --- a/libs/remix-ws-templates/src/script-templates/contract-deployer/create2-factory-deploy.ts +++ b/libs/remix-ws-templates/src/script-templates/contract-deployer/create2-factory-deploy.ts @@ -15,244 +15,244 @@ export const CREATE2_DEPLOYER_ADDRESS = */ export const deploy = async (contractName: string, args: Array, salt: string, accountIndex?: number): Promise => { - console.log(`deploying ${contractName}`) + console.log(`deploying ${contractName}`) - const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) - const factory = new ethers.Contract(CREATE2_DEPLOYER_ADDRESS, contractDeployerAbi, signer); + const factory = new ethers.Contract(CREATE2_DEPLOYER_ADDRESS, contractDeployerAbi, signer); - const contract = await ethers.getContractFactory(contractName) - const initCode = contract.getDeployTransaction(args) + const contract = await ethers.getContractFactory(contractName) + const initCode = contract.getDeployTransaction(args) - const codeHash = ethers.utils.keccak256(initCode.data) - const saltBytes = ethers.utils.id(salt) - const deployedAddress = await factory.computeAddress(saltBytes, codeHash) - try { - const tx = await factory.deploy(0, saltBytes, initCode.data) - await tx.wait() - return deployedAddress - } catch (e) { - console.error(e.message) - console.error(`Please check a contract isn't already deployed at that address`) - throw e - } + const codeHash = ethers.utils.keccak256(initCode.data) + const saltBytes = ethers.utils.id(salt) + const deployedAddress = await factory.computeAddress(saltBytes, codeHash) + try { + const tx = await factory.deploy(0, saltBytes, initCode.data) + await tx.wait() + return deployedAddress + } catch (e) { + console.error(e.message) + console.error(`Please check a contract isn't already deployed at that address`) + throw e + } } export const contractDeployerAbi = [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "codeHash", - "type": "bytes32" - } - ], - "name": "computeAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "codeHash", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "deployer", - "type": "address" - } - ], - "name": "computeAddressWithDeployer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "code", - "type": "bytes" - } - ], - "name": "deploy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - } - ], - "name": "deployERC1820Implementer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "payoutAddress", - "type": "address" - } - ], - "name": "killCreate2Deployer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "codeHash", + "type": "bytes32" + } + ], + "name": "computeAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "codeHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "deployer", + "type": "address" + } + ], + "name": "computeAddressWithDeployer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "code", + "type": "bytes" + } + ], + "name": "deploy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + } + ], + "name": "deployERC1820Implementer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "payoutAddress", + "type": "address" + } + ], + "name": "killCreate2Deployer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } ] \ No newline at end of file diff --git a/libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts b/libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts index 55c9694392..93682c8002 100644 --- a/libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts +++ b/libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts @@ -1,15 +1,15 @@ export const contractDeployerScripts = async (plugin) => { - await plugin.call('fileManager', 'writeFile', - 'scripts/contract-deployer/create2-factory-deploy.ts' , - // @ts-ignore - (await import('!!raw-loader!./create2-factory-deploy.ts')).default) + await plugin.call('fileManager', 'writeFile', + 'scripts/contract-deployer/create2-factory-deploy.ts' , + // @ts-ignore + (await import('!!raw-loader!./create2-factory-deploy.ts')).default) - await plugin.call('fileManager', 'open', 'scripts/contract-deployer/create2-factory-deploy.ts') + await plugin.call('fileManager', 'open', 'scripts/contract-deployer/create2-factory-deploy.ts') - await plugin.call('fileManager', 'writeFile', - 'scripts/contract-deployer/basic-contract-deploy.ts' , - // @ts-ignore - (await import('!!raw-loader!./basic-contract-deploy.ts')).default) + await plugin.call('fileManager', 'writeFile', + 'scripts/contract-deployer/basic-contract-deploy.ts' , + // @ts-ignore + (await import('!!raw-loader!./basic-contract-deploy.ts')).default) - await plugin.call('fileManager', 'open', 'scripts/contract-deployer/basic-contract-deploy.ts') + await plugin.call('fileManager', 'open', 'scripts/contract-deployer/basic-contract-deploy.ts') } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/script-templates/etherscan/index.ts b/libs/remix-ws-templates/src/script-templates/etherscan/index.ts index 01a37e5d98..3abbe27dd6 100644 --- a/libs/remix-ws-templates/src/script-templates/etherscan/index.ts +++ b/libs/remix-ws-templates/src/script-templates/etherscan/index.ts @@ -1,15 +1,15 @@ export const etherscanScripts = async (plugin) => { - await plugin.call('fileManager', 'writeFile', - 'scripts/etherscan/verifyScript.ts' , - // @ts-ignore - (await import('!!raw-loader!./verifyScript.ts')).default) + await plugin.call('fileManager', 'writeFile', + 'scripts/etherscan/verifyScript.ts' , + // @ts-ignore + (await import('!!raw-loader!./verifyScript.ts')).default) - await plugin.call('fileManager', 'open', 'scripts/etherscan/verifyScript.ts') + await plugin.call('fileManager', 'open', 'scripts/etherscan/verifyScript.ts') - await plugin.call('fileManager', 'writeFile', - 'scripts/etherscan/receiptGuidScript.ts' , - // @ts-ignore - (await import('!!raw-loader!./receiptGuidScript.ts')).default) + await plugin.call('fileManager', 'writeFile', + 'scripts/etherscan/receiptGuidScript.ts' , + // @ts-ignore + (await import('!!raw-loader!./receiptGuidScript.ts')).default) - await plugin.call('fileManager', 'open', 'scripts/etherscan/receiptGuidScript.ts') + await plugin.call('fileManager', 'open', 'scripts/etherscan/receiptGuidScript.ts') } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts b/libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts index 5d8dca8063..cc96dc14e6 100644 --- a/libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts +++ b/libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts @@ -5,5 +5,5 @@ * @returns {{ status, message, succeed }} receiptStatus */ export const receiptStatus = async (apikey: string, guid: string, isProxyContract?: boolean) => { - return await remix.call('etherscan' as any, 'receiptStatus', guid, apikey, isProxyContract) + return await remix.call('etherscan' as any, 'receiptStatus', guid, apikey, isProxyContract) } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts b/libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts index 4c76d0ebf4..2126bca90b 100644 --- a/libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts +++ b/libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts @@ -10,8 +10,8 @@ * @returns {{ guid, status, message, succeed }} verification result */ export const verify = async (apikey: string, contractAddress: string, contractArguments: string, contractName: string, contractFile: string, chainRef?: number | string, isProxyContract?: boolean, expectedImplAddress?: string) => { - const compilationResultParam = await remix.call('compilerArtefacts' as any, 'getCompilerAbstract', contractFile) - console.log('verifying.. ' + contractName) - // update apiKey and chainRef to verify contract on multiple networks - return await remix.call('etherscan' as any, 'verify', apikey, contractAddress, contractArguments, contractName, compilationResultParam, chainRef, isProxyContract, expectedImplAddress) + const compilationResultParam = await remix.call('compilerArtefacts' as any, 'getCompilerAbstract', contractFile) + console.log('verifying.. ' + contractName) + // update apiKey and chainRef to verify contract on multiple networks + return await remix.call('etherscan' as any, 'verify', apikey, contractAddress, contractArguments, contractName, compilationResultParam, chainRef, isProxyContract, expectedImplAddress) } diff --git a/libs/remix-ws-templates/src/templates/blank/index.ts b/libs/remix-ws-templates/src/templates/blank/index.ts index c1733fd71d..78ac913879 100644 --- a/libs/remix-ws-templates/src/templates/blank/index.ts +++ b/libs/remix-ws-templates/src/templates/blank/index.ts @@ -1,6 +1,6 @@ export default async () => { - return { - // @ts-ignore - '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default - } + return { + // @ts-ignore + '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default + } } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/index.ts b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/index.ts index f7a677cf61..98b3c953ee 100644 --- a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/index.ts +++ b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/index.ts @@ -1,16 +1,16 @@ export default async () => { - return { - // @ts-ignore - 'contracts/MultisigWallet.sol': (await import('raw-loader!./contracts/MultisigWallet.sol')).default, - // @ts-ignore - 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, - // @ts-ignore - 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, - // @ts-ignore - 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, - // @ts-ignore - 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, - // @ts-ignore - '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default - } + return { + // @ts-ignore + 'contracts/MultisigWallet.sol': (await import('raw-loader!./contracts/MultisigWallet.sol')).default, + // @ts-ignore + 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, + // @ts-ignore + 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, + // @ts-ignore + 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, + // @ts-ignore + 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, + // @ts-ignore + '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default + } } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_ethers.ts b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_ethers.ts index e8b1660a3c..b825f91a76 100644 --- a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_ethers.ts +++ b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_ethers.ts @@ -1,10 +1,10 @@ import { deploy } from './ethers-lib' (async () => { - try { - const result = await deploy('MultisigWallet', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } - })() \ No newline at end of file + try { + const result = await deploy('MultisigWallet', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } +})() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_web3.ts b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_web3.ts index ced30d71ac..744bd81251 100644 --- a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_web3.ts +++ b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_web3.ts @@ -1,10 +1,10 @@ import { deploy } from './web3-lib' (async () => { - try { - const result = await deploy('MultisigWallet', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } + try { + const result = await deploy('MultisigWallet', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } })() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts index e875db9a43..2753f9bcd0 100644 --- a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts @@ -9,21 +9,21 @@ import { ethers } from 'ethers' */ export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - // 'web3Provider' is a remix global variable object + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + // 'web3Provider' is a remix global variable object - const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) - const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) + const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) - // The contract is NOT deployed yet; we must wait until it is mined - await contract.deployed() - return contract + // The contract is NOT deployed yet; we must wait until it is mined + await contract.deployed() + return contract } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts index cbffde3aac..c57e501039 100644 --- a/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts @@ -11,26 +11,26 @@ import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' */ export const deploy = async (contractName: string, args: Array, from?: string, gas?: number): Promise => { - const web3 = new Web3(web3Provider) - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` + const web3 = new Web3(web3Provider) + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - const accounts = await web3.eth.getAccounts() + const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) - const contractSend: ContractSendMethod = contract.deploy({ - data: metadata.data.bytecode.object, - arguments: args - }) + const contractSend: ContractSendMethod = contract.deploy({ + data: metadata.data.bytecode.object, + arguments: args + }) - const newContractInstance = await contractSend.send({ - from: from || accounts[0], - gas: gas || 1500000 - }) - return newContractInstance.options + const newContractInstance = await contractSend.send({ + from: from || accounts[0], + gas: gas || 1500000 + }) + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc1155/index.ts b/libs/remix-ws-templates/src/templates/ozerc1155/index.ts index 83368641f0..2acdbe5539 100644 --- a/libs/remix-ws-templates/src/templates/ozerc1155/index.ts +++ b/libs/remix-ws-templates/src/templates/ozerc1155/index.ts @@ -1,28 +1,28 @@ import { erc1155 } from '@openzeppelin/wizard'; export default async (opts) => { - if (opts) { - erc1155.defaults.mintable = opts.mintable - erc1155.defaults.burnable = opts.burnable - erc1155.defaults.pausable = opts.pausable - } + if (opts) { + erc1155.defaults.mintable = opts.mintable + erc1155.defaults.burnable = opts.burnable + erc1155.defaults.pausable = opts.pausable + } - const filesObj = { - 'contracts/MyToken.sol': erc1155.print({ ...erc1155.defaults, upgradeable: opts && opts.upgradeable ? opts.upgradeable : false }), - // @ts-ignore - 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, - // @ts-ignore - 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, - // @ts-ignore - 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, - // @ts-ignore - 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, - // @ts-ignore - '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default - } - // If no options is selected, opts.upgradeable will be undefined - // We do not show test file for upgradeable contract + const filesObj = { + 'contracts/MyToken.sol': erc1155.print({ ...erc1155.defaults, upgradeable: opts && opts.upgradeable ? opts.upgradeable : false }), // @ts-ignore - if (!opts || opts.upgradeable === undefined || !opts.upgradeable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default - return filesObj + 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, + // @ts-ignore + 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, + // @ts-ignore + 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, + // @ts-ignore + 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, + // @ts-ignore + '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default + } + // If no options is selected, opts.upgradeable will be undefined + // We do not show test file for upgradeable contract + // @ts-ignore + if (!opts || opts.upgradeable === undefined || !opts.upgradeable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default + return filesObj } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_ethers.ts b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_ethers.ts index a6c8cf30e5..63533fd6f5 100644 --- a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_ethers.ts +++ b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_ethers.ts @@ -1,10 +1,10 @@ import { deploy } from './ethers-lib' (async () => { - try { - const result = await deploy('MyToken', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } - })() \ No newline at end of file + try { + const result = await deploy('MyToken', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } +})() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_web3.ts b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_web3.ts index b22b119246..17aaa6972e 100644 --- a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_web3.ts +++ b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_web3.ts @@ -1,10 +1,10 @@ import { deploy } from './web3-lib' (async () => { - try { - const result = await deploy('MyToken', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } + try { + const result = await deploy('MyToken', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } })() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts index e875db9a43..2753f9bcd0 100644 --- a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts @@ -9,21 +9,21 @@ import { ethers } from 'ethers' */ export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - // 'web3Provider' is a remix global variable object + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + // 'web3Provider' is a remix global variable object - const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) - const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) + const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) - // The contract is NOT deployed yet; we must wait until it is mined - await contract.deployed() - return contract + // The contract is NOT deployed yet; we must wait until it is mined + await contract.deployed() + return contract } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts index e6d9e09f35..921774572a 100644 --- a/libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts @@ -11,26 +11,26 @@ import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' */ export const deploy = async (contractName: string, args: Array, from?: string, gas?: number): Promise => { - const web3 = new Web3(web3Provider) - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` + const web3 = new Web3(web3Provider) + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - const accounts = await web3.eth.getAccounts() + const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) - const contractSend: ContractSendMethod = contract.deploy({ - data: metadata.data.bytecode.object, - arguments: args - }) + const contractSend: ContractSendMethod = contract.deploy({ + data: metadata.data.bytecode.object, + arguments: args + }) - const newContractInstance = await contractSend.send({ - from: from || accounts[0], - gas: gas || 3600000 - }) - return newContractInstance.options + const newContractInstance = await contractSend.send({ + from: from || accounts[0], + gas: gas || 3600000 + }) + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc20/index.ts b/libs/remix-ws-templates/src/templates/ozerc20/index.ts index 6befe1f423..9dcb4f02f9 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/index.ts +++ b/libs/remix-ws-templates/src/templates/ozerc20/index.ts @@ -1,35 +1,35 @@ import { erc20 } from '@openzeppelin/wizard'; export default async (opts) => { - if (opts) { - erc20.defaults.mintable = opts.mintable - erc20.defaults.burnable = opts.burnable - erc20.defaults.pausable = opts.pausable - } + if (opts) { + erc20.defaults.mintable = opts.mintable + erc20.defaults.burnable = opts.burnable + erc20.defaults.pausable = opts.pausable + } - const filesObj = { - 'contracts/MyToken.sol': erc20.print({ ...erc20.defaults, upgradeable: opts && opts.upgradeable ? opts.upgradeable : false }), - // @ts-ignore - 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, - // @ts-ignore - 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, - // @ts-ignore - 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, - // @ts-ignore - 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, - // @ts-ignore - '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default - } + const filesObj = { + 'contracts/MyToken.sol': erc20.print({ ...erc20.defaults, upgradeable: opts && opts.upgradeable ? opts.upgradeable : false }), + // @ts-ignore + 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, + // @ts-ignore + 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, + // @ts-ignore + 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, + // @ts-ignore + 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, + // @ts-ignore + '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default + } - // If no options is selected, opts.upgradeable will be undefined - // We do not show test file for upgradeable contract + // If no options is selected, opts.upgradeable will be undefined + // We do not show test file for upgradeable contract - if (!opts || opts.upgradeable === undefined || !opts.upgradeable) { - // @ts-ignore - if (erc20.defaults.mintable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_mintable_test.sol')).default - // @ts-ignore - else filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default + if (!opts || opts.upgradeable === undefined || !opts.upgradeable) { + // @ts-ignore + if (erc20.defaults.mintable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_mintable_test.sol')).default + // @ts-ignore + else filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default - } - return filesObj + } + return filesObj } diff --git a/libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_ethers.ts b/libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_ethers.ts index a6c8cf30e5..63533fd6f5 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_ethers.ts +++ b/libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_ethers.ts @@ -1,10 +1,10 @@ import { deploy } from './ethers-lib' (async () => { - try { - const result = await deploy('MyToken', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } - })() \ No newline at end of file + try { + const result = await deploy('MyToken', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } +})() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_web3.ts b/libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_web3.ts index b22b119246..17aaa6972e 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_web3.ts +++ b/libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_web3.ts @@ -1,10 +1,10 @@ import { deploy } from './web3-lib' (async () => { - try { - const result = await deploy('MyToken', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } + try { + const result = await deploy('MyToken', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } })() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts index e875db9a43..2753f9bcd0 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts @@ -9,21 +9,21 @@ import { ethers } from 'ethers' */ export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - // 'web3Provider' is a remix global variable object + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + // 'web3Provider' is a remix global variable object - const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) - const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) + const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) - // The contract is NOT deployed yet; we must wait until it is mined - await contract.deployed() - return contract + // The contract is NOT deployed yet; we must wait until it is mined + await contract.deployed() + return contract } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts index cbffde3aac..c57e501039 100644 --- a/libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts @@ -11,26 +11,26 @@ import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' */ export const deploy = async (contractName: string, args: Array, from?: string, gas?: number): Promise => { - const web3 = new Web3(web3Provider) - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` + const web3 = new Web3(web3Provider) + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - const accounts = await web3.eth.getAccounts() + const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) - const contractSend: ContractSendMethod = contract.deploy({ - data: metadata.data.bytecode.object, - arguments: args - }) + const contractSend: ContractSendMethod = contract.deploy({ + data: metadata.data.bytecode.object, + arguments: args + }) - const newContractInstance = await contractSend.send({ - from: from || accounts[0], - gas: gas || 1500000 - }) - return newContractInstance.options + const newContractInstance = await contractSend.send({ + from: from || accounts[0], + gas: gas || 1500000 + }) + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc721/index.ts b/libs/remix-ws-templates/src/templates/ozerc721/index.ts index d0f3f6fee0..c7bb561e06 100644 --- a/libs/remix-ws-templates/src/templates/ozerc721/index.ts +++ b/libs/remix-ws-templates/src/templates/ozerc721/index.ts @@ -1,29 +1,29 @@ import { erc721 } from '@openzeppelin/wizard'; export default async (opts) => { - if (opts) { - erc721.defaults.mintable = opts.mintable - erc721.defaults.burnable = opts.burnable - erc721.defaults.pausable = opts.pausable - } + if (opts) { + erc721.defaults.mintable = opts.mintable + erc721.defaults.burnable = opts.burnable + erc721.defaults.pausable = opts.pausable + } - const filesObj = { - 'contracts/MyToken.sol': erc721.print({ ...erc721.defaults, upgradeable: opts && opts.upgradeable ? opts.upgradeable : false }), - // @ts-ignore - 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, - // @ts-ignore - 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, - // @ts-ignore - 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, - // @ts-ignore - 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, - // @ts-ignore - '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default - } - - // If no options is selected, opts.upgradeable will be undefined - // We do not show test file for upgradeable contract + const filesObj = { + 'contracts/MyToken.sol': erc721.print({ ...erc721.defaults, upgradeable: opts && opts.upgradeable ? opts.upgradeable : false }), + // @ts-ignore + 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, + // @ts-ignore + 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, // @ts-ignore - if (!opts || opts.upgradeable === undefined || !opts.upgradeable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default - return filesObj + 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, + // @ts-ignore + 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, + // @ts-ignore + '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default + } + + // If no options is selected, opts.upgradeable will be undefined + // We do not show test file for upgradeable contract + // @ts-ignore + if (!opts || opts.upgradeable === undefined || !opts.upgradeable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default + return filesObj } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_ethers.ts b/libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_ethers.ts index a6c8cf30e5..63533fd6f5 100644 --- a/libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_ethers.ts +++ b/libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_ethers.ts @@ -1,10 +1,10 @@ import { deploy } from './ethers-lib' (async () => { - try { - const result = await deploy('MyToken', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } - })() \ No newline at end of file + try { + const result = await deploy('MyToken', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } +})() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_web3.ts b/libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_web3.ts index b22b119246..17aaa6972e 100644 --- a/libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_web3.ts +++ b/libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_web3.ts @@ -1,10 +1,10 @@ import { deploy } from './web3-lib' (async () => { - try { - const result = await deploy('MyToken', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } + try { + const result = await deploy('MyToken', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } })() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts index e875db9a43..2753f9bcd0 100644 --- a/libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts @@ -9,21 +9,21 @@ import { ethers } from 'ethers' */ export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - // 'web3Provider' is a remix global variable object + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + // 'web3Provider' is a remix global variable object - const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) - const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) + const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) - // The contract is NOT deployed yet; we must wait until it is mined - await contract.deployed() - return contract + // The contract is NOT deployed yet; we must wait until it is mined + await contract.deployed() + return contract } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts index cbffde3aac..c57e501039 100644 --- a/libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts @@ -11,26 +11,26 @@ import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' */ export const deploy = async (contractName: string, args: Array, from?: string, gas?: number): Promise => { - const web3 = new Web3(web3Provider) - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` + const web3 = new Web3(web3Provider) + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - const accounts = await web3.eth.getAccounts() + const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) - const contractSend: ContractSendMethod = contract.deploy({ - data: metadata.data.bytecode.object, - arguments: args - }) + const contractSend: ContractSendMethod = contract.deploy({ + data: metadata.data.bytecode.object, + arguments: args + }) - const newContractInstance = await contractSend.send({ - from: from || accounts[0], - gas: gas || 1500000 - }) - return newContractInstance.options + const newContractInstance = await contractSend.send({ + from: from || accounts[0], + gas: gas || 1500000 + }) + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/remixDefault/index.ts b/libs/remix-ws-templates/src/templates/remixDefault/index.ts index 951ff8e5a1..a4a1460cdc 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/index.ts +++ b/libs/remix-ws-templates/src/templates/remixDefault/index.ts @@ -1,26 +1,26 @@ export default async () => { - return { - // @ts-ignore - 'contracts/1_Storage.sol': (await import('raw-loader!./contracts/1_Storage.sol')).default, - // @ts-ignore - 'contracts/2_Owner.sol': (await import('raw-loader!./contracts/2_Owner.sol')).default, - // @ts-ignore - 'contracts/3_Ballot.sol': (await import('raw-loader!./contracts/3_Ballot.sol')).default, - // @ts-ignore - 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, - // @ts-ignore - 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, - // @ts-ignore - 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, - // @ts-ignore - 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, - // @ts-ignore - 'tests/Ballot_test.sol': (await import('raw-loader!./tests/Ballot_test.sol')).default, - // @ts-ignore - 'tests/storage.test.js': (await import('!!raw-loader!./tests/storage.test.js')).default, - // @ts-ignore - 'README.txt': (await import('raw-loader!./README.txt')).default, - // @ts-ignore - '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default, - } + return { + // @ts-ignore + 'contracts/1_Storage.sol': (await import('raw-loader!./contracts/1_Storage.sol')).default, + // @ts-ignore + 'contracts/2_Owner.sol': (await import('raw-loader!./contracts/2_Owner.sol')).default, + // @ts-ignore + 'contracts/3_Ballot.sol': (await import('raw-loader!./contracts/3_Ballot.sol')).default, + // @ts-ignore + 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, + // @ts-ignore + 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, + // @ts-ignore + 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, + // @ts-ignore + 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, + // @ts-ignore + 'tests/Ballot_test.sol': (await import('raw-loader!./tests/Ballot_test.sol')).default, + // @ts-ignore + 'tests/storage.test.js': (await import('!!raw-loader!./tests/storage.test.js')).default, + // @ts-ignore + 'README.txt': (await import('raw-loader!./README.txt')).default, + // @ts-ignore + '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default, + } } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_ethers.ts b/libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_ethers.ts index d7ec2105da..513d496d76 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_ethers.ts +++ b/libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_ethers.ts @@ -5,10 +5,10 @@ import { deploy } from './ethers-lib' (async () => { - try { - const result = await deploy('Storage', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } - })() \ No newline at end of file + try { + const result = await deploy('Storage', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } +})() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_web3.ts b/libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_web3.ts index 57e1a73516..dca0bbcfdd 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_web3.ts +++ b/libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_web3.ts @@ -5,10 +5,10 @@ import { deploy } from './web3-lib' (async () => { - try { - const result = await deploy('Storage', []) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } + try { + const result = await deploy('Storage', []) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } })() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts index e875db9a43..2753f9bcd0 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts @@ -9,21 +9,21 @@ import { ethers } from 'ethers' */ export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - // 'web3Provider' is a remix global variable object + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + // 'web3Provider' is a remix global variable object - const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) - const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) + const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) - // The contract is NOT deployed yet; we must wait until it is mined - await contract.deployed() - return contract + // The contract is NOT deployed yet; we must wait until it is mined + await contract.deployed() + return contract } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts index cbffde3aac..c57e501039 100644 --- a/libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts @@ -11,26 +11,26 @@ import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' */ export const deploy = async (contractName: string, args: Array, from?: string, gas?: number): Promise => { - const web3 = new Web3(web3Provider) - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` + const web3 = new Web3(web3Provider) + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - const accounts = await web3.eth.getAccounts() + const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) - const contractSend: ContractSendMethod = contract.deploy({ - data: metadata.data.bytecode.object, - arguments: args - }) + const contractSend: ContractSendMethod = contract.deploy({ + data: metadata.data.bytecode.object, + arguments: args + }) - const newContractInstance = await contractSend.send({ - from: from || accounts[0], - gas: gas || 1500000 - }) - return newContractInstance.options + const newContractInstance = await contractSend.send({ + from: from || accounts[0], + gas: gas || 1500000 + }) + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/zeroxErc20/index.ts b/libs/remix-ws-templates/src/templates/zeroxErc20/index.ts index 311262db91..f83c80be62 100644 --- a/libs/remix-ws-templates/src/templates/zeroxErc20/index.ts +++ b/libs/remix-ws-templates/src/templates/zeroxErc20/index.ts @@ -1,18 +1,18 @@ export default async () => { - return { - // @ts-ignore - 'contracts/SampleERC20.sol': (await import('raw-loader!./contracts/SampleERC20.sol')).default, - // @ts-ignore - 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, - // @ts-ignore - 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, - // @ts-ignore - 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, - // @ts-ignore - 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, - // @ts-ignore - 'tests/SampleERC20_test.sol': (await import('raw-loader!./tests/SampleERC20_test.sol')).default, - // @ts-ignore - '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default - } + return { + // @ts-ignore + 'contracts/SampleERC20.sol': (await import('raw-loader!./contracts/SampleERC20.sol')).default, + // @ts-ignore + 'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, + // @ts-ignore + 'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, + // @ts-ignore + 'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, + // @ts-ignore + 'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default, + // @ts-ignore + 'tests/SampleERC20_test.sol': (await import('raw-loader!./tests/SampleERC20_test.sol')).default, + // @ts-ignore + '.prettierrc.json': (await import('raw-loader!./.prettierrc')).default + } } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_ethers.ts b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_ethers.ts index ad2fd4597a..1aadc32123 100644 --- a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_ethers.ts +++ b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_ethers.ts @@ -1,10 +1,10 @@ import { deploy } from './ethers-lib' (async () => { - try { - const result = await deploy('SampleERC20', ["TestToken", "TST", 18, 1000]) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } - })() \ No newline at end of file + try { + const result = await deploy('SampleERC20', ["TestToken", "TST", 18, 1000]) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } +})() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_web3.ts b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_web3.ts index af6af1c8a4..0eecd6d88f 100644 --- a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_web3.ts +++ b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_web3.ts @@ -1,10 +1,10 @@ import { deploy } from './web3-lib' (async () => { - try { - const result = await deploy('SampleERC20', ["TestToken", "TST", 18, 1000]) - console.log(`address: ${result.address}`) - } catch (e) { - console.log(e.message) - } + try { + const result = await deploy('SampleERC20', ["TestToken", "TST", 18, 1000]) + console.log(`address: ${result.address}`) + } catch (e) { + console.log(e.message) + } })() \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts index e875db9a43..2753f9bcd0 100644 --- a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts +++ b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts @@ -9,21 +9,21 @@ import { ethers } from 'ethers' */ export const deploy = async (contractName: string, args: Array, accountIndex?: number): Promise => { - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - // 'web3Provider' is a remix global variable object + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + // 'web3Provider' is a remix global variable object - const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) + const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) - const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) + const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) - const contract = await factory.deploy(...args) + const contract = await factory.deploy(...args) - // The contract is NOT deployed yet; we must wait until it is mined - await contract.deployed() - return contract + // The contract is NOT deployed yet; we must wait until it is mined + await contract.deployed() + return contract } \ No newline at end of file diff --git a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts index cbffde3aac..c57e501039 100644 --- a/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts +++ b/libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts @@ -11,26 +11,26 @@ import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' */ export const deploy = async (contractName: string, args: Array, from?: string, gas?: number): Promise => { - const web3 = new Web3(web3Provider) - console.log(`deploying ${contractName}`) - // Note that the script needs the ABI which is generated from the compilation artifact. - // Make sure contract is compiled and artifacts are generated - const artifactsPath = `browser/contracts/artifacts/${contractName}.json` + const web3 = new Web3(web3Provider) + console.log(`deploying ${contractName}`) + // Note that the script needs the ABI which is generated from the compilation artifact. + // Make sure contract is compiled and artifacts are generated + const artifactsPath = `browser/contracts/artifacts/${contractName}.json` - const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) + const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) - const accounts = await web3.eth.getAccounts() + const accounts = await web3.eth.getAccounts() - const contract: Contract = new web3.eth.Contract(metadata.abi) + const contract: Contract = new web3.eth.Contract(metadata.abi) - const contractSend: ContractSendMethod = contract.deploy({ - data: metadata.data.bytecode.object, - arguments: args - }) + const contractSend: ContractSendMethod = contract.deploy({ + data: metadata.data.bytecode.object, + arguments: args + }) - const newContractInstance = await contractSend.send({ - from: from || accounts[0], - gas: gas || 1500000 - }) - return newContractInstance.options + const newContractInstance = await contractSend.send({ + from: from || accounts[0], + gas: gas || 1500000 + }) + return newContractInstance.options } \ No newline at end of file diff --git a/libs/remixd/src/scripts/installSlither.ts b/libs/remixd/src/scripts/installSlither.ts index a255110b38..2dd6f99fa5 100644 --- a/libs/remixd/src/scripts/installSlither.ts +++ b/libs/remixd/src/scripts/installSlither.ts @@ -1,25 +1,25 @@ const { execSync } = require('child_process') // eslint-disable-line try { - const solcVersion = '0.8.15' - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: requires Python3.6+ (pip3) to be installed on your system`) - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: solc-select will be installed along with Slither to set different solc compiler versions.`) - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: checking pip3 availability ...`) - const pip3OP = execSync('pip3 --version') - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: pip3 found: ${pip3OP.toString()}`) - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: installing slither...`) - const slitherOP = execSync('pip3 install slither-analyzer') - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: slither installation output: ${slitherOP.toString()}`) - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: installing solc-select...`) - const solcSelectOP = execSync('pip3 install solc-select') - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: solc-select installation output: ${solcSelectOP.toString()}`) - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: installing solc ${solcVersion}...`) - const solcInstallOP = execSync(`solc-select install ${solcVersion}`) - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: solc installation output: ${solcInstallOP.toString()}`) - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: setting solc version to ${solcVersion}...`) - const solcUseOP = execSync(`solc-select use ${solcVersion}`) - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: solc setting installation output: ${solcUseOP.toString()}`) - console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: Slither is ready to use!`) + const solcVersion = '0.8.15' + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: requires Python3.6+ (pip3) to be installed on your system`) + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: solc-select will be installed along with Slither to set different solc compiler versions.`) + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: checking pip3 availability ...`) + const pip3OP = execSync('pip3 --version') + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: pip3 found: ${pip3OP.toString()}`) + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: installing slither...`) + const slitherOP = execSync('pip3 install slither-analyzer') + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: slither installation output: ${slitherOP.toString()}`) + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: installing solc-select...`) + const solcSelectOP = execSync('pip3 install solc-select') + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: solc-select installation output: ${solcSelectOP.toString()}`) + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: installing solc ${solcVersion}...`) + const solcInstallOP = execSync(`solc-select install ${solcVersion}`) + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: solc installation output: ${solcInstallOP.toString()}`) + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: setting solc version to ${solcVersion}...`) + const solcUseOP = execSync(`solc-select use ${solcVersion}`) + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: solc setting installation output: ${solcUseOP.toString()}`) + console.log('\x1b[32m%s\x1b[0m', `[Slither Installation]: Slither is ready to use!`) } catch (err) { - console.log('\x1b[31m%s\x1b[0m', `[Slither Installation]: Error occured: ${err}`) + console.log('\x1b[31m%s\x1b[0m', `[Slither Installation]: Error occured: ${err}`) } diff --git a/lint-fix-targets.js b/lint-fix-targets.js index 1898b3bc2c..d808c74090 100644 --- a/lint-fix-targets.js +++ b/lint-fix-targets.js @@ -12,7 +12,7 @@ console.log(Object.keys(projects.graph.nodes)) for(let node of Object.keys(projects.graph.nodes)){ if(projects.graph.nodes[node].data.targets.lint){ console.log(projects.graph.nodes[node].data.name) - const result = spawnSync('yarn', ['lint', projects.graph.nodes[node].data.name], '--fix') + const result = spawnSync('yarn', ['lint', projects.graph.nodes[node].data.name, '--fix']) if(result.status == 0){ console.log('success') }else{ diff --git a/lintfix.sh b/lintfix.sh deleted file mode 100644 index 8d78ddef76..0000000000 --- a/lintfix.sh +++ /dev/null @@ -1,3 +0,0 @@ -yarn nx run remix-ui:lint --fix -yarn nx run remix-ide:lint --fix - diff --git a/projects.json b/projects.json deleted file mode 100644 index 8d3b962966..0000000000 --- a/projects.json +++ /dev/null @@ -1,9593 +0,0 @@ -{ - "graph": { - "nodes": { - "plugin_api": { - "name": "plugin_api", - "type": "app", - "data": { - "name": "plugin_api", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/remix-ide-e2e/src/local-plugin/src/", - "projectType": "application", - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/plugin_api", - "index": "apps/remix-ide-e2e/src/local-plugin/src/index.html", - "baseHref": "/", - "main": "apps/remix-ide-e2e/src/local-plugin/src/main.tsx", - "polyfills": "apps/remix-ide-e2e/src/local-plugin/src/polyfills.ts", - "tsConfig": "apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json", - "assets": [], - "styles": [ - "apps/remix-ide-e2e/src/local-plugin/src/styles.css" - ], - "scripts": [], - "webpackConfig": "apps/remix-ide-e2e/src/local-plugin/webpack.config.js" - }, - "configurations": { - "development": {}, - "production": { - "fileReplacements": [ - { - "replace": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.ts", - "with": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.prod.ts" - } - ] - } - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "plugin_api:build", - "hmr": true - }, - "configurations": { - "development": { - "buildTarget": "plugin_api:build:development", - "port": 2020 - }, - "production": { - "buildTarget": "plugin_api:build:production" - } - } - } - }, - "tags": [], - "root": "apps/remix-ide-e2e/src/local-plugin", - "implicitDependencies": [], - "files": [ - { - "file": "apps/remix-ide-e2e/src/local-plugin/.babelrc", - "hash": "9123728aa14807603fbde932031b9ae2d5a58a24" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/.browserslistrc", - "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/.eslintrc", - "hash": "75f60dff87ce81561509d2239dcacfbc4b93878e" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/project.json", - "hash": "14d022a9d617533fa2080bd52ee6a45c0f7448ef" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/app/app.css", - "hash": "ce033a9bb1e09b4c3f344305dbff72c2ace54342" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/app/app.tsx", - "hash": "bc599077f4a1b08067be2375ae2919be34f1a483", - "deps": [ - "npm:react", - "npm:@remixproject/plugin-api", - "npm:@remixproject/plugin-utils" - ] - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/app/Client.ts", - "hash": "488b109db68e60d7019c2f667de35e5c31011213", - "deps": [ - "npm:@remixproject/plugin", - "npm:@remixproject/plugin-webview" - ] - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/app/logger.tsx", - "hash": "92033e264b901160ce293fa85b800908d19af7da", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/assets/.gitkeep", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.prod.ts", - "hash": "bc0327dbebdd3df82f242e6e07925985f87f309e" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/environments/environment.ts", - "hash": "9ae66f8b70d3c2a726b6fea04dbb69e8734218be" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/favicon.ico", - "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/index.html", - "hash": "b1a45c177ce5a6170a4f6c0ec8d9e376ab19070d" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/main.tsx", - "hash": "ac848b3e6f6af98f7a5c2b2de8a15633c25dbd5e", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/polyfills.ts", - "hash": "53c485753e6e49fd2dac115c6e08dbfe99574861", - "deps": [ - "npm:core-js", - "npm:regenerator-runtime" - ] - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/src/styles.css", - "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/tsconfig.app.json", - "hash": "66eb193383959a85e0f8fe67e07c03d2ec0f5315" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/tsconfig.json", - "hash": "6b1b431876af020c623710929d51798dea2ef74d" - }, - { - "file": "apps/remix-ide-e2e/src/local-plugin/webpack.config.js", - "hash": "25932a1054942fd0eb68ed530fce0e768e6f9473", - "deps": [ - "npm:@nrwl/webpack" - ] - } - ] - } - }, - "remix-url-resolver": { - "name": "remix-url-resolver", - "type": "lib", - "data": { - "name": "remix-url-resolver", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-url-resolver/src", - "projectType": "library", - "implicitDependencies": [], - "targets": { - "test": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "configurations": {} - }, - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-url-resolver", - "main": "libs/remix-url-resolver/src/index.ts", - "tsConfig": "libs/remix-url-resolver/tsconfig.lib.json", - "updateBuildableProjectDepsInPackageJson": false, - "assets": [ - "libs/remix-url-resolver/*.md" - ] - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-url-resolver/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-url-resolver", - "files": [ - { - "file": "libs/remix-url-resolver/.eslintrc", - "hash": "4177c24ed7bcd6698d0c2d258e0f234b1921f53c" - }, - { - "file": "libs/remix-url-resolver/.gitignore", - "hash": "849ddff3b7ec917b5f4563e9a6d3ea63ea512a70" - }, - { - "file": "libs/remix-url-resolver/.npmignore", - "hash": "6222042be4c1f1fb28c0aff65eee42d7dd383499" - }, - { - "file": "libs/remix-url-resolver/package.json", - "hash": "57f465577f68ac38c967ce2b42b08501bf6b5bd2", - "deps": [ - "npm:@erebos/bzz-node", - "npm:axios", - "npm:url", - "npm:@types/chai", - "npm:@types/mocha", - "npm:@types/node", - "npm:chai", - "npm:mocha", - "npm:ts-node", - "npm:tslint", - "npm:typescript" - ] - }, - { - "file": "libs/remix-url-resolver/project.json", - "hash": "5bd43c8a614d597f9d935188675c98406220299c" - }, - { - "file": "libs/remix-url-resolver/README.md", - "hash": "420f483ef733b09179085093e0342302527a64f4" - }, - { - "file": "libs/remix-url-resolver/src/index.ts", - "hash": "30e99022f848f223bc1cf5912cc2aa7b69d2c3b7" - }, - { - "file": "libs/remix-url-resolver/src/resolve.ts", - "hash": "d0b08eeaf77d187fdde24d9f77c704e63d4c2a4f", - "deps": [ - "npm:axios", - "npm:semver", - "npm:@erebos/bzz-node" - ] - }, - { - "file": "libs/remix-url-resolver/tests/example_1/greeter.sol", - "hash": "95e622d176797e6393c3d85415aeb0f1fdcf26d4" - }, - { - "file": "libs/remix-url-resolver/tests/example_1/mortal.sol", - "hash": "e1a1fa4de8a3f739e75cbd6c76cf64c4db0a3673" - }, - { - "file": "libs/remix-url-resolver/tests/test.ts", - "hash": "952967d9c3c2865eb6443d83e886695482958ada", - "deps": [ - "npm:assert" - ] - }, - { - "file": "libs/remix-url-resolver/tsconfig.json", - "hash": "f74b077096017cd8234aa3b115103fd8ae750f5d" - }, - { - "file": "libs/remix-url-resolver/tsconfig.lib.json", - "hash": "ea82c38ae0e537a7f87e4b5808d6a1ecb41194b8" - }, - { - "file": "libs/remix-url-resolver/tslint.json", - "hash": "56c85deb965aaf22a44b2804b1760f52e288b7ce" - } - ] - } - }, - "remix-ws-templates": { - "name": "remix-ws-templates", - "type": "lib", - "data": { - "name": "remix-ws-templates", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-ws-templates/src", - "projectType": "library", - "implicitDependencies": [], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-ws-templates", - "main": "libs/remix-ws-templates/src/index.ts", - "tsConfig": "libs/remix-ws-templates/tsconfig.lib.json", - "updateBuildableProjectDepsInPackageJson": false, - "assets": [ - { - "glob": "templates/**/*", - "ignore": [ - "templates/**/*/index.ts" - ], - "input": "libs/remix-ws-templates/src/", - "output": "src/" - }, - { - "glob": "*.md", - "input": "libs/remix-ws-templates/", - "output": "/" - }, - { - "glob": "templates/**/.prettierrc", - "input": "libs/remix-ws-templates/src/", - "output": "src/" - } - ] - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-ws-templates/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-ws-templates", - "files": [ - { - "file": "libs/remix-ws-templates/.eslintrc", - "hash": "0a49d6ddc4bf2b588c7f6b9265362c29378c68b8" - }, - { - "file": "libs/remix-ws-templates/package.json", - "hash": "06243921cdad6e71235136fe17d68ec557cc400e", - "deps": [ - "npm:@openzeppelin/contracts", - "npm:@openzeppelin/wizard", - "npm:ethers", - "npm:web3" - ] - }, - { - "file": "libs/remix-ws-templates/project.json", - "hash": "7ebf0408d5a99d72ee2b859b301d74e0a83950e4" - }, - { - "file": "libs/remix-ws-templates/README.md", - "hash": "5341f479f9954550fb94d69a111d71da25d88ca5" - }, - { - "file": "libs/remix-ws-templates/src/index.ts", - "hash": "e11a422750eecc32011fe80c94cedef94577bbe3" - }, - { - "file": "libs/remix-ws-templates/src/script-templates/contract-deployer/basic-contract-deploy.ts", - "hash": "e875db9a436cc96a9eca7bfe0f66f80b58e22e42", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-ws-templates/src/script-templates/contract-deployer/create2-factory-deploy.ts", - "hash": "13b6d690a7fb88fd11d1e3a7b588b912228571a9", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-ws-templates/src/script-templates/contract-deployer/index.ts", - "hash": "55c96943920dab8dfefe7bd88fc8cbfdce2ae24e" - }, - { - "file": "libs/remix-ws-templates/src/script-templates/etherscan/index.ts", - "hash": "01a37e5d98b3bf8038f9e66af3cf54af065ed317" - }, - { - "file": "libs/remix-ws-templates/src/script-templates/etherscan/receiptGuidScript.ts", - "hash": "5d8dca80634ada698aa6069fd142bf2649a73a05" - }, - { - "file": "libs/remix-ws-templates/src/script-templates/etherscan/verifyScript.ts", - "hash": "4c76d0ebf49e98e113c574d1580a8ff9e588be6a" - }, - { - "file": "libs/remix-ws-templates/src/templates/blank/.prettierrc", - "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" - }, - { - "file": "libs/remix-ws-templates/src/templates/blank/index.ts", - "hash": "c1733fd71dac7d20208aa69229e14bad927b63ac" - }, - { - "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/.prettierrc", - "hash": "ea6cfd4a9c6c7d852a90a1f9b220525af3f1a1fa" - }, - { - "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/contracts/MultisigWallet.sol", - "hash": "49761b5e879772a24fc88a49121c432a9f542dae" - }, - { - "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/index.ts", - "hash": "f7a677cf6111081385810ca43e0fae6d4dc899aa" - }, - { - "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_ethers.ts", - "hash": "e8b1660a3ce53127dc5952956b24769a2569ade9" - }, - { - "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/deploy_with_web3.ts", - "hash": "ced30d71ac89fad0b458e0161da4c2e32a2bf3bb" - }, - { - "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/ethers-lib.ts", - "hash": "e875db9a436cc96a9eca7bfe0f66f80b58e22e42", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/gnosisSafeMultisig/scripts/web3-lib.ts", - "hash": "cbffde3aac8b9856aa29d4f73fec281947025984", - "deps": [ - "npm:web3", - "npm:web3-eth-contract" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc1155/.prettierrc", - "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc1155/index.ts", - "hash": "83368641f0daeea327895c2811492a42b5b6d9a8", - "deps": [ - "npm:@openzeppelin/wizard" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_ethers.ts", - "hash": "a6c8cf30e5cbcde77eb05d6e1359bdba0f7d8fa2" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc1155/scripts/deploy_with_web3.ts", - "hash": "b22b119246a65e0e2db94db79b96ec24e4ccd625" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc1155/scripts/ethers-lib.ts", - "hash": "e875db9a436cc96a9eca7bfe0f66f80b58e22e42", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc1155/scripts/web3-lib.ts", - "hash": "e6d9e09f3588309310150e5b76df72c561f46e80", - "deps": [ - "npm:web3", - "npm:web3-eth-contract" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc1155/tests/MyToken_test.sol", - "hash": "73a77e7094f21a9783bdc18c3b507c1027e54699" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc20/.prettierrc", - "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc20/index.ts", - "hash": "6befe1f4236e0c8a0e85c35e83ffe0b7e867ab77", - "deps": [ - "npm:@openzeppelin/wizard" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_ethers.ts", - "hash": "a6c8cf30e5cbcde77eb05d6e1359bdba0f7d8fa2" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc20/scripts/deploy_with_web3.ts", - "hash": "b22b119246a65e0e2db94db79b96ec24e4ccd625" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc20/scripts/ethers-lib.ts", - "hash": "e875db9a436cc96a9eca7bfe0f66f80b58e22e42", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc20/scripts/web3-lib.ts", - "hash": "cbffde3aac8b9856aa29d4f73fec281947025984", - "deps": [ - "npm:web3", - "npm:web3-eth-contract" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_mintable_test.sol", - "hash": "7388cf0b877277b136e0c1b1b61054f27e5ef848" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc20/tests/MyToken_test.sol", - "hash": "bdf8f6e69aafd2fd54e8593cd3d916a8cf3deca9" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc721/.prettierrc", - "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc721/index.ts", - "hash": "d0f3f6fee0b1123e9c8dbed761794b4afe48da6b", - "deps": [ - "npm:@openzeppelin/wizard" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_ethers.ts", - "hash": "a6c8cf30e5cbcde77eb05d6e1359bdba0f7d8fa2" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc721/scripts/deploy_with_web3.ts", - "hash": "b22b119246a65e0e2db94db79b96ec24e4ccd625" - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc721/scripts/ethers-lib.ts", - "hash": "e875db9a436cc96a9eca7bfe0f66f80b58e22e42", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc721/scripts/web3-lib.ts", - "hash": "cbffde3aac8b9856aa29d4f73fec281947025984", - "deps": [ - "npm:web3", - "npm:web3-eth-contract" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/ozerc721/tests/MyToken_test.sol", - "hash": "0fb1d12117821b2df3d09d3b461adf1860f8fb22" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/.prettierrc", - "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/contracts/1_Storage.sol", - "hash": "dd1e15d25e783b6eb2149c024787678c663616f7" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/contracts/2_Owner.sol", - "hash": "9949f8cdd6db2acc9bbe98a13e4b89c5e53f9827" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/contracts/3_Ballot.sol", - "hash": "ffcc6c36096cc7f338d585bf2598922b1acc065a" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/index.ts", - "hash": "951ff8e5a17fa04846ea6a8473712c321459ee28" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/README.txt", - "hash": "e27de83769848424c0b111ee491051dbfd422e9a" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_ethers.ts", - "hash": "d7ec2105da293f10eb1255f916bb0780552d75ed" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/scripts/deploy_with_web3.ts", - "hash": "57e1a73516afb15850774be688dad8a6f98c7c0d" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/scripts/ethers-lib.ts", - "hash": "e875db9a436cc96a9eca7bfe0f66f80b58e22e42", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/scripts/web3-lib.ts", - "hash": "cbffde3aac8b9856aa29d4f73fec281947025984", - "deps": [ - "npm:web3", - "npm:web3-eth-contract" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/tests/Ballot_test.sol", - "hash": "49146e99facba02fce64738239bec0b835cec15b" - }, - { - "file": "libs/remix-ws-templates/src/templates/remixDefault/tests/storage.test.js", - "hash": "aa14b35a00172b8602a13e478ce7f79c607d2577", - "deps": [ - "npm:chai", - "npm:hardhat" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/zeroxErc20/.prettierrc", - "hash": "b2a56f23717b4b9b8f05d45363a0fd58c657ce6e" - }, - { - "file": "libs/remix-ws-templates/src/templates/zeroxErc20/contracts/SampleERC20.sol", - "hash": "ecea8b4aa3b50f2fb106dc78a4f4d6bd7cd579e0" - }, - { - "file": "libs/remix-ws-templates/src/templates/zeroxErc20/index.ts", - "hash": "311262db911aef949a068e5117ad12bad485d103" - }, - { - "file": "libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_ethers.ts", - "hash": "ad2fd4597a151b87234342652ca88b9ca1b847d4" - }, - { - "file": "libs/remix-ws-templates/src/templates/zeroxErc20/scripts/deploy_with_web3.ts", - "hash": "af6af1c8a4cf82fd8a994c6f0a2a0797b95682ed" - }, - { - "file": "libs/remix-ws-templates/src/templates/zeroxErc20/scripts/ethers-lib.ts", - "hash": "e875db9a436cc96a9eca7bfe0f66f80b58e22e42", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/zeroxErc20/scripts/web3-lib.ts", - "hash": "cbffde3aac8b9856aa29d4f73fec281947025984", - "deps": [ - "npm:web3", - "npm:web3-eth-contract" - ] - }, - { - "file": "libs/remix-ws-templates/src/templates/zeroxErc20/tests/SampleERC20_test.sol", - "hash": "b167e1a4782e3bdf7aa7710c4558b77b0f761575" - }, - { - "file": "libs/remix-ws-templates/tsconfig.json", - "hash": "eb1415fa71c5cce2049880364d9ef4f88b929559" - }, - { - "file": "libs/remix-ws-templates/tsconfig.lib.json", - "hash": "165195b7898c6de369e5b856458f8f603218b770" - }, - { - "file": "libs/remix-ws-templates/types/index.d.ts", - "hash": "a7238130dfe3401070400f85c71f96aeeb78cccb" - } - ] - } - }, - "solidity-compiler": { - "name": "solidity-compiler", - "type": "app", - "data": { - "name": "solidity-compiler", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/solidity-compiler/src", - "projectType": "application", - "implicitDependencies": [], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/solidity-compiler", - "index": "apps/solidity-compiler/src/index.html", - "baseHref": "/", - "main": "apps/solidity-compiler/src/main.tsx", - "polyfills": "apps/solidity-compiler/src/polyfills.ts", - "tsConfig": "apps/solidity-compiler/tsconfig.app.json", - "assets": [ - "apps/solidity-compiler/src/favicon.ico", - "apps/solidity-compiler/src/assets" - ], - "styles": [ - "apps/solidity-compiler/src/styles.css" - ], - "scripts": [], - "webpackConfig": "apps/solidity-compiler/webpack.config.js" - }, - "configurations": { - "development": {}, - "production": { - "fileReplacements": [ - { - "replace": "apps/solidity-compiler/src/environments/environment.ts", - "with": "apps/solidity-compiler/src/environments/environment.prod.ts" - } - ] - } - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "solidity-compiler:build" - }, - "configurations": { - "development": { - "buildTarget": "solidity-compiler:build:development" - }, - "production": { - "buildTarget": "solidity-compiler:build:production" - } - } - } - }, - "tags": [], - "root": "apps/solidity-compiler", - "files": [ - { - "file": "apps/solidity-compiler/.babelrc", - "hash": "9123728aa14807603fbde932031b9ae2d5a58a24" - }, - { - "file": "apps/solidity-compiler/.browserslistrc", - "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" - }, - { - "file": "apps/solidity-compiler/project.json", - "hash": "395ec9e94e1a05471f179fea9da81c198f435934" - }, - { - "file": "apps/solidity-compiler/src/app/app.tsx", - "hash": "7115b1509a8df0ef689ade976040da0263bfd642", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/solidity-compiler/src/app/compiler.ts", - "hash": "01543be9952b5e8bba512b14e303712a6599c05e", - "deps": [ - "npm:@remixproject/plugin", - "npm:@remixproject/plugin-webview" - ] - }, - { - "file": "apps/solidity-compiler/src/assets/.gitkeep", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "apps/solidity-compiler/src/assets/img/ipfs.webp", - "hash": "9cdfa7380c503f4ccfed36563f44cef6c5f1b082" - }, - { - "file": "apps/solidity-compiler/src/assets/js/.gitignore", - "hash": "5e7d2734cfc60289debf74293817c0a8f572ff32" - }, - { - "file": "apps/solidity-compiler/src/environments/environment.prod.ts", - "hash": "bc0327dbebdd3df82f242e6e07925985f87f309e" - }, - { - "file": "apps/solidity-compiler/src/environments/environment.ts", - "hash": "9ae66f8b70d3c2a726b6fea04dbb69e8734218be" - }, - { - "file": "apps/solidity-compiler/src/favicon.ico", - "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" - }, - { - "file": "apps/solidity-compiler/src/index.html", - "hash": "45be468da6a39a5f510708523b44c748713d781f" - }, - { - "file": "apps/solidity-compiler/src/main.tsx", - "hash": "96d7e3743b506e6ca4af665e648962a573f6c345", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/solidity-compiler/src/polyfills.ts", - "hash": "53c485753e6e49fd2dac115c6e08dbfe99574861", - "deps": [ - "npm:core-js", - "npm:regenerator-runtime" - ] - }, - { - "file": "apps/solidity-compiler/src/styles.css", - "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" - }, - { - "file": "apps/solidity-compiler/tsconfig.app.json", - "hash": "252904bb73871a10597dc233e4a528e13c6af9c4" - }, - { - "file": "apps/solidity-compiler/tsconfig.json", - "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" - }, - { - "file": "apps/solidity-compiler/webpack.config.js", - "hash": "e19684ca91ad1878855b9fc19f6089cfb4e05eb2", - "deps": [ - "npm:@nrwl/webpack", - "npm:@nrwl/react", - "npm:webpack", - "npm:terser-webpack-plugin", - "npm:css-minimizer-webpack-plugin" - ] - } - ] - } - }, - "remix-core-plugin": { - "name": "remix-core-plugin", - "type": "lib", - "data": { - "name": "remix-core-plugin", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-core-plugin/src", - "projectType": "library", - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-core-plugin", - "main": "libs/remix-core-plugin/src/index.ts", - "tsConfig": "libs/remix-core-plugin/tsconfig.lib.json", - "assets": [], - "updateBuildableProjectDepsInPackageJson": false - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-core-plugin/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-core-plugin", - "implicitDependencies": [], - "files": [ - { - "file": "libs/remix-core-plugin/.eslintrc", - "hash": "43d73eb5414c95bc7acf8ada59bb0beed750d762" - }, - { - "file": "libs/remix-core-plugin/package.json", - "hash": "3ea38618cc8466c13a332e94ea1bf054840a50d6" - }, - { - "file": "libs/remix-core-plugin/project.json", - "hash": "f7d0ab2428af4036e8e5373f41424a1193f749f5" - }, - { - "file": "libs/remix-core-plugin/README.md", - "hash": "fc60297f57115429f26906e76585b54ebdb0260b" - }, - { - "file": "libs/remix-core-plugin/src/index.ts", - "hash": "db3788cd5f4709d077bdfe63aab4352508e38e6f" - }, - { - "file": "libs/remix-core-plugin/src/lib/compiler-artefacts.ts", - "hash": "b1f9ac96343a45d99d3b10a0d899e27dba6b7026", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-core-plugin/src/lib/compiler-content-imports.ts", - "hash": "b64308ff34451707f1665a7584da746e009bd4c0", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-core-plugin/src/lib/compiler-fetch-and-compile.ts", - "hash": "3030321f93e9367010efade4a796768446a6e79a", - "deps": [ - "npm:@remixproject/engine", - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-core-plugin/src/lib/compiler-metadata.ts", - "hash": "abf811551c5a50a5764554306b20247d7824bf40", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-core-plugin/src/lib/constants/uups.ts", - "hash": "9a3dc9275768e531f00af2d4c523928ffb4323cf" - }, - { - "file": "libs/remix-core-plugin/src/lib/gist-handler.ts", - "hash": "7c0ed92542b93a0477b0e4abbc183b0f59c21a7f", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-core-plugin/src/lib/helpers/fetch-etherscan.ts", - "hash": "1592663c38bf9ac2f2a16d6a1acb35408e99f2fc" - }, - { - "file": "libs/remix-core-plugin/src/lib/helpers/fetch-sourcify.ts", - "hash": "5765e7e9d6040976990702adfc22ac694f14ab31" - }, - { - "file": "libs/remix-core-plugin/src/lib/link-libraries.ts", - "hash": "84d50d5a1439b669a195c72886c279c1ffe99f68", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-core-plugin/src/lib/offset-line-to-column-converter.ts", - "hash": "0c416b2953783c20d57913174ff37d430e6a9193", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-core-plugin/src/lib/openzeppelin-proxy.ts", - "hash": "47db52425f06dd0a0bed84730c6ef76f07bd0e94", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-core-plugin/src/types/contract.ts", - "hash": "ba93c138f01847407a25fbe57b79d2147076a175", - "deps": [ - "npm:@openzeppelin/upgrades-core" - ] - }, - { - "file": "libs/remix-core-plugin/tsconfig.json", - "hash": "c23e61c80035a2b0526de861e767ed5ad82db04e" - }, - { - "file": "libs/remix-core-plugin/tsconfig.lib.json", - "hash": "87520f83f8d3124fde5654d56c1828ecf59d8a09" - } - ] - } - }, - "ghaction-helper": { - "name": "ghaction-helper", - "type": "lib", - "data": { - "name": "ghaction-helper", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/ghaction-helper/src", - "projectType": "library", - "implicitDependencies": [ - "remix-solidity" - ], - "targets": { - "test": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "configurations": {} - }, - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/ghaction-helper", - "main": "libs/ghaction-helper/src/index.ts", - "tsConfig": "libs/ghaction-helper/tsconfig.lib.json", - "assets": [], - "updateBuildableProjectDepsInPackageJson": false - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/ghaction-helper/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/ghaction-helper", - "files": [ - { - "file": "libs/ghaction-helper/.eslintrc", - "hash": "f57f93144edfd987a71b8c065a0c6ddbbdb24026" - }, - { - "file": "libs/ghaction-helper/.npmignore", - "hash": "aa8e45f12bce4c9ccf69652a97bd54ffc43c7123" - }, - { - "file": "libs/ghaction-helper/package.json", - "hash": "bd431a18e254c234b6d2da28aec4308d1a3d5ea7", - "deps": [ - "remix-simulator", - "npm:chai", - "npm:ethers", - "npm:web3", - "remix-solidity", - "npm:@types/chai", - "npm:typescript" - ] - }, - { - "file": "libs/ghaction-helper/project.json", - "hash": "9d93dfcab8ba0d0ad02a008996477b00f619920e" - }, - { - "file": "libs/ghaction-helper/README.md", - "hash": "5055697b95799d8a4836c451bd91846af9101f43" - }, - { - "file": "libs/ghaction-helper/src/artifacts-helper.ts", - "hash": "3cc02ff9b57b2942f0e791c259d2e44ff5ebe804" - }, - { - "file": "libs/ghaction-helper/src/chai.ts", - "hash": "4815a2a31ddc622e2df6f01c97d9e2c48d6855aa", - "deps": [ - "npm:chai" - ] - }, - { - "file": "libs/ghaction-helper/src/ethers.ts", - "hash": "d3941e6dd485531bde16861121503d702571b4c9", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/ghaction-helper/src/index.ts", - "hash": "2ead5cf6053d3e35e62c9c80eeed11b4af5389d0" - }, - { - "file": "libs/ghaction-helper/src/methods.ts", - "hash": "8bea9f5532b670a11cd42bda456138998ddbfab1", - "deps": [ - "npm:ethers", - "npm:web3" - ] - }, - { - "file": "libs/ghaction-helper/src/signer.ts", - "hash": "c6b6cf9d2a59b0192cb3672e1ec63866a2375e3b", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/ghaction-helper/tsconfig.json", - "hash": "5ed408bd51c833cbd93c4bfc6d65d0d1d8102678" - }, - { - "file": "libs/ghaction-helper/tsconfig.lib.json", - "hash": "736089467e72cbd60950923fa878c2cadaa4d689" - } - ] - } - }, - "remix-astwalker": { - "name": "remix-astwalker", - "type": "lib", - "data": { - "name": "remix-astwalker", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-astwalker/src", - "projectType": "library", - "implicitDependencies": [ - "remix-lib" - ], - "targets": { - "test": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "configurations": {} - }, - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-astwalker", - "main": "libs/remix-astwalker/src/index.ts", - "tsConfig": "libs/remix-astwalker/tsconfig.lib.json", - "assets": [ - "libs/remix-astwalker/*.md" - ], - "updateBuildableProjectDepsInPackageJson": false - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-astwalker/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-astwalker", - "files": [ - { - "file": "libs/remix-astwalker/.eslintrc", - "hash": "43d73eb5414c95bc7acf8ada59bb0beed750d762" - }, - { - "file": "libs/remix-astwalker/.gitignore", - "hash": "343b37acb19f34988c20589278167f019943dcea" - }, - { - "file": "libs/remix-astwalker/.npmignore", - "hash": "6222042be4c1f1fb28c0aff65eee42d7dd383499" - }, - { - "file": "libs/remix-astwalker/package.json", - "hash": "2c6f9efd6600da87e618959bda5910edbc6d23c3", - "deps": [ - "npm:@ethereumjs/block", - "npm:@ethereumjs/tx", - "npm:@ethereumjs/util", - "npm:@ethereumjs/vm", - "remix-lib", - "npm:@types/tape", - "npm:async", - "npm:ethers", - "npm:ethjs-util", - "npm:nyc", - "npm:string-similarity", - "npm:tape", - "npm:ts-node", - "npm:typescript", - "npm:web3", - "npm:tap-spec" - ] - }, - { - "file": "libs/remix-astwalker/project.json", - "hash": "ba70ffc27d019e0ced890144128a61c98c43a23e" - }, - { - "file": "libs/remix-astwalker/README.md", - "hash": "6b039579689a6e3a112c463b4960d3b3d29c881a" - }, - { - "file": "libs/remix-astwalker/src/@types/remix-lib/index.d.ts", - "hash": "a91da9393461c74e2d35e2b8836988871f6a62e0" - }, - { - "file": "libs/remix-astwalker/src/astWalker.ts", - "hash": "853ff647b52ce4cd07b3d3c536286f746119ad15", - "deps": [ - "npm:events" - ] - }, - { - "file": "libs/remix-astwalker/src/index.ts", - "hash": "02f371ee1801bd61957440dac3ee1b9dc597dc50" - }, - { - "file": "libs/remix-astwalker/src/sourceMappings.ts", - "hash": "869f4959462c4d033ba36b2007b82685a65c9e30" - }, - { - "file": "libs/remix-astwalker/src/types.ts", - "hash": "784323d22103fd7915fad1c9c0f3db63e839f646" - }, - { - "file": "libs/remix-astwalker/tests/newTests.ts", - "hash": "3db5320202a89084183de0263f5582bb114fe0e4", - "deps": [ - "npm:tape" - ] - }, - { - "file": "libs/remix-astwalker/tests/resources/ast.ts", - "hash": "d20b63e7bf12e195227ec2c77cae75930ee69c10" - }, - { - "file": "libs/remix-astwalker/tests/resources/legacyAST.ts", - "hash": "6b842f95f057bd395c8aa7990cc1a15ce9456ab9" - }, - { - "file": "libs/remix-astwalker/tests/resources/newAST.ts", - "hash": "cda95ae7563649eea3b27f3a41fdd98d5e236363" - }, - { - "file": "libs/remix-astwalker/tests/resources/test.sol", - "hash": "2df646a8342611177c4df20f0dbd05d9aa882ca9" - }, - { - "file": "libs/remix-astwalker/tests/sourceMappings.ts", - "hash": "1a2bcbdd31f2a9fe501062d60ca6e25ab55d1c97", - "deps": [ - "npm:tape" - ] - }, - { - "file": "libs/remix-astwalker/tsconfig.json", - "hash": "7f163468b26766fff6f1dea5e9bc129e4ee98368" - }, - { - "file": "libs/remix-astwalker/tsconfig.lib.json", - "hash": "4c89a574be11686459a6457a1255a250cf5c56bd" - } - ] - } - }, - "remix-simulator": { - "name": "remix-simulator", - "type": "lib", - "data": { - "name": "remix-simulator", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-simulator/src", - "projectType": "library", - "implicitDependencies": [ - "remix-lib" - ], - "targets": { - "test": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "configurations": {} - }, - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-simulator", - "main": "libs/remix-simulator/src/index.ts", - "tsConfig": "libs/remix-simulator/tsconfig.lib.json", - "updateBuildableProjectDepsInPackageJson": false, - "assets": [ - { - "glob": "ethsim", - "input": "libs/remix-simulator/bin/", - "output": "bin/" - }, - { - "glob": "*.md", - "input": "libs/remix-simulator/", - "output": "/" - } - ] - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-simulator/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-simulator", - "files": [ - { - "file": "libs/remix-simulator/.eslintrc", - "hash": "8e04356c0081c590e1636803ff4134dad9665cda" - }, - { - "file": "libs/remix-simulator/.npmignore", - "hash": "b59f7e3a95a4d3f2b168d9c8e330be591fc49a6b" - }, - { - "file": "libs/remix-simulator/bin/ethsim", - "hash": "607cabbe9caad07fa2b37f692b9d7c2ca9a8e4f4" - }, - { - "file": "libs/remix-simulator/package.json", - "hash": "b7e8286ec8e738c47285e8721c791fd4097dec44", - "deps": [ - "npm:@ethereumjs/block", - "npm:@ethereumjs/common", - "npm:@ethereumjs/tx", - "npm:@ethereumjs/util", - "npm:@ethereumjs/vm", - "remix-lib", - "npm:ansi-gray", - "npm:async", - "npm:body-parser", - "npm:color-support", - "npm:commander", - "npm:cors", - "npm:ethers", - "npm:ethjs-util", - "npm:express", - "npm:express-ws", - "npm:merge", - "npm:string-similarity", - "npm:time-stamp", - "npm:web3", - "npm:@babel/core", - "npm:@babel/plugin-transform-object-assign", - "npm:@babel/preset-env", - "npm:@babel/preset-stage-0", - "npm:babel-eslint", - "npm:babelify", - "npm:mocha" - ] - }, - { - "file": "libs/remix-simulator/project.json", - "hash": "b4aa8b30070429069b7d7601ff3dbad3343295ce" - }, - { - "file": "libs/remix-simulator/README.md", - "hash": "bf1b0c675adc6fae3c95cc7284b61fc9bcbecaf4" - }, - { - "file": "libs/remix-simulator/src/index.ts", - "hash": "e49f4baf863ddd781e7b2b2e790d3b3fb96e2725" - }, - { - "file": "libs/remix-simulator/src/methods/accounts.ts", - "hash": "ffbfc89a3a26437a7de6e2618654761d5e2e71b3", - "deps": [ - "npm:@ethereumjs/util", - "npm:bn.js", - "npm:web3-eth-accounts" - ] - }, - { - "file": "libs/remix-simulator/src/methods/blocks.ts", - "hash": "cfd8c30ef44f92b6f03e6c6c09564f74b920db3e", - "deps": [ - "npm:web3-utils", - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-simulator/src/methods/debug.ts", - "hash": "b9bf886e503b477ebe579a085d3dd98c90324e90" - }, - { - "file": "libs/remix-simulator/src/methods/filters.ts", - "hash": "43404a1c31b87069950eb573849bb042258feb66" - }, - { - "file": "libs/remix-simulator/src/methods/misc.ts", - "hash": "e6f8a3716a9db34e03e96285773dfa8521f90366", - "deps": [ - "npm:web3-utils" - ] - }, - { - "file": "libs/remix-simulator/src/methods/net.ts", - "hash": "1a064719f43863473993a950acf13660a837158a" - }, - { - "file": "libs/remix-simulator/src/methods/transactions.ts", - "hash": "dc6d940e6504187295bef4d342695d64dacea0c0", - "deps": [ - "npm:web3-utils", - "npm:bn.js", - "npm:@ethereumjs/util", - "npm:ethers", - "npm:@ethereumjs/vm", - "npm:@ethereumjs/evm" - ] - }, - { - "file": "libs/remix-simulator/src/methods/txProcess.ts", - "hash": "f269ca1baf8900de578bd32604962b835c646927" - }, - { - "file": "libs/remix-simulator/src/provider.ts", - "hash": "997accddf9e8d1da6a6f99d563bd089f4392a7e9", - "deps": [ - "npm:merge" - ] - }, - { - "file": "libs/remix-simulator/src/server.ts", - "hash": "73a2cd055274a28a93d239721ea455a072115058", - "deps": [ - "npm:express", - "npm:cors", - "npm:body-parser", - "npm:express-ws" - ] - }, - { - "file": "libs/remix-simulator/src/utils/logs.ts", - "hash": "0ea1271b3b53dd7b938e4a6c9105db721c851d06", - "deps": [ - "npm:ansi-gray", - "npm:time-stamp", - "npm:color-support" - ] - }, - { - "file": "libs/remix-simulator/src/vm-context.ts", - "hash": "62122a61c91539cfac79e478694078fa60490340", - "deps": [ - "npm:@ethereumjs/statemanager", - "npm:@ethereumjs/util", - "npm:ethereum-cryptography", - "npm:rlp", - "npm:ethers", - "npm:@ethereumjs/vm", - "npm:@ethereumjs/common", - "npm:@ethereumjs/trie", - "npm:@ethereumjs/evm", - "npm:@ethereumjs/blockchain", - "npm:@ethereumjs/block", - "npm:@ethereumjs/tx" - ] - }, - { - "file": "libs/remix-simulator/src/VmProxy.ts", - "hash": "a0005f8fa27e3fb7b726afd6bdc9912bad3c45b0", - "deps": [ - "npm:bn.js", - "npm:web3-utils", - "npm:@ethereumjs/util", - "npm:ethers", - "npm:@ethereumjs/statemanager", - "npm:@ethereumjs/evm", - "npm:@ethereumjs/vm", - "npm:@ethereumjs/tx" - ] - }, - { - "file": "libs/remix-simulator/test/accounts.ts", - "hash": "336d438380cdd912718da5bf0969aac5524270b9", - "deps": [ - "npm:web3", - "npm:assert" - ] - }, - { - "file": "libs/remix-simulator/test/blocks.ts", - "hash": "72b454b8dd520062a5d16858d3df6e1320c65d58", - "deps": [ - "npm:web3", - "npm:assert" - ] - }, - { - "file": "libs/remix-simulator/test/misc.ts", - "hash": "a339910996f85a5f3ff168b0fba14492e4f7f88c", - "deps": [ - "npm:web3", - "npm:assert" - ] - }, - { - "file": "libs/remix-simulator/tsconfig.json", - "hash": "3d3a2b990fe6913295064aa25680fcc977d70cb8" - }, - { - "file": "libs/remix-simulator/tsconfig.lib.json", - "hash": "dee88a751393852abe6930151e40cf5b20d1e3df" - } - ] - } - }, - "remix-analyzer": { - "name": "remix-analyzer", - "type": "lib", - "data": { - "name": "remix-analyzer", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-analyzer/src", - "projectType": "library", - "implicitDependencies": [ - "remix-astwalker", - "remix-lib" - ], - "targets": { - "test": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "configurations": {} - }, - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-analyzer", - "main": "libs/remix-analyzer/src/index.ts", - "tsConfig": "libs/remix-analyzer/tsconfig.lib.json", - "assets": [ - "libs/remix-analyzer/*.md" - ], - "updateBuildableProjectDepsInPackageJson": false - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-analyzer/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-analyzer", - "files": [ - { - "file": "libs/remix-analyzer/.eslintrc", - "hash": "43d73eb5414c95bc7acf8ada59bb0beed750d762" - }, - { - "file": "libs/remix-analyzer/.npmignore", - "hash": "b59f7e3a95a4d3f2b168d9c8e330be591fc49a6b" - }, - { - "file": "libs/remix-analyzer/package.json", - "hash": "edaa8a74bf98f4d8c20e2e2c63a5a0fadce49236", - "deps": [ - "npm:@ethereumjs/block", - "npm:@ethereumjs/tx", - "npm:@ethereumjs/util", - "npm:@ethereumjs/vm", - "remix-astwalker", - "remix-lib", - "npm:async", - "npm:ethers", - "npm:ethjs-util", - "npm:string-similarity", - "npm:web3", - "npm:@types/node", - "npm:babel-eslint", - "npm:npm-install-version", - "npm:tape", - "npm:ts-node", - "npm:typescript" - ] - }, - { - "file": "libs/remix-analyzer/project.json", - "hash": "6700532bb14cb0541d36bca1a7c5a6b769939f01" - }, - { - "file": "libs/remix-analyzer/README.md", - "hash": "a2cc46d6bd9f1babbad1956891c3779158a6959d" - }, - { - "file": "libs/remix-analyzer/src/index.ts", - "hash": "406fbd56863f7f87ea42b0c64fd1ce9593ebab16" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/index.ts", - "hash": "d2c45ff6353120d8cd8541ac07ea71a92c98bb0b" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/abstractAstView.ts", - "hash": "0febc41dc17758fb810b4b962440a01d72961f83" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/algorithmCategories.ts", - "hash": "59a998aaa61e00a39c6142660386266ad816fe4a" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/assignAndCompare.ts", - "hash": "1abca173078f9f029094a2bed0328ad8ff19ddcf" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/blockBlockhash.ts", - "hash": "714e7f62dd702708a162dfb67c31fecec3dca654" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/blockTimestamp.ts", - "hash": "be78b7e90b03b581dd1ead9010d1c54734a346b3" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/categories.ts", - "hash": "855d691b8c624f80d35b7cdd0d14f156833d62ae" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/checksEffectsInteraction.ts", - "hash": "e0cf9adac648a864f7cd4f5f573ccc5cf6e3d5a7" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/constantFunctions.ts", - "hash": "abbdb91807157703aa48deca920e55b0138cf15e" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/deleteDynamicArrays.ts", - "hash": "dd814b382e7d9843ecbb9ca2836116b6ece10cf2" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/deleteFromDynamicArray.ts", - "hash": "714da95c65e47efa679c3bbe9a066d2eb098cfa2" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/erc20Decimals.ts", - "hash": "c9264920c78f7a7e745e0e67f4dae15609d491aa" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/etherTransferInLoop.ts", - "hash": "a8f8ae1d55d44b5ebc926be9b6355dc1642d75d4" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/forLoopIteratesOverDynamicArray.ts", - "hash": "ff85469cf28f115e57cbc980c7dc66be34aa6961" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/functionCallGraph.ts", - "hash": "a83666d68be3344b5c98336a56720a1ebb0280c4" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/gasCosts.ts", - "hash": "882860d7362dfd085a05b30fd6bcf7a7ae8bcf44" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/guardConditions.ts", - "hash": "b2c67fbef44d412ed34dc0ace1cb005580711a52" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/index.ts", - "hash": "d76b94539a9b62bdb3622cb88595377fba45f649" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/inlineAssembly.ts", - "hash": "851fc2f10d8f9bc22ab30ede37bc420f8d720ee5" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/intDivisionTruncate.ts", - "hash": "b54053202bac2e5a374aed19166f825a8175c007" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/list.ts", - "hash": "a6687343be0772c0de275afff9d50324748f5f22" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/lowLevelCalls.ts", - "hash": "39ee3faa2dbbf9f8c9342b8897b196ad8d87b8b5" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/noReturn.ts", - "hash": "70588169d3d26c3e4218b5b5a4ff63c26733e751" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/selfdestruct.ts", - "hash": "e1ad68eceeee6364897d309634ff1f7c576bf72b" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/similarVariableNames.ts", - "hash": "35591dc8b1b3e0ca8afc724860b3312157e2127b", - "deps": [ - "npm:fast-levenshtein" - ] - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/staticAnalysisCommon.ts", - "hash": "6d258d5909b368bb98f436af1f60392d235a707b" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/stringBytesLength.ts", - "hash": "57c02b84dd0f210ecc6378251e429e7082769ec5" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/thisLocal.ts", - "hash": "9c13b4c2ac1ccda655ce4f21a9bf692afafbc57b" - }, - { - "file": "libs/remix-analyzer/src/solidity-analyzer/modules/txOrigin.ts", - "hash": "1a7a0cd0d7568dc27ae86d68f84dc129187ab9c7" - }, - { - "file": "libs/remix-analyzer/src/types.ts", - "hash": "c15352eb2e4f58e0b6e2e37138c1ccfe5c282a52" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/abiNamespaceCallNodes.json", - "hash": "18670fb3b13b94434b40848c0d053d2fbc46c7e2" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/assignment.json", - "hash": "b5f7fd30109a0cf5ce6a56f44f66f34977fce97a" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/blockHashAccess.json", - "hash": "039bd335316fa913d05509ab3bd8590a08c74819" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/blockTimestamp.json", - "hash": "61bc2be74a739d7577117805b1107007b4ebfec8" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/contractDefinition.json", - "hash": "31229fcabb2fd1ac0479121982b974609b0b2c5a" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/doWhileLoopNode.json", - "hash": "cc5f6708bbe420274937ece4bf895dd19c495ded" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/dynamicDeleteUnaryOp.json", - "hash": "98d34f7a4e58393b68aa8e56412df52b4c2f6707" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/externalDirect.json", - "hash": "ebf7625571c2807d9a83cb9161e353e9ac8b9cd3" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/forLoopNode.json", - "hash": "515813068f16306dc7faa30b286becab2f3a2fb6" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/fullyQualifiedFunctionDefinition.json", - "hash": "81c77667a7fd0aaec1d0f576b8f078c1326b0db9" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/funcDefForComplexParams.json", - "hash": "14551bce74e399eb17579910313df69b451772f1" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/functionDefinition.json", - "hash": "3848db0dd91cc328378695e2d45fe867b37d21e6" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/index.js", - "hash": "0c9e1aa198fe2aa2875d74d583cbe0508d0956f0" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/inheritance.json", - "hash": "d84ecf0cc3bb1d86e647cfec8a6d1163090677af" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/inlineAssembly.json", - "hash": "03e5acbb2340fb4b96bf0ec949c5562a278e41ef" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/libCall.json", - "hash": "12df4999aa82833ba85a6563edcf60df3dafc8a0" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/localCall.json", - "hash": "d954eba389019ba6582ff913dae8e11c4118f809" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/lowlevelCall.json", - "hash": "7e41bc4d4f2da19539564a97d69b67cd13e7df8f" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/nowAst.json", - "hash": "1fdc9a5397ea58a79b51a2158a0a55a8295d9733" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/parameterFunction.json", - "hash": "b112f20898f352677cf74b9f75b574349f68160a" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/parameterFunctionCall.json", - "hash": "793b946a74afc7342ac235f07ef833c8bc280a62" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/requireCall.json", - "hash": "4168a655204b386d542b65de29ed8fbc9837718a" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/selfdestruct.json", - "hash": "04ef87be3654c9d0970125f181484bb186665c16" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/stateVariableContractNode.json", - "hash": "e24f5308ebc9c675c67374ec881570b98f876a0d" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/storageVariableNodes.json", - "hash": "96a4c6ff351406c9c9b717b219a3249a76a14e0b" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/superLocal.json", - "hash": "d87be6477bc0dcf1c842fa8025cd33f3f504b1b2" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/thisLocalCall.json", - "hash": "214edff07fa542083cb2c8cdebee97e9ab9905d5" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/unaryOperation.json", - "hash": "60fa3a805f2aa7372908902b54d13ae714a8ab41" - }, - { - "file": "libs/remix-analyzer/test/analysis/astBlocks/whileLoopNode.json", - "hash": "0f05c2c6ceee97a9eb260eb1ade06793e775fd1c" - }, - { - "file": "libs/remix-analyzer/test/analysis/compilationDetails/CompiledContractObj.json", - "hash": "db7cab541e818a8031e1f6dd9d917173e7822e75" - }, - { - "file": "libs/remix-analyzer/test/analysis/staticAnalysisCommon-test.ts", - "hash": "f8a1649053698dfafdc0cf78512a39c7c8c1e530", - "deps": [ - "npm:tape" - ] - }, - { - "file": "libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.4.24.ts", - "hash": "305b53ae979ea81bccc5f67e67c6dabb4a4e968a", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-analyzer/test/analysis/staticAnalysisIntegration-test-0.5.0.ts", - "hash": "03cc61d5e2fd428c2d39e8b4f886ac31cef9928c", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.4.24.ts", - "hash": "2a6091dc328df67b531650c79dfc445a2b80c362", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-analyzer/test/analysis/staticAnalysisIssues-test-0.5.0.ts", - "hash": "43234e41682fe7231f4524ff5ad89d73620a167c", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/assembly.sol", - "hash": "fb647502ebfddbdf7f6e766785150df1a34dff4a" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ballot_reentrant.sol", - "hash": "a695b09e190241c99b72a9b665b6246f4a332736" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ballot_withoutWarnings.sol", - "hash": "e273b3da4f143442ac0e9bd131670c8daccd3b0e" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ballot.sol", - "hash": "e1e9f676fe60e144fbba0f6b567ba94febba27fc" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/blockLevelCompare.sol", - "hash": "14c4eb9d7ad0fbdb57c60b690a5333617b0d03d6" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/cross_contract.sol", - "hash": "426c8d444dfa7fb26556bf9d085b2cb50fbb14ee" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ctor.sol", - "hash": "b250c02626318b534715efaa61ed200c8a56f30c" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/deleteDynamicArray.sol", - "hash": "bb179b21f60f9168eba1a3f930e2895c8766cd17" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/deleteFromDynamicArray.sol", - "hash": "dbe08109bb99512b388f995d2c2dcf87d3147264" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/ERC20.sol", - "hash": "38a6f7711330ed9178fcdc689bb64cb079c5f693" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/etherTransferInLoop.sol", - "hash": "1cf5ca8b6b5f28cebd715b08dbba14b9adfad0f8" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/forgottenReturn.sol", - "hash": "eb3df75e4491882ee8237f97748e05b1cc09252f" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/forLoopIteratesOverDynamicArray.sol", - "hash": "53ed913958a3ac3cb6c96e663c2b2d2e978967be" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/functionParameters.sol", - "hash": "f1a9f4a0f0376b7f340bb655f96729d492d2b0df" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/globals.sol", - "hash": "7df37c757f266301f01b9d3b0a729b4436ecb8ae" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/inheritance.sol", - "hash": "1491e8fa9f87816cfe993d5d599e71f97a1e74e4" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/intDivisionTruncate.sol", - "hash": "e5ed123b85343940b7d4805ef674c8f085709828" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/KingOfTheEtherThrone.sol", - "hash": "70cfb0832779f37e0f5a156f067054d4aa57d37a" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/library.sol", - "hash": "3ca1454d496dd719b277ac1af3040897821a24ea" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/loops.sol", - "hash": "cd6aed59ce777a4ae0c540ec67a79965d877de04" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/modifier1.sol", - "hash": "a755d763b1e166318b940381647d0f4f7fdb55f0" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/modifier2.sol", - "hash": "44db1617c7b9108f1245129308334d582336218d" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/notReentrant.sol", - "hash": "374f64f0202323a9612a064776748d6963394364" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/reentrant.sol", - "hash": "896395e1a6d5c8e3b0984b750414217aa125a7b9" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/selfdestruct.sol", - "hash": "2f56dfc2e4b11f3e530e2396a9e1a3d8a2a79205" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/stringBytesLength.sol", - "hash": "2aaf74039ce3eecb8055a9ffc26f813991b7acdc" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/structReentrant.sol", - "hash": "95952ff1ca677ca3f2bc77325fb5eaf76c0fddf6" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/thisLocal.sol", - "hash": "e31cf0dbaffcbd5536c2af9dfa46c26d89b0eda3" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.4.24/transfer.sol", - "hash": "49ddd515bf62357bb9ad16b17e5ba1e34af009e1" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/assembly.sol", - "hash": "d081756d245563be6fc5a1e730e0d5d06193a7ad" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ballot_reentrant.sol", - "hash": "8455c3da3acf55f5dadcab028ea000c54b2f4727" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ballot_withoutWarnings.sol", - "hash": "416df05400faa41cdaac7b3db13ed8fab4c0016e" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ballot.sol", - "hash": "ab3bbb75e87fafd0d2dfcb7b8f30a7a729ac4eb4" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/blockLevelCompare.sol", - "hash": "1b8af64afd3724d76780f3f5fc4fec9fb708a3e6" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/cross_contract.sol", - "hash": "db858bc9c8e67c95da32fa779b52a2ff4290435f" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ctor.sol", - "hash": "c43dd240f5aafd19c32c937de567290c08023040" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/deleteDynamicArray.sol", - "hash": "5a21fe3c64cee39ee4257dcd624e53d73ebfa20b" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/deleteFromDynamicArray.sol", - "hash": "aa69d134cf44a46dadec86abe2a8f05da7a3e105" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/ERC20.sol", - "hash": "e72f46a4aad28e61654374d94ae8d16c501cfa71" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/etherTransferInLoop.sol", - "hash": "3b8a59c1f3db24f35ac2d60433dfb09b90e4bf14" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/forgottenReturn.sol", - "hash": "7b06f8ad79ac2d9652d518ebc96a7d3d6cf6025f" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/forLoopIteratesOverDynamicArray.sol", - "hash": "65b8130d2e5095a7a7546fdf1ad18b729df34027" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/functionParameters.sol", - "hash": "c90e55a45a9ffac45051d12513452f7715dd4493" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/globals.sol", - "hash": "7cdf4c1cb00a88f941d2947b5a8c3f131254f220" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/inheritance.sol", - "hash": "21e20512b59d8560fcf41e0e50ff54de064fd506" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/intDivisionTruncate.sol", - "hash": "fe0654af9a3cb6960d8dfc6bd11ba511a7a288e1" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/KingOfTheEtherThrone.sol", - "hash": "565f2cf980d5acb9ae70347e523e56594ae0d56e" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/library.sol", - "hash": "b377da54b48d427c2f5164c82fbce8b3101cf839" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/loops.sol", - "hash": "23089d4732518fdd4037dcef838cbec38ce7392d" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/modifier1.sol", - "hash": "839e702b7ab8c2ae799d8b09a206cf7c645ac814" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/modifier2.sol", - "hash": "ec24515a84223f96c59838148926813087a16d03" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/notReentrant.sol", - "hash": "b396c5ad247a75d88b2bceb74cebcb4972cc72d7" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/reentrant.sol", - "hash": "39aa13444e13716ce560a1057eab233685c7c491" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/selfdestruct.sol", - "hash": "6bbae7ba5bbbae076d33265d125e1eb1d0a1fd24" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/stringBytesLength.sol", - "hash": "ca1f78dc095a43dce31b5106fb6d4f59eda0b459" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/structReentrant.sol", - "hash": "44591d5514753bad2d52a5476ae765424ba1319e" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/thisLocal.sol", - "hash": "d10271c5c9321bd2beebb1e578dd89174b476a3f" - }, - { - "file": "libs/remix-analyzer/test/analysis/test-contracts/solidity-v0.5/transfer.sol", - "hash": "aca7cb29c0ee2fde04b0f09081d1a1496014faeb" - }, - { - "file": "libs/remix-analyzer/test/tests.ts", - "hash": "c6f248c71c472e85128e3f681c568e194a591f1b" - }, - { - "file": "libs/remix-analyzer/tsconfig.json", - "hash": "751eaf755d4e659c1dadb5a010db5b3b5ef7492b" - }, - { - "file": "libs/remix-analyzer/tsconfig.lib.json", - "hash": "f8c817af2a55daf384b7380a20688c54d75eb8a4" - } - ] - } - }, - "remix-solidity": { - "name": "remix-solidity", - "type": "lib", - "data": { - "name": "remix-solidity", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-solidity/src", - "projectType": "library", - "implicitDependencies": [ - "remix-lib" - ], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-solidity", - "main": "libs/remix-solidity/src/index.ts", - "tsConfig": "libs/remix-solidity/tsconfig.lib.json", - "updateBuildableProjectDepsInPackageJson": false, - "assets": [ - "libs/remix-solidity/*.md" - ] - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-solidity/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-solidity", - "files": [ - { - "file": "libs/remix-solidity/.eslintrc", - "hash": "f57f93144edfd987a71b8c065a0c6ddbbdb24026" - }, - { - "file": "libs/remix-solidity/.npmignore", - "hash": "aa8e45f12bce4c9ccf69652a97bd54ffc43c7123" - }, - { - "file": "libs/remix-solidity/package.json", - "hash": "e6289e78c4eab2565ca1938d4438ded7333ac247", - "deps": [ - "npm:@ethereumjs/block", - "npm:@ethereumjs/tx", - "npm:@ethereumjs/util", - "npm:@ethereumjs/vm", - "remix-lib", - "npm:async", - "npm:eslint-scope", - "npm:ethers", - "npm:ethjs-util", - "npm:minixhr", - "npm:semver", - "npm:solc", - "npm:string-similarity", - "npm:web3", - "npm:@babel/core", - "npm:@babel/plugin-transform-object-assign", - "npm:@babel/preset-env", - "npm:@babel/preset-stage-0", - "npm:@types/node", - "npm:babel-eslint", - "npm:babelify", - "npm:typescript" - ] - }, - { - "file": "libs/remix-solidity/project.json", - "hash": "71785eb33527b2018fa1ea2178eddbc8b8234be6" - }, - { - "file": "libs/remix-solidity/README.md", - "hash": "45f0cda698ada4e18ffb54281161b0482a067b28" - }, - { - "file": "libs/remix-solidity/src/compiler/compiler-abstract.ts", - "hash": "84e2ec3373a98e75cc1457d33a09897fb1352dc6" - }, - { - "file": "libs/remix-solidity/src/compiler/compiler-helpers.ts", - "hash": "3097eeab28cbd27c1688bd14807aa172bdf5f025" - }, - { - "file": "libs/remix-solidity/src/compiler/compiler-input.ts", - "hash": "8598c9dfd45167919684d95e105fd69a176b0903" - }, - { - "file": "libs/remix-solidity/src/compiler/compiler-utils.ts", - "hash": "456264aa037d06b2453c4189db3f6ae1c63db4c2", - "deps": [ - "npm:semver" - ] - }, - { - "file": "libs/remix-solidity/src/compiler/compiler.ts", - "hash": "86e842d7791a11b68abe4453d1b24156edbee242", - "deps": [ - "npm:solc" - ] - }, - { - "file": "libs/remix-solidity/src/compiler/helper.ts", - "hash": "f4eb8e3f217b804ec22901583dc86c72d95079f3" - }, - { - "file": "libs/remix-solidity/src/compiler/types.ts", - "hash": "d1001755c057c041ec4cecca0a3af01811bd7fe8" - }, - { - "file": "libs/remix-solidity/src/index.ts", - "hash": "b9db8be3be8d0303cf5490835818be038a92c866" - }, - { - "file": "libs/remix-solidity/src/lib/es-web-worker/compiler-worker.ts", - "hash": "96bac07806ab15a2885be6364581da9b8206c9fb", - "deps": [ - "npm:solc" - ] - }, - { - "file": "libs/remix-solidity/src/lib/es-web-worker/es-web-worker-handler.ts", - "hash": "356505c12d7ac97802e7d495806dba40bf253c53" - }, - { - "file": "libs/remix-solidity/src/lib/eventManager.ts", - "hash": "c8c1002430bf954e81145d6ebcb0a99f4bd9d60e" - }, - { - "file": "libs/remix-solidity/tests/compiler-input.spec.ts", - "hash": "3dc247624b2f2e7d70f6dcb1f5d01dd0529d779b" - }, - { - "file": "libs/remix-solidity/tsconfig.json", - "hash": "eb1415fa71c5cce2049880364d9ef4f88b929559" - }, - { - "file": "libs/remix-solidity/tsconfig.lib.json", - "hash": "b7f44e548b4bbd34972de1b0ca3cd3cfaae649e2" - } - ] - } - }, - "walletconnect": { - "name": "walletconnect", - "type": "app", - "data": { - "name": "walletconnect", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/walletconnect/src", - "projectType": "application", - "implicitDependencies": [], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/walletconnect", - "index": "apps/walletconnect/src/index.html", - "baseHref": "./", - "main": "apps/walletconnect/src/main.tsx", - "polyfills": "apps/walletconnect/src/polyfills.ts", - "tsConfig": "apps/walletconnect/tsconfig.app.json", - "assets": [ - "apps/walletconnect/src/profile.json" - ], - "styles": [ - "apps/walletconnect/src/css/app.css", - "apps/walletconnect/src/css/index.css" - ], - "scripts": [], - "webpackConfig": "apps/walletconnect/webpack.config.js" - }, - "configurations": { - "development": {}, - "production": { - "fileReplacements": [ - { - "replace": "apps/walletconnect/src/environments/environment.ts", - "with": "apps/walletconnect/src/environments/environment.prod.ts" - } - ] - } - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "walletconnect:build", - "hmr": true, - "baseHref": "/" - }, - "configurations": { - "development": { - "buildTarget": "walletconnect:build:development", - "port": 2023 - }, - "production": { - "buildTarget": "walletconnect:build:production" - } - } - } - }, - "tags": [], - "root": "apps/walletconnect", - "files": [ - { - "file": "apps/walletconnect/project.json", - "hash": "b8baae9b60efab3f08e6da534b90aca3c490f5d7" - }, - { - "file": "apps/walletconnect/src/app/app.tsx", - "hash": "7cecd906c547ea5baef394a46260b24bfe015380", - "deps": [ - "npm:react", - "npm:@fortawesome/fontawesome-free", - "npm:@web3modal/ethereum" - ] - }, - { - "file": "apps/walletconnect/src/app/walletConnectUI.tsx", - "hash": "471f2de6b0741a69af41f0f17540920653053df0", - "deps": [ - "npm:@web3modal/react", - "npm:wagmi" - ] - }, - { - "file": "apps/walletconnect/src/css/app.css", - "hash": "74b5e053450a48a6bdb4d71aad648e7af821975c" - }, - { - "file": "apps/walletconnect/src/css/index.css", - "hash": "ec2585e8c0bb8188184ed1e0703c4c8f2a8419b0" - }, - { - "file": "apps/walletconnect/src/index.html", - "hash": "f228a9aae8ad9186d10caa44799bc535e9e09cb9" - }, - { - "file": "apps/walletconnect/src/logo.svg", - "hash": "267b6f5b78f1f246bda5c5ddd44de8ea11d1544f" - }, - { - "file": "apps/walletconnect/src/main.tsx", - "hash": "b63438d84608f33eb5088295999f60daabcad4a5", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/walletconnect/src/polyfills.ts", - "hash": "2adf3d05b6fcf479dd61c74f6bda95d9edb6ac6b", - "deps": [ - "npm:core-js", - "npm:regenerator-runtime" - ] - }, - { - "file": "apps/walletconnect/src/profile.json", - "hash": "72bb3adc872dedc5ef70d9841178a79dadd3d22b" - }, - { - "file": "apps/walletconnect/src/services/constant.ts", - "hash": "497ddc5357c18e2b3986b1bac0dd8dd32b27ca5d" - }, - { - "file": "apps/walletconnect/src/services/WalletConnectRemixClient.ts", - "hash": "87163650b5d92967a8561f1b4be86cfeba851bed", - "deps": [ - "npm:@remixproject/plugin", - "npm:@remixproject/plugin-webview", - "npm:@web3modal/ethereum", - "npm:wagmi", - "npm:viem", - "npm:events" - ] - }, - { - "file": "apps/walletconnect/tsconfig.app.json", - "hash": "2272b8a388c56c760e15a8d8e64a4a40e13a4315" - }, - { - "file": "apps/walletconnect/tsconfig.json", - "hash": "3b6130a0a823f45efa53e66d3d98f20f751420e3" - }, - { - "file": "apps/walletconnect/webpack.config.js", - "hash": "51de9dd8157d3f65499bf909313037f1b4a64978", - "deps": [ - "npm:@nrwl/webpack", - "npm:webpack", - "npm:terser-webpack-plugin", - "npm:css-minimizer-webpack-plugin" - ] - } - ] - } - }, - "remix-debug": { - "name": "remix-debug", - "type": "lib", - "data": { - "name": "remix-debug", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-debug/src", - "projectType": "library", - "implicitDependencies": [ - "remix-lib", - "remix-astwalker" - ], - "targets": { - "test": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "configurations": {} - }, - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-debug", - "main": "libs/remix-debug/src/index.ts", - "tsConfig": "libs/remix-debug/tsconfig.lib.json", - "updateBuildableProjectDepsInPackageJson": false, - "assets": [ - { - "glob": "rdb", - "input": "libs/remix-debug/bin/", - "output": "bin/" - }, - { - "glob": "*.md", - "input": "libs/remix-debug/", - "output": "/" - } - ] - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-debug/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-debug", - "files": [ - { - "file": "libs/remix-debug/.eslintrc", - "hash": "88ae470657c5888a87b2483f492578379f3d8e1b" - }, - { - "file": "libs/remix-debug/.npmignore", - "hash": "b59f7e3a95a4d3f2b168d9c8e330be591fc49a6b" - }, - { - "file": "libs/remix-debug/bin/rdb", - "hash": "8ebf4f1b8b1ad2ce263b9685d9b88c32aef4f4c3" - }, - { - "file": "libs/remix-debug/compilation.json", - "hash": "323166a4ad68d0b425c70d7f379841c138335010" - }, - { - "file": "libs/remix-debug/package.json", - "hash": "5114d2bc8aedcaac9c0b852189c2e9e63d5c9ffb", - "deps": [ - "npm:@ethereumjs/block", - "npm:@ethereumjs/common", - "npm:@ethereumjs/tx", - "npm:@ethereumjs/util", - "npm:@ethereumjs/vm", - "remix-astwalker", - "remix-lib", - "remix-simulator", - "remix-solidity", - "npm:ansi-gray", - "npm:async", - "npm:color-support", - "npm:commander", - "npm:deep-equal", - "npm:ethers", - "npm:ethjs-util", - "npm:express-ws", - "npm:merge", - "npm:string-similarity", - "npm:time-stamp", - "npm:web3", - "npm:@babel/core", - "npm:@babel/plugin-transform-object-assign", - "npm:@babel/preset-env", - "npm:@babel/preset-stage-0", - "npm:babel-eslint", - "npm:babelify", - "npm:solc", - "npm:tape" - ] - }, - { - "file": "libs/remix-debug/project.json", - "hash": "2f67c8b8cbf0e2da20fbeeb72c3bef538bfbdd1a" - }, - { - "file": "libs/remix-debug/README.md", - "hash": "e512499d36ed31b2348bfc487f7125b7ad4ef7a1" - }, - { - "file": "libs/remix-debug/src/cmdline/index.ts", - "hash": "b019e7ebd0c731cbf7a41f9699b0de8c54ab1b78", - "deps": [ - "npm:web3", - "npm:events" - ] - }, - { - "file": "libs/remix-debug/src/code/breakpointManager.ts", - "hash": "58c4691b36e547caa2bc08d8a5d39f782c1a6b5e" - }, - { - "file": "libs/remix-debug/src/code/codeManager.ts", - "hash": "6d644a8eba2d3dcaf0774609b2a3121084879f64" - }, - { - "file": "libs/remix-debug/src/code/codeResolver.ts", - "hash": "94be135a5c2a2b61354f5eb87795440a06e30ba5" - }, - { - "file": "libs/remix-debug/src/code/codeUtils.ts", - "hash": "f9784bb135f1fb9097d9acf1db2b8657384a1db1", - "deps": [ - "npm:@ethereumjs/common", - "npm:@ethereumjs/evm" - ] - }, - { - "file": "libs/remix-debug/src/code/disassembler.ts", - "hash": "b828fe7e5d6e54ad28f72ca092a7880b8a808fee", - "deps": [ - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-debug/src/code/opcodes.ts", - "hash": "c5c1bc655726a52128c153990a49577e016673d8" - }, - { - "file": "libs/remix-debug/src/debugger/debugger.ts", - "hash": "a939357a98248a58b45189fea48588316419d8b6" - }, - { - "file": "libs/remix-debug/src/debugger/solidityLocals.ts", - "hash": "bbc9afd179bd857fc210621ed262ea2c6307f34a" - }, - { - "file": "libs/remix-debug/src/debugger/solidityState.ts", - "hash": "237be4e7dae8c7178720bc746bba5b7348a82ee7" - }, - { - "file": "libs/remix-debug/src/debugger/stepManager.ts", - "hash": "8c0e6512d54835554336687014e3659773137ee9" - }, - { - "file": "libs/remix-debug/src/debugger/VmDebugger.ts", - "hash": "19a8be3d51632b6f80912accc608af5dfa2d9f08" - }, - { - "file": "libs/remix-debug/src/Ethdebugger.ts", - "hash": "e3a546b1b43686cb4d8fc4b5399c15db3f02e7bb" - }, - { - "file": "libs/remix-debug/src/eventManager.ts", - "hash": "f878395ed32bc30b24b3dfef52463eed44abd7db" - }, - { - "file": "libs/remix-debug/src/index.ts", - "hash": "855b53f83e20e705b9de5fae9f8cd0cbc609b53b" - }, - { - "file": "libs/remix-debug/src/init.ts", - "hash": "700c9f58221233c4651841c0f0ae30c8eb7692ac", - "deps": [ - "npm:web3" - ] - }, - { - "file": "libs/remix-debug/src/solidity-decoder/astHelper.ts", - "hash": "d3ecfa0c16abf31377d655cd8d3745e32a6538b3" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/decodeInfo.ts", - "hash": "23945164b4787fcdddae36ee6773a58e2c851eb8" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/index.ts", - "hash": "7d8d2cc8a302b40224236a80b4bd55c871ddd6d5" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/internalCallTree.ts", - "hash": "4233ec9cbbd0fec75e2bffd827907da1c1ad0db7" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/localDecoder.ts", - "hash": "d7619ce12ba4d596c5b59072a4006b5b42556720" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/solidityProxy.ts", - "hash": "462dad4d0521ab94d72eb3e530cdf411057eb9a6" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/stateDecoder.ts", - "hash": "531c7abee7dc6cbed71c0dbec5c6a4feed5a9860" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/Address.ts", - "hash": "ffe03c1c9fd560c98dec56a19c919f2666b5f69d" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/ArrayType.ts", - "hash": "29f98ab736bdb74edf01d4c7c894d27a435f153a" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/Bool.ts", - "hash": "8c067c011b76ca9f2d46f4da8d5e2893d1228299" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/DynamicByteArray.ts", - "hash": "2f5fcb6c8059c534bbf67313b51c6e4684669a08", - "deps": [ - "npm:bn.js" - ] - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/Enum.ts", - "hash": "412533f17fcc3da617401a9d49471bba77dd5c42" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/FixedByteArray.ts", - "hash": "a6704dc96236b29d4d7d49a5d13c35ea16641fe3" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/FunctionType.ts", - "hash": "ffa4b9f1c6f2028ede7b1d8c9320c1d0da76f47d" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/Int.ts", - "hash": "ed35f7929294f3340a36c5c082f4233f402531fe" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/Mapping.ts", - "hash": "870c0b01a82e9f37dad4307bcf9ec459e7897fc2", - "deps": [ - "npm:@ethereumjs/util", - "npm:bn.js" - ] - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/RefType.ts", - "hash": "3e51915077c76a83e9aa0277f4d6b2cb6e68f8e8", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/StringType.ts", - "hash": "84c6483e8e404213bf70f9698b0dc86cc745a7d9" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/Struct.ts", - "hash": "b11f12f533ea9692f2c9a77105024972656bf311" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/Uint.ts", - "hash": "8e27fc4621cca0d49d825fb975d73096c1e6a5e6" - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/util.ts", - "hash": "bd6a7f4bd1bdccc1f51d1179a336b9ae2063263d", - "deps": [ - "npm:@ethereumjs/util", - "npm:bn.js" - ] - }, - { - "file": "libs/remix-debug/src/solidity-decoder/types/ValueType.ts", - "hash": "2aeae677fe30a8bbf1c0512f93856f04e297f9d3" - }, - { - "file": "libs/remix-debug/src/source/offsetToLineColumnConverter.ts", - "hash": "a1f296c76f01d37a5d24d46e06a5f02a2b9088ad" - }, - { - "file": "libs/remix-debug/src/source/sourceLocationTracker.ts", - "hash": "c7502db960c214976931d2e0e2ad55d0d30f24da" - }, - { - "file": "libs/remix-debug/src/source/sourceMappingDecoder.ts", - "hash": "04b3bcb9ba4032fce82856da7f5545fdb8dc2f7d" - }, - { - "file": "libs/remix-debug/src/storage/mappingPreimages.ts", - "hash": "fceb13b89ec770d2d029fdcc7686c1dfc1bd8765" - }, - { - "file": "libs/remix-debug/src/storage/storageResolver.ts", - "hash": "c5522f37f9a6ae7f1a95e45f82cf654aa9b8478c" - }, - { - "file": "libs/remix-debug/src/storage/storageViewer.ts", - "hash": "ee174d3123990fe3f772e3dea9a8d489d2ac2fc5" - }, - { - "file": "libs/remix-debug/src/trace/traceAnalyser.ts", - "hash": "e4183f9942c4552a417fd544b9cc136bce02ab08" - }, - { - "file": "libs/remix-debug/src/trace/traceCache.ts", - "hash": "7c6f11527750295d4381979ec4c280cc20a2f2bd" - }, - { - "file": "libs/remix-debug/src/trace/traceHelper.ts", - "hash": "0f49bde1105be51a57d9fce8dece7aca24afadca" - }, - { - "file": "libs/remix-debug/src/trace/traceManager.ts", - "hash": "e15f8e180bce23a2f8bd17df10ed18031334cc3d" - }, - { - "file": "libs/remix-debug/src/trace/traceStepManager.ts", - "hash": "bcbccfe2e182a5dc6f2568176d91a19f950300b5" - }, - { - "file": "libs/remix-debug/test.ts", - "hash": "f0c43e43989efc4acf080b5f8c52a0cbd1f82ed9", - "deps": [ - "npm:solc" - ] - }, - { - "file": "libs/remix-debug/test/codeManager.ts", - "hash": "3ba95be60ae22f2fedca2ebb38864426a41de353", - "deps": [ - "npm:tape" - ] - }, - { - "file": "libs/remix-debug/test/debugger.ts", - "hash": "e573f3e13769ea7717fce5298679e88d8ad321b3", - "deps": [ - "npm:tape", - "npm:deep-equal", - "npm:solc" - ] - }, - { - "file": "libs/remix-debug/test/decoder/contracts/byteStorage.ts", - "hash": "89720f2a21cbf3cd59ee17fdd3bea252b9e575b8" - }, - { - "file": "libs/remix-debug/test/decoder/contracts/calldata.ts", - "hash": "62d3df3ea4dcdf592d9f689e65b60be1d688a1b7" - }, - { - "file": "libs/remix-debug/test/decoder/contracts/intLocal.ts", - "hash": "0b4a1128081cc9d4d72406b75d8405258bba62c3" - }, - { - "file": "libs/remix-debug/test/decoder/contracts/intStorage.ts", - "hash": "ec2ed7719e4de5e27380f1ba5d38e0f39ca40bb5" - }, - { - "file": "libs/remix-debug/test/decoder/contracts/mappingStorage.ts", - "hash": "57c5f58a93020916203b43cc0e35067de22485f1" - }, - { - "file": "libs/remix-debug/test/decoder/contracts/miscContracts.ts", - "hash": "7e8f9214be93c3f67b45d56c0665ad8b45321f78" - }, - { - "file": "libs/remix-debug/test/decoder/contracts/miscLocal.ts", - "hash": "2447e2f9590f848cbce2b04db4e5edd6acbb2497" - }, - { - "file": "libs/remix-debug/test/decoder/contracts/simpleContract.ts", - "hash": "bc4200ab668bdc934c5ffd5b7e362a54d3c1120a" - }, - { - "file": "libs/remix-debug/test/decoder/contracts/structArrayLocal.ts", - "hash": "c8391005d8b9cb782ade7304cba603d0d825b0bf" - }, - { - "file": "libs/remix-debug/test/decoder/contracts/structArrayStorage.ts", - "hash": "5c38132b4cd5b9f5a25610eb925ff785ed116886" - }, - { - "file": "libs/remix-debug/test/decoder/decodeInfo.ts", - "hash": "cd2b8cf94d37564485196879dded1ddb1f9994b2", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-debug/test/decoder/localDecoder.ts", - "hash": "e8e92d25f2256d4de9417d844a717dbf4cb7bc2d", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-debug/test/decoder/localsTests/calldata.ts", - "hash": "c198840b7a0796d30695ae6a974fb213b0e20f9d", - "deps": [ - "npm:deep-equal" - ] - }, - { - "file": "libs/remix-debug/test/decoder/localsTests/helper.ts", - "hash": "c041f4364ae5c9aa886243cec16208371c561274" - }, - { - "file": "libs/remix-debug/test/decoder/localsTests/int.ts", - "hash": "72d02c145b3580c5218d9a9c92bc38a86b9a2ead" - }, - { - "file": "libs/remix-debug/test/decoder/localsTests/misc.ts", - "hash": "6ea357fc420332c6b4bb53562c335407e2705337" - }, - { - "file": "libs/remix-debug/test/decoder/localsTests/misc2.ts", - "hash": "4f4342c8b535552976f0132ac764d5028fe94028" - }, - { - "file": "libs/remix-debug/test/decoder/localsTests/structArray.ts", - "hash": "f060199cbe0b0504d30b8a5beef01f5d9d5b317b" - }, - { - "file": "libs/remix-debug/test/decoder/mockStorageResolver.ts", - "hash": "63cbb6d5b39636108ed20cc964bfbd2cb96290b3" - }, - { - "file": "libs/remix-debug/test/decoder/stateTests/mapping.ts", - "hash": "b633be9c8f043d7883fb4aa9c9b09407474cbc60", - "deps": [ - "npm:solc", - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-debug/test/decoder/storageDecoder.ts", - "hash": "9c1e3b0535babc9d8128e19bad0bcb4058f07ac6", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-debug/test/decoder/storageLocation.ts", - "hash": "c65f368c9233993a94ef7257556845fe9339336c", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-debug/test/disassembler.ts", - "hash": "406994975d188bc755dbaa9014ca8c3ff4a6df0a", - "deps": [ - "npm:tape" - ] - }, - { - "file": "libs/remix-debug/test/helpers/compilerHelper.ts", - "hash": "542d10a1b99b60882692e0c44fe431939593489c" - }, - { - "file": "libs/remix-debug/test/init.ts", - "hash": "547d5e1d6e0238417c87dca7d04cbaa230b67758" - }, - { - "file": "libs/remix-debug/test/resources/ast.ts", - "hash": "03fad53a77e3f85f02272bd18b3f3bd170a77ae2" - }, - { - "file": "libs/remix-debug/test/resources/sourceMapping.ts", - "hash": "80f1a698ee745ae667cc9f51b8c243c077516d68" - }, - { - "file": "libs/remix-debug/test/resources/testWeb3.json", - "hash": "f26cc04b84d0c96f24afa51b8302e75297f27ceb" - }, - { - "file": "libs/remix-debug/test/resources/testWeb3.ts", - "hash": "e91f584fd4a994510b4d46275500976e14993074" - }, - { - "file": "libs/remix-debug/test/resources/traceWithABIEncoder.json", - "hash": "db1518174c57d5c4b78d23a525e6b8880e91ee34" - }, - { - "file": "libs/remix-debug/test/sol/ballot.sol", - "hash": "ec43956ce931bb1fae4bea38c862e72b6cdcc40e" - }, - { - "file": "libs/remix-debug/test/sol/simple_storage.sol", - "hash": "00b1554807d6e83f55a6a043cbc8d1b72872cdda" - }, - { - "file": "libs/remix-debug/test/sourceLocationTracker.ts", - "hash": "2b5ad856f9c9502591edf4889c2de790acdb0166", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-debug/test/sourceMappingDecoder.ts", - "hash": "e9a41f128b229a1e443a8895ddf35008c1fce911", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-debug/test/tests.ts", - "hash": "87f8c01972ef0b03ec70436654c3bb82198d4104" - }, - { - "file": "libs/remix-debug/test/traceManager.ts", - "hash": "8128e21ac82d87005cb64c2ceae7c9f4dc2f0cfa", - "deps": [ - "npm:tape" - ] - }, - { - "file": "libs/remix-debug/test/vmCall.ts", - "hash": "56d15729e970f28166187e78b822718dedfe4948", - "deps": [ - "npm:@ethereumjs/util", - "npm:web3" - ] - }, - { - "file": "libs/remix-debug/tsconfig.json", - "hash": "d66e6f3252632ca64ecfbeed370896570b9a1a05" - }, - { - "file": "libs/remix-debug/tsconfig.lib.json", - "hash": "b0cb638211167ff4f93fd9a37a6b77792626c10d" - } - ] - } - }, - "remix-tests": { - "name": "remix-tests", - "type": "lib", - "data": { - "name": "remix-tests", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-tests/src", - "projectType": "library", - "implicitDependencies": [ - "remix-lib", - "remix-simulator", - "remix-solidity" - ], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-tests", - "main": "libs/remix-tests/src/index.ts", - "tsConfig": "libs/remix-tests/tsconfig.lib.json", - "updateBuildableProjectDepsInPackageJson": false, - "assets": [ - { - "glob": "remix-tests", - "input": "libs/remix-tests/bin/", - "output": "bin/" - }, - { - "glob": "*.md", - "input": "libs/remix-tests/", - "output": "/" - } - ] - }, - "configurations": {} - }, - "test": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-tests/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-tests", - "files": [ - { - "file": "libs/remix-tests/.eslintrc", - "hash": "f57f93144edfd987a71b8c065a0c6ddbbdb24026" - }, - { - "file": "libs/remix-tests/.npmignore", - "hash": "aee9a85bad853d20d7294e16cd9c1e6083e851ed" - }, - { - "file": "libs/remix-tests/bin/remix-tests", - "hash": "3c14572035f34f95fefeefa769bec73f2c334536" - }, - { - "file": "libs/remix-tests/examples/simple_storage_test.sol", - "hash": "3fe9dd08cd12a81b406d7021edc8aadc68ef39ae" - }, - { - "file": "libs/remix-tests/examples/simple_storage.sol", - "hash": "278155d1f1652e1da2ac7fab7d12bbf57b01e517" - }, - { - "file": "libs/remix-tests/examples/simple_storage2_test.sol", - "hash": "caa4de9bbae8f3272aed0251415705f5977151b8" - }, - { - "file": "libs/remix-tests/LICENSE.md", - "hash": "e6d34d264bddc6275f6829e79973c603391f07cc" - }, - { - "file": "libs/remix-tests/package.json", - "hash": "b6fe5fbf6817998597f5055900b0a9ad1e4e271d", - "deps": [ - "npm:@erebos/bzz-node", - "npm:@ethereumjs/block", - "npm:@ethereumjs/common", - "npm:@ethereumjs/tx", - "npm:@ethereumjs/util", - "npm:@ethereumjs/vm", - "remix-lib", - "remix-simulator", - "remix-solidity", - "remix-url-resolver", - "npm:ansi-gray", - "npm:async", - "npm:axios", - "npm:change-case", - "npm:color-support", - "npm:colors", - "npm:commander", - "npm:deep-equal", - "npm:ethers", - "npm:ethjs-util", - "npm:express-ws", - "npm:merge", - "npm:signale", - "npm:solc", - "npm:string-similarity", - "npm:time-stamp", - "npm:tslib", - "npm:web3", - "npm:winston", - "npm:@babel/preset-env", - "npm:@types/mocha", - "npm:@types/node", - "npm:mocha", - "npm:ts-node", - "npm:typescript" - ] - }, - { - "file": "libs/remix-tests/project.json", - "hash": "e2e4741e35847e68fe8c2283815fa0ccc7ae35a7" - }, - { - "file": "libs/remix-tests/README.md", - "hash": "81a3bc6aaf5526581a1d3cc8a90f1b85d3770a28" - }, - { - "file": "libs/remix-tests/sol/tests_accounts.sol.ts", - "hash": "1d9533a61381179c42eca36599d51b2363dc3fae" - }, - { - "file": "libs/remix-tests/sol/tests.sol.ts", - "hash": "84a8143510195bcda5b6fdd3b938f6d64501c083" - }, - { - "file": "libs/remix-tests/src/assertionEvents.ts", - "hash": "f0d0f194280364700c49142ca07f9f681465c7bd" - }, - { - "file": "libs/remix-tests/src/compiler.ts", - "hash": "591609c5a814c8457ed4573012e798d26bec9b9e", - "deps": [ - "npm:async", - "npm:deep-equal" - ] - }, - { - "file": "libs/remix-tests/src/deployer.ts", - "hash": "d3164eb285af643d04cfbfc699ae6dd0844d8179", - "deps": [ - "npm:async", - "npm:web3" - ] - }, - { - "file": "libs/remix-tests/src/fileSystem.ts", - "hash": "10a9301b96135af79e8f71b0cae7622a007dc7f4" - }, - { - "file": "libs/remix-tests/src/index.ts", - "hash": "5adef21ecf6b274be4b25f7c6e982e1819d1c9f8" - }, - { - "file": "libs/remix-tests/src/logger.ts", - "hash": "c82b2b4d4ef67526982178e38c24ea7d51e59071", - "deps": [ - "npm:colors", - "npm:winston", - "npm:time-stamp", - "npm:color-support" - ] - }, - { - "file": "libs/remix-tests/src/run.ts", - "hash": "116da1cb28ec45233fff6d7ad3865a0268aa1bd8", - "deps": [ - "npm:commander", - "npm:web3", - "npm:axios", - "npm:colors" - ] - }, - { - "file": "libs/remix-tests/src/runTestFiles.ts", - "hash": "a811f9b441b7649955b2c474b2bd1d2f54727f9d", - "deps": [ - "npm:async", - "npm:colors", - "npm:web3", - "npm:util", - "npm:signale" - ] - }, - { - "file": "libs/remix-tests/src/runTestSources.ts", - "hash": "f6cb8cbcf33ea2c17d14ac72a6a9fb5f7cfab9f1", - "deps": [ - "npm:async", - "npm:web3", - "npm:events", - "npm:colors" - ] - }, - { - "file": "libs/remix-tests/src/testRunner.ts", - "hash": "773178606826af122ef78a17c49636c0ba7053ed", - "deps": [ - "npm:async", - "npm:change-case", - "npm:web3" - ] - }, - { - "file": "libs/remix-tests/src/types.ts", - "hash": "fb03e9488785b155b35e04665cf017fec0f36713" - }, - { - "file": "libs/remix-tests/tests/examples_0/assert_equal_test.sol", - "hash": "79ebc33b78d80404b402a3175ad0d15c0e347120" - }, - { - "file": "libs/remix-tests/tests/examples_0/assert_greaterThan_test.sol", - "hash": "0dab742ea03eacb11b450005c7d58a67e5174ba0" - }, - { - "file": "libs/remix-tests/tests/examples_0/assert_lesserThan_test.sol", - "hash": "f6468ec952b26bfcae9e470fc5cc2d98b373a4e8" - }, - { - "file": "libs/remix-tests/tests/examples_0/assert_notEqual_test.sol", - "hash": "f8f6a01fb65334e6fbe6ff154842481d3f295504" - }, - { - "file": "libs/remix-tests/tests/examples_0/assert_ok_test.sol", - "hash": "497d0dd7ecee0da797dd767a61fc15f7481ccec3" - }, - { - "file": "libs/remix-tests/tests/examples_1/simple_storage_test.sol", - "hash": "958788563a067149ab496b96799c225f746c873a" - }, - { - "file": "libs/remix-tests/tests/examples_1/simple_storage.sol", - "hash": "c218711d60ab0e77abe75d2b581d6b19c473d343" - }, - { - "file": "libs/remix-tests/tests/examples_2/simple_storage_test.sol", - "hash": "a0c3a0d6ca2e4c932c34fa06737ab684af7e6110" - }, - { - "file": "libs/remix-tests/tests/examples_2/simple_storage.sol", - "hash": "7ee2ffdc6dd12043df21ea6fc51e886cadb6c5ba" - }, - { - "file": "libs/remix-tests/tests/examples_3/simple_string_test.sol", - "hash": "3157f53c358013b607bdef9b92d262f8947076f2" - }, - { - "file": "libs/remix-tests/tests/examples_3/simple_string.sol", - "hash": "1bc847f984f8e89256fff8a110a0ce043e972995" - }, - { - "file": "libs/remix-tests/tests/examples_4/SafeMath_test.sol", - "hash": "be24d4331276efaef073776b799c9ed8c6aa25d1" - }, - { - "file": "libs/remix-tests/tests/examples_4/SafeMath.sol", - "hash": "a93aedaf44261f7e6f048318a8b3e092949e9716" - }, - { - "file": "libs/remix-tests/tests/examples_4/SafeMathProxy.sol", - "hash": "805c6d9112b9c941e9072cfb77ca8f54cf0bc1e8" - }, - { - "file": "libs/remix-tests/tests/examples_5/contract/simple_storage.sol", - "hash": "1cfbeb8f13442deb0d0b3fb7250170159dff0986" - }, - { - "file": "libs/remix-tests/tests/examples_5/lib/EvenOdd.sol", - "hash": "a1536375a6bd54d8ef379a5902f0e2c3de7f7c94" - }, - { - "file": "libs/remix-tests/tests/examples_5/test/simple_storage_test.sol", - "hash": "c5ef812a61c3ae6f7409ab686e51eabb48b562df" - }, - { - "file": "libs/remix-tests/tests/number/number_test.sol", - "hash": "3bbfbc14f0b1cd6fe536f768f5c36a1dae1c3358" - }, - { - "file": "libs/remix-tests/tests/testRunner.cli.spec.ts", - "hash": "c4824c9b8b0e0ad571c21893a8fb221c789d1480", - "deps": [ - "npm:child_process", - "npm:chai" - ] - }, - { - "file": "libs/remix-tests/tests/testRunner.spec.ts", - "hash": "56ef68cd8a6f33b61e0c2f87050da6474eb95dcb", - "deps": [ - "npm:async", - "npm:web3", - "npm:assert" - ] - }, - { - "file": "libs/remix-tests/tests/various_sender/sender_and_value_test.sol", - "hash": "1ed50021fd2db2a8fb4e8036c3eb5ddcb0c886a7" - }, - { - "file": "libs/remix-tests/tsconfig.json", - "hash": "9654edaf42e10410c507a1b54ce6a797604443f5" - }, - { - "file": "libs/remix-tests/tsconfig.lib.json", - "hash": "7b4b23c716fb164c8acc43e1b9f4efb0a6ca4374" - }, - { - "file": "libs/remix-tests/tsconfig.spec.json", - "hash": "4fa5ed9ba03d9e30526331b47a0dbad7775ef8c3" - } - ] - } - }, - "doc-viewer": { - "name": "doc-viewer", - "type": "app", - "data": { - "name": "doc-viewer", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/doc-viewer/src", - "projectType": "application", - "implicitDependencies": [], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/doc-viewer", - "index": "apps/doc-viewer/src/index.html", - "baseHref": "./", - "main": "apps/doc-viewer/src/main.tsx", - "tsConfig": "apps/doc-viewer/tsconfig.app.json", - "assets": [ - "apps/doc-viewer/src/favicon.ico", - "apps/doc-viewer/src/profile.json" - ], - "styles": [], - "scripts": [], - "webpackConfig": "apps/doc-viewer/webpack.config.js" - }, - "configurations": { - "development": {}, - "production": { - "fileReplacements": [ - { - "replace": "apps/doc-viewer/src/environments/environment.ts", - "with": "apps/doc-viewer/src/environments/environment.prod.ts" - } - ] - } - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "doc-viewer:build", - "hmr": true, - "baseHref": "/" - }, - "configurations": { - "development": { - "buildTarget": "doc-viewer:build:development", - "port": 7003 - }, - "production": { - "buildTarget": "doc-viewer:build:production" - } - } - } - }, - "tags": [], - "root": "apps/doc-viewer", - "files": [ - { - "file": "apps/doc-viewer/project.json", - "hash": "2e5455cc30c5e97d84190cef34640453f3de965b" - }, - { - "file": "apps/doc-viewer/src/app/App.tsx", - "hash": "cbb57460d092509a10d1321e5475137932355d6d", - "deps": [ - "npm:react", - "npm:react-markdown", - "npm:remark-gfm" - ] - }, - { - "file": "apps/doc-viewer/src/app/docviewer.ts", - "hash": "d6fed6e490f33c19829b8ed0813f37461191de2f", - "deps": [ - "npm:@remixproject/plugin", - "npm:@remixproject/plugin-webview", - "npm:events" - ] - }, - { - "file": "apps/doc-viewer/src/favicon.ico", - "hash": "bcd5dfd67cd0361b78123e95c2dd96031f27f743" - }, - { - "file": "apps/doc-viewer/src/index.html", - "hash": "ab3b67eef142acab2c2983c45b99a29161e382fc" - }, - { - "file": "apps/doc-viewer/src/main.tsx", - "hash": "7b8dd49ee6541bbf612ed1a116aefa00aee79141", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/doc-viewer/src/profile.json", - "hash": "64cf3dc5a53e34883e05b031110633e34cef216a" - }, - { - "file": "apps/doc-viewer/tsconfig.app.json", - "hash": "af84f21cfc8066d0302f5772b7c157e81d418617" - }, - { - "file": "apps/doc-viewer/tsconfig.json", - "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" - }, - { - "file": "apps/doc-viewer/webpack.config.js", - "hash": "1a460e3da042a86a366d332111aa06ae6547cc96", - "deps": [ - "npm:@nrwl/webpack", - "npm:@nrwl/react", - "npm:webpack", - "npm:terser-webpack-plugin", - "npm:css-minimizer-webpack-plugin" - ] - } - ] - } - }, - "etherscan": { - "name": "etherscan", - "type": "app", - "data": { - "name": "etherscan", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/etherscan/src", - "projectType": "application", - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/etherscan", - "index": "apps/etherscan/src/index.html", - "baseHref": "./", - "main": "apps/etherscan/src/main.tsx", - "polyfills": "apps/etherscan/src/polyfills.ts", - "tsConfig": "apps/etherscan/tsconfig.app.json", - "assets": [ - "apps/etherscan/src/favicon.ico", - "apps/etherscan/src/assets", - "apps/etherscan/src/profile.json" - ], - "styles": [ - "apps/etherscan/src/styles.css" - ], - "scripts": [], - "webpackConfig": "apps/etherscan/webpack.config.js" - }, - "configurations": { - "development": {}, - "production": { - "fileReplacements": [ - { - "replace": "apps/etherscan/src/environments/environment.ts", - "with": "apps/etherscan/src/environments/environment.prod.ts" - } - ] - } - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "etherscan:build", - "hmr": true, - "baseHref": "/" - }, - "configurations": { - "development": { - "buildTarget": "etherscan:build:development", - "port": 5003 - }, - "production": { - "buildTarget": "etherscan:build:production" - } - } - } - }, - "tags": [], - "root": "apps/etherscan", - "implicitDependencies": [], - "files": [ - { - "file": "apps/etherscan/.babelrc", - "hash": "e37036ce6686b3044e9c24bbf2c07e35119bc7f5" - }, - { - "file": "apps/etherscan/.browserslistrc", - "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" - }, - { - "file": "apps/etherscan/.eslintrc.json", - "hash": "a92d0f887ac1dc9e913cb3e79f08f8c9645638fa" - }, - { - "file": "apps/etherscan/project.json", - "hash": "fe53c7f39eb4e5360535f6eabd84cebf3fee40d3" - }, - { - "file": "apps/etherscan/src/app/App.css", - "hash": "74a89ee342b06c6721786a78af2a2caff800b8d9" - }, - { - "file": "apps/etherscan/src/app/app.tsx", - "hash": "501e3620ae56d046c4436bad4be3f8ecc4cfa767", - "deps": [ - "npm:react", - "npm:@remixproject/plugin-api", - "npm:@remixproject/plugin-webview" - ] - }, - { - "file": "apps/etherscan/src/app/AppContext.tsx", - "hash": "52b0c1fda8be31104170b756a1079848cbb28f4a", - "deps": [ - "npm:react", - "npm:@remixproject/plugin" - ] - }, - { - "file": "apps/etherscan/src/app/components/HeaderWithSettings.tsx", - "hash": "7eb1827fef14036da1012590993a68555a0820e4", - "deps": [ - "npm:react", - "npm:react-router-dom" - ] - }, - { - "file": "apps/etherscan/src/app/components/index.ts", - "hash": "c52e3712f0c78d5bc3fc03d8554717946ddc9f9e" - }, - { - "file": "apps/etherscan/src/app/components/SubmitButton.tsx", - "hash": "83a080ca6a3ffed085cea790110f8b496f1cbaf9", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/etherscan/src/app/hooks/useLocalStorage.tsx", - "hash": "dbef5378a847f66169733dda65bc32b2a0597a40", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/etherscan/src/app/layouts/Default.tsx", - "hash": "18ac232f0e0a05846d3aa5fa19312210282b05e5", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/etherscan/src/app/layouts/index.ts", - "hash": "9b8e6166d59b36501e9df5cf4677ce71d5f8546e" - }, - { - "file": "apps/etherscan/src/app/RemixPlugin.tsx", - "hash": "979f2c967d185d1a1e6cfe4097c6ca5e555c58ab", - "deps": [ - "npm:@remixproject/plugin" - ] - }, - { - "file": "apps/etherscan/src/app/routes.tsx", - "hash": "defe35cf2d47bd60df63243e9d94ff071b58e5fd", - "deps": [ - "npm:react", - "npm:react-router-dom" - ] - }, - { - "file": "apps/etherscan/src/app/types/index.ts", - "hash": "1a8733d6ff06c5f333bda9958250490a8ec5e7d9" - }, - { - "file": "apps/etherscan/src/app/types/Receipt.ts", - "hash": "2dd501651dd6416f15b742c8b2abe15fd934436d" - }, - { - "file": "apps/etherscan/src/app/types/ThemeType.ts", - "hash": "13b3710cd0d731554bbad09cc50efda2de02b198" - }, - { - "file": "apps/etherscan/src/app/utils/index.ts", - "hash": "b23d52e6e059d029e7e69a7b423c9774b6ae3f78" - }, - { - "file": "apps/etherscan/src/app/utils/networks.ts", - "hash": "65edafdebdd6fed4177dc09b1b5cc6e233ee95ff" - }, - { - "file": "apps/etherscan/src/app/utils/scripts.ts", - "hash": "0d204d8d557854ca74b25b7c974895e61ad91661" - }, - { - "file": "apps/etherscan/src/app/utils/utilities.ts", - "hash": "f0f92ab6f7c9d742f212f16af63449ead9bed81a", - "deps": [ - "npm:@remixproject/plugin", - "npm:axios" - ] - }, - { - "file": "apps/etherscan/src/app/utils/verify.ts", - "hash": "4dbc70f74368710b02a24053034e9a8ade7cf349", - "deps": [ - "npm:@remixproject/plugin-api", - "npm:axios", - "npm:@remixproject/plugin" - ] - }, - { - "file": "apps/etherscan/src/app/views/CaptureKeyView.tsx", - "hash": "8fd255e0c53cf0a0c69f8b3bda687e8e3c5e3029", - "deps": [ - "npm:react", - "npm:formik", - "npm:react-router-dom" - ] - }, - { - "file": "apps/etherscan/src/app/views/ErrorView.tsx", - "hash": "e5fdcd71381a249ea9d18cc6476c2e7020fc2c49", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/etherscan/src/app/views/HomeView.tsx", - "hash": "0d3039dfa6ef4ec76fe147b0ae7b7be17d482f78", - "deps": [ - "npm:react", - "npm:react-router-dom" - ] - }, - { - "file": "apps/etherscan/src/app/views/index.ts", - "hash": "c483228ece4a82c70c296660b75fbc82b102f6b8" - }, - { - "file": "apps/etherscan/src/app/views/ReceiptsView.tsx", - "hash": "862e72684ece2cbca66099329ae91e82d160b821", - "deps": [ - "npm:react", - "npm:formik", - "npm:react-router-dom", - "npm:react-bootstrap" - ] - }, - { - "file": "apps/etherscan/src/app/views/VerifyView.tsx", - "hash": "57e6c6f97a02e6782531925eea0f64bb59809965", - "deps": [ - "npm:react", - "npm:web3", - "npm:@remixproject/plugin", - "npm:formik" - ] - }, - { - "file": "apps/etherscan/src/assets/.gitkeep", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "apps/etherscan/src/environments/environment.prod.ts", - "hash": "3612073bc31cd4c1f5d6cbb00318521e9a61bd8a" - }, - { - "file": "apps/etherscan/src/environments/environment.ts", - "hash": "d9370e924b51bc67ecddee7fc3b6693681a324b6" - }, - { - "file": "apps/etherscan/src/favicon.ico", - "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" - }, - { - "file": "apps/etherscan/src/index.html", - "hash": "b0ff6f578406670f55a5e00dcbc11247a093c545" - }, - { - "file": "apps/etherscan/src/main.tsx", - "hash": "353ad43f6d9c1f89f207be4e712713869acd91c1", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/etherscan/src/polyfills.ts", - "hash": "2adf3d05b6fcf479dd61c74f6bda95d9edb6ac6b", - "deps": [ - "npm:core-js", - "npm:regenerator-runtime" - ] - }, - { - "file": "apps/etherscan/src/profile.json", - "hash": "f1432cae8859a1fa9e176c62d146ea91ad3e15af" - }, - { - "file": "apps/etherscan/src/styles.css", - "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" - }, - { - "file": "apps/etherscan/tsconfig.app.json", - "hash": "252904bb73871a10597dc233e4a528e13c6af9c4" - }, - { - "file": "apps/etherscan/tsconfig.json", - "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" - }, - { - "file": "apps/etherscan/webpack.config.js", - "hash": "e28638e84ed6df67e18404bf74cc7a6a11fc4625", - "deps": [ - "npm:@nrwl/webpack", - "npm:webpack", - "npm:terser-webpack-plugin", - "npm:css-minimizer-webpack-plugin" - ] - } - ] - } - }, - "remix-ide": { - "name": "remix-ide", - "type": "app", - "data": { - "name": "remix-ide", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/remix-ide/src", - "projectType": "application", - "implicitDependencies": [ - "doc-gen", - "doc-viewer", - "etherscan", - "vyper", - "solhint", - "walletconnect" - ], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/remix-ide", - "index": "apps/remix-ide/src/index.html", - "baseHref": "/", - "main": "apps/remix-ide/src/index.tsx", - "polyfills": "apps/remix-ide/src/polyfills.ts", - "tsConfig": "apps/remix-ide/tsconfig.app.json", - "assets": [ - "apps/remix-ide/src/assets", - "apps/remix-ide/src/index.html", - "apps/remix-ide/src/404.html", - "apps/remix-ide/src/favicon.ico" - ], - "styles": [], - "scripts": [], - "webpackConfig": "apps/remix-ide/webpack.config.js" - }, - "configurations": { - "development": { - "optimization": false, - "generateIndexHtml": true, - "extractCss": false - }, - "production": { - "optimization": true, - "generateIndexHtml": true, - "extractCss": false, - "vendorChunk": false - } - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "remix-ide:build" - }, - "configurations": { - "development": { - "buildTarget": "remix-ide:build:development", - "host": "0.0.0.0", - "port": 8080 - }, - "hot": { - "buildTarget": "remix-ide:build:development", - "port": 8080, - "hmr": true - }, - "production": { - "buildTarget": "remix-ide:build:production", - "port": 8080 - } - } - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "apps/remix-ide/**/*.{ts,tsx,js,jsx}" - ], - "eslintConfig": "apps/remix-ide/.eslintrc" - } - } - }, - "tags": [], - "root": "apps/remix-ide", - "files": [ - { - "file": "apps/remix-ide/_config.yml", - "hash": "c4192631f25b34d77a7f159aa0da0e3ae99c4ef4" - }, - { - "file": "apps/remix-ide/.babelrc", - "hash": "34aaeb326888e957ff8545259d58fe6ccdf97df8" - }, - { - "file": "apps/remix-ide/.dockerignore", - "hash": "3c3629e647f5ddf82548912e337bea9826b434af" - }, - { - "file": "apps/remix-ide/.env", - "hash": "c03ce830c2816cbad8ca6a968f4272c4d6e03292" - }, - { - "file": "apps/remix-ide/.eslintrc", - "hash": "3cafa9ce849c96c7942bd84cf9d0f5ba3d146ee2" - }, - { - "file": "apps/remix-ide/.gitignore", - "hash": "3e0c4b3136050a34d6ddf78d0ddae07d5601e225" - }, - { - "file": "apps/remix-ide/.npmignore", - "hash": "6ad8903c48e482c60123eb0abad3244286efda19" - }, - { - "file": "apps/remix-ide/.nvmrc", - "hash": "cc5875fabb8c2ee75a3d20f131a99c1a8a0df204" - }, - { - "file": "apps/remix-ide/.travis.yml", - "hash": "c8790fa6b88ab7decc844e935d573c1f3e1ea44f" - }, - { - "file": "apps/remix-ide/background.js", - "hash": "8b9269f940474b491f8a79bcaa2b96d8109a2d67" - }, - { - "file": "apps/remix-ide/build.yaml", - "hash": "599cbfd8f531cc7591d05d8906446e5cda8253fb" - }, - { - "file": "apps/remix-ide/ci/browser_test_plugin.sh", - "hash": "981cc45d4842c7e2fa00d32dec037dc7a48d278a" - }, - { - "file": "apps/remix-ide/ci/browser_test.sh", - "hash": "f02c550e7b4e136710a372333c3ac2ef9aa95d8e" - }, - { - "file": "apps/remix-ide/ci/browser_tests.sh", - "hash": "3070563e526497d41e440f1cd226e96b9915e086" - }, - { - "file": "apps/remix-ide/ci/build_and_publish_docker_images.sh", - "hash": "cc9247fbd9884eb48c0be510c8cf7f65b766da9b" - }, - { - "file": "apps/remix-ide/ci/copy_resources.sh", - "hash": "ab0bf9ccb2046e9ca35c1b64b1f9ba2614f4aaba" - }, - { - "file": "apps/remix-ide/ci/deploy_from_travis_remix-alpha.sh", - "hash": "c57de7fea57c4a68675409d6d6fffd1e29bd595c" - }, - { - "file": "apps/remix-ide/ci/deploy_from_travis_remix-beta.sh", - "hash": "134d9c2090c8692a76b34a81d002f58f9a846c2a" - }, - { - "file": "apps/remix-ide/ci/deploy_from_travis_remix-live.sh", - "hash": "1376cda6f028a9c0a758983b1be444a21fa82caa" - }, - { - "file": "apps/remix-ide/ci/deploy_key_remix-live-alpha.enc", - "hash": "db21779a32b98f06e94ee5e12652397cc39abbb2" - }, - { - "file": "apps/remix-ide/ci/deploy_key_remix-live.enc", - "hash": "03806ec8345d23df935f8d9f4691d2a8ba9e1540" - }, - { - "file": "apps/remix-ide/ci/download_e2e_assets.js", - "hash": "99a089174fcaf9b99bef939e5dafd6f6952c557d", - "deps": [ - "npm:child_process", - "npm:process" - ] - }, - { - "file": "apps/remix-ide/ci/downloadsoljson.sh", - "hash": "b99ed2d6b005cdaeffe543b9f95b0c1ccafee7f3" - }, - { - "file": "apps/remix-ide/ci/flaky.sh", - "hash": "15fefe4c3eae0f283031043bc3c491679e23cf39" - }, - { - "file": "apps/remix-ide/ci/lint-targets.js", - "hash": "44e71d8c0f1c93bd555835d1ab51c19c727d75bc", - "deps": [ - "npm:child_process", - "npm:process" - ] - }, - { - "file": "apps/remix-ide/ci/makeMockCompiler.js", - "hash": "601f99e8ac73092d2a9481d490c6e6d69fed4cac", - "deps": [ - "npm:solc" - ] - }, - { - "file": "apps/remix-ide/ci/publishIpfs", - "hash": "15d2dc9b66fce01465c132acd04e90d4bfc9c133" - }, - { - "file": "apps/remix-ide/ci/sauceDisconnect.js", - "hash": "a8069a669eddfc48c439bcd2ca1467aa671bb432" - }, - { - "file": "apps/remix-ide/ci/splice_tests.js", - "hash": "57cc1db31b59f3a1c28921c9289c6f8c35c7d7b8", - "deps": [ - "npm:child_process" - ] - }, - { - "file": "apps/remix-ide/contracts/app/ethereum/constitution.sol", - "hash": "8c2c9e0da9cdc3a3565f9f25a1ec0d67e914ca08" - }, - { - "file": "apps/remix-ide/contracts/app/solidity/mode.sol", - "hash": "6027379cfeb353f3d9084def0fd0880678808311" - }, - { - "file": "apps/remix-ide/contracts/ballot.sol", - "hash": "ffcc6c36096cc7f338d585bf2598922b1acc065a" - }, - { - "file": "apps/remix-ide/contracts/contract1.sol", - "hash": "4abefc018bb460313192d10fde0ed5a464aa7c43" - }, - { - "file": "apps/remix-ide/contracts/contract2.sol", - "hash": "00649b1047a763e298a52bba5d9d398e96b021b6" - }, - { - "file": "apps/remix-ide/contracts/folder1/contract_chrome_toremove.sol", - "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" - }, - { - "file": "apps/remix-ide/contracts/folder1/contract_chrome.sol", - "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" - }, - { - "file": "apps/remix-ide/contracts/folder1/contract_firefox_toremove.sol", - "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" - }, - { - "file": "apps/remix-ide/contracts/folder1/contract_firefox.sol", - "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" - }, - { - "file": "apps/remix-ide/contracts/folder1/contract1.sol", - "hash": "11122d3008de3f898e45207676a6280ac7041855" - }, - { - "file": "apps/remix-ide/contracts/folder1/contract2.sol", - "hash": "04f9b2eb269760ee508574fffc5882a2a44a4f4f" - }, - { - "file": "apps/remix-ide/contracts/foundry/cache/solidity-files-cache.json", - "hash": "593bdf2e362a180f9018df7c90172be5f3cbdfa8" - }, - { - "file": "apps/remix-ide/contracts/foundry/foundry.toml", - "hash": "e6810b2b5873d3b6f501ce45332456e6651eb096" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/console.sol/console.json", - "hash": "86d84188032289ce20368292cd880293d4bea7b3" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/console2.sol/console2.json", - "hash": "af841eebff91068e1a2ab0866511c17cd9ccab5e" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/Counter.s.sol/CounterScript.json", - "hash": "07594bec5ed6be5ecc24b37802882eecce3533f0" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/Counter.sol/Counter.json", - "hash": "11ebf2c45a2966fb3232adaf9cf0db410d03afe8" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/Counter.t.sol/CounterTest.json", - "hash": "cc3221aba3d2576b6ff6f0dd7fa3c0c162231722" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/Script.sol/Script.json", - "hash": "116330506d240c497466552bb9cef9e35c5c07eb" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/test.sol/DSTest.json", - "hash": "69e9e36e065f1faccb5d571762d48de366e41700" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/Test.sol/stdError.json", - "hash": "c22cd07d7ae5792f271eddfb983432b585147a0f" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/Test.sol/stdMath.json", - "hash": "ca2f51f7248fccd7b09920d84f0133b953105925" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/Test.sol/stdStorage.json", - "hash": "24619c1187961cdfe868a4e41a623dbaa7d0604c" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/Test.sol/Test.json", - "hash": "7b709817abd869fa3aa9d65540d86a9cc7dedc81" - }, - { - "file": "apps/remix-ide/contracts/foundry/out/Vm.sol/Vm.json", - "hash": "52edca964e84fc970bab98e2a8f1d5cbc7d8a75e" - }, - { - "file": "apps/remix-ide/contracts/foundry/src/Counter.sol", - "hash": "8cc4c4279539322be916078e28ab198599a6afaf" - }, - { - "file": "apps/remix-ide/contracts/hardhat/artifacts/build-info/.gitgnore", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "apps/remix-ide/contracts/hardhat/artifacts/build-info/7839ba878952cc00ff316061405f273a.json", - "hash": "3426fd4a102a33275b32b98453462f91688e5ada" - }, - { - "file": "apps/remix-ide/contracts/hardhat/artifacts/contracts/Lock.sol/.gitgnore", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "apps/remix-ide/contracts/hardhat/artifacts/contracts/Lock.sol/Lock.dbg.json", - "hash": "73802d3f5567cfea2d0e6d195c2d3e359caba798" - }, - { - "file": "apps/remix-ide/contracts/hardhat/artifacts/contracts/Lock.sol/Lock.json", - "hash": "7af0ab9260170b08d58790ad7d675f1f8ca93f44" - }, - { - "file": "apps/remix-ide/contracts/hardhat/compiler_config.json", - "hash": "9026d3afa9d217fba42ed76cb94b9620ba1e3144" - }, - { - "file": "apps/remix-ide/contracts/hardhat/contracts/Lock.sol", - "hash": "9854ce163729e94fc5281654632cc927ce6a19d7" - }, - { - "file": "apps/remix-ide/contracts/hardhat/hardhat.config.js", - "hash": "1c8e8ae35676fb7de5b3e6d016f00d2327295aee" - }, - { - "file": "apps/remix-ide/contracts/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol", - "hash": "e7091fb2265a588ca7cd6557fdd92a4823f3f157" - }, - { - "file": "apps/remix-ide/contracts/node_modules/openzeppelin-solidity/contracts/sample.sol", - "hash": "73ecf078be70af01e2d13a9d4a28024ac2b01dca" - }, - { - "file": "apps/remix-ide/contracts/README.txt", - "hash": "4514bcc6773ccd5534388398c2953c0e59e1722b" - }, - { - "file": "apps/remix-ide/contracts/src/gmbh/company.sol", - "hash": "8f907ed55c75c07b88c5e4a4b6af82ec0f76726a" - }, - { - "file": "apps/remix-ide/contracts/src/gmbh/contract.sol", - "hash": "480c1f4f777417d8f60a45e0a484c339416f33e8" - }, - { - "file": "apps/remix-ide/contracts/src/gmbh/test.sol", - "hash": "e04a8bc178321b6cb0f6dc1af0020ffce8c8f865" - }, - { - "file": "apps/remix-ide/contracts/src/leasing.sol", - "hash": "ce3c278aa19abbf74d053b9b582348805eb7e17a" - }, - { - "file": "apps/remix-ide/contracts/src/ug/finance.sol", - "hash": "0f0dc02842b189472e225136eef5e2aa1f0a2a2a" - }, - { - "file": "apps/remix-ide/contracts/src/voting.sol", - "hash": "37a7a96905030038a1049e1e68fdf0b34fa7befa" - }, - { - "file": "apps/remix-ide/contracts/test/client/credit.sol", - "hash": "6a8bd4fad8915d447b96e2039313862a94bff760" - }, - { - "file": "apps/remix-ide/contracts/tests/Ballot_test.sol", - "hash": "452a5433b44c459e3dee7bf750f168643b9d426e" - }, - { - "file": "apps/remix-ide/contracts/truffle/build/contracts/.gitignore", - "hash": "8b137891791fe96927ad78e64b0aad7bded08bdc" - }, - { - "file": "apps/remix-ide/contracts/truffle/contracts/Migrations.sol", - "hash": "e29a358170e1da815ad61e0aefb24f648aa79c7f" - }, - { - "file": "apps/remix-ide/contracts/truffle/truffle-config.js", - "hash": "1c8e8ae35676fb7de5b3e6d016f00d2327295aee" - }, - { - "file": "apps/remix-ide/docker-compose.yaml", - "hash": "f006b5370006a698575dbd3b21e7461ab5d6c87c" - }, - { - "file": "apps/remix-ide/Dockerfile", - "hash": "7bae0b70ac907cbbef672544b722baf935add785" - }, - { - "file": "apps/remix-ide/Dockerfile.dev", - "hash": "f4d6ba57382e2b434650beffed6dc059682844b7" - }, - { - "file": "apps/remix-ide/LICENSE.md", - "hash": "f4f62e644debc59ab3f78f046f04801079d83246" - }, - { - "file": "apps/remix-ide/manifest.json", - "hash": "c00da5630ba59d4b6becb3c9de3a7d9d1c44673d" - }, - { - "file": "apps/remix-ide/meetings.md", - "hash": "ec606da328bc26420e701bd45744746a823de816" - }, - { - "file": "apps/remix-ide/nginx.conf", - "hash": "05d9c01c525d279e2294c8133475da25f44ea951" - }, - { - "file": "apps/remix-ide/project.json", - "hash": "99b463867d69b84daa962d0e88eeb5f39ede2220" - }, - { - "file": "apps/remix-ide/release-process.md", - "hash": "511c8ad74e8fa37632374f038791ecae96689bd4" - }, - { - "file": "apps/remix-ide/remix-screenshot-400h.png", - "hash": "74ac1e57dc377a5ec86b11583946b35e4200e420" - }, - { - "file": "apps/remix-ide/research-project.md", - "hash": "1d0a37db0e4fdbaaf1df32ff454bc65536546225" - }, - { - "file": "apps/remix-ide/src/404.html", - "hash": "28268a1ab10f32c81a05bce326f58e9ad13328c0" - }, - { - "file": "apps/remix-ide/src/app.js", - "hash": "27e2e5de88340742a9980c5157e4ddbd0ade69dc", - "deps": [ - "npm:is-electron" - ] - }, - { - "file": "apps/remix-ide/src/app/components/hidden-panel.tsx", - "hash": "6aa78a4052234e4072495ab256924cc2ec5d8456", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/components/main-panel.tsx", - "hash": "0eb7487b94a48ab0068a4381e4f373fbfd13c7ba", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/components/panel.ts", - "hash": "4dade1fbcafb7e750f842b0dd1809c41ce34ad97", - "deps": [ - "npm:react", - "npm:events", - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/components/plugin-manager-component.js", - "hash": "d658915f1b179f80b48019feace0dbcf852f51dc", - "deps": [ - "npm:@remixproject/engine-web", - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/components/preload.tsx", - "hash": "4cca83a00a26fcb8c05a40cbbc8fa78a131f7a33", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/remix-ide/src/app/components/side-panel.tsx", - "hash": "8b58171492608f1640dbb40ab447c88439c0b596", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/components/styles/preload.css", - "hash": "031263b43fadae7c40716e9ccb01777da746c23d" - }, - { - "file": "apps/remix-ide/src/app/components/vertical-icons.tsx", - "hash": "87f78ffd40aaae3ae56fd31c5b4cda7332683072", - "deps": [ - "npm:react", - "npm:@remixproject/engine", - "npm:events", - "npm:@remixproject/plugin-utils" - ] - }, - { - "file": "apps/remix-ide/src/app/editor/editor.js", - "hash": "2de1353d157fd6da49121e0c431e6ed0b3bff481", - "deps": [ - "npm:react", - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/files/dgitProvider.js", - "hash": "d4c78d809933c12062d436050dd591a9ebe62922", - "deps": [ - "npm:@remixproject/engine", - "npm:isomorphic-git", - "npm:ipfs-http-client", - "npm:file-saver", - "npm:jszip", - "npm:form-data", - "npm:axios" - ] - }, - { - "file": "apps/remix-ide/src/app/files/fileManager.ts", - "hash": "2c3dcccda0a210cedfe446f8ccf8855ed64d1af9", - "deps": [ - "npm:file-saver", - "npm:jszip", - "npm:@remixproject/engine", - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/app/files/fileProvider.js", - "hash": "9b7e63efdfdd656d36b6450f47f54780fe529270", - "deps": [ - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/app/files/fileSystem.ts", - "hash": "80840f617ff8bf20315aa2941a23395c66f39ce0" - }, - { - "file": "apps/remix-ide/src/app/files/filesystems/fileSystemUtility.ts", - "hash": "9fc716b5c11c19ca3d0404dcc26ea87da02209cc", - "deps": [ - "npm:ethers", - "npm:jszip" - ] - }, - { - "file": "apps/remix-ide/src/app/files/filesystems/indexedDB.ts", - "hash": "aae0d6a5ebcbe355af3716f583dc6104d93aac7e", - "deps": [ - "npm:@isomorphic-git/lightning-fs" - ] - }, - { - "file": "apps/remix-ide/src/app/files/filesystems/localStorage.ts", - "hash": "d99c3ae296341b037c1513a61911cbf6742108a1" - }, - { - "file": "apps/remix-ide/src/app/files/foundry-handle.js", - "hash": "94efd7b04b097581dc03ebe73e810cedaf9b6f9b", - "deps": [ - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/files/git-handle.js", - "hash": "596bf7701535147b1ea1a30ac9b2425feb239135", - "deps": [ - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/files/hardhat-handle.js", - "hash": "84a2c1d28af10b674a77ef629383e63cacd87261", - "deps": [ - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/files/remixDProvider.js", - "hash": "c52055e04f7dbb884b8e24d486a80e4d16facfc1" - }, - { - "file": "apps/remix-ide/src/app/files/slither-handle.js", - "hash": "27c7b3cbd8c9c907dd0a5de6356c92138dbcee34", - "deps": [ - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/files/styles/file-explorer-styles.js", - "hash": "7ad4597f124e9bd7404bb14573bf33c25e5f3390", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/files/truffle-handle.js", - "hash": "1111cba60de810c6a171581c8a55b0cfcbaa7178", - "deps": [ - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/files/workspaceFileProvider.js", - "hash": "6193e7b486fc7a13ca828251437af428115d8e86", - "deps": [ - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/app/panels/file-panel.js", - "hash": "b391daf5bd833855c572bf6caec0a7ea59f30eac", - "deps": [ - "npm:@remixproject/engine-web", - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/panels/layout.ts", - "hash": "3a44d1f83bfa05621bbd3ac103ae5dbdfe7856b6", - "deps": [ - "npm:@remixproject/engine", - "npm:@remixproject/plugin-utils", - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/app/panels/styles/terminal-styles.js", - "hash": "81664558563fca4ebf9e3e5a65f49da3f33802a4", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/panels/tab-proxy.js", - "hash": "984efe75349644403e416a1d7748da911d052b84", - "deps": [ - "npm:react", - "npm:@remixproject/engine", - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/app/panels/terminal.js", - "hash": "83620b92641e5e3221e9aec2aa9522f4b5a276af", - "deps": [ - "npm:react", - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/code-format.ts", - "hash": "04266c161539d990fa51b8c441b2d4106179b43a", - "deps": [ - "npm:@remixproject/engine", - "npm:prettier", - "npm:js-yaml", - "npm:toml", - "npm:@jsdevtools/file-path-filter" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/code-format/index.ts", - "hash": "32f785574cd36ad7c9113f0c171b3c0a883220ba", - "deps": [ - "npm:prettier-plugin-solidity" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/code-format/parser.ts", - "hash": "0fb913fed707415cb8e91f22e8282663d2234501", - "deps": [ - "npm:solidity-comments-extractor", - "npm:semver" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/config.ts", - "hash": "b4ff5fe30bd48f5788cf3929546a388f98ac1150", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/contractFlattener.tsx", - "hash": "4f7cad921241e53474fac2695797abc9c0a4cbf2", - "deps": [ - "npm:react", - "npm:@remixproject/engine", - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/file-decorator.ts", - "hash": "34829b027bb08b690202fa1d8a6bfd5e79f242b6", - "deps": [ - "npm:deep-equal", - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/notification.tsx", - "hash": "83754e8b3887ee78387cfd9d6b5037f2b6c08135", - "deps": [ - "npm:@remixproject/engine", - "npm:@remixproject/plugin-utils" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/parser/code-parser.tsx", - "hash": "b3e0955ece5951c49a6099765593b85934d6181c", - "deps": [ - "npm:@remixproject/engine", - "npm:react", - "npm:@remixproject/plugin-utils", - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/parser/services/antlr-worker.ts", - "hash": "c9e026d08519ecf2f5e00601834bcf0eda192dbf" - }, - { - "file": "apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts", - "hash": "3585dda157ed95587d711529ba24c6a3fa178bdd", - "deps": [ - "npm:url" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts", - "hash": "b3a1a9c3227ed70b9bfccf78a5aa911bdc0e45f6", - "deps": [ - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/parser/services/code-parser-gas-service.ts", - "hash": "274466fe9c3a91f16c8067f501b6aa6a0bdd9dd5", - "deps": [ - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts", - "hash": "73b162d95ba311dcb1d1ae9160d821cfef50e574" - }, - { - "file": "apps/remix-ide/src/app/plugins/parser/types/antlr-types.ts", - "hash": "3e2675c43a1f1be9be7549ad9cca1ec12503f147" - }, - { - "file": "apps/remix-ide/src/app/plugins/parser/types/index.ts", - "hash": "1c252cc882dbb7cb0c9e235bab43b70dd45aaba6" - }, - { - "file": "apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx", - "hash": "c89b087eedc50a6fb44209dccb826ae81e00c0ba", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:@remixproject/engine", - "npm:@remixproject/plugin-utils" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/remixd-handle.tsx", - "hash": "a39c52c3d30e06c3c8e77b42a820cb09e66b7d13", - "deps": [ - "npm:react", - "npm:is-electron", - "npm:@remixproject/engine-web", - "remixd", - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/solidity-script.tsx", - "hash": "88c3b1e9624f61c057f33c367be1f920b452bba0", - "deps": [ - "npm:react", - "npm:util", - "npm:@remixproject/engine", - "npm:web3-core" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/solidity-umlgen.tsx", - "hash": "66e4ecbc8701740934e05f710713ff1e818c19ed", - "deps": [ - "npm:@remixproject/engine-web", - "npm:react", - "remix-ui", - "npm:sol2uml", - "npm:@aduh95/viz.js", - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "apps/remix-ide/src/app/plugins/storage.ts", - "hash": "cd7ec1e1622f0302591692adc943e36cc9af8a9f", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/providers/abstract-provider.tsx", - "hash": "5d9df384c30b0f5d6c628899e02b4ca157c63ec0", - "deps": [ - "npm:@remixproject/engine", - "npm:ethers" - ] - }, - { - "file": "apps/remix-ide/src/app/providers/custom-vm-fork-provider.tsx", - "hash": "d4f9c8129780b1f30c3e6483afa2f7eaf2fc08e3", - "deps": [ - "npm:react", - "npm:@ethereumjs/common" - ] - }, - { - "file": "apps/remix-ide/src/app/providers/external-http-provider.tsx", - "hash": "36d864c2a1942ff4d501122f1959bc5c3b5a266f", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/providers/foundry-provider.tsx", - "hash": "904c330b3c58226f2ea4e6aef1510563ecf91163", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/providers/ganache-provider.tsx", - "hash": "132aa2095766a3946dfcc632c42f4df787b10a54", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/providers/goerli-vm-fork-provider.tsx", - "hash": "9327f3822626793ea8e4d85309cf4a4c224ad27f" - }, - { - "file": "apps/remix-ide/src/app/providers/hardhat-provider.tsx", - "hash": "1d579ab6c19c0f1bb3b13e84bb4cc8307d59e011", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/providers/injected-arbitrum-one-provider.tsx", - "hash": "aaf20e9070adb8c90187f1eaaf043e88c9d929de" - }, - { - "file": "apps/remix-ide/src/app/providers/injected-L2-provider.tsx", - "hash": "afae690a396f725b4f4c64adc401f2db44dd7d1c" - }, - { - "file": "apps/remix-ide/src/app/providers/injected-optimism-provider.tsx", - "hash": "60037f415bc7542014a3fc61d2bd179f566039e6" - }, - { - "file": "apps/remix-ide/src/app/providers/injected-provider-default.tsx", - "hash": "9af45e56600665b650439c80b81ee054233a12be" - }, - { - "file": "apps/remix-ide/src/app/providers/injected-provider-trustwallet.tsx", - "hash": "c58f6d12f8d26dc6f505d1d9648ad83ab3fd367b" - }, - { - "file": "apps/remix-ide/src/app/providers/injected-provider.tsx", - "hash": "9a1f9151285ef6233790ca9f5f96a3f5eb702d0a", - "deps": [ - "npm:react", - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/providers/mainnet-vm-fork-provider.tsx", - "hash": "68fc03e5ba6c0aee6e8e15426adbb165d6858aca" - }, - { - "file": "apps/remix-ide/src/app/providers/sepolia-vm-fork-provider.tsx", - "hash": "042bd0ed7c6a21040c29292f70069851121cde32" - }, - { - "file": "apps/remix-ide/src/app/providers/vm-provider.tsx", - "hash": "5e661524636970276eb43266899ff6a1bc2858b8", - "deps": [ - "npm:react", - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/state/registry.ts", - "hash": "dc3655293f84a73369cec853bbb481c4a066b984" - }, - { - "file": "apps/remix-ide/src/app/tabs/analysis-tab.js", - "hash": "9a57c16516137e07a5a03c370ea6094108ceec5c", - "deps": [ - "npm:react", - "npm:@remixproject/engine-web", - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/compile-and-run.ts", - "hash": "2b3c16989670a7b03f6d5b0093b71666fba44891", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/compile-tab.js", - "hash": "8531f2ead285ab530b830156596d1754cadbbb6c", - "deps": [ - "npm:react", - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/debugger-tab.js", - "hash": "cd06ea4ffa079ee33cf2ae373830ba9e2166f86c", - "deps": [ - "npm:web3", - "npm:@remixproject/engine-web", - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/locale-module.js", - "hash": "0487f94e96fd5c28cb138f67b1fc98eed37f9e21", - "deps": [ - "npm:@remixproject/engine", - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/debugger.json", - "hash": "87c22efd607920abe3adc2420af3d65fc8d51b0f" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/filePanel.json", - "hash": "ab7222713f56196cc1d3f9c995dac613dd556eec" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/home.json", - "hash": "01984c1bf8d0673b47a38bb20a5fb22f73a8840d" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/index.js", - "hash": "a5b807a902fb89ad72f77734faf788125c21e2d4" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/panel.json", - "hash": "070dbbd57f6c4aa97d0475f98ec9593581eb6e78" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/permissionHandler.json", - "hash": "d41fe6c68e4088120ae601d05fd46e6c6222eaad" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/pluginManager.json", - "hash": "01287713d614eab817546bb36d36913d160adc78" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/search.json", - "hash": "5bb29ab8d2a6ccaa425bbc60a17b5d83f8502304" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/settings.json", - "hash": "753a6b67e6c5a1f22f3255e5114409439cb4637f" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/solidity.json", - "hash": "947bfeae9472138740780dad432fc53e6422f4c2" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/solidityUnitTesting.json", - "hash": "f1080804b69a4c6500e6886a4c6e531f15c2b605" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/solUmlgen.json", - "hash": "ca63867e93a0574681cab908b1b42b59a347e31d" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/terminal.json", - "hash": "a175436686099324321a9cf33d8fbdb052c30270" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/en/udapp.json", - "hash": "55932a00fb2e97ce9a3a446f3b41407945e01fcb" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/debugger.json", - "hash": "2a7d40f1dac12cb701faf7de7129285922b4bc6a" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/filePanel.json", - "hash": "ab7222713f56196cc1d3f9c995dac613dd556eec" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/home.json", - "hash": "da7c37031eeb1bb2996a21bdf6627b84e0988106" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/panel.json", - "hash": "070dbbd57f6c4aa97d0475f98ec9593581eb6e78" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/permissionHandler.json", - "hash": "d41fe6c68e4088120ae601d05fd46e6c6222eaad" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/pluginManager.json", - "hash": "01287713d614eab817546bb36d36913d160adc78" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/search.json", - "hash": "5bb29ab8d2a6ccaa425bbc60a17b5d83f8502304" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/settings.json", - "hash": "58af512c35c72eb09da09f8c8e147ea09c86517e" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/solidity.json", - "hash": "947bfeae9472138740780dad432fc53e6422f4c2" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/solidityUnitTesting.json", - "hash": "f1080804b69a4c6500e6886a4c6e531f15c2b605" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/solUmlgen.json", - "hash": "ca63867e93a0574681cab908b1b42b59a347e31d" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/terminal.json", - "hash": "a175436686099324321a9cf33d8fbdb052c30270" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/es/udapp.json", - "hash": "48090ab63188a661e0f9c81879fd3d5d11925460" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/debugger.json", - "hash": "4785d65fced831292df36f8aed60b23a396baae7" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/filePanel.json", - "hash": "ab7222713f56196cc1d3f9c995dac613dd556eec" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/home.json", - "hash": "da7c37031eeb1bb2996a21bdf6627b84e0988106" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/panel.json", - "hash": "070dbbd57f6c4aa97d0475f98ec9593581eb6e78" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/permissionHandler.json", - "hash": "d41fe6c68e4088120ae601d05fd46e6c6222eaad" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/pluginManager.json", - "hash": "01287713d614eab817546bb36d36913d160adc78" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/search.json", - "hash": "5bb29ab8d2a6ccaa425bbc60a17b5d83f8502304" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/settings.json", - "hash": "58af512c35c72eb09da09f8c8e147ea09c86517e" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/solidity.json", - "hash": "947bfeae9472138740780dad432fc53e6422f4c2" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/solidityUnitTesting.json", - "hash": "f1080804b69a4c6500e6886a4c6e531f15c2b605" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/solUmlgen.json", - "hash": "ca63867e93a0574681cab908b1b42b59a347e31d" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/terminal.json", - "hash": "a175436686099324321a9cf33d8fbdb052c30270" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/fr/udapp.json", - "hash": "48090ab63188a661e0f9c81879fd3d5d11925460" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/debugger.json", - "hash": "4eb729b4cce79f66ad83c21dfe1a5ba1188ee63a" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/filePanel.json", - "hash": "b48257cbdd8e1be228da82305fb4d2913dbe7eac" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/home.json", - "hash": "ac00d8dce2588ce41b1e0c6d8b926c55f8fddf13" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/index.js", - "hash": "6b77c72871ea1c6eedf2e328a77fdf9d234f4bc0" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/panel.json", - "hash": "e02928953d44fd547cd5bf30e72bdc4e6a4f8393" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/permissionHandler.json", - "hash": "316206ef48f8d961446ff7e8e9a91497f4a60490" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/pluginManager.json", - "hash": "423e11ce5ef5a767889c512ed713ef0cf07b8686" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/search.json", - "hash": "d0119bbe29d33e7c0d07c2e746a64bf7afb844fa" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/settings.json", - "hash": "1373d86843ce5598da4766bcb9ef652fc9c834d3" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/solidity.json", - "hash": "1ffe38907a2812c413bee2218428e902cac7019e" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/solidityUnitTesting.json", - "hash": "e590e33e5d7f4993c980bd3f95e7104dd4133b99" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/solUmlgen.json", - "hash": "ca63867e93a0574681cab908b1b42b59a347e31d" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/terminal.json", - "hash": "87e1b4e9a4498f71a51c4d269cfb353535f5b859" - }, - { - "file": "apps/remix-ide/src/app/tabs/locales/zh/udapp.json", - "hash": "44dced4cb3c4e8c79f83d9ba9204d8b495db5677" - }, - { - "file": "apps/remix-ide/src/app/tabs/network-module.js", - "hash": "c1cc1e12b592d6f4e6b6bf7049d768b89e11d5ff", - "deps": [ - "npm:@remixproject/engine", - "npm:web3" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/runTab/model/recorder.js", - "hash": "f1d67391170c45b2516fa91a1f17588d22d02bd1", - "deps": [ - "npm:async", - "npm:@ethereumjs/util", - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/search.tsx", - "hash": "e742281d3ea31dd6cd9875b92ac8d6e5b3440af8", - "deps": [ - "npm:@remixproject/engine-web", - "npm:react" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/settings-tab.tsx", - "hash": "b68cc0f7f06fa10d63eb642aacc6e1223c712dbb", - "deps": [ - "npm:react", - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/styles/analysis-tab-styles.js", - "hash": "a98d5b70afd17e0429ec9d5692e589176e17b09c", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/styles/compile-tab-styles.js", - "hash": "35286b2f805cdd6aebe15ba52082b4659728bcc0", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/styles/debugger-tab-styles.js", - "hash": "3fb7add424f4231c7eedc59c33b0f6810b6d0479", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/styles/plugin-tab-styles.js", - "hash": "45c593ac46889841b74cc7f7271ce70071bdd27f", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/styles/settings-tab-styles.js", - "hash": "90a4e470694a9c5059686fe417ca8534a31c823b", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/styles/support-tab-styles.js", - "hash": "7debd88c3f06789803bf9a33808ff6c34a654a07", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/styles/tabbed-menu-styles.js", - "hash": "f0adb87f557510edf2b309b635b0b5134af97ede", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/styles/test-tab-styles.js", - "hash": "2f0ddab7705b5e95616dfa1af66c4bdbf9bbd38d", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/test-tab.js", - "hash": "df16f475741be19b3f06e860f6d713429d2cafbd", - "deps": [ - "npm:react", - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/theme-module.js", - "hash": "e1e066c4b552c57f64b4ca3f1b9d2cddc7b8f3cf", - "deps": [ - "npm:@remixproject/engine", - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/app/tabs/web3-provider.js", - "hash": "0158ff11f94b64742e18471e5e61411a2798cc8f", - "deps": [ - "npm:@remixproject/engine" - ] - }, - { - "file": "apps/remix-ide/src/app/udapp/index.js", - "hash": "8f1c93711f8d8942eb84008202a5298d946e33c5" - }, - { - "file": "apps/remix-ide/src/app/udapp/make-udapp.js", - "hash": "0b8b13433a28edaff2448af1f382c3e9bac319a8" - }, - { - "file": "apps/remix-ide/src/app/udapp/run-tab.js", - "hash": "49983f5e3955589a3ef0651a3a9e268bff01a343", - "deps": [ - "npm:react", - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/ui/landing-page/landing-page.js", - "hash": "077d6507f3664e1d2d6b0e71b20a588f89b90049", - "deps": [ - "npm:react", - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/app/ui/styles-guide/styleGuideClean.js", - "hash": "19ab6ca25441e595c16775b7e164421dc0ce74d4" - }, - { - "file": "apps/remix-ide/src/app/ui/styles/auto-complete-popup-styles.js", - "hash": "114cbce501c22a2a58db1464ffc9750bae625e08", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/ui/styles/dropdown-styles.js", - "hash": "6868788b3567ab346ca02b537500ac539dc21b01", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/ui/styles/modal-dialog-custom-styles.js", - "hash": "6fb0055f2fb5dbef2745b477c96670d8e2caaca2", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/ui/styles/modaldialog-styles.js", - "hash": "e3468aaf037397927aa55738aa5b671b274e12b1", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/app/ui/styles/tooltip-styles.js", - "hash": "da1bcdd90454be343d5ee435a67a51129bc94705", - "deps": [ - "npm:csjs-inject" - ] - }, - { - "file": "apps/remix-ide/src/assets/audio/remiGuitar-single-power-chord-A-minor.mp3", - "hash": "6deea95085ac1877899f19438990a1e3bc29fde8" - }, - { - "file": "apps/remix-ide/src/assets/audio/remiGuitar-single-power-chord-A-minor.wav", - "hash": "f863ffd8a275e9d275e088a7c4c1599e7e430411" - }, - { - "file": "apps/remix-ide/src/assets/css/font-awesome.min.css", - "hash": "540440ce89f2a408aa699b65100e18f15e0f09ca" - }, - { - "file": "apps/remix-ide/src/assets/css/intro.js/2.7.0/introjs.min.css", - "hash": "4f508ed90c9f76efc93994ad8e5c04299b67dc94" - }, - { - "file": "apps/remix-ide/src/assets/css/intro.js/4.1.0/introjs.min.css", - "hash": "d8b1714797b5ce64ee363ef91d51e84eb89fbb2d" - }, - { - "file": "apps/remix-ide/src/assets/css/pygment_trac.css", - "hash": "c6a6452d249f902a80b0775bf01352cbca6f284b" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/bootstrap-cerulean.min.css", - "hash": "f46677c2aa7fb5f625e692f5f7ba6ae186aa8a5a" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/bootstrap-cyborg.min.css", - "hash": "8a43b2691266dd0546479f56c5d211dc8ab05aef" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/bootstrap-flatly.min.css", - "hash": "30a639ca4db9270926b0a042c3afceb2cfdc8394" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/bootstrap-spacelab.min.css", - "hash": "99373822ebbdd103fce2618d06db228653b79d88" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/remix-black_undtds.css", - "hash": "d917e3095ccc33a4c5df55155854ea88629c4f2a" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/remix-candy_ikhg4m.css", - "hash": "99e367a62566184b6263619604a1bcbe8a5acc09" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/remix-dark_tvx1s2.css", - "hash": "3f21f142477f795c8024521fa1e2ca2ececb7c01" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/remix-hacker_owl.css", - "hash": "3513bd73fca5575233a970b8e413a5f37a767167" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/remix-light_powaqg.css", - "hash": "8ba6a88f05a6f517455b5799e92b2fdc1a0904d9" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/remix-midcentury_hrzph3.css", - "hash": "5df1a16a34b232c8fdfd7a415d56b25061f476bb" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/remix-unicorn.css", - "hash": "cf627d02c01c61157fa81e3ae57bd592d73d4d2b" - }, - { - "file": "apps/remix-ide/src/assets/css/themes/remix-violet.css", - "hash": "0b3f629e8190f3ee3c82597a90e6389bd55e05c2" - }, - { - "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.eot", - "hash": "e9f60ca953f93e35eab4108bd414bc02ddcf3928" - }, - { - "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.svg", - "hash": "855c845e538b65548118279537a04eab2ec6ef0d" - }, - { - "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.ttf", - "hash": "35acda2fa1196aad98c2adf4378a7611dd713aa3" - }, - { - "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.woff", - "hash": "400014a4b06eee3d0c0d54402a47ab2601b2862b" - }, - { - "file": "apps/remix-ide/src/assets/fonts/fontawesome-webfont.woff2", - "hash": "4d13fc60404b91e398a37200c4a77b645cfd9586" - }, - { - "file": "apps/remix-ide/src/assets/fonts/FontAwesome.otf", - "hash": "401ec0f36e4f73b8efa40bd6f604fe80d286db70" - }, - { - "file": "apps/remix-ide/src/assets/img/bgRemi_small.webp", - "hash": "3423aa5bab536820125daada6129d1c69623858b" - }, - { - "file": "apps/remix-ide/src/assets/img/bgRemi.webp", - "hash": "80ee32e1deba8f095d0b4de549123281b2231844" - }, - { - "file": "apps/remix-ide/src/assets/img/cookbook.webp", - "hash": "4b831b59d4e7f4927d1406b75eea42aef5c39aeb" - }, - { - "file": "apps/remix-ide/src/assets/img/debuggerLogo.webp", - "hash": "4773d498e9eaae286cce0f2d2bedef9998596b57" - }, - { - "file": "apps/remix-ide/src/assets/img/deployAndRun.webp", - "hash": "c652f89ee215922980341fb64a8977e5e9996a8c" - }, - { - "file": "apps/remix-ide/src/assets/img/dgit.webp", - "hash": "75038b84d35cf54b0fe268077ef0e40c093b6f4f" - }, - { - "file": "apps/remix-ide/src/assets/img/favicon.ico", - "hash": "4f550708f2db2fdd6e319eb31625b2a65249b07a" - }, - { - "file": "apps/remix-ide/src/assets/img/fileManager.webp", - "hash": "185d3acc1abb936fa118a86c6c8fe6e1a506a99e" - }, - { - "file": "apps/remix-ide/src/assets/img/gasStation_50.png", - "hash": "67586093854531f693190b8a27449d9d50f7876b" - }, - { - "file": "apps/remix-ide/src/assets/img/guitarRemiCroped.webp", - "hash": "26e8957622c9e6a17468f1d5e0beea2dfea913f9" - }, - { - "file": "apps/remix-ide/src/assets/img/hexagon-remix-greengrey-texture.png", - "hash": "49717083ac6eb3a14ca175c53bb6128e8291864f" - }, - { - "file": "apps/remix-ide/src/assets/img/home.webp", - "hash": "6af3393ffde2d92c2e44648e349625b631d4ad2c" - }, - { - "file": "apps/remix-ide/src/assets/img/homeStickers.png", - "hash": "c481cec517d8b3597355cf7b7a7a9c128565b88b" - }, - { - "file": "apps/remix-ide/src/assets/img/icon.png", - "hash": "1d6bcd0352995329cc62c106867ff9b2c1fdf67f" - }, - { - "file": "apps/remix-ide/src/assets/img/ipfs.webp", - "hash": "9cdfa7380c503f4ccfed36563f44cef6c5f1b082" - }, - { - "file": "apps/remix-ide/src/assets/img/learnEthLogo.webp", - "hash": "e22a6c5f2e2c779d2376056c6f69d2a334278968" - }, - { - "file": "apps/remix-ide/src/assets/img/localPlugin.webp", - "hash": "c8481f48209a11d6092e0d6577d12f97ff2425e4" - }, - { - "file": "apps/remix-ide/src/assets/img/logoicon.svg", - "hash": "d064e0a2275431eab6dc334a1af734a5bf7adb8c" - }, - { - "file": "apps/remix-ide/src/assets/img/moreLogo.webp", - "hash": "a534e103a70afb6e781852a7a9bfb3be6be414b8" - }, - { - "file": "apps/remix-ide/src/assets/img/mythxLogo.webp", - "hash": "257f72dc598f2478d1ec2bb5153c65293d27fdd6" - }, - { - "file": "apps/remix-ide/src/assets/img/oneclickdapp.webp", - "hash": "ab464320cd0058f8ca73935a3c20c9615b370e6b" - }, - { - "file": "apps/remix-ide/src/assets/img/optimismLogo.webp", - "hash": "d7569da3f1f8dc53d16ff064e4c1c9986f3ec620" - }, - { - "file": "apps/remix-ide/src/assets/img/pipelineLogo.webp", - "hash": "20114c22d274374b380c5a6930bc7dc706c68df2" - }, - { - "file": "apps/remix-ide/src/assets/img/pluginManager.webp", - "hash": "4c4b316cca505a5780912227e6639a3c176e729a" - }, - { - "file": "apps/remix-ide/src/assets/img/remix_logo_light.webp", - "hash": "097a95e50e60ab2319d185bd580a63e589f31815" - }, - { - "file": "apps/remix-ide/src/assets/img/remix-logo-blue.png", - "hash": "cc79f5ece6ad259ef39bf25bea01b44c3dce0f0a" - }, - { - "file": "apps/remix-ide/src/assets/img/remixLogo.webp", - "hash": "90e38ad58637da1d389f1ace8eb61aa536cc93b4" - }, - { - "file": "apps/remix-ide/src/assets/img/remixRewardBetaTester_small.webp", - "hash": "9558dfa940ea9e2eec8d1998d6242795c92a9ca6" - }, - { - "file": "apps/remix-ide/src/assets/img/remixRewardBetaTester.webp", - "hash": "59a14a9ad2a85db7305b0c6269fb5ff56a5be16c" - }, - { - "file": "apps/remix-ide/src/assets/img/remixRewardUser_small.webp", - "hash": "d4571ce3330e540d7e9e7091fd8d9ca6c91f4b59" - }, - { - "file": "apps/remix-ide/src/assets/img/remixRewardUser.webp", - "hash": "4f63b3906988549280c689184def0c3af9b81bd7" - }, - { - "file": "apps/remix-ide/src/assets/img/search_icon.webp", - "hash": "93b26959314d26466576dde0c4684a399a466eeb" - }, - { - "file": "apps/remix-ide/src/assets/img/settings.webp", - "hash": "207745c4b627d7abd214e8cb838d7f96f576609a" - }, - { - "file": "apps/remix-ide/src/assets/img/sleepingRemiCroped.webp", - "hash": "4e01719ad2401aec0a3f2a901c3b4ee7b2719899" - }, - { - "file": "apps/remix-ide/src/assets/img/solhintLogo.webp", - "hash": "cc9ecb3bea44a9ca63e0af309c1ddc3df9d66201" - }, - { - "file": "apps/remix-ide/src/assets/img/solidity-logo.webp", - "hash": "c7aa37677721e454e817de375408c30aeb7ad14a" - }, - { - "file": "apps/remix-ide/src/assets/img/solidity.webp", - "hash": "7328dd2fd235cc7d8f366d54092488480ea6712b" - }, - { - "file": "apps/remix-ide/src/assets/img/solidityLogo.webp", - "hash": "9a9821e6b504676fdcbbb83e3a83dd553a518949" - }, - { - "file": "apps/remix-ide/src/assets/img/sourcifyNewLogo.webp", - "hash": "16d652b3d96f04107876825b05883044f2fa7d6c" - }, - { - "file": "apps/remix-ide/src/assets/img/StarkNetLogo.png", - "hash": "74218453e035c465671119ed835df4d9024ae3a3" - }, - { - "file": "apps/remix-ide/src/assets/img/starkNetLogo.webp", - "hash": "6a79f4026f1be2a77004ff19858fb0c8298dbea2" - }, - { - "file": "apps/remix-ide/src/assets/img/staticAnalysis.webp", - "hash": "1ef7294dfdd59d764aae96c4ebc42c19d611ebb1" - }, - { - "file": "apps/remix-ide/src/assets/img/swarm.webp", - "hash": "c11e1a648194a028e61c2462a335ae7ccb02a720" - }, - { - "file": "apps/remix-ide/src/assets/img/unitTesting.webp", - "hash": "29488e3f72b30c58a28f2dc3a40fcd971ca0e0ce" - }, - { - "file": "apps/remix-ide/src/assets/img/vyperLogo.webp", - "hash": "3f9f4c1afd49358b6a1953aa9f88b28eac914790" - }, - { - "file": "apps/remix-ide/src/assets/img/workshopLogo.webp", - "hash": "6717a42740b39ef9573e2ade15138740b59974f2" - }, - { - "file": "apps/remix-ide/src/assets/img/YouTubeLogo.webp", - "hash": "b87f4c86f09443ca011ffdc3b30663362ff0e58a" - }, - { - "file": "apps/remix-ide/src/assets/js/browserfs.min.js", - "hash": "a9eca25caff3ac9096d53779c5c1ebd25069106d" - }, - { - "file": "apps/remix-ide/src/assets/js/editor/darkTheme.js", - "hash": "f4059f60f703295fd8ebf10909da5cef668f7615" - }, - { - "file": "apps/remix-ide/src/assets/js/intro.min.js", - "hash": "b3c2bfa36f746e7bc405252f35f586dac34603b7" - }, - { - "file": "apps/remix-ide/src/assets/js/loader.js", - "hash": "51887984c74d3dd2c0d27aed9333630f8d924454" - }, - { - "file": "apps/remix-ide/src/assets/js/parser/antlr.js", - "hash": "3785806311e3a484e86b27ab372d26422f969dda" - }, - { - "file": "apps/remix-ide/src/assets/js/parser/antlr.js.map", - "hash": "a145305c3c477fbb665b9e88518ecd6eaed5f622" - }, - { - "file": "apps/remix-ide/src/assets/js/parser/Solidity-EZVQ6AE4.tokens", - "hash": "ffb4652613710d664b37e56944fd6b290e40431b" - }, - { - "file": "apps/remix-ide/src/blockchain/blockchain.tsx", - "hash": "61aeeb74df89de123a1a6a7c878b63211a09776e", - "deps": [ - "npm:react", - "npm:web3", - "npm:@remixproject/engine", - "npm:@ethereumjs/util", - "npm:events", - "npm:util" - ] - }, - { - "file": "apps/remix-ide/src/blockchain/execution-context.js", - "hash": "d730a130e3a0f479e1b842c9334b7ce73a8dfd4e", - "deps": [ - "npm:web3" - ] - }, - { - "file": "apps/remix-ide/src/blockchain/helper.ts", - "hash": "7df7546d20d2458ff88a68276fa7a17ef5bf597a" - }, - { - "file": "apps/remix-ide/src/blockchain/providers/injected.ts", - "hash": "bc6ab49e7f11c87183ba9dfa72c19eac432901cd", - "deps": [ - "npm:web3", - "npm:@ethereumjs/util" - ] - }, - { - "file": "apps/remix-ide/src/blockchain/providers/node.ts", - "hash": "65116b4923eb71e08b1aa500e4bfed3839eae47e", - "deps": [ - "npm:web3", - "npm:@ethereumjs/util", - "npm:web3-eth-personal" - ] - }, - { - "file": "apps/remix-ide/src/blockchain/providers/vm.ts", - "hash": "4234e42616a79ff6f151ecc0971d5a9557576900", - "deps": [ - "npm:web3", - "npm:@ethereumjs/util", - "npm:bn.js" - ] - }, - { - "file": "apps/remix-ide/src/blockchain/providers/worker-vm.ts", - "hash": "64a8d0255b94510bfc9c74c123adcacb7fe5e58b" - }, - { - "file": "apps/remix-ide/src/config.js", - "hash": "349e394d0753301a63ab34ccbb436ace9adbf758", - "deps": [ - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/favicon.ico", - "hash": "4f550708f2db2fdd6e319eb31625b2a65249b07a" - }, - { - "file": "apps/remix-ide/src/global/registry.js", - "hash": "80a033ab230a013c6fb1c82406ed31b65f3a71fc" - }, - { - "file": "apps/remix-ide/src/index.css", - "hash": "8396f022e705cdd0a29ad3d9e5032c45427ccaeb" - }, - { - "file": "apps/remix-ide/src/index.html", - "hash": "ee0f9f81a8befa2d89677faa0cd994294af87058" - }, - { - "file": "apps/remix-ide/src/index.tsx", - "hash": "92a02060035d0ba929cc9eb7863c5cbda03a9fd7", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/remix-ide/src/lib/events.js", - "hash": "b5c723e220ef56123df467987f29a7f7490bf1e3" - }, - { - "file": "apps/remix-ide/src/lib/helper.js", - "hash": "d332c7e9371f4ff48a534a12da006e57c85be7ad", - "deps": [ - "npm:async", - "npm:@ethereumjs/util" - ] - }, - { - "file": "apps/remix-ide/src/main.js", - "hash": "d4649695c0238e624caef59196f122be9ab49854" - }, - { - "file": "apps/remix-ide/src/polyfills.ts", - "hash": "53c485753e6e49fd2dac115c6e08dbfe99574861", - "deps": [ - "npm:core-js", - "npm:regenerator-runtime" - ] - }, - { - "file": "apps/remix-ide/src/registry.js", - "hash": "71ae9db6359bc22679717d8d5991a626b9fd0c26" - }, - { - "file": "apps/remix-ide/src/remixAppManager.js", - "hash": "9c9f365f238a29b1f68bcd6f43393380cc109e96", - "deps": [ - "npm:@remixproject/engine", - "npm:events", - "npm:@remixproject/engine-web" - ] - }, - { - "file": "apps/remix-ide/src/remixEngine.js", - "hash": "3a0c905acd9d7cab6b7242b02bb30b4ec98af745", - "deps": [ - "npm:@remixproject/engine", - "npm:events" - ] - }, - { - "file": "apps/remix-ide/src/walkthroughService.js", - "hash": "d0d466555f2d5c3590355ff3229bab3043625b49", - "deps": [ - "npm:@remixproject/engine", - "npm:intro.js" - ] - }, - { - "file": "apps/remix-ide/stats.json", - "hash": "9526fe781a52161fd3413be380c7220eb7a077cf" - }, - { - "file": "apps/remix-ide/team-best-practices.md", - "hash": "8777280bc52c42e2db12fba8f428db1d8760a9c1" - }, - { - "file": "apps/remix-ide/tsconfig.app.json", - "hash": "b45165141ee7776aac2bce0b6f12a7b02a779930" - }, - { - "file": "apps/remix-ide/tsconfig.json", - "hash": "c702a5fbd5106d3207803de872e2529e7e101cf1" - }, - { - "file": "apps/remix-ide/tsconfig.spec.json", - "hash": "4fa5ed9ba03d9e30526331b47a0dbad7775ef8c3" - }, - { - "file": "apps/remix-ide/webpack.config.js", - "hash": "b34b7dcb1190f22d1fefd0c64ab3a2381b75e5d1", - "deps": [ - "npm:@nrwl/webpack", - "npm:@nrwl/react", - "npm:webpack", - "npm:copy-webpack-plugin", - "npm:terser-webpack-plugin", - "npm:css-minimizer-webpack-plugin", - "npm:axios", - "npm:child_process" - ] - } - ] - } - }, - "remix-lib": { - "name": "remix-lib", - "type": "lib", - "data": { - "name": "remix-lib", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-lib/src", - "projectType": "library", - "targets": { - "test": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "configurations": {} - }, - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remix-lib", - "main": "libs/remix-lib/src/index.ts", - "tsConfig": "libs/remix-lib/tsconfig.lib.json", - "updateBuildableProjectDepsInPackageJson": false, - "assets": [ - "libs/remix-lib/*.md" - ] - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-lib/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remix-lib", - "implicitDependencies": [], - "files": [ - { - "file": "libs/remix-lib/.eslintrc", - "hash": "f0a8bd5e8c4dffc8b13143dbc1b43b03120ce5b1" - }, - { - "file": "libs/remix-lib/.npmignore", - "hash": "b59f7e3a95a4d3f2b168d9c8e330be591fc49a6b" - }, - { - "file": "libs/remix-lib/package.json", - "hash": "6cb2ba8253dfae4b31de4943756be151921a3919", - "deps": [ - "npm:@ethereumjs/util", - "npm:async", - "npm:ethers", - "npm:ethjs-util", - "npm:events", - "npm:from-exponential", - "npm:solc", - "npm:string-similarity", - "npm:web3", - "npm:@babel/core", - "npm:@babel/plugin-transform-object-assign", - "npm:@babel/preset-env", - "npm:@babel/preset-stage-0", - "npm:babel-eslint", - "npm:babelify", - "npm:tape" - ] - }, - { - "file": "libs/remix-lib/project.json", - "hash": "6b5d30f8217209722ae2467247d400f3bddbfc44" - }, - { - "file": "libs/remix-lib/README.md", - "hash": "64a6706ef3ff1be55903acb9d6d3371bfe5fae81" - }, - { - "file": "libs/remix-lib/src/eventManager.ts", - "hash": "3b940e526bc2ac077d079a8b91111fdd40939d49" - }, - { - "file": "libs/remix-lib/src/execution/eventsDecoder.ts", - "hash": "cdb794fd718fcfc51752e18359586d92b85a4cec", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-lib/src/execution/forkAt.ts", - "hash": "fe7b1b0804d835df4e95128cc46b00294979fd74" - }, - { - "file": "libs/remix-lib/src/execution/logsManager.ts", - "hash": "70e4ed9d4122f5e474b5e124a5bf10547eb4395b", - "deps": [ - "npm:async" - ] - }, - { - "file": "libs/remix-lib/src/execution/txExecution.ts", - "hash": "781d9733ceb100944aae80d0c2d95b83bb7d6b5c", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-lib/src/execution/txFormat.ts", - "hash": "86718cf2075ca7af4ec050e340cb468b7cf09630", - "deps": [ - "npm:ethers", - "npm:async", - "npm:solc", - "npm:@ethereumjs/util", - "npm:from-exponential" - ] - }, - { - "file": "libs/remix-lib/src/execution/txHelper.ts", - "hash": "f3c78930b1287991577134c9ae81991011fc2938", - "deps": [ - "npm:ethers" - ] - }, - { - "file": "libs/remix-lib/src/execution/txListener.ts", - "hash": "960ca63a55bfa8c95bd9294c0949e01ca79c1abf", - "deps": [ - "npm:ethers", - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-lib/src/execution/txRunner.ts", - "hash": "19f643cc7d602bc62310633f4c78ed0035aafe58" - }, - { - "file": "libs/remix-lib/src/execution/txRunnerVM.ts", - "hash": "5a800e2326b7e48342a7e1097ed66f4d0edf26a5", - "deps": [ - "npm:@ethereumjs/vm", - "npm:@ethereumjs/common", - "npm:@ethereumjs/tx", - "npm:@ethereumjs/block", - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-lib/src/execution/txRunnerWeb3.ts", - "hash": "d5fce39b927eed260827b22b10d3c077da5177e4", - "deps": [ - "npm:web3" - ] - }, - { - "file": "libs/remix-lib/src/execution/typeConversion.ts", - "hash": "46a25bff8afae7898e32b39683cc69b96dc5ae8a", - "deps": [ - "npm:bn.js", - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-lib/src/hash.ts", - "hash": "b7d56237b1b36450bb218fdb727e7f309e46a569", - "deps": [ - "npm:ethereum-cryptography", - "npm:create-hash", - "npm:rlp", - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-lib/src/helpers/compilerHelper.ts", - "hash": "1681520c95137622c8236681920840e741253116" - }, - { - "file": "libs/remix-lib/src/helpers/hhconsoleSigs.ts", - "hash": "89ef7afb566c9aa24376d0ca1dfd6a6335bee4e2" - }, - { - "file": "libs/remix-lib/src/helpers/txResultHelper.ts", - "hash": "a7a89163c6ede005e74e18e03966b6bdb6bb9a5d", - "deps": [ - "npm:@ethereumjs/util", - "npm:ethjs-util" - ] - }, - { - "file": "libs/remix-lib/src/helpers/uiHelper.ts", - "hash": "cab35f54a521800a2eda246a444302af7c6d26c5" - }, - { - "file": "libs/remix-lib/src/index.ts", - "hash": "d3f28e470a12f47c8937ca8238baca08faab3c0a" - }, - { - "file": "libs/remix-lib/src/init.ts", - "hash": "b59d10b4a44f7362e4ba7cd08cb044437df36b19", - "deps": [ - "npm:web3" - ] - }, - { - "file": "libs/remix-lib/src/query-params.ts", - "hash": "7e89b226ff5caac94bbafefbc4ac90b088913413" - }, - { - "file": "libs/remix-lib/src/storage.ts", - "hash": "02278cc47fea57e6813a2063713c624550c17ff1" - }, - { - "file": "libs/remix-lib/src/types/ICompilerApi.ts", - "hash": "168107e660bc63c4bf2681ae9bffd471115d4151" - }, - { - "file": "libs/remix-lib/src/util.ts", - "hash": "205488c9414928066a7be909fca2d240ca09f390", - "deps": [ - "npm:@ethereumjs/util", - "npm:string-similarity" - ] - }, - { - "file": "libs/remix-lib/test/data/ERC721.ts", - "hash": "c5b5587572e83e5da7a4f51c2aef458c30ff749c" - }, - { - "file": "libs/remix-lib/test/data/sampleERC721.ts", - "hash": "6ebd02bedecfdc0c0f6d8ba1e98f2ca7250c26b9" - }, - { - "file": "libs/remix-lib/test/eventManager.ts", - "hash": "3caa7a2e0f0f1274fce52b1e880a947577fb7832", - "deps": [ - "npm:tape" - ] - }, - { - "file": "libs/remix-lib/test/init.ts", - "hash": "7f844e234f970bc1113939a80289173efeaf0988" - }, - { - "file": "libs/remix-lib/test/tests.ts", - "hash": "2921875905d6f27eb2a3ac21c7b1ac22d8385376" - }, - { - "file": "libs/remix-lib/test/txFormat.ts", - "hash": "41ada91d240ad53de7f88b50f9bba40c17ee7cfe", - "deps": [ - "npm:tape", - "npm:solc" - ] - }, - { - "file": "libs/remix-lib/test/txHelper.ts", - "hash": "4d9a46426fadf968084428807293d33abc2c6fad", - "deps": [ - "npm:tape" - ] - }, - { - "file": "libs/remix-lib/test/txResultHelper.ts", - "hash": "cb972b68b7c7415d323362298e3f557aa06f3483", - "deps": [ - "npm:tape", - "npm:bn.js", - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-lib/test/util.ts", - "hash": "2f4b63926a8a7d07e7422fa541f81aa3c06e39fe", - "deps": [ - "npm:tape" - ] - }, - { - "file": "libs/remix-lib/tsconfig.json", - "hash": "e12ffb0de06a64c6bf5531747e7394451a0c0960" - }, - { - "file": "libs/remix-lib/tsconfig.lib.json", - "hash": "7096e3c7209c8870cee5dd5dfdf0ba524c2a15d5" - } - ] - } - }, - "debugger": { - "name": "debugger", - "type": "app", - "data": { - "name": "debugger", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/debugger/src", - "projectType": "application", - "implicitDependencies": [ - "remix-debug" - ], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/debugger", - "index": "apps/debugger/src/index.html", - "baseHref": "/", - "main": "apps/debugger/src/main.tsx", - "polyfills": "apps/debugger/src/polyfills.ts", - "tsConfig": "apps/debugger/tsconfig.app.json", - "assets": [ - "apps/debugger/src/favicon.ico", - "apps/debugger/src/assets" - ], - "styles": [ - "apps/debugger/src/styles.css" - ], - "scripts": [], - "webpackConfig": "apps/debugger/webpack.config.js" - }, - "configurations": { - "development": {}, - "production": { - "fileReplacements": [ - { - "replace": "apps/debugger/src/environments/environment.ts", - "with": "apps/debugger/src/environments/environment.prod.ts" - } - ] - } - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "debugger:build", - "hmr": true - }, - "configurations": { - "development": { - "buildTarget": "debugger:build:development" - }, - "production": { - "buildTarget": "debugger:build:production" - } - } - } - }, - "tags": [], - "root": "apps/debugger", - "files": [ - { - "file": "apps/debugger/.babelrc", - "hash": "b1fc97545671f056cd1764f581888d976ec90b89" - }, - { - "file": "apps/debugger/.browserslistrc", - "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" - }, - { - "file": "apps/debugger/project.json", - "hash": "3426f35d13a21e0baaf3f0b04955a48d3cc89700" - }, - { - "file": "apps/debugger/src/app/app.tsx", - "hash": "5cee11a2d9cd5ee061413d93373d32db9b2dd2f3", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/debugger/src/app/debugger.ts", - "hash": "28e9703470d5570ec118fd3804622ed87c7e550b", - "deps": [ - "npm:@remixproject/plugin", - "npm:@remixproject/plugin-webview" - ] - }, - { - "file": "apps/debugger/src/assets/.gitkeep", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "apps/debugger/src/environments/environment.prod.ts", - "hash": "3612073bc31cd4c1f5d6cbb00318521e9a61bd8a" - }, - { - "file": "apps/debugger/src/environments/environment.ts", - "hash": "d9370e924b51bc67ecddee7fc3b6693681a324b6" - }, - { - "file": "apps/debugger/src/favicon.ico", - "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" - }, - { - "file": "apps/debugger/src/index.html", - "hash": "848097620cbcd1e5c2c529e37ac3d3df780d3839" - }, - { - "file": "apps/debugger/src/main.tsx", - "hash": "bc1579ec0f2db079b35d9f52e5664887af3cb939", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/debugger/src/polyfills.ts", - "hash": "2adf3d05b6fcf479dd61c74f6bda95d9edb6ac6b", - "deps": [ - "npm:core-js", - "npm:regenerator-runtime" - ] - }, - { - "file": "apps/debugger/src/styles.css", - "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" - }, - { - "file": "apps/debugger/tsconfig.app.json", - "hash": "252904bb73871a10597dc233e4a528e13c6af9c4" - }, - { - "file": "apps/debugger/tsconfig.json", - "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" - }, - { - "file": "apps/debugger/webpack.config.js", - "hash": "9feb0dc08d4a1cdabbc68a78286a03fe4402e0a5", - "deps": [ - "npm:@nrwl/webpack", - "npm:webpack", - "npm:terser-webpack-plugin", - "npm:css-minimizer-webpack-plugin" - ] - } - ] - } - }, - "remix-ui": { - "name": "remix-ui", - "type": "app", - "data": { - "name": "remix-ui", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remix-ui/src", - "projectType": "application", - "implicitDependencies": [], - "targets": { - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remix-ui/**/*.{ts,tsx,js,jsx}" - ], - "eslintConfig": "libs/remix-ui/.eslintrc" - } - } - }, - "tags": [], - "root": "libs/remix-ui", - "files": [ - { - "file": "libs/remix-ui/.eslintrc", - "hash": "07db347ce537123e73c4463f590d389500d1b21d" - }, - { - "file": "libs/remix-ui/app/src/index.ts", - "hash": "2bf8054edb64e0653abe01d0a9eded617b640860" - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/actions/modals.ts", - "hash": "7e78c46cd580d2e688f51b3f6b57f1bf9c31d652" - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.css", - "hash": "44aa0598c132ad726367d99f3821aed6ab0e064b" - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx", - "hash": "1671e1bcc8c9679e87d2fcd70658eb70484d3413", - "deps": [ - "npm:react", - "npm:react-draggable" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/dialogs.tsx", - "hash": "90bd71a05dd18f8436a3c14920820f96376ba5ad", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/dialogViewPlugin.tsx", - "hash": "d5610de56cd036112600d62a4180a7d7883e5a1c", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/matomo.tsx", - "hash": "276a3ee47bca81a4ab54ce31028d8db401f617d5", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/modal-wrapper.tsx", - "hash": "450d59f1def5b2fcbaf905494e70737335561ab2", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/components/modals/origin-warning.tsx", - "hash": "61d25db2f6e6f88c1d10363d3ced46b05baddc61", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/components/splashscreen.tsx", - "hash": "44e55a4db4526d2c1e193b62c1e0977cd033cfba", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/context/context.tsx", - "hash": "ca69771f80eb1fe69f0177da33e78cdf481eefb2", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/context/provider.tsx", - "hash": "635500a8b35a4c9ab770b2286fdcc61c397b1526", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/interface/index.ts", - "hash": "3ab21c7cc4c860944436da9ae57c7f53fecf4f4f" - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/reducer/modals.ts", - "hash": "e2961285d65a7933f84a2fe5796cecbc15195168" - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/remix-app.tsx", - "hash": "31cbe3dc792164070b5d5f286726038c83019f84", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/state/modals.ts", - "hash": "3120766dac094b3b5c54580d26ce083a21f24917" - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/style/remix-app.css", - "hash": "70686d632fbd1658b6e81666da98dd55d4710dbd" - }, - { - "file": "libs/remix-ui/app/src/lib/remix-app/types/index.ts", - "hash": "6822dbe73e8a6f26e8c75c7e923c3cead74e2c36" - }, - { - "file": "libs/remix-ui/checkbox/src/index.ts", - "hash": "27b694c6bdd42ad412c2dc159fb51ccf17e15688" - }, - { - "file": "libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.css", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "libs/remix-ui/checkbox/src/lib/remix-ui-checkbox.tsx", - "hash": "a70892796f49c12768bc2c3d8aadf76d8314c5ab", - "deps": [ - "npm:react", - "npm:react-overlays" - ] - }, - { - "file": "libs/remix-ui/clipboard/README.md", - "hash": "25094197a8a96423c862dd99b2aae13a76acf28f" - }, - { - "file": "libs/remix-ui/clipboard/src/index.ts", - "hash": "4f3a26d2c8763535323b0c76b55b7755ebd640f3" - }, - { - "file": "libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.css", - "hash": "1e625dd256e85a29102adb116080ea42b2f73f01" - }, - { - "file": "libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx", - "hash": "2586761ab71290ecbac9c860d5326712d06cb10b", - "deps": [ - "npm:react", - "npm:copy-to-clipboard", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx", - "hash": "e60dccd6e7740ee56ae81448ec046fd50462137c", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/index.ts", - "hash": "58ba5ab0f8fa26d562d9c84944c7d4bb09282bc1" - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/api/debugger-api.ts", - "hash": "4830f0debb609fb3f1ac35d912f2488a13a0a882", - "deps": [ - "npm:web3" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.css", - "hash": "628182ece1630ca7d56360b9984f835a4ad1d669" - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/button-navigator/button-navigator.tsx", - "hash": "a63f98bb36fdaa6818782c569639f0353a83f0f9", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/debugger-ui.css", - "hash": "1a5e4926a92a650ea9dcda3e1ab4a80dd4d8262a" - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/debugger-ui.tsx", - "hash": "d651e8e16ccd64326db2c5cb465c7097a6423b8e", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/idebugger-api.ts", - "hash": "f204b523ed905698a1a82fa82c72879e8dbaf195" - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/slider/slider.tsx", - "hash": "b49a104456583b32512b20139ef3919f8cc450bc", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/step-manager/step-manager.tsx", - "hash": "cba5f18926bcb3c789d860173fbee97b8acca33d", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/tx-browser/tx-browser.css", - "hash": "3f50123101a0b51cdb4590d111c9931a21e14690" - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/tx-browser/tx-browser.tsx", - "hash": "bc25a233bb6a6eb43f8e131c199b00b981b1fce2", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx", - "hash": "50a6572c4863c0cfad723243badadb9fda437a13", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/calldata-panel.tsx", - "hash": "c33dce048b40dcd58abe2dda0d455677a4931a3f", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/callstack-panel.tsx", - "hash": "d1d40c8dbf7d22e031196c3c491cfd01664c8632", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx", - "hash": "657f5b6f074b1b309767ac2160dd1018b730d167", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx", - "hash": "8fdd0ceee0c7d07ac423b255c3ae64f3b710d303", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/full-storages-changes.tsx", - "hash": "acfe871891e9c8eeed4beefc297dd31615f17cf8", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx", - "hash": "d3544f7cbe0f03b46ddd3138f5a93cffeb8de21b", - "deps": [ - "npm:react", - "npm:deep-equal" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/global-variables.tsx", - "hash": "ed5f4aec0a1b718eb39705adef6c83724d0183c8", - "deps": [ - "npm:react", - "npm:bn.js", - "npm:web3" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/memory-panel.tsx", - "hash": "10931a103a2fe9f0dc995bd9ae33d134f584aeb5", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-locals.tsx", - "hash": "51913796afafc7eb690659ce90eb4aa0c57e7e6c", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/solidity-state.tsx", - "hash": "b36c8c74559136287fb7bbc012514b8b080fb239", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx", - "hash": "44ca714fe54648e8b5c82b4aa34f2c15e13dd0d5", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx", - "hash": "ccf08145677784e67cb5540fb6f4265d6fb13ce9", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/storage-panel.tsx", - "hash": "38dcc90f3b472968284a71788b5aafb62760c250", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/styles/assembly-items.css", - "hash": "44a5b020a7f2530b5fdf82d5d7d00f300a245cd8" - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/styles/dropdown-panel.css", - "hash": "39304d236e5683ac024736fd3de18930e3254da1" - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx", - "hash": "669a5cf89c87b1f761c80e3c68b9342548d1c23e", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger.tsx", - "hash": "508097d5dfa6734344bdc39bdf647366d9ac8117", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/reducers/assembly-items.ts", - "hash": "7a7d75eb1285337fffe4b6ab553a5d641f9f6548", - "deps": [ - "npm:deep-equal" - ] - }, - { - "file": "libs/remix-ui/debugger-ui/src/reducers/calldata.ts", - "hash": "e33425d8fd2fc35b0207fb60481a5718f6831e78" - }, - { - "file": "libs/remix-ui/debugger-ui/src/types/index.ts", - "hash": "a319e354be148f74b62b85308fb5d66443c25697" - }, - { - "file": "libs/remix-ui/debugger-ui/src/utils/solidityTypeFormatter.ts", - "hash": "cc1e82f8c1db777e2130662862e033eec49e3467", - "deps": [ - "npm:bn.js" - ] - }, - { - "file": "libs/remix-ui/drag-n-drop/src/index.ts", - "hash": "d76ead226d8b45a957591c451b87cf6226e6d137" - }, - { - "file": "libs/remix-ui/drag-n-drop/src/lib/context/moveContext.ts", - "hash": "4eb31c87a7b12667e6c8ddcb16303268ef387d4d", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/drag-n-drop/src/lib/drag-n-drop.tsx", - "hash": "ea94d40ca14a722219e9a0ffed2a8092039b5592", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/drag-n-drop/src/lib/types/index.ts", - "hash": "a995f40117c6e489d4427ab8a1cd32a56d8ea7e8", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/editor/src/index.ts", - "hash": "8c35c07c1222f30e4674990ad8f629021e824f1d" - }, - { - "file": "libs/remix-ui/editor/src/lib/actions/editor.ts", - "hash": "c0e20d79ba6227783125e6df9fc6fdcfc676e81d" - }, - { - "file": "libs/remix-ui/editor/src/lib/hardhat-ethers-extension.ts", - "hash": "13cfaf006662e5f6ca07aa59626ed3fcfb105e67" - }, - { - "file": "libs/remix-ui/editor/src/lib/helpers/retrieveNodesAtPosition.ts", - "hash": "3e21a6804f18de32139d74117c053cd4dfa79da1" - }, - { - "file": "libs/remix-ui/editor/src/lib/providers/completion/completionGlobals.ts", - "hash": "b4dc57cb735a11c4c143f82c9beb2b6e2d06db79" - }, - { - "file": "libs/remix-ui/editor/src/lib/providers/completion/contracts/contracts.txt", - "hash": "94615103e057309fb65f0907277cbf67e7daabaa" - }, - { - "file": "libs/remix-ui/editor/src/lib/providers/completionProvider.ts", - "hash": "305095cc762c10c5c8411b43f6bce025abb8cc7b", - "deps": [ - "npm:lodash" - ] - }, - { - "file": "libs/remix-ui/editor/src/lib/providers/definitionProvider.ts", - "hash": "b7bbfedf7473ddb5889735e3b18ee85c24c39448", - "deps": [ - "npm:@monaco-editor/react" - ] - }, - { - "file": "libs/remix-ui/editor/src/lib/providers/highlightProvider.ts", - "hash": "cad254a2089f4a325abba06ce1f50ee1e6650b70", - "deps": [ - "npm:@monaco-editor/react" - ] - }, - { - "file": "libs/remix-ui/editor/src/lib/providers/hoverProvider.ts", - "hash": "eed9b7609def705bf58c15f77587e1c8f2ed4b58", - "deps": [ - "npm:@monaco-editor/react" - ] - }, - { - "file": "libs/remix-ui/editor/src/lib/providers/referenceProvider.ts", - "hash": "410dbe588ddee2367a91d359aaa3068e3d95fd46", - "deps": [ - "npm:@monaco-editor/react" - ] - }, - { - "file": "libs/remix-ui/editor/src/lib/remix-plugin-types.ts", - "hash": "5ffa6696cf968a5e4a583a6314d8e0d083839726" - }, - { - "file": "libs/remix-ui/editor/src/lib/remix-ui-editor.css", - "hash": "6443938ff58d34bde060d2eda6e68e20fd6d121e" - }, - { - "file": "libs/remix-ui/editor/src/lib/remix-ui-editor.tsx", - "hash": "ee614eddaae6f77b39605003608f3ecdf95aae61", - "deps": [ - "npm:react", - "npm:lodash", - "npm:@monaco-editor/react" - ] - }, - { - "file": "libs/remix-ui/editor/src/lib/syntaxes/cairo.ts", - "hash": "f6550946d31243f08d76d4216d71c4ca8c66e650" - }, - { - "file": "libs/remix-ui/editor/src/lib/syntaxes/move.ts", - "hash": "9f184937a03c7bb33e90689b6d458f544070dd80" - }, - { - "file": "libs/remix-ui/editor/src/lib/syntaxes/solidity.ts", - "hash": "fda352456e6566645a31162dd13f6f590cf4dd96" - }, - { - "file": "libs/remix-ui/editor/src/lib/syntaxes/zokrates.ts", - "hash": "89a72ff361bd805fd8dc9db796dd5e02389729e3" - }, - { - "file": "libs/remix-ui/editor/src/lib/web-types.ts", - "hash": "cdf48b9219f01c32acdf06ec11470b126fdc4230" - }, - { - "file": "libs/remix-ui/editor/src/types/monaco.ts", - "hash": "1cfc157bddb2e33bd4863bd0228ae69cd8d27c1e" - }, - { - "file": "libs/remix-ui/file-decorators/src/index.ts", - "hash": "a116c66cd38b12685172bfc7bb80fff02a3687b1" - }, - { - "file": "libs/remix-ui/file-decorators/src/lib/components/file-decoration-icon.tsx", - "hash": "20a648fc68e7cefe83370b94cfd4ba94fdddafb7", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-custom-icon.tsx", - "hash": "457036e2f3615deace4f3a0ecbacbd401035c1b1", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-error-icon.tsx", - "hash": "5a9c48b555b42c671eef397ddce4fc0947497678", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-tooltip.tsx", - "hash": "d841e850211854d6ef597cc59c7521b0a2b84096", - "deps": [ - "npm:react", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/file-decorators/src/lib/components/filedecorationicons/file-decoration-warning-icon.tsx", - "hash": "9bfd368506dd2f367e2ce701feb46d18c90c14ca", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/file-decorators/src/lib/helper/index.tsx", - "hash": "10bad7d3fc089dcd5c97ae7845cc4024c9ca39a7", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/file-decorators/src/lib/types/index.ts", - "hash": "fa783ec6e5e529bb44ced52644df33fdef66b2d9" - }, - { - "file": "libs/remix-ui/helper/src/index.ts", - "hash": "94dab78f43e4208d18ba5e9bcf7d46a16404ef54" - }, - { - "file": "libs/remix-ui/helper/src/lib/bleach.ts", - "hash": "44aa12904252e186bdf364a5bc817479214e14bb", - "deps": [ - "npm:he" - ] - }, - { - "file": "libs/remix-ui/helper/src/lib/components/custom-dropdown.tsx", - "hash": "a116c82b4483e7693e0776761c5ce5be997b4a45", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/helper/src/lib/components/custom-tooltip.tsx", - "hash": "560d06ea78d6d24c86f2020b0170d5111a238d26", - "deps": [ - "npm:react", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/helper/src/lib/components/PluginViewWrapper.tsx", - "hash": "058fa3aee096bd4acd51ac451d32d6e74db9b25a", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/helper/src/lib/components/web3Dialog.tsx", - "hash": "341214808664e90f9e9834e7354e3c716e4a6f38", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/helper/src/lib/helper-components.tsx", - "hash": "789999e558baf2344fd8bfe92f0129faf05dc674", - "deps": [ - "npm:@openzeppelin/upgrades-core", - "npm:react" - ] - }, - { - "file": "libs/remix-ui/helper/src/lib/remix-ui-helper.ts", - "hash": "3573f42d2040b0ce096c1cd7f223a216db70d0a7", - "deps": [ - "npm:@ethereumjs/util" - ] - }, - { - "file": "libs/remix-ui/helper/src/types/customtooltip.ts", - "hash": "803f95c2ee09f93d6aa5d67999dbd4f82cc7e342", - "deps": [ - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/index.ts", - "hash": "ab0129545e4dfcd6397befa9fd47fab8a885b1ca" - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/customNavButtons.tsx", - "hash": "c161a825918229efb97ced0cc3184d082f04fe37", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/homeTabFeatured.tsx", - "hash": "c8de93004ecc2f6a7556aeb35cacecf981e1e12a", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:react-multi-carousel" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/homeTabFeaturedPlugins.tsx", - "hash": "395b3c1fb358fe71bdbbc6142719a796b5bf396b", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:react-multi-carousel" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/homeTabFile.tsx", - "hash": "df6b89dd7901aba8212118f06982111c498c4c18", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/homeTabGetStarted.tsx", - "hash": "8b672d8994e10e14f8fb0dd6dce17d3d32a30f46", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:react-multi-carousel" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/homeTabLearn.tsx", - "hash": "c03b96eed68b44fe5421d069ec1f908c1fdf0230", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/homeTabScamAlert.tsx", - "hash": "82e16305bd43b2d4327cd6956b03844aab8ed57c", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/homeTabTitle.tsx", - "hash": "d73d1c979a6762750480bcbc746220f94f3694cb", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/pluginButton.tsx", - "hash": "426c84bf2f8b724a073dac03af3a0a432db9279f", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/types/carouselTypes.ts", - "hash": "128815d9797c23918d26fa77d2f01b12a436dea1", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/components/workspaceTemplate.tsx", - "hash": "4610236f79f2e3477374f1007d049149a9585f73", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.css", - "hash": "f448657ee2bcda7c909e8075543e18138c038bbd" - }, - { - "file": "libs/remix-ui/home-tab/src/lib/remix-ui-home-tab.tsx", - "hash": "851d6fe5b1368e6c236a0e8ed69cf42bc61a4d61", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/home-tab/src/lib/themeContext.tsx", - "hash": "fc67007dac5e1f63a4327e3a9cbf623a6b7bc273", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/locale-module/src/index.ts", - "hash": "fdda78b342be3d72631b288bc0eeaf6d4fbf7bb2" - }, - { - "file": "libs/remix-ui/locale-module/src/lib/remix-ui-locale-module.module.css", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "libs/remix-ui/locale-module/src/lib/remix-ui-locale-module.tsx", - "hash": "22d9a746f41e10bc5d3d850452b4542924a2e32c", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/locale-module/types/locale-module.ts", - "hash": "824f68147cc42a4ac0bc69b07e17f9fb7eac7320", - "deps": [ - "npm:@remixproject/engine", - "npm:events" - ] - }, - { - "file": "libs/remix-ui/modal-dialog/src/index.ts", - "hash": "42e455230769bfe814c61b3bff31656062febcc5" - }, - { - "file": "libs/remix-ui/modal-dialog/src/lib/modal-dialog-custom.css", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "libs/remix-ui/modal-dialog/src/lib/modal-dialog-custom.tsx", - "hash": "060b4503ab993703adfc872dd9bd5f1acef5baaf", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/modal-dialog/src/lib/remix-ui-modal-dialog.css", - "hash": "62a0dd59874572dd3a4cb8b6f827342abd8d3d96" - }, - { - "file": "libs/remix-ui/modal-dialog/src/lib/remix-ui-modal-dialog.tsx", - "hash": "bb02249b82ad25b751469015039bd0a9f4662638", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/modal-dialog/src/lib/types/index.ts", - "hash": "0c96017bac8852f0b44a644bef22c3e4cc3f382b" - }, - { - "file": "libs/remix-ui/panel/src/index.ts", - "hash": "11b5ef7c6744bb27249900137b3cb65cbd00fddf" - }, - { - "file": "libs/remix-ui/panel/src/lib/dragbar/dragbar.css", - "hash": "1cfe29f8d1d58d8e49cc6f5bf24d8f0348c6ccc4" - }, - { - "file": "libs/remix-ui/panel/src/lib/dragbar/dragbar.tsx", - "hash": "642786e86615fb98051a018e5acb89a9ada7e0db", - "deps": [ - "npm:react", - "npm:react-draggable" - ] - }, - { - "file": "libs/remix-ui/panel/src/lib/main/main-panel.css", - "hash": "28a24ba01dab07ca5c7e86c9c761d67ba6f98b20" - }, - { - "file": "libs/remix-ui/panel/src/lib/main/main-panel.tsx", - "hash": "0b59d665e3c9661d3fa772c0669bf3a3783cfea7", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/panel/src/lib/plugins/panel-header.tsx", - "hash": "066d664f2725fd761abd44aa5bf9258f509db05f", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/panel/src/lib/plugins/panel-plugin.tsx", - "hash": "9f35cb73e30a3f73840f283535bf4b4d7935129a", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/panel/src/lib/plugins/panel.css", - "hash": "076cb4aafc1473fa19982418eecdb636baadbe56" - }, - { - "file": "libs/remix-ui/panel/src/lib/plugins/remix-ui-panel.tsx", - "hash": "37fa018c92a9e324d7cc3207478cc4b9fc506f05", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/panel/src/lib/types/index.ts", - "hash": "67b79c421413e0e965c2cb84478458fad4cf4056", - "deps": [ - "npm:@remixproject/plugin-utils" - ] - }, - { - "file": "libs/remix-ui/permission-handler/src/index.ts", - "hash": "dfa55cfc9d9053bb7b94938990f0e2bab4b0f71e" - }, - { - "file": "libs/remix-ui/permission-handler/src/interface/index.ts", - "hash": "74aab6b1b370aa99fd7934e43f90aef5b16ec5d7", - "deps": [ - "npm:@remixproject/plugin-utils" - ] - }, - { - "file": "libs/remix-ui/permission-handler/src/lib/permission-dialog.css", - "hash": "68e0d845b5f2bf5f9f04883f1834f2093a06a601" - }, - { - "file": "libs/remix-ui/permission-handler/src/lib/permission-dialog.tsx", - "hash": "fb2b1376c43b1e0036925635c2acaf1b311bae32", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/index.ts", - "hash": "de466b001dfc50651c1a2339f9a16259d971141e" - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/components/ActivePluginCard.tsx", - "hash": "8290f1c8c38597a8c3eea9b11cab1441e7be2ee3", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/components/ActivePluginCardContainer.tsx", - "hash": "f0eab209af6e748bea6d6f5915a5e0fb095005f9", - "deps": [ - "npm:@remixproject/plugin-utils", - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCard.tsx", - "hash": "be8713b1bf57931b5d4178a9bc8f137ecf6b6688", - "deps": [ - "npm:@remixproject/plugin-utils", - "npm:react" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/components/InactivePluginCardContainer.tsx", - "hash": "c1f8dedd786ea1748ab5ca5de0223c13669edbbb", - "deps": [ - "npm:@remixproject/plugin-utils", - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/components/LocalPluginForm.tsx", - "hash": "6daa4d600acd3003ab25be9dfd549632255086c7", - "deps": [ - "npm:react", - "npm:@remixproject/engine-web", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/components/moduleHeading.tsx", - "hash": "0fe2534bcad6be33d5690dd7eec3a877e09aed83", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/components/permissionsSettings.tsx", - "hash": "e1bd92be48fd2fe47f8b15007d5e823114af4db0", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/components/rootView.tsx", - "hash": "56439b0ad344ddb276c470e0eccae08965e2848b", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:@remixproject/plugin-utils" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/custom-hooks/useLocalStorage.ts", - "hash": "d4a90aa657b5c462680d5c4bbd2a1130bc9eeffc", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/reducers/pluginManagerReducer.ts", - "hash": "5c2d1951abfd5ab827fdffc7a477ae7175ddcc86" - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/remix-ui-plugin-manager.css", - "hash": "65913d52aa3cee8160efca5713105f17165510f1" - }, - { - "file": "libs/remix-ui/plugin-manager/src/lib/remix-ui-plugin-manager.tsx", - "hash": "e42a1f540852acaf43aae8ebafbc2013ea1fde85", - "deps": [ - "npm:@remixproject/plugin-utils", - "npm:react" - ] - }, - { - "file": "libs/remix-ui/plugin-manager/src/types.d.ts", - "hash": "36a4ebdba2d8f95b3162b43e28c4ec62519914a8", - "deps": [ - "npm:@remixproject/engine", - "npm:events", - "npm:@remixproject/plugin-utils", - "npm:@remixproject/engine-web" - ] - }, - { - "file": "libs/remix-ui/project.json", - "hash": "4358f14a7a957cb09b6f1f534667f123f67a022c" - }, - { - "file": "libs/remix-ui/publish-to-storage/src/index.ts", - "hash": "79e6f4dac6f9c99d840e65b0ad4b3522259e8d58" - }, - { - "file": "libs/remix-ui/publish-to-storage/src/lib/publish-to-storage.css", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "libs/remix-ui/publish-to-storage/src/lib/publish-to-storage.tsx", - "hash": "7d646043f3991f2494c94e275d0bd56a94910bc8", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/publish-to-storage/src/lib/publishOnSwarm.tsx", - "hash": "af7e189940bed650dcbade1318572ae9f7e62dbd", - "deps": [ - "npm:@ethersphere/bee-js" - ] - }, - { - "file": "libs/remix-ui/publish-to-storage/src/lib/publishToIPFS.tsx", - "hash": "d54332e96f01311790903d2ab25a03e30da9c0c8", - "deps": [ - "npm:ipfs-http-client" - ] - }, - { - "file": "libs/remix-ui/publish-to-storage/src/lib/types/index.ts", - "hash": "68d15243908e6d0ea47f1fbe084e6b38894c9f81" - }, - { - "file": "libs/remix-ui/README.md", - "hash": "8dd1b4b48de4d70c4dea0d5f1f395c0ed7fbc49a" - }, - { - "file": "libs/remix-ui/renderer/src/index.ts", - "hash": "a891eab32e1a0e2617d4e951ffa3ccfcc85f06b4" - }, - { - "file": "libs/remix-ui/renderer/src/lib/renderer.css", - "hash": "8de6d72419f30a9320765ea80e32f5d83c3f8a03" - }, - { - "file": "libs/remix-ui/renderer/src/lib/renderer.tsx", - "hash": "9873b84c07f16f48f2dbb022a7783bd2debfa417", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/index.ts", - "hash": "1964da6480d5f921b1a3632ecf200ec7b1fe7272" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/actions/account.ts", - "hash": "060de8bf62ec73d177e492d2b640f6caa4bdd6f1" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/actions/actions.ts", - "hash": "16f144560c58fdcb7260a60db218edd2b387b7b3" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/actions/deploy.ts", - "hash": "e35d3b74f4ec5f71c4f4d185127b6e6df44fce7b", - "deps": [ - "npm:@openzeppelin/upgrades-core", - "npm:web3" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/actions/events.ts", - "hash": "8377f8920d48cd8ae368283e831d03283325a6d6", - "deps": [ - "npm:bn.js", - "npm:web3", - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/actions/index.ts", - "hash": "97ae968207e661b0b23fd5248b95972b835f17af", - "deps": [ - "npm:react", - "npm:@openzeppelin/upgrades-core" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/actions/payload.ts", - "hash": "c8bee7af2ed59b31b051476173a9425fe6e11e02" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/actions/recorder.ts", - "hash": "2bf910650b576213b1e6c3567b0a801ca0d40700" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/account.tsx", - "hash": "e067dab634a1fee2deaca7f3e63f85c0b53bd502", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx", - "hash": "9e232905f8abceb4d06e13bf41e988db5a13b083", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:@ethereumjs/util", - "npm:process" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx", - "hash": "1110dfc923d37aeb799f989090048b7fc07fa33b", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/deployButton.tsx", - "hash": "6e72485186f7c56ff16a83902fd74c5b8c493461", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/deployInput.tsx", - "hash": "3f00e3fa383f3f4f31c10a08083760cb9083abb2", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/environment.tsx", - "hash": "c4dc956f8132c0df3fb4a1b0160702be4c2edc1f", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/gasPrice.tsx", - "hash": "75a9ad482fd4ea20f2fed062b1501d4f85a8de62", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx", - "hash": "edb535a6b27d523ab4c147123548440b598b6516", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/mainnet.tsx", - "hash": "a27e40b640b0126693aa257fdb0f619649e95789", - "deps": [ - "npm:react", - "npm:web3" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/multiDeployInput.tsx", - "hash": "40aea41eaf077201ee1ede8eeb8ffe06c55e323e", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/network.tsx", - "hash": "135dbd4db3162b797adc06338d59438cdd5bc5bc", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/passphrase.tsx", - "hash": "c118ede4a03d3145690dba35a83fabaa029bb632", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/recorderCardUI.tsx", - "hash": "5f9639077c16887e3242e73c03313310752a75e6", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/scenario.tsx", - "hash": "689fd116b31261122288feb5d7f69864ff0364e2", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/settingsUI.tsx", - "hash": "d8fa122317d262388b71257f1650aabe1c19e30e", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx", - "hash": "c56fc3f2f2697c389857668f74d12100f775ce09", - "deps": [ - "npm:react", - "npm:@ethereumjs/util", - "npm:bn.js" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/components/value.tsx", - "hash": "0c41c613f1435417f75871120b417d96198636c4", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:bn.js" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/constants/index.ts", - "hash": "016bad8856b7512bade7993f6736fca25ad57616" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/css/card.css", - "hash": "65cba95c6062ab496e2f9c2b398c2dafe29ce0b8" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/css/run-tab.css", - "hash": "c3ec9a555a1091ca3778f792cea9aea2d66a4145" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/reducers/runTab.ts", - "hash": "3e9614af3fc9fc34a663395c43781799d7f228b9" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/run-tab.tsx", - "hash": "ae5474e492967f7fe0b59972d209a9c68499639d", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/types/blockchain.d.ts", - "hash": "137ff0e92c7d7b8ea38b0ad6d9304a80e0fe1402", - "deps": [ - "npm:@remixproject/engine", - "npm:events", - "npm:bn.js" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/types/execution-context.d.ts", - "hash": "dfa2a74952a18a9002113954c961e1f152230dcc", - "deps": [ - "npm:web3" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/types/index.ts", - "hash": "e686f0defa7b36e6d550832eaff2be8a22928278", - "deps": [ - "npm:react", - "npm:@openzeppelin/upgrades-core" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/types/injected.d.ts", - "hash": "085faca4c5c972ff685878e7a1bcc29ede535cc7" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/types/node.d.ts", - "hash": "365c95a2cb9f7da7174a73b0115fbfd3be0e380f" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/types/recorder.d.ts", - "hash": "3c4ec18c20b63b3fbab125f266f48c70d04b3f04" - }, - { - "file": "libs/remix-ui/run-tab/src/lib/types/run-tab.d.ts", - "hash": "31314dd710f7bb5108020f4d675d45c78ef2914e", - "deps": [ - "npm:@remixproject/engine-web" - ] - }, - { - "file": "libs/remix-ui/run-tab/src/lib/types/vm.d.ts", - "hash": "5b94d5315db576855d51022d15282659e33d13a2" - }, - { - "file": "libs/remix-ui/search/src/index.ts", - "hash": "72588397c4a05b3467901faa8a2374ea8394daf2" - }, - { - "file": "libs/remix-ui/search/src/lib/components/Exclude.tsx", - "hash": "043d2c733b88914e968236cddbec336d0c042cff", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/Find.tsx", - "hash": "f4fae443b0b0c019f39e182c4bdc07802b505c62", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/FindContainer.tsx", - "hash": "ed52d893fdd1040d5994d38bf2af294e05cc6276", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/Include.tsx", - "hash": "9312c1de059f2e3b4c2b4b07fcc22e7c4ad791d5", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/OverWriteCheck.tsx", - "hash": "4dbd9180098ba3c067616d40046cd9b864c27613", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/Replace.tsx", - "hash": "f4b5b7653f0ebc838485409768745e421605494f", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/results/ResultFileName.tsx", - "hash": "333c608a9b4de39cd43995a49f30c3595621960b", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/results/ResultItem.tsx", - "hash": "36ebb04a87e7129515a214f0db081202143fc481", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/results/Results.tsx", - "hash": "f7573bf3b54beb3c6d61a20758f7b9135aac3a8a", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/results/ResultSummary.tsx", - "hash": "ad6141ecbc82e94a4718ab7c94b2714edfa9b93c", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/results/SearchHelper.ts", - "hash": "fb6b096df2d371a8f8aabb921594028f6f750447" - }, - { - "file": "libs/remix-ui/search/src/lib/components/Search.tsx", - "hash": "3c002f19630b1c1e13ea6263ed342dc3451ccadf", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/StopSearch.tsx", - "hash": "41e66cc11086d704619113d04063e76ce74627d7", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/components/Undo.tsx", - "hash": "03cbbf4550520d89e1a85a1591aaccd81ca10236", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/context/context.tsx", - "hash": "c4cc7ca55153b703cb533e585967017052e5307c", - "deps": [ - "npm:react", - "npm:@jsdevtools/file-path-filter", - "npm:lodash" - ] - }, - { - "file": "libs/remix-ui/search/src/lib/reducers/Reducer.ts", - "hash": "8ff867d1c83c49978f33546085b83ef48633b54f" - }, - { - "file": "libs/remix-ui/search/src/lib/search.css", - "hash": "17b49ab14da99b08f341a79686e60dc7da2a19c0" - }, - { - "file": "libs/remix-ui/search/src/lib/types/index.ts", - "hash": "b59eb23deb0590e058e320e773ad522c3d462a8f" - }, - { - "file": "libs/remix-ui/settings/src/index.ts", - "hash": "432ac58185a148a0274c2b5e06e2b03c045e69eb" - }, - { - "file": "libs/remix-ui/settings/src/lib/constants.ts", - "hash": "44043493c3c46a9d313e5ca13d0fad5fb58bbab7" - }, - { - "file": "libs/remix-ui/settings/src/lib/etherscan-settings.tsx", - "hash": "f7903cb0e43754a030f1e0445d97d009327f5005", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/settings/src/lib/github-settings.tsx", - "hash": "5a873290d7e93111333d37d3c38f6bb789c04caf", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/settings/src/lib/remix-ui-settings.css", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "libs/remix-ui/settings/src/lib/remix-ui-settings.tsx", - "hash": "8ac7db82dccb514bd5d06a1f63c5e277c3a85971", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/settings/src/lib/settingsAction.ts", - "hash": "87ecd3c0d3c64eeb22410333044f2b41aed0d93c" - }, - { - "file": "libs/remix-ui/settings/src/lib/settingsReducer.ts", - "hash": "27335af05a3cdf90b523e0ccd085c6edf54f145a" - }, - { - "file": "libs/remix-ui/settings/src/types/index.ts", - "hash": "f14027f886a2db05a0a2e9662a1420a9a38b430d" - }, - { - "file": "libs/remix-ui/solidity-compiler/src/index.ts", - "hash": "386d3792be0b70a04fa8498657ccd7537336dd3b" - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/actions/compiler.ts", - "hash": "b1c0b686dea979f672eb8e06f26dc426e0e52815", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/api/compiler-api.ts", - "hash": "e27cc7aa55da4e7e88b87d9e40600b8741518175", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/compiler-container.tsx", - "hash": "78570be9b4d3109f836d908abe71e5543b442c3f", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:semver", - "npm:axios" - ] - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/compilerConfiguration.tsx", - "hash": "6bda67d0e2d3579585add0440a5534612dc877cb" - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/contract-selection.tsx", - "hash": "587b92614ed9385763e68297c0d59327d4c1d9c6", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:file-saver" - ] - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/css/style.css", - "hash": "dbf0fc47d0ab857a6e1e3dbcf5fed1d46badc7a0" - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/logic/compileTabLogic.ts", - "hash": "9ac45e720ba74bd12a3e42baf5ea9fb7bd181a59", - "deps": [ - "npm:events" - ] - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/logic/contract-parser.ts", - "hash": "92d18f754cd9957a7c1e2639da1f6a36060c4421", - "deps": [ - "npm:solc" - ] - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/logic/flattenerUtilities.ts", - "hash": "a354920c299278ad424e42bac15eaac558814733" - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/logic/index.ts", - "hash": "e2c8f6d006c08119fe37c6352ac24592b27be2ef" - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/reducers/compiler.ts", - "hash": "f705c0f3ccbe20b706f90596ed779aa305f35cc1" - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/solidity-compiler.tsx", - "hash": "62774431213aa202a0cfa02ea92c9897d7704397", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/solidity-compiler/src/lib/types/index.ts", - "hash": "848596f5e04ca20535763f842a8adf9d5301a40f" - }, - { - "file": "libs/remix-ui/solidity-uml-gen/src/index.ts", - "hash": "1e2d2606382debab9354fe0244e52f7eeec91778" - }, - { - "file": "libs/remix-ui/solidity-uml-gen/src/lib/components/UmlDownload.tsx", - "hash": "1af9d635b14e71ea19a4561de09b95af29cfb0c6", - "deps": [ - "npm:react", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/solidity-uml-gen/src/lib/css/solidity-uml-gen.css", - "hash": "d421d2546cf2d550e0acbe0bbd91bd7c0c9ee240" - }, - { - "file": "libs/remix-ui/solidity-uml-gen/src/lib/solidity-uml-gen.tsx", - "hash": "c729f91967d3499c4c66a747a999e391569e9587", - "deps": [ - "npm:react", - "npm:react-zoom-pan-pinch", - "npm:react-image-magnifiers" - ] - }, - { - "file": "libs/remix-ui/solidity-uml-gen/src/lib/utilities/UmlDownloadStrategy.ts", - "hash": "18f82c5ca43c650a1e289d5798b6f163d1e54787", - "deps": [ - "npm:jspdf" - ] - }, - { - "file": "libs/remix-ui/solidity-uml-gen/src/types/index.ts", - "hash": "210b9c60667d852b75570fdfe570e8ae11b8e526", - "deps": [ - "npm:@remixproject/engine-web", - "npm:@remixproject/plugin-api", - "npm:react" - ] - }, - { - "file": "libs/remix-ui/solidity-unit-testing/src/index.ts", - "hash": "ad00e8d3b4ceba78542ee7f43410aa5c272d0e0a" - }, - { - "file": "libs/remix-ui/solidity-unit-testing/src/lib/css/style.css", - "hash": "8f64f76a99215965f51c57071955d7315b4434be" - }, - { - "file": "libs/remix-ui/solidity-unit-testing/src/lib/logic/testTabLogic.ts", - "hash": "6179adb62c081c795964955ed8b972bf02420239" - }, - { - "file": "libs/remix-ui/solidity-unit-testing/src/lib/solidity-unit-testing.tsx", - "hash": "6eae02296cb3159720ce7c3f709e92f9cda7cb84", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:semver", - "npm:async", - "npm:web3", - "npm:util" - ] - }, - { - "file": "libs/remix-ui/static-analyser/src/index.ts", - "hash": "86a00ccd14d910eccecd3835934c8ab5abc718c7" - }, - { - "file": "libs/remix-ui/static-analyser/src/lib/actions/staticAnalysisActions.ts", - "hash": "912b8982f8b377aef355944ed924ee7b63943fcd", - "deps": [ - "npm:@remixproject/plugin-api", - "npm:react" - ] - }, - { - "file": "libs/remix-ui/static-analyser/src/lib/Button/StaticAnalyserButton.tsx", - "hash": "cc38e0b3d0cc96636390e54b17b45ea530352007", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/static-analyser/src/lib/components/BasicTitle.tsx", - "hash": "ff7b24b587123ae18324d5d7bf238008aa24f9c6", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/static-analyser/src/lib/ErrorRenderer.tsx", - "hash": "ffe09549bf993458f4344cd06abe7b188cfcc921", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/static-analyser/src/lib/reducers/staticAnalysisReducer.ts", - "hash": "001d9cc80a1aeb43939ad212ac2ccf07fe0efc18", - "deps": [ - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "libs/remix-ui/static-analyser/src/lib/remix-ui-static-analyser.tsx", - "hash": "5328bd8aace83920f75a248b93533e84aaadaf1b", - "deps": [ - "npm:react", - "npm:lodash", - "npm:semver", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/static-analyser/src/staticanalyser.d.ts", - "hash": "91ab4880090182f56d35e602d1376464f26248a6", - "deps": [ - "npm:@remixproject/plugin-api", - "npm:@remixproject/engine-web", - "npm:events" - ] - }, - { - "file": "libs/remix-ui/tabs/src/index.ts", - "hash": "5f41e08497c21603f428945eb49ef870e0ee6b9b" - }, - { - "file": "libs/remix-ui/tabs/src/lib/remix-ui-tabs.css", - "hash": "e769523822a9d3e981d69551dec0c673fe7bb3a4" - }, - { - "file": "libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx", - "hash": "1c407149b7ee7f82776040dcf1e56a31cc9a0d98", - "deps": [ - "npm:@remixproject/engine", - "npm:react", - "npm:react-tabs" - ] - }, - { - "file": "libs/remix-ui/terminal/src/index.ts", - "hash": "5b8eeca5b52fba10c95fce91876ad125698c9153" - }, - { - "file": "libs/remix-ui/terminal/src/lib/actions/terminalAction.ts", - "hash": "87951d8a989e1c3f43afc87395567971cde54796", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/commands.ts", - "hash": "0dc02b371b6bc38faeebdbd8749f821af93d4c6f" - }, - { - "file": "libs/remix-ui/terminal/src/lib/components/ChechTxStatus.tsx", - "hash": "44411142f547d75da61d7e79d79ca541dad89946", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/components/Context.tsx", - "hash": "71678259880347ba11d2ff09444d89aec88f5663", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/components/RenderCall.tsx", - "hash": "5c39b8f32db28e37a542f5be9eaf058fae96339b", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/components/RenderKnownTransactions.tsx", - "hash": "e239b035d74cafeee71d0c7d22aa7481a49092ad", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/components/RenderUnknownTransactions.tsx", - "hash": "4acf14ecbed5a59a42d0858d7afad8a786b83cc2", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/components/Table.tsx", - "hash": "1ca51dac0fda5096ab291558af04f14528e144e5", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/custom-hooks/useKeyPress.tsx", - "hash": "12bbc1cefc718d6ac9a6359abc77b3e2cf1d2cd7", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/reducers/terminalReducer.ts", - "hash": "e8046e4c96a154195b01888b29f1c6e610a3727d" - }, - { - "file": "libs/remix-ui/terminal/src/lib/remix-ui-terminal.css", - "hash": "13402e45ee2b3baeb3ce719bb25c3c1ac381afe2" - }, - { - "file": "libs/remix-ui/terminal/src/lib/remix-ui-terminal.tsx", - "hash": "47a2627d8a4ece7393a0162f3aa364e8da183cd1", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:javascript-serialize", - "npm:js-beautify", - "npm:html-react-parser" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/terminalWelcome.tsx", - "hash": "aae858f0996b39e0d21d47cc5e9ffb259946426c", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/terminal/src/lib/types/terminalTypes.ts", - "hash": "7a77b11dabb1970fe0fcbb4f582624359686eb99" - }, - { - "file": "libs/remix-ui/terminal/src/lib/utils/utils.ts", - "hash": "3ea77b6ed57c6d616f454ecee7ec9aa90cc34ad0" - }, - { - "file": "libs/remix-ui/terminal/src/lib/utils/wrapScript.ts", - "hash": "75b1972869cdcf8129cfe65a48e827f470868982" - }, - { - "file": "libs/remix-ui/theme-module/src/index.ts", - "hash": "f83499af53fdbb47e28b789beb7641977731bd94" - }, - { - "file": "libs/remix-ui/theme-module/src/lib/remix-ui-theme-module.module.css", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "libs/remix-ui/theme-module/src/lib/remix-ui-theme-module.tsx", - "hash": "e85700dbc873f8c62ca5b5bef88e60763ae085de", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/theme-module/src/reducers/themeModuleReducers.ts", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "libs/remix-ui/theme-module/types/theme-module.ts", - "hash": "ac0b5db7cbe98807c16751acce99c3a8ba7703f8", - "deps": [ - "npm:@remixproject/engine", - "npm:events" - ] - }, - { - "file": "libs/remix-ui/toaster/src/index.ts", - "hash": "1db646761ee9ce30cc47c880d820fe08e45c52b2" - }, - { - "file": "libs/remix-ui/toaster/src/lib/toaster.css", - "hash": "c026edbf4923e8fac73f7c2e5b9364c247ee9a1c" - }, - { - "file": "libs/remix-ui/toaster/src/lib/toaster.tsx", - "hash": "97255cb4d27e2faf5a59b20061a3a97b47f8a810", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/tooltip-popup/src/index.ts", - "hash": "cad02e885314a1b8d2612c4b6a44b860fce75a50" - }, - { - "file": "libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.module.css", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "libs/remix-ui/tooltip-popup/src/lib/tooltip-popup.tsx", - "hash": "96859c424aa9b8d866548a7346e437940ad08c72", - "deps": [ - "npm:react", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/tooltip-popup/src/types/index.ts", - "hash": "747c392c4c9af0deeb8bf496d7101e92f996c381" - }, - { - "file": "libs/remix-ui/tree-view/src/index.ts", - "hash": "abc1b9387267619830256105b7a8f860b3748062" - }, - { - "file": "libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.css", - "hash": "9064c468808a0df50c9465485311fc423a3509cb" - }, - { - "file": "libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx", - "hash": "4f47c123c49e2a713e05e63b6cf5949f9a4b7209", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/tree-view/src/lib/tree-view-item/tree-view-item.css", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "libs/remix-ui/tree-view/src/lib/tree-view-item/tree-view-item.tsx", - "hash": "fd092c882dd15136a54ecf117f52fac548e50774", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/tree-view/src/types/index.ts", - "hash": "4f6bfc9e020304ad447c4476f1559875b21c4a06" - }, - { - "file": "libs/remix-ui/utils/src/index.ts", - "hash": "d6282f565ac28a59d97bad35f0fce564c2fa7f75" - }, - { - "file": "libs/remix-ui/utils/src/lib/should-render.tsx", - "hash": "b414cdf5ef3c7a2950f420dd905eff5cc88933e2", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/index.ts", - "hash": "8a82a3c0faa32d1e98b44bc0f3bbba1fb2c621f4" - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/Badge.tsx", - "hash": "6362a7ed62b50b2e36d9e302e1c9a9af9740ba04", - "deps": [ - "npm:react", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/BasicLogo.tsx", - "hash": "6c0b41331d0aa4abf46ebdcb595e6b801a434487", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/Chevron.tsx", - "hash": "11f9c23c203189e041c6388a5f5c9f622c9c4905", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/Home.tsx", - "hash": "c0ba0a4addd16246a637ef2a96138d15de39bed0", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/Icon.tsx", - "hash": "95bff088c874178cd1832abbdf58cf9ec8309456", - "deps": [ - "npm:react", - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/components/IconList.tsx", - "hash": "17f7c2b0488e13ae6897467fa7222aea3ca30b8f", - "deps": [ - "npm:react", - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/reducers/iconBadgeReducer.ts", - "hash": "e3cb76c7163c1c9809ff7b3eced90762afe5bee5" - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/reducers/verticalScrollReducer.ts", - "hash": "9987b3a3694d49c2753673e40b51b3cfc6c72455" - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/remix-ui-vertical-icons-panel.css", - "hash": "393ee84773f3f7af77a8fc01d550f1c6bb0163c9" - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/remix-ui-vertical-icons-panel.tsx", - "hash": "9d45b6f335e563138ecb76d70b8dd47307384c64", - "deps": [ - "npm:react", - "npm:@remixproject/engine" - ] - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/types/index.ts", - "hash": "754c897b8b1ccd5f769ced2941cdb4fad2af935b", - "deps": [ - "npm:@remixproject/plugin-utils" - ] - }, - { - "file": "libs/remix-ui/vertical-icons-panel/src/lib/vertical-icons-context-menu.tsx", - "hash": "0330af0412253c1568b0cbd74d663c58560c5b0d", - "deps": [ - "npm:@remixproject/engine", - "npm:react" - ] - }, - { - "file": "libs/remix-ui/workspace/src/index.ts", - "hash": "57cffde4528b33cb7c3c670880de756978498b62" - }, - { - "file": "libs/remix-ui/workspace/src/lib/actions/events.ts", - "hash": "5c9b03141cad62a4248e18a9aea7f00d6dded5ab", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/actions/index.ts", - "hash": "e34b9db417763c40a14245edac170b25f9d00b32", - "deps": [ - "npm:react", - "npm:gists", - "npm:@remixproject/plugin-api", - "npm:jszip", - "npm:is-electron" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/actions/payload.ts", - "hash": "ea804ce2d17cc8d74cf113880c9978b3d918e8f9" - }, - { - "file": "libs/remix-ui/workspace/src/lib/actions/workspace.ts", - "hash": "a994416f3ce50f8fd04258c7bd8da941447134c4", - "deps": [ - "npm:react", - "npm:@ethereumjs/util", - "npm:axios", - "remix-ide" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx", - "hash": "146721b3b4c6953310d4ddd2b57315b7ede52c2b", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/components/file-explorer-menu.tsx", - "hash": "db0e36379b83f2eae6ef94a25ae6549baef95283", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/components/file-explorer.tsx", - "hash": "15e29a83f6b0bf9992293c8e278869dbb69788f1", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/components/file-label.tsx", - "hash": "bf206de43f9f06f5c494003447f427a4fb03e4ea", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/components/file-render.tsx", - "hash": "b92a449f7f6ad47dbd1fbad320e9855ea5e6ac86", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/components/upload-file.tsx", - "hash": "2ce89cae395a3bc57f61c1de67bfb39a93ec13c7", - "deps": [ - "npm:react" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/components/workspace-hamburger-item.tsx", - "hash": "9651c94c0945fe2d6572ec6120210a7c0a68d409", - "deps": [ - "npm:react", - "npm:react-bootstrap", - "npm:react-intl" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx", - "hash": "bf00c5aa56c29aa2870d9884821024fdbff31f35", - "deps": [ - "npm:react", - "npm:react-bootstrap" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/contexts/index.ts", - "hash": "3423323a905045b1527a6b849800f01718855011", - "deps": [ - "npm:@remixproject/plugin-api", - "npm:react" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/css/file-explorer-context-menu.css", - "hash": "f88c8825a80a443158174646d82b357eb14281d8" - }, - { - "file": "libs/remix-ui/workspace/src/lib/css/file-explorer.css", - "hash": "335dbb9457636d900e93005c366db349d361595c" - }, - { - "file": "libs/remix-ui/workspace/src/lib/css/remix-ui-workspace.css", - "hash": "cc26e166be2072013ab4a0f4b8c1b378f9eb5f8f" - }, - { - "file": "libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx", - "hash": "29399275e127ad642d71cd0bbc1bf723895e54a5", - "deps": [ - "npm:react", - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/reducers/workspace.ts", - "hash": "cceec06c7fc623dde348486145ce5bc613f31298", - "deps": [ - "npm:lodash" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx", - "hash": "a64ddb89799a33e3582cfea42c94a5e8b5550b35", - "deps": [ - "npm:react", - "npm:react-intl", - "npm:react-bootstrap", - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/types/index.ts", - "hash": "5ded4df7d48f29bd41528b2106e58add7e36586d", - "deps": [ - "npm:react", - "npm:@remixproject/plugin-api", - "npm:@remixproject/engine-web", - "npm:react-overlays" - ] - }, - { - "file": "libs/remix-ui/workspace/src/lib/utils/constants.ts", - "hash": "688c4731d6f641cfa06322ed4cf8e4af1fe6c2ce" - }, - { - "file": "libs/remix-ui/workspace/src/lib/utils/gitStatusFilter.ts", - "hash": "1b95e12538fe33afdd4335736bb7d5ca119aa5da" - }, - { - "file": "libs/remix-ui/workspace/src/lib/utils/index.ts", - "hash": "9069e827e02165fa2878e46223da25d6cf5a8fbc" - } - ] - } - }, - "doc-gen": { - "name": "doc-gen", - "type": "app", - "data": { - "name": "doc-gen", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/doc-gen/src", - "projectType": "application", - "implicitDependencies": [], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/doc-gen", - "index": "apps/doc-gen/src/index.html", - "baseHref": "./", - "main": "apps/doc-gen/src/main.tsx", - "tsConfig": "apps/doc-gen/tsconfig.app.json", - "assets": [ - "apps/doc-gen/src/favicon.ico", - "apps/doc-gen/src/profile.json" - ], - "styles": [], - "scripts": [], - "webpackConfig": "apps/doc-gen/webpack.config.js" - }, - "configurations": { - "development": {}, - "production": { - "fileReplacements": [ - { - "replace": "apps/doc-gen/src/environments/environment.ts", - "with": "apps/doc-gen/src/environments/environment.prod.ts" - } - ] - } - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "doc-gen:build", - "hmr": true, - "baseHref": "/" - }, - "configurations": { - "development": { - "buildTarget": "doc-gen:build:development", - "port": 6003 - }, - "production": { - "buildTarget": "doc-gen:build:production" - } - } - } - }, - "tags": [], - "root": "apps/doc-gen", - "files": [ - { - "file": "apps/doc-gen/.eslintrc.json", - "hash": "a92d0f887ac1dc9e913cb3e79f08f8c9645638fa" - }, - { - "file": "apps/doc-gen/.prettierrc", - "hash": "6e6d086922c1f851229dd97476abb6b0e1b0d21d" - }, - { - "file": "apps/doc-gen/project.json", - "hash": "4b997606a538c104a293df412ff5fc9b69e6236b" - }, - { - "file": "apps/doc-gen/src/app/App.css", - "hash": "609253955e26649b42db7210a88a658c97914e0c" - }, - { - "file": "apps/doc-gen/src/app/App.tsx", - "hash": "a11b5b99e8ab6269dbc89149dd07ba16a05a3678", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen-client.ts", - "hash": "ee06c3237fcf726557f757b904dec75dc043c07a", - "deps": [ - "npm:@remixproject/plugin", - "npm:@remixproject/plugin-api", - "npm:@remixproject/plugin-webview", - "npm:events", - "npm:solidity-ast" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen/common/helpers.ts", - "hash": "3ee3dbe10a5bc7c8ea84acfd520d0bae4d4a50fc", - "deps": [ - "npm:solidity-ast" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen/common/properties.ts", - "hash": "5366e8d7efe9b28f79c03d342a190554d8f3cab7", - "deps": [ - "npm:solidity-ast" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen/config.ts", - "hash": "2a3f9fcc6e95aa1cffa669e40136a49ff255f3f9", - "deps": [ - "npm:solidity-ast" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen/doc-item.ts", - "hash": "eb0322302714dc032ed3c0bc4efa24ea1ada654c", - "deps": [ - "npm:solidity-ast" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen/render.ts", - "hash": "5c206f92b6e671fe2399f52d1c6aafa51c587d02", - "deps": [ - "npm:handlebars" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen/site.ts", - "hash": "53ffd5bc929ec142e14fe343fe6e6ee795b7f42c", - "deps": [ - "npm:solidity-ast" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen/templates.ts", - "hash": "b83d0ac77daebc0b7647e10cf04990c44757ec3b" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/common.hbs", - "hash": "b2a3b2a5a2a38bffb8289585ba427883b5ce203f" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/contract.hbs", - "hash": "d33aaefe841bdec82e5e314885b30747e25c5177" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/enum.hbs", - "hash": "677406db9c734d64fe1ccb06945cf3a241899496" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/error.hbs", - "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/event.hbs", - "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/function.hbs", - "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/helpers.ts", - "hash": "92492cf9312148c10d13cb07ff56149d114ef7ad", - "deps": [ - "npm:handlebars" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/modifier.hbs", - "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/page.hbs", - "hash": "6597f0b5c7728af445076ef599a72ca2ce9b8a77" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/struct.hbs", - "hash": "867069e2bca9658c17d65a02c457f19ecd32dc9c" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/user-defined-value-type.hbs", - "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" - }, - { - "file": "apps/doc-gen/src/app/docgen/themes/markdown/variable.hbs", - "hash": "5373296cbc5c01c84c11ee4cfff73d338668560b" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/arrays-equal.ts", - "hash": "fe08726e95f4ada43e925d27f3dc41ead621119a" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/assert-equal-types.ts", - "hash": "0171d13a3664965b1afe14e208ceebb3ee368367" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/clone.ts", - "hash": "f92fa701899ebc9a904df237d28fa2ca7ce02744" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/ensure-array.ts", - "hash": "cd0f8ea570bcf83d029d4e3a9a4b0ca26eba66ae" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/execall.ts", - "hash": "2aca0ad77cc588a5b8f91f4225333dc7b03f7d49" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/is-child.ts", - "hash": "cb07cc7136799f757fff59bccf0f2b7a27f855a1" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/item-type.ts", - "hash": "8873ece1fcd72b624c1833550c2bac6cf38b494b" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/ItemError.ts", - "hash": "3791f71443a60212b97213a7e7f6922b13a110c5" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/map-keys.ts", - "hash": "7852cd85dc13d9c78b420732a150c8674975c32b" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/map-values.ts", - "hash": "c151d7d5529b1f008e23b8785613e3b674d27c99" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/memoized-getter.ts", - "hash": "1a2fef4ae5f650e75011a35b560c19ea7d0954a7" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/natspec.ts", - "hash": "40f752aaa85eea2600270dc2240f28098817e0b2", - "deps": [ - "npm:solidity-ast" - ] - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/normalizeContractPath.ts", - "hash": "6701a6de613413ae26ea4d3daca34c2fe18775c1" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/read-item-docs.ts", - "hash": "36ee13aa7fc219bc555a09788892b0b9ac5556df" - }, - { - "file": "apps/doc-gen/src/app/docgen/utils/scope.ts", - "hash": "dabe99013783b15fe5402347d7afda4c61d0d3bd", - "deps": [ - "npm:solidity-ast" - ] - }, - { - "file": "apps/doc-gen/src/app/hooks/useLocalStorage.tsx", - "hash": "d677de7813b67df1aab99ad203bdd1cc949478e9", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/doc-gen/src/app/views/ErrorView.tsx", - "hash": "f1c4fdaf9198a7f9c0ed7100aee446109255815d", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/doc-gen/src/app/views/index.ts", - "hash": "8b137891791fe96927ad78e64b0aad7bded08bdc" - }, - { - "file": "apps/doc-gen/src/favicon.ico", - "hash": "bcd5dfd67cd0361b78123e95c2dd96031f27f743" - }, - { - "file": "apps/doc-gen/src/index.html", - "hash": "8b2167929333eb2f9178fe05e162c3e1187fc5c5" - }, - { - "file": "apps/doc-gen/src/main.tsx", - "hash": "a6dc3b3a4736f97039e1cfd49ad1ab1acbaf77d5", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/doc-gen/src/profile.json", - "hash": "d73a2eb1c35a71fdad36cbd0ae06c54d6232d48d" - }, - { - "file": "apps/doc-gen/src/types.ts", - "hash": "187fb6e7b31b5dce350e2fb11034b8ecc689f349" - }, - { - "file": "apps/doc-gen/tsconfig.app.json", - "hash": "af84f21cfc8066d0302f5772b7c157e81d418617" - }, - { - "file": "apps/doc-gen/tsconfig.json", - "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" - }, - { - "file": "apps/doc-gen/webpack.config.js", - "hash": "b7f8e45da03ab0bcab779561d870dc9eacf42f92", - "deps": [ - "npm:@nrwl/webpack", - "npm:@nrwl/react", - "npm:webpack", - "npm:terser-webpack-plugin", - "npm:css-minimizer-webpack-plugin" - ] - } - ] - } - }, - "solhint": { - "name": "solhint", - "type": "app", - "data": { - "name": "solhint", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/solhint/src", - "projectType": "application", - "implicitDependencies": [], - "targets": { - "build": { - "dependsOn": [ - "install" - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/solhint", - "index": "apps/solhint/src/index.html", - "baseHref": "./", - "main": "apps/solhint/src/main.tsx", - "tsConfig": "apps/solhint/tsconfig.app.json", - "assets": [ - "apps/solhint/src/favicon.ico", - "apps/solhint/src/profile.json" - ], - "styles": [], - "webpackConfig": "apps/solhint/webpack.config.js" - }, - "configurations": { - "development": {}, - "production": { - "fileReplacements": [ - { - "replace": "apps/solhint/src/environments/environment.ts", - "with": "apps/solhint/src/environments/environment.prod.ts" - } - ] - } - } - }, - "install": { - "executor": "nx:run-commands", - "options": { - "commands": [ - "cd apps/solhint && yarn" - ], - "parallel": false - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "solhint:build", - "hmr": true, - "baseHref": "/" - }, - "configurations": { - "development": { - "buildTarget": "solhint:build:development", - "port": 7003 - }, - "production": { - "buildTarget": "solhint:build:production" - } - } - } - }, - "tags": [], - "root": "apps/solhint", - "files": [ - { - "file": "apps/solhint/package.json", - "hash": "c258c462e6bc2b79535c58628e491da00be87a75", - "deps": [ - "npm:@remixproject/plugin", - "npm:@remixproject/plugin-webview" - ] - }, - { - "file": "apps/solhint/project.json", - "hash": "dbd4bdce84907386bf713ca519aa9e518cc57138" - }, - { - "file": "apps/solhint/src/app/App.tsx", - "hash": "ac1eae48b303ea2c1ece82896736a1499c833e75", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/solhint/src/app/SolhintPluginClient.ts", - "hash": "e3860961147382139fda9c5e6ad4fd9ae198e947", - "deps": [ - "npm:@remixproject/plugin", - "npm:@remixproject/plugin-webview", - "npm:events", - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "apps/solhint/src/favicon.ico", - "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" - }, - { - "file": "apps/solhint/src/index.html", - "hash": "f7f8668c3305522289b1772fb9a1dd6eb8971ee7" - }, - { - "file": "apps/solhint/src/main.tsx", - "hash": "b8ec0b96a0b617e4f119d9720084f05b4b0eb7bc", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/solhint/src/profile.json", - "hash": "2964511f3b2a4102df1fd2e26ae5bd5255e6c20a" - }, - { - "file": "apps/solhint/tsconfig.app.json", - "hash": "af84f21cfc8066d0302f5772b7c157e81d418617" - }, - { - "file": "apps/solhint/tsconfig.json", - "hash": "5aab5e79111d8f97470be7e69da9fdb3ddb5819f" - }, - { - "file": "apps/solhint/webpack.config.js", - "hash": "2e3893c15c3bcc965d002f9199912c74cd61f10d", - "deps": [ - "npm:@nrwl/webpack", - "npm:@nrwl/react", - "npm:webpack", - "npm:terser-webpack-plugin", - "npm:css-minimizer-webpack-plugin" - ] - }, - { - "file": "apps/solhint/yarn.lock", - "hash": "6d16a269b3e5144aff1a11a5197ffa9125eaf2c5" - } - ] - } - }, - "remixd": { - "name": "remixd", - "type": "lib", - "data": { - "name": "remixd", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/remixd/src", - "projectType": "library", - "implicitDependencies": [], - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "options": { - "outputPath": "dist/libs/remixd", - "main": "libs/remixd/src/index.ts", - "tsConfig": "libs/remixd/tsconfig.lib.json", - "updateBuildableProjectDepsInPackageJson": false, - "assets": [ - "libs/remixd/*.md", - "libs/remixd/origins.json" - ] - }, - "configurations": {} - }, - "lint": { - "executor": "@nrwl/linter:eslint", - "outputs": [ - "{options.outputFile}" - ], - "options": { - "lintFilePatterns": [ - "libs/remixd/**/*.ts" - ] - } - } - }, - "tags": [], - "root": "libs/remixd", - "files": [ - { - "file": "libs/remixd/.eslintrc", - "hash": "ab8f38339cde4762a7feb906e9e0f963958e3f93" - }, - { - "file": "libs/remixd/nodemon.json", - "hash": "e16a2bdca3a3750a85b347ef832676d6436ca9cd" - }, - { - "file": "libs/remixd/origins.json", - "hash": "3357227bcafbaa46e04388643e9d058d3b636af6" - }, - { - "file": "libs/remixd/package.json", - "hash": "1882834e5b60cfec828a7d4b74d1423e6652c5c3", - "deps": [ - "npm:@remixproject/plugin", - "npm:@remixproject/plugin-api", - "npm:@remixproject/plugin-utils", - "npm:@remixproject/plugin-ws", - "npm:axios", - "npm:chokidar", - "npm:commander", - "npm:fs-extra", - "npm:isbinaryfile", - "npm:ws", - "npm:latest-version", - "npm:semver", - "npm:@types/axios", - "npm:@types/fs-extra", - "npm:@types/node", - "npm:@types/ws", - "npm:@typescript-eslint/eslint-plugin", - "npm:@typescript-eslint/parser", - "npm:eslint", - "npm:eslint-config-standard", - "npm:eslint-plugin-import", - "npm:eslint-plugin-node", - "npm:eslint-plugin-promise", - "npm:eslint-plugin-standard", - "npm:nodemon", - "npm:ts-node", - "npm:typescript" - ] - }, - { - "file": "libs/remixd/project.json", - "hash": "b4da03d85f91d76b0e587b221e23c3c136b47ad1" - }, - { - "file": "libs/remixd/README.md", - "hash": "bb563fe131ea5ec67cc26df4ada50641650835a4" - }, - { - "file": "libs/remixd/src/bin/remixd.ts", - "hash": "9ca4104325c2ee4e2af3c3a8fe82164f978c34af", - "deps": [ - "npm:latest-version", - "npm:semver", - "npm:ws", - "npm:axios", - "npm:fs-extra", - "npm:commander" - ] - }, - { - "file": "libs/remixd/src/index.ts", - "hash": "05195edb3c313651cce52b446a43179dbd835c19" - }, - { - "file": "libs/remixd/src/scripts/installSlither.ts", - "hash": "a255110b3804dcd05e72c2d5339ab21c34c37a89", - "deps": [ - "npm:child_process" - ] - }, - { - "file": "libs/remixd/src/serviceList.ts", - "hash": "c1afd0b3adccf6c3c1eb0055d76965d158e3462e" - }, - { - "file": "libs/remixd/src/services/foundryClient.ts", - "hash": "add3378407d7d66c030fa12886245d9f2fa3159f", - "deps": [ - "npm:ws", - "npm:@remixproject/plugin", - "npm:chokidar", - "npm:fs-extra", - "npm:child_process" - ] - }, - { - "file": "libs/remixd/src/services/gitClient.ts", - "hash": "71f691a8a6f6d3be4ff67247c686e697391ffa1e", - "deps": [ - "npm:ws", - "npm:@remixproject/plugin", - "npm:child_process" - ] - }, - { - "file": "libs/remixd/src/services/hardhatClient.ts", - "hash": "3928e9af64b49bae93e707fd268da8ff4afb0b9e", - "deps": [ - "npm:ws", - "npm:@remixproject/plugin", - "npm:chokidar", - "npm:fs-extra", - "npm:child_process" - ] - }, - { - "file": "libs/remixd/src/services/remixdClient.ts", - "hash": "4718cfbcf10e0e1ad89de48b5c0e7f7261284e79", - "deps": [ - "npm:@remixproject/plugin", - "npm:ws", - "npm:chokidar", - "npm:fs-extra", - "npm:isbinaryfile" - ] - }, - { - "file": "libs/remixd/src/services/slitherClient.ts", - "hash": "64839d4a3532941a1a853818300cc2d2cd1ad9fb", - "deps": [ - "npm:ws", - "npm:@remixproject/plugin", - "npm:child_process" - ] - }, - { - "file": "libs/remixd/src/services/truffleClient.ts", - "hash": "e62fe54ba25c774bb7739717da5b4304263fe1d2", - "deps": [ - "npm:ws", - "npm:@remixproject/plugin", - "npm:chokidar", - "npm:fs-extra", - "npm:child_process" - ] - }, - { - "file": "libs/remixd/src/types/index.ts", - "hash": "48d4640de35f6bc4fd6fd92db68ffaddb3c4bc6e", - "deps": [ - "npm:ws" - ] - }, - { - "file": "libs/remixd/src/utils.ts", - "hash": "93aefb325a538ca2244d703b3ac8a6d2dc87b7e9", - "deps": [ - "npm:fs-extra", - "npm:isbinaryfile" - ] - }, - { - "file": "libs/remixd/src/websocket.ts", - "hash": "fa30ccf381bb271c4870060110fb44c51cd47c91", - "deps": [ - "npm:ws", - "npm:@remixproject/plugin-ws" - ] - }, - { - "file": "libs/remixd/tsconfig.json", - "hash": "62ebbd946474cea997e774d20fffc4d585c184f3" - }, - { - "file": "libs/remixd/tsconfig.lib.json", - "hash": "f367bc80510c232335997d44ec5f815c9f9bbb76" - }, - { - "file": "libs/remixd/tsconfig.spec.json", - "hash": "4fa5ed9ba03d9e30526331b47a0dbad7775ef8c3" - } - ] - } - }, - "vyper": { - "name": "vyper", - "type": "app", - "data": { - "name": "vyper", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "apps/vyper/src", - "projectType": "application", - "targets": { - "build": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:webpack", - "outputs": [ - "{options.outputPath}" - ], - "defaultConfiguration": "development", - "options": { - "compiler": "babel", - "outputPath": "dist/apps/vyper", - "index": "apps/vyper/src/index.html", - "baseHref": "./", - "main": "apps/vyper/src/main.tsx", - "polyfills": "apps/vyper/src/polyfills.ts", - "tsConfig": "apps/vyper/tsconfig.app.json", - "assets": [ - "apps/vyper/src/favicon.ico", - "apps/vyper/src/assets", - "apps/vyper/src/profile.json" - ], - "styles": [ - "apps/vyper/src/styles.css" - ], - "scripts": [], - "webpackConfig": "apps/vyper/webpack.config.js" - }, - "configurations": { - "development": {}, - "production": { - "fileReplacements": [ - { - "replace": "apps/vyper/src/environments/environment.ts", - "with": "apps/vyper/src/environments/environment.prod.ts" - } - ] - } - } - }, - "serve": { - "dependsOn": [ - { - "target": "build", - "projects": "dependencies" - } - ], - "executor": "@nrwl/webpack:dev-server", - "defaultConfiguration": "development", - "options": { - "buildTarget": "vyper:build", - "hmr": true, - "baseHref": "/" - }, - "configurations": { - "development": { - "buildTarget": "vyper:build:development", - "port": 5002 - }, - "production": { - "buildTarget": "vyper:build:production" - } - } - } - }, - "tags": [], - "root": "apps/vyper", - "implicitDependencies": [], - "files": [ - { - "file": "apps/vyper/.babelrc", - "hash": "b1fc97545671f056cd1764f581888d976ec90b89" - }, - { - "file": "apps/vyper/.browserslistrc", - "hash": "f1d12df4faa25ab7f0f03196105e957395f609af" - }, - { - "file": "apps/vyper/.eslintrc", - "hash": "b7d498eea1713f564162cc17f359c194301610d0" - }, - { - "file": "apps/vyper/project.json", - "hash": "543c0873fdf39e2e2013a947a1d0eae24ec11ff6" - }, - { - "file": "apps/vyper/README.md", - "hash": "1ab9b0b88a92a1b352e7b713daf4adbf2e1a5ece" - }, - { - "file": "apps/vyper/src/app/app.css", - "hash": "db9ee76b635f0ffc009803d2f38c53321870ca40" - }, - { - "file": "apps/vyper/src/app/app.tsx", - "hash": "e5f9d801597655887af3d18672ae4f5078cbc7c5", - "deps": [ - "npm:react", - "npm:@remixproject/plugin-api", - "npm:react-bootstrap" - ] - }, - { - "file": "apps/vyper/src/app/components/CompilerButton.tsx", - "hash": "fba082575b75a0357c72bc6ccc4f198947b5ef40", - "deps": [ - "npm:react", - "npm:react-bootstrap" - ] - }, - { - "file": "apps/vyper/src/app/components/LocalUrl.tsx", - "hash": "47acde9dadbfbbcffecce509c8c608930e0afbfe", - "deps": [ - "npm:react", - "npm:react-bootstrap" - ] - }, - { - "file": "apps/vyper/src/app/components/VyperResult.tsx", - "hash": "44ccba7b7fb533779c3b28f7229ea0eaa01de8db", - "deps": [ - "npm:react", - "npm:react-bootstrap", - "npm:react-json-view" - ] - }, - { - "file": "apps/vyper/src/app/components/WarnRemote.tsx", - "hash": "107ab1333511a88203ae2e07659b5bf46602eef0", - "deps": [ - "npm:react" - ] - }, - { - "file": "apps/vyper/src/app/utils/compiler.tsx", - "hash": "0b65c65a1a625fd59650fe32bd9888b593bb6432", - "deps": [ - "npm:@remixproject/plugin-api" - ] - }, - { - "file": "apps/vyper/src/app/utils/index.ts", - "hash": "cb094b5d7bbf04edce31ed86dae65ea249fa9f7b" - }, - { - "file": "apps/vyper/src/app/utils/remix-client.tsx", - "hash": "913131e594cc40b8e4ab150dbf38dc933091e17c", - "deps": [ - "npm:@remixproject/plugin-api", - "npm:@remixproject/plugin-utils", - "npm:@remixproject/plugin-webview", - "npm:@remixproject/plugin" - ] - }, - { - "file": "apps/vyper/src/assets/.gitkeep", - "hash": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391" - }, - { - "file": "apps/vyper/src/assets/logo.svg", - "hash": "78302e19f46ba92735007049a1c60bd45d70d338" - }, - { - "file": "apps/vyper/src/assets/star.svg", - "hash": "901053d3854900761496d4077229c1633391b272" - }, - { - "file": "apps/vyper/src/environments/environment.prod.ts", - "hash": "3612073bc31cd4c1f5d6cbb00318521e9a61bd8a" - }, - { - "file": "apps/vyper/src/environments/environment.ts", - "hash": "d9370e924b51bc67ecddee7fc3b6693681a324b6" - }, - { - "file": "apps/vyper/src/favicon.ico", - "hash": "317ebcb2336e0833a22dddf0ab287849f26fda57" - }, - { - "file": "apps/vyper/src/index.html", - "hash": "85eb9df0fd4a8cb778d18db46881396174046897" - }, - { - "file": "apps/vyper/src/main.tsx", - "hash": "353ad43f6d9c1f89f207be4e712713869acd91c1", - "deps": [ - "npm:react", - "npm:react-dom" - ] - }, - { - "file": "apps/vyper/src/polyfills.ts", - "hash": "2adf3d05b6fcf479dd61c74f6bda95d9edb6ac6b", - "deps": [ - "npm:core-js", - "npm:regenerator-runtime" - ] - }, - { - "file": "apps/vyper/src/profile.json", - "hash": "2c953d0f13660e620cfb6df586c8ea9b1d5eb87a" - }, - { - "file": "apps/vyper/src/styles.css", - "hash": "90d4ee0072ce3fc41812f8af910219f9eea3c3de" - }, - { - "file": "apps/vyper/tsconfig.app.json", - "hash": "62d6d52c3dcac8ea17a4667169c5b592211d531f" - }, - { - "file": "apps/vyper/tsconfig.json", - "hash": "89dc063037d396b341ec1eb427ea567e1cb949db" - }, - { - "file": "apps/vyper/webpack.config.js", - "hash": "9feb0dc08d4a1cdabbc68a78286a03fe4402e0a5", - "deps": [ - "npm:@nrwl/webpack", - "npm:webpack", - "npm:terser-webpack-plugin", - "npm:css-minimizer-webpack-plugin" - ] - } - ] - } - } - }, - "dependencies": { - "plugin_api": [], - "remix-url-resolver": [], - "remix-ws-templates": [], - "solidity-compiler": [], - "remix-core-plugin": [], - "ghaction-helper": [ - { - "source": "ghaction-helper", - "target": "remix-solidity", - "type": "implicit" - }, - { - "source": "ghaction-helper", - "target": "remix-simulator", - "type": "static" - } - ], - "remix-astwalker": [ - { - "source": "remix-astwalker", - "target": "remix-lib", - "type": "implicit" - } - ], - "remix-simulator": [ - { - "source": "remix-simulator", - "target": "remix-lib", - "type": "implicit" - } - ], - "remix-analyzer": [ - { - "source": "remix-analyzer", - "target": "remix-astwalker", - "type": "implicit" - }, - { - "source": "remix-analyzer", - "target": "remix-lib", - "type": "implicit" - } - ], - "remix-solidity": [ - { - "source": "remix-solidity", - "target": "remix-lib", - "type": "implicit" - } - ], - "walletconnect": [], - "remix-debug": [ - { - "source": "remix-debug", - "target": "remix-lib", - "type": "implicit" - }, - { - "source": "remix-debug", - "target": "remix-astwalker", - "type": "implicit" - }, - { - "source": "remix-debug", - "target": "remix-simulator", - "type": "static" - }, - { - "source": "remix-debug", - "target": "remix-solidity", - "type": "static" - } - ], - "remix-tests": [ - { - "source": "remix-tests", - "target": "remix-lib", - "type": "implicit" - }, - { - "source": "remix-tests", - "target": "remix-simulator", - "type": "implicit" - }, - { - "source": "remix-tests", - "target": "remix-solidity", - "type": "implicit" - }, - { - "source": "remix-tests", - "target": "remix-url-resolver", - "type": "static" - } - ], - "doc-viewer": [], - "etherscan": [], - "remix-ide": [ - { - "source": "remix-ide", - "target": "doc-gen", - "type": "implicit" - }, - { - "source": "remix-ide", - "target": "doc-viewer", - "type": "implicit" - }, - { - "source": "remix-ide", - "target": "etherscan", - "type": "implicit" - }, - { - "source": "remix-ide", - "target": "vyper", - "type": "implicit" - }, - { - "source": "remix-ide", - "target": "solhint", - "type": "implicit" - }, - { - "source": "remix-ide", - "target": "walletconnect", - "type": "implicit" - }, - { - "source": "remix-ide", - "target": "remixd", - "type": "static" - }, - { - "source": "remix-ide", - "target": "remix-ui", - "type": "static" - } - ], - "remix-lib": [], - "debugger": [ - { - "source": "debugger", - "target": "remix-debug", - "type": "implicit" - } - ], - "remix-ui": [ - { - "source": "remix-ui", - "target": "remix-ide", - "type": "static" - } - ], - "doc-gen": [], - "solhint": [], - "remixd": [], - "vyper": [] - } - }, - "affectedProjects": [], - "criticalPath": [] -}