From 8fc0c60620c7541a30267ce199224362c83c3ee8 Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Tue, 18 Jul 2023 14:15:56 +0530 Subject: [PATCH 1/9] code action provider for quick fix --- .../src/lib/providers/codeActionProvider.ts | 47 +++++++++++++++++++ .../editor/src/lib/remix-ui-editor.tsx | 2 + 2 files changed, 49 insertions(+) create mode 100644 libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts diff --git a/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts new file mode 100644 index 0000000000..46c73b8f1f --- /dev/null +++ b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts @@ -0,0 +1,47 @@ +import { Monaco } from "@monaco-editor/react" +import monaco from "../../types/monaco" +import { EditorUIProps } from "../remix-ui-editor" + +export class RemixCodeActionProvider implements monaco.languages.CodeActionProvider { + props: EditorUIProps + monaco: Monaco + constructor(props: any, monaco: any) { + this.props = props + this.monaco = monaco + } + + async provideCodeActions ( + model /**ITextModel*/, + range /**Range*/, + context /**CodeActionContext*/, + token /**CancellationToken*/ + ) { + + const actions = context.markers.map(error => { + console.log('error------>', error) + return { + title: `Example quick fix`, + diagnostics: [error], + kind: "quickfix", + edit: { + edits: [ + { + resource: model.uri, + edits: [ + { + range: error, + text: "This text replaces the text with the error" + } + ] + } + ] + }, + isPreferred: true + }; + }); + return { + actions: actions, + dispose: () => {} + } + } +} \ 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..e4c49dfa8a 100644 --- a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx +++ b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx @@ -15,6 +15,7 @@ import { RemixReferenceProvider } from './providers/referenceProvider' import { RemixCompletionProvider } from './providers/completionProvider' import { RemixHighLightProvider } from './providers/highlightProvider' import { RemixDefinitionProvider } from './providers/definitionProvider' +import { RemixCodeActionProvider } from './providers/codeActionProvider' import './remix-ui-editor.css' @@ -749,6 +750,7 @@ export const EditorUI = (props: EditorUIProps) => { monacoRef.current.languages.registerReferenceProvider('remix-solidity', new RemixReferenceProvider(props, monaco)) monacoRef.current.languages.registerHoverProvider('remix-solidity', new RemixHoverProvider(props, monaco)) monacoRef.current.languages.registerCompletionItemProvider('remix-solidity', new RemixCompletionProvider(props, monaco)) + monaco.languages.registerCodeActionProvider("remix-solidity", new RemixCodeActionProvider(props, monaco)) loadTypes(monacoRef.current) } From f0df292134537bf07b3a0f342fe57a23bb6f850d Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Tue, 18 Jul 2023 19:56:00 +0530 Subject: [PATCH 2/9] add SPDX license quickfix --- .../editor/src/lib/providers/codeActionProvider.ts | 14 ++++++-------- .../editor/src/lib/providers/quickfixes.ts | 6 ++++++ 2 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 libs/remix-ui/editor/src/lib/providers/quickfixes.ts diff --git a/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts index 46c73b8f1f..1ea8e8ea60 100644 --- a/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts +++ b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts @@ -1,6 +1,7 @@ import { Monaco } from "@monaco-editor/react" import monaco from "../../types/monaco" import { EditorUIProps } from "../remix-ui-editor" +import { default as fixes } from "./quickfixes" export class RemixCodeActionProvider implements monaco.languages.CodeActionProvider { props: EditorUIProps @@ -18,21 +19,18 @@ export class RemixCodeActionProvider implements monaco.languages.CodeActionProvi ) { const actions = context.markers.map(error => { - console.log('error------>', error) return { - title: `Example quick fix`, + title: fixes[error.message].title, diagnostics: [error], kind: "quickfix", edit: { edits: [ { resource: model.uri, - edits: [ - { - range: error, - text: "This text replaces the text with the error" - } - ] + edit: { + range: error, + text: fixes[error.message].message + } } ] }, diff --git a/libs/remix-ui/editor/src/lib/providers/quickfixes.ts b/libs/remix-ui/editor/src/lib/providers/quickfixes.ts new file mode 100644 index 0000000000..acdceb14f8 --- /dev/null +++ b/libs/remix-ui/editor/src/lib/providers/quickfixes.ts @@ -0,0 +1,6 @@ +export default { + "Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/2_Owner.sol\n\n": { + "title": "Add open-source license", + "message": "// SPDX-License-Identifier: GPL-3.0" + } +} \ No newline at end of file From acea48343c1bc1bde76563fe7478bdf140c16ee5 Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Thu, 20 Jul 2023 14:25:42 +0530 Subject: [PATCH 3/9] add pragma quick fix --- .../editor/src/lib/providers/codeActionProvider.ts | 9 ++++++--- libs/remix-ui/editor/src/lib/providers/quickfixes.ts | 12 +++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts index 1ea8e8ea60..b69f699b1d 100644 --- a/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts +++ b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts @@ -19,8 +19,11 @@ export class RemixCodeActionProvider implements monaco.languages.CodeActionProvi ) { const actions = context.markers.map(error => { + const errStrings = Object.keys(fixes) + const errStr = errStrings.find(es => error.message.includes(es)) + const fix = fixes[errStr] return { - title: fixes[error.message].title, + title: fix.title, diagnostics: [error], kind: "quickfix", edit: { @@ -28,8 +31,8 @@ export class RemixCodeActionProvider implements monaco.languages.CodeActionProvi { resource: model.uri, edit: { - range: error, - text: fixes[error.message].message + range: fix.range || error, + text: fix.message } } ] diff --git a/libs/remix-ui/editor/src/lib/providers/quickfixes.ts b/libs/remix-ui/editor/src/lib/providers/quickfixes.ts index acdceb14f8..642ee77f86 100644 --- a/libs/remix-ui/editor/src/lib/providers/quickfixes.ts +++ b/libs/remix-ui/editor/src/lib/providers/quickfixes.ts @@ -1,6 +1,16 @@ export default { - "Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/2_Owner.sol\n\n": { + "Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: \" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.": { "title": "Add open-source license", "message": "// SPDX-License-Identifier: GPL-3.0" + }, + "Warning: Source file does not specify required compiler version! Consider adding" : { + "title": "Add pragma line", + "message": "pragma solidity ^0.*.*;", + "range": { + startLineNumber: 2, + endLineNumber: 2, + startColumn: 1, + endColumn: 1 + } } } \ No newline at end of file From afb0f514c508061ce420f1307f7e0192c471412e Mon Sep 17 00:00:00 2001 From: Aniket-Engg Date: Thu, 20 Jul 2023 19:47:28 +0530 Subject: [PATCH 4/9] removed semicolons --- libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts index b69f699b1d..7841d5663a 100644 --- a/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts +++ b/libs/remix-ui/editor/src/lib/providers/codeActionProvider.ts @@ -38,8 +38,8 @@ export class RemixCodeActionProvider implements monaco.languages.CodeActionProvi ] }, isPreferred: true - }; - }); + } + }) return { actions: actions, dispose: () => {} From 7600414a1765367d80422ab1f0e5ed67962782f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Jul 2023 16:06:03 +0000 Subject: [PATCH 5/9] Bump word-wrap from 1.2.3 to 1.2.4 Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4. - [Release notes](https://github.com/jonschlinkert/word-wrap/releases) - [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4) --- updated-dependencies: - dependency-name: word-wrap dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 06414ec91c..1bdf861fc6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27631,9 +27631,9 @@ winston@^3.3.3: winston-transport "^4.4.0" word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + version "1.2.4" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" + integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== wordwrap@0.0.2: version "0.0.2" From fbca3e1a2808fd725456705dbdadb44c7e3cfc69 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sun, 23 Jul 2023 09:18:24 +0200 Subject: [PATCH 6/9] eslint --- .eslintrc.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index e5f063f969..1dc764a010 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -47,7 +47,8 @@ "eslint-disable-next-line no-empty": "off", "no-empty": "off", "jsx-a11y/anchor-is-valid": "off", - "@typescript-eslint/no-inferrable-types": "off" + "@typescript-eslint/no-inferrable-types": "off", + "indent": ["error", 2] } }, { @@ -58,7 +59,9 @@ "extends": [ "plugin:@nrwl/nx/javascript" ], - "rules": {} + "rules": { + "indent": ["error", 2] + } } ], "globals": { From b66168c8bd1375ac802926903fede61a4e29032a Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sun, 23 Jul 2023 09:25:35 +0200 Subject: [PATCH 7/9] lint ide fix --- apps/remix-ide/ci/download_e2e_assets.js | 88 +- apps/remix-ide/ci/lint-targets.js | 12 +- apps/remix-ide/ci/splice_tests.js | 32 +- .../src/app/components/main-panel.tsx | 86 +- apps/remix-ide/src/app/components/preload.tsx | 206 ++-- .../src/app/components/vertical-icons.tsx | 4 +- apps/remix-ide/src/app/editor/editor.js | 6 +- apps/remix-ide/src/app/files/dgitProvider.js | 4 +- apps/remix-ide/src/app/files/fileManager.ts | 22 +- apps/remix-ide/src/app/files/fileSystem.ts | 104 +- .../files/filesystems/fileSystemUtility.ts | 308 +++--- .../src/app/files/filesystems/indexedDB.ts | 156 +-- .../src/app/files/filesystems/localStorage.ts | 98 +- apps/remix-ide/src/app/panels/layout.ts | 6 +- apps/remix-ide/src/app/panels/terminal.js | 6 +- apps/remix-ide/src/app/plugins/code-format.ts | 482 ++++----- .../src/app/plugins/code-format/index.ts | 64 +- .../src/app/plugins/code-format/parser.ts | 210 ++-- .../src/app/plugins/contractFlattener.tsx | 4 +- .../src/app/plugins/file-decorator.ts | 118 +-- .../src/app/plugins/parser/code-parser.tsx | 976 +++++++++--------- .../plugins/parser/services/antlr-worker.ts | 72 +- .../services/code-parser-antlr-service.ts | 410 ++++---- .../parser/services/code-parser-compiler.ts | 432 ++++---- .../services/code-parser-gas-service.ts | 112 +- .../parser/services/code-parser-imports.ts | 130 +-- .../app/plugins/parser/types/antlr-types.ts | 232 ++--- .../app/plugins/permission-handler-plugin.tsx | 8 +- .../src/app/plugins/solidity-script.tsx | 28 +- .../src/app/plugins/solidity-umlgen.tsx | 262 ++--- .../app/providers/custom-vm-fork-provider.tsx | 32 +- apps/remix-ide/src/app/state/registry.ts | 48 +- apps/remix-ide/src/app/tabs/analysis-tab.js | 8 +- apps/remix-ide/src/app/tabs/search.tsx | 44 +- apps/remix-ide/src/app/tabs/theme-module.js | 2 +- apps/remix-ide/src/app/tabs/web3-provider.js | 4 +- apps/remix-ide/src/app/udapp/run-tab.js | 4 +- .../src/app/ui/landing-page/landing-page.js | 6 +- apps/remix-ide/src/blockchain/blockchain.tsx | 122 +-- apps/remix-ide/src/blockchain/helper.ts | 24 +- .../src/blockchain/providers/injected.ts | 2 +- .../src/blockchain/providers/node.ts | 2 +- apps/remix-ide/src/blockchain/providers/vm.ts | 10 +- .../src/blockchain/providers/worker-vm.ts | 116 +-- 44 files changed, 2551 insertions(+), 2551 deletions(-) diff --git a/apps/remix-ide/ci/download_e2e_assets.js b/apps/remix-ide/ci/download_e2e_assets.js index 51c161b895..99a089174f 100644 --- a/apps/remix-ide/ci/download_e2e_assets.js +++ b/apps/remix-ide/ci/download_e2e_assets.js @@ -5,8 +5,8 @@ const { exit } = require('process'); const child = child_process.spawnSync('grep -r --include="*.json" --include="*.ts" --include="*.tsx" "+commit" apps/**/* libs/**/*', [], { encoding: 'utf8', cwd: process.cwd(), shell: true }); if (child.error) { - console.log("ERROR: ", child); - exit(1); + console.log("ERROR: ", child); + exit(1); } @@ -15,63 +15,63 @@ let soljson =[]; const quotedVersionsRegex = /['"v]\d*\.\d*\.\d*\+commit\.[\d\w]*/g; let quotedVersionsRegexMatch = child.stdout.match(quotedVersionsRegex) if(quotedVersionsRegexMatch){ - let soljson2 = quotedVersionsRegexMatch.map((item) => item.replace('\'', 'v').replace('"', 'v')) - console.log('non nightly soljson versions found: ', soljson2); - if(soljson2) soljson = soljson.concat(soljson2); + let soljson2 = quotedVersionsRegexMatch.map((item) => item.replace('\'', 'v').replace('"', 'v')) + console.log('non nightly soljson versions found: ', soljson2); + if(soljson2) soljson = soljson.concat(soljson2); } const nightlyVersionsRegex = /\d*\.\d*\.\d-nightly.*\+commit\.[\d\w]*/g const nightlyVersionsRegexMatch = child.stdout.match(nightlyVersionsRegex) if(nightlyVersionsRegexMatch){ - let soljson3 = nightlyVersionsRegexMatch.map((item) => 'v' + item); - console.log('nightly soljson versions found: ', soljson3); - if(soljson3) soljson = soljson.concat(soljson3); + let soljson3 = nightlyVersionsRegexMatch.map((item) => 'v' + item); + console.log('nightly soljson versions found: ', soljson3); + if(soljson3) soljson = soljson.concat(soljson3); } if (soljson) { - // filter out duplicates - soljson = soljson.filter((item, index) => soljson.indexOf(item) === index); + // filter out duplicates + soljson = soljson.filter((item, index) => soljson.indexOf(item) === index); - // manually add some versions - soljson.push('v0.7.6+commit.7338295f'); + // manually add some versions + soljson.push('v0.7.6+commit.7338295f'); - console.log('soljson versions found: ', soljson, soljson.length); + console.log('soljson versions found: ', soljson, soljson.length); - for (let i = 0; i < soljson.length; i++) { - const version = soljson[i]; - if (version) { - let url = '' - - // if nightly - if (version.includes('nightly')) { - url = `https://binaries.soliditylang.org/bin/soljson-${version}.js`; - }else{ - url = `https://binaries.soliditylang.org/wasm/soljson-${version}.js`; - } - - const dir = './dist/apps/remix-ide/assets/js/soljson'; - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir); - } - - const path = `./dist/apps/remix-ide/assets/js/soljson/soljson-${version}.js`; - // check if the file exists - const exists = fs.existsSync(path); - if (!exists) { - console.log('URL:', url) - try { - // use curl to download the file - child_process.exec(`curl -o ${path} ${url}`, { encoding: 'utf8', cwd: process.cwd(), shell: true }) - } catch (e) { - console.log('Failed to download soljson' + version + ' from ' + url) - } - } + for (let i = 0; i < soljson.length; i++) { + const version = soljson[i]; + if (version) { + let url = '' + + // if nightly + if (version.includes('nightly')) { + url = `https://binaries.soliditylang.org/bin/soljson-${version}.js`; + }else{ + url = `https://binaries.soliditylang.org/wasm/soljson-${version}.js`; + } + + const dir = './dist/apps/remix-ide/assets/js/soljson'; + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir); + } + + const path = `./dist/apps/remix-ide/assets/js/soljson/soljson-${version}.js`; + // check if the file exists + const exists = fs.existsSync(path); + if (!exists) { + console.log('URL:', url) + try { + // use curl to download the file + child_process.exec(`curl -o ${path} ${url}`, { encoding: 'utf8', cwd: process.cwd(), shell: true }) + } catch (e) { + console.log('Failed to download soljson' + version + ' from ' + url) + } + } - } + } - } + } } diff --git a/apps/remix-ide/ci/lint-targets.js b/apps/remix-ide/ci/lint-targets.js index 7330cc9a3e..44e71d8c0f 100644 --- a/apps/remix-ide/ci/lint-targets.js +++ b/apps/remix-ide/ci/lint-targets.js @@ -5,15 +5,15 @@ const file = fs.readFileSync('projects.json') const projects = JSON.parse(file) console.log(Object.keys(projects.graph.nodes)) for(let node of Object.keys(projects.graph.nodes)){ - if(projects.graph.nodes[node].data.targets.lint){ + 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]) if(result.status == 0){ - console.log('success') + console.log('success') }else{ - console.log(result.stdout.toString()) - console.log(result.stderr.toString()) - exit(1) + console.log(result.stdout.toString()) + console.log(result.stderr.toString()) + exit(1) } - } + } } \ No newline at end of file diff --git a/apps/remix-ide/ci/splice_tests.js b/apps/remix-ide/ci/splice_tests.js index 3a51c3eb0c..57cc1db31b 100644 --- a/apps/remix-ide/ci/splice_tests.js +++ b/apps/remix-ide/ci/splice_tests.js @@ -7,21 +7,21 @@ let args = process.argv.slice(2) const jobsize = args[0] || 10; const job = args[1] || 0; exec(cmd, (error, stdout, stderr) => { - if (error) { - console.error(`error: ${error.message}`); - return; - } + if (error) { + console.error(`error: ${error.message}`); + return; + } - if (stderr) { - console.error(`stderr: ${stderr}`); - return; - } + if (stderr) { + console.error(`stderr: ${stderr}`); + return; + } - let files = stdout.split('\n').filter(f => f.includes('.test')).map(f => f.replace('dist/apps/remix-ide-e2e/src/tests/', '')).map(f => f.replace('.js', '')) - let splitIndex = Math.ceil(files.length / jobsize); - const parts = [] - for (let i = 0; i < jobsize; i++) { - parts.push(files.slice(i * splitIndex, (i + 1) * splitIndex)) - } - console.log(parts[job].join('\n')) - }); + let files = stdout.split('\n').filter(f => f.includes('.test')).map(f => f.replace('dist/apps/remix-ide-e2e/src/tests/', '')).map(f => f.replace('.js', '')) + let splitIndex = Math.ceil(files.length / jobsize); + const parts = [] + for (let i = 0; i < jobsize; i++) { + parts.push(files.slice(i * splitIndex, (i + 1) * splitIndex)) + } + console.log(parts[job].join('\n')) +}); diff --git a/apps/remix-ide/src/app/components/main-panel.tsx b/apps/remix-ide/src/app/components/main-panel.tsx index d6dee613fd..0eb7487b94 100644 --- a/apps/remix-ide/src/app/components/main-panel.tsx +++ b/apps/remix-ide/src/app/components/main-panel.tsx @@ -13,56 +13,56 @@ const profile = { } export class MainPanel extends AbstractPanel { - element: HTMLDivElement - dispatch: React.Dispatch = () => {} - constructor (config) { - super(profile) - this.element = document.createElement('div') - this.element.setAttribute('data-id', 'mainPanelPluginsContainer') - this.element.setAttribute('style', 'height: 100%; width: 100%;') - // this.config = config - } + element: HTMLDivElement + dispatch: React.Dispatch = () => {} + constructor (config) { + super(profile) + this.element = document.createElement('div') + this.element.setAttribute('data-id', 'mainPanelPluginsContainer') + this.element.setAttribute('style', 'height: 100%; width: 100%;') + // this.config = config + } - setDispatch (dispatch: React.Dispatch) { - this.dispatch = dispatch - } + setDispatch (dispatch: React.Dispatch) { + this.dispatch = dispatch + } - onActivation () { - this.renderComponent() - } + onActivation () { + this.renderComponent() + } - focus (name) { - this.emit('focusChanged', name) - super.focus(name) - this.renderComponent() - } + focus (name) { + this.emit('focusChanged', name) + super.focus(name) + this.renderComponent() + } - addView (profile, view) { - super.addView(profile, view) - this.renderComponent() - } + addView (profile, view) { + super.addView(profile, view) + this.renderComponent() + } - removeView (profile) { - super.removeView(profile) - this.renderComponent() - } + removeView (profile) { + super.removeView(profile) + this.renderComponent() + } - async showContent (name) { - super.showContent(name) - this.renderComponent() - } + async showContent (name) { + super.showContent(name) + this.renderComponent() + } - renderComponent () { - this.dispatch({ - plugins: this.plugins - }) - } + renderComponent () { + this.dispatch({ + plugins: this.plugins + }) + } - render() { - return
- } + render() { + return
+ } - updateComponent (state: any) { - return } plugins={state.plugins}/> - } + updateComponent (state: any) { + return } plugins={state.plugins}/> + } } diff --git a/apps/remix-ide/src/app/components/preload.tsx b/apps/remix-ide/src/app/components/preload.tsx index f607264d63..4cca83a00a 100644 --- a/apps/remix-ide/src/app/components/preload.tsx +++ b/apps/remix-ide/src/app/components/preload.tsx @@ -11,134 +11,134 @@ const _paq = window._paq = window._paq || [] export const Preload = () => { - const [supported, setSupported] = useState(true) - const [error, setError] = useState(false) - const [showDownloader, setShowDownloader] = useState(false) - const remixFileSystems = useRef(new fileSystems()) - const remixIndexedDB = useRef(new indexedDBFileSystem()) - const localStorageFileSystem = useRef(new localStorageFS()) - // url parameters to e2e test the fallbacks and error warnings - const testmigrationFallback = useRef(window.location.hash.includes('e2e_testmigration_fallback=true') && window.location.host === '127.0.0.1:8080' && window.location.protocol === 'http:') - const testmigrationResult = useRef(window.location.hash.includes('e2e_testmigration=true') && window.location.host === '127.0.0.1:8080' && window.location.protocol === 'http:') - const testBlockStorage = useRef(window.location.hash.includes('e2e_testblock_storage=true') && window.location.host === '127.0.0.1:8080' && window.location.protocol === 'http:') + const [supported, setSupported] = useState(true) + const [error, setError] = useState(false) + const [showDownloader, setShowDownloader] = useState(false) + const remixFileSystems = useRef(new fileSystems()) + const remixIndexedDB = useRef(new indexedDBFileSystem()) + const localStorageFileSystem = useRef(new localStorageFS()) + // url parameters to e2e test the fallbacks and error warnings + const testmigrationFallback = useRef(window.location.hash.includes('e2e_testmigration_fallback=true') && window.location.host === '127.0.0.1:8080' && window.location.protocol === 'http:') + const testmigrationResult = useRef(window.location.hash.includes('e2e_testmigration=true') && window.location.host === '127.0.0.1:8080' && window.location.protocol === 'http:') + const testBlockStorage = useRef(window.location.hash.includes('e2e_testblock_storage=true') && window.location.host === '127.0.0.1:8080' && window.location.protocol === 'http:') - function loadAppComponent() { - import('../../app').then((AppComponent) => { - const appComponent = new AppComponent.default() - appComponent.run().then(() => { - render( - <> - - , - document.getElementById('root') - ) - }) - }).catch(err => { - _paq.push(['trackEvent', 'Preload', 'error', err && err.message]) - console.error('Error loading Remix:', err) - setError(true) - }) - } + function loadAppComponent() { + import('../../app').then((AppComponent) => { + const appComponent = new AppComponent.default() + appComponent.run().then(() => { + render( + <> + + , + document.getElementById('root') + ) + }) + }).catch(err => { + _paq.push(['trackEvent', 'Preload', 'error', err && err.message]) + console.error('Error loading Remix:', err) + setError(true) + }) + } - const downloadBackup = async () => { - setShowDownloader(false) - const fsUtility = new fileSystemUtility() - await fsUtility.downloadBackup(remixFileSystems.current.fileSystems['localstorage']) - await migrateAndLoad() - } + const downloadBackup = async () => { + setShowDownloader(false) + const fsUtility = new fileSystemUtility() + await fsUtility.downloadBackup(remixFileSystems.current.fileSystems['localstorage']) + await migrateAndLoad() + } - const migrateAndLoad = async () => { - setShowDownloader(false) - const fsUtility = new fileSystemUtility() - const migrationResult = await fsUtility.migrate(localStorageFileSystem.current, remixIndexedDB.current) - _paq.push(['trackEvent', 'Migrate', 'result', migrationResult?'success' : 'fail']) - await setFileSystems() - } + const migrateAndLoad = async () => { + setShowDownloader(false) + const fsUtility = new fileSystemUtility() + const migrationResult = await fsUtility.migrate(localStorageFileSystem.current, remixIndexedDB.current) + _paq.push(['trackEvent', 'Migrate', 'result', migrationResult?'success' : 'fail']) + await setFileSystems() + } - const setFileSystems = async() => { - const fsLoaded = await remixFileSystems.current.setFileSystem([(testmigrationFallback.current || testBlockStorage.current)? null: remixIndexedDB.current, testBlockStorage.current? null:localStorageFileSystem.current]) - if (fsLoaded) { - console.log(fsLoaded.name + ' activated') - _paq.push(['trackEvent', 'Storage', 'activate', fsLoaded.name]) - loadAppComponent() - } else { - _paq.push(['trackEvent', 'Storage', 'error', 'no supported storage']) - setSupported(false) - } + const setFileSystems = async() => { + const fsLoaded = await remixFileSystems.current.setFileSystem([(testmigrationFallback.current || testBlockStorage.current)? null: remixIndexedDB.current, testBlockStorage.current? null:localStorageFileSystem.current]) + if (fsLoaded) { + console.log(fsLoaded.name + ' activated') + _paq.push(['trackEvent', 'Storage', 'activate', fsLoaded.name]) + loadAppComponent() + } else { + _paq.push(['trackEvent', 'Storage', 'error', 'no supported storage']) + setSupported(false) } + } - const testmigration = async() => { - if (testmigrationResult.current) { - const fsUtility = new fileSystemUtility() - fsUtility.populateWorkspace(migrationTestData, remixFileSystems.current.fileSystems['localstorage'].fs) - } + const testmigration = async() => { + if (testmigrationResult.current) { + const fsUtility = new fileSystemUtility() + fsUtility.populateWorkspace(migrationTestData, remixFileSystems.current.fileSystems['localstorage'].fs) } + } - useEffect(() => { - async function loadStorage() { - await remixFileSystems.current.addFileSystem(remixIndexedDB.current) || _paq.push(['trackEvent', 'Storage', 'error', 'indexedDB not supported']) - await remixFileSystems.current.addFileSystem(localStorageFileSystem.current) || _paq.push(['trackEvent', 'Storage', 'error', 'localstorage not supported']) - await testmigration() - remixIndexedDB.current.loaded && await remixIndexedDB.current.checkWorkspaces() - localStorageFileSystem.current.loaded && await localStorageFileSystem.current.checkWorkspaces() - remixIndexedDB.current.loaded && ( (remixIndexedDB.current.hasWorkSpaces || !localStorageFileSystem.current.hasWorkSpaces)? await setFileSystems():setShowDownloader(true)) - !remixIndexedDB.current.loaded && await setFileSystems() - } - loadStorage() - }, []) + useEffect(() => { + async function loadStorage() { + await remixFileSystems.current.addFileSystem(remixIndexedDB.current) || _paq.push(['trackEvent', 'Storage', 'error', 'indexedDB not supported']) + await remixFileSystems.current.addFileSystem(localStorageFileSystem.current) || _paq.push(['trackEvent', 'Storage', 'error', 'localstorage not supported']) + await testmigration() + remixIndexedDB.current.loaded && await remixIndexedDB.current.checkWorkspaces() + localStorageFileSystem.current.loaded && await localStorageFileSystem.current.checkWorkspaces() + remixIndexedDB.current.loaded && ( (remixIndexedDB.current.hasWorkSpaces || !localStorageFileSystem.current.hasWorkSpaces)? await setFileSystems():setShowDownloader(true)) + !remixIndexedDB.current.loaded && await setFileSystems() + } + loadStorage() + }, []) - return <> -
-
- {logo} -
+ return <> +
+
+ {logo} +
REMIX IDE -
- v{packageJson.version} -
-
- {!supported ? -
+
+ v{packageJson.version} +
+
+ {!supported ? +
Your browser does not support any of the filesystems required by Remix. Either change the settings in your browser or use a supported browser. -
: null} - {error ? -
+
: null} + {error ? +
An unknown error has occurred while loading the application.

Doing a hard refresh might fix this issue:

-
+
Windows:

- Chrome: CTRL + F5 or CTRL + Reload Button

- Firefox: CTRL + SHIFT + R or CTRL + F5

-
-
+
+
MacOS:

- Chrome & FireFox: CMD + SHIFT + R or SHIFT + Reload Button

-
-
+
+
Linux:

- Chrome & FireFox: CTRL + SHIFT + R

-
-
: null} - {showDownloader ? -
+
+
: null} + {showDownloader ? +
This app will be updated now. Please download a backup of your files now to make sure you don't lose your work. -

+

You don't need to do anything else, your files will be available when the app loads. -
{ await downloadBackup() }} data-id='downloadbackup-btn' className='btn btn-primary mt-1'>download backup
-
{ await migrateAndLoad() }} data-id='skipbackup-btn' className='btn btn-primary mt-1'>skip backup
-
: null} - {(supported && !error && !showDownloader) ? -
- -
: null} -
- +
{ await downloadBackup() }} data-id='downloadbackup-btn' className='btn btn-primary mt-1'>download backup
+
{ await migrateAndLoad() }} data-id='skipbackup-btn' className='btn btn-primary mt-1'>skip backup
+
: null} + {(supported && !error && !showDownloader) ? +
+ +
: null} +
+ } const logo = - - - + + + diff --git a/apps/remix-ide/src/app/components/vertical-icons.tsx b/apps/remix-ide/src/app/components/vertical-icons.tsx index 24d5b93b2b..87f78ffd40 100644 --- a/apps/remix-ide/src/app/components/vertical-icons.tsx +++ b/apps/remix-ide/src/app/components/vertical-icons.tsx @@ -113,8 +113,8 @@ export class VerticalIcons extends Plugin { updateComponent(state: any){ return } diff --git a/apps/remix-ide/src/app/editor/editor.js b/apps/remix-ide/src/app/editor/editor.js index 9a0d58e2e5..2de1353d15 100644 --- a/apps/remix-ide/src/app/editor/editor.js +++ b/apps/remix-ide/src/app/editor/editor.js @@ -99,8 +99,8 @@ class Editor extends Plugin { this.ref.clearDecorationsByPlugin = (filePath, plugin, typeOfDecoration) => this.clearDecorationsByPlugin(filePath, plugin, typeOfDecoration) this.ref.keepDecorationsFor = (name, typeOfDecoration) => this.keepDecorationsFor(name, typeOfDecoration) }} id='editorView'> - - + + } renderComponent () { @@ -293,7 +293,7 @@ class Editor extends Plugin { * Get the text in the current session, if any. * @param {string} url Address of the content to retrieve. */ - getText (url) { + getText (url) { if (this.sessions[url]) { return this.sessions[url].getValue() } diff --git a/apps/remix-ide/src/app/files/dgitProvider.js b/apps/remix-ide/src/app/files/dgitProvider.js index 9fd3fa7e37..d4c78d8099 100644 --- a/apps/remix-ide/src/app/files/dgitProvider.js +++ b/apps/remix-ide/src/app/files/dgitProvider.js @@ -110,7 +110,7 @@ class DGitProvider extends Plugin { ...cmd }) if (refresh) { - setTimeout(async () => { + setTimeout(async () => { await this.call('fileManager', 'refresh') }, 1000) } @@ -141,7 +141,7 @@ class DGitProvider extends Plugin { ...cmd }) if (refresh) { - setTimeout(async () => { + setTimeout(async () => { await this.call('fileManager', 'refresh') }, 1000) } diff --git a/apps/remix-ide/src/app/files/fileManager.ts b/apps/remix-ide/src/app/files/fileManager.ts index db42bc3335..2c3dcccda0 100644 --- a/apps/remix-ide/src/app/files/fileManager.ts +++ b/apps/remix-ide/src/app/files/fileManager.ts @@ -361,15 +361,15 @@ class FileManager extends Plugin { try { const downloadFileName = helper.extractNameFromKey(path) if (await this.isDirectory(path)) { - const zip = new JSZip() - await this.zipDir(path, zip) - const content = await zip.generateAsync({type: 'blob'}) - saveAs(content, `${downloadFileName}.zip`) - } else { - path = this.normalize(path) - const content: any = await this.readFile(path) - saveAs(new Blob([content]), downloadFileName) - } + const zip = new JSZip() + await this.zipDir(path, zip) + const content = await zip.generateAsync({type: 'blob'}) + saveAs(content, `${downloadFileName}.zip`) + } else { + path = this.normalize(path) + const content: any = await this.readFile(path) + saveAs(new Blob([content]), downloadFileName) + } } catch (e) { throw new Error(e) } @@ -777,7 +777,7 @@ class FileManager extends Plugin { provider.set(currentFile, oldContent) return console.error(error) } else { - this.emit('fileSaved', currentFile) + this.emit('fileSaved', currentFile) } }) }) @@ -868,7 +868,7 @@ class FileManager extends Plugin { * @returns {void} */ - async moveFile(src: string, dest: string) { + async moveFile(src: string, dest: string) { try { src = this.normalize(src) dest = this.normalize(dest) diff --git a/apps/remix-ide/src/app/files/fileSystem.ts b/apps/remix-ide/src/app/files/fileSystem.ts index 80b7663680..80840f617f 100644 --- a/apps/remix-ide/src/app/files/fileSystem.ts +++ b/apps/remix-ide/src/app/files/fileSystem.ts @@ -1,71 +1,71 @@ export class fileSystem { - name: string - enabled: boolean - available: boolean - fs: any - fsCallBack: any; - hasWorkSpaces: boolean - loaded: boolean - load: () => Promise - test: () => Promise + name: string + enabled: boolean + available: boolean + fs: any + fsCallBack: any; + hasWorkSpaces: boolean + loaded: boolean + load: () => Promise + test: () => Promise - constructor() { - this.available = false - this.enabled = false - this.hasWorkSpaces = false - this.loaded = false - } + constructor() { + this.available = false + this.enabled = false + this.hasWorkSpaces = false + this.loaded = false + } - checkWorkspaces = async () => { - try { - await this.fs.stat('.workspaces') - this.hasWorkSpaces = true - } catch (e) { + checkWorkspaces = async () => { + try { + await this.fs.stat('.workspaces') + this.hasWorkSpaces = true + } catch (e) { - } } + } - set = async () => { - const w = (window as any) - if (!this.loaded) return false - w.remixFileSystem = this.fs - w.remixFileSystem.name = this.name - w.remixFileSystemCallback = this.fsCallBack - return true - } + set = async () => { + const w = (window as any) + if (!this.loaded) return false + w.remixFileSystem = this.fs + w.remixFileSystem.name = this.name + w.remixFileSystemCallback = this.fsCallBack + return true + } } export class fileSystems { - fileSystems: Record - constructor() { - this.fileSystems = {} - } + fileSystems: Record + constructor() { + this.fileSystems = {} + } - addFileSystem = async (fs: fileSystem): Promise => { - try { - this.fileSystems[fs.name] = fs - await fs.test() && await fs.load() - console.log(fs.name + ' is loaded...') - return true - } catch (e) { - console.log(fs.name + ' not available...') - return false - } + addFileSystem = async (fs: fileSystem): Promise => { + try { + this.fileSystems[fs.name] = fs + await fs.test() && await fs.load() + console.log(fs.name + ' is loaded...') + return true + } catch (e) { + console.log(fs.name + ' not available...') + return false } - /** + } + /** * sets filesystem using list as fallback * @param {string[]} names * @returns {Promise} */ - setFileSystem = async (filesystems?: fileSystem[]): Promise => { - for (const fs of filesystems) { - if (fs && this.fileSystems[fs.name]) { - const result = await this.fileSystems[fs.name].set() - if (result) return this.fileSystems[fs.name] - } - } - return null + setFileSystem = async (filesystems?: fileSystem[]): Promise => { + for (const fs of filesystems) { + if (fs && this.fileSystems[fs.name]) { + const result = await this.fileSystems[fs.name].set() + if (result) return this.fileSystems[fs.name] + } } + return null + } } diff --git a/apps/remix-ide/src/app/files/filesystems/fileSystemUtility.ts b/apps/remix-ide/src/app/files/filesystems/fileSystemUtility.ts index 538679c671..9fc716b5c1 100644 --- a/apps/remix-ide/src/app/files/filesystems/fileSystemUtility.ts +++ b/apps/remix-ide/src/app/files/filesystems/fileSystemUtility.ts @@ -3,189 +3,189 @@ import JSZip from "jszip" import { fileSystem } from "../fileSystem" const _paq = window._paq = window._paq || [] export class fileSystemUtility { - migrate = async (fsFrom: fileSystem, fsTo: fileSystem) => { - try { - await fsFrom.checkWorkspaces() - await fsTo.checkWorkspaces() - - if (fsTo.hasWorkSpaces) { - console.log(`${fsTo.name} already has files`) - return true - } - - if (!fsFrom.hasWorkSpaces) { - console.log('no files to migrate') - return true - } - - const fromFiles = await this.copyFolderToJson('/', null, null, fsFrom.fs) - await this.populateWorkspace(fromFiles, fsTo.fs) - const toFiles = await this.copyFolderToJson('/', null, null, fsTo.fs) - - if (hashMessage(JSON.stringify(toFiles)) === hashMessage(JSON.stringify(fromFiles))) { - console.log('file migration successful') - return true - } else { - _paq.push(['trackEvent', 'Migrate', 'error', 'hash mismatch']) - console.log('file migration failed falling back to ' + fsFrom.name) - fsTo.loaded = false - return false - } - } catch (err) { - console.log(err) - _paq.push(['trackEvent', 'Migrate', 'error', err && err.message]) - console.log('file migration failed falling back to ' + fsFrom.name) - fsTo.loaded = false - return false - } + migrate = async (fsFrom: fileSystem, fsTo: fileSystem) => { + try { + await fsFrom.checkWorkspaces() + await fsTo.checkWorkspaces() + + if (fsTo.hasWorkSpaces) { + console.log(`${fsTo.name} already has files`) + return true + } + + if (!fsFrom.hasWorkSpaces) { + console.log('no files to migrate') + return true + } + + const fromFiles = await this.copyFolderToJson('/', null, null, fsFrom.fs) + await this.populateWorkspace(fromFiles, fsTo.fs) + const toFiles = await this.copyFolderToJson('/', null, null, fsTo.fs) + + if (hashMessage(JSON.stringify(toFiles)) === hashMessage(JSON.stringify(fromFiles))) { + console.log('file migration successful') + return true + } else { + _paq.push(['trackEvent', 'Migrate', 'error', 'hash mismatch']) + console.log('file migration failed falling back to ' + fsFrom.name) + fsTo.loaded = false + return false + } + } catch (err) { + console.log(err) + _paq.push(['trackEvent', 'Migrate', 'error', err && err.message]) + console.log('file migration failed falling back to ' + fsFrom.name) + fsTo.loaded = false + return false } - - downloadBackup = async (fs: fileSystem) => { - try { - const zip = new JSZip() - zip.file("readme.txt", "This is a Remix backup file.\nThis zip should be used by the restore backup tool in Remix.\nThe .workspaces directory contains your workspaces.") - await fs.checkWorkspaces() - await this.copyFolderToJson('/', null, null, fs.fs, ({ path, content }) => { - zip.file(path, content) - }) - const blob = await zip.generateAsync({ type: 'blob' }) - const today = new Date() - const date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate() - const time = today.getHours() + 'h' + today.getMinutes() + 'min' - this.saveAs(blob, `remix-backup-at-${time}-${date}.zip`) - _paq.push(['trackEvent','Backup','download','preload']) - } catch (err) { - _paq.push(['trackEvent','Backup','error',err && err.message]) - console.log(err) - } + } + + downloadBackup = async (fs: fileSystem) => { + try { + const zip = new JSZip() + zip.file("readme.txt", "This is a Remix backup file.\nThis zip should be used by the restore backup tool in Remix.\nThe .workspaces directory contains your workspaces.") + await fs.checkWorkspaces() + await this.copyFolderToJson('/', null, null, fs.fs, ({ path, content }) => { + zip.file(path, content) + }) + const blob = await zip.generateAsync({ type: 'blob' }) + const today = new Date() + const date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate() + const time = today.getHours() + 'h' + today.getMinutes() + 'min' + this.saveAs(blob, `remix-backup-at-${time}-${date}.zip`) + _paq.push(['trackEvent','Backup','download','preload']) + } catch (err) { + _paq.push(['trackEvent','Backup','error',err && err.message]) + console.log(err) } - - populateWorkspace = async (json, fs) => { - for (const item in json) { - const isFolder = json[item].content === undefined - if (isFolder) { - await this.createDir(item, fs) - await this.populateWorkspace(json[item].children, fs) - } else { - await fs.writeFile(item, json[item].content, 'utf8') - } - } + } + + populateWorkspace = async (json, fs) => { + for (const item in json) { + const isFolder = json[item].content === undefined + if (isFolder) { + await this.createDir(item, fs) + await this.populateWorkspace(json[item].children, fs) + } else { + await fs.writeFile(item, json[item].content, 'utf8') + } } + } - /** + /** * copy the folder recursively * @param {string} path is the folder to be copied over * @param {Function} visitFile is a function called for each visited files * @param {Function} visitFolder is a function called for each visited folders */ - copyFolderToJson = async (path, visitFile, visitFolder, fs, cb = null) => { - visitFile = visitFile || (() => { }) - visitFolder = visitFolder || (() => { }) - return await this._copyFolderToJsonInternal(path, visitFile, visitFolder, fs, cb) - } + copyFolderToJson = async (path, visitFile, visitFolder, fs, cb = null) => { + visitFile = visitFile || (() => { }) + visitFolder = visitFolder || (() => { }) + return await this._copyFolderToJsonInternal(path, visitFile, visitFolder, fs, cb) + } - /** + /** * copy the folder recursively (internal use) * @param {string} path is the folder to be copied over * @param {Function} visitFile is a function called for each visited files * @param {Function} visitFolder is a function called for each visited folders */ - async _copyFolderToJsonInternal(path, visitFile, visitFolder, fs, cb) { - visitFile = visitFile || function () { /* do nothing. */ } - visitFolder = visitFolder || function () { /* do nothing. */ } - - const json = {} - // path = this.removePrefix(path) - if (await fs.exists(path)) { - const items = await fs.readdir(path) - visitFolder({ path }) - if (items.length !== 0) { - for (const item of items) { - const file: any = {} - const curPath = `${path}${path.endsWith('/') ? '' : '/'}${item}` - if ((await fs.stat(curPath)).isDirectory()) { - file.children = await this._copyFolderToJsonInternal(curPath, visitFile, visitFolder, fs, cb) - } else { - file.content = await fs.readFile(curPath, 'utf8') - if (cb) cb({ path: curPath, content: file.content }) - visitFile({ path: curPath, content: file.content }) - - } - json[curPath] = file - } - } - } - return json - } - - createDir = async (path, fs) => { - const paths = path.split('/') - if (paths.length && paths[0] === '') paths.shift() - let currentCheck = '' - for (const value of paths) { - currentCheck = currentCheck + (currentCheck ? '/' : '') + value - if (!await fs.exists(currentCheck)) { - await fs.mkdir(currentCheck) - } + async _copyFolderToJsonInternal(path, visitFile, visitFolder, fs, cb) { + visitFile = visitFile || function () { /* do nothing. */ } + visitFolder = visitFolder || function () { /* do nothing. */ } + + const json = {} + // path = this.removePrefix(path) + if (await fs.exists(path)) { + const items = await fs.readdir(path) + visitFolder({ path }) + if (items.length !== 0) { + for (const item of items) { + const file: any = {} + const curPath = `${path}${path.endsWith('/') ? '' : '/'}${item}` + if ((await fs.stat(curPath)).isDirectory()) { + file.children = await this._copyFolderToJsonInternal(curPath, visitFile, visitFolder, fs, cb) + } else { + file.content = await fs.readFile(curPath, 'utf8') + if (cb) cb({ path: curPath, content: file.content }) + visitFile({ path: curPath, content: file.content }) + + } + json[curPath] = file } + } } - - saveAs = (blob, name) => { - const node = document.createElement('a') - node.download = name - node.rel = 'noopener' - node.href = URL.createObjectURL(blob) - setTimeout(function () { URL.revokeObjectURL(node.href) }, 4E4) // 40s - setTimeout(function () { - try { - node.dispatchEvent(new MouseEvent('click')) - } catch (e) { - const evt = document.createEvent('MouseEvents') - evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, - 20, false, false, false, false, 0, null) - node.dispatchEvent(evt) - } - }, 0) // 40s + return json + } + + createDir = async (path, fs) => { + const paths = path.split('/') + if (paths.length && paths[0] === '') paths.shift() + let currentCheck = '' + for (const value of paths) { + currentCheck = currentCheck + (currentCheck ? '/' : '') + value + if (!await fs.exists(currentCheck)) { + await fs.mkdir(currentCheck) + } } + } + + saveAs = (blob, name) => { + const node = document.createElement('a') + node.download = name + node.rel = 'noopener' + node.href = URL.createObjectURL(blob) + setTimeout(function () { URL.revokeObjectURL(node.href) }, 4E4) // 40s + setTimeout(function () { + try { + node.dispatchEvent(new MouseEvent('click')) + } catch (e) { + const evt = document.createEvent('MouseEvents') + evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, + 20, false, false, false, false, 0, null) + node.dispatchEvent(evt) + } + }, 0) // 40s + } } /* eslint-disable no-template-curly-in-string */ export const migrationTestData = { - '.workspaces': { + '.workspaces': { + children: { + '.workspaces/default_workspace': { children: { - '.workspaces/default_workspace': { - children: { - '.workspaces/default_workspace/README.txt': { - content: 'TEST README' - } - } - }, - '.workspaces/emptyspace': { + '.workspaces/default_workspace/README.txt': { + content: 'TEST README' + } + } + }, + '.workspaces/emptyspace': { - }, - '.workspaces/workspace_test': { + }, + '.workspaces/workspace_test': { + children: { + '.workspaces/workspace_test/TEST_README.txt': { + content: 'TEST README' + }, + '.workspaces/workspace_test/test_contracts': { + children: { + '.workspaces/workspace_test/test_contracts/1_Storage.sol': { + content: 'testing' + }, + '.workspaces/workspace_test/test_contracts/artifacts': { children: { - '.workspaces/workspace_test/TEST_README.txt': { - content: 'TEST README' - }, - '.workspaces/workspace_test/test_contracts': { - children: { - '.workspaces/workspace_test/test_contracts/1_Storage.sol': { - content: 'testing' - }, - '.workspaces/workspace_test/test_contracts/artifacts': { - children: { - '.workspaces/workspace_test/test_contracts/artifacts/Storage_metadata.json': { - content: '{ "test": "data" }' - } - } - } - } - } + '.workspaces/workspace_test/test_contracts/artifacts/Storage_metadata.json': { + content: '{ "test": "data" }' + } } + } } + } } + } } + } } \ No newline at end of file diff --git a/apps/remix-ide/src/app/files/filesystems/indexedDB.ts b/apps/remix-ide/src/app/files/filesystems/indexedDB.ts index 5d20a52061..aae0d6a5eb 100644 --- a/apps/remix-ide/src/app/files/filesystems/indexedDB.ts +++ b/apps/remix-ide/src/app/files/filesystems/indexedDB.ts @@ -2,90 +2,90 @@ import LightningFS from "@isomorphic-git/lightning-fs" import { fileSystem } from "../fileSystem" export class IndexedDBStorage extends LightningFS { - base: LightningFS.PromisifedFS - addSlash: (file: string) => string - extended: { exists: (path: string) => Promise; rmdir: (path: any) => Promise; readdir: (path: any) => Promise; unlink: (path: any) => Promise; mkdir: (path: any) => Promise; readFile: (path: any, options: any) => Promise; rename: (from: any, to: any) => Promise; writeFile: (path: any, content: any, options: any) => Promise; stat: (path: any) => Promise; init(name: string, opt?: LightningFS.FSConstructorOptions): void; activate(): Promise; deactivate(): Promise; lstat(filePath: string): Promise; readlink(filePath: string): Promise; symlink(target: string, filePath: string): Promise } - constructor(name: string) { - super(name) - this.addSlash = (file) => { - if (!file.startsWith('/')) file = '/' + file - return file - } - this.base = this.promises - this.extended = { - ...this.promises, - exists: async (path: string) => { - return new Promise((resolve) => { - this.base.stat(this.addSlash(path)).then(() => resolve(true)).catch(() => resolve(false)) - }) - }, - rmdir: async (path) => { - return this.base.rmdir(this.addSlash(path)) - }, - readdir: async (path) => { - return this.base.readdir(this.addSlash(path)) - }, - unlink: async (path) => { - return this.base.unlink(this.addSlash(path)) - }, - mkdir: async (path) => { - return this.base.mkdir(this.addSlash(path)) - }, - readFile: async (path, options) => { - return this.base.readFile(this.addSlash(path), options) - }, - rename: async (from, to) => { - return this.base.rename(this.addSlash(from), this.addSlash(to)) - }, - writeFile: async (path, content, options) => { - return this.base.writeFile(this.addSlash(path), content, options) - }, - stat: async (path) => { - return this.base.stat(this.addSlash(path)) - } - } + base: LightningFS.PromisifedFS + addSlash: (file: string) => string + extended: { exists: (path: string) => Promise; rmdir: (path: any) => Promise; readdir: (path: any) => Promise; unlink: (path: any) => Promise; mkdir: (path: any) => Promise; readFile: (path: any, options: any) => Promise; rename: (from: any, to: any) => Promise; writeFile: (path: any, content: any, options: any) => Promise; stat: (path: any) => Promise; init(name: string, opt?: LightningFS.FSConstructorOptions): void; activate(): Promise; deactivate(): Promise; lstat(filePath: string): Promise; readlink(filePath: string): Promise; symlink(target: string, filePath: string): Promise } + constructor(name: string) { + super(name) + this.addSlash = (file) => { + if (!file.startsWith('/')) file = '/' + file + return file } + this.base = this.promises + this.extended = { + ...this.promises, + exists: async (path: string) => { + return new Promise((resolve) => { + this.base.stat(this.addSlash(path)).then(() => resolve(true)).catch(() => resolve(false)) + }) + }, + rmdir: async (path) => { + return this.base.rmdir(this.addSlash(path)) + }, + readdir: async (path) => { + return this.base.readdir(this.addSlash(path)) + }, + unlink: async (path) => { + return this.base.unlink(this.addSlash(path)) + }, + mkdir: async (path) => { + return this.base.mkdir(this.addSlash(path)) + }, + readFile: async (path, options) => { + return this.base.readFile(this.addSlash(path), options) + }, + rename: async (from, to) => { + return this.base.rename(this.addSlash(from), this.addSlash(to)) + }, + writeFile: async (path, content, options) => { + return this.base.writeFile(this.addSlash(path), content, options) + }, + stat: async (path) => { + return this.base.stat(this.addSlash(path)) + } + } + } } export class indexedDBFileSystem extends fileSystem { - constructor() { - super() - this.name = 'indexedDB' - } + constructor() { + super() + this.name = 'indexedDB' + } - load = async () => { - return new Promise((resolve, reject) => { - try { - const fs = new IndexedDBStorage('RemixFileSystem') - fs.init('RemixFileSystem') - this.fs = fs.extended - this.fsCallBack = fs - this.loaded = true - resolve(true) - } catch (e) { - reject(e) - } - }) - } + load = async () => { + return new Promise((resolve, reject) => { + try { + const fs = new IndexedDBStorage('RemixFileSystem') + fs.init('RemixFileSystem') + this.fs = fs.extended + this.fsCallBack = fs + this.loaded = true + resolve(true) + } catch (e) { + reject(e) + } + }) + } - test = async () => { - return new Promise((resolve, reject) => { - if (!window.indexedDB) { - this.available = false - reject('No indexedDB on window') - } - const request = window.indexedDB.open("RemixTestDataBase"); - request.onerror = () => { - this.available = false - reject('Error creating test database') - }; - request.onsuccess = () => { - window.indexedDB.deleteDatabase("RemixTestDataBase"); - this.available = true - resolve(true) - }; - }) - } + test = async () => { + return new Promise((resolve, reject) => { + if (!window.indexedDB) { + this.available = false + reject('No indexedDB on window') + } + const request = window.indexedDB.open("RemixTestDataBase"); + request.onerror = () => { + this.available = false + reject('Error creating test database') + }; + request.onsuccess = () => { + window.indexedDB.deleteDatabase("RemixTestDataBase"); + this.available = true + resolve(true) + }; + }) + } } \ No newline at end of file diff --git a/apps/remix-ide/src/app/files/filesystems/localStorage.ts b/apps/remix-ide/src/app/files/filesystems/localStorage.ts index 8346a37976..d99c3ae296 100644 --- a/apps/remix-ide/src/app/files/filesystems/localStorage.ts +++ b/apps/remix-ide/src/app/files/filesystems/localStorage.ts @@ -2,56 +2,56 @@ import { fileSystem } from "../fileSystem"; export class localStorageFS extends fileSystem { - constructor() { - super() - this.name = 'localstorage' - } - load = async () => { - const me = this - return new Promise((resolve, reject) => { - try { - const w = window as any - w.BrowserFS.install(window) - w.BrowserFS.configure({ - fs: 'LocalStorage' - }, async function (e) { - if (e) { - console.log('BrowserFS Error: ' + e) - reject(e) - } else { - me.fs = { ...window.require('fs') } - me.fsCallBack = window.require('fs') - me.fs.readdir = me.fs.readdirSync - me.fs.readFile = me.fs.readFileSync - me.fs.writeFile = me.fs.writeFileSync - me.fs.stat = me.fs.statSync - me.fs.unlink = me.fs.unlinkSync - me.fs.rmdir = me.fs.rmdirSync - me.fs.mkdir = me.fs.mkdirSync - me.fs.rename = me.fs.renameSync - me.fs.exists = me.fs.existsSync - me.loaded = true - resolve(true) - } - }) - } catch (e) { - console.log('BrowserFS is not ready!') - reject(e) - } + constructor() { + super() + this.name = 'localstorage' + } + load = async () => { + const me = this + return new Promise((resolve, reject) => { + try { + const w = window as any + w.BrowserFS.install(window) + w.BrowserFS.configure({ + fs: 'LocalStorage' + }, async function (e) { + if (e) { + console.log('BrowserFS Error: ' + e) + reject(e) + } else { + me.fs = { ...window.require('fs') } + me.fsCallBack = window.require('fs') + me.fs.readdir = me.fs.readdirSync + me.fs.readFile = me.fs.readFileSync + me.fs.writeFile = me.fs.writeFileSync + me.fs.stat = me.fs.statSync + me.fs.unlink = me.fs.unlinkSync + me.fs.rmdir = me.fs.rmdirSync + me.fs.mkdir = me.fs.mkdirSync + me.fs.rename = me.fs.renameSync + me.fs.exists = me.fs.existsSync + me.loaded = true + resolve(true) + } }) - } + } catch (e) { + console.log('BrowserFS is not ready!') + reject(e) + } + }) + } - test = async () => { - return new Promise((resolve, reject) => { - const test = 'test'; - try { - localStorage.setItem(test, test); - localStorage.removeItem(test); - resolve(true) - } catch(e) { - reject(e) - } - }) - } + test = async () => { + return new Promise((resolve, reject) => { + const test = 'test'; + try { + localStorage.setItem(test, test); + localStorage.removeItem(test); + resolve(true) + } catch(e) { + reject(e) + } + }) + } } \ No newline at end of file diff --git a/apps/remix-ide/src/app/panels/layout.ts b/apps/remix-ide/src/app/panels/layout.ts index a88fb97584..3a44d1f83b 100644 --- a/apps/remix-ide/src/app/panels/layout.ts +++ b/apps/remix-ide/src/app/panels/layout.ts @@ -61,9 +61,9 @@ export class Layout extends Plugin { }) this.on('manager', 'activate', (profile: Profile) => { switch (profile.name) { - case 'filePanel': - this.call('menuicons', 'select', 'filePanel') - break + case 'filePanel': + this.call('menuicons', 'select', 'filePanel') + break } }) this.on('sidePanel', 'focusChanged', async (name) => { diff --git a/apps/remix-ide/src/app/panels/terminal.js b/apps/remix-ide/src/app/panels/terminal.js index dac831c0c8..83620b9264 100644 --- a/apps/remix-ide/src/app/panels/terminal.js +++ b/apps/remix-ide/src/app/panels/terminal.js @@ -114,9 +114,9 @@ class Terminal extends Plugin { updateComponent(state) { return + plugin={state.plugin} + onReady={state.onReady} + /> } renderComponent () { diff --git a/apps/remix-ide/src/app/plugins/code-format.ts b/apps/remix-ide/src/app/plugins/code-format.ts index 1d74cff422..04266c1615 100644 --- a/apps/remix-ide/src/app/plugins/code-format.ts +++ b/apps/remix-ide/src/app/plugins/code-format.ts @@ -8,279 +8,279 @@ import toml from 'toml' import { filePathFilter, AnyFilter } from '@jsdevtools/file-path-filter' const profile = { - name: 'codeFormatter', - desciption: 'prettier plugin for Remix', - methods: ['format'], - events: [''], - version: '0.0.1' + name: 'codeFormatter', + desciption: 'prettier plugin for Remix', + methods: ['format'], + events: [''], + version: '0.0.1' } const defaultOptions = { - "overrides": [ - { - "files": "*.sol", - "options": { - "printWidth": 80, - "tabWidth": 4, - "useTabs": false, - "singleQuote": false, - "bracketSpacing": false, - } - }, - { - "files": "*.yml", - "options": { - } - }, - { - "files": "*.yaml", - "options": { - } - }, - { - "files": "*.toml", - "options": { - } - }, - { - "files": "*.json", - "options": { - } - }, - { - "files": "*.js", - "options": { - } - }, - { - "files": "*.ts", - "options": { - } - } - ] + "overrides": [ + { + "files": "*.sol", + "options": { + "printWidth": 80, + "tabWidth": 4, + "useTabs": false, + "singleQuote": false, + "bracketSpacing": false, + } + }, + { + "files": "*.yml", + "options": { + } + }, + { + "files": "*.yaml", + "options": { + } + }, + { + "files": "*.toml", + "options": { + } + }, + { + "files": "*.json", + "options": { + } + }, + { + "files": "*.js", + "options": { + } + }, + { + "files": "*.ts", + "options": { + } + } + ] } export class CodeFormat extends Plugin { - prettier: any - ts: any - babel: any - espree: any - yml: any - sol: any + prettier: any + ts: any + babel: any + espree: any + yml: any + sol: any - constructor() { - super(profile) - } + constructor() { + super(profile) + } - async format(file: string) { + async format(file: string) { - // lazy load - if (!this.prettier) { - this.prettier = await import('prettier/standalone') - this.ts = await import('prettier/parser-typescript') - this.babel = await import('prettier/parser-babel') - this.espree = await import('prettier/parser-espree') - this.yml = await import('prettier/parser-yaml') - } + // lazy load + if (!this.prettier) { + this.prettier = await import('prettier/standalone') + this.ts = await import('prettier/parser-typescript') + this.babel = await import('prettier/parser-babel') + this.espree = await import('prettier/parser-espree') + this.yml = await import('prettier/parser-yaml') + } - try { - const content = await this.call('fileManager', 'readFile', file) - if (!content) return - let parserName = '' - let options: Options = { - } - switch (path.extname(file)) { - case '.sol': - parserName = 'solidity-parse' - break - case '.ts': - parserName = 'typescript' - options = { - ...options, - trailingComma: 'all', - semi: false, - singleQuote: true, - quoteProps: 'as-needed', - bracketSpacing: true, - arrowParens: 'always', - } - break - case '.js': - parserName = "espree" - options = { - ...options, - semi: false, - singleQuote: true, - } - break - case '.json': - parserName = 'json' - break - case '.yml': - parserName = 'yaml' - break - case '.yaml': - parserName = 'yaml' - break - } + try { + const content = await this.call('fileManager', 'readFile', file) + if (!content) return + let parserName = '' + let options: Options = { + } + switch (path.extname(file)) { + case '.sol': + parserName = 'solidity-parse' + break + case '.ts': + parserName = 'typescript' + options = { + ...options, + trailingComma: 'all', + semi: false, + singleQuote: true, + quoteProps: 'as-needed', + bracketSpacing: true, + arrowParens: 'always', + } + break + case '.js': + parserName = "espree" + options = { + ...options, + semi: false, + singleQuote: true, + } + break + case '.json': + parserName = 'json' + break + case '.yml': + parserName = 'yaml' + break + case '.yaml': + parserName = 'yaml' + break + } - if (file === '.prettierrc') { - parserName = 'json' - } + if (file === '.prettierrc') { + parserName = 'json' + } - const possibleFileNames = [ - '.prettierrc', - '.prettierrc.json', - '.prettierrc.yaml', - '.prettierrc.yml', - '.prettierrc.toml', - '.prettierrc.js', - '.prettierrc.cjs', - 'prettier.config.js', - 'prettier.config.cjs', - '.prettierrc.json5', - ] + const possibleFileNames = [ + '.prettierrc', + '.prettierrc.json', + '.prettierrc.yaml', + '.prettierrc.yml', + '.prettierrc.toml', + '.prettierrc.js', + '.prettierrc.cjs', + 'prettier.config.js', + 'prettier.config.cjs', + '.prettierrc.json5', + ] - const prettierConfigFile = await findAsync(possibleFileNames, async (fileName) => { - const exists = await this.call('fileManager', 'exists', fileName) - return exists - }) + const prettierConfigFile = await findAsync(possibleFileNames, async (fileName) => { + const exists = await this.call('fileManager', 'exists', fileName) + return exists + }) - let parsed = null - if (prettierConfigFile) { - let prettierConfig = await this.call('fileManager', 'readFile', prettierConfigFile) - if (prettierConfig) { - if (prettierConfigFile.endsWith('.yaml') || prettierConfigFile.endsWith('.yml')) { - try { - parsed = yaml.load(prettierConfig) - } catch (e) { - // do nothing - } - } else if (prettierConfigFile.endsWith('.toml')) { - try { - parsed = toml.parse(prettierConfig) - } catch (e) { - // do nothing - } - } else if (prettierConfigFile.endsWith('.json') || prettierConfigFile.endsWith('.json5')) { - try { - parsed = JSON.parse(prettierConfig) - } catch (e) { - // do nothing - } - } else if (prettierConfigFile === '.prettierrc') { - try { - parsed = JSON.parse(prettierConfig) - } catch (e) { - // do nothing - } - if (!parsed) { - try { - parsed = yaml.load(prettierConfig) - } catch (e) { - // do nothing - } - } - } else if (prettierConfigFile.endsWith('.js') || prettierConfigFile.endsWith('.cjs')) { - // remove any comments - prettierConfig = prettierConfig.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '') - // add quotes to keys - prettierConfig = prettierConfig.replace(/([a-zA-Z0-9_]+)(\s*):/g, '"$1"$2:') - // remove comma from last key - prettierConfig = prettierConfig.replace(/,(\s*})/g, '$1') - // remove any semi-colons - prettierConfig = prettierConfig.replace(/;/g, '') - // convert single quotes to double quotes - prettierConfig = prettierConfig.replace(/'/g, '"') - try { - parsed = JSON.parse(prettierConfig.replace('module.exports = ', '').replace('module.exports=', '')) - } catch (e) { - // do nothing - } - } - } - } else { - parsed = defaultOptions - await this.call('fileManager', 'writeFile', '.prettierrc.json', JSON.stringify(parsed, null, 2)) - await this.call('notification', 'toast', 'A prettier config file has been created in the workspace.') + let parsed = null + if (prettierConfigFile) { + let prettierConfig = await this.call('fileManager', 'readFile', prettierConfigFile) + if (prettierConfig) { + if (prettierConfigFile.endsWith('.yaml') || prettierConfigFile.endsWith('.yml')) { + try { + parsed = yaml.load(prettierConfig) + } catch (e) { + // do nothing } - - if (!parsed && prettierConfigFile) { - this.call('notification', 'toast', `Error parsing prettier config file: ${prettierConfigFile}`) + } else if (prettierConfigFile.endsWith('.toml')) { + try { + parsed = toml.parse(prettierConfig) + } catch (e) { + // do nothing + } + } else if (prettierConfigFile.endsWith('.json') || prettierConfigFile.endsWith('.json5')) { + try { + parsed = JSON.parse(prettierConfig) + } catch (e) { + // do nothing + } + } else if (prettierConfigFile === '.prettierrc') { + try { + parsed = JSON.parse(prettierConfig) + } catch (e) { + // do nothing + } + if (!parsed) { + try { + parsed = yaml.load(prettierConfig) + } catch (e) { + // do nothing + } + } + } else if (prettierConfigFile.endsWith('.js') || prettierConfigFile.endsWith('.cjs')) { + // remove any comments + prettierConfig = prettierConfig.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '') + // add quotes to keys + prettierConfig = prettierConfig.replace(/([a-zA-Z0-9_]+)(\s*):/g, '"$1"$2:') + // remove comma from last key + prettierConfig = prettierConfig.replace(/,(\s*})/g, '$1') + // remove any semi-colons + prettierConfig = prettierConfig.replace(/;/g, '') + // convert single quotes to double quotes + prettierConfig = prettierConfig.replace(/'/g, '"') + try { + parsed = JSON.parse(prettierConfig.replace('module.exports = ', '').replace('module.exports=', '')) + } catch (e) { + // do nothing } + } + } + } else { + parsed = defaultOptions + await this.call('fileManager', 'writeFile', '.prettierrc.json', JSON.stringify(parsed, null, 2)) + await this.call('notification', 'toast', 'A prettier config file has been created in the workspace.') + } + if (!parsed && prettierConfigFile) { + this.call('notification', 'toast', `Error parsing prettier config file: ${prettierConfigFile}`) + } - // merge options - if (parsed) { - options = { - ...options, - ...parsed, - } - } - // search for overrides - if (parsed && parsed.overrides) { - const override = parsed.overrides.find((override) => { - if (override.files) { - const pathFilter: AnyFilter = {} - pathFilter.include = setGlobalExpression(override.files) - const filteredFiles = [file] - .filter(filePathFilter(pathFilter)) - if (filteredFiles.length) { - return true - } - } - }) - const validParsers = ['typescript', 'babel', 'espree', 'solidity-parse', 'json', 'yaml', 'solidity-parse'] - if (override && override.options && override.options.parser) { - if (validParsers.includes(override.options.parser)) { - parserName = override.options.parser - } else { - this.call('notification', 'toast', `Invalid parser: ${override.options.parser}! Valid options are ${validParsers.join(', ')}`) - } - delete override.options.parser - } + // merge options + if (parsed) { + options = { + ...options, + ...parsed, + } + } - if (override) { - options = { - ...options, - ...override.options, - } - } + // search for overrides + if (parsed && parsed.overrides) { + const override = parsed.overrides.find((override) => { + if (override.files) { + const pathFilter: AnyFilter = {} + pathFilter.include = setGlobalExpression(override.files) + const filteredFiles = [file] + .filter(filePathFilter(pathFilter)) + if (filteredFiles.length) { + return true } + } + }) + const validParsers = ['typescript', 'babel', 'espree', 'solidity-parse', 'json', 'yaml', 'solidity-parse'] + if (override && override.options && override.options.parser) { + if (validParsers.includes(override.options.parser)) { + parserName = override.options.parser + } else { + this.call('notification', 'toast', `Invalid parser: ${override.options.parser}! Valid options are ${validParsers.join(', ')}`) + } + delete override.options.parser + } - - const result = this.prettier.format(content, { - plugins: [sol as any, this.ts, this.babel, this.espree, this.yml], - parser: parserName, - ...options - }) - await this.call('fileManager', 'writeFile', file, result) - } catch (e) { - // do nothing + if (override) { + options = { + ...options, + ...override.options, + } } + } + + + const result = this.prettier.format(content, { + plugins: [sol as any, this.ts, this.babel, this.espree, this.yml], + parser: parserName, + ...options + }) + await this.call('fileManager', 'writeFile', file, result) + } catch (e) { + // do nothing } + } } //*.sol, **/*.txt, contracts/* const setGlobalExpression = (paths: string) => { - const results = [] - paths.split(',').forEach(path => { - path = path.trim() - if (path.startsWith('*.')) path = path.replace(/(\*\.)/g, '**/*.') - if (path.endsWith('/*') && !path.endsWith('/**/*')) - path = path.replace(/(\*)/g, '**/*.*') - results.push(path) - }) - return results + const results = [] + paths.split(',').forEach(path => { + path = path.trim() + if (path.startsWith('*.')) path = path.replace(/(\*\.)/g, '**/*.') + if (path.endsWith('/*') && !path.endsWith('/**/*')) + path = path.replace(/(\*)/g, '**/*.*') + results.push(path) + }) + return results } async function findAsync(arr, asyncCallback) { - const promises = arr.map(asyncCallback); - const results = await Promise.all(promises); - const index = results.findIndex(result => result); - return arr[index]; + const promises = arr.map(asyncCallback); + const results = await Promise.all(promises); + const index = results.findIndex(result => result); + return arr[index]; } diff --git a/apps/remix-ide/src/app/plugins/code-format/index.ts b/apps/remix-ide/src/app/plugins/code-format/index.ts index 777009974c..32f785574c 100644 --- a/apps/remix-ide/src/app/plugins/code-format/index.ts +++ b/apps/remix-ide/src/app/plugins/code-format/index.ts @@ -8,54 +8,54 @@ import { parse } from './parser' // https://prettier.io/docs/en/plugins.html#languages // https://github.com/ikatyang/linguist-languages/blob/master/data/Solidity.json const languages = [ - { - linguistLanguageId: 237469032, - name: 'Solidity', - type: 'programming', - color: '#AA6746', - aceMode: 'text', - tmScope: 'source.solidity', - extensions: ['.sol'], - parsers: ['solidity-parse'], - vscodeLanguageIds: ['solidity'] - } + { + linguistLanguageId: 237469032, + name: 'Solidity', + type: 'programming', + color: '#AA6746', + aceMode: 'text', + tmScope: 'source.solidity', + extensions: ['.sol'], + parsers: ['solidity-parse'], + vscodeLanguageIds: ['solidity'] + } ]; // https://prettier.io/docs/en/plugins.html#parsers const parser = { astFormat: 'solidity-ast', parse, ...loc }; const parsers = { - 'solidity-parse': parser + 'solidity-parse': parser }; const canAttachComment = (node) => - node.type && node.type !== 'BlockComment' && node.type !== 'LineComment'; + node.type && node.type !== 'BlockComment' && node.type !== 'LineComment'; // https://prettier.io/docs/en/plugins.html#printers const printers = { - 'solidity-ast': { - canAttachComment, - handleComments: { - ownLine: handleComments.handleOwnLineComment, - endOfLine: handleComments.handleEndOfLineComment, - remaining: handleComments.handleRemainingComment - }, - isBlockComment: handleComments.isBlockComment, - massageAstNode, - print, - printComment - } + 'solidity-ast': { + canAttachComment, + handleComments: { + ownLine: handleComments.handleOwnLineComment, + endOfLine: handleComments.handleEndOfLineComment, + remaining: handleComments.handleRemainingComment + }, + isBlockComment: handleComments.isBlockComment, + massageAstNode, + print, + printComment + } }; // https://prettier.io/docs/en/plugins.html#defaultoptions const defaultOptions = { - bracketSpacing: false, - tabWidth: 4 + bracketSpacing: false, + tabWidth: 4 }; export default { - languages, - parsers, - printers, - options, - defaultOptions + languages, + parsers, + printers, + options, + defaultOptions }; diff --git a/apps/remix-ide/src/app/plugins/code-format/parser.ts b/apps/remix-ide/src/app/plugins/code-format/parser.ts index 15ef38f871..0fb913fed7 100644 --- a/apps/remix-ide/src/app/plugins/code-format/parser.ts +++ b/apps/remix-ide/src/app/plugins/code-format/parser.ts @@ -80,113 +80,113 @@ export function parse(text, _parsers, options) { }, BinaryOperation(ctx) { switch (ctx.operator) { - case '+': - case '-': - ctx.left = tryHug(ctx.left, ['%']); - ctx.right = tryHug(ctx.right, ['%']); - break; - case '*': - ctx.left = tryHug(ctx.left, ['/', '%']); - break; - case '/': - ctx.left = tryHug(ctx.left, ['*', '%']); - break; - case '%': - ctx.left = tryHug(ctx.left, ['*', '/', '%']); - break; - case '**': - // If the compiler has not been given as an option using we leave a**b**c. - if (!compiler) break; + case '+': + case '-': + ctx.left = tryHug(ctx.left, ['%']); + ctx.right = tryHug(ctx.right, ['%']); + break; + case '*': + ctx.left = tryHug(ctx.left, ['/', '%']); + break; + case '/': + ctx.left = tryHug(ctx.left, ['*', '%']); + break; + case '%': + ctx.left = tryHug(ctx.left, ['*', '/', '%']); + break; + case '**': + // If the compiler has not been given as an option using we leave a**b**c. + if (!compiler) break; - if (semver.satisfies(compiler, '<0.8.0')) { - // If the compiler is less than 0.8.0 then a**b**c is formatted as - // (a**b)**c. - ctx.left = tryHug(ctx.left, ['**']); - break; - } - if ( - ctx.left.type === 'BinaryOperation' && - ctx.left.operator === '**' - ) { - // the parser still organizes the a**b**c as (a**b)**c so we need - // to restructure it. - ctx.right = { - type: 'TupleExpression', - components: [ - { - type: 'BinaryOperation', - operator: '**', - left: ctx.left.right, - right: ctx.right - } - ], - isArray: false - }; - ctx.left = ctx.left.left; - } - break; - case '<<': - case '>>': - ctx.left = tryHug(ctx.left, ['+', '-', '*', '/', '**', '<<', '>>']); - ctx.right = tryHug(ctx.right, ['+', '-', '*', '/', '**']); - break; - case '&': - ctx.left = tryHug(ctx.left, ['+', '-', '*', '/', '**', '<<', '>>']); - ctx.right = tryHug(ctx.right, ['+', '-', '*', '/', '**', '<<', '>>']); - break; - case '|': - ctx.left = tryHug(ctx.left, [ - '+', - '-', - '*', - '/', - '**', - '<<', - '>>', - '&', - '^' - ]); - ctx.right = tryHug(ctx.right, [ - '+', - '-', - '*', - '/', - '**', - '<<', - '>>', - '&', - '^' - ]); - break; - case '^': - ctx.left = tryHug(ctx.left, [ - '+', - '-', - '*', - '/', - '**', - '<<', - '>>', - '&' - ]); - ctx.right = tryHug(ctx.right, [ - '+', - '-', - '*', - '/', - '**', - '<<', - '>>', - '&' - ]); - break; - case '||': - ctx.left = tryHug(ctx.left, ['&&']); - ctx.right = tryHug(ctx.right, ['&&']); - break; - case '&&': - default: + if (semver.satisfies(compiler, '<0.8.0')) { + // If the compiler is less than 0.8.0 then a**b**c is formatted as + // (a**b)**c. + ctx.left = tryHug(ctx.left, ['**']); break; + } + if ( + ctx.left.type === 'BinaryOperation' && + ctx.left.operator === '**' + ) { + // the parser still organizes the a**b**c as (a**b)**c so we need + // to restructure it. + ctx.right = { + type: 'TupleExpression', + components: [ + { + type: 'BinaryOperation', + operator: '**', + left: ctx.left.right, + right: ctx.right + } + ], + isArray: false + }; + ctx.left = ctx.left.left; + } + break; + case '<<': + case '>>': + ctx.left = tryHug(ctx.left, ['+', '-', '*', '/', '**', '<<', '>>']); + ctx.right = tryHug(ctx.right, ['+', '-', '*', '/', '**']); + break; + case '&': + ctx.left = tryHug(ctx.left, ['+', '-', '*', '/', '**', '<<', '>>']); + ctx.right = tryHug(ctx.right, ['+', '-', '*', '/', '**', '<<', '>>']); + break; + case '|': + ctx.left = tryHug(ctx.left, [ + '+', + '-', + '*', + '/', + '**', + '<<', + '>>', + '&', + '^' + ]); + ctx.right = tryHug(ctx.right, [ + '+', + '-', + '*', + '/', + '**', + '<<', + '>>', + '&', + '^' + ]); + break; + case '^': + ctx.left = tryHug(ctx.left, [ + '+', + '-', + '*', + '/', + '**', + '<<', + '>>', + '&' + ]); + ctx.right = tryHug(ctx.right, [ + '+', + '-', + '*', + '/', + '**', + '<<', + '>>', + '&' + ]); + break; + case '||': + ctx.left = tryHug(ctx.left, ['&&']); + ctx.right = tryHug(ctx.right, ['&&']); + break; + case '&&': + default: + break; } } }); diff --git a/apps/remix-ide/src/app/plugins/contractFlattener.tsx b/apps/remix-ide/src/app/plugins/contractFlattener.tsx index b61915372d..4f7cad9212 100644 --- a/apps/remix-ide/src/app/plugins/contractFlattener.tsx +++ b/apps/remix-ide/src/app/plugins/contractFlattener.tsx @@ -61,8 +61,8 @@ export class ContractFlattener extends Plugin { try{ dependencyGraph = getDependencyGraph(ast, filePath) sorted = dependencyGraph.isEmpty() - ? [filePath] - : dependencyGraph.sort().reverse() + ? [filePath] + : dependencyGraph.sort().reverse() sources = source.sources result = concatSourceFiles(sorted, sources) }catch(err){ diff --git a/apps/remix-ide/src/app/plugins/file-decorator.ts b/apps/remix-ide/src/app/plugins/file-decorator.ts index 31aaf109be..34829b027b 100644 --- a/apps/remix-ide/src/app/plugins/file-decorator.ts +++ b/apps/remix-ide/src/app/plugins/file-decorator.ts @@ -6,79 +6,79 @@ import { Plugin } from '@remixproject/engine' import { fileDecoration } from '@remix-ui/file-decorators' const profile = { - name: 'fileDecorator', - desciption: 'Keeps decorators of the files', - methods: ['setFileDecorators', 'clearFileDecorators', 'clearAllFileDecorators'], - events: ['fileDecoratorsChanged'], - version: '0.0.1' + name: 'fileDecorator', + desciption: 'Keeps decorators of the files', + methods: ['setFileDecorators', 'clearFileDecorators', 'clearAllFileDecorators'], + events: ['fileDecoratorsChanged'], + version: '0.0.1' } export class FileDecorator extends Plugin { - private _fileStates: fileDecoration[] = [] - constructor() { - super(profile) - } + private _fileStates: fileDecoration[] = [] + constructor() { + super(profile) + } - onActivation(): void { - this.on('filePanel', 'setWorkspace', async () => { - await this.clearAllFileDecorators() - }) - } + onActivation(): void { + this.on('filePanel', 'setWorkspace', async () => { + await this.clearAllFileDecorators() + }) + } - /** + /** * @param fileStates Array of file states */ - async setFileDecorators(fileStates: fileDecoration[] | fileDecoration) { - const { from } = this.currentRequest - const workspace = await this.call('filePanel', 'getCurrentWorkspace') - const fileStatesPayload = Array.isArray(fileStates) ? fileStates : [fileStates] - // clear all file states in the previous state of this owner on the files called - fileStatesPayload.forEach((state) => { - state.workspace = workspace - state.owner = from - }) - const filteredState = this._fileStates.filter((state) => { - const index = fileStatesPayload.findIndex((payloadFileState: fileDecoration) => { - return from == state.owner && payloadFileState.path == state.path - }) - return index == -1 - }) - const newState = [...filteredState, ...fileStatesPayload].sort(sortByPath) + async setFileDecorators(fileStates: fileDecoration[] | fileDecoration) { + const { from } = this.currentRequest + const workspace = await this.call('filePanel', 'getCurrentWorkspace') + const fileStatesPayload = Array.isArray(fileStates) ? fileStates : [fileStates] + // clear all file states in the previous state of this owner on the files called + fileStatesPayload.forEach((state) => { + state.workspace = workspace + state.owner = from + }) + const filteredState = this._fileStates.filter((state) => { + const index = fileStatesPayload.findIndex((payloadFileState: fileDecoration) => { + return from == state.owner && payloadFileState.path == state.path + }) + return index == -1 + }) + const newState = [...filteredState, ...fileStatesPayload].sort(sortByPath) - if (!deepequal(newState, this._fileStates)) { - this._fileStates = newState - this.emit('fileDecoratorsChanged', this._fileStates) - } + if (!deepequal(newState, this._fileStates)) { + this._fileStates = newState + this.emit('fileDecoratorsChanged', this._fileStates) } + } - async clearFileDecorators(path?: string) { - const { from } = this.currentRequest - if (!from) return + async clearFileDecorators(path?: string) { + const { from } = this.currentRequest + if (!from) return - const filteredState = this._fileStates.filter((state) => { - if(state.owner != from) return true - if(path && state.path != path) return true - }) - const newState = [...filteredState].sort(sortByPath) - - if (!deepequal(newState, this._fileStates)) { - this._fileStates = newState - this.emit('fileDecoratorsChanged', this._fileStates) - } + const filteredState = this._fileStates.filter((state) => { + if(state.owner != from) return true + if(path && state.path != path) return true + }) + const newState = [...filteredState].sort(sortByPath) + if (!deepequal(newState, this._fileStates)) { + this._fileStates = newState + this.emit('fileDecoratorsChanged', this._fileStates) } - async clearAllFileDecorators() { - this._fileStates = [] - this.emit('fileDecoratorsChanged', []) - } + } + + async clearAllFileDecorators() { + this._fileStates = [] + this.emit('fileDecoratorsChanged', []) + } } const sortByPath = (a: fileDecoration, b: fileDecoration) => { - if (a.path < b.path) { - return -1; - } - if (a.path > b.path) { - return 1; - } - return 0; + if (a.path < b.path) { + return -1; + } + if (a.path > b.path) { + return 1; + } + return 0; } \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/parser/code-parser.tsx b/apps/remix-ide/src/app/plugins/parser/code-parser.tsx index cd0445f1b2..b3e0955ece 100644 --- a/apps/remix-ide/src/app/plugins/parser/code-parser.tsx +++ b/apps/remix-ide/src/app/plugins/parser/code-parser.tsx @@ -15,14 +15,14 @@ import { antlr } from './types' import { ParseResult } from './types/antlr-types' const profile: Profile = { - name: 'codeParser', - methods: ['nodesAtPosition', 'getContractNodes', 'getCurrentFileNodes', 'getLineColumnOfNode', 'getLineColumnOfPosition', 'getFunctionParamaters', 'getDeclaration', 'getFunctionReturnParameters', 'getVariableDeclaration', 'getNodeDocumentation', 'getNodeLink', 'listAstNodes', 'getANTLRBlockAtPosition', 'getLastNodeInLine', 'resolveImports', 'parseSolidity', 'getNodesWithScope', 'getNodesWithName', 'getNodes', 'compile', 'getNodeById', 'getLastCompilationResult', 'positionOfDefinition', 'definitionAtPosition', 'jumpToDefinition', 'referrencesAtPosition', 'referencesOf', 'getActiveHighlights', 'gasEstimation', 'declarationOf', 'getGasEstimates', 'getImports'], - events: [], - version: '0.0.1' + name: 'codeParser', + methods: ['nodesAtPosition', 'getContractNodes', 'getCurrentFileNodes', 'getLineColumnOfNode', 'getLineColumnOfPosition', 'getFunctionParamaters', 'getDeclaration', 'getFunctionReturnParameters', 'getVariableDeclaration', 'getNodeDocumentation', 'getNodeLink', 'listAstNodes', 'getANTLRBlockAtPosition', 'getLastNodeInLine', 'resolveImports', 'parseSolidity', 'getNodesWithScope', 'getNodesWithName', 'getNodes', 'compile', 'getNodeById', 'getLastCompilationResult', 'positionOfDefinition', 'definitionAtPosition', 'jumpToDefinition', 'referrencesAtPosition', 'referencesOf', 'getActiveHighlights', 'gasEstimation', 'declarationOf', 'getGasEstimates', 'getImports'], + events: [], + version: '0.0.1' } export function isNodeDefinition(node: genericASTNode) { - return node.nodeType === 'ContractDefinition' || + return node.nodeType === 'ContractDefinition' || node.nodeType === 'FunctionDefinition' || node.nodeType === 'ModifierDefinition' || node.nodeType === 'VariableDeclaration' || @@ -58,640 +58,640 @@ interface codeParserIndex { export class CodeParser extends Plugin { - compilerAbstract: CompilerAbstract - currentFile: string - nodeIndex: codeParserIndex - astWalker: any - errorState: boolean = false - - gastEstimateTimeOut: any - - gasService: CodeParserGasService - compilerService: CodeParserCompiler - antlrService: CodeParserAntlrService - importService: CodeParserImports - - parseSolidity: (text: string) => Promise - getLastNodeInLine: (ast: string) => Promise - listAstNodes: () => Promise - getANTLRBlockAtPosition: (position: any, text?: string) => Promise - setCurrentFileAST: (text?: string) => Promise - getImports: () => Promise - - debuggerIsOn: boolean = false - - - constructor(astWalker: any) { - super(profile) - this.astWalker = astWalker - this.nodeIndex = { - declarations: [[]], - flatReferences: [], - nodesPerFile: {} - } - } - - async handleChangeEvents() { - const completionSettings = await this.call('config', 'getAppParameter', 'auto-completion') - if (completionSettings) { - this.antlrService.enableWorker() - } else { - this.antlrService.disableWorker() - } - const showGasSettings = await this.call('config', 'getAppParameter', 'show-gas') - const showErrorSettings = await this.call('config', 'getAppParameter', 'display-errors') - if (showGasSettings || showErrorSettings || completionSettings || this.debuggerIsOn) { - await this.compilerService.compile() - } - } - - async onActivation() { - - this.gasService = new CodeParserGasService(this) - this.compilerService = new CodeParserCompiler(this) - this.antlrService = new CodeParserAntlrService(this) - this.importService = new CodeParserImports(this) - - this.parseSolidity = this.antlrService.parseSolidity.bind(this.antlrService) - this.getLastNodeInLine = this.antlrService.getLastNodeInLine.bind(this.antlrService) - this.listAstNodes = this.antlrService.listAstNodes.bind(this.antlrService) - this.getANTLRBlockAtPosition = this.antlrService.getANTLRBlockAtPosition.bind(this.antlrService) - this.setCurrentFileAST = this.antlrService.setCurrentFileAST.bind(this.antlrService) - this.getImports = this.importService.getImports.bind(this.importService) - - this.on('editor', 'didChangeFile', async (file) => { - await this.call('editor', 'discardLineTexts') - await this.handleChangeEvents() - }) - - this.on('filePanel', 'setWorkspace', async () => { - await this.call('fileDecorator', 'clearFileDecorators') - await this.importService.setFileTree() - }) - - this.on('fileManager', 'fileAdded', async () => { - await this.importService.setFileTree() - }) - this.on('fileManager', 'fileRemoved', async () => { - await this.importService.setFileTree() - }) - - this.on('fileManager', 'currentFileChanged', async () => { - await this.call('editor', 'discardLineTexts') - const completionSettings = await this.call('config', 'getAppParameter', 'auto-completion') - if (completionSettings) { - this.antlrService.setCurrentFileAST() - } - await this.handleChangeEvents() - }) - - this.on('solidity', 'loadingCompiler', async (url) => { - this.compilerService.compiler.loadVersion(true, `${url}?t=${Date.now()}`) - }) - - this.on('config', 'configChanged', async (config) => { - await this.reload() - }) - - this.on('settings', 'configChanged', async (config) => { - await this.reload() - }) - - await this.compilerService.init() - this.on('solidity', 'compilerLoaded', async () => { - await this.reload() - }) - - this.on('debugger', 'startDebugging', async () => { - this.debuggerIsOn = true - await this.reload() - }) - - this.on('debugger', 'stopDebugging', async () => { - this.debuggerIsOn = false - await this.reload() - }) - } - - async reload(){ - await this.call('editor', 'discardLineTexts') - await this.call('fileDecorator', 'clearFileDecorators') - await this.call('editor', 'clearErrorMarkers', [this.currentFile]) - await this.handleChangeEvents() - } - - /** + compilerAbstract: CompilerAbstract + currentFile: string + nodeIndex: codeParserIndex + astWalker: any + errorState: boolean = false + + gastEstimateTimeOut: any + + gasService: CodeParserGasService + compilerService: CodeParserCompiler + antlrService: CodeParserAntlrService + importService: CodeParserImports + + parseSolidity: (text: string) => Promise + getLastNodeInLine: (ast: string) => Promise + listAstNodes: () => Promise + getANTLRBlockAtPosition: (position: any, text?: string) => Promise + setCurrentFileAST: (text?: string) => Promise + getImports: () => Promise + + debuggerIsOn: boolean = false + + + constructor(astWalker: any) { + super(profile) + this.astWalker = astWalker + this.nodeIndex = { + declarations: [[]], + flatReferences: [], + nodesPerFile: {} + } + } + + async handleChangeEvents() { + const completionSettings = await this.call('config', 'getAppParameter', 'auto-completion') + if (completionSettings) { + this.antlrService.enableWorker() + } else { + this.antlrService.disableWorker() + } + const showGasSettings = await this.call('config', 'getAppParameter', 'show-gas') + const showErrorSettings = await this.call('config', 'getAppParameter', 'display-errors') + if (showGasSettings || showErrorSettings || completionSettings || this.debuggerIsOn) { + await this.compilerService.compile() + } + } + + async onActivation() { + + this.gasService = new CodeParserGasService(this) + this.compilerService = new CodeParserCompiler(this) + this.antlrService = new CodeParserAntlrService(this) + this.importService = new CodeParserImports(this) + + this.parseSolidity = this.antlrService.parseSolidity.bind(this.antlrService) + this.getLastNodeInLine = this.antlrService.getLastNodeInLine.bind(this.antlrService) + this.listAstNodes = this.antlrService.listAstNodes.bind(this.antlrService) + this.getANTLRBlockAtPosition = this.antlrService.getANTLRBlockAtPosition.bind(this.antlrService) + this.setCurrentFileAST = this.antlrService.setCurrentFileAST.bind(this.antlrService) + this.getImports = this.importService.getImports.bind(this.importService) + + this.on('editor', 'didChangeFile', async (file) => { + await this.call('editor', 'discardLineTexts') + await this.handleChangeEvents() + }) + + this.on('filePanel', 'setWorkspace', async () => { + await this.call('fileDecorator', 'clearFileDecorators') + await this.importService.setFileTree() + }) + + this.on('fileManager', 'fileAdded', async () => { + await this.importService.setFileTree() + }) + this.on('fileManager', 'fileRemoved', async () => { + await this.importService.setFileTree() + }) + + this.on('fileManager', 'currentFileChanged', async () => { + await this.call('editor', 'discardLineTexts') + const completionSettings = await this.call('config', 'getAppParameter', 'auto-completion') + if (completionSettings) { + this.antlrService.setCurrentFileAST() + } + await this.handleChangeEvents() + }) + + this.on('solidity', 'loadingCompiler', async (url) => { + this.compilerService.compiler.loadVersion(true, `${url}?t=${Date.now()}`) + }) + + this.on('config', 'configChanged', async (config) => { + await this.reload() + }) + + this.on('settings', 'configChanged', async (config) => { + await this.reload() + }) + + await this.compilerService.init() + this.on('solidity', 'compilerLoaded', async () => { + await this.reload() + }) + + this.on('debugger', 'startDebugging', async () => { + this.debuggerIsOn = true + await this.reload() + }) + + this.on('debugger', 'stopDebugging', async () => { + this.debuggerIsOn = false + await this.reload() + }) + } + + async reload(){ + await this.call('editor', 'discardLineTexts') + await this.call('fileDecorator', 'clearFileDecorators') + await this.call('editor', 'clearErrorMarkers', [this.currentFile]) + await this.handleChangeEvents() + } + + /** * * @returns */ - async getLastCompilationResult() { - return this.compilerAbstract - } + async getLastCompilationResult() { + return this.compilerAbstract + } - getSubNodes(node: T): number[] { - return node.nodeType == "ContractDefinition" && node.contractDependencies; - } + getSubNodes(node: T): number[] { + return node.nodeType == "ContractDefinition" && node.contractDependencies; + } - /** + /** * Builds a flat index and declarations of all the nodes in the compilation result * @param compilationResult * @param source */ - _buildIndex(compilationResult: CompilationResult, source) { - if (compilationResult && compilationResult.sources) { - const callback = (node: genericASTNode) => { - if (node && ("referencedDeclaration" in node) && node.referencedDeclaration) { - if (!this.nodeIndex.declarations[node.referencedDeclaration]) { - this.nodeIndex.declarations[node.referencedDeclaration] = [] - } - this.nodeIndex.declarations[node.referencedDeclaration].push(node) - } - this.nodeIndex.flatReferences[node.id] = node - } - for (const s in compilationResult.sources) { - this.astWalker.walkFull(compilationResult.sources[s].ast, callback) - } - + _buildIndex(compilationResult: CompilationResult, source) { + if (compilationResult && compilationResult.sources) { + const callback = (node: genericASTNode) => { + if (node && ("referencedDeclaration" in node) && node.referencedDeclaration) { + if (!this.nodeIndex.declarations[node.referencedDeclaration]) { + this.nodeIndex.declarations[node.referencedDeclaration] = [] + } + this.nodeIndex.declarations[node.referencedDeclaration].push(node) } + this.nodeIndex.flatReferences[node.id] = node + } + for (const s in compilationResult.sources) { + this.astWalker.walkFull(compilationResult.sources[s].ast, callback) + } } - // NODE HELPERS + } - _getInputParams(node: FunctionDefinitionAstNode) { - const params = [] - const target = node.parameters - if (target) { - const children = target.parameters - for (const j in children) { - if (children[j].nodeType === 'VariableDeclaration') { - params.push(children[j].typeDescriptions.typeString) - } - } + // NODE HELPERS + + _getInputParams(node: FunctionDefinitionAstNode) { + const params = [] + const target = node.parameters + if (target) { + const children = target.parameters + for (const j in children) { + if (children[j].nodeType === 'VariableDeclaration') { + params.push(children[j].typeDescriptions.typeString) } - return '(' + params.toString() + ')' + } } + return '(' + params.toString() + ')' + } - _flatNodeList(contractNode: ContractDefinitionAstNode, fileName: string, inScope: boolean, compilatioResult: any) { - const index = {} - const contractName: string = contractNode.name - const callback = (node) => { - if (inScope && node.scope !== contractNode.id + _flatNodeList(contractNode: ContractDefinitionAstNode, fileName: string, inScope: boolean, compilatioResult: any) { + const index = {} + const contractName: string = contractNode.name + const callback = (node) => { + if (inScope && node.scope !== contractNode.id && !(node.nodeType === 'EnumDefinition' || node.nodeType === 'EventDefinition' || node.nodeType === 'ModifierDefinition')) - return - if (inScope) node.isClassNode = true; - node.gasEstimate = this._getContractGasEstimate(node, contractName, fileName, compilatioResult) - node.functionName = node.name + this._getInputParams(node) - node.contractName = contractName - node.contractId = contractNode.id - index[node.id] = node - } - this.astWalker.walkFull(contractNode, callback) - return index - } - - _extractFileNodes(fileName: string, compilationResult: lastCompilationResult) { - if (compilationResult && compilationResult.data.sources && compilationResult.data.sources[fileName]) { - const source = compilationResult.data.sources[fileName] - const nodesByContract: any = {} - nodesByContract.imports = {} - nodesByContract.contracts = {} - this.astWalker.walkFull(source.ast, async (node) => { - if (node.nodeType === 'ContractDefinition') { - const flatNodes = this._flatNodeList(node, fileName, false, compilationResult) - node.gasEstimate = this._getContractGasEstimate(node, node.name, fileName, compilationResult) - nodesByContract.contracts[node.name] = { contractDefinition: node, contractNodes: flatNodes } - const baseNodes = {} - const baseNodesWithBaseContractScope = {} - if (node.linearizedBaseContracts) { - for (const id of node.linearizedBaseContracts) { - if (id !== node.id) { - const baseContract = await this.getNodeById(id) - const callback = (node) => { - node.contractName = (baseContract as any).name - node.contractId = (baseContract as any).id - node.isBaseNode = true; - baseNodes[node.id] = node - if ((node.scope && node.scope === baseContract.id) + return + if (inScope) node.isClassNode = true; + node.gasEstimate = this._getContractGasEstimate(node, contractName, fileName, compilatioResult) + node.functionName = node.name + this._getInputParams(node) + node.contractName = contractName + node.contractId = contractNode.id + index[node.id] = node + } + this.astWalker.walkFull(contractNode, callback) + return index + } + + _extractFileNodes(fileName: string, compilationResult: lastCompilationResult) { + if (compilationResult && compilationResult.data.sources && compilationResult.data.sources[fileName]) { + const source = compilationResult.data.sources[fileName] + const nodesByContract: any = {} + nodesByContract.imports = {} + nodesByContract.contracts = {} + this.astWalker.walkFull(source.ast, async (node) => { + if (node.nodeType === 'ContractDefinition') { + const flatNodes = this._flatNodeList(node, fileName, false, compilationResult) + node.gasEstimate = this._getContractGasEstimate(node, node.name, fileName, compilationResult) + nodesByContract.contracts[node.name] = { contractDefinition: node, contractNodes: flatNodes } + const baseNodes = {} + const baseNodesWithBaseContractScope = {} + if (node.linearizedBaseContracts) { + for (const id of node.linearizedBaseContracts) { + if (id !== node.id) { + const baseContract = await this.getNodeById(id) + const callback = (node) => { + node.contractName = (baseContract as any).name + node.contractId = (baseContract as any).id + node.isBaseNode = true; + baseNodes[node.id] = node + if ((node.scope && node.scope === baseContract.id) || node.nodeType === 'EnumDefinition' || node.nodeType === 'EventDefinition' - ) { - baseNodesWithBaseContractScope[node.id] = node - } - if (node.members) { - for (const member of node.members) { - member.contractName = (baseContract as any).name - member.contractId = (baseContract as any).id - member.isBaseNode = true; - } - } - } - this.astWalker.walkFull(baseContract, callback) - } - } + ) { + baseNodesWithBaseContractScope[node.id] = node + } + if (node.members) { + for (const member of node.members) { + member.contractName = (baseContract as any).name + member.contractId = (baseContract as any).id + member.isBaseNode = true; } - nodesByContract.contracts[node.name].baseNodes = baseNodes - nodesByContract.contracts[node.name].baseNodesWithBaseContractScope = baseNodesWithBaseContractScope - nodesByContract.contracts[node.name].contractScopeNodes = this._flatNodeList(node, fileName, true, compilationResult) + } } - if (node.nodeType === 'ImportDirective') { + this.astWalker.walkFull(baseContract, callback) + } + } + } + nodesByContract.contracts[node.name].baseNodes = baseNodes + nodesByContract.contracts[node.name].baseNodesWithBaseContractScope = baseNodesWithBaseContractScope + nodesByContract.contracts[node.name].contractScopeNodes = this._flatNodeList(node, fileName, true, compilationResult) + } + if (node.nodeType === 'ImportDirective') { - const imported = await this.resolveImports(node, {}) + const imported = await this.resolveImports(node, {}) - for (const importedNode of (Object.values(imported) as any)) { - if (importedNode.nodes) - for (const subNode of importedNode.nodes) { - nodesByContract.imports[subNode.id] = subNode - } - } - } - }) - return nodesByContract + for (const importedNode of (Object.values(imported) as any)) { + if (importedNode.nodes) + for (const subNode of importedNode.nodes) { + nodesByContract.imports[subNode.id] = subNode + } + } } - } - - _getContractGasEstimate(node: ContractDefinitionAstNode | FunctionDefinitionAstNode, contractName: string, fileName: string, compilationResult: lastCompilationResult) { - - const contracts = compilationResult.data.contracts && compilationResult.data.contracts[this.currentFile] - for (const name in contracts) { - if (name === contractName) { - const contract = contracts[name] - const estimationObj = contract.evm && contract.evm.gasEstimates - - let executionCost = null - if (node.nodeType === 'FunctionDefinition') { - const visibility = node.visibility - if (node.kind !== 'constructor') { - const fnName = node.name - const fn = fnName + this._getInputParams(node) - - if (visibility === 'public' || visibility === 'external') { - executionCost = estimationObj === null ? '-' : estimationObj.external[fn] - } else if (visibility === 'private' || visibility === 'internal') { - executionCost = estimationObj === null ? '-' : estimationObj.internal[fn] - } - return { executionCost } - } else { - return { - creationCost: estimationObj === null ? '-' : estimationObj.creation.totalCost, - codeDepositCost: estimationObj === null ? '-' : estimationObj.creation.codeDepositCost, - } - } - } + }) + return nodesByContract + } + } + + _getContractGasEstimate(node: ContractDefinitionAstNode | FunctionDefinitionAstNode, contractName: string, fileName: string, compilationResult: lastCompilationResult) { + + const contracts = compilationResult.data.contracts && compilationResult.data.contracts[this.currentFile] + for (const name in contracts) { + if (name === contractName) { + const contract = contracts[name] + const estimationObj = contract.evm && contract.evm.gasEstimates + + let executionCost = null + if (node.nodeType === 'FunctionDefinition') { + const visibility = node.visibility + if (node.kind !== 'constructor') { + const fnName = node.name + const fn = fnName + this._getInputParams(node) + + if (visibility === 'public' || visibility === 'external') { + executionCost = estimationObj === null ? '-' : estimationObj.external[fn] + } else if (visibility === 'private' || visibility === 'internal') { + executionCost = estimationObj === null ? '-' : estimationObj.internal[fn] + } + return { executionCost } + } else { + return { + creationCost: estimationObj === null ? '-' : estimationObj.creation.totalCost, + codeDepositCost: estimationObj === null ? '-' : estimationObj.creation.codeDepositCost, } + } } + } } + } - /** + /** * Nodes at position where position is a number, offset * @param position * @param type * @returns */ - async nodesAtPosition(position: number, type = ''): Promise { - let lastCompilationResult = this.compilerAbstract - if(this.debuggerIsOn) { - lastCompilationResult = await this.call('compilerArtefacts', 'get', '__last') - this.currentFile = await this.call('fileManager', 'file') - } - if (!lastCompilationResult) return [] - const urlFromPath = await this.call('fileManager', 'getUrlFromPath', this.currentFile) - if (lastCompilationResult && lastCompilationResult.languageversion.indexOf('soljson') === 0 && lastCompilationResult.data && lastCompilationResult.data.sources && lastCompilationResult.data.sources[this.currentFile]) { - const nodes: genericASTNode[] = sourceMappingDecoder.nodesAtPosition(type, position, lastCompilationResult.data.sources[this.currentFile] || lastCompilationResult.data.sources[urlFromPath.file]) - return nodes - } - return [] - } - - /** + async nodesAtPosition(position: number, type = ''): Promise { + let lastCompilationResult = this.compilerAbstract + if(this.debuggerIsOn) { + lastCompilationResult = await this.call('compilerArtefacts', 'get', '__last') + this.currentFile = await this.call('fileManager', 'file') + } + if (!lastCompilationResult) return [] + const urlFromPath = await this.call('fileManager', 'getUrlFromPath', this.currentFile) + if (lastCompilationResult && lastCompilationResult.languageversion.indexOf('soljson') === 0 && lastCompilationResult.data && lastCompilationResult.data.sources && lastCompilationResult.data.sources[this.currentFile]) { + const nodes: genericASTNode[] = sourceMappingDecoder.nodesAtPosition(type, position, lastCompilationResult.data.sources[this.currentFile] || lastCompilationResult.data.sources[urlFromPath.file]) + return nodes + } + return [] + } + + /** * * @param id * @returns */ - async getNodeById(id: number) { - for (const key in this.nodeIndex.flatReferences) { - if (this.nodeIndex.flatReferences[key].id === id) { - return this.nodeIndex.flatReferences[key] - } - } + async getNodeById(id: number) { + for (const key in this.nodeIndex.flatReferences) { + if (this.nodeIndex.flatReferences[key].id === id) { + return this.nodeIndex.flatReferences[key] + } } + } - /** + /** * * @param id * @returns */ - async getDeclaration(id: number) { - if (this.nodeIndex.declarations && this.nodeIndex.declarations[id]) return this.nodeIndex.declarations[id] - } + async getDeclaration(id: number) { + if (this.nodeIndex.declarations && this.nodeIndex.declarations[id]) return this.nodeIndex.declarations[id] + } - /** + /** * * @param scope * @returns */ - async getNodesWithScope(scope: number) { - const nodes = [] - for (const node of Object.values(this.nodeIndex.flatReferences)) { - if (node.scope === scope) nodes.push(node) - } - return nodes + async getNodesWithScope(scope: number) { + const nodes = [] + for (const node of Object.values(this.nodeIndex.flatReferences)) { + if (node.scope === scope) nodes.push(node) } + return nodes + } - /** + /** * * @param name * @returns */ - async getNodesWithName(name: string) { - const nodes: genericASTNode[] = [] - for (const node of Object.values(this.nodeIndex.flatReferences)) { - if (node.name === name) nodes.push(node) - } - return nodes - } - /** + async getNodesWithName(name: string) { + const nodes: genericASTNode[] = [] + for (const node of Object.values(this.nodeIndex.flatReferences)) { + if (node.name === name) nodes.push(node) + } + return nodes + } + /** * * @param node * @returns */ - declarationOf(node: T) { - if (node && ('referencedDeclaration' in node) && node.referencedDeclaration) { - return this.nodeIndex.flatReferences[node.referencedDeclaration] - } - return null + declarationOf(node: T) { + if (node && ('referencedDeclaration' in node) && node.referencedDeclaration) { + return this.nodeIndex.flatReferences[node.referencedDeclaration] } + return null + } - /** + /** * * @param position * @returns */ - async definitionAtPosition(position: number) { - const nodes = await this.nodesAtPosition(position) - let nodeDefinition: any - let node: genericASTNode - if (nodes && nodes.length && !this.errorState) { - node = nodes[nodes.length - 1] - nodeDefinition = node - if (!isNodeDefinition(node)) { - nodeDefinition = await this.declarationOf(node) || node - } - if (node.nodeType === 'ImportDirective') { - for (const key in this.nodeIndex.flatReferences) { - if (this.nodeIndex.flatReferences[key].id === node.sourceUnit) { - nodeDefinition = this.nodeIndex.flatReferences[key] - } - } - } - return nodeDefinition - } else { - const astNodes = await this.antlrService.listAstNodes() - if (astNodes && astNodes.length) { - for (const node of astNodes) { - if (node.range[0] <= position && node.range[1] >= position) { - if (nodeDefinition && nodeDefinition.range[0] < node.range[0]) { - nodeDefinition = node - } - if (!nodeDefinition) nodeDefinition = node - } - } - if (nodeDefinition && nodeDefinition.type && nodeDefinition.type === 'Identifier') { - const nodeForIdentifier = await this.findIdentifier(nodeDefinition) - if (nodeForIdentifier) nodeDefinition = nodeForIdentifier - } - return nodeDefinition + async definitionAtPosition(position: number) { + const nodes = await this.nodesAtPosition(position) + let nodeDefinition: any + let node: genericASTNode + if (nodes && nodes.length && !this.errorState) { + node = nodes[nodes.length - 1] + nodeDefinition = node + if (!isNodeDefinition(node)) { + nodeDefinition = await this.declarationOf(node) || node + } + if (node.nodeType === 'ImportDirective') { + for (const key in this.nodeIndex.flatReferences) { + if (this.nodeIndex.flatReferences[key].id === node.sourceUnit) { + nodeDefinition = this.nodeIndex.flatReferences[key] + } + } + } + return nodeDefinition + } else { + const astNodes = await this.antlrService.listAstNodes() + if (astNodes && astNodes.length) { + for (const node of astNodes) { + if (node.range[0] <= position && node.range[1] >= position) { + if (nodeDefinition && nodeDefinition.range[0] < node.range[0]) { + nodeDefinition = node } + if (!nodeDefinition) nodeDefinition = node + } } - + if (nodeDefinition && nodeDefinition.type && nodeDefinition.type === 'Identifier') { + const nodeForIdentifier = await this.findIdentifier(nodeDefinition) + if (nodeForIdentifier) nodeDefinition = nodeForIdentifier + } + return nodeDefinition + } } - async getContractNodes(contractName: string) { - if (this.nodeIndex.nodesPerFile + } + + async getContractNodes(contractName: string) { + if (this.nodeIndex.nodesPerFile && this.nodeIndex.nodesPerFile[this.currentFile] && this.nodeIndex.nodesPerFile[this.currentFile].contracts[contractName] && this.nodeIndex.nodesPerFile[this.currentFile].contracts[contractName].contractNodes) { - return this.nodeIndex.nodesPerFile[this.currentFile].contracts[contractName] - } - return false + return this.nodeIndex.nodesPerFile[this.currentFile].contracts[contractName] } + return false + } - async getCurrentFileNodes() { - if (this.nodeIndex.nodesPerFile + async getCurrentFileNodes() { + if (this.nodeIndex.nodesPerFile && this.nodeIndex.nodesPerFile[this.currentFile]) { - return this.nodeIndex.nodesPerFile[this.currentFile] - } - return false + return this.nodeIndex.nodesPerFile[this.currentFile] } + return false + } - /** + /** * * @param identifierNode * @returns */ - async findIdentifier(identifierNode: any) { - const astNodes = await this.antlrService.listAstNodes() - for (const node of astNodes) { - if (node.name === identifierNode.name && node.nodeType !== 'Identifier') { - return node - } - } + async findIdentifier(identifierNode: any) { + const astNodes = await this.antlrService.listAstNodes() + for (const node of astNodes) { + if (node.name === identifierNode.name && node.nodeType !== 'Identifier') { + return node + } } + } - /** + /** * * @param node * @returns */ - async positionOfDefinition(node: genericASTNode): Promise { - if (node) { - if (node.src) { - const position = sourceMappingDecoder.decode(node.src) - if (position) { - return position - } - } + async positionOfDefinition(node: genericASTNode): Promise { + if (node) { + if (node.src) { + const position = sourceMappingDecoder.decode(node.src) + if (position) { + return position } - return null + } } + return null + } - /** + /** * * @param node * @param imported * @returns */ - async resolveImports(node: any, imported = {}) { - if (node.nodeType === 'ImportDirective' && !imported[node.sourceUnit]) { - const importNode: any = await this.getNodeById(node.sourceUnit) - imported[importNode.id] = importNode - if (importNode.nodes) { - for (const child of importNode.nodes) { - imported = await this.resolveImports(child, imported) - } - } + async resolveImports(node: any, imported = {}) { + if (node.nodeType === 'ImportDirective' && !imported[node.sourceUnit]) { + const importNode: any = await this.getNodeById(node.sourceUnit) + imported[importNode.id] = importNode + if (importNode.nodes) { + for (const child of importNode.nodes) { + imported = await this.resolveImports(child, imported) } - return imported + } } + return imported + } - /** + /** * * @param node * @returns */ - referencesOf(node: genericASTNode) { - const results: genericASTNode[] = [] - const highlights = (id: number) => { - if (this.nodeIndex.declarations && this.nodeIndex.declarations[id]) { - const refs = this.nodeIndex.declarations[id] - for (const ref in refs) { - const node = refs[ref] - results.push(node) - } - } - } - if (node && ("referencedDeclaration" in node) && node.referencedDeclaration) { - highlights(node.referencedDeclaration) - const current = this.nodeIndex.flatReferences[node.referencedDeclaration] - results.push(current) - } else { - highlights(node.id) + referencesOf(node: genericASTNode) { + const results: genericASTNode[] = [] + const highlights = (id: number) => { + if (this.nodeIndex.declarations && this.nodeIndex.declarations[id]) { + const refs = this.nodeIndex.declarations[id] + for (const ref in refs) { + const node = refs[ref] + results.push(node) } - return results + } + } + if (node && ("referencedDeclaration" in node) && node.referencedDeclaration) { + highlights(node.referencedDeclaration) + const current = this.nodeIndex.flatReferences[node.referencedDeclaration] + results.push(current) + } else { + highlights(node.id) } + return results + } - /** + /** * * @param position * @returns */ - async referrencesAtPosition(position: any): Promise { - const nodes = await this.nodesAtPosition(position) - if (nodes && nodes.length) { - const node = nodes[nodes.length - 1] - if (node) { - return this.referencesOf(node) - } - } + async referrencesAtPosition(position: any): Promise { + const nodes = await this.nodesAtPosition(position) + if (nodes && nodes.length) { + const node = nodes[nodes.length - 1] + if (node) { + return this.referencesOf(node) + } } + } - /** + /** * * @returns */ - async getNodes(): Promise { - return this.nodeIndex.flatReferences - } + async getNodes(): Promise { + return this.nodeIndex.flatReferences + } - /** + /** * * @param node * @returns */ - async getNodeLink(node: genericASTNode) { - const lineColumn = await this.getLineColumnOfNode(node) - const position = await this.positionOfDefinition(node) - if (this.compilerAbstract && this.compilerAbstract.source && position) { - const fileName = this.compilerAbstract.getSourceName(position.file) - return lineColumn ? `${fileName} ${lineColumn.start.line}:${lineColumn.start.column}` : null - } - return '' + async getNodeLink(node: genericASTNode) { + const lineColumn = await this.getLineColumnOfNode(node) + const position = await this.positionOfDefinition(node) + if (this.compilerAbstract && this.compilerAbstract.source && position) { + const fileName = this.compilerAbstract.getSourceName(position.file) + return lineColumn ? `${fileName} ${lineColumn.start.line}:${lineColumn.start.column}` : null } + return '' + } - /* + /* * @param node */ - async getLineColumnOfNode(node: any) { - const position = await this.positionOfDefinition(node) - return this.getLineColumnOfPosition(position) - } + async getLineColumnOfNode(node: any) { + const position = await this.positionOfDefinition(node) + return this.getLineColumnOfPosition(position) + } - /* + /* * @param position */ - async getLineColumnOfPosition(position: any) { - if (position) { - const fileName = this.compilerAbstract.getSourceName(position.file) - const lineBreaks = sourceMappingDecoder.getLinebreakPositions(this.compilerAbstract.source.sources[fileName].content) - const lineColumn = sourceMappingDecoder.convertOffsetToLineColumn(position, lineBreaks) - return lineColumn - } + async getLineColumnOfPosition(position: any) { + if (position) { + const fileName = this.compilerAbstract.getSourceName(position.file) + const lineBreaks = sourceMappingDecoder.getLinebreakPositions(this.compilerAbstract.source.sources[fileName].content) + const lineColumn = sourceMappingDecoder.convertOffsetToLineColumn(position, lineBreaks) + return lineColumn } + } - /** + /** * * @param node * @returns */ - async getNodeDocumentation(node: genericASTNode) { - if (("documentation" in node) && node.documentation && (node.documentation as any).text) { - let text = ''; - (node.documentation as any).text.split('\n').forEach(line => { - text += `${line.trim()}\n` - }) - return text - } + async getNodeDocumentation(node: genericASTNode) { + if (("documentation" in node) && node.documentation && (node.documentation as any).text) { + let text = ''; + (node.documentation as any).text.split('\n').forEach(line => { + text += `${line.trim()}\n` + }) + return text } + } - /** + /** * * @param node * @returns */ - async getVariableDeclaration(node: any) { - const nodeVisibility = node.visibility && node.visibility.length ? node.visibility + ' ' : '' - const nodeName = node.name && node.name.length ? node.name : '' - if (node.typeDescriptions && node.typeDescriptions.typeString) { - return `${node.typeDescriptions.typeString} ${nodeVisibility}${nodeName}` - } else { - if (node.typeName && node.typeName.name) { - return `${node.typeName.name} ${nodeVisibility}${nodeName}` - } - else if (node.typeName && node.typeName.namePath) { - return `${node.typeName.namePath} ${nodeVisibility}${nodeName}` - } - else { - return `${nodeName}${nodeName}` - } - } - } - - /** + async getVariableDeclaration(node: any) { + const nodeVisibility = node.visibility && node.visibility.length ? node.visibility + ' ' : '' + const nodeName = node.name && node.name.length ? node.name : '' + if (node.typeDescriptions && node.typeDescriptions.typeString) { + return `${node.typeDescriptions.typeString} ${nodeVisibility}${nodeName}` + } else { + if (node.typeName && node.typeName.name) { + return `${node.typeName.name} ${nodeVisibility}${nodeName}` + } + else if (node.typeName && node.typeName.namePath) { + return `${node.typeName.namePath} ${nodeVisibility}${nodeName}` + } + else { + return `${nodeName}${nodeName}` + } + } + } + + /** * * @param node * @returns */ - async getFunctionParamaters(node: any) { - const localParam = (node.parameters && node.parameters.parameters) || (node.parameters) - if (localParam) { - const params = [] - for (const param of localParam) { - params.push(await this.getVariableDeclaration(param)) - } - return `(${params.join(', ')})` - } - } - - /** + async getFunctionParamaters(node: any) { + const localParam = (node.parameters && node.parameters.parameters) || (node.parameters) + if (localParam) { + const params = [] + for (const param of localParam) { + params.push(await this.getVariableDeclaration(param)) + } + return `(${params.join(', ')})` + } + } + + /** * * @param node * @returns */ - async getFunctionReturnParameters(node: any) { - const localParam = (node.returnParameters && node.returnParameters.parameters) - if (localParam) { - const params = [] - for (const param of localParam) { - params.push(await this.getVariableDeclaration(param)) - } - return `(${params.join(', ')})` - } - } + async getFunctionReturnParameters(node: any) { + const localParam = (node.returnParameters && node.returnParameters.parameters) + if (localParam) { + const params = [] + for (const param of localParam) { + params.push(await this.getVariableDeclaration(param)) + } + return `(${params.join(', ')})` + } + } diff --git a/apps/remix-ide/src/app/plugins/parser/services/antlr-worker.ts b/apps/remix-ide/src/app/plugins/parser/services/antlr-worker.ts index 0b2b843c7e..c9e026d085 100644 --- a/apps/remix-ide/src/app/plugins/parser/services/antlr-worker.ts +++ b/apps/remix-ide/src/app/plugins/parser/services/antlr-worker.ts @@ -1,45 +1,45 @@ let parser: any self.onmessage = (e: MessageEvent) => { - const data: any = e.data - switch (data.cmd) { - case 'load': - { - (self as any).importScripts(e.data.url) - // @ts-ignore - parser = SolidityParser as any; + const data: any = e.data + switch (data.cmd) { + case 'load': + { + (self as any).importScripts(e.data.url) + // @ts-ignore + parser = SolidityParser as any; - self.postMessage({ - cmd: 'loaded', - }) - break - } + self.postMessage({ + cmd: 'loaded', + }) + break + } - case 'parse': - if (data.text && parser) { + case 'parse': + if (data.text && parser) { - try { - let startTime = performance.now() - const blocks = parser.parseBlock(data.text, { loc: true, range: true, tolerant: true }) - const blockDuration = performance.now() - startTime - startTime = performance.now() - const ast = parser.parse(data.text, { loc: true, range: true, tolerant: true }) - const endTime = performance.now() + try { + let startTime = performance.now() + const blocks = parser.parseBlock(data.text, { loc: true, range: true, tolerant: true }) + const blockDuration = performance.now() - startTime + startTime = performance.now() + const ast = parser.parse(data.text, { loc: true, range: true, tolerant: true }) + const endTime = performance.now() - self.postMessage({ - cmd: 'parsed', - timestamp: data.timestamp, - ast, - text: data.text, - file: data.file, - duration: endTime - startTime, - blockDuration, - blocks - }) - } catch (e) { - // do nothing - } + self.postMessage({ + cmd: 'parsed', + timestamp: data.timestamp, + ast, + text: data.text, + file: data.file, + duration: endTime - startTime, + blockDuration, + blocks + }) + } catch (e) { + // do nothing + } - } - break } + break + } } \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts b/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts index ee28b2cc1b..3585dda157 100644 --- a/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts +++ b/apps/remix-ide/src/app/plugins/parser/services/code-parser-antlr-service.ts @@ -20,13 +20,13 @@ interface BlockDefinition { } export default class CodeParserAntlrService { - plugin: CodeParser - worker: Worker - parserStartTime: number = 0 - workerTimer: NodeJS.Timer - parserThreshold: number = 10 - parserThresholdSampleAmount = 3 - cache: { + plugin: CodeParser + worker: Worker + parserStartTime: number = 0 + workerTimer: NodeJS.Timer + parserThreshold: number = 10 + parserThresholdSampleAmount = 3 + cache: { [name: string]: { text: string, ast: antlr.ParseResult | null, @@ -36,253 +36,253 @@ export default class CodeParserAntlrService { blockDurations?: number[] } } = {}; - constructor(plugin: CodeParser) { - this.plugin = plugin - this.createWorker() - } + constructor(plugin: CodeParser) { + this.plugin = plugin + this.createWorker() + } - createWorker() { - this.worker = new Worker(new URL('./antlr-worker', import.meta.url)) - this.worker.postMessage({ - cmd: 'load', - url: document.location.protocol + '//' + document.location.host + '/assets/js/parser/antlr.js', - }); - const self = this + createWorker() { + this.worker = new Worker(new URL('./antlr-worker', import.meta.url)) + this.worker.postMessage({ + cmd: 'load', + url: document.location.protocol + '//' + document.location.host + '/assets/js/parser/antlr.js', + }); + const self = this - this.worker.addEventListener('message', function (ev) { - switch (ev.data.cmd) { - case 'parsed': - if (ev.data.ast && self.parserStartTime === ev.data.timestamp) { - self.cache[ev.data.file] = { - ...self.cache[ev.data.file], - text: ev.data.text, - ast: ev.data.ast, - duration: ev.data.duration, - blocks: ev.data.blocks, - blockDurations: self.cache[ev.data.file].blockDurations? [...self.cache[ev.data.file].blockDurations.slice(-self.parserThresholdSampleAmount), ev.data.blockDuration]: [ev.data.blockDuration] - } - self.setFileParsingState(ev.data.file) - } - break; - } + this.worker.addEventListener('message', function (ev) { + switch (ev.data.cmd) { + case 'parsed': + if (ev.data.ast && self.parserStartTime === ev.data.timestamp) { + self.cache[ev.data.file] = { + ...self.cache[ev.data.file], + text: ev.data.text, + ast: ev.data.ast, + duration: ev.data.duration, + blocks: ev.data.blocks, + blockDurations: self.cache[ev.data.file].blockDurations? [...self.cache[ev.data.file].blockDurations.slice(-self.parserThresholdSampleAmount), ev.data.blockDuration]: [ev.data.blockDuration] + } + self.setFileParsingState(ev.data.file) + } + break; + } - }); - } + }); + } - setFileParsingState(file: string) { - if (this.cache[file]) { - if (this.cache[file].blockDurations && this.cache[file].blockDurations.length > this.parserThresholdSampleAmount) { - // calculate average of durations to determine if the parsing should be disabled - const values = [...this.cache[file].blockDurations] - const average = values.reduce((a, b) => a + b, 0) / values.length - if (average > this.parserThreshold) { - this.cache[file].parsingEnabled = false - } else { - this.cache[file].parsingEnabled = true - } - } - } + setFileParsingState(file: string) { + if (this.cache[file]) { + if (this.cache[file].blockDurations && this.cache[file].blockDurations.length > this.parserThresholdSampleAmount) { + // calculate average of durations to determine if the parsing should be disabled + const values = [...this.cache[file].blockDurations] + const average = values.reduce((a, b) => a + b, 0) / values.length + if (average > this.parserThreshold) { + this.cache[file].parsingEnabled = false + } else { + this.cache[file].parsingEnabled = true + } + } } + } - enableWorker() { - if (!this.workerTimer) { - this.workerTimer = setInterval(() => { - this.setCurrentFileAST() - }, 5000) - } + enableWorker() { + if (!this.workerTimer) { + this.workerTimer = setInterval(() => { + this.setCurrentFileAST() + }, 5000) } + } - disableWorker() { - clearInterval(this.workerTimer) - } + disableWorker() { + clearInterval(this.workerTimer) + } - async parseWithWorker(text: string, file: string) { - this.parserStartTime = Date.now() - this.worker.postMessage({ - cmd: 'parse', - text, - timestamp: this.parserStartTime, - file, - parsingEnabled: (this.cache[file] && this.cache[file].parsingEnabled) || true - }); + async parseWithWorker(text: string, file: string) { + this.parserStartTime = Date.now() + this.worker.postMessage({ + cmd: 'parse', + text, + timestamp: this.parserStartTime, + file, + parsingEnabled: (this.cache[file] && this.cache[file].parsingEnabled) || true + }); - } + } - async parseSolidity(text: string) { - const ast: antlr.ParseResult = (SolidityParser as any).parse(text, { loc: true, range: true, tolerant: true }) - return ast - } + async parseSolidity(text: string) { + const ast: antlr.ParseResult = (SolidityParser as any).parse(text, { loc: true, range: true, tolerant: true }) + return ast + } - /** + /** * Tries to parse the current file or the given text and returns the AST * If the parsing fails it returns the last successful AST for this file * @param text * @returns */ - async setCurrentFileAST(text: string | null = null) { - try { - this.plugin.currentFile = await this.plugin.call('fileManager', 'file') - if (this.plugin.currentFile && this.plugin.currentFile.endsWith('.sol')) { - const fileContent = text || await this.plugin.call('fileManager', 'readFile', this.plugin.currentFile) - if (!this.cache[this.plugin.currentFile]) { - this.cache[this.plugin.currentFile] = { - text: '', - ast: null, - parsingEnabled: true, - blockDurations: [] - } - } - if (this.cache[this.plugin.currentFile] && this.cache[this.plugin.currentFile].text !== fileContent) { - try { - await this.parseWithWorker(fileContent, this.plugin.currentFile) - } catch (e) { - // do nothing - } - } - } - } catch (e) { + async setCurrentFileAST(text: string | null = null) { + try { + this.plugin.currentFile = await this.plugin.call('fileManager', 'file') + if (this.plugin.currentFile && this.plugin.currentFile.endsWith('.sol')) { + const fileContent = text || await this.plugin.call('fileManager', 'readFile', this.plugin.currentFile) + if (!this.cache[this.plugin.currentFile]) { + this.cache[this.plugin.currentFile] = { + text: '', + ast: null, + parsingEnabled: true, + blockDurations: [] + } + } + if (this.cache[this.plugin.currentFile] && this.cache[this.plugin.currentFile].text !== fileContent) { + try { + await this.parseWithWorker(fileContent, this.plugin.currentFile) + } catch (e) { // do nothing + } } + } + } catch (e) { + // do nothing } + } - /** + /** * Lists the AST nodes from the current file parser * These nodes need to be changed to match the node types returned by the compiler * @returns */ - async listAstNodes() { - this.plugin.currentFile = await this.plugin.call('fileManager', 'file') - if (!this.cache[this.plugin.currentFile]) return - const nodes: AstNode[] = []; - (SolidityParser as any).visit(this.cache[this.plugin.currentFile].ast, { - StateVariableDeclaration: (node: antlr.StateVariableDeclaration) => { - if (node.variables) { - for (const variable of node.variables) { - nodes.push({ ...variable, nodeType: 'VariableDeclaration', id: null, src: null }) - } - } - }, - VariableDeclaration: (node: antlr.VariableDeclaration) => { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - UserDefinedTypeName: (node: antlr.UserDefinedTypeName) => { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - FunctionDefinition: (node: antlr.FunctionDefinition) => { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - ContractDefinition: (node: antlr.ContractDefinition) => { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - MemberAccess: function (node: antlr.MemberAccess) { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - Identifier: function (node: antlr.Identifier) { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - EventDefinition: function (node: antlr.EventDefinition) { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - ModifierDefinition: function (node: antlr.ModifierDefinition) { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - InvalidNode: function (node: antlr.InvalidNode) { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - EnumDefinition: function (node: antlr.EnumDefinition) { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - }, - StructDefinition: function (node: antlr.StructDefinition) { - nodes.push({ ...node, nodeType: node.type, id: null, src: null }) - } + async listAstNodes() { + this.plugin.currentFile = await this.plugin.call('fileManager', 'file') + if (!this.cache[this.plugin.currentFile]) return + const nodes: AstNode[] = []; + (SolidityParser as any).visit(this.cache[this.plugin.currentFile].ast, { + StateVariableDeclaration: (node: antlr.StateVariableDeclaration) => { + if (node.variables) { + for (const variable of node.variables) { + nodes.push({ ...variable, nodeType: 'VariableDeclaration', id: null, src: null }) + } + } + }, + VariableDeclaration: (node: antlr.VariableDeclaration) => { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + UserDefinedTypeName: (node: antlr.UserDefinedTypeName) => { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + FunctionDefinition: (node: antlr.FunctionDefinition) => { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + ContractDefinition: (node: antlr.ContractDefinition) => { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + MemberAccess: function (node: antlr.MemberAccess) { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + Identifier: function (node: antlr.Identifier) { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + EventDefinition: function (node: antlr.EventDefinition) { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + ModifierDefinition: function (node: antlr.ModifierDefinition) { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + InvalidNode: function (node: antlr.InvalidNode) { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + EnumDefinition: function (node: antlr.EnumDefinition) { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + }, + StructDefinition: function (node: antlr.StructDefinition) { + nodes.push({ ...node, nodeType: node.type, id: null, src: null }) + } - }) - return nodes - } + }) + return nodes + } - /** + /** * * @param ast * @returns */ - async getLastNodeInLine(ast: string) { - let lastNode: any - const checkLastNode = (node: antlr.MemberAccess | antlr.Identifier) => { - if (lastNode && lastNode.range && lastNode.range[1]) { - if (node.range[1] > lastNode.range[1]) { - lastNode = node - } - } else { - lastNode = node - } + async getLastNodeInLine(ast: string) { + let lastNode: any + const checkLastNode = (node: antlr.MemberAccess | antlr.Identifier) => { + if (lastNode && lastNode.range && lastNode.range[1]) { + if (node.range[1] > lastNode.range[1]) { + lastNode = node } + } else { + lastNode = node + } + } - (SolidityParser as any).visit(ast, { - MemberAccess: function (node: antlr.MemberAccess) { - checkLastNode(node) - }, - Identifier: function (node: antlr.Identifier) { - checkLastNode(node) - } - }) - if (lastNode && lastNode.expression) { - return lastNode.expression - } - return lastNode + (SolidityParser as any).visit(ast, { + MemberAccess: function (node: antlr.MemberAccess) { + checkLastNode(node) + }, + Identifier: function (node: antlr.Identifier) { + checkLastNode(node) + } + }) + if (lastNode && lastNode.expression) { + return lastNode.expression } - /* + return lastNode + } + /* * get the code blocks of the current file */ - async getCurrentFileBlocks(text: string | null = null) { - this.plugin.currentFile = await this.plugin.call('fileManager', 'file') - if (this.cache[this.plugin.currentFile]) { - if (!this.cache[this.plugin.currentFile].parsingEnabled) { - return - } - } - if (this.plugin.currentFile && this.plugin.currentFile.endsWith('.sol')) { - const fileContent = text || await this.plugin.call('fileManager', 'readFile', this.plugin.currentFile) - try { - const startTime = Date.now() - const blocks = (SolidityParser as any).parseBlock(fileContent, { loc: true, range: true, tolerant: true }) - if(this.cache[this.plugin.currentFile] && this.cache[this.plugin.currentFile].blockDurations){ - this.cache[this.plugin.currentFile].blockDurations = [...this.cache[this.plugin.currentFile].blockDurations.slice(-this.parserThresholdSampleAmount), Date.now() - startTime] - this.setFileParsingState(this.plugin.currentFile) - } - if (blocks) this.cache[this.plugin.currentFile].blocks = blocks - return blocks - } catch (e) { - // do nothing - } + async getCurrentFileBlocks(text: string | null = null) { + this.plugin.currentFile = await this.plugin.call('fileManager', 'file') + if (this.cache[this.plugin.currentFile]) { + if (!this.cache[this.plugin.currentFile].parsingEnabled) { + return + } + } + if (this.plugin.currentFile && this.plugin.currentFile.endsWith('.sol')) { + const fileContent = text || await this.plugin.call('fileManager', 'readFile', this.plugin.currentFile) + try { + const startTime = Date.now() + const blocks = (SolidityParser as any).parseBlock(fileContent, { loc: true, range: true, tolerant: true }) + if(this.cache[this.plugin.currentFile] && this.cache[this.plugin.currentFile].blockDurations){ + this.cache[this.plugin.currentFile].blockDurations = [...this.cache[this.plugin.currentFile].blockDurations.slice(-this.parserThresholdSampleAmount), Date.now() - startTime] + this.setFileParsingState(this.plugin.currentFile) } + if (blocks) this.cache[this.plugin.currentFile].blocks = blocks + return blocks + } catch (e) { + // do nothing + } } + } - /** + /** * Returns the block surrounding the given position * For example if the position is in the middle of a function, it will return the function * @param {position} position * @param {string} text // optional * @return {any} * */ - async getANTLRBlockAtPosition(position: any, text: string = null) { - const blocks: any[] = await this.getCurrentFileBlocks(text) + async getANTLRBlockAtPosition(position: any, text: string = null) { + const blocks: any[] = await this.getCurrentFileBlocks(text) - const walkAst = (blocks) => { - let nodeFound = null - for (const object of blocks) { - if (object.start <= position) { - nodeFound = object - break - } - } - return nodeFound + const walkAst = (blocks) => { + let nodeFound = null + for (const object of blocks) { + if (object.start <= position) { + nodeFound = object + break } - if (!blocks) return - blocks.reverse() - const block = walkAst(blocks) - return block + } + return nodeFound } + if (!blocks) return + blocks.reverse() + const block = walkAst(blocks) + return block + } } diff --git a/apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts b/apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts index 42c718db2a..b3a1a9c322 100644 --- a/apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts +++ b/apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts @@ -34,253 +34,253 @@ type errorMarker = { file: string } export default class CodeParserCompiler { + plugin: CodeParser + compiler: any // used to compile the current file seperately from the main compiler + onAstFinished: (success: any, data: CompilationResult, source: CompilationSourceCode, input: any, version: any) => Promise; + errorState: boolean; + gastEstimateTimeOut: any + constructor( plugin: CodeParser - compiler: any // used to compile the current file seperately from the main compiler - onAstFinished: (success: any, data: CompilationResult, source: CompilationSourceCode, input: any, version: any) => Promise; - errorState: boolean; - gastEstimateTimeOut: any - constructor( - plugin: CodeParser - ) { - this.plugin = plugin - } - - init() { + ) { + this.plugin = plugin + } - this.onAstFinished = async (success, data: CompilationResult, source: CompilationSourceCode, input: any, version) => { - this.plugin.call('editor', 'clearAnnotations') - this.errorState = true - const result = new CompilerAbstract('soljson', data, source, input) - let allErrors: errorMarker[] = [] - if (data.errors || data.error) { - const file = await this.plugin.call('fileManager', 'getCurrentFile') - const currentFileContent = await this.plugin.call('fileManager', 'readFile', file) - const sources = result.getSourceCode().sources || [] - if (data.error) { - if (data.error.formattedMessage) { - // mark this file as error - const errorMarker = await this.createErrorMarker(data.error, file, { start: { line: 0, column: 0 }, end: { line: 0, column: 100 } }) - allErrors = [...allErrors, errorMarker] - } - } else { - for (const error of data.errors) { - if (!error.sourceLocation) { - // mark this file as error - const errorMarker = await this.createErrorMarker(error, file, { start: { line: 0, column: 0 }, end: { line: 0, column: 100 } }) - allErrors = [...allErrors, errorMarker] - } else { - const lineBreaks = sourceMappingDecoder.getLinebreakPositions(sources[error.sourceLocation.file].content) - const lineColumn = sourceMappingDecoder.convertOffsetToLineColumn({ - start: error.sourceLocation.start, - length: error.sourceLocation.end - error.sourceLocation.start - }, lineBreaks) + init() { + this.onAstFinished = async (success, data: CompilationResult, source: CompilationSourceCode, input: any, version) => { + this.plugin.call('editor', 'clearAnnotations') + this.errorState = true + const result = new CompilerAbstract('soljson', data, source, input) + let allErrors: errorMarker[] = [] + if (data.errors || data.error) { + const file = await this.plugin.call('fileManager', 'getCurrentFile') + const currentFileContent = await this.plugin.call('fileManager', 'readFile', file) + const sources = result.getSourceCode().sources || [] + if (data.error) { + if (data.error.formattedMessage) { + // mark this file as error + const errorMarker = await this.createErrorMarker(data.error, file, { start: { line: 0, column: 0 }, end: { line: 0, column: 100 } }) + allErrors = [...allErrors, errorMarker] + } + } else { + for (const error of data.errors) { + if (!error.sourceLocation) { + // mark this file as error + const errorMarker = await this.createErrorMarker(error, file, { start: { line: 0, column: 0 }, end: { line: 0, column: 100 } }) + allErrors = [...allErrors, errorMarker] + } else { + const lineBreaks = sourceMappingDecoder.getLinebreakPositions(sources[error.sourceLocation.file].content) + const lineColumn = sourceMappingDecoder.convertOffsetToLineColumn({ + start: error.sourceLocation.start, + length: error.sourceLocation.end - error.sourceLocation.start + }, lineBreaks) - const filePath = error.sourceLocation.file - const fileTarget = await this.plugin.call('fileManager', 'getUrlFromPath', filePath) - const importFilePositions = await this.getPositionForImportErrors(fileTarget.file, currentFileContent) - for (const importFilePosition of importFilePositions) { - for (const line of importFilePosition.lines) { - allErrors = [...allErrors, await this.createErrorMarker(error, file, line.position)] - } - } + const filePath = error.sourceLocation.file + const fileTarget = await this.plugin.call('fileManager', 'getUrlFromPath', filePath) - allErrors = [...allErrors, await this.createErrorMarker(error, filePath, lineColumn)] - } - } + const importFilePositions = await this.getPositionForImportErrors(fileTarget.file, currentFileContent) + for (const importFilePosition of importFilePositions) { + for (const line of importFilePosition.lines) { + allErrors = [...allErrors, await this.createErrorMarker(error, file, line.position)] } + } - const displayErrors = await this.plugin.call('config', 'getAppParameter', 'display-errors') - if (displayErrors) await this.plugin.call('editor', 'addErrorMarker', allErrors) - this.addDecorators(allErrors, sources) - } else { - await this.plugin.call('editor', 'clearErrorMarkers', result.getSourceCode().sources) - await this.clearDecorators(result.getSourceCode().sources) + allErrors = [...allErrors, await this.createErrorMarker(error, filePath, lineColumn)] } + } + } + const displayErrors = await this.plugin.call('config', 'getAppParameter', 'display-errors') + if (displayErrors) await this.plugin.call('editor', 'addErrorMarker', allErrors) + this.addDecorators(allErrors, sources) + } else { + await this.plugin.call('editor', 'clearErrorMarkers', result.getSourceCode().sources) + await this.clearDecorators(result.getSourceCode().sources) + } - if (!data.sources) return - if (data.sources && Object.keys(data.sources).length === 0) return - this.plugin.compilerAbstract = new CompilerAbstract('soljson', data, source, input) - this.errorState = false - this.plugin.nodeIndex = { - declarations: {}, - flatReferences: {}, - nodesPerFile: {}, - } + if (!data.sources) return + if (data.sources && Object.keys(data.sources).length === 0) return + this.plugin.compilerAbstract = new CompilerAbstract('soljson', data, source, input) + this.errorState = false + this.plugin.nodeIndex = { + declarations: {}, + flatReferences: {}, + nodesPerFile: {}, + } - this.plugin._buildIndex(data, source) - // cast from the remix-plugin interface to the solidity one. Should be fixed when remix-plugin move to the remix-project repository - this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult) - await this.plugin.gasService.showGasEstimates() - this.plugin.emit('astFinished') - } - - this.compiler = new Compiler((url, cb) => this.plugin.call('contentImport', 'resolveAndSave', url, undefined).then((result) => cb(null, result)).catch((error) => cb(error.message))) - this.compiler.event.register('compilationFinished', this.onAstFinished) + + this.plugin._buildIndex(data, source) + // cast from the remix-plugin interface to the solidity one. Should be fixed when remix-plugin move to the remix-project repository + this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult) + await this.plugin.gasService.showGasEstimates() + this.plugin.emit('astFinished') } + + this.compiler = new Compiler((url, cb) => this.plugin.call('contentImport', 'resolveAndSave', url, undefined).then((result) => cb(null, result)).catch((error) => cb(error.message))) + this.compiler.event.register('compilationFinished', this.onAstFinished) + } - // COMPILER + // COMPILER - /** + /** * * @returns */ - async compile() { - try { - this.plugin.currentFile = await this.plugin.call('fileManager', 'file') - if (this.plugin.currentFile && this.plugin.currentFile.endsWith('.sol')) { - const state = await this.plugin.call('solidity', 'getCompilerState') - this.compiler.set('optimize', state.optimize) - this.compiler.set('evmVersion', state.evmVersion) - this.compiler.set('language', state.language) - this.compiler.set('runs', state.runs) - this.compiler.set('useFileConfiguration', true) - this.compiler.set('compilerRetriggerMode', CompilerRetriggerMode.retrigger) - const configFileContent = { - "language": "Solidity", - "settings": { - "optimizer": { - "enabled": state.optimize, - "runs": state.runs - }, - "outputSelection": { - "*": { - "": ["ast"], - "*": ["evm.gasEstimates"] - } - }, - "evmVersion": state.evmVersion && state.evmVersion.toString() || "berlin", - } - } - - this.compiler.set('configFileContent', JSON.stringify(configFileContent)) - this.plugin.currentFile = await this.plugin.call('fileManager', 'file') - if (!this.plugin.currentFile) return - const content = await this.plugin.call('fileManager', 'readFile', this.plugin.currentFile) - const sources = { [this.plugin.currentFile]: { content } } - this.compiler.compile(sources, this.plugin.currentFile) - } - } catch (e) { - // do nothing + async compile() { + try { + this.plugin.currentFile = await this.plugin.call('fileManager', 'file') + if (this.plugin.currentFile && this.plugin.currentFile.endsWith('.sol')) { + const state = await this.plugin.call('solidity', 'getCompilerState') + this.compiler.set('optimize', state.optimize) + this.compiler.set('evmVersion', state.evmVersion) + this.compiler.set('language', state.language) + this.compiler.set('runs', state.runs) + this.compiler.set('useFileConfiguration', true) + this.compiler.set('compilerRetriggerMode', CompilerRetriggerMode.retrigger) + const configFileContent = { + "language": "Solidity", + "settings": { + "optimizer": { + "enabled": state.optimize, + "runs": state.runs + }, + "outputSelection": { + "*": { + "": ["ast"], + "*": ["evm.gasEstimates"] + } + }, + "evmVersion": state.evmVersion && state.evmVersion.toString() || "berlin", + } } - } - async addDecorators(allErrors: errorMarker[], sources: any) { - const displayErrors = await this.plugin.call('config', 'getAppParameter', 'display-errors') - if (!displayErrors) return - const errorsPerFiles: { [fileName: string]: errorMarker[] } = {} - for (const error of allErrors) { - if (!errorsPerFiles[error.file]) { - errorsPerFiles[error.file] = [] - } - errorsPerFiles[error.file].push(error) - } + this.compiler.set('configFileContent', JSON.stringify(configFileContent)) + this.plugin.currentFile = await this.plugin.call('fileManager', 'file') + if (!this.plugin.currentFile) return + const content = await this.plugin.call('fileManager', 'readFile', this.plugin.currentFile) + const sources = { [this.plugin.currentFile]: { content } } + this.compiler.compile(sources, this.plugin.currentFile) + } + } catch (e) { + // do nothing + } + } - const errorPriority = { - 'error': 0, - 'warning': 1, - } + async addDecorators(allErrors: errorMarker[], sources: any) { + const displayErrors = await this.plugin.call('config', 'getAppParameter', 'display-errors') + if (!displayErrors) return + const errorsPerFiles: { [fileName: string]: errorMarker[] } = {} + for (const error of allErrors) { + if (!errorsPerFiles[error.file]) { + errorsPerFiles[error.file] = [] + } + errorsPerFiles[error.file].push(error) + } - // sort errorPerFiles by error priority - const sortedErrorsPerFiles: { [fileName: string]: errorMarker[] } = {} - for (const fileName in errorsPerFiles) { - const errors = errorsPerFiles[fileName] - errors.sort((a, b) => { - return errorPriority[a.severity] - errorPriority[b.severity] - } - ) - sortedErrorsPerFiles[fileName] = errors - } - const filesWithOutErrors = Object.keys(sources).filter((fileName) => !sortedErrorsPerFiles[fileName]) - // add decorators - const decorators: fileDecoration[] = [] - for (const fileName in sortedErrorsPerFiles) { - const errors = sortedErrorsPerFiles[fileName] - const fileTarget = await this.plugin.call('fileManager', 'getPathFromUrl', fileName) - const decorator: fileDecoration = { - path: fileTarget.file, - isDirectory: false, - fileStateType: errors[0].severity == MarkerSeverity.Error ? fileDecorationType.Error : fileDecorationType.Warning, - fileStateLabelClass: errors[0].severity == MarkerSeverity.Error ? 'text-danger' : 'text-warning', - fileStateIconClass: '', - fileStateIcon: '', - text: errors.length.toString(), - owner: 'code-parser', - bubble: true, - comment: errors.map((error) => error.message), - } - decorators.push(decorator) - } - for (const fileName of filesWithOutErrors) { - const fileTarget = await this.plugin.call('fileManager', 'getPathFromUrl', fileName) - const decorator: fileDecoration = { - path: fileTarget.file, - isDirectory: false, - fileStateType: fileDecorationType.None, - fileStateLabelClass: '', - fileStateIconClass: '', - fileStateIcon: '', - text: '', - owner: 'code-parser', - bubble: false - } - decorators.push(decorator) - } - await this.plugin.call('fileDecorator', 'setFileDecorators', decorators) - await this.plugin.call('editor', 'clearErrorMarkers', filesWithOutErrors) + const errorPriority = { + 'error': 0, + 'warning': 1, + } + // sort errorPerFiles by error priority + const sortedErrorsPerFiles: { [fileName: string]: errorMarker[] } = {} + for (const fileName in errorsPerFiles) { + const errors = errorsPerFiles[fileName] + errors.sort((a, b) => { + return errorPriority[a.severity] - errorPriority[b.severity] + } + ) + sortedErrorsPerFiles[fileName] = errors + } + const filesWithOutErrors = Object.keys(sources).filter((fileName) => !sortedErrorsPerFiles[fileName]) + // add decorators + const decorators: fileDecoration[] = [] + for (const fileName in sortedErrorsPerFiles) { + const errors = sortedErrorsPerFiles[fileName] + const fileTarget = await this.plugin.call('fileManager', 'getPathFromUrl', fileName) + const decorator: fileDecoration = { + path: fileTarget.file, + isDirectory: false, + fileStateType: errors[0].severity == MarkerSeverity.Error ? fileDecorationType.Error : fileDecorationType.Warning, + fileStateLabelClass: errors[0].severity == MarkerSeverity.Error ? 'text-danger' : 'text-warning', + fileStateIconClass: '', + fileStateIcon: '', + text: errors.length.toString(), + owner: 'code-parser', + bubble: true, + comment: errors.map((error) => error.message), + } + decorators.push(decorator) } + for (const fileName of filesWithOutErrors) { + const fileTarget = await this.plugin.call('fileManager', 'getPathFromUrl', fileName) + const decorator: fileDecoration = { + path: fileTarget.file, + isDirectory: false, + fileStateType: fileDecorationType.None, + fileStateLabelClass: '', + fileStateIconClass: '', + fileStateIcon: '', + text: '', + owner: 'code-parser', + bubble: false + } + decorators.push(decorator) + } + await this.plugin.call('fileDecorator', 'setFileDecorators', decorators) + await this.plugin.call('editor', 'clearErrorMarkers', filesWithOutErrors) - async createErrorMarker(error: any, filePath: string, lineColumn): Promise { - return { - message: error.formattedMessage, - severity: error.severity === 'error' ? MarkerSeverity.Error : MarkerSeverity.Warning, - position: { - start: { - line: ((lineColumn.start && lineColumn.start.line) || 0) + 1, - column: ((lineColumn.start && lineColumn.start.column) || 0) + 1 - }, - end: { - line: ((lineColumn.end && lineColumn.end.line) || 0) + 1, - column: ((lineColumn.end && lineColumn.end.column) || 0) + 1 - } - } - , file: filePath + } + + async createErrorMarker(error: any, filePath: string, lineColumn): Promise { + return { + message: error.formattedMessage, + severity: error.severity === 'error' ? MarkerSeverity.Error : MarkerSeverity.Warning, + position: { + start: { + line: ((lineColumn.start && lineColumn.start.line) || 0) + 1, + column: ((lineColumn.start && lineColumn.start.column) || 0) + 1 + }, + end: { + line: ((lineColumn.end && lineColumn.end.line) || 0) + 1, + column: ((lineColumn.end && lineColumn.end.column) || 0) + 1 } + } + , file: filePath } + } - async clearDecorators(sources: any) { - const decorators: fileDecoration[] = [] - if (!sources) return - for (const fileName of Object.keys(sources)) { - const decorator: fileDecoration = { - path: fileName, - isDirectory: false, - fileStateType: fileDecorationType.None, - fileStateLabelClass: '', - fileStateIconClass: '', - fileStateIcon: '', - text: '', - owner: 'code-parser', - bubble: false - } - decorators.push(decorator) - } + async clearDecorators(sources: any) { + const decorators: fileDecoration[] = [] + if (!sources) return + for (const fileName of Object.keys(sources)) { + const decorator: fileDecoration = { + path: fileName, + isDirectory: false, + fileStateType: fileDecorationType.None, + fileStateLabelClass: '', + fileStateIconClass: '', + fileStateIcon: '', + text: '', + owner: 'code-parser', + bubble: false + } + decorators.push(decorator) + } - await this.plugin.call('fileDecorator', 'setFileDecorators', decorators) - } + await this.plugin.call('fileDecorator', 'setFileDecorators', decorators) + } - async getPositionForImportErrors(importedFileName: string, text: string) { - const re = new RegExp(importedFileName, 'gi') - const result: SearchResultLine[] = findLinesInStringWithMatch( - text, - re - ) - return result - } + async getPositionForImportErrors(importedFileName: string, text: string) { + const re = new RegExp(importedFileName, 'gi') + const result: SearchResultLine[] = findLinesInStringWithMatch( + text, + re + ) + return result + } } \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/parser/services/code-parser-gas-service.ts b/apps/remix-ide/src/app/plugins/parser/services/code-parser-gas-service.ts index 879d00f06d..274466fe9c 100644 --- a/apps/remix-ide/src/app/plugins/parser/services/code-parser-gas-service.ts +++ b/apps/remix-ide/src/app/plugins/parser/services/code-parser-gas-service.ts @@ -3,76 +3,76 @@ import { lineText } from '@remix-ui/editor' import { lastCompilationResult } from '@remixproject/plugin-api'; export default class CodeParserGasService { - plugin: CodeParser + plugin: CodeParser - constructor(plugin: CodeParser) { - this.plugin = plugin - } + constructor(plugin: CodeParser) { + this.plugin = plugin + } - async getGasEstimates(fileName: string) { - if (!fileName) { - fileName = await this.plugin.currentFile - } - if (this.plugin.nodeIndex.nodesPerFile && this.plugin.nodeIndex.nodesPerFile[fileName] && this.plugin.nodeIndex.nodesPerFile[fileName].contracts) { - const estimates: any = [] - for (const contract in this.plugin.nodeIndex.nodesPerFile[fileName].contracts) { - if (this.plugin.nodeIndex.nodesPerFile[fileName].contracts[contract].contractNodes) { - const nodes = this.plugin.nodeIndex.nodesPerFile[fileName].contracts[contract].contractNodes - for (const node of Object.values(nodes) as any[]) { - if (node.gasEstimate) { - estimates.push({ - node, - range: await this.plugin.getLineColumnOfNode(node) - }) - } - } - } + async getGasEstimates(fileName: string) { + if (!fileName) { + fileName = await this.plugin.currentFile + } + if (this.plugin.nodeIndex.nodesPerFile && this.plugin.nodeIndex.nodesPerFile[fileName] && this.plugin.nodeIndex.nodesPerFile[fileName].contracts) { + const estimates: any = [] + for (const contract in this.plugin.nodeIndex.nodesPerFile[fileName].contracts) { + if (this.plugin.nodeIndex.nodesPerFile[fileName].contracts[contract].contractNodes) { + const nodes = this.plugin.nodeIndex.nodesPerFile[fileName].contracts[contract].contractNodes + for (const node of Object.values(nodes) as any[]) { + if (node.gasEstimate) { + estimates.push({ + node, + range: await this.plugin.getLineColumnOfNode(node) + }) } - return estimates + } } - + } + return estimates } + } - async showGasEstimates() { - const showGasConfig = await this.plugin.call('config', 'getAppParameter', 'show-gas') - if(!showGasConfig) { - await this.plugin.call('editor', 'discardLineTexts') - return - } - this.plugin.currentFile = await this.plugin.call('fileManager', 'file') - // cast from the remix-plugin interface to the solidity one. Should be fixed when remix-plugin move to the remix-project repository - this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = await this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult) - const gasEstimates = await this.getGasEstimates(this.plugin.currentFile) + async showGasEstimates() { + const showGasConfig = await this.plugin.call('config', 'getAppParameter', 'show-gas') + if(!showGasConfig) { + await this.plugin.call('editor', 'discardLineTexts') + return + } + this.plugin.currentFile = await this.plugin.call('fileManager', 'file') + // cast from the remix-plugin interface to the solidity one. Should be fixed when remix-plugin move to the remix-project repository + this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = await this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult) + + const gasEstimates = await this.getGasEstimates(this.plugin.currentFile) - const friendlyNames = { - 'executionCost': 'Estimated execution cost', - 'codeDepositCost': 'Estimated code deposit cost', - 'creationCost': 'Estimated creation cost', + const friendlyNames = { + 'executionCost': 'Estimated execution cost', + 'codeDepositCost': 'Estimated code deposit cost', + 'creationCost': 'Estimated creation cost', + } + await this.plugin.call('editor', 'discardLineTexts') + if (gasEstimates) { + for (const estimate of gasEstimates) { + const linetext: lineText = { + content: Object.entries(estimate.node.gasEstimate).map(([, value]) => `${value} gas`).join(' '), + position: estimate.range, + hide: false, + className: 'text-muted small', + afterContentClassName: 'text-muted small fas fa-gas-pump pl-4', + from: 'codeParser', + hoverMessage: [{ + value: `${Object.entries(estimate.node.gasEstimate).map(([key, value]) => `${friendlyNames[key]}: ${value} gas`).join(' ')}`, + }, + ], } - await this.plugin.call('editor', 'discardLineTexts') - if (gasEstimates) { - for (const estimate of gasEstimates) { - const linetext: lineText = { - content: Object.entries(estimate.node.gasEstimate).map(([, value]) => `${value} gas`).join(' '), - position: estimate.range, - hide: false, - className: 'text-muted small', - afterContentClassName: 'text-muted small fas fa-gas-pump pl-4', - from: 'codeParser', - hoverMessage: [{ - value: `${Object.entries(estimate.node.gasEstimate).map(([key, value]) => `${friendlyNames[key]}: ${value} gas`).join(' ')}`, - }, - ], - } - this.plugin.call('editor', 'addLineText', linetext, estimate.range.fileName) + this.plugin.call('editor', 'addLineText', linetext, estimate.range.fileName) - } - } + } } + } } \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts b/apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts index bdc0837b45..73b162d95b 100644 --- a/apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts +++ b/apps/remix-ide/src/app/plugins/parser/services/code-parser-imports.ts @@ -8,81 +8,81 @@ export type CodeParserImportsData= { } export default class CodeParserImports { - plugin: CodeParser + plugin: CodeParser - data: CodeParserImportsData = {} - constructor(plugin: CodeParser) { - this.plugin = plugin - this.init() - } + data: CodeParserImportsData = {} + constructor(plugin: CodeParser) { + this.plugin = plugin + this.init() + } - async getImports(){ - return this.data - } + async getImports(){ + return this.data + } - async init() { - // @ts-ignore - const txt = await import('raw-loader!libs/remix-ui/editor/src/lib/providers/completion/contracts/contracts.txt') - this.data.modules = txt.default.split('\n') - .filter(x => x !== '') - .map(x => x.replace('./node_modules/', '')) - .filter(x => { - if(x.includes('@openzeppelin')) { - return !x.includes('mock') - }else{ - return true - } - }) + async init() { + // @ts-ignore + const txt = await import('raw-loader!libs/remix-ui/editor/src/lib/providers/completion/contracts/contracts.txt') + this.data.modules = txt.default.split('\n') + .filter(x => x !== '') + .map(x => x.replace('./node_modules/', '')) + .filter(x => { + if(x.includes('@openzeppelin')) { + return !x.includes('mock') + }else{ + return true + } + }) - // get unique first words of the values in the array - this.data.packages = [...new Set(this.data.modules.map(x => x.split('/')[0]))] - } + // get unique first words of the values in the array + this.data.packages = [...new Set(this.data.modules.map(x => x.split('/')[0]))] + } - setFileTree = async () => { - this.data.files = await this.getDirectory('/') - this.data.files = this.data.files.filter(x => x.endsWith('.sol') && !x.startsWith('.deps') && !x.startsWith('.git')) - } + setFileTree = async () => { + this.data.files = await this.getDirectory('/') + this.data.files = this.data.files.filter(x => x.endsWith('.sol') && !x.startsWith('.deps') && !x.startsWith('.git')) + } - getDirectory = async (dir: string) => { - let result = [] - let files = {} - try { - if (await this.plugin.call('fileManager', 'exists', dir)) { - files = await this.plugin.call('fileManager', 'readdir', dir) - } - } catch (e) {} + getDirectory = async (dir: string) => { + let result = [] + let files = {} + try { + if (await this.plugin.call('fileManager', 'exists', dir)) { + files = await this.plugin.call('fileManager', 'readdir', dir) + } + } catch (e) {} - const fileArray = this.normalize(files) - for (const fi of fileArray) { - if (fi) { - const type = fi.data.isDirectory - if (type === true) { - result = [...result, ...(await this.getDirectory(`${fi.filename}`))] - } else { - result = [...result, fi.filename] - } - } + const fileArray = this.normalize(files) + for (const fi of fileArray) { + if (fi) { + const type = fi.data.isDirectory + if (type === true) { + result = [...result, ...(await this.getDirectory(`${fi.filename}`))] + } else { + result = [...result, fi.filename] } - return result + } } + return result + } - 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] - }) - } + normalize = filesList => { + const folders = [] + const files = [] + Object.keys(filesList || {}).forEach(key => { + if (filesList[key].isDirectory) { + folders.push({ + filename: key, + data: filesList[key] }) - return [...folders, ...files] - } + } else { + files.push({ + filename: key, + data: filesList[key] + }) + } + }) + return [...folders, ...files] + } } \ No newline at end of file diff --git a/apps/remix-ide/src/app/plugins/parser/types/antlr-types.ts b/apps/remix-ide/src/app/plugins/parser/types/antlr-types.ts index ebe8a8ea7d..3e2675c43a 100644 --- a/apps/remix-ide/src/app/plugins/parser/types/antlr-types.ts +++ b/apps/remix-ide/src/app/plugins/parser/types/antlr-types.ts @@ -596,132 +596,132 @@ type ASTTypeMap = ASTMap export const astNodeTypes = [ - 'SourceUnit', - 'PragmaDirective', - 'ImportDirective', - 'ContractDefinition', - 'InheritanceSpecifier', - 'StateVariableDeclaration', - 'UsingForDeclaration', - 'StructDefinition', - 'ModifierDefinition', - 'ModifierInvocation', - 'FunctionDefinition', - 'EventDefinition', - 'CustomErrorDefinition', - 'RevertStatement', - 'EnumValue', - 'EnumDefinition', - 'VariableDeclaration', - 'UserDefinedTypeName', - 'Mapping', - 'ArrayTypeName', - 'FunctionTypeName', - 'Block', - 'ExpressionStatement', - 'IfStatement', - 'WhileStatement', - 'ForStatement', - 'InlineAssemblyStatement', - 'DoWhileStatement', - 'ContinueStatement', - 'Break', - 'Continue', - 'BreakStatement', - 'ReturnStatement', - 'EmitStatement', - 'ThrowStatement', - 'VariableDeclarationStatement', - 'ElementaryTypeName', - 'FunctionCall', - 'AssemblyBlock', - 'AssemblyCall', - 'AssemblyLocalDefinition', - 'AssemblyAssignment', - 'AssemblyStackAssignment', - 'LabelDefinition', - 'AssemblySwitch', - 'AssemblyCase', - 'AssemblyFunctionDefinition', - 'AssemblyFunctionReturns', - 'AssemblyFor', - 'AssemblyIf', - 'SubAssembly', - 'TupleExpression', - 'NameValueExpression', - 'BooleanLiteral', - 'NumberLiteral', - 'Identifier', - 'BinaryOperation', - 'UnaryOperation', - 'NewExpression', - 'Conditional', - 'StringLiteral', - 'HexLiteral', - 'HexNumber', - 'DecimalNumber', - 'MemberAccess', - 'IndexAccess', - 'IndexRangeAccess', - 'NameValueList', - 'UncheckedStatement', - 'TryStatement', - 'CatchClause', - 'FileLevelConstant', - 'AssemblyMemberAccess', - 'TypeDefinition', - 'InvalidNode' + 'SourceUnit', + 'PragmaDirective', + 'ImportDirective', + 'ContractDefinition', + 'InheritanceSpecifier', + 'StateVariableDeclaration', + 'UsingForDeclaration', + 'StructDefinition', + 'ModifierDefinition', + 'ModifierInvocation', + 'FunctionDefinition', + 'EventDefinition', + 'CustomErrorDefinition', + 'RevertStatement', + 'EnumValue', + 'EnumDefinition', + 'VariableDeclaration', + 'UserDefinedTypeName', + 'Mapping', + 'ArrayTypeName', + 'FunctionTypeName', + 'Block', + 'ExpressionStatement', + 'IfStatement', + 'WhileStatement', + 'ForStatement', + 'InlineAssemblyStatement', + 'DoWhileStatement', + 'ContinueStatement', + 'Break', + 'Continue', + 'BreakStatement', + 'ReturnStatement', + 'EmitStatement', + 'ThrowStatement', + 'VariableDeclarationStatement', + 'ElementaryTypeName', + 'FunctionCall', + 'AssemblyBlock', + 'AssemblyCall', + 'AssemblyLocalDefinition', + 'AssemblyAssignment', + 'AssemblyStackAssignment', + 'LabelDefinition', + 'AssemblySwitch', + 'AssemblyCase', + 'AssemblyFunctionDefinition', + 'AssemblyFunctionReturns', + 'AssemblyFor', + 'AssemblyIf', + 'SubAssembly', + 'TupleExpression', + 'NameValueExpression', + 'BooleanLiteral', + 'NumberLiteral', + 'Identifier', + 'BinaryOperation', + 'UnaryOperation', + 'NewExpression', + 'Conditional', + 'StringLiteral', + 'HexLiteral', + 'HexNumber', + 'DecimalNumber', + 'MemberAccess', + 'IndexAccess', + 'IndexRangeAccess', + 'NameValueList', + 'UncheckedStatement', + 'TryStatement', + 'CatchClause', + 'FileLevelConstant', + 'AssemblyMemberAccess', + 'TypeDefinition', + 'InvalidNode' ] as const export const binaryOpValues = [ - '+', - '-', - '*', - '/', - '**', - '%', - '<<', - '>>', - '&&', - '||', - ',,', - '&', - ',', - '^', - '<', - '>', - '<=', - '>=', - '==', - '!=', - '=', - ',=', - '^=', - '&=', - '<<=', - '>>=', - '+=', - '-=', - '*=', - '/=', - '%=', - '|', - '|=', + '+', + '-', + '*', + '/', + '**', + '%', + '<<', + '>>', + '&&', + '||', + ',,', + '&', + ',', + '^', + '<', + '>', + '<=', + '>=', + '==', + '!=', + '=', + ',=', + '^=', + '&=', + '<<=', + '>>=', + '+=', + '-=', + '*=', + '/=', + '%=', + '|', + '|=', ] as const export type BinOp = typeof binaryOpValues[number] export const unaryOpValues = [ - '-', - '+', - '++', - '--', - '~', - 'after', - 'delete', - '!', + '-', + '+', + '++', + '--', + '~', + 'after', + 'delete', + '!', ] as const export type UnaryOp = typeof unaryOpValues[number] diff --git a/apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx b/apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx index f4dbf5d095..c89b087eed 100644 --- a/apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx +++ b/apps/remix-ide/src/app/plugins/permission-handler-plugin.tsx @@ -49,12 +49,12 @@ export class PermissionHandlerPlugin extends Plugin { switchMode (from: Profile, to: Profile, method: string, set: boolean, sensitiveCall: boolean) { if (sensitiveCall) { set - ? this.sessionPermissions[to.name][method][from.name] = {} - : delete this.sessionPermissions[to.name][method][from.name] + ? this.sessionPermissions[to.name][method][from.name] = {} + : delete this.sessionPermissions[to.name][method][from.name] } else { set - ? this.permissions[to.name][method][from.name] = {} - : delete this.permissions[to.name][method][from.name] + ? this.permissions[to.name][method][from.name] = {} + : delete this.permissions[to.name][method][from.name] } } diff --git a/apps/remix-ide/src/app/plugins/solidity-script.tsx b/apps/remix-ide/src/app/plugins/solidity-script.tsx index bf0be9ad53..88c3b1e962 100644 --- a/apps/remix-ide/src/app/plugins/solidity-script.tsx +++ b/apps/remix-ide/src/app/plugins/solidity-script.tsx @@ -84,20 +84,20 @@ export class SolidityScript extends Plugin { if (hhlogs && hhlogs.length) { const finalLogs =
console.log:
- { - hhlogs.map((log) => { - let formattedLog - // Hardhat implements the same formatting options that can be found in Node.js' console.log, - // which in turn uses util.format: https://nodejs.org/dist/latest-v12.x/docs/api/util.html#util_util_format_format_args - // For example: console.log("Name: %s, Age: %d", remix, 6) will log 'Name: remix, Age: 6' - // We check first arg to determine if 'util.format' is needed - if (typeof log[0] === 'string' && (log[0].includes('%s') || log[0].includes('%d'))) { - formattedLog = format(log[0], ...log.slice(1)) - } else { - formattedLog = log.join(' ') - } - return
{formattedLog}
- })} + { + hhlogs.map((log) => { + let formattedLog + // Hardhat implements the same formatting options that can be found in Node.js' console.log, + // which in turn uses util.format: https://nodejs.org/dist/latest-v12.x/docs/api/util.html#util_util_format_format_args + // For example: console.log("Name: %s, Age: %d", remix, 6) will log 'Name: remix, Age: 6' + // We check first arg to determine if 'util.format' is needed + if (typeof log[0] === 'string' && (log[0].includes('%s') || log[0].includes('%d'))) { + formattedLog = format(log[0], ...log.slice(1)) + } else { + formattedLog = log.join(' ') + } + return
{formattedLog}
+ })}
_paq.push(['trackEvent', 'udapp', 'hardhat', 'console.log']) this.call('terminal', 'logHtml', finalLogs) diff --git a/apps/remix-ide/src/app/plugins/solidity-umlgen.tsx b/apps/remix-ide/src/app/plugins/solidity-umlgen.tsx index 5abacd0409..66e4ecbc87 100644 --- a/apps/remix-ide/src/app/plugins/solidity-umlgen.tsx +++ b/apps/remix-ide/src/app/plugins/solidity-umlgen.tsx @@ -16,39 +16,39 @@ const parser = (window as any).SolidityParser const _paq = window._paq = window._paq || [] const profile = { - name: 'solidityumlgen', - displayName: 'Solidity UML Generator', - description: 'Generates UML diagram in svg format from last compiled contract', - location: 'mainPanel', - methods: ['showUmlDiagram', 'generateUml', 'generateCustomAction'], - events: [], + name: 'solidityumlgen', + displayName: 'Solidity UML Generator', + description: 'Generates UML diagram in svg format from last compiled contract', + location: 'mainPanel', + methods: ['showUmlDiagram', 'generateUml', 'generateCustomAction'], + events: [], } const themeCollection = [ { themeName: 'HackerOwl', backgroundColor: '#011628', textColor: '#babbcc', - shapeColor: '#8694a1',fillColor: '#011C32'}, + shapeColor: '#8694a1',fillColor: '#011C32'}, { themeName: 'Cerulean', backgroundColor: '#ffffff', textColor: '#343a40', - shapeColor: '#343a40',fillColor: '#f8f9fa'}, + shapeColor: '#343a40',fillColor: '#f8f9fa'}, { themeName: 'Cyborg', backgroundColor: '#060606', textColor: '#adafae', - shapeColor: '#adafae', fillColor: '#222222'}, + shapeColor: '#adafae', fillColor: '#222222'}, { themeName: 'Dark', backgroundColor: '#222336', textColor: '#babbcc', - shapeColor: '#babbcc',fillColor: '#2a2c3f'}, + shapeColor: '#babbcc',fillColor: '#2a2c3f'}, { themeName: 'Flatly', backgroundColor: '#ffffff', textColor: '#343a40', - shapeColor: '#7b8a8b',fillColor: '#ffffff'}, + shapeColor: '#7b8a8b',fillColor: '#ffffff'}, { themeName: 'Black', backgroundColor: '#1a1a1a', textColor: '#babbcc', - shapeColor: '#b5b4bc',fillColor: '#1f2020'}, + shapeColor: '#b5b4bc',fillColor: '#1f2020'}, { themeName: 'Light', backgroundColor: '#eef1f6', textColor: '#3b445e', - shapeColor: '#343a40',fillColor: '#ffffff'}, + shapeColor: '#343a40',fillColor: '#ffffff'}, { themeName: 'Midcentury', backgroundColor: '#DBE2E0', textColor: '#11556c', - shapeColor: '#343a40',fillColor: '#eeede9'}, + shapeColor: '#343a40',fillColor: '#eeede9'}, { themeName: 'Spacelab', backgroundColor: '#ffffff', textColor: '#343a40', - shapeColor: '#333333', fillColor: '#eeeeee'}, + shapeColor: '#333333', fillColor: '#eeeeee'}, { themeName: 'Candy', backgroundColor: '#d5efff', textColor: '#11556c', - shapeColor: '#343a40',fillColor: '#fbe7f8' }, + shapeColor: '#343a40',fillColor: '#fbe7f8' }, { themeName: 'Violet', backgroundColor: '#f1eef6', textColor: '#3b445e', - shapeColor: '#343a40',fillColor: '#f8fafe' }, + shapeColor: '#343a40',fillColor: '#f8fafe' }, { themeName: 'Unicorn', backgroundColor: '#f1eef6', textColor: '#343a40', - shapeColor: '#343a40',fillColor: '#f8fafe' }, + shapeColor: '#343a40',fillColor: '#f8fafe' }, ] /** @@ -121,7 +121,7 @@ export class SolidityUmlGen extends ViewPlugin implements ISolidityUmlGen { getThemeCssVariables(cssVars: string) { return window.getComputedStyle(document.documentElement) - .getPropertyValue(cssVars) + .getPropertyValue(cssVars) } private handleThemeChange() { @@ -246,10 +246,10 @@ interface Sol2umlClassOptions extends ClassOptions { import { dirname } from 'path' import { convertClass2Dot } from 'sol2uml/lib/converterClass2Dot' import { - Association, - ClassStereotype, - ReferenceType, - UmlClass, + Association, + ClassStereotype, + ReferenceType, + UmlClass, } from 'sol2uml/lib/umlClass' import { findAssociatedClass } from 'sol2uml/lib/associations' @@ -264,11 +264,11 @@ import { findAssociatedClass } from 'sol2uml/lib/associations' * @return dotString Graphviz's DOT format for defining nodes, edges and clusters. */ export function convertUmlClasses2Dot( - umlClasses: UmlClass[], - clusterFolders: boolean = false, - classOptions: Sol2umlClassOptions = {} + umlClasses: UmlClass[], + clusterFolders: boolean = false, + classOptions: Sol2umlClassOptions = {} ): string { - let dotString: string = ` + let dotString: string = ` digraph UmlClassDiagram { rankdir=BT arrowhead=open @@ -276,124 +276,124 @@ bgcolor="${classOptions.backColor}" edge [color="${classOptions.shapeColor}"] node [shape=record, style=filled, color="${classOptions.shapeColor}", fillcolor="${classOptions.fillColor}", fontcolor="${classOptions.textColor}"]` - // Sort UML Classes by folder of source file - const umlClassesSortedByCodePath = sortUmlClassesByCodePath(umlClasses) + // Sort UML Classes by folder of source file + const umlClassesSortedByCodePath = sortUmlClassesByCodePath(umlClasses) - let currentCodeFolder = '' - for (const umlClass of umlClassesSortedByCodePath) { - const codeFolder = dirname(umlClass.relativePath) - if (currentCodeFolder !== codeFolder) { - // Need to close off the last subgraph if not the first - if (currentCodeFolder != '') { - dotString += '\n}' - } + let currentCodeFolder = '' + for (const umlClass of umlClassesSortedByCodePath) { + const codeFolder = dirname(umlClass.relativePath) + if (currentCodeFolder !== codeFolder) { + // Need to close off the last subgraph if not the first + if (currentCodeFolder != '') { + dotString += '\n}' + } - dotString += ` + dotString += ` subgraph ${getSubGraphName(clusterFolders)} { label="${codeFolder}"` - currentCodeFolder = codeFolder - } - dotString += convertClass2Dot(umlClass, classOptions) + currentCodeFolder = codeFolder } + dotString += convertClass2Dot(umlClass, classOptions) + } - // Need to close off the last subgraph if not the first - if (currentCodeFolder != '') { - dotString += '\n}' - } + // Need to close off the last subgraph if not the first + if (currentCodeFolder != '') { + dotString += '\n}' + } - dotString += addAssociationsToDot(umlClasses, classOptions) + dotString += addAssociationsToDot(umlClasses, classOptions) - // Need to close off the last the digraph - dotString += '\n}' + // Need to close off the last the digraph + dotString += '\n}' - // debug(dotString) + // debug(dotString) - return dotString + return dotString } let subGraphCount = 0 function getSubGraphName(clusterFolders: boolean = false) { - if (clusterFolders) { - return ` cluster_${subGraphCount++}` - } - return ` graph_${subGraphCount++}` + if (clusterFolders) { + return ` cluster_${subGraphCount++}` + } + return ` graph_${subGraphCount++}` } function sortUmlClassesByCodePath(umlClasses: UmlClass[]): UmlClass[] { - return umlClasses.sort((a, b) => { - if (a.relativePath < b.relativePath) { - return -1 - } - if (a.relativePath > b.relativePath) { - return 1 - } - return 0 - }) + return umlClasses.sort((a, b) => { + if (a.relativePath < b.relativePath) { + return -1 + } + if (a.relativePath > b.relativePath) { + return 1 + } + return 0 + }) } export function addAssociationsToDot( - umlClasses: UmlClass[], - classOptions: ClassOptions = {} + umlClasses: UmlClass[], + classOptions: ClassOptions = {} ): string { - let dotString: string = '' - - // for each class - for (const sourceUmlClass of umlClasses) { - if (!classOptions.hideEnums) { - // for each enum in the class - sourceUmlClass.enums.forEach((enumId) => { - // Has the enum been filtered out? eg depth limited - const targetUmlClass = umlClasses.find((c) => c.id === enumId) - if (targetUmlClass) { - // Draw aggregated link from contract to contract level Enum - dotString += `\n${enumId} -> ${sourceUmlClass.id} [arrowhead=diamond, weight=2]` - } - }) + let dotString: string = '' + + // for each class + for (const sourceUmlClass of umlClasses) { + if (!classOptions.hideEnums) { + // for each enum in the class + sourceUmlClass.enums.forEach((enumId) => { + // Has the enum been filtered out? eg depth limited + const targetUmlClass = umlClasses.find((c) => c.id === enumId) + if (targetUmlClass) { + // Draw aggregated link from contract to contract level Enum + dotString += `\n${enumId} -> ${sourceUmlClass.id} [arrowhead=diamond, weight=2]` } - if (!classOptions.hideStructs) { - // for each struct in the class - sourceUmlClass.structs.forEach((structId) => { - // Has the struct been filtered out? eg depth limited - const targetUmlClass = umlClasses.find((c) => c.id === structId) - if (targetUmlClass) { - // Draw aggregated link from contract to contract level Struct - dotString += `\n${structId} -> ${sourceUmlClass.id} [arrowhead=diamond, weight=2]` - } - }) + }) + } + if (!classOptions.hideStructs) { + // for each struct in the class + sourceUmlClass.structs.forEach((structId) => { + // Has the struct been filtered out? eg depth limited + const targetUmlClass = umlClasses.find((c) => c.id === structId) + if (targetUmlClass) { + // Draw aggregated link from contract to contract level Struct + dotString += `\n${structId} -> ${sourceUmlClass.id} [arrowhead=diamond, weight=2]` } + }) + } - // for each association in that class - for (const association of Object.values(sourceUmlClass.associations)) { - const targetUmlClass = findAssociatedClass( - association, - sourceUmlClass, - umlClasses - ) - if (targetUmlClass) { - dotString += addAssociationToDot( - sourceUmlClass, - targetUmlClass, - association, - classOptions - ) - } - } + // for each association in that class + for (const association of Object.values(sourceUmlClass.associations)) { + const targetUmlClass = findAssociatedClass( + association, + sourceUmlClass, + umlClasses + ) + if (targetUmlClass) { + dotString += addAssociationToDot( + sourceUmlClass, + targetUmlClass, + association, + classOptions + ) + } } + } - return dotString + return dotString } function addAssociationToDot( - sourceUmlClass: UmlClass, - targetUmlClass: UmlClass, - association: Association, - classOptions: ClassOptions = {} + sourceUmlClass: UmlClass, + targetUmlClass: UmlClass, + association: Association, + classOptions: ClassOptions = {} ): string { - // do not include library or interface associations if hidden - // Or associations to Structs, Enums or Constants if they are hidden - if ( - (classOptions.hideLibraries && + // do not include library or interface associations if hidden + // Or associations to Structs, Enums or Constants if they are hidden + if ( + (classOptions.hideLibraries && (sourceUmlClass.stereotype === ClassStereotype.Library || targetUmlClass.stereotype === ClassStereotype.Library)) || (classOptions.hideInterfaces && @@ -408,28 +408,28 @@ function addAssociationToDot( targetUmlClass.stereotype === ClassStereotype.Enum) || (classOptions.hideConstants && targetUmlClass.stereotype === ClassStereotype.Constant) - ) { - return '' - } + ) { + return '' + } - let dotString = `\n${sourceUmlClass.id} -> ${targetUmlClass.id} [` + let dotString = `\n${sourceUmlClass.id} -> ${targetUmlClass.id} [` - if ( - association.referenceType == ReferenceType.Memory || + if ( + association.referenceType == ReferenceType.Memory || (association.realization && targetUmlClass.stereotype === ClassStereotype.Interface) - ) { - dotString += 'style=dashed, ' - } + ) { + dotString += 'style=dashed, ' + } - if (association.realization) { - dotString += 'arrowhead=empty, arrowsize=3, ' - if (!targetUmlClass.stereotype) { - dotString += 'weight=4, ' - } else { - dotString += 'weight=3, ' - } + if (association.realization) { + dotString += 'arrowhead=empty, arrowsize=3, ' + if (!targetUmlClass.stereotype) { + dotString += 'weight=4, ' + } else { + dotString += 'weight=3, ' } + } - return dotString + ']' + return dotString + ']' } diff --git a/apps/remix-ide/src/app/providers/custom-vm-fork-provider.tsx b/apps/remix-ide/src/app/providers/custom-vm-fork-provider.tsx index c923560eb1..d4f9c81297 100644 --- a/apps/remix-ide/src/app/providers/custom-vm-fork-provider.tsx +++ b/apps/remix-ide/src/app/providers/custom-vm-fork-provider.tsx @@ -29,23 +29,23 @@ export class CustomForkVMProvider extends BasicVMProvider { const body = () => { return
Please provide information about the custom fork. If the node URL is not provided, the VM will start with an empty state. -
- - +
+ + +
+
+ + +
+
+ + +
-
- - -
-
- - -
-
} const result = await ((): Promise => { return new Promise((resolve, reject) => { diff --git a/apps/remix-ide/src/app/state/registry.ts b/apps/remix-ide/src/app/state/registry.ts index dafe13654b..dc3655293f 100644 --- a/apps/remix-ide/src/app/state/registry.ts +++ b/apps/remix-ide/src/app/state/registry.ts @@ -4,35 +4,35 @@ type registryEntry = { } export default class Registry { - private static instance: Registry; - private state: any + private static instance: Registry; + private state: any - private constructor () { - this.state = {} - } - - public static getInstance (): Registry { - if (!Registry.instance) { - Registry.instance = new Registry() - } + private constructor () { + this.state = {} + } - return Registry.instance + public static getInstance (): Registry { + if (!Registry.instance) { + Registry.instance = new Registry() } - public put (entry: registryEntry) { - if (this.state[entry.name]) return this.state[entry.name] - const server = { + return Registry.instance + } + + public put (entry: registryEntry) { + if (this.state[entry.name]) return this.state[entry.name] + const server = { // uid: serveruid, - api: entry.api - } - this.state[entry.name] = { server } - return server + api: entry.api } + this.state[entry.name] = { server } + return server + } - public get (name: string) { - const state = this.state[name] - if (!state) return - const server = state.server - return server - } + public get (name: string) { + const state = this.state[name] + if (!state) return + const server = state.server + return server + } } diff --git a/apps/remix-ide/src/app/tabs/analysis-tab.js b/apps/remix-ide/src/app/tabs/analysis-tab.js index 53a20a5042..9a57c16516 100644 --- a/apps/remix-ide/src/app/tabs/analysis-tab.js +++ b/apps/remix-ide/src/app/tabs/analysis-tab.js @@ -81,10 +81,10 @@ class AnalysisTab extends ViewPlugin { updateComponent(state) { return + registry={state.registry} + analysisModule={state.analysisModule} + event={state.event} + /> } renderComponent () { diff --git a/apps/remix-ide/src/app/tabs/search.tsx b/apps/remix-ide/src/app/tabs/search.tsx index 6705428a5f..e742281d3e 100644 --- a/apps/remix-ide/src/app/tabs/search.tsx +++ b/apps/remix-ide/src/app/tabs/search.tsx @@ -3,31 +3,31 @@ import * as packageJson from '../../../../../package.json' import React from 'react' // eslint-disable-line import { SearchTab } from '@remix-ui/search' const profile = { - name: 'search', - displayName: 'Search in files', - methods: [''], - events: [], - icon: 'assets/img/search_icon.webp', - description: 'Find and replace in file explorer', - kind: '', - location: 'sidePanel', - documentation: '', - version: packageJson.version, - maintainedBy: 'Remix' - } + name: 'search', + displayName: 'Search in files', + methods: [''], + events: [], + icon: 'assets/img/search_icon.webp', + description: 'Find and replace in file explorer', + kind: '', + location: 'sidePanel', + documentation: '', + version: packageJson.version, + maintainedBy: 'Remix' +} export class SearchPlugin extends ViewPlugin { - constructor () { - super(profile) - } + constructor () { + super(profile) + } - render() { - return ( -
- -
- ); - } + render() { + return ( +
+ +
+ ); + } } diff --git a/apps/remix-ide/src/app/tabs/theme-module.js b/apps/remix-ide/src/app/tabs/theme-module.js index f6e77705ba..e1e066c4b5 100644 --- a/apps/remix-ide/src/app/tabs/theme-module.js +++ b/apps/remix-ide/src/app/tabs/theme-module.js @@ -39,7 +39,7 @@ export class ThemeModule extends Plugin { this.themes = {} themes.map((theme) => { this.themes[theme.name.toLocaleLowerCase()] = { - ...theme, + ...theme, url: window.location.origin + ( window.location.pathname.startsWith('/address/') || window.location.pathname.endsWith('.sol') ? '/' : window.location.pathname ) + theme.url } }) diff --git a/apps/remix-ide/src/app/tabs/web3-provider.js b/apps/remix-ide/src/app/tabs/web3-provider.js index f375e52554..0158ff11f9 100644 --- a/apps/remix-ide/src/app/tabs/web3-provider.js +++ b/apps/remix-ide/src/app/tabs/web3-provider.js @@ -60,8 +60,8 @@ export class Web3ProviderModule extends Plugin { reject(new Error('User denied permission')) } }).catch((e) => { - reject(e) - }) + reject(e) + }) }) } diff --git a/apps/remix-ide/src/app/udapp/run-tab.js b/apps/remix-ide/src/app/udapp/run-tab.js index d90246464b..49983f5e39 100644 --- a/apps/remix-ide/src/app/udapp/run-tab.js +++ b/apps/remix-ide/src/app/udapp/run-tab.js @@ -136,8 +136,8 @@ export class RunTab extends ViewPlugin { if (window && window.ethereum && !(window.ethereum.isTrustWallet || window.ethereum.selectedProvider?.isTrustWallet)) { const displayNameInjected = `Injected Provider${(window && window.ethereum && !(window.ethereum.providers && !window.ethereum.selectedProvider)) ? window.ethereum.isCoinbaseWallet || window.ethereum.selectedProvider?.isCoinbaseWallet ? ' - Coinbase' : - window.ethereum.isBraveWallet || window.ethereum.selectedProvider?.isBraveWallet ? ' - Brave' : - window.ethereum.isMetaMask || window.ethereum.selectedProvider?.isMetaMask ? ' - MetaMask' : '' : ''}` + window.ethereum.isBraveWallet || window.ethereum.selectedProvider?.isBraveWallet ? ' - Brave' : + window.ethereum.isMetaMask || window.ethereum.selectedProvider?.isMetaMask ? ' - MetaMask' : '' : ''}` await addProvider('injected', displayNameInjected, true, false) } else if (window && !window.ethereum) { // we still add "injected" if there's no provider (just so it's visible to the user). diff --git a/apps/remix-ide/src/app/ui/landing-page/landing-page.js b/apps/remix-ide/src/app/ui/landing-page/landing-page.js index b07e2c9432..077d6507f3 100644 --- a/apps/remix-ide/src/app/ui/landing-page/landing-page.js +++ b/apps/remix-ide/src/app/ui/landing-page/landing-page.js @@ -31,7 +31,7 @@ export class LandingPage extends ViewPlugin { render () { return
- -
- } + + + } } diff --git a/apps/remix-ide/src/blockchain/blockchain.tsx b/apps/remix-ide/src/blockchain/blockchain.tsx index e6b719f8d1..61aeeb74df 100644 --- a/apps/remix-ide/src/blockchain/blockchain.tsx +++ b/apps/remix-ide/src/blockchain/blockchain.tsx @@ -312,52 +312,52 @@ export class Blockchain extends Plugin { } async saveDeployedContractStorageLayout (contractObject, proxyAddress, networkInfo) { - const { contractName, implementationAddress } = contractObject - const networkName = networkInfo.name === 'custom' ? networkInfo.name + '-' + networkInfo.id : networkInfo.name - const hasPreviousDeploys = await this.call('fileManager', 'exists', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`) - // TODO: make deploys folder read only. - if (hasPreviousDeploys) { - const deployments = await this.call('fileManager', 'readFile', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`) - const parsedDeployments = JSON.parse(deployments) - const proxyDeployment = parsedDeployments.deployments[proxyAddress] - - if (proxyDeployment) { - const oldImplementationAddress = proxyDeployment.implementationAddress - const hasPreviousBuild = await this.call('fileManager', 'exists', `.deploys/upgradeable-contracts/${networkName}/solc-${oldImplementationAddress}.json`) - - if (hasPreviousBuild) await this.call('fileManager', 'remove', `.deploys/upgradeable-contracts/${networkName}/solc-${oldImplementationAddress}.json`) - } - parsedDeployments.deployments[proxyAddress] = { - date: new Date().toISOString(), - contractName: contractName, - fork: networkInfo.currentFork, - implementationAddress: implementationAddress, - solcOutput: contractObject.compiler.data, - solcInput: contractObject.compiler.source - } - await this.call('fileManager', 'writeFile', `.deploys/upgradeable-contracts/${networkName}/solc-${implementationAddress}.json`, JSON.stringify({ - solcInput: contractObject.compiler.source, - solcOutput: contractObject.compiler.data - }, null, 2)) - await this.call('fileManager', 'writeFile', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`, JSON.stringify(parsedDeployments, null, 2)) - } else { - await this.call('fileManager', 'writeFile', `.deploys/upgradeable-contracts/${networkName}/solc-${implementationAddress}.json`, JSON.stringify({ - solcInput: contractObject.compiler.source, - solcOutput: contractObject.compiler.data - }, null, 2)) - await this.call('fileManager', 'writeFile', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`, JSON.stringify({ - id: networkInfo.id, - network: networkInfo.name, - deployments: { - [proxyAddress]: { - date: new Date().toISOString(), - contractName: contractName, - fork: networkInfo.currentFork, - implementationAddress: implementationAddress - } - } - }, null, 2)) + const { contractName, implementationAddress } = contractObject + const networkName = networkInfo.name === 'custom' ? networkInfo.name + '-' + networkInfo.id : networkInfo.name + const hasPreviousDeploys = await this.call('fileManager', 'exists', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`) + // TODO: make deploys folder read only. + if (hasPreviousDeploys) { + const deployments = await this.call('fileManager', 'readFile', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`) + const parsedDeployments = JSON.parse(deployments) + const proxyDeployment = parsedDeployments.deployments[proxyAddress] + + if (proxyDeployment) { + const oldImplementationAddress = proxyDeployment.implementationAddress + const hasPreviousBuild = await this.call('fileManager', 'exists', `.deploys/upgradeable-contracts/${networkName}/solc-${oldImplementationAddress}.json`) + + if (hasPreviousBuild) await this.call('fileManager', 'remove', `.deploys/upgradeable-contracts/${networkName}/solc-${oldImplementationAddress}.json`) + } + parsedDeployments.deployments[proxyAddress] = { + date: new Date().toISOString(), + contractName: contractName, + fork: networkInfo.currentFork, + implementationAddress: implementationAddress, + solcOutput: contractObject.compiler.data, + solcInput: contractObject.compiler.source } + await this.call('fileManager', 'writeFile', `.deploys/upgradeable-contracts/${networkName}/solc-${implementationAddress}.json`, JSON.stringify({ + solcInput: contractObject.compiler.source, + solcOutput: contractObject.compiler.data + }, null, 2)) + await this.call('fileManager', 'writeFile', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`, JSON.stringify(parsedDeployments, null, 2)) + } else { + await this.call('fileManager', 'writeFile', `.deploys/upgradeable-contracts/${networkName}/solc-${implementationAddress}.json`, JSON.stringify({ + solcInput: contractObject.compiler.source, + solcOutput: contractObject.compiler.data + }, null, 2)) + await this.call('fileManager', 'writeFile', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`, JSON.stringify({ + id: networkInfo.id, + network: networkInfo.name, + deployments: { + [proxyAddress]: { + date: new Date().toISOString(), + contractName: contractName, + fork: networkInfo.currentFork, + implementationAddress: implementationAddress + } + } + }, null, 2)) + } } async getEncodedFunctionHex (args, funABI) { @@ -601,9 +601,9 @@ export class Blockchain extends Plugin { if (viewEtherScanLink) { this.call('terminal', 'logHtml', - ( + ( view on etherscan - )) + )) } }) }) @@ -808,20 +808,20 @@ export class Blockchain extends Plugin { if (hhlogs && hhlogs.length) { const finalLogs =
console.log:
- { - hhlogs.map((log) => { - let formattedLog - // Hardhat implements the same formatting options that can be found in Node.js' console.log, - // which in turn uses util.format: https://nodejs.org/dist/latest-v12.x/docs/api/util.html#util_util_format_format_args - // For example: console.log("Name: %s, Age: %d", remix, 6) will log 'Name: remix, Age: 6' - // We check first arg to determine if 'util.format' is needed - if (typeof log[0] === 'string' && (log[0].includes('%s') || log[0].includes('%d'))) { - formattedLog = format(log[0], ...log.slice(1)) - } else { - formattedLog = log.join(' ') - } - return
{formattedLog}
- })} + { + hhlogs.map((log) => { + let formattedLog + // Hardhat implements the same formatting options that can be found in Node.js' console.log, + // which in turn uses util.format: https://nodejs.org/dist/latest-v12.x/docs/api/util.html#util_util_format_format_args + // For example: console.log("Name: %s, Age: %d", remix, 6) will log 'Name: remix, Age: 6' + // We check first arg to determine if 'util.format' is needed + if (typeof log[0] === 'string' && (log[0].includes('%s') || log[0].includes('%d'))) { + formattedLog = format(log[0], ...log.slice(1)) + } else { + formattedLog = log.join(' ') + } + return
{formattedLog}
+ })}
_paq.push(['trackEvent', 'udapp', 'hardhat', 'console.log']) this.call('terminal', 'logHtml', finalLogs) diff --git a/apps/remix-ide/src/blockchain/helper.ts b/apps/remix-ide/src/blockchain/helper.ts index 5fde384369..7df7546d20 100644 --- a/apps/remix-ide/src/blockchain/helper.ts +++ b/apps/remix-ide/src/blockchain/helper.ts @@ -1,14 +1,14 @@ const transactionDetailsLinks = { - Main: 'https://www.etherscan.io/tx/', - Rinkeby: 'https://rinkeby.etherscan.io/tx/', - Ropsten: 'https://ropsten.etherscan.io/tx/', - Kovan: 'https://kovan.etherscan.io/tx/', - Goerli: 'https://goerli.etherscan.io/tx/', - Sepolia: 'https://sepolia.etherscan.io/tx/' - } + Main: 'https://www.etherscan.io/tx/', + Rinkeby: 'https://rinkeby.etherscan.io/tx/', + Ropsten: 'https://ropsten.etherscan.io/tx/', + Kovan: 'https://kovan.etherscan.io/tx/', + Goerli: 'https://goerli.etherscan.io/tx/', + Sepolia: 'https://sepolia.etherscan.io/tx/' +} - export function etherScanLink (network: string, hash: string): string { - if (transactionDetailsLinks[network]) { - return transactionDetailsLinks[network] + hash - } - } \ No newline at end of file +export function etherScanLink (network: string, hash: string): string { + if (transactionDetailsLinks[network]) { + return transactionDetailsLinks[network] + hash + } +} \ No newline at end of file diff --git a/apps/remix-ide/src/blockchain/providers/injected.ts b/apps/remix-ide/src/blockchain/providers/injected.ts index 557ea32896..bc6ab49e7f 100644 --- a/apps/remix-ide/src/blockchain/providers/injected.ts +++ b/apps/remix-ide/src/blockchain/providers/injected.ts @@ -20,7 +20,7 @@ export class InjectedProvider { } async resetEnvironment () { - /* Do nothing. */ + /* Do nothing. */ } async getBalanceInEther (address) { diff --git a/apps/remix-ide/src/blockchain/providers/node.ts b/apps/remix-ide/src/blockchain/providers/node.ts index fbe0159c19..65116b4923 100644 --- a/apps/remix-ide/src/blockchain/providers/node.ts +++ b/apps/remix-ide/src/blockchain/providers/node.ts @@ -30,7 +30,7 @@ export class NodeProvider { } async resetEnvironment () { - /* Do nothing. */ + /* Do nothing. */ } async getBalanceInEther (address) { diff --git a/apps/remix-ide/src/blockchain/providers/vm.ts b/apps/remix-ide/src/blockchain/providers/vm.ts index 958eb9f6d4..4234e42616 100644 --- a/apps/remix-ide/src/blockchain/providers/vm.ts +++ b/apps/remix-ide/src/blockchain/providers/vm.ts @@ -59,12 +59,12 @@ export class VMProvider { reject(new Error(msg.data.error)) } } else if (msg.data.cmd === 'newAccountResult') { - if (this.newAccountCallback[msg.data.stamp]) { - this.newAccountCallback[msg.data.stamp](msg.data.error, msg.data.result) - delete this.newAccountCallback[msg.data.stamp] + if (this.newAccountCallback[msg.data.stamp]) { + this.newAccountCallback[msg.data.stamp](msg.data.error, msg.data.result) + delete this.newAccountCallback[msg.data.stamp] + } } - } - }) + }) this.worker.postMessage({ cmd: 'init', fork: this.executionContext.getCurrentFork(), nodeUrl: provider?.options['nodeUrl'], blockNumber: provider?.options['blockNumber']}) }) } diff --git a/apps/remix-ide/src/blockchain/providers/worker-vm.ts b/apps/remix-ide/src/blockchain/providers/worker-vm.ts index b261cda864..64a8d0255b 100644 --- a/apps/remix-ide/src/blockchain/providers/worker-vm.ts +++ b/apps/remix-ide/src/blockchain/providers/worker-vm.ts @@ -4,74 +4,74 @@ let provider: Provider = null self.onmessage = (e: MessageEvent) => { const data = e.data switch (data.cmd) { - case 'init': - { - provider = new Provider({ fork: data.fork, nodeUrl: data.nodeUrl, blockNumber: data.blockNumber }) - provider.init().then(() => { - self.postMessage({ - cmd: 'initiateResult', - stamp: data.stamp - }) - }).catch((error) => { + case 'init': + { + provider = new Provider({ fork: data.fork, nodeUrl: data.nodeUrl, blockNumber: data.blockNumber }) + provider.init().then(() => { + self.postMessage({ + cmd: 'initiateResult', + stamp: data.stamp + }) + }).catch((error) => { + self.postMessage({ + cmd: 'initiateResult', + error, + stamp: data.stamp + }) + }) + break + } + case 'sendAsync': + { + if (provider) { + provider.sendAsync(data.query, (error, result) => { self.postMessage({ - cmd: 'initiateResult', + cmd: 'sendAsyncResult', error, + result, stamp: data.stamp }) }) - break + } else { + self.postMessage({ + cmd: 'sendAsyncResult', + error: 'Provider not instantiated', + result: null, + stamp: data.stamp + }) } - case 'sendAsync': - { - if (provider) { - provider.sendAsync(data.query, (error, result) => { - self.postMessage({ - cmd: 'sendAsyncResult', - error, - result, - stamp: data.stamp - }) - }) - } else { - self.postMessage({ - cmd: 'sendAsyncResult', - error: 'Provider not instantiated', - result: null, - stamp: data.stamp - }) - } - break + break + } + case 'addAccount': + { + if (provider) { + provider.Accounts._addAccount(data.privateKey, data.balance) } - case 'addAccount': - { - if (provider) { - provider.Accounts._addAccount(data.privateKey, data.balance) - } - break + break + } + case 'newAccount': + { + if (provider) { + provider.Accounts.newAccount((error, address: string) => { + if (error) { + self.postMessage({ + cmd: 'newAccountResult', + error, + stamp: data.stamp + }) + } else { + self.postMessage({ + cmd: 'newAccountResult', + result: address, + stamp: data.stamp + }) + } + }) } - case 'newAccount': - { - if (provider) { - provider.Accounts.newAccount((error, address: string) => { - if (error) { - self.postMessage({ - cmd: 'newAccountResult', - error, - stamp: data.stamp - }) - } else { - self.postMessage({ - cmd: 'newAccountResult', - result: address, - stamp: data.stamp - }) - } - }) - } - break - } + break + } } } From e9490ac02bbd5ce151da20e21e3ccb024cbcb07e Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sun, 23 Jul 2023 09:41:01 +0200 Subject: [PATCH 8/9] create scripts --- lint-fix-targets.js | 23 + lintfix.sh | 3 + projects.json | 9593 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 9619 insertions(+) create mode 100644 lint-fix-targets.js create mode 100644 lintfix.sh create mode 100644 projects.json diff --git a/lint-fix-targets.js b/lint-fix-targets.js new file mode 100644 index 0000000000..1898b3bc2c --- /dev/null +++ b/lint-fix-targets.js @@ -0,0 +1,23 @@ +const { spawnSync, execSync } = require('child_process') +const fs = require('fs') +const { exit } = require('process') + +execSync('yarn nx graph --file=./projects.json') + +const file = fs.readFileSync('projects.json') +const projects = JSON.parse(file) +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') + if(result.status == 0){ + console.log('success') + }else{ + console.log(result.stdout.toString()) + console.log(result.stderr.toString()) + } + } +} diff --git a/lintfix.sh b/lintfix.sh new file mode 100644 index 0000000000..8d78ddef76 --- /dev/null +++ b/lintfix.sh @@ -0,0 +1,3 @@ +yarn nx run remix-ui:lint --fix +yarn nx run remix-ide:lint --fix + diff --git a/projects.json b/projects.json new file mode 100644 index 0000000000..8d3b962966 --- /dev/null +++ b/projects.json @@ -0,0 +1,9593 @@ +{ + "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": [] +} From 384613aeeb4cebbd3fb1efa5f3c7355eae5f0291 Mon Sep 17 00:00:00 2001 From: bunsenstraat Date: Sun, 23 Jul 2023 09:43:31 +0200 Subject: [PATCH 9/9] fix other targets --- libs/ghaction-helper/src/methods.ts | 2 +- libs/ghaction-helper/src/signer.ts | 82 +- .../modules/lowLevelCalls.ts | 32 +- .../analysis/staticAnalysisCommon-test.ts | 30 +- .../staticAnalysisIntegration-test-0.5.0.ts | 12 +- .../src/lib/compiler-artefacts.ts | 2 +- .../src/lib/compiler-content-imports.ts | 4 +- .../src/lib/compiler-metadata.ts | 8 +- .../src/lib/constants/uups.ts | 156 +- libs/remix-core-plugin/src/types/contract.ts | 4 +- libs/remix-debug/test.ts | 2 +- .../test/decoder/localsTests/helper.ts | 16 +- .../test/decoder/stateTests/mapping.ts | 104 +- libs/remix-debug/test/resources/ast.ts | 252 +- libs/remix-lib/src/execution/txFormat.ts | 26 +- libs/remix-lib/src/hash.ts | 32 +- libs/remix-lib/src/util.ts | 2 +- libs/remix-lib/test/txFormat.ts | 4 +- libs/remix-simulator/src/methods/blocks.ts | 66 +- .../src/compiler/compiler-abstract.ts | 92 +- libs/remix-solidity/src/compiler/compiler.ts | 40 +- libs/remix-solidity/src/compiler/types.ts | 2 +- .../src/lib/es-web-worker/compiler-worker.ts | 66 +- .../es-web-worker/es-web-worker-handler.ts | 12 +- libs/remix-tests/src/logger.ts | 44 +- libs/remix-tests/tests/testRunner.cli.spec.ts | 50 +- libs/remix-tests/tests/testRunner.spec.ts | 832 +- .../components/modals/modal-wrapper.tsx | 54 +- .../app/src/lib/remix-app/reducer/modals.ts | 134 +- .../checkbox/src/lib/remix-ui-checkbox.tsx | 36 +- .../copy-to-clipboard/copy-to-clipboard.tsx | 4 +- .../debugger-ui/src/lib/api/debugger-api.ts | 20 +- .../lib/button-navigator/button-navigator.tsx | 134 +- .../debugger-ui/src/lib/debugger-ui.tsx | 2 +- .../src/lib/tx-browser/tx-browser.tsx | 22 +- .../src/reducers/assembly-items.ts | 88 +- .../debugger-ui/src/reducers/calldata.ts | 88 +- .../drag-n-drop/src/lib/drag-n-drop.tsx | 38 +- .../remix-ui/editor/src/lib/actions/editor.ts | 152 +- .../lib/helpers/retrieveNodesAtPosition.ts | 18 +- .../providers/completion/completionGlobals.ts | 1378 +-- .../src/lib/providers/completionProvider.ts | 744 +- .../src/lib/providers/definitionProvider.ts | 138 +- .../src/lib/providers/highlightProvider.ts | 56 +- .../editor/src/lib/providers/hoverProvider.ts | 362 +- .../src/lib/providers/referenceProvider.ts | 66 +- .../editor/src/lib/remix-ui-editor.tsx | 4 +- libs/remix-ui/editor/src/lib/web-types.ts | 454 +- .../lib/components/file-decoration-icon.tsx | 18 +- .../file-decoration-custom-icon.tsx | 6 +- .../file-decoration-error-icon.tsx | 6 +- .../file-decoration-tooltip.tsx | 2 +- .../file-decoration-warning-icon.tsx | 2 +- .../file-decorators/src/lib/helper/index.tsx | 12 +- .../file-decorators/src/lib/types/index.ts | 4 +- .../src/lib/components/PluginViewWrapper.tsx | 24 +- .../src/lib/components/custom-dropdown.tsx | 2 +- .../helper/src/lib/helper-components.tsx | 4 +- .../helper/src/lib/remix-ui-helper.ts | 4 +- .../src/lib/components/homeTabFile.tsx | 26 +- .../src/lib/components/homeTabGetStarted.tsx | 40 +- .../src/lib/components/homeTabLearn.tsx | 10 +- .../src/lib/remix-ui-locale-module.tsx | 50 +- .../panel/src/lib/plugins/panel-header.tsx | 2 +- .../src/lib/permission-dialog.tsx | 6 +- .../src/lib/reducers/pluginManagerReducer.ts | 8 +- libs/remix-ui/plugin-manager/src/types.d.ts | 30 +- .../run-tab/src/lib/actions/deploy.ts | 64 +- .../run-tab/src/lib/components/account.tsx | 102 +- .../src/lib/components/contractDropdownUI.tsx | 22 +- .../src/lib/components/contractGUI.tsx | 144 +- .../src/lib/components/deployButton.tsx | 60 +- .../src/lib/components/environment.tsx | 6 +- .../lib/components/instanceContainerUI.tsx | 6 +- .../src/lib/components/recorderCardUI.tsx | 12 +- .../src/lib/components/universalDappUI.tsx | 2 +- .../run-tab/src/lib/components/value.tsx | 30 +- .../run-tab/src/lib/reducers/runTab.ts | 808 +- .../run-tab/src/lib/types/blockchain.d.ts | 106 +- .../src/lib/types/execution-context.d.ts | 64 +- .../run-tab/src/lib/types/injected.d.ts | 18 +- libs/remix-ui/run-tab/src/lib/types/node.d.ts | 20 +- .../run-tab/src/lib/types/run-tab.d.ts | 76 +- libs/remix-ui/run-tab/src/lib/types/vm.d.ts | 26 +- .../src/lib/components/FindContainer.tsx | 2 +- .../search/src/lib/components/Replace.tsx | 2 +- .../search/src/lib/components/StopSearch.tsx | 14 +- .../search/src/lib/components/Undo.tsx | 34 +- .../src/lib/components/results/ResultItem.tsx | 4 +- .../lib/components/results/ResultSummary.tsx | 52 +- .../src/lib/components/results/Results.tsx | 2 +- .../lib/components/results/SearchHelper.ts | 154 +- .../search/src/lib/reducers/Reducer.ts | 334 +- libs/remix-ui/search/src/lib/types/index.ts | 42 +- libs/remix-ui/settings/src/lib/constants.ts | 16 +- .../settings/src/lib/etherscan-settings.tsx | 4 +- .../settings/src/lib/remix-ui-settings.tsx | 52 +- .../settings/src/lib/settingsReducer.ts | 162 +- .../src/lib/compiler-container.tsx | 86 +- .../src/lib/logic/compileTabLogic.ts | 2 +- .../src/lib/logic/flattenerUtilities.ts | 232 +- .../src/lib/reducers/compiler.ts | 64 +- .../src/lib/solidity-uml-gen.tsx | 8 +- .../src/lib/logic/testTabLogic.ts | 174 +- .../src/lib/solidity-unit-testing.tsx | 36 +- .../src/lib/Button/StaticAnalyserButton.tsx | 4 +- .../src/lib/actions/staticAnalysisActions.ts | 12 +- .../src/lib/reducers/staticAnalysisReducer.ts | 24 +- .../src/lib/remix-ui-static-analyser.tsx | 472 +- libs/remix-ui/tabs/src/lib/remix-ui-tabs.tsx | 34 +- .../src/lib/reducers/terminalReducer.ts | 286 +- .../terminal/src/lib/remix-ui-terminal.tsx | 2 +- .../src/lib/remix-ui-theme-module.tsx | 50 +- .../tooltip-popup/src/lib/tooltip-popup.tsx | 6 +- .../src/lib/tree-view-item/tree-view-item.tsx | 2 +- .../src/lib/components/Badge.tsx | 36 +- .../src/lib/components/Icon.tsx | 6 +- .../src/lib/vertical-icons-context-menu.tsx | 18 +- .../workspace/src/lib/actions/workspace.ts | 150 +- .../components/file-explorer-context-menu.tsx | 156 +- .../src/lib/components/file-explorer-menu.tsx | 28 +- .../src/lib/components/file-explorer.tsx | 86 +- .../src/lib/components/upload-file.tsx | 4 +- .../components/workspace-hamburger-item.tsx | 176 +- .../lib/components/workspace-hamburger.tsx | 124 +- .../workspace/src/lib/contexts/index.ts | 2 +- .../workspace/src/lib/reducers/workspace.ts | 932 +- .../workspace/src/lib/remix-ui-workspace.tsx | 202 +- .../src/lib/utils/gitStatusFilter.ts | 6 +- libs/remix-url-resolver/src/resolve.ts | 112 +- .../basic-contract-deploy.ts | 24 +- .../create2-factory-deploy.ts | 466 +- .../contract-deployer/index.ts | 20 +- .../src/script-templates/etherscan/index.ts | 20 +- .../etherscan/receiptGuidScript.ts | 2 +- .../etherscan/verifyScript.ts | 8 +- .../src/templates/blank/index.ts | 8 +- .../src/templates/gnosisSafeMultisig/index.ts | 28 +- .../scripts/deploy_with_ethers.ts | 14 +- .../scripts/deploy_with_web3.ts | 12 +- .../gnosisSafeMultisig/scripts/ethers-lib.ts | 24 +- .../gnosisSafeMultisig/scripts/web3-lib.ts | 34 +- .../src/templates/ozerc1155/index.ts | 44 +- .../ozerc1155/scripts/deploy_with_ethers.ts | 14 +- .../ozerc1155/scripts/deploy_with_web3.ts | 12 +- .../templates/ozerc1155/scripts/ethers-lib.ts | 24 +- .../templates/ozerc1155/scripts/web3-lib.ts | 34 +- .../src/templates/ozerc20/index.ts | 54 +- .../ozerc20/scripts/deploy_with_ethers.ts | 14 +- .../ozerc20/scripts/deploy_with_web3.ts | 12 +- .../templates/ozerc20/scripts/ethers-lib.ts | 24 +- .../src/templates/ozerc20/scripts/web3-lib.ts | 34 +- .../src/templates/ozerc721/index.ts | 46 +- .../ozerc721/scripts/deploy_with_ethers.ts | 14 +- .../ozerc721/scripts/deploy_with_web3.ts | 12 +- .../templates/ozerc721/scripts/ethers-lib.ts | 24 +- .../templates/ozerc721/scripts/web3-lib.ts | 34 +- .../src/templates/remixDefault/index.ts | 48 +- .../scripts/deploy_with_ethers.ts | 14 +- .../remixDefault/scripts/deploy_with_web3.ts | 12 +- .../remixDefault/scripts/ethers-lib.ts | 24 +- .../remixDefault/scripts/web3-lib.ts | 34 +- .../src/templates/zeroxErc20/index.ts | 32 +- .../zeroxErc20/scripts/deploy_with_ethers.ts | 14 +- .../zeroxErc20/scripts/deploy_with_web3.ts | 12 +- .../zeroxErc20/scripts/ethers-lib.ts | 24 +- .../templates/zeroxErc20/scripts/web3-lib.ts | 34 +- libs/remixd/src/scripts/installSlither.ts | 40 +- lint-fix-targets.js | 2 +- lintfix.sh | 3 - projects.json | 9593 ----------------- 171 files changed, 6770 insertions(+), 16366 deletions(-) delete mode 100644 lintfix.sh delete mode 100644 projects.json 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 e4c49dfa8a..fe39eed3e8 100644 --- a/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx +++ b/libs/remix-ui/editor/src/lib/remix-ui-editor.tsx @@ -566,7 +566,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', @@ -769,7 +769,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": [] -}